如何查找无文档的公开API的所有可用路由?
从已知请求扩展:既然已经抓了网站的网络请求,就从这些已知路由往外延伸。比如看到
/api/users,可以试试/api/user、/api/accounts这类同层级路径,或者加常见后缀(/list、/detail)、前缀(/v1/、/internal/)。碰到带ID的路径比如/api/item/123,直接去掉ID试试/api/item,或者改成复数/api/items,大概率能找到列表接口。枚举常见路径字典:用
dirb、ffuf这类工具,或者自己写个简单的Python脚本,批量请求常见的API路径关键词。比如/api、/admin、/auth、/products、/orders这些都是高频出现的路径。重点看响应状态码:403说明路径存在但没权限,404才是真的不存在;如果返回200或者JSON格式的错误信息,基本就是有效路由了。抠响应里的细节:很多API返回错误时会不小心泄露信息,比如404页面里写着“未找到/api/users,但/api/customers已注册”,或者响应头里的
Link字段会关联其他接口。另外,发个OPTIONS请求到已知路径,Allow头会告诉你这个路径支持哪些HTTP方法,也能顺着摸到相关的操作接口。遍历HTTP方法:别只盯着GET,对每个发现的路径,试试POST、PUT、DELETE、PATCH这些方法。比如
/api/user用GET是拿列表,用POST可能就是创建用户;有些接口只有用特定方法才会返回有效内容,甚至会在错误响应里提示正确的用法。逆向请求参数和Payload:如果有表单提交或者AJAX的Payload,看看里面的字段有没有线索。比如看到
user_id,就试试/api/user/{user_id};碰到order_ref,就去碰/api/orders/{order_ref}。还有些API会在请求参数里藏着实际路由,比如?endpoint=user/list,这也是个突破口。扒前端代码:网站的JS文件、HTML源码里经常藏着硬编码的API路径。用浏览器开发者工具搜
/api、http这些关键词,或者把混淆的JS格式化后找fetch、axios这类请求的代码,说不定能直接挖到一堆未暴露的路由,甚至注释里都有线索。
内容的提问来源于stack exchange,提问作者cormor

