针对Web应用的暴力破解
表单暴力破解
概述
“暴力破解”是一攻击具手段,在web攻击中,一般会使用这种手段对应用系统的认证信息进行获取。 其过程就是使用大量的认证信息在认证接口进行尝试登录,直到得到正确的结果。 为了提高效率,暴力破解一般会使用带有字典的工具来进行自动化操作。
理论上来说,大多数系统都是可以被暴力破解的,只要攻击者有足够强大的计算能力和时间,所以断定一个系统是否存在暴力破解漏洞,其条件也不是绝对的。 我们说一个web应用系统存在暴力破解漏洞,一般是指该web应用系统没有采用或者采用了比较弱的认证安全策略,导致其被暴力破解的“可能性”变的比较高。 这里的认证安全策略, 包括:
是否要求用户设置复杂的密码;
是否每次认证都使用安全的验证码(想想你买火车票时输的验证码~)或者手机otp;
是否对尝试登录的行为进行判断和限制(如:连续5次错误登录,进行账号锁定或IP地址锁定等);
是否采用了双因素认证;
流程
- 确认登录接口的脆弱性
- 尝试登录——抓包——观察验证元素和response信息,判断是否存在暴力破解的可能
- 对字典进行优化
- 根据实际情况对字典进行优化,提高暴力破解的效率
- 工具自动化操作
以下实验环境是基于Pikachu靶场进行的。
靶场下载:https://github.com/zhuifengshaonianhanlu/pikachu
简单表单暴力破解

输入错误时,有以下提示

这里没有验证码等其他验证机制,抓包看看

发送到Intruder进行暴力破解

设置好Payload


然后把“ username or password is not exists~ ”复制到Grep Match中。后面可以利用Grep Match区分哪些请求里面有这个字符串

然后就可以开始攻击了,匹配到 username or password is not exists 都是攻击失败的,另外,从响应长度也可以看出攻击成功与否

验证码绕过(on server)
验证码可以用来防止恶意注册、防止暴力破解。服务端验证码常见问题:
- 验证码在后台不过期,导致长期可以使用
- 验证码校验不严格,逻辑出现问题
- 验证码设计的太过简单和有规律,容易被猜解

我们先简单的测试一下,不输入验证码的情况下会提示验证码为空,输入错误验证码的情况下会提示验证码错误,只有验证码正确的前提下才会提示账号或密码不存在
下面通过抓包判断一下服务器端有没有对验证码进行验证,发现是有的

说明后端对验证码是有验证的,我们来了解一下验证码生成的逻辑:
当我们刷新页面的时候,我们会向后台发送一个请求,后台收到请求会生成一个验证码并在session中把验证码保存下来。
我们先生成一个新的验证码,然后在BurpSuite中输入正确的验证码

提示账号密码不存在

我们换个密码再发送一次

发现依然是提示账号密码不存在,正常来说应该提示验证码错误,这说明验证码长期有效,我们发送到Intruder中直接暴力破解

验证码绕过(on client)

这里我们需要输入验证码,我们不能对验证码暴力破解,通过抓包发现请求里面只是多了验证码

通过查看源码,发现验证码的验证逻辑是在客户端实现的

这个JavaScript会从0-9和26个大写字母中随机挑选5个作为验证码,然后用 validate() 去验证
另外,通过源码也可以看到,我们每点一次验证码,就会调用 createCode() 改变验证码

通过BurpSuite发现后台不会对输入错误的验证码进行验证,在浏览器中,输入错误的验证码是有提示的

正常来说会有这个弹窗

说明前端设置的验证码如同虚设,后端不会对验证码进行验证。那么我们不用理会验证码,直接进行暴力破解就可以了

PKAV HTTP Fuzzer 识别验证码
PKAV HTTP Fuzzer是PKAV团队编写的一个带图形验证码爆破识别的渗透测试工具。
不过该工具现在已经停止更新了,最近一次更新是在2016年。
该工具只能识别较为简单的验证码。
使用之前需要先安装.net framework 4.0或以上版本
首先使用burpsuite对web表单进行抓包。


打开PKAV HTTP Fuzzer,将地址与burp抓到的请求包粘贴到工具中的对应位置。

对用用户名和密码添加标记,对验证码添加验证码标记。

更改重放模式为异值异步重放模式,对两个变体分别导入字典

右键验证码图片,复制验证码地址

将验证码粘贴到到工具中的地址框

对这种简单的验证码识别还算准确(注意使用自带识别引擎识别,第三方识别引擎都是用不了的)
使用发包器,开始进行暴力破解
可以看到长度为867的返回包中显示登录成功。

Token绕过
利用开发者工具可以发现这里有一个隐藏的标签
里面的数字就是我们的token,我的每次提交的请求都会有一个token值,后端会验证这个token值
但是这个token已经写到了html页面中,攻击者只需要写个工具,提交认证前都加上这个token就好了
我们抓包后,发送到intruder中,步骤如图

这里只对admin用户进行暴力破解(注意攻击类型为Pitchfork)
我们把token设置变量,options的grep extract添加token:

**
token变量的type设置成recursive grep

将请求数设置为1

最后点击Start attack进行攻击
