Pikachu靶场通关实录-暴力破解篇

0x01 简介

“暴力破解”是一种攻击手段。在web攻击中,一般会使用这种手段对应用系统的认证信息进行获取。 其过程就是使用大量的认证信息在认证接口进行尝试登录,直到得到正确的结果。 为了提高效率,暴力破解一般会使用带有字典的工具来进行自动化操作。理论上来说,大多数系统都是可以被暴力破解的,只要攻击者有足够强大的计算能力和时间。


0x01 基于表单的暴力破解

这种没有验证码的登录界面,破解真的只是时间的问题。高准确率的字典是很重要的, 所以说信息收集真的是很重要的一个步骤。此处为了提高效率,我将皮卡丘靶场的几个常见用户名给做成了username字典,而password字典就选用top500弱密码。


基于表单的暴力破解

掏出我们的大宝贝-burpsuite,调好攻击模式,设置好爆破变量,加载好字典文件,开搞。


基于表单的暴力破解-burpsuite1

用户名字典文件

密码字典文件

密码出来了,分别是admin/123456,test/abc123,pikachu/000000。这里密码为0的时候,返回的响应包数据长度也不一样,特意试了一下,是因为密码为0的时候,皮卡丘靶场不会有任何提示,因此跑出来的响应包长度就有三种不同的长度。


密码

0x02 验证码绕过(on server)

看到关卡标题就明白了,这一关是服务端验证码绕过,先抓个包看一下。
抓到之后发到重放模块里面发送了几次请求包,响应包的数据长度都一样的,猜测服务端并没有及时销毁验证码,因此存在验证码复用的漏洞。


验证码数据包

跑了一波果然跑出来了。


密码

0x03 验证码绕过(on client)

本地端的验证码是能在数据包中看到的,抓包试下。
结果数据包里并不能看到校验信息,原来这里跟我想的还不一样。我以为是数据包中有验证码,只要把数据包中post正文的验证码改得一致就能通过校验进行爆破了。结果靶场这里比我想象的更简单,验证码纯粹是前端JS验证,只要删除js代码或者价格数据包就能直接开搞了。


密码

0x04 token防爆破?

看到题目就知道是加入了token校验,只要每次爆破的时候把token值取出来就OK了,并不复杂。
抓个包发送到intruder模块,然后设置下每次爆破时获取token值。
intruder模块找到options选项,然后找到Grep-Extract功能,点击add新增一条数据提取规则。
然后在新窗口点击refetch response获取到响应包内容,在响应包内找到token,然后选中token值后点击OK,接下来就可以设置爆破规则了。

image.png

我们给账号密码和token处都设为变量,然后将token的payload设置为我们刚提取的token值,并且将当前数据包的token填入,爆破线程设为1,始终遵循重定向也给设置好,开搞!
变量设置

token的payload设置

线程设置为1

始终遵循重定向

本以为这样就能轻松搞定这一关,却在查看结果时发现了一个问题。因为将burpsuite设置为了Cluster bomb模式,因此在爆破时将所有出现的token值进行了笛卡尔积运算,这就导致爆破的数据量无限增加,并且正确结果也不便于我们查看。
image.png

因此,我们此处使用另外一种取token值的方法。来到project options模块的sessions功能下,找到macros并点击add来添加一条宏规则。
选中POST方法带有token值的请求包后,点击OK。
image.png

然后点击configure item进行配置。
image.png

点击add
image.png

填写参数名,注意此处的参数名必须跟表单中的参数名保持一致,选中token值然后一路点击确定。
image.png

接下来新增一条处理规则,选择仅更新token参数。此处的token参数名称为手打的,非下拉选择。
image.png

规则生效范围

设置下规则生效范围,然后就可以配置payload了。这种模式下只需要将用户名和密码添加为变量即可。
image.png

OK,成功跑出来了。


0x05 防御方法

  • 如果用户登录次数超过设置的阈值,则锁定帐号(有恶意登录锁定帐号的风险)
  • 如果某个 IP登录次数超过设置的阈值,则锁定IP
  • 增加人机验证机制
  • 验证码必须在服务器端进行校验,客户端的一切校验都是不安全的
  • 及时销毁验证码

你可能感兴趣的:(Pikachu靶场通关实录-暴力破解篇)