攻防渗透集锦JS泄露突破多个后台
字数 2906 2025-09-23 19:27:38
通过JS文件与接口信息泄露进行渗透测试的教学文档
0x01 前言
本文档详细剖析了一次完整的Web渗透测试过程,核心攻击向量为Swagger API文档泄露导致的敏感信息泄露,并综合利用目录爆破、接口测试、用户名枚举、弱口令爆破等技术,最终成功突破多个系统后台。本次渗透充分体现了“信息收集的深度决定渗透测试的高度”这一原则。
0x02 信息收集阶段
1. 目标入口发现
- 初始入口:一个常见的系统登录端口。
- 关键发现:通过对目标Web服务进行目录与路径爆破,发现了一处
Swagger UI接口文档页面(例如/swagger-ui.html,/swagger/等)。 - 漏洞性质:该Swagger页面存在未授权访问,无需登录即可查看。
2. Swagger文档分析
- Swagger文档的价值:Swagger(OpenAPI)是一种用于描述RESTful API的规范。泄露的Swagger文档包含了API的所有端点(Endpoint)、请求方法(GET/POST/PUT/DELETE)、参数、甚至示例值,是攻击者的“宝藏图”。
- 信息提取:
- 访问Swagger UI页面后,通常页面会指明其使用的JSON规范文件路径(通常为
/swagger/v1/swagger.json或/v2/api-docs)。 - 直接访问此
swagger.json文件,获取完整的、结构化的API信息。
- 访问Swagger UI页面后,通常页面会指明其使用的JSON规范文件路径(通常为
3. 自动化工具提取接口
- 工具使用:使用自动化工具
swagger-hack来解析swagger.json文件,并提取所有API端点。 - 命令示例:
python swagger-hack2.0.py -u http://target.com/swagger/v1/swagger.json - 工具输出:工具会生成一个CSV文件(如
swagger.csv),其中包含所有接口的URL、HTTP方法、参数等详细信息。
4. 构造测试数据包
- 测试策略:将提取出的所有接口URL导入Burp Suite的Intruder模块进行模糊测试/爆破。
- 两种常见请求方式:
- GET请求:直接将接口路径拼接在目标域名后,形成完整的URL进行访问。
GET /api/xxx/list HTTP/1.1
- POST请求:即使接口描述中没有明确参数,也尝试发送一个空的或默认的JSON报文体。
POST /api/xxx/config HTTP/1.1Content-Type: application/json;charset=UTF-8{}
- GET请求:直接将接口路径拼接在目标域名后,形成完整的URL进行访问。
0x03 敏感信息泄露与利用
1. 发现泄露信息
- 经过对大量接口的爆破,发现多个返回
200状态码的接口,其响应体中包含了敏感的配置信息。 - 泄露内容示例:
{ "brokerIP": "xx.xxx.161.59", "brokerPort": 1883, "clientID": "iot-driver-001", "userName": "msl_mqtt_user", "password": "3HlcSiVhvalAq9JU" }{ "brokerIP": "xxx.xxx.32.65", "brokerPort": 1883, "clientID": "iot-driver-003", "userName": "msl_mqtt_user", "password": "3HlcSiVhvalAq9JU" }{ "clientId": "msl_iot_226CC04AF6026B84", "userName": "iot-driver-user001", "password": "z@.x%h>4*k18" } - 信息整理:获得两组IP地址 (
161.59,32.65) 和两套凭证:- 凭证A:
msl_mqtt_user/3HlcSiVhvalAq9JU - 凭证B:
iot-driver-user001/z@.x%h>4*k18
- 凭证A:
2. 扩大攻击面
- 资产发现:将泄露的IP地址作为新的目标,进行Web服务端口扫描(如80, 443, 8080等),寻找新的Web应用入口。
- 结果:在两个IP上都发现了新的Web登录界面,其特征与初始目标类似(如MQTT管理界面、物联网平台后台)。
3. 凭证复用尝试与受挫
- 首次尝试:使用泄露的凭证A和B,在两个IP新发现的登录口上进行尝试。
- 结果:登录均失败。表明这些凭证并非这些Web后台的登录凭证,可能是用于连接MQTT消息队列或其他内部服务的专用凭证。
0x04 突破点:用户名枚举与弱口令
1. 重新审视信息
- 当直接凭证复用失败后,回到Swagger泄露的信息中寻找线索。
- 关键发现:文档中多次出现
MSL这个字符串(如"driverName": "MSL")。这极有可能是企业名称、项目代号或产品名称的缩写。
2. 用户名枚举漏洞
- 测试过程:选择其中一个登录口,尝试使用
MSL作为用户名,并故意输入错误密码。 - 漏洞发现:对比使用肯定不存在的用户名(如
random123)和MSL作为用户名时,服务器的错误响应信息存在差异。- 不存在用户:可能返回“用户不存在”或“凭证错误”。
- 存在用户(
MSL):返回“密码错误”。
- 漏洞确认:这种响应差异确认了用户名枚举漏洞的存在,证明了
MSL是一个在该系统中存在的有效用户名。
3. 弱口令爆破
- 思路转变:既然有了确定的用户名 (
MSL),而之前泄露的密码无效,极有可能是管理员为Web后台设置了非常简单(弱)的密码。 - 爆破攻击:使用Burp Suite Intruder模块,对目标登录接口进行爆破。
- 攻击类型:Pitchfork(叉子)或Cluster bomb(集束炸弹)。
- 有效载荷集1(用户名):固定为
MSL。 - 有效载荷集2(密码):加载一个常用的弱口令字典(如
admin,123456,password,MSL@123,msl2025等)。
- 结果:爆破成功,使用一个非常简单的弱口令(文档中提及“第一个就出了”)成功登录系统后台。
0x05 总结与提炼
关键知识点
- 目录爆破:是发现隐藏资产、测试接口、配置文件的必备手段。
- Swagger API泄露:
- 属于敏感信息泄露漏洞,危害极大。
- 一旦发现,必须彻底挖掘其所有接口。
- 工具
swagger-hack能极大提高效率。
- 接口安全测试:
- 对未知接口不仅要测试GET,也要测试POST等其他方法。
- 即使API文档未要求参数,尝试发送空或默认的JSON body。
- 凭证复用攻击:从一处泄露的凭证一定要尝试应用到当前目标的其他系统和服务上。
- 用户名枚举漏洞:
- 通过对比登录失败时的服务器响应信息(HTTP状态码、返回信息、响应时间)来判断用户名是否存在。
- 是突破登录环节的重要突破口。
- 弱口令:永远是最高效的漏洞之一。在获得有效用户名后,弱口令爆破成功率极高。
- 信息关联推理:从泄露的配置信息中推断出潜在的用户名(如公司缩写、项目名),是本次渗透成功的关键思维。
防御建议
- 开发阶段:
- 生产环境禁用或权限控制Swagger等API文档调试界面。
- 对API接口进行严格的权限校验和访问控制,避免未授权访问。
- 运维阶段:
- 定期进行安全扫描,及时发现信息泄露问题。
- 在Web服务器配置中,阻止对
swagger.json,api-docs等关键文件的公共访问。
- 安全编码:
- 登录功能应使用统一的错误提示,如“用户名或密码错误”,防止用户名枚举。
- 强制实施强密码策略,并定期更换密码。
- 网络架构:
- 将内部服务(如MQTT Broker)部署在私有网络,并通过网关访问,避免将其管理界面直接暴露在公网。
免责声明:本文档仅用于网络安全教学和研究目的,旨在帮助相关人员了解攻击原理并采取有效措施进行防护。请勿将文中所述技术用于任何非法用途。