DVWA 暴力破解漏洞深度解析与绕过技术
暴力破解原理概述
暴力破解(Brute Force)攻击的核心在于穷举。攻击者通过利用自动化工具,配合精心构造的用户名与密码字典,逐一尝试登录目标系统。该攻击的成功率高度依赖于字典的质量以及目标系统对登录频率的限制策略。
1. 低安全性级别(Low Level):SQL 注入绕过
在低安全设置下,系统后端未对输入进行充分过滤。通过分析逻辑,攻击者不仅可以使用常规爆破,还能利用 SQL 注入直接绕过身份验证。
漏洞代码分析
// 获取用户输入
$target_user = $_GET[ 'username' ];
$target_pass = $_GET[ 'password' ];
// 对密码进行 MD5 加密
$target_pass = md5( $target_pass );
// 构造 SQL 查询语句
$db_query = "SELECT * FROM `users` WHERE user = '$target_user' AND password = '$target_pass';";
由于代码直接将 $target_user 拼接到 SQL 语句中,我们可以输入 admin' #。此时,SQL 语句变为:
SELECT * FROM `users` WHERE user = 'admin' #' AND password = '...';
符号 # 在 MySQL 中表示单行注释。这会导致服务器仅校验用户名是否存在,而忽略后续的密码匹配逻辑,从而实现无密码登录。

2. 中安全性级别(Medium Level):字典爆破
在中等安全性下,开发者引入了字符转义机制来防御 SQL 注入,并增加了一定的响应延迟。
防御代码增强
// 使用 mysqli_real_escape_string 转义特殊字符
$user_input = mysqli_real_escape_string($db_link, $_GET[ 'username' ]);
$pass_input = mysqli_real_escape_string($db_link, $_GET[ 'password' ]);
// 模拟登录延迟
if (登录失败) {
sleep(2);
}
转义函数的存在使得万能密码失效,但 2 秒的延迟不足以阻挡自动化工具。通过 Burp Suite 的 Intruder 模块,我们可以配置攻击载荷(Payloads)对用户名和密码字段进行遍历。

在爆破结果中,寻找 Length(响应长度)或 Status(状态码)异常的条目,即可找到正确的登录凭据(例如:admin/password)。
3. 高安全性级别(High Level):绕过 Anti-CSRF Token
高安全性级别引入了 user_token 机制。每次页面加载时,服务器会生成一个随机 Token 并要求客户端在提交表单时一并带回,以此防御 CSRF 攻击并增加暴力破解的难度。
防护逻辑
// 校验 Token 有效性
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
绕过步骤
常规爆破失效是因为每个请求的 Token 都是动态变化的。我们需要配置 Burp Suite 实时获取并替换 Token:
- 将请求发送至 Intruder,攻击类型选择 Pitchfork。
- 在 Options 选项卡的 Grep - Extract 模块中点击
Add,通过Refetch response捕获 HTML 中的user_token隐藏域值。 - 在 Resource Pool 中设置最大并发连接数为 1(确保 Token 顺序不被打乱)。
- 在 Payloads 设置中:
- Payload 1 & 2:设置用户名与密码字典。
- Payload 3(Token):选择 Recursive grep,并填入初始请求中获取的第一个 Token 值。
- 在 Options 中勾选 Always follow redirections(跟随重定向)。

通过这种方式,Burp Suite 会在每次尝试后提取响应中的新 Token,并将其用于下一次登录尝试。
暴力破解的防御建议
为了有效抵御此类攻击,建议在生产环境中实施以下措施:
- 图形验证码: 引入难以被 OCR 识别的图形或行为验证码(如滑动校验)。
- 账户锁定策略: 监测单位时间内登录失败次数,超过阈值后暂时锁定账户或 IP 地址。
- 多因素认证(MFA): 在关键业务场景中使用手机验证码或硬件令牌。
- 强密码策略: 强制用户使用包含大小写字母、数字及特殊字符的高强度密码。