小迪安全v2023学习笔记(七十五讲)—— 验证码安全插件识别攻击利用宏命令
文章目录
- 前记
- WEB攻防——第七十五天
- 验证码安全篇&接口滥用&插件识别&复用绕过&宏命令填入&滑块类
- 知识背景
- 图片验证码 - 插件识别-登录爆破&接口枚举
- 识别插件
- NEW_xp_CAPTCHA
- captcha-killer-modified
- 案例演示
- 插件识别
- 接口枚举
- 图片验证码 - 重复使用
- 原理
- 案例演示
- 滑块验证码 - 宏命令-某 Token&Sign & 滑块案例
前记
- 今天是学习小迪安全的第七十五天,本节课延续上节课的内容,仍然是验证码安全,不过这里主要是传统的图片验证码,讲了如何用插件进行识别,以及后续攻击利用
- 内容比较简单,主要是理解思路,然后学会工具的使用
- 所用到的靶场资源已放至下方链接,需要自取:
- https://pan.baidu.com/s/1dawN1_4FFMvoUdjMF7kArA
- 提取码:gaii
WEB攻防——第七十五天
验证码安全篇&接口滥用&插件识别&复用绕过&宏命令填入&滑块类
知识背景
- 现在网站人机识别验证码包括传统图片英数识别、滑块识别(滑到底/滑到中间)、点击识别(只点击/点击指定文字/点击指定图像)、其他智能识别(旋转/音视频等等)
- 验证码识别绕过等技术适用于:口令存在爆破,接口枚举调用,任意用户注册等安全问题
- 验证码简单机制 - 验证码过于简单可爆破
- 验证码重复使用 - 验证码验证机制可绕过
- 验证码智能识别 - 验证码图形码可被识别
- 验证码接口调用 - 验证码触发接口可枚举
- 这节课主要是针对传统的图片英数识别验证码,以及特定的滑块验证码进行绕过
图片验证码 - 插件识别-登录爆破&接口枚举
识别插件
- 这里识别验证码的插件有如下几个:
- NEW_xp_CAPTCHA:免费白嫖版,对复杂的验证码识别率可能比较低,看小迪演示感觉不太好用
- xp_CAPTCHA_api:上面这个的付费版,通过调用API去识别验证码,准确率会高一点
- captcha-killer-modified:免费白嫖版,感觉这个比较好用一点
- 这里我就演示两个白嫖版的插件吧
NEW_xp_CAPTCHA
- 直接下载
jar
包和server_4.3.py
文件,先更新ddddocr
库:
# 未安装ddddocr模块
python3 -m pip install ddddocr
# 已经安装过的请更新模块
python3 -m pip install -U ddddocr
-
然后在
BurpSuite
里加载这个jar
包,之后启动这个server.py
文件:
-
在BP中打开
xiao Pao
插件,然后设置验证码的接口地址:
-
最后在使用时将爆破的线程设置为
1
即可
captcha-killer-modified
-
下载
captcha-killer-modified
的jar
包以及codereg.py
文件,启动py
文件:
-
然后在BP中安装插件,配置验证码接口信息:
-
这里实战的时候还需要进行一些其他的配置,详细教程看这篇文章:Burpsuite验证码识别插件 “captcha-killer-modified“ 使用教程(详细)-CSDN博客
案例演示
插件识别
-
这里演示的案例是
SeaCMS
,搭建环境为PHP5.6
,MySQL5.7
,搭建教程不再演示,后台账号密码为admin/admin123
-
我们进入登录页面,发现他需要输入验证码,否则不让登录:
-
假设我们并不知道
admin
用户的密码,那么这里常见的情况就是尝试爆破密码,坏消息是这里存在验证码,但好消息是这个验证码是传统的英数验证码,比较简单 -
那不卖关子,这里我们就直接抓包上插件了:
-
转到
Intruder
模块,我们需要爆破pwd
参数,那就在这里加上$$
,然后需要识别验证码的地方是validate
参数 -
这里我就只演示
NEW_xp_CAPTCHA
插件的使用,我们需要找到该验证码的地址,最简单的方式就是直接F12
然后选中验证码元素:
-
这里可以看到源为
http://sea.cms:9991/include/vdimgck.php
,访问刷新几次验证确实是验证码接口 -
然后我们就配置到插件中,这里一定要记得点保存配置:
-
然后在
Intruder
模块中替换validate
参数的值为@xiapao@1@
,设置字典和线程数:
-
开始爆破,可以访问8899端口查看识别结果:
-
说实话真的一般,并且这里也没有成功爆破出来正确密码,一直显示验证码是错误的,我也不懂为什么
-
那我们这里换成第二个插件
captcha-killer-modified
试一试,根据上面文章的配置,绕过是这样就说明成功识别:
-
然后这里还是设置线程数为
1
,延迟为1
秒,直接爆破:
-
他这里就全部变成了密码错误,说明验证码是能成功识别的,为什么这里密码为admin也不对,是因为我们没有创建普通用户,这里我也不进行演示了,创建一个普通用户然后再跑一遍是可以的
-
好,那这里就是关于插件识别的部分,通过插件我们能够成功识别到验证码,但是很致命的问题就是这个速度很慢
接口枚举
-
这个其实就是假设他有个接口,需要先进行验证码识别之后才能调用,比如这里,如果不输入验证码,那就发不了短信验证码:
-
输入图片验证码,然后获取短信验证码抓包:
-
转发到
Intruder
模块,按照刚刚的配置,直接攻击:
-
这里如果他没有做任何验证的话,那么是会一直调用短信发送接口,向指定手机号发送短信验证码,造成短信轰炸
-
小迪上面是可以的,但是我这里不知道是不是网站更新了,或者没有注册账号的原因,没有细测,所以并没有发送短信
图片验证码 - 重复使用
原理
- 图片验证码重复有两种情况,一种是如果不手动刷新页面,他就不刷新验证码,导致这个验证码能够一直使用;另一种是即使刷新了页面,但是之前的验证码仍然能够使用
- 当然也有一些情况下刷新页面后重复提交失败,并不是验证码失效了,而是
token
这种值导致数据包存在唯一性
案例演示
-
这里还是
SeaCMS
,如果我们不刷新页面,那么可以重复使用当前验证码去提交爆破密码:
-
这里随便输入一个密码
123456
,然后点击登录:
-
会提示密码错误,此时不要点击手动跳转,我们直接点击上面的返回箭头回到刚才的页面,会发现验证码并没有刷新,此时仍可以提交密码
-
第一种情况的重复提交大概就是这么个意思,理解即可
-
第二种的特殊情况其实之前的案例已经演示过了,带有
token
值:
-
原本这里设计的初衷是每个
token
只绑定一个验证码,但是这里并不是,他的token
可以复用,以至于我们可以直接爆破图片验证码 -
当然,这里删掉
token
也是可以尝试看看能不能发送短信的,这里就不细测了 -
然后小迪上面这里是用福利期货做的演示案例,这个我们打不开,也演示不了,大概理解这个思路就行
滑块验证码 - 宏命令-某 Token&Sign & 滑块案例
- 参考文章:burp suite 高端利用之编写宏规则绕过滑动验证码_怎么用burp绕过滑块验证-CSDN博客
- 这篇文章中的滑块验证主要是因为他的验证值是直接写死在前端的,而不是滑动完之后再显示的,所以可以一开始用宏命令去爬取最后的值,然后放到验证的参数中,导致绕过
- 那这样不管是滑块还是点击验证,只要能找到他最终的验证值,我们就可以进行替换,导致绕过
- 所以其实比较难遇到,大部分都是点击之后才出现,那就没办法了,比如这里: