> 文章列表 > web攻防-通用漏洞验证码识别复用调用找回密码重定向状态值

web攻防-通用漏洞验证码识别复用调用找回密码重定向状态值

web攻防-通用漏洞验证码识别复用调用找回密码重定向状态值

目录

一、知识点概述

二、找回密码过程中涉及到的安全问题

三、案例演示

<验证码回显>

<修改Response状态值>

<验证码爆破>

四、真实案例1

<更改状态值>

<验证码接口调用>

五、真实案例2

<用户名重定向>

六、安全修复方案


一、知识点概述

  • 找回密码逻辑机制-回显&验证码&指向。
  • 验证码验证安全机制-爆破&复用&识别。
  • 找回密码-客户端回显&Response 状态值&修改重定向。
  • 验证码技术-验证码爆破,验证码复用,验证码识别等。

二、找回密码过程中涉及到的安全问题

  • 用回显状态判断-res 前端判断不安全。
  • 用用户名重定向-修改标示绕过验证。
  • 验证码回显显示-验证码泄漏验证虚设。
  • 验证码简单机制-验证码过于简单爆破。

三、案例演示

<验证码回显>

1.打开目标站点,输入账号和密码后点击登陆。

2.登陆后可以看到下面的信息,点击账户绑定。

3. 进入到了下面的页面,点击绑定手机号。

4.填写手机号后进行抓包。

5.抓到的数据包如图所示。 

6.此时将数据包放出,可以看到验证码已经发送了,但是没发送到我们的手机上来(那个手机号是虚构的不知道是谁的)。

7.我们随便输入验证码”123456”然后抓取数据包。

8.数据包如下所示。

9.可以看到数据包内有一个选项,下图中红色框出部分,这部分就是验证码。

10.我们将其粘贴到下面我们刚刚随便猜解的验证码的位置,然后放包。

11.可以看到网站内提示“手机绑定成功”。 

12.这就是第一种情况——验证码的回显。 

<修改Response状态值>

13.我们再次将其解绑来讲解另一种方式。

14.点击“立即绑定”。

15. 再按照前面的操作使验证码进行回显。

16.我们对数据包进行下面的操作,这个操作就是使得回显值也会发送到burp里。

17.选择上面的选项后我们放包。可以看到得到了回显数据包,其值为“3”。

18.如果将此数据包放出去,网站内就会提示验证码不正确。

19.那么我们此时就大概知道了“3”就是验证码不正确。

20.我们再采取上面的方式,但是将正确的验证码填入,可以看到返回值是“1”。 

21.此时我们放包就可以看到手机绑定成功。

22.因此可以猜想,利用此方式,就可以不用理会验证码正不正确,只需要更改返回包内的数字网站内即可返回成功绑定。

23.但是我们还不能确定是否真的绑定成功了,因为我们更改的仅仅是浏览器接收的值。到底成不成功不是以浏览器的返回值为准,而是要看服务器是否会例会这个值,如果服务器不理就不会真的绑定成功。

24.我们通过将其值从3更改到1的方法绑定后,刷新页面查看。

25.可以看到刚刚网站虽然提示绑定成功了,但是这里却并没有真的绑定成功。

26. 这就说明到底有没有绑定成功,是通过服务端确定的,而不是通过返回的状态码确定的。

27.所以这种攻击的实现需要网站是根据前端来进行验证的,而不能是通过服务端验证的。

28.这就是另一种情况——修改Response状态值,res前端判断不安全。

<验证码爆破>

29.我们再来讲解另一种方式。

30.首先再次抓取数据包。

31. 这里是6位纯数字验证码,就存在1,000,000种可能的组合方式。

32.在我们提交验证码的时候,如果网站对提交的次数没有要求,那么这里就存在爆破的可能性。

33.右击鼠标后选择下面的选项。

34. 接下来来到下图的位置。

35. 首先点击清除。

36.将下图所示位置选中后点击“add”。

37.来到下图位置。

38. 选择“Numbers”。

39. 为了节省时间我们将下面的配置设置成如下图所示。

40. 进行下面操作后开始发送数据包。

41. 可以看到正确验证码的数据包内值为1,而其它错误的均为3。

42.这就是另一种情况——对验证码没有实施安全措施,可以进行爆破获取。

四、真实案例1

<更改状态值>

