当前位置:首页 > 焦点

使用burp进行暴力破解

Burp Suite 的使用 Intruder 模块跑起暴力破解,速度比大多数人想象的进行要快。去年我帮一个朋友测试他公司内网的暴力 OA 系统,登录接口没做任何频率限制,破解字典里 2000 个常见弱口令,使用Intruder 的进行 Sniper 模式不到三分钟就跑完了,直接命中 admin/123456。暴力这不是破解什么高深技术,纯粹是使用开发图省事留下的坑。

先搞清楚一件事:Burp 本身不生成字典,进行它只是暴力个请求重放和变异的引擎。你得自己准备密码本,破解或者用 SecLists 里那些现成的使用。我习惯把字典按场景分三类——纯数字(生日、进行工号)、暴力常见弱口令(password、admin、123456)、以及目标相关的组合(公司名+年份)。最后那类命中率最高,但需要你手动搜集信息。

抓包与定位参数

打开 Burp,代理设好,浏览器挂上。正常走一遍登录流程,用户名填 test,密码填 test。Proxy 的 HTTP history 里找到那条 POST 请求,右键 Send to Intruder。切到 Intruder 的 Positions 标签,你会看到 Burp 自动标记了一些参数位置。别偷懒,点 Clear § 全部清掉,然后手动选中你要爆破的字段值,点 Add §。比如登录请求体是 username=test&password=test,你只想爆破密码,那就只给 test(password 的值)加标记。用户名保持不变——除非你确认用户名也未知。

攻击类型选 Sniper 就够了,单个参数爆破用它最省资源。如果用户名和密码都未知,才考虑 Cluster bomb,但那是指数级增长,2000×2000 就是四百万次请求,没等你跑完 IP 就被封了。

Payload 设置与线程控制

切到 Payloads 标签。Payload set 选 1,Payload type 选 Simple list,然后点 Load 把你的字典文件导进去。下面那个 Payload Processing 规则一般不用加,除非目标系统对密码做了前端加密——那种情况你得先写个 Python 脚本把字典里的明文全部转成密文,或者用 Burp 的扩展插件处理。

线程数别拉满。默认的 1 线程太慢,但调到 20 以上又容易触发 WAF 或者把目标服务打挂。我一般设 5 到 10 之间,看目标响应速度。如果返回包很小(比如只有 200 字节的“密码错误”),可以适当加;如果每个请求都要查数据库、返回一大坨 HTML,那就老实点用低线程。

结果筛选:别只看长度

跑完之后 Intruder 会弹出一个新窗口,所有请求按序号排列。默认按 Payload 排序,你得自己找异常。最常用的过滤条件是 Status code 和 Length。比如 99% 的响应都是 200 长度 1523,突然有一条 200 长度 1587——那条大概率就是成功登录后跳转的页面。右键那条请求,Request in browser → in original session,复制链接到浏览器里验证一下。

但有些系统鸡贼,登录失败和成功都返回 200,长度也一样,只是内容里某个字段不同。这时候用 Grep - Match 功能,在 Options 里添加关键词,比如“欢迎”“dashboard”“token”。Intruder 会在结果表格里多出一列,标出哪些响应命中了这些词。

几个容易踩的坑

CSRF token。如果登录表单里带了一个每次请求都变化的 token,你直接重放旧请求会失败。解决办法是用 Burp 的 Macro 或者 Session Handling Rules 自动提取并替换 token。具体操作:Project options → Sessions → Macros,定义一个宏去 GET 登录页,用正则提取 token 值,然后在 Session Handling Rules 里把这个宏应用到 Intruder 请求上。

账号锁定。很多系统连续错 5 次就锁账号。你爆破 admin 的时候,第 6 次开始所有响应都变成“账号已锁定”,这时候你根本分不清是密码错了还是账号被锁。对策是换用户名——如果目标系统用邮箱登录,你可以拿一个已知存在的邮箱去爆,但别用 admin 这种高价值账号。或者用 Burp 的 Pitchfork 模式,每个密码配一个不同的用户名,但前提是你得有一批有效用户名。

最后说句实在的:暴力破解能不能成,八成看字典质量,两成看工具配置。Burp 只是帮你把手工点登录按钮这件事自动化了。真正费时间的是信息搜集——知道目标员工的名字、生日、常用昵称,比多跑一万个随机密码有用得多。

分享到: