API渗透测试
API渗透测试
0x00 前言
在昨天阅读国外的文章的时候,翻到了一篇 Microsoft Regional Director DANA的文章,我个人是很喜欢去测试API接口的,比如面试官常问的,“给你个登录框你有什么思路 ”,在很久以前面QAX的时候,有梳理过一个思路,如下:
大多数情况下,特别是最近吧,发现自己漏洞挖掘越来越没有耐心了,所以我觉得应该让测试流程化,而流程化的第一个步骤,我觉得就是梳理站点的API文档。
0x01 API文档梳理
回到Microsoft Regional Director DANA的文章里,DANA详细的教学了为什么要梳理一份API文档(当然源站点自带api-docs最好)以及如何去梳理一份API文档,具体为什么要梳理以及一些Swagger, and the OpenAPI specification原理等,可以去原文看DANA文章 How to craft rogue API docs for a target when they don’t exist,这里只简单记录一下如何操作。
首先需要用到的工具有: mitmproxy2swagger
|
|
使用谷歌浏览器利用开发者工具捕获流量,首先打开F12,设置保留日志与禁用缓存
尽可能的把所有的功能点触发一遍,包括不限于,修改头像、评论、举报等等
生成 HTTP 存档 (HAR)
利用前面提到的工具mitmproxy2swagger将HAR转换为简单的openai规范文档
|
|
- -i:用谷歌浏览器保存下来的HAR源文件
- -o:输出要生成的yaml文件
- -p:调用API的前缀,通常为 target.domain 或 target.domain/v1 等
- -e:在文档中提供示例数据,这些数据为刚刚我们浏览器捕获的真实数据,如不想泄露或者需要将文档分享给他人,建议不加这个参数
- -f:这告诉工具输入文件是 HAR 捕获,而不是典型的 mitmproxy流文件
文档生成后,在x-path-templates 下有大量以"-ignore:/“开头的行,我们需要打开文件并删除任何看似 API 调用的请求上的"ignore:"。并且忽略/删除图像、图标、HTML、Javascript 等内容,使文档看起来变成如下:
原文档:
修改后:
重新运行一遍相同的命令:
mitmproxy2swagger -i ***.***.com.har -o crapi.yaml -p http://***.***.com -e -f har
注意,如出现以下报错,这是因为代码使用了python2的str.decode()
方法
File “C:\Python3\lib\runpy.py”, line 196, in _run_module_as_main return _run_code(code, main_globals, None,
File “C:\Python3\lib\runpy.py”, line 86, in _run_code exec(code, run_globals)
File “C:\Python3\Scripts\mitmproxy2swagger.exe_main_.py”, line 7, in
File “C:\Python3\lib\site-packages\mitmproxy2swagger\mitmproxy2swagger.py”, line 265, in main body_val[key.decode(“utf-8”)] = value.decode(“utf-8”)
AttributeError: ‘str’ object has no attribute ‘decode’. Did you mean: ’encode’?
C:\Python3\lib\site-packages\mitmproxy2swagger\mitmproxy2swagger.py
文件中的265行即可:
|
|
重新运行命令后,文档应该就会变成如下的样子,包括端点、使用的方法、对象的参数和属性,如果包含 -e 选项,甚至还包括完整的示例:
将文档复制粘贴到https://editor.swagger.io中就能在 Swagger 编辑器调用测试API了
0x02 API文档与Postman与BurpSuite结合
先将API文档导入到Postman当中CTRL+O快捷键导入yaml文件即可
打开设置
SSL证书验证不勾选
勾除掉系统代理,然后设置burp的代理即可
测试一下burp有没有收到流量