一次非常普通的短信轰炸 AND【TangGo】第三方API调用验证码识别
抓包首先访问到漏洞所在页面

查看历史流量

注意,在响应包中出现了参数
"id":"*****",
"image":****
输入手机号和图形验证码在获取验证码后再查看请求体

这里含有图形验证码的ID和orgNumber
开始使用识别验证码插件识别
# 验证码插件识别下载地址
https://github.com/c0ny1/captcha-killer/releases/tag/0.1.2

将验证码请求包发送到验证码识别插件中
进行发送,报错了,缺少关键字,关键字就是img内容的字段

获取成功后,导入ddddocr模版

然后开启识别脚本

可以看到识别度是100%

进行短信轰炸还需要提取验证码ID
作者不清楚burp这个步骤哪里操作,求原谅
有知道的佬可以联系我,我向你取经
这里使用TangGO 测试工具来进行提取图形验证码的ID以及img内容来爆破
# 工具下载地址
https://tanggo.nosugar.tech/#/
打开 TangGO 测试工具,找到 HTTP模糊测试工具:

打开后进入到自定义流程中,新建


丢入图形验证码请求包后,把完整的响应体返回给get_yzm变量完成配置后,点击测试

可以成功获取到图形验证码响应体,再增加一条流程来提取响应体的ID和image内容

将响应体发送到正则表达式生成器中

选取ID值,后点击正则表达式,进行测试后提取ID值成功,复制正则表达式后,新建流程数据处理流程

操作变量就是刚才获取响应体的绑定变量,然后对处理规则新建

添加成功后,再返回到正则提取器中选取image内容

这默认是20,修改成5即可,拿到正则表达式后,再增加数据处理流程

目前是三条流程

需要把image内容去识别出验证码,那么就需要获取识别验证码的API请求
打开Wireshark,由于API是本地开启的,就选择回环流量

然后输入HTTP进行筛选出HTTP请求,然后在burp验证码识别插件中进行识别,来获取API接口的请求


查看它的HTTP流(ctrl+alt+shift+H)

观察API请求,请求体就是图片的base64编码
POST /reg HTTP/1.1
Authorization: Basic f0ngauth
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:97.0) Gecko/20100101 Firefox/97.0
Connection: keep-alive
Host: 127.0.0.1:8888
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Length: 3484
Content-Type: application/x-www-form-urlencoded
图片base64编码
再新建流程对api请求获取识别后的验证码,丢入API请求后,在请求头中插入提取的image内容绑定的变量

这个就是完整流程
获取到图形验证码响应体->提取ID && 提取inage->api接口识别验证码

然后对获取验证码请求插入对应变量

然后进入测试过程进行测试配置

点击开始测试后轰炸

可以看到响应中短信验证码发送成功
查看测试流程和最终请求体


查看手机短信结果


其实这里的短信验证码也有问题的,由于没有限制的直接发送短信验证码,且短信验证码是4位数更是20分钟有效,在爆破短信验证码后,既可注册成功获取到账户token值,达到任意用户注册这里我就没有多写了

修复建议:
1、限制验证码的有效时效,通常设置在30秒至50秒之间失效。
2、限制同IP在短时间内频繁请求验证码。
3、对图片验证码,增加噪点渲染,防止被光学字符识别(OCR)识别。
4、短信验证码输入错误,立即刷新图形验证码,每一次获取短信验证码时进行图形验证码校验,设置短信验证码错误次数上限需要重新获取新的短信验证码,以防止对短信验证码的暴力破解攻击。
文章转自微信公众号@Kei sec
最新文章
- 智能语音新革命:有道与Azure的API服务对决
- 使用 ClickHouse Cloud API 和 Terraform 进行 CI/CD
- 用ASP.NET Core 给你的API接口打造一个自定义认证授体系
- REST API与WebSocket API区别?
- 如何在Python中使用免费的DeepL翻译API
- 如何获取tavily搜索API平台秘钥(分步指南)
- API可观察性:需要监控的5个指标
- 图和图谱的区别:深入解析与应用场景
- Railyard:我们如何快速训练机器学习模型…… – Stripe
- 如何构建API:从端点设计到部署的完整指南
- 通过 SEO rank API 获取百度关键词排名
- 音乐情绪可视化:Cyanite.ai 音乐情感分析API如何帮助我们理解音乐