Pikachu靶场-暴力破解
字数 1580 2025-08-11 21:26:31
Web安全实战:暴力破解攻击与防御技术详解
1. 暴力破解概述
暴力破解(Brute Force)是一种常见的网络攻击手段,攻击者通过尝试大量认证信息组合来获取系统访问权限。
核心特点
- 使用自动化工具配合字典进行高效尝试
- 理论上所有系统都可能被破解,取决于计算资源和时间
- 实际漏洞存在性取决于系统的安全防护措施
影响评估
一个系统存在暴力破解漏洞通常表现为:
- 密码策略薄弱(允许简单密码)
- 缺乏有效的验证机制
- 无登录尝试限制措施
- 未采用多因素认证
2. 基于表单的暴力破解实战
攻击步骤
- 靶场访问:进入目标登录页面
- 测试输入:随意输入账号密码尝试登录
- 抓包分析:
- 使用Burp Suite拦截登录请求
- 右键发送到Intruder模块
- 参数设置:
- 将密码字段标记为变量
- 导入预置密码字典文件
- 爆破配置:
- 设置适当线程数(避免过高导致请求失败)
- 执行爆破:
- 启动攻击过程
- 结果分析:
- 对返回结果按响应长度排序
- 检查不同响应的内容,寻找成功登录的响应包
3. 服务端验证码绕过技术
漏洞特征
- 验证码由服务端生成并发送到客户端
- 验证码可重复使用(未实现单次有效性)
攻击流程
- 初始测试:
- 输入任意凭证和验证码
- 抓取登录请求包
- 重放测试:
- 使用Repeater模块重放请求
- 确认验证码可重复使用
- 爆破准备:
- 将请求发送到Intruder模块
- 保持验证码参数不变
- 关键注意:
- 避免在Proxy拦截时刷新页面(会导致验证码失效)
- 直接使用首次获取的验证码进行爆破
- 执行与分析:
- 同基础表单爆破流程
- 检查返回包中的"login success"标识
4. 客户端验证码绕过技术
漏洞原理
- 验证码生成和验证完全在客户端完成(JavaScript)
- 服务端未进行二次验证
三种绕过方法
方法一:删除验证码参数
- 抓取包含验证码的登录请求
- 直接删除验证码相关参数
- 发送到Intruder模块进行爆破
方法二:禁用JavaScript
- 在浏览器设置中禁用JS执行
- 刷新页面使验证码显示失效
- 进行无验证码爆破
方法三:单次正确验证码利用
- 手动输入一次正确的验证码(注意大小写)
- 抓取该次请求
- 基于此请求进行爆破(不再需要验证码)
5. Token防护机制突破
防护原理
- 每次请求包含唯一token值
- 服务端验证token有效性
- 阻止请求重放和自动化攻击
突破方法一:Burp Suite高级配置
-
初始分析:
- 抓包观察token参数变化
- 确认token单次有效性
-
爆破模式选择:
- 使用Pitchfork模式(多参数协同变化)
- 设置密码和token两个变量
-
特殊配置:
- 线程数设为1(避免并发导致token混乱)
- 在Options中关闭"Update cookies"选项
-
Token获取:
- 使用"Grep-Extract"从响应中提取token
- 配置递归搜索(Recursive grep)更新token
-
字典设置:
- 密码字段使用常规字典
- token字段使用递归搜索获取的动态值
突破方法二:Python自动化脚本
import requests
from bs4 import BeautifulSoup
s = requests.session()
password = ['123', '456', '123456', '67899'] # 密码字典
# 请求头设置
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Cookie': 'PHPSESSID=of5tkhcr385na1oij0h90vr1r0'
}
# 初始请求获取token
req = s.get('http://target/vul/burteforce/bf_token.php#')
token = BeautifulSoup(req.text,'lxml').find('input',{'name':'token'}).get('value')
for pa in password:
# 构造包含动态token的请求
req = s.post(url='http://target/vul/burteforce/bf_token.php#',
data={'username':'admin', 'password':pa, 'token':token, 'submit':'Login'})
if 'success' in req.text:
print(f"爆破成功,用户名:admin,密码为:{pa}")
break
else:
# 获取新的token用于下一次尝试
req = s.get('http://target/vul/burteforce/bf_token.php#')
token = BeautifulSoup(req.text, 'lxml').find('input', {'name':'token'}).get('value')
6. 防御措施建议
有效防护策略
-
密码策略:
- 强制复杂密码(长度、字符类型要求)
- 定期更换密码
-
验证机制:
- 使用一次性验证码(服务端验证)
- 实现多因素认证(短信/邮件验证码等)
-
访问控制:
- 连续失败锁定(账号/IP)
- 渐进式延迟响应
-
会话安全:
- 使用CSRF Token等动态参数
- 实现完善的会话管理
-
监控告警:
- 异常登录尝试检测
- 实时告警机制
7. 总结
暴力破解攻击虽然原理简单,但在安全措施不足的系统中仍然十分有效。通过本教程,我们系统性地学习了:
- 基础表单爆破技术
- 验证码绕过方法(服务端/客户端)
- Token防护突破技巧
- 自动化脚本实现
防御方应当实施多层次的安全措施,而非依赖单一防护机制,才能有效抵御暴力破解攻击。