前言
Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。相关的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。Swagger-UI会根据开发人员在代码中的设置来自动生成API说明文档,若存在相关的配置缺陷,攻击者可以未授权翻查Swagger接口文档,得到系统功能API接口的详细参数,再构造参数发包,通过回显获取系统大量的敏感信息。
"绕过"
在挖掘src的时候,我们经常会使用burp插件发现一个Spring的路由,其中最终要的莫过于swagger文档。
但有时候总是事与愿违,swagger的路径经常会提示权限不足或者文档已被删除。这时候我们怎么继续利用呢?网上常见的利用xff、..;/等等来进行权限绕过。
但是我们想一下,获取swagger文档的目的即获取一些api路径,呢么有么有其他方式来获取这些路径呢?
在某次项目中,我遇到了swagger路径访问不成功,此时我继续进行目录扫描发现存在mappings路径。
在返回的json字符串中,我发现了patterns参数竟然有很多路径。
于是记住chatpgt编写路由提取脚本
import json
# 输入的JSON数据
with open('task.txt','r') as fp:
json_data = fp.read()
data = json.loads(json_data)
web_handlers = data['contexts']['application-1']['mappings']['dispatcherServlets']['dispatcherServlet']
# 提取所有patterns
patterns = []
for handler in web_handlers:
try:
patterns.extend(handler['details']['requestMappingConditions']['patterns'])
except:
pass
# 打印提取的patterns
print("Extracted Patterns:", patterns)
结合burp批量访问
最终发现了多个接口存在未授权,泄漏了大量敏感信息。
原文始发于微信公众号(哈拉少安全小队):赏金猎人|针对Swagger的另类绕过
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论