1.打开目标软件。

2.进入软件。

3. 点击“我的”,然后点击“登陆/注册”。

4. 假如说我们要重置个人密码,点击“忘记密码”。

5. 将相关信息输入后点击“获取”,获取验证码。

6.抓取到下图所示的验证码。

7. 对数据包进行简要分析

 8.我们对上面的md5加密的字符串进行解密,但是返回未查到,那么就先不理会它。

9.我们先将数据包放出去,然后在填写验证的位置随便填写验证码。

10. 点击下一步后抓取数据包。

11. 但是在数据包被并没有发现验证码的踪影,说明其前端显示是没有的。

12.那么我们就可以想到能不能通过修改状态来绕过呢。

13.因此此时我们需要换一个我们自己的账号,来进行修改密码,获取数据包来观察数据包特征。

14.输入得到的正确的验证码。

15.抓取数据包后选择下面的选项来抓取其回显数据包。

 16. 放包后可以看到验证成功的状态。

17.将成功的状态码和失败的状态码放在一起方便进行对比。

18.再次随便输入验证码,然后抓取返回数据包。

19.将刚刚复制下来的成功的状态码替换掉失败的状态码。

20. 放包后可以看到成功验证了,然后跳转到了修改密码的界面。

21. 输入密码点击确定后抓取数据包。

22.抓取到的数据包如下图所示。

23. 将这个数据包发送出去后提示密码重置成功。

<验证码接口调用>

24.打开目标软件,在修改密码这里存在验证码发送的接口,当我们点击获取后,其就会给我们发送一条验证码。

25.我们点击获取验证码后抓取数据包。

26. 如果这个数据包放出之后,其就会发送验证码。

27.将数据包发送到“Repeater”,点击一次放包,可以看到验证码成功发送了。

 27.至此我们想到如果不断的去发送数据包时的两个问题:

  • 不断放包,会不会不断给我们发送验证码。
  • 正常的安全的图形验证码每次我们点击一次获取之后,其都应该刷新一次,并且就算图形化验证码输入的正确,发送验证码也要有时间间隔,短信轰炸的原理就在此。
正确设计:
获取:判断图像验证码是否正确。————防机器,确保人工
获取:每一分钟才能触发一次发送验证码。————防止乱用(短信轰炸)

28.我们利用上面抓取到的数据包重复发送,发现每次放包之后,都会成功将验证码发送。这里接口不断被调用,验证码就不断被发送。

29.扩展:

后台猜密码:

  • 验证码提交猜解-复用(验证码等于没有)
  • 不存在复用-(验证码识别)

这里推荐两个验证码识别插件:

  • https://github.com/c0ny1/captcha-killer
  • https://github.com/smxiazi/NEW_xp_CAPTCHA

五、真实案例2

<用户名重定向>

——海洋CMS

1.打开目标网站。

 2.来到注册页面,输入注册信息后进行账户注册,注册两个账户。

 

3.来到找回密码的页面。

4. 我们会受到如下所示的邮件,里面包含重置密码的链接。

5. 打开链接就来到了重置密码的界面。

6.其核心就在接收的邮件里的找回密码的链接里。

7.我们尝试将链接末尾的“1”,改成“2”,然后进行访问,来尝试其会不会修改2的密码。

8. 但是结果是失败的,它返回了下面的页面。

9. 我们注意到这个值,这个值类似于身份验证。

10.我们结合其原码进行分析,可以看到其会与数据库内存储的信息进行比对。

11.查询数据库后我们将其进行对应的修改,访问后发下成功可以更改2的密码了。

12.那么就会产生一个问题,如果不查看数据库,那么怎么知道那个值是y呢?

        答:其实如果你再注册一个账户就可以发现,每次新注册的用户的那个值都是默认固定的y,当找回过密码之后才会发生变化。 

13.总结:

        这就是利用用户名的重定向,实现对任意用户密码的修改。

六、安全修复方案

  1. 找回机制要进行每一步验证-防绕过重定向。
  2. 找回机制要进行服务端验证-防res数据修改。
  3. 找回机制要控制验证码安全-防验证码攻击。
  4. 验证码接口需验证后被调用-防接口被乱调用。
  5. 验证码引用智能化人工判断-防验证码被识别。
  6. 验证码采用时间段生效失效-防验证码被复用。