这是一次针对某SRC厂商某业务的一个登陆页面的测试

文中相关漏洞现均已修复 提取其中思想精髓 分享给诸位师傅

梅开一度

开局一个登陆框,正常情况下,我随手一个admin/123456打过去,如果提示"账号不存在",或者"密码错误"。再立马掏出我祖传的用户遍历及弱口令字典。定向爆破。

但此时提示"账号或密码错误",就老老实实去注册,走正常流程了。

burp代理开启,记录下所有数据包,并对其中可疑参数记录标记。

输入手机号, 获取验证码,这时已然收到了真实的验证码,但是为了获取更多的隐藏参数以及尽可能的走全业务逻辑,这里随便输了一个123456,故意让其报错。

果然返回验证码错误,但是同时数据包中也反悔了正确的验证码。

至此,任意用户注册一枚到手,提交到src很快啊,给了三位数的赏金。

但我并不满足于此,正所谓,不像挖高危的安福仔不是一个好的白帽子。

很自然的想到注册的地方都出问题了,那找回密码的地方呢,是否也同样存在验证码就回显在响应包中呢?

抱着试一试单车变摩托的心理,尝试却发现返回包直接返回false,尝试将返回包修改为true,仍无法绕过前后端的校验。

梅开二度

两周过去后,发现已经修复了,但是返回包的数据修复的很奇怪,删了好多东西,就只剩下一个flag参数了。

{"flag": "error"}

同样想当然的去尝试了一下将"error"修改为"success"等,无果又测试了一遍,还是没问题。看来真的是修复了,但总感觉哪儿还是有问题。

掏出之前保存的数据包,翻回到之前的数据包,对照分析了一下,这次果然有了新的发现。

第一次测试时的注册接口
GET /register/xxx HTTP/1.1
Host: xxx.xxx.com第二次测试时的注册接口
GET /registerPage HTTP/1.1
Host: xxx.xxx.com

好家伙,接口都直接换了,难怪感觉到响应包哪里不对劲呢.

啪,很快,我直接用原来的接口放上原来的payload打了过去,很快啊,验证码又返回在了响应包中。

及时提交到某src,这波又给了三位数的赏。

这里推测如下:

是业务那边怕直接修改源码出差错后会影响原来正常逻辑,所以备份了一下修改了一个新的接口去替换旧的那个接口,而忘记将备份的那个旧的接口修改并及时删除,依然存在着。

这里bypass也就是通过构造请求包去请求旧的那个接口,然后得到回显。

一点点小tips

所以在测试过程中比较重要的数据包要有意识的保留及整理,待复查的时候,要看看在原漏洞触发处是不是有了新的页面或者调用了新的接口,以及旧的接口还在否。

是的话,用原来的url,接口或者exp直接打一下,看能不能捡漏(当然这种情况绝大多数会是逻辑漏洞吧)

梅开三度

又是两周过去啦,又是我,又是这个站,又是这个登录框
这次旧接口问题已经被修复,无法再通过就接口直接打验证码了。
啪,很快,灵关一闪,会不会这里只是校验了接口和接口对应的验证码是否一致,而不校验手机号的呢?

接口对应的验证码是否一致,而不校验手机号的呢?

说干就干,先在注册填写手机号码获取验证码的时候,使用自己的手机号进行接口验证码。

发送验证码之后马上把手机修改成要任意注册的手机号码(很关键)

这里的验证码填写的是刚刚155xxxx3531接收到的验证码,而131xxxxxxxx这个号码是没有获取过验证码的。

点击注册,真的就直接注册成功了,验证了上面的想法是正确的,这里只验证了验证码接口和对应的验证码,并没有校验手机号是否为接收验证码的那个手机号。

当成功产出一个漏洞时,要思考的有两件事,即横向纵向上扩展成果。

横向

既然这里没对注册手机号和验证码同时验证,如果验证码还没有失效的话,批量注册一下?

将手机号的后两位作为变量,批量跑了一下也都成功了(这里设置两位作为变量,只是想证明漏洞真实存在,尽可能多的减少对业务的影响).

又是一波三位数的赏金。

梅开四度

梅都开三度了,还是三位数奖金,也是醉了。。。
不想挖高危的安服仔不是一个好的白帽子,继续搞。

纵向

很容易想到既然验证码没有与实际接收手机号的号码绑定起来。那它在整个账号体系里对应的功能点可不止注册哦。对的,还有密码找回嘛。

后米看就是同样的玩法了。

在找回密码处填写手机号码获取验证码的时候使用自己的手机号进行接口验证码,得到验证码后将自己的手机号替换为你想改密码的手机号。短信验证码就输自己手机号接收到的那个。

抓包操作如下:

bur拦截到如上所示的包,不要放行。Ctrl+r到repeater模块,修改mobile为你的目标手机号。

发包,目标账号的密码被修改成功。

这里继续尝试批量问题,也仍存在,即批量修改任意用户账号密码。

抱着单车变摩托的心理,提到src,冲。

然而,大意了,不讲武德,耗子尾汁。

我淦,万万没想到。可能前三个洞提的导致这个资产进入了保护期。

梅开五度

十几天后,抱着试一试的心理,结果不出所料,怕啥来啥,洞还是给修复啦。
没办法,谁让咱头铁,接着搞。

压箱底的祖传技巧

这里分享一个压箱底的祖产技巧,不保证百分百能成功,但遇到这种情况,值得一试。

F12切换到移动设备调试

好家伙,界面感觉都和pc端的不太一样了,然后抓包,发现接口果然也不太一样。
后面就是和梅开四度里的玩法一样了,如下图

通过切换访问设备的标识成功bypass,收获批量修改任意用户账号密码一枚。

