DVWA-Brute Force
字数 1504 2025-08-24 20:49:22

DVWA Brute Force 漏洞教学文档

1. Brute Force 概述

Brute Force(暴力破解)是一种通过系统地尝试所有可能的组合来破解密码或密钥的攻击方法。在Web安全中,常用于尝试破解用户登录凭证。

2. DVWA Brute Force 四个安全等级分析

2.1 Low 级别

漏洞分析

  • 仅使用 isset($_GET['Login']) 判断登录请求
  • usernamepassword 参数无任何过滤
  • 存在明显的SQL注入漏洞
  • 无任何防爆破机制

攻击方法

方法一:Burp Suite爆破

  1. 使用Intruder模块
  2. 添加标识符
  3. 设置payload(密码字典)
  4. 设置线程数(可适当提高)
  5. 开始爆破
  6. 通过返回长度和状态码差异识别成功登录

方法二:SQL注入

  • 用户名输入:admin' 可触发报错
  • 有效注入payload:
    • admin' or '1'='1
    • admin' #(注释掉密码检查)

2.2 Medium 级别

安全改进

  • 使用 mysql_real_escape_string() 函数转义特殊字符
  • 密码进行MD5校验
  • 登录错误时添加 sleep(2) 延迟

漏洞分析

  • 基本防御了SQL注入(除非MySQL版本<5.5.37且使用GBK编码)
  • 仍然缺乏有效的防爆破机制
  • sleep(2) 仅略微增加爆破时间,无法阻止自动化攻击

攻击方法

  • 仍可使用Burp Suite进行爆破
  • 方法与Low级别基本相同
  • 需考虑每次尝试增加2秒延迟

2.3 High 级别

安全改进

  • 引入Anti-CSRF token机制
  • 每次请求生成随机 user_token
  • 使用 stripslashes()mysql_real_escape_string() 双重过滤
  • 必须提交正确的token才能进行登录验证

攻击挑战

  • 传统爆破工具无法直接使用
  • 需要处理动态token

攻击方法

方法一:Python脚本自动化

from bs4 import BeautifulSoup
import requests

# 设置请求头
headers = {
    'Host': 'target.com',
    'User-Agent': 'Mozilla/5.0',
    'Cookie': 'security=high; PHPSESSID=sessionid'
}

# 获取token函数
def get_token(url):
    response = requests.get(url, headers=headers)
    soup = BeautifulSoup(response.text, "html.parser")
    return soup.find_all('input')[3].get('value')

# 主爆破逻辑
url = "http://target.com/vulnerabilities/brute/"
token = get_token(url)

for password in open("password.txt"):
    req_url = f"{url}?username=admin&password={password.strip()}&Login=Login&user_token={token}"
    token = get_token(req_url)  # 获取新token用于下次请求

方法二:Burp Suite高级配置

  1. 选择Pitchfork攻击类型(处理多个变量)
  2. 添加密码和token两个变量
  3. 将线程数设为1(因token单次有效)
  4. 配置Grep-Extract从响应中提取新token
  5. 设置Payloads:
    • 密码:使用字典文件
    • token:选择"Recursive grep"递归获取

2.4 Impossible 级别

安全机制

  • 可靠的账户锁定机制:多次失败后锁定账户
  • 使用PDO(PHP Data Object)预处理语句防御SQL注入
  • PDO机制从根本上防止SQL注入,因为查询结构与数据分离

防护效果

  • 使暴力破解变得不可能
  • 即使知道正确密码,账户锁定后也无法登录
  • SQL注入完全防御

3. 防御建议

  1. 账户锁定机制:实现失败尝试次数限制和临时锁定
  2. 多因素认证:结合短信/邮箱验证码、OTP等
  3. CAPTCHA:增加人机验证
  4. 密码策略
    • 强制复杂密码
    • 定期更换
    • 禁止常见弱密码
  5. 安全编码
    • 使用预处理语句(PDO/MySQLi)
    • 对所有输入进行严格过滤和转义
  6. 登录延迟:逐步增加失败尝试的延迟时间
  7. 监控告警:对异常登录尝试进行监控和告警

