被 Swagger 坑了一次,我写了这个工具
原创
pippybear
pippybear
安全无界
2026年6月26日 20:30
上海
在小说阅读器读本章
去阅读
最近周末刚好有点空,就抽空写了一个 Swagger 自动测试脚本。
写它的起因很简单:做安全测试时,大多数 Swagger 插件都能快速地识别接口并自动发起请求,但总会遇到一些特殊场景,导致插件识别有误,只能手动修改、重新导入,甚至一个接口一个接口去尝试,不仅麻烦,还容易遗漏。
就比如如下场景:basePath和paths重复,那么插件就会识别为/api/v1/api/v1。
再比如swagger管理在a.com/swagger.json上,但是实际api接口却是在b.com上的情况,之前也有遇到。当然类似的场景还有很多,这里就不一一展开了。这些问题本质上都是Swagger 描述信息与真实接口存在偏差。遇到这种情况,如果不想手动一个个接口去尝试,那么这个脚本就能派上用场。
脚本大概功能如下,简单解释就是这个脚本可以从线上链接读取,也可以从json文档中读取,只要符合规范。
其中容易误解的就是--spec-header和--api-header,之所以设置这2个是因为我遇到过,没有遇到过基本上可以忽略。
--spec-header:swagger页面的认证,如果swagger页面需要认证,通过这个指定认证header。
--api-header:这个是api认证头,测IDOR时用,有时候未授权访问可能效果不佳,但是IDOR却效果不错。
另外几个入参也简单解读一下。
-b/--basepath:也就是我们前面看到的swagger页面中的basepath。
-u/--url:指定和api拼接的url(如果swagger页面是正确的就不需要指定,只有不对应或者直接从文档中取的时候需要指定)
简单过完了入参的作用,还是用前面的例子来简单的看一下用法。出现前面的情况,不管是basepath多了还是少了,只要-b定义了优先以-b后的为主,那前面的多了一个api/v1,那就直接-b \"\" 传空就行,如下。
至于结果采用md文档输出,另外中间的入参会根据类型自行补参。简单看看输出报告。
自动补参,如下。
成功结果如下。
需要脚本的,回复公众号“swagger”即可获取完整脚本。
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。




![[智能体攻防实战]三.基于精调大模型的网络威胁知识自动抽取与分析(CodeBuddy+千帆)"](/images/random/titlepic/7.jpg)





评论