共计 1609 个字符,预计需要花费 5 分钟才能阅读完成。
背景与痛点
Token 认证是现代 Web 应用中常见的安全机制,用于防止 CSRF(跨站请求伪造)和重放攻击。在 DVWA(Damn Vulnerable Web Application)靶场中,登录流程通常包含一个动态生成的 Token,每次请求都会变化,这使得直接重放请求变得无效。

- Token 的作用 :Token 通常由服务器生成,嵌入在表单或请求头中,用于验证请求的合法性。
- 防护原理 :Token 的唯一性和时效性使得攻击者无法直接重放请求,因为旧的 Token 会被服务器拒绝。
技术选型
在重放攻击测试中,Burp Suite 和 OWASP ZAP 是两款常用的工具。以下是它们的对比:
- Burp Suite:
- 优势:功能强大,支持请求拦截、修改和重放,社区版免费。
-
劣势:高级功能需要付费。
-
OWASP ZAP:
- 优势:完全开源,支持自动化扫描。
- 劣势:界面和功能相对 Burp Suite 稍显简陋。
对于本次任务,Burp Suite 因其灵活的请求修改能力和丰富的插件生态更胜一筹。
核心实现
1. 捕获请求
首先,配置 Burp Suite 拦截 DVWA 的登录请求:
- 启动 Burp Suite,确保代理设置正确。
- 浏览器配置为使用 Burp Suite 的代理(通常为 127.0.0.1:8080)。
- 在 DVWA 中尝试登录,Burp Suite 会捕获到包含 Token 的请求。
2. 分析 Token 生成逻辑
查看捕获的请求,重点关注以下字段:
token:通常隐藏在表单或请求头中。User-Agent、Cookie:这些字段可能与 Token 生成相关。
通过多次请求,观察 Token 的变化规律,例如是否基于时间戳或会话 ID 生成。
3. 构造重放攻击
在 Burp Suite 的 Repeater 模块中,尝试修改请求中的 Token:
- 将捕获的请求发送到 Repeater。
- 修改 Token 为之前捕获的其他有效 Token。
- 发送请求,观察服务器响应。
如果服务器返回成功,说明 Token 验证存在漏洞。
代码示例
以下 Python 脚本演示如何自动化提取 Token 并重放请求:
import requests
from bs4 import BeautifulSoup
# 获取登录页面的 Token
def get_token(url):
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
token = soup.find('input', {'name': 'token'}).get('value')
return token
# 构造重放请求
def replay_attack(url, token, username, password):
data = {
'username': username,
'password': password,
'token': token,
'Login': 'Login'
}
response = requests.post(url, data=data)
return response.text
# 示例用法
url = 'http://localhost/dvwa/login.php'
token = get_token(url)
print(replay_attack(url, token, 'admin', 'password'))
安全性考量
- 局限性 :
- 如果 Token 与用户会话绑定,重放攻击可能无效。
-
服务器可能检测到异常请求频率并封锁 IP。
-
防护机制 :
- 使用 HTTPS 防止中间人攻击。
- 实现 Token 的短期有效期和一次性使用。
避坑指南
- 请求频率控制 :避免过快发送请求,触发服务器的速率限制。
- Token 有效期 :确保使用的 Token 在有效期内。
- 合法授权 :仅在授权范围内进行测试,避免法律风险。
结语
通过本文的步骤,你可以利用 Burp Suite 绕过 DVWA 靶场中带 Token 认证的登录密码重放攻击防护。记住,安全测试一定要在合法授权的环境下进行,切勿用于非法用途。希望这篇文章对你在实际渗透测试中有所帮助!
正文完