提交到SRC后,最终get到了四位数的赏金。

总结:

心细挖天下!!!

梅开一度:尽可能的走一遍完整的业务逻辑流程,尽管你觉得这里99.99%的可能性不会出错。

梅开二度:整理好测试中比较重要的数据包,揣测业务的修复心理,尝试用原来的payload打原来的接口。

梅开三度:思考漏洞产生表象后的触发原理,进而扩大漏洞的利用面。

梅开四度:同一个漏洞对应在业务体系里的对应的功能触发点可能不止一处。

梅开五度:不同设备的访问请求(User-Agent),可能会导致实现同一业务功能的接口不同。

记一次短信验证码的“梅开五度”相关推荐

  1. JAVA实现利用第三方平台发送短信验证码

    前段时间自己做的一个小项目中,涉及到用短信验证码登录.注册的问题,之前没涉及过这一块,看了别人的博客其实也是似懂非懂的,现在就将自己做的利用第三方短信平台来发送验证码这个功能记下来. 本文以注册为例, ...

  2. 短信验证码、手机验证码等为什么是6位?

    在移动互联网时代,大家对短信验证码应该都不陌生,最常见的场景有网站或APP注册.动态码登陆.找回密码.网银获取动态密码等.其根本目的是利用手机号码来验证用户身份,保证用户的真实性,降低垃圾注册.有个小 ...

  3. JAVA利用第三方平台发送短信验证码。

    前段时间自己做的一个小项目中,涉及到用短信验证码登录.注册的问题,之前没涉及过这一块,看了别人的博客其实也是似懂非懂的,现在就将自己做的利用第三方短信平台来发送验证码这个功能记下来. 本文以注册为例, ...

  4. 安卓CountDownTimer实现全民夺宝抢购倒计时和短信验证码倒计时

    在sina里看到了什么全民夺宝的链接,然后忍不住1元的诱惑被坑了10多块,什么都没有抽到,但是还是有人抽到了不知道是不是坑爹的,然后也就动手做一下倒计时的功能. 先看全民夺宝: 说起这个功能是不是感觉 ...

  5. java 发送短信验证码(使用网易云信)

    使用的是网易云信平台,其实每个大平台上都会有对应的SDK,Demo和开发文档,但是有的人只会百度,不想看官方文档,就像我也是如此,所以自己在写短信验证码的时候做个笔记,做个详细的分享,希望在帮助自己的 ...

  6. android+自定义发彩信,Android实现获取短信验证码的功能以及自定义GUI短信验证

    短信验证功能大家都很熟悉了.在很多地方都能见到,注册新用户或者短息验证支付等.短信验证利用短信验证码来注册会员,大大降低了非法注册,很大程度上提高了用户账户的安全性. 目前市面上已经有了很多提供短信验 ...

  7. 使用java实现手机短信验证码

    使用java实现手机短信验证码 一.配置第三方短信接口 二.代码部分 三.效果展示 一.配置第三方短信接口 我们使用阿里云的短信服务(可以免费体验) 阿里云 进入阿里云的官网,查找短信服务,点击短信控 ...

  8. 怎样解决PHP、JAVA短信验证码api发送失败?

    初次使用PHP.JAVA短信验证码平台接口API,很多企业用户都会遇到一些问题,尤其是验证码发送失败的问题,更是数不胜数.那么,短信验证码为什么会发送失败呢?如何才能快速解决呢?下面为大家详细说一说验 ...

  9. java短信验证码失效时间_java实现短信验证码5分钟有效时间

    本文实例为大家分享了java实现短信验证码5分钟有效时间,供大家参考,具体内容如下 实现一个发送短信验证码的请求,要求5分钟之内重复请求,返回同一个验证码. 网上可找到几种方案: 如,存储数据库或缓存 ...

最新文章

  1. Windows下电脑硬盘的日常维护细则
  2. python学习音频-Python学习笔记--音频处理
  3. ASP.NET MVC 过滤器(三)
  4. saltui试用遇到的问题
  5. 塑钢瓦图片_塑钢瓦和彩钢瓦哪种好 如何准确选购
  6. qhfl-6 购物车
  7. [机器学习]gcForest算法理解
  8. Ubuntu18.0.1 安装 anaconda conda cudnn pytorch-gpu
  9. 【WPF】WPF中调用Winform
  10. 最新HTML BroadcastChannel API引荐
  11. Json API接口数据生成
  12. 一个技术汪的开源梦 —— 公共组件缓存之分布式缓存 Redis 实现篇
  13. 如何在Word中输入带圈数字1-10的黑底白字和白底黑字的数字字符?
  14. 软件测试环境搭建及维护注意事项
  15. 计算机技术对英语要求高吗,学习计算机专业对英语要求高吗?
  16. 2013年IT TOP100
  17. 开始编写寄几的 CSS 基础库
  18. 详解position:sticky
  19. 小松的STM32教程(2)—— OLED显示
  20. pycharm 破解

热门文章

  1. 微信能远程控制电脑吗_牛皮!微信远程控制电脑这个神器太厉害了!
  2. leetcode--113.路径总和 Ⅱ
  3. ES6的字符串与正则表达式
  4. 【详解!思路清晰】1095 解码PAT准考证 (25分)
  5. eclipse怎么导入一个Java项目(莫要错过,最详细教程!)
  6. 代码分析+原理图解——棋盘覆盖问题-分治法
  7. 28行代码AC——习题3-12 浮点数(UVA 11809 - Floating-Point Numbers)——解题报告
  8. [leetcode]151.翻转字符串里的单词
  9. 部署Squid 代理服务器(内含传统、透明代理服务器的配置、ACL访问控制、日志分析、反向代理)
  10. wifi模块 服务器通讯协议,模块之间通信协议