|
验证码外部控制(绕过)实例时间:2020-12-01 漏洞CMS: 0x01 前言源于上周到广州参加培训时的实战经历。 https://github.com/TheKingOfDuck/bcScan 先摸清楚网站是否可正常访问,以及中间件的一些基础信息。 查看返回的基础信息时有注意到多个thinkcmf字眼,比较眼熟,再有了本文。 0x02 过程按照先知社区 基础信息 根据 仔细读文章时有主意到这么一条讯息,我面对的版本是1.5的,他的验证码获取url长这样: http://127.0.0.1/index.php?g=Api&m=Checkcode&a=index&code_len=4&font_size=15&width=100&height=35&charset=1234567890 值得一提的是1.5的验证码是可以复用的。官方在1.6中修复了该问题。 主意观察url参数会发现 将charset修改为2222 绕后访问: 这样一来就无论你则么刷新验证码的值都始终为2222了。 (此处另一个问题:验证码的尺寸可控,可调整对应值发起DDoS攻击。) 那么问题来了,在1.6中可否通过该缺陷解决上文截图中水泡泡师傅提到的验证码问题呢?1.6的获取验证码的url长这样: http://127.0.0.1/1.6/index.php?g=Api&m=Checkcode&a=index&length=4&font_size=25&width=238&height=50 官方删除了 验证得出的确可行。 0x03 分析与利用直接定位到生成验证码的文件: 1.6/application/Api/Controller/CheckcodeController.class.php 代码篇幅不长这里就删除非必要的注释后直接贴上来了: emmmmm,这个代码逻辑相当简单,就是字节在参数中获取字符集了。1.6的前端代码中没加这个参数,为空就将字符集设为第50行中的那些了。 经过验证发现,该问题可以在1.x到2.x的版本中都存在。 如何利用? 以爆破为例,登录验证之前先携带着爆破用的cookie访问一遍加了 0x04 总结到最后1.5的那个站点是如何日下的?后台登录验证模块被删了的,登录界面存在,但是发送请求后404(可以看到验证码),注册页面被删。前台登录模块没删但是访问后发现验证码被删,登录包发送过去提示验证码缺失,解决方案是利用 转先知社区 作者:CoolCat 原文链接:https://xz.aliyun.com/t/4487 |