DVWA靶场SQL盲注入实战:Burp抓包与Sqlmap自动化利用指南

发布时间:2026/7/21 4:17:45

DVWA靶场SQL盲注入实战:Burp抓包与Sqlmap自动化利用指南 1. 项目概述为什么从Burp到Sqlmap是SQL盲注入门的黄金路径如果你刚开始接触Web安全尤其是想搞懂SQL注入那么“DVWA靶场”和“SQL盲注”这两个词你一定不陌生。DVWADamn 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 ] pssw0rd; // 修改为你的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或PowerShellLinux/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/?id1SubmitSubmit#。这是一个典型的GET请求参数id的值是1Submit的值是Submit。我们的注入点就是id这个参数。3.2 利用Burp Suite拦截关键请求这是将手动测试转化为自动化攻击的桥梁步骤。确保Burp的拦截Intercept处于开启状态。回到DVWA的盲注页面在输入框中不要直接输入数字而是先输入一个测试Payload例如1数字1加一个单引号。点击“Submit”。此时请求会被Burp Suite拦截。你会在Burp的“Intercept”标签页看到完整的HTTP请求报文。它大致长这样GET /dvwa/vulnerabilities/sqli_blind/?id1%27SubmitSubmit HTTP/1.1 Host: localhost User-Agent: Mozilla/5.0... Accept: text/html... Accept-Language: zh-CN,zh;q0.8,zh-TW;q0.7... Accept-Encoding: gzip, deflate Connection: close Cookie: PHPSESSID你的会话ID; securitylow Upgrade-Insecure-Requests: 1关键观察注入点GET请求行中的id1%27。%27是单引号的URL编码。这说明我们的输入被原样送到了服务器。CookieCookie头部的PHPSESSID和security是重中之重。PHPSESSID是维持你登录状态的会话标识securitylow告诉DVWA我们处于低安全等级。没有这个CookieSqlmap发出的请求会被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/?id1SubmitSubmit”这样做十有八九会失败原因如下丢失Cookie-u参数只传递URL不会自动携带浏览器中的Cookie。而DVWA需要PHPSESSID和security这两个Cookie来验证会话和安全等级。没有它们请求是未认证的。手动添加Cookie的麻烦与易错你当然可以尝试用--cookie”PHPSESSIDxxx; securitylow”来附加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. 线程与延迟控制--threads10设置并发线程数默认为1。提高线程数可以显著加快盲注速度但设置过高可能对目标服务器造成过大压力或触发防护。对于本地测试的DVWA可以设置为5-10。--delay1在每个HTTP请求之间设置延迟秒。在测试生产环境或需要隐蔽时可以设置一个随机延迟来模拟人工操作避免被WAFWeb应用防火墙基于请求频率的规则拦截。2. 风险等级与测试深度--level3测试等级1-5。等级越高Sqlmap会使用更多、更复杂的Payload和测试技术。对于DVWA的简单漏洞Level 1就够用。但对于有过滤的复杂场景可能需要调高等级。--risk2风险等级1-3。风险越高使用的Payload可能越具有“侵入性”比如执行UPDATE或INSERT语句可能导致数据变更。在授权测试中除非明确知道后果否则建议使用默认风险等级1。3. 指定注入技术--techniqueB如果我们通过初步检测已经知道是布尔盲注Boolean-based blind可以用此参数指定只使用这种技术避免浪费时间尝试其他无关的Payload从而加快测试速度。一个组合命令示例为了提高对DVWA的测试速度我们可以使用sqlmap -r dvwa_blind_req.txt --techniqueB --threads5 --batch5.2 处理复杂场景与编码问题1. 处理POST请求我们的例子是GET请求。如果遇到POST请求比如一个登录框-r参数同样完美适用。你只需要在Burp中拦截POST请求并保存为文件即可。Sqlmap能自动识别请求方法。2. 自定义注入点标记有时请求文件中有多个参数但你只想测试其中一个。可以在保存的请求文件中用*标记注入点。例如在id1的值1后面加上*变成id1*。然后Sqlmap就会只针对这个标记点进行测试。3. 编码与混淆一些应用会对输入进行过滤或编码。--tamper这是一个强大的参数可以调用预定义的或自定义的“篡改脚本”对Payload进行编码、混淆以绕过简单的WAF或过滤规则。例如--tamperspace2comment会将空格替换为/**/。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 injectable1. 目标参数确实不存在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比赛或对自有系统的授权评估。组合工具理解原理BurpSqlmap是强大的组合但不要成为“脚本小子”。在工具自动化的同时要尝试理解其背后的原理为什么这个Payload能触发布尔盲注Cookie在会话管理中起什么作用弄懂这些你的能力才真正得到了提升。通过这一套从Burp抓包到Sqlmap自动化利用的完整流程你不仅成功通关了DVWA的SQL盲注关卡更重要的是掌握了一套贴近实战的Web漏洞测试方法。这套方法的核心思想——通过代理工具捕获带状态的真实请求再交由自动化工具进行深度测试——可以广泛应用于各类需要身份认证的Web应用安全评估中。记住工具是手臂思路才是大脑。

相关新闻