DVWA Brute Force(暴力破解)Low/Medium/High 完整攻击流程

📅 2026/7/31 17:59:31 👁️ 阅读次数 📝 编程学习
DVWA Brute Force(暴力破解)Low/Medium/High 完整攻击流程

前置基础

  1. 访问路径:DVWA→Brute Force,登录表单:账号+密码,GET传参username&password&Login=Login
  2. 核心逻辑:后端直接拼接SQL查询,无验证码、无登录失败锁定,可批量字典爆破账号密码
  3. 切换安全等级:DVWA Security 切换 Low / Medium / High
  4. 工具:Burp Suite(主流)、手工测试、Python脚本

一、Low 级别暴力破解(无任何防护,最简单)

low.php 源码分析

$user = $_GET['username']; $pass = $_GET['password']; $query = "SELECT * FROM users WHERE user='$user' AND password='$pass'"; $db = mysqli_query($GLOBALS["___mysqli_ston"], $query); if( mysqli_num_rows($db) == 1 ){ echo "<pre>Welcome to the password protected area admin</pre>"; }else{ echo "<pre>Username and/or password incorrect.</pre>"; }

漏洞点:

  1. 直接拼接用户输入,字符型SQL注入;
  2. 无验证码、无请求频率限制、无IP锁定;
  3. 仅通过页面文字区分成功/失败。

攻击步骤(Burp Intruder 爆破)

步骤1:抓包登录请求

  1. 浏览器随便输入账号密码,点击 Login;
  2. Burp拦截请求,完整数据包:
GET /DVWA/vulnerabilities/brute/?username=test&password=123&Login=Login HTTP/1.1 Host: 127.0.0.1 Cookie: PHPSESSID=xxx; security=low

步骤2:发送到 Intruder

右键 → Send to Intruder

Payload Positions 自动标记usernamepassword两个参数。

步骤3:Payload 设置

两种爆破方案:

方案1:已知用户名 admin,只爆破密码(推荐)
  1. 清除username标记,固定值admin
  2. password加载密码字典(123456、password、admin、dvwa等弱口令);
  3. Attack type:Sniper(单字典遍历)。
方案2:同时爆破账号+密码

Attack type:Cluster bomb,分别加载用户字典、密码字典。

步骤4:启动爆破,判断成功包

爆破完成后看响应长度/页面内容:

  • 失败包:页面包含Username and/or password incorrect.
  • 成功包:页面包含Welcome to the password protected area admin

筛选长度不同的请求,得到正确密码(默认admin密码:password)。

Low 额外漏洞:结合SQL注入直接绕过登录

payload用户名输入:admin'#,密码任意

SQL拼接后:

SELECT * FROM users WHERE user='admin'#' AND password='xxx'

注释后半段密码判断,直接登录成功,无需爆破。


二、Medium 级别暴力破解(增加简单过滤+延时)

medium.php 源码防护点

$user = mysqli_real_escape_string($db, $_GET['username']); $pass = mysqli_real_escape_string($db, $_GET['password']); // 登录失败延时2秒 sleep(2);

防护:

  1. mysqli_real_escape_string转义单引号,无法SQL注入绕过登录
  2. 登录错误强制sleep(2),大幅拉长爆破时间;
  3. 无验证码、无锁定,依然可以暴力破解。

攻击流程

  1. 抓包方式和Low完全一致,不能使用注入payload;
  2. Intruder爆破不变,仅爆破速度变慢(每失败请求等待2秒);
  3. 识别成功响应依旧依靠页面Welcome关键字;
  4. 优化技巧:缩小密码字典,只使用高频弱口令,减少请求次数。

三、High 级别暴力破解(Token CSRF防护,核心难点)

high.php 源码新增防护

  1. 依旧转义字符,禁止SQL注入;
  2. 增加CSRF token(user_token),每次请求token值动态变化;
  3. 每次提交必须携带当前页面token,固定数据包直接重放会失效;
  4. 错误登录依旧sleep延时2秒。

请求新增参数:user_token=随机值

完整参数:username=xxx&password=xxx&Login=Login&user_token=xxxx

Burp自动处理Token爆破完整步骤

步骤1:抓包登录请求,发送到Intruder

三个参数:username、password、user_token,三个变量位置。

步骤2:Payload Type 设置为 Pitchfork

步骤3:配置 Payload 3(token自动获取)

  1. Payload set 3 选择:Recursive grep递归提取token;
  2. 打开 Options → Grep - Extract,添加提取规则:

正则匹配页面隐藏表单token:

user_token' value='(.*?)'

  1. 设置页面刷新请求:每次爆破前先GET登录页,抓取最新token再提交登录。

步骤4:Payload1填固定admin,Payload2加载密码字典,启动攻击

工具会自动:

  1. 访问页面获取新token;
  2. 携带新token提交账号密码;
  3. 循环爆破,识别成功页面。

手工替代方案(Python脚本自动获取token爆破)

逻辑:

  1. requests.get 访问 brute页面,正则提取user_token;
  2. 携带token、用户名、密码发送GET登录请求;
  3. 判断返回页面是否包含Welcome;
  4. 循环遍历密码字典。

四、Impossible 级别(无法爆破,防御满分,对比参考)

源码防护机制:

  1. 强密码哈希存储+加盐md5($salt . $pass)
  2. 登录失败计数器,5次错误直接锁定账号15分钟;
  3. 复杂CSRF token;
  4. 使用预处理SQL语句,杜绝注入;
  5. 无任何可利用漏洞,无法暴力破解。

五、三级等级核心对比表

等级

注入绕过

延时限制

CSRF Token

爆破难点

Low

支持单引号注入直接登录

无sleep

无,爆破速度最快

Medium

转义引号,注入失效

sleep(2)

爆破速度慢,只能纯字典跑

High

注入失效

sleep(2)

动态token

必须自动抓取token,配置复杂

Impossible

完全防护

5次锁定

高强度token

无法爆破


六、实战常见问题

  1. High级别爆破全部失败:未配置递归抓取token,旧token失效;
  2. Medium爆破速度极慢:sleep(2)强制延时,减少字典数量;
  3. Low注入payload无效:安全等级切错,当前是Medium/High;
  4. Cookie丢失导致失效:Burp开启Redirect automatically,保持PHPSESSID会话。

七、防御暴力破解方案

  1. 登录失败次数限制,短期锁定账号;
  2. 图形验证码/短信验证码;
  3. 后端加盐哈希存储密码,禁止明文;
  4. CSRF随机Token防护;
  5. 异常高频请求WAF拦截;
  6. 使用预处理SQL,防止注入绕过登录;
  7. 后台登录IP白名单。