打开Burp Suite,暴力把Proxy模块的破解拦截功能关掉,让浏览器流量直接走本地8080端口。实验目标是暴力一个自己搭的DVWA环境,安全等级设成low。破解登录框就两个字段:username和password。实验我先随便输了一组,暴力admin / 123456,破解Burp的实验HTTP history里立刻多了一条POST请求。
右键,暴力Send to Intruder。破解Intruder这模块默认是实验关着的,社区版速度被限得死死的暴力,但跑个小字典够用了。破解切到Positions标签页,实验Burp已经自动把参数位置用§符号标出来了。它猜得挺准,username和password都圈上了。我把username的标记清掉,只留password那个位置——因为我要固定用户名,只爆破密码。
Payloads标签页,Payload set选1,类型选Simple list。字典从哪来?我手边常备一个rockyou的前1000行精简版,放在~/wordlists/下。Load进去,列表刷刷列出来,123456、password、admin、letmein、qwerty……这些常年霸榜的弱口令一个不落。说实话,真实渗透里字典质量比工具本身重要得多,Burp只是把请求重复发出去而已。
Start attack。新窗口弹出来,表格一行行往下滚。社区版有个烦人的地方:它一次只发一个请求,速度大概每秒十几条。我盯着Response length列,大部分返回的长度都是差不多的,因为登录失败页面固定。突然有一行长度跳了一下,从4231变成4268。点开看Response,Body里少了“Login failed”那句,多了“Welcome to the password protected area”。
密码是password。就这。
整个过程不到两分钟。DVWA的low等级没有任何防护,没有验证码,没有登录失败锁定,没有速率限制。换成medium等级,Burp的Intruder就得配合宏或者用Pitchfork模式处理session了。High等级更麻烦,每次请求都要带user_token,得写Python脚本调Burp的API或者用Turbo Intruder插件。
我见过不少开发觉得“加个验证码就安全了”。实际上OCR识别验证码的成本低得吓人,特别是那种四位数字的简单图形码,用tesseract训练一下,识别率能到90%以上。真正有效的反而是登录失败次数限制——比如五次错误锁十五分钟。这个策略让暴力破解的性价比直接归零,因为字典再大也跑不完。
还有个细节:Burp的Intruder在跑的时候,如果目标服务器响应变慢或者开始返回503,说明可能触发了WAF或者限流。这时候继续跑就是浪费电。我一般会先手动试几十个常见密码,确认没有防护再挂字典。盲目开跑容易被封IP,尤其是云服务器上的目标,封了还得换代理,麻烦。
另外提一句,Burp的社区版和专业版在Intruder上的差距是数量级的。专业版支持多线程,一秒能发几百个请求。但工具快不代表就能破——字典里没有正确密码,跑再快也没用。我见过有人拿几百万行的字典硬怼,跑了一晚上,结果密码是“P@ssw0rd!2024”,字典里根本没有。所以信息收集比爆破本身重要,知道目标可能用什么命名规则,比无脑跑字典强十倍。
实验做完,把DVWA安全等级调回impossible,关掉Burp。浏览器代理设置恢复原样。这个实验唯一的价值就是让你亲手感受一下:弱口令有多脆弱,以及防护措施该往哪个方向做。