实战篇——Burpsuite工具BruteForc靶场实战
BurpSuite是一款强大的渗透工具,主要用于抓包、口令爆破和Fuzzing测试。本章通过BruteForc靶场实战,深入掌握Burp口令爆破。
经过测试,原靶场(https://github.com/3sNwgeek/BruteForc_test)在登录回显方面存在几处问题,现已修正并发布至本人的仓库(https://github.com/yaoguyuan/BruteForc_test_improved)。
环境配置:JDK+Burpsuite+SwitchySharp+Python+captcha-killer+BurpCrypto (具体配置方式此处不再赘述,不会在网上搜索相关教程)
1. 热身练习
之前正好开发了一个简单的登录网站,那就拿它热热身吧!😃
登录页面:
先抓包再爆破,最后通过Repeater模块验证一下,轻松搞定!(其实一开始在字典中偷偷加了正确口令)
2. 突破验证码
登录页面:
难点在于验证码。思路就是先通过GET请求获得验证码图片,然后进行验证码的识别,最后带上验证码进行爆破。
这里需要使用Burpsuite的一款插件——captcha-killer,话不多说,直接开始操作!
首先运行yanzhengma.py,开启端口监听:
点击验证码图片,抓包,发送至captcha-killer,点击获取,得到验证码图片:
将验证码请求包导入至Request template,填写接口URL,点击识别,可见识别结果正确!
输入用户名、口令和验证码,抓包,发送至Intruder模块,设置攻击方式为Pitchfork:
设置Payloads,第一个payload导入口令字典,第二个payload设为Extension-generated,并选择captcha-killer:
将爆破线程数设置为1(重要),开启爆破,得到口令——1q2w3e4r!(会用captcha-killer就完事儿了)
3. 突破前端加密
这题是最难的,并且靶场源码还有问题,导致我改了半天...
登录页面:
看起来啥验证也没有,人畜无害。
抓个包看看:
这一串是啥玩意儿??
发送至Repeater模块看看:
这一串又是啥玩意儿???
通过开发者工具查看网页的源代码,才发现别有玄机:
首先是html表单,可见点击按钮触发form_login函数(下面的responseDiv一会儿会解释)。
form_login函数先基于username和password生成pwd_key,然后调用encryptByDES函数进行加密,最后调用post函数进行发送。
encryptByDES函数先对密钥进行utf8编码,然后对明文进行DES加密,加密模式为ECB,填充算法为PKCS7。
post函数是比较关键的,先对post_key进行URL编码和拼接,这样就得到了Request报文中的那一串;然后通过XHR向response.php发送POST请求。内部onreadystatechange函数会在XHR的readyState发生变化时触发,XMLHttpRequest.DONE表示XHR的readyState为 4,即请求完成且响应已就绪。因此此处用于接收并处理服务器的响应。现在终于豁然开朗了:response.message就是之前Response报文中的那一串,应该是回显信息JSON编码后的结果,将response.message传给responseDiv.innerText,用于在当前页面显示回显信息。
将抓到的数据包放行,查看回显信息:
随便找个JSON在线解析工具,把之前Response报文中那串扔进去,解析,果然不出所料!
现在分析的差不多了,那就趁热打铁!
这里需要使用Burpsuite的另一款插件——BurpCrypto,用于数据加密。
这里有两个需要注意的地方,其一是填充算法选择PKCS5,因为DES加密算法数据块长度为64位(8字节),PKCS7和PKCS5等价;其二是密钥取前8个字符,因为DES加密算法密钥长度也是64位(8字节),JS中应该会发生自动截断,但这里必须给定8字节。
创建一个processor:
抓包,发送至Intruder模块,选择Custom iterator:
三个position设置如下:
别忘了选择之前配置的processor:
开启爆破!得到一个长度与其他不同的响应包:
打开JSON在线解析工具,扔进去,解析,果不其然!
如果还想要获得口令的话,随便找个DES在线解密工具就行了:
口令就是password!手动输入用户名和口令,登录成功!