验证码漏洞【逻辑篇】
短信验证码漏洞
常见于绑定手机号、 重置密码、用户注册等功能点中
一、验证码回显
原理
把验证码校验的功能放到客户端来进行(返回数据包中、客户端页面中),从而导致验证码在客户端回显
利用
通过抓包工具可以截取真实验证码(如mobile_code=)
二、前端验证码
原理
验证码由客户端js生成并且在客户端用js验证,现常见于app和小程序中
特征
验证码由前端验证有个最大的特征就是对字母大小写敏感
绕过方法
方法一:使用插件禁用js
方法二:拦截修改返回包
①使用burp拦截正常账号获取验证码通过时服务器返回数据
②分析返回数据中成功时的数据
③再通过输入错误的验证码,来拦截服务器会返回错误验证码的数据包
④使用保存的信息里面的验证成功的数据,进行替换
三、验证码与手机号未绑定
原理
通过抓包修改参数中的手机号,将验证码发到自己手机号上
参考案例
https://mp.weixin.qq.com/s/rtcJjAQFaaM-65zUYwu8Cg
四、验证码爆破
原理
服务端没有对验证次数以及失效时间进行限制,并且验证码不大于6位数
//这种漏洞已经很少见了,常见于没有维修的旧网站
五、验证码复用(容易被忽视的漏洞)
当用户名或者密码错误时,验证码依旧不失效,这时候就可以对用户名或者密码进行爆破
原理
Session存在有效期,验证码使用后未被销毁,只要不刷新网页session就不会失效
利用
使用burpsuite的intruder模块进行爆破即可
//有些网站会弹出新的网页或者弹窗警告,只要不点击返回,验证码就不会刷新
六、无效验证码
原理
存在接口问题,因为每个功能都会被设为不同的模块进行耦合,如果出现验证模块与功能没有没有通过接口关联上,此时2模块不存在如何关联,所以无论输入谁收到的验证码,都可以通过
//此类漏洞多见于新、小网站
利用
(1)用自己手机号获取验证码
(2)换个浏览器,使用目标手机号发送验证码
(3)再将自己手机获取的验证码填入验证框中
七、验证码重放(短信轰炸)
原理
对发送验证码的次数、时间限制不严格,导致可以对短信验证码接口进行重放,大量发送恶意短信
//属于低危漏洞
找回密码漏洞
(姿势一)重定向
//常见于白盒审计
原理
通过将修改密码url上的参数进行修改,达到重定向到其他账户的修改密码url
黑盒测试
(1)查看在功能点url中是否包含验证身份的相关参数
(2)如果有,就url修改相关参数
(3)如果能实现重定向就成功,否则失败
演示案例-海洋cms
(1)首先,我们使用海洋cms找回密码的功能点,这里很明显可以看到url上的repswname参数是用于验证账号的
(2)这里的repswcode参数有一个设定,初始化没有修改过密码的账号的repswcode默认为y
(3)所以我们只需将repswcode=y,repswname=其他用户名,就可以重定向到其他用户的修改密码页面了
(姿势二)修改返回值
参考本文的:短信验证码漏洞_二、前端验证码_绕过方法_方法二
图形验证码识别工具
xp_CAPTCHA (白嫖版)
参考文章
(白嫖版)burp插件 xp_CAPTCHA验证码识别_Punished
(踩坑一)安装muggle-ocr库
用pip install安装,报错:
ERROR: Could not find a version that satisfies the requirement muggle-ocr (from versions: none)
ERROR: No matching distribution found for muggle-ocr
原因:
muggle-ocr库已被python官方移除了,无法用pip install安装,更换国内的镜像源也没有用
但可以通过安装包离线手动安装
链接:https://pan.baidu.com/s/1snmVd6RmGRzx5U8_IM9E4Q?pwd=pt3a
提取码:pt3a
下载好压缩包以后,直接使用pip install语句即可
pip install muggle-ocr-1.0.3.tar.gz -i https://pypi.douban.com/simple
注意!!!
笔者是用python 3.7.4安装的,不知为何用python3.6版本会报错
(踩坑二)burp安装python扩展
需要先安装jython环境
(1)在官网下载jar包
https://www.jython.org/download.html
(2) 在Burp上配置jython环境
操作演示(一)xp_CAPTCHAV3.2白嫖版
(1)先将数据包发送到intruder模块,攻击类型选择Pitchfork(交叉),把要爆破的位置和验证码位置添加到payload中
(2)在包中加入一行
xiapao:(图像验证码url链接)
(3)在payload选项中,我们前面的userid和pwd对应的就是payload set 1和2,这里我们使用的攻击类型,我们用默认的Simple list就行了
(4)在payload set 3中,攻击类型选择 Extension-generated,扩展程序选择 xp_CAPTCHA
(5)成功爆破
操作演示(二)xp_CAPTCHA_api V2.2收费版
(1)先登录,然后填写图像验证码url地址,选择对应的验证码类型(这里选择数英混合)
(2)先将数据包发送到intruder模块,攻击类型选择Pitchfork(交叉),把要爆破的账号和密码添加到payload中,验证码位置填写@xiapao_api@1@
注意!!!
(3)在resource pool(资源池)中将线程调整为1,不然验证码识别不出来
(4)爆破成功