Web漏洞之短信验证绕过及口令爆破
(部分搜寻的资料用于自学,如有侵犯,联系可删! ———— by 611)
验证码绕过及口令爆破
验证码绕过
一、问题阐述及分类
存在密码找回或重置的情景,一般密码的重置需要给手机发送验证码,输入正确的验证码才能进行密码重置,然后许多代码编写不当时就会存在如下几点漏洞:
1、验证码套用
生成一个验证码后,该验证码实际上可用于重置任何手机号的密码。
2、验证码客户端回显
验证码直接回显在数据包(客户端)。
3、验证码Response包的状态值可篡改
比如测试发现如果验证码正确,回应包中会有表示正确的状态值;如果错误,回应包中会有表示错误的状态值。那么就可以通过抓取回应包,将状态值进行篡改,将错误的改成正确的,再返回给客户端。
4、验证码爆破
直接按照验证码位数进行爆破,比如4位数字就从0000爆破到9999。(如果是4位纯数字或者6位纯数字还有可能,要是字母数字交叉或者验证码设置了有效时间,就比较难)
5、找回密码流程绕过
一般我们如果找回密码时,通常有两个页面,第一个页面是:输入手机号码、验证;第二个页面才是重置密码。然而如果这些步骤都在同一个页面里就有可能出现流程问题。我们可以尝试跳过验证那步。
二、案例演示
1、验证码套用案例
墨者靶场(登录密码重置漏洞分析溯源):
https://www.mozhe.cn/bug/detail/K2sxTTVYaWNncUE1cTdyNXIyTklHdz09bW96aGUmozhe
1、打开靶场,目标就是重置一个指定手机号(17101304128)的密码。

2、进入之后发现提供了一个测试账号(18868345809),我们输入信息,并获取验证码。


3、正常这个验证码是用于重置我们的测试账号的,但是我们将验证码输入,然后把手机号改成目标账号,发现依旧重置成功。


4、因此该关卡存在验证码套用问题,也就是说并不会核实手机号与验证码是否匹配。
2、验证码客户端回显案例
上述关卡将短信验证与密码重置用于同一页面中,且未对手机号与验证码进行匹配核实,但是现在常见的都是要验证匹配核实才能进行密码重置的操作,所以有必要进行验证码的绕过或截取。
许多验证码发送给手机后,抓包会发现,数据包中包含验证码信息,这种情况,只需要抓包获取到验证码,输入信息即可完成越权。

有的也可能直接在浏览器中回显了,所以即使不知道手机号收到的验证码是多少,也可以获知验证码信息。

3、验证码Response包的状态值可篡改案例
说明:比如发送验证码之后,在回应包中捕获到了状态值,假设发现如下例子中,如果有个值为1就代表正确,为3就代表错误。
输入验证码正确时,发现状态码为1:

输入验证码正确时,发现状态码为3:

那么我们可以通过篡改回应包的状态值来修改验证信息的正确与否。(把错误的改正正确的,客户端就会因为验证成功了)
附:Burpsuite抓取、篡改回应包的方法
1、抓取数据包的界面右键—>Do interept—>Response to this Request

2、我们先将其发送至重放器中以便于验证篡改效果,我们发现正常回应包应该是如下状态的。(这个界面是没办法修改回应包数据的。)

3、我们回到Proxy,把包放出去,因为只有把这个来自客户端的包放出去,服务器才能收到,进而发出回应包,我们才能有机会抓取回应包,放出后得到回应包如下:(有的时候需要多放几次才能出来回应包)

4、此时我们就可以篡改回应包的数据,将其发送给客户端。(比如把Content_Length变成34718)

5、拦截并篡改成功。
口令爆破
一、问题阐述及分类
口令爆破分为以下几种情况:
1、普通爆破:用户名+密码
2、附识别验证码的爆破:用户名+密码+验证码(验证码一次一变)
3、附Token值的爆破
二、案例演示
pikachu靶场(基于表单的暴力破解)
1、普通的利用burpsuite的Intruder模块来暴力破解。(变量只有用户名和密码)

pikachu靶场(验证码绕过 on server)
1、观察靶场,输入用户名、密码及正确的验证码,进行抓包。


2、验证码不变,修改用户名和密码,重新发包,发现依旧提示用户名和密码不存在,那就意味着这里存在验证码套用的漏洞。

3、因此,我们可以使用同一个验证码来爆破用户名和密码,爆破成功。

分析:
session中的验证码没有被销毁,应该传一次验证一次的。

注意事项:
burpsuite发送到Intruder模块爆破就是相当于不断地在重放器Reapter中给服务器发包,而不是相当于在Proxy模块里把包直接给放走,如果直接给放走,验证码一定是会刷新的,那就不管用了。
pikachu靶场(验证码绕过 on client)
1、查看网页源代码发现验证码被写到了前端。

2、直接禁用js代码,抓包直接爆破用户名和密码,成功绕过。

pikachu靶场(token,客户端回显)
1、抓包发现设置了token,也就是说每发送一个数据包,token值都会变化,所以没办法同一个的token去爆破用户名和密码。

2、token值需要被爆破,观察响应包在客户端是否有回显,如果有回显就好办了。将数据包发到重放器,查询token关键字,发现在客户端中有下一次的token值。

3、利用Intruder模块爆破,攻击类型需要选择Pitchfork。

4、打开Intruder中的Option选项,设置线程为1(因为每发一个包token值会变一次,所以必须一个包一个包地发,如果是多线程,那就是一次发好多个,对token就不起作用了)。

5、将重定向选项选成“Always",让其每搞一次就重定向一次。

6、在正则匹配Grep-Extract的部分,点击添加——>在回应包中找到token值的位置(下一次的token值),将其选中。


7、将第三个参数的Payload集合设置成Recursive grep,然后下方就会自动出现相关的正则值。

8、开始爆破,查看爆破结果,可以发现,value的值作为了下一次的token。

附:验证码识别插件(captcha-killer)
burpsuite中的captcha-killer插件。
下载地址:https://github.com/c0ny1/captcha-killer/releases/tag/0.1.2

浙公网安备 33010602011771号