DVWA开启渗透测试之旅与代码分析(二)
字数 1722 2025-08-18 11:39:04

DVWA渗透测试与代码分析:SQL注入与XSS跨站脚本漏洞详解

1. SQL注入漏洞分析

1.1 SQL注入基本概念

SQL注入是指通过把SQL命令插入到Web表单提交或输入域名/页面请求的查询字符串,最终欺骗服务器执行恶意SQL命令的攻击方式。这种漏洞可能导致获取网站管理员权限,特别是针对MSSQL数据库。

1.2 Low级别SQL注入

漏洞代码分析

$id = $_GET['id'];
$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id'";

测试方法

  1. 输入1'测试是否存在注入点,观察是否报错
  2. 确定字段数:1' order by 2#(不报错)→ 1' order by 3#(报错),确认字段数为2
  3. 利用联合查询进行注入:
    • 1' union select 1,version()# → 查询数据库版本
    • 1' union select database(),2# → 查询数据库名称
    • 1' union select 1,group_concat(table_name) from information_schema.tables where table_schema='dvwa'# → 查询表名
    • 1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users'# → 查询列名
    • 1' union select 1,group_concat(user_id,first_name,last_name,user,password,avatar) from users# → 查询用户数据

1.3 Medium级别SQL注入

防御措施

$id = mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $_POST['id']);

绕过方法

  1. 使用POST请求提交数据
  2. 构造id=1 or 1=1绕过
  3. 注意特殊字符会被转义,需要采用其他绕过方法

1.4 SQL盲注类型

  1. 基于布尔的盲注:服务器返回真/假结果
  2. 基于时间的盲注:通过响应时间判断
  3. 基于报错的盲注:通过错误信息判断

2. XSS跨站脚本漏洞分析

2.1 XSS基本概念

XSS攻击是由于Web应用程序未对用户输入进行严格过滤,攻击者注入恶意脚本代码到网页中,当用户浏览时执行恶意代码。常用于窃取cookies获取用户名和密码。

2.2 Low级别XSS

漏洞代码

if(isset($_GET['name'])){
    echo '<pre>' . 'Hello ' . $_GET['name'] . '</pre>';
}

测试方法

  • 输入<script>alert(123)</script>成功弹窗
  • 通过审查元素确认代码已插入HTML

2.3 Medium级别XSS

防御措施

$name = str_replace('<script>', '', $_GET['name']);

绕过方法

  1. 大小写绕过:<ScRiPt>alert(123)</ScRiPt>
  2. 双标签绕过:<scr<script>ipt>alert(123)</script>
  3. 其他HTML标签:``

2.4 High级别XSS

防御措施

$name = preg_replace('/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET['name']);

绕过方法

  • 使用非script标签:``
  • 使用其他事件处理器:<body onload=alert(1)>

2.5 Impossible级别XSS

防御措施

  1. 添加user_token验证
  2. 使用htmlspecialchars()函数转换特殊字符为HTML实体

3. 防御建议

3.1 SQL注入防御

  1. 使用参数化查询/预处理语句
  2. 对输入进行严格过滤和转义
  3. 最小权限原则设置数据库账户
  4. 使用Web应用防火墙(WAF)

3.2 XSS防御

  1. 对所有用户输入进行HTML实体编码
  2. 使用Content Security Policy(CSP)
  3. 设置HttpOnly标志保护cookies
  4. 实施输入验证和输出编码
  5. 使用现代框架(如React、Vue)的自动转义功能

4. 测试工具推荐

  1. SQL注入:sqlmap、Burp Suite
  2. XSS:XSS Hunter、BeEF Framework
  3. 综合工具:OWASP ZAP、Burp Suite Professional

5. 总结

本文详细分析了DVWA中SQL注入和XSS漏洞的不同安全级别实现,包括漏洞原理、测试方法和防御措施。理解这些漏洞的本质和防御方法对于Web应用安全至关重要。建议在测试环境中实践这些技术,切勿在未经授权的系统上进行测试。

DVWA渗透测试与代码分析:SQL注入与XSS跨站脚本漏洞详解 1. SQL注入漏洞分析 1.1 SQL注入基本概念 SQL注入是指通过把SQL命令插入到Web表单提交或输入域名/页面请求的查询字符串,最终欺骗服务器执行恶意SQL命令的攻击方式。这种漏洞可能导致获取网站管理员权限,特别是针对MSSQL数据库。 1.2 Low级别SQL注入 漏洞代码分析 : 测试方法 : 输入 1' 测试是否存在注入点,观察是否报错 确定字段数: 1' order by 2# (不报错)→ 1' order by 3# (报错),确认字段数为2 利用联合查询进行注入: 1' union select 1,version()# → 查询数据库版本 1' union select database(),2# → 查询数据库名称 1' union select 1,group_concat(table_name) from information_schema.tables where table_schema='dvwa'# → 查询表名 1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users'# → 查询列名 1' union select 1,group_concat(user_id,first_name,last_name,user,password,avatar) from users# → 查询用户数据 1.3 Medium级别SQL注入 防御措施 : 绕过方法 : 使用POST请求提交数据 构造 id=1 or 1=1 绕过 注意特殊字符会被转义,需要采用其他绕过方法 1.4 SQL盲注类型 基于布尔的盲注 :服务器返回真/假结果 基于时间的盲注 :通过响应时间判断 基于报错的盲注 :通过错误信息判断 2. XSS跨站脚本漏洞分析 2.1 XSS基本概念 XSS攻击是由于Web应用程序未对用户输入进行严格过滤,攻击者注入恶意脚本代码到网页中,当用户浏览时执行恶意代码。常用于窃取cookies获取用户名和密码。 2.2 Low级别XSS 漏洞代码 : 测试方法 : 输入 <script>alert(123)</script> 成功弹窗 通过审查元素确认代码已插入HTML 2.3 Medium级别XSS 防御措施 : 绕过方法 : 大小写绕过: <ScRiPt>alert(123)</ScRiPt> 双标签绕过: <scr<script>ipt>alert(123)</script> 其他HTML标签: `` 2.4 High级别XSS 防御措施 : 绕过方法 : 使用非script标签: `` 使用其他事件处理器: <body onload=alert(1)> 2.5 Impossible级别XSS 防御措施 : 添加user_ token验证 使用 htmlspecialchars() 函数转换特殊字符为HTML实体 3. 防御建议 3.1 SQL注入防御 使用参数化查询/预处理语句 对输入进行严格过滤和转义 最小权限原则设置数据库账户 使用Web应用防火墙(WAF) 3.2 XSS防御 对所有用户输入进行HTML实体编码 使用Content Security Policy(CSP) 设置HttpOnly标志保护cookies 实施输入验证和输出编码 使用现代框架(如React、Vue)的自动转义功能 4. 测试工具推荐 SQL注入 :sqlmap、Burp Suite XSS :XSS Hunter、BeEF Framework 综合工具 :OWASP ZAP、Burp Suite Professional 5. 总结 本文详细分析了DVWA中SQL注入和XSS漏洞的不同安全级别实现,包括漏洞原理、测试方法和防御措施。理解这些漏洞的本质和防御方法对于Web应用安全至关重要。建议在测试环境中实践这些技术,切勿在未经授权的系统上进行测试。