表单暴力破解

概述

“暴力破解”是一攻击具手段,在web攻击中,一般会使用这种手段对应用系统的认证信息进行获取。 其过程就是使用大量的认证信息在认证接口进行尝试登录,直到得到正确的结果。 为了提高效率,暴力破解一般会使用带有字典的工具来进行自动化操作。

理论上来说,大多数系统都是可以被暴力破解的,只要攻击者有足够强大的计算能力和时间,所以断定一个系统是否存在暴力破解漏洞,其条件也不是绝对的。 我们说一个web应用系统存在暴力破解漏洞,一般是指该web应用系统没有采用或者采用了比较弱的认证安全策略,导致其被暴力破解的“可能性”变的比较高。 这里的认证安全策略, 包括:

  1. 是否要求用户设置复杂的密码;

  2. 是否每次认证都使用安全的验证码(想想你买火车票时输的验证码~)或者手机otp;

  3. 是否对尝试登录的行为进行判断和限制(如:连续5次错误登录,进行账号锁定或IP地址锁定等);

  4. 是否采用了双因素认证;

流程

  • 确认登录接口的脆弱性
    • 尝试登录——抓包——观察验证元素和response信息,判断是否存在暴力破解的可能
  • 对字典进行优化
    • 根据实际情况对字典进行优化,提高暴力破解的效率
  • 工具自动化操作

以下实验环境是基于Pikachu靶场进行的。

靶场下载:https://github.com/zhuifengshaonianhanlu/pikachu

简单表单暴力破解

img

输入错误时,有以下提示

img

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

411a58df5762da917562a60df616d9b7.png

发送到Intruder进行暴力破解

e20f71994117892067fb23b951d60174.png

设置好Payload

b054b7e3eccc40104336ad93493844e7.png

c807ca1a8508c1ae817b5d803b1a4c5f.png

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

d5c28d32cdd16bd6430c53da023752b1.png

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

a479b7c9cdea29fec0047c53e1e525fc.png

验证码绕过(on server)

验证码可以用来防止恶意注册、防止暴力破解。服务端验证码常见问题:

  • 验证码在后台不过期,导致长期可以使用
  • 验证码校验不严格,逻辑出现问题
  • 验证码设计的太过简单和有规律,容易被猜解

img

我们先简单的测试一下,不输入验证码的情况下会提示验证码为空,输入错误验证码的情况下会提示验证码错误,只有验证码正确的前提下才会提示账号或密码不存在

下面通过抓包判断一下服务器端有没有对验证码进行验证,发现是有的

img

说明后端对验证码是有验证的,我们来了解一下验证码生成的逻辑:

当我们刷新页面的时候,我们会向后台发送一个请求,后台收到请求会生成一个验证码并在session中把验证码保存下来。

我们先生成一个新的验证码,然后在BurpSuite中输入正确的验证码

img

提示账号密码不存在

img

我们换个密码再发送一次

img

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

f55213b55230b3fdb2c1b88f535e3df9.png

验证码绕过(on client)

img

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

img

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

img

这个JavaScript会从0-9和26个大写字母中随机挑选5个作为验证码,然后用 validate() 去验证

另外,通过源码也可以看到,我们每点一次验证码,就会调用 createCode() 改变验证码

img

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

img

正常来说会有这个弹窗

img

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

80e7b4b4b0da5a1ca4e4d0f538d282a1.png

PKAV HTTP Fuzzer 识别验证码

PKAV HTTP Fuzzer是PKAV团队编写的一个带图形验证码爆破识别的渗透测试工具。

不过该工具现在已经停止更新了,最近一次更新是在2016年。

该工具只能识别较为简单的验证码。

使用之前需要先安装.net framework 4.0或以上版本

首先使用burpsuite对web表单进行抓包。

120f248052e508b544bc09f227e038d9.png

48529ff85d52307ce3d3533226811365.png

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

f4b3f7eeb0e72590e3d5c5ab60861ede.png

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

0649d335bce73a54bccc64b755a2ab39.png

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

9d1936f68dd1d79324ae103447fb5444.png

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

bb2635eed417fb5d9298cf0b9de92b62.png

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

8b1cfd6f013ded1cbd7fbda681ae2476.png

对这种简单的验证码识别还算准确(注意使用自带识别引擎识别,第三方识别引擎都是用不了的)

使用发包器,开始进行暴力破解51bfaff708834b9294d0c1d743b5bd98.png

可以看到长度为867的返回包中显示登录成功。

6cef7fefde3290ab4d10b71814defec6.png

Token绕过

利用开发者工具可以发现这里有一个隐藏的标签

img

里面的数字就是我们的token,我的每次提交的请求都会有一个token值,后端会验证这个token值

但是这个token已经写到了html页面中,攻击者只需要写个工具,提交认证前都加上这个token就好了

我们抓包后,发送到intruder中,步骤如图

468c044c99cb8b22304d3fca69cdc227.png

这里只对admin用户进行暴力破解(注意攻击类型为Pitchfork)

我们把token设置变量,options的grep extract添加token:

455810f95f3da0de85735a0b866ece0f.png

image-20211005185127542**

token变量的type设置成recursive grep

5ffd92bd1f4220bf840521e5d3802187.png

将请求数设置为1

2b707b1da69fbbab8082b1814b0d1c56.png

最后点击Start attack进行攻击

32c699c665b8d80f3821d634c175a1bb.png