前言
靶场一共有4关,现我们就开始通关吧。
环境
靶场安装机器:Windows10(192.168.1.110)
渗透机器:Windows10(192.168.1.107)
使用工具
Burp Suite Professional抓包工具
第一关、基于表单的暴力破解
Step.1、抓包
渗透机器登录靶场,开启抓包工具,然后尝试在靶场输入随意的账号:admin、密码123456
输入账号密码后,返回burp就看到刚才输入的账号密码
Step.2、设置爆破条件
- 由于只涉及到username和password两个变量,我们可以利用BP的Intruder模块,进行暴力破解。
- Attack type 选择 Cluster bomb
- 选中两个变量为username和password的值,Add高亮
Payload 1 导入username字典,Payload 2 导入password字典
Step.3、开始爆破
Step.4、查看攻击成果
因为验证正确和验证错误的Response长度一般会不一样,所以直接Length排序,可以找到正确的用户名和密码。
- 如下图,有三个数值是跟其他的长度不一样,这极有可能就是密码
Step.5、返回靶场尝试登录测试
以上三组账号密码都能登录靶场,第一关通关!
第二关、验证码绕过(on server)
对比上一关,多了一个验证码
Step.1、思路分析
先尝试随机输入账号:admin,密码:111111,验证码:111111,看一看结果
然后尝试输入账号:admin,密码:111111,正确的验证码,看一看结果
这里很明显两者的提示有所不同,验证码正确就会提示“账号或密码错误”,验证码不正确就会提示“验证码输入错误”。
- 那就有这一种思路,让验证码保持正确的前提下,是不是就能进行第一关那样的暴力破解方法了。但由于每次输入错误,验证码就会刷新,这就要求我们先让验证码保持正确不刷新了。
Step.2、抓包
根据上述思路,那么我们可以思考,我们先输入一次正确的验证码,然后让其一直保持验证码正确的状态来进行暴力爆破。
- 下面来打开burp抓包,随机输入账号:admin,密码:111111,以及正确的验证码。查看burp抓取到的数据,然后右键将数据发送到Repeater中。
Step.3、使用Repeater模块进行拦截
进入Repeater模块,点击Send发送数据包,右边就是服务器返回来的数据包
Step.4、Repeater模块图形界面浏览
然后点击右侧的Render模块查看页面返回的情况,看到用户名或密码错误,说明我们的验证码是正确的。
Step.5、测试拦截情况
我们将左侧数据包下方的password参数改为admin123,验证码不变,再次点击Send发送数据包,然后再查看返回页面。
- 我们发现返回的仍然是用户名或密码错误,这说明我们的验证码还是正确的,但是我们已经改了一次密码,验证码还是之前的,这就说明服务器对验证码的验证有漏洞,可以绕过,这个验证码可以一直使用。
Step.6、开始爆破
点击右键发送到intruder
后按照第一关的步骤进行爆破
获得账号密码,第二关通关!
第三关、验证码绕过(on client)
这一关看着和上一关模块差不多,就是验证码样式有点不一样。
Step.1、抓包爆破(产生疑问)
啥也不说,先按照第二关的操作,错误、正确的验证码各输入一次,账号:admin,密码:111111。
- 可以看到输错验证码就会弹出一个对话框提示“验证码输入错误”,输对验证码,但账号或密码错误就依旧会弹出提示“username or password is not exists~”
这不立马按照第二关的步骤来。
- 这成功获得账号密码。但是,这时候我提出了疑问,既然第三关和第二关的爆破步骤一样,那
第三关的设立意义是什么?
Step.2、分析疑问
抱着上面的疑问,我就尝试在验证码错误的时候试一下抓包。哎!竟然没有抓到包
,再三确认不是burp的问题后,我明白了,这关的和第二关的差别。
- 第二关是验证码放在服务器上,无论输入正确还是错误,都得发送数据包到服务器上进行验证,所有都能抓到包。
- 第三关是验证码放在客户端上,只有输入正确的验证码,才会向服务器发送数据包。假如验证码不正确是不会发送数据包的。
好了,到了这里就可以说一句,第三关通关!
第四关、token防爆破?
这关的界面和第一关的界面看上去没区别
什么是token?
- Token 是在服务端产生的。如果前端使用用户名/密码向服务端请求认证,服务端认证成功,那么在服务端会返回 Token 给前端。前端可以在每次请求的时候带上 Token 证明自己的合法地位。如果这个 Token 在服务端持久化(比如存入数据库),那它就是一个永久的身份令牌。
- Token 完全由应用管理,所以它可以避开同源策略
- Token 可以避免 CSRF 攻击
- Token 可以是无状态的,可以在多个服务间共享
Step.1、测试分析
啥也不说,抓个包看看
这里多了一个token,这里面有问题啊,再抓多一次包看看
好了,看到差别了,第2次抓包的token明显和第1次的完全不一样。
这时候就只有分析以下这两次的数据包了,找到两次对应的token数据包
这样就能看出来了,第2次数据包发出的token就是第1次数据包从服务器返回来的token。
所以这个逻辑就很清晰了,服务器每次都会发送一个新的token给本地浏览器,用于下一次登录的token验证,如果不一致,说明这个POST是非法的,会被服务器拒绝。
Step2、抓包,将包发送至intruder
Step3、爆破准备
攻击模式选择Pitchfork,这次是设置2个不同的Payload,所以Add的顺序一定要注意不要搞乱了(之前的也不要)。注意用户名和密码要选在一起。
设置Payload1,因为第一个变量包含了用户名密码,中间还有一段多余的&password=,所以设置payload1需要切成三块。
因为整个字段里有=和&,所以要把这个地方的=和&删掉,不然就都过滤了。
下面这一步是关键
, Options里面设置Grep-Extract,点击Add,找到token的位置,刷新一下,把token值选中,然后点OK。下面的Redirections要选Always。另外token的初始值要复制过来
。
返回设置Payload2,选择Recursive grep,刚才抓取的代码就自动过来了,把初始值填在下面,打个勾就行了。
最后Resource Pool要设置成单线程,只能按顺序一条条提交,不然token就乱了,单线操作还是稳的。因为跑了两个虚拟机,还开了一堆东西,服务器响应比较慢,直接开到100ms慢慢跑。
Step4、爆破
点击Start attack开始爆破
好了,获取到账号密码了,第四关通关!
总结
BurpSuite爆破的几种模式
攻击模式 | Payloads | 攻击效果 |
---|---|---|
Sniper | 1 | 一个参数不变,另一个遍历字典 |
Battering ram | 1 | 两个参数同步遍历一个字典 |
Pitchfork | N(取决于参数有几个) | 两个参数同步遍历两个不同的字典 |
Cluster bomb | N(取决于参数有几个) | 两个字典的笛卡尔积 |