确认并利用 SQL 盲注漏洞

确认并利用 SQL 盲注漏洞

  • 一、8.5确认并利用 SQL 盲注漏洞(获取数据库当前用户名)
    • (一)8.5.1 环境准备
    • (二)环境配置-kali linux中firefox配置为127.0.0.1 8080
    • (三)8.5.2 基于错误的 SQL 注入案例

一、8.5确认并利用 SQL 盲注漏洞(获取数据库当前用户名)

  • 在 sql 盲注中,不会回显任何报错信息,需要通过一些问题语句询问数据库结果对错。

(一)8.5.1 环境准备

  1. 开启OWASP靶机和Kali虚拟机
  2. 打开burpsuite
    确认并利用 SQL 盲注漏洞_第1张图片
  3. kali中登陆dvwa(用户名和密码都是 admin),进入 SQL Injection(Blind)盲注页面。
    确认并利用 SQL 盲注漏洞_第2张图片
    确认并利用 SQL 盲注漏洞_第3张图片

(二)环境配置-kali linux中firefox配置为127.0.0.1 8080

在Kali linux中将Firefox浏览器的Network Settings(网络配置)设置为127.0.0.1,端口8080,如下图示:
确认并利用 SQL 盲注漏洞_第4张图片
确认并利用 SQL 盲注漏洞_第5张图片
确认并利用 SQL 盲注漏洞_第6张图片
确认并利用 SQL 盲注漏洞_第7张图片

(三)8.5.2 基于错误的 SQL 注入案例

  1. 这个表单和上面的 sql 注入表单(SQL Injection)一模一样,输入 1,可以查看id 为 1 的用户信息。
    确认并利用 SQL 盲注漏洞_第8张图片
  2. 现在输入 1’ 测试,发现并不像 sql 注入(SQL Injection)一样报错。
    确认并利用 SQL 盲注漏洞_第9张图片
  3. 再输入 1’’ 看一下:
    确认并利用 SQL 盲注漏洞_第10张图片

结果显示了 id 为 1 的用户信息,这说明前面测试的 1’是 web 应用已经预料到的错误,这里很可能会有 sql 盲注漏洞,来继续猜测。

  1. 输入一个结果总是为假的参数试一下:
    输入 1’ and ‘1’='2
    因为 1 不等于 2,所以结果总是为假。可以发现应用没有给出选择条件的结果。
    确认并利用 SQL 盲注漏洞_第11张图片
  2. 接着构造一个始终为真的参数:
    1’ and ‘1’='1
    确认并利用 SQL 盲注漏洞_第12张图片
    可以发现应用给出了 id 为 1 的结果。这说明该表单存在 sql 盲注漏洞,可以输入猜测的语句函数来观察应用返回的结果,通过这个方法可以一步一步猜解出想知道的内容。
  3. 在教程中,首先需要知道数据库的用户名,所以首先尝试一下这个语句:
    1’ and 1=char_length(current_user()) and ‘1’='1
    确认并利用 SQL 盲注漏洞_第13张图片
    确认并利用 SQL 盲注漏洞_第14张图片
  4. 下一步找到 burpsuite 中的这个请求,并发送到 Intruder 模块
    确认并利用 SQL 盲注漏洞_第15张图片
    确认并利用 SQL 盲注漏洞_第16张图片
  5. 点击右侧的clear按钮,清空默认的攻击参数
    确认并利用 SQL 盲注漏洞_第17张图片
  6. 接着就可以通过添加攻击参数来构造有效载荷
    确认并利用 SQL 盲注漏洞_第18张图片
  7. 转到有效载荷(Payloads)内容,将有效载荷类型(Payload type)设置为 Numbers
    确认并利用 SQL 盲注漏洞_第19张图片
  8. 将数值内容设置为 1-15,步数为 1
    确认并利用 SQL 盲注漏洞_第20张图片
  9. 接着转到 Intruder 的 Settings 选项卡,清除 Grep 匹配(Grep-Match)列表,添加自己想要的回显字段,如:First name,来快速查看攻击结果。
    确认并利用 SQL 盲注漏洞_第21张图片
  10. 开始攻击(Start attack)按钮,从攻击结果得知,用户名是 6 位数。
    确认并利用 SQL 盲注漏洞_第22张图片
    (步骤6-13:是为了利用burpsuite获取数据库当前用户名的长度)
  11. 现在来猜解一下用户名的每个字符是什么。先猜测第一个,输入:
    1’ and current_user LIKE 'a%
    确认并利用 SQL 盲注漏洞_第23张图片
    %是 sql 语句中的通配符,它可以匹配任何字符串。这个语句的意思是猜测第一个字母是不是 a
  12. 同样的,把该请求发送到 intruder 模块,将 a 设置为改变参数。
    确认并利用 SQL 盲注漏洞_第24张图片
    确认并利用 SQL 盲注漏洞_第25张图片
    确认并利用 SQL 盲注漏洞_第26张图片
  13. 转到有效载荷(Payloads)内容,将有效载荷类型(Payload type)设置为 Simple list
    确认并利用 SQL 盲注漏洞_第27张图片
  14. 载荷列表是 a-z,1-9,和所有特殊符号的集合,需要自己构建。由于 sql 语句中的 select 查询不区分大小写,所以省略了大写字母。
    确认并利用 SQL 盲注漏洞_第28张图片
    确认并利用 SQL 盲注漏洞_第29张图片
  15. 接着转到 Intruder 的 Settings 选项卡,清除 Grep 匹配(Grep-Match)列表,添加自己想要的回显字段
  16. 开始攻击,从结果中发现第一个字母是 d
    确认并利用 SQL 盲注漏洞_第30张图片
  17. 下面继续猜测第二个字符,将输入参数改为
    1’ and current_user LIKE 'da%
  18. 现在目标是 d 后面的字符。继续攻击,可以从结果中看到第二个字符是 v
    确认并利用 SQL 盲注漏洞_第31张图片
    在这里插入图片描述
    确认并利用 SQL 盲注漏洞_第32张图片
  19. 下面继续猜解后面的字符。在结果中,你可能会发现%的结果总为 ture,这是因为%是通配符,它可以和任意一个字符匹配到。
    最后测试出来的结果是 dvwa@%,最后一个%匹配的是空字符,所以用户名是 dvwa@
  20. 为了验证结果,把 like 替换为=:
    1’ and current_user()='dvwa@%
    确认并利用 SQL 盲注漏洞_第33张图片
    结果显示找到了正确的用户名
    (步骤14-23:是为了利用burpsuite获取数据库当前用户名)

你可能感兴趣的:(sql,数据库)