从 Swagger 1.x 到 OpenAPI V3:全版本接口未授权检测

从 Swagger 1.x 到 OpenAPI V3:全版本接口未授权检测

0x01 工具介绍

用于探测 Swagger/OpenAPI 文档并尝试未授权访问接口,辅助安全自查。识别 swagger-ui 页面、swagger-resources 入口、Swagger 1.x/V2/V3 文档,在谨慎策略下对接口进行 GET/POST 探测并生成 Excel 报告。

d40f7de866542809383466c8c1a85a8

0x02 功能简介

✨ 核心特性

多入口与版本解析

  • 识别 openapi.json/swagger.json(V2/V3)、swagger-resources、Swagger 1.x 资源列表

  • 可从 swagger-ui HTML 页面中解析真实 API 文档地址( Selenium 渲染)

  • 安全与克制

仅发起 GET/POST 请求,默认忽略破坏性动作

  • 路径命中危险关键字(如 ‘delete’, ‘remove’, ‘destroy’, ‘drop’, ‘del’, ‘erase’, ‘update’, ‘modify’, ‘edit’, ‘set’, ‘change’, ‘upd’,

  • ‘mod’, ‘patch’, ‘put’, ‘add’, ‘create’, ‘new’, ‘insert’, ‘save’, ‘upload’)自动过滤

  • 对 HTML/二进制/非文本进行类型判定并“降噪”保存

报告输出

  • 生成 Excel 报告:所有API、已调用API、已过滤API

  • 自动调宽与状态配色,高可读

实用开关

  • --force-domain 强制使用初始域名,忽略文档内 servers

0x03更新说明

  • 更新①-添加识别响应带Json标签的资产
  • 更新②-修复–debug参数功能
  • 低版本bp可能不适用,我目前用的是2024.1.1.6
  • 直接改版平移为burp插件,有师傅需求接入bp,解决内网无法安装pip包问题
  • 有构造记录,且过滤的不会发送请求,只做记录
  • 构造包窗口,可在请求包处直接快捷键发送repeater,方便更改参数值
  • 过滤关键字和请求方法可diy

    4600a4ae89ab45b053c2ecb5ef21395

0x04 使用介绍

📦安装于依赖

Python 3

依赖安装:

  • pip install requests loguru selenium openpyxl urllib3

若需要解析 swagger-ui HTML:

  • 安装 Chrome 与匹配版本 ChromeDriver
  • 将驱动置于项目根目录(Windows 可用 chromedriver.exe,其他平台放置 chromedriver 并赋执行权限)
  • chromedriver建议通过官方指定渠道下载,以规避钓鱼风险,py文件同目录下即可
  • 官网地址:https://googlechromelabs.github.io/chrome-for-testing/

⚙️ 使用说明

  • 常用参数
  • -u, –url:单个目标(支持 swagger-ui、api-docs、swagger-resources)
  • -f, –file:批量目标文件(逐行 URL)
  • –force-domain:忽略文档内 servers,强制使用初始域名
  • 请求与参数策略(宁可漏报也不可误删误改)

仅尝试 GET、POST

自动填充占位参数:

  • path 参数:用占位值替换路径变量(数字填充1,字母填充a)

  • query 参数:填充简单占位值

  • body(JSON):按 schema 尝试生成示例

  • 命中高风险关键字的 URL 自动跳过

📝 报告说明

扫描结束生成 YYYYMMDDHHMM_xxx.xlsx:

  • 所有API:记录发现的所有路径,标注“调用/过滤”

  • 已调用API:记录请求方法、URL、参数、状态码、截断后的响应

  • 已过滤API:记录被策略拦截的接口与原因

 单目标扫描(自动识别入口类型):

  • swagger-ui / api-docs / swagger-resources)
  • python swagger.py -u https://example.com/swagger-ui/index.html

忽略文档内 servers,强制使用初始域名(遇到内网域名或IP直接使用此参数)

  • python swagger.py -u https://example.com/v3/api-docs --force-domain

批量扫描(每行一个 URL)

  • urls.txt:
  • https://a.com/v3/api-docs
  • https://b.com/swagger-ui/index.html
  • python swagger.py -f urls.txt

红框或者error忽略即可

10f4a3baca96155057e0d980ed34df2

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容