4. 总结

DVWA的Brute Force模块展示了从低到高的安全防护演进:

  • Low:无防护,可SQL注入+爆破
  • Medium:基本防御SQL注入,但仍可爆破
  • High:增加Token机制,增加爆破难度
  • Impossible:综合防护,使爆破不可行

实际应用中应至少达到High级别的防护标准,重要系统应采用Impossible级别的多重防护措施。

DVWA Brute Force 漏洞教学文档 1. Brute Force 概述 Brute Force(暴力破解)是一种通过系统地尝试所有可能的组合来破解密码或密钥的攻击方法。在Web安全中,常用于尝试破解用户登录凭证。 2. DVWA Brute Force 四个安全等级分析 2.1 Low 级别 漏洞分析 仅使用 isset($_GET['Login']) 判断登录请求 对 username 和 password 参数无任何过滤 存在明显的SQL注入漏洞 无任何防爆破机制 攻击方法 方法一:Burp Suite爆破 使用Intruder模块 添加标识符 设置payload(密码字典) 设置线程数(可适当提高) 开始爆破 通过返回长度和状态码差异识别成功登录 方法二:SQL注入 用户名输入: admin' 可触发报错 有效注入payload: admin' or '1'='1 admin' # (注释掉密码检查) 2.2 Medium 级别 安全改进 使用 mysql_real_escape_string() 函数转义特殊字符 密码进行MD5校验 登录错误时添加 sleep(2) 延迟 漏洞分析 基本防御了SQL注入(除非MySQL版本 <5.5.37且使用GBK编码) 仍然缺乏有效的防爆破机制 sleep(2) 仅略微增加爆破时间,无法阻止自动化攻击 攻击方法 仍可使用Burp Suite进行爆破 方法与Low级别基本相同 需考虑每次尝试增加2秒延迟 2.3 High 级别 安全改进 引入Anti-CSRF token机制 每次请求生成随机 user_token 使用 stripslashes() 和 mysql_real_escape_string() 双重过滤 必须提交正确的token才能进行登录验证 攻击挑战 传统爆破工具无法直接使用 需要处理动态token 攻击方法 方法一:Python脚本自动化 方法二:Burp Suite高级配置 选择Pitchfork攻击类型(处理多个变量) 添加密码和token两个变量 将线程数设为1(因token单次有效) 配置Grep-Extract从响应中提取新token 设置Payloads: 密码:使用字典文件 token:选择"Recursive grep"递归获取 2.4 Impossible 级别 安全机制 可靠的账户锁定机制:多次失败后锁定账户 使用PDO(PHP Data Object)预处理语句防御SQL注入 PDO机制从根本上防止SQL注入,因为查询结构与数据分离 防护效果 使暴力破解变得不可能 即使知道正确密码,账户锁定后也无法登录 SQL注入完全防御 3. 防御建议 账户锁定机制 :实现失败尝试次数限制和临时锁定 多因素认证 :结合短信/邮箱验证码、OTP等 CAPTCHA :增加人机验证 密码策略 : 强制复杂密码 定期更换 禁止常见弱密码 安全编码 : 使用预处理语句(PDO/MySQLi) 对所有输入进行严格过滤和转义 登录延迟 :逐步增加失败尝试的延迟时间 监控告警 :对异常登录尝试进行监控和告警 4. 总结 DVWA的Brute Force模块展示了从低到高的安全防护演进: Low:无防护,可SQL注入+爆破 Medium:基本防御SQL注入,但仍可爆破 High:增加Token机制,增加爆破难度 Impossible:综合防护,使爆破不可行 实际应用中应至少达到High级别的防护标准,重要系统应采用Impossible级别的多重防护措施。