文章总结: 本文介绍API渗透中利用JSON响应结构推导隐藏路由的实战技巧。通过分析数据对象关系猜测端点,结合业务语境Fuzz发现未授权访问及IDOR漏洞。此外,文章展示了利用参数覆盖绕过权限限制,以及通过静态分析JS文件挖掘未公开接口的方法。这些思路有助于安全人员发现隐蔽的高危API漏洞,提升测试覆盖率。 综合评分: 90 文章分类: 渗透测试,WEB安全,实战经验,漏洞分析,数据泄露
API 渗透实战:从 JSON 响应倒推隐藏的高危路由
原创
Pwn1 Pwn1
漏洞集萃
2026年1月19日 18:07 山东
免责声明 本公众号所发布的文章内容仅供学习与交流使用,禁止用于任何非法用途。
从 JSON 结构推导 API 路由
首先假设我们存在一个获取用户文章的接口:
GET /api/v1/user/100/posts
响应如下:
{
"posts": {
"post": {
"idPost": "post1id",
"comments": {
"id": "1111111",
"comment": "test content"
},
"like": 50
},
"post": {
"idPost": "post2id",
"comments": {
"id": "2222222",
"comment": "test content"
},
"like": 50
}
}
}
我们可以注意到存在 post1id 和 post2id 值。那么我们可以做出如下假设:
- 既然存在
idPost,说明 “Post” 在后端是一个独立的对象实体。 - 既然
comments是post的子对象,那么每个comment应该也有独立的 ID。
基于上述的推测,我们可以做出如下的 Fuzz 列表:
// 猜测单篇文章的访问路径
/api/v1/user/100/posts/post2id
/api/v1/user/100/post/post2id
/api/v1/user/100/posts/post/post2id
// 猜测文章下评论的访问路径
/api/v1/user/100/post/post2id/comments
/api/v1/user/100/post/post2id/comment
// 猜测具体单条评论的访问路径(最深层级)
/api/v1/user/100/post/post2id/comments/2222222
/api/v1/user/100/post/post2id/comment/2222222
Note: 当然,有经验的大佬可能会注意到还可以针对版本进行一系列的 fuzz,这里不再做额外的阐述,仅专注于这种拓展对象的 fuzz。
基于上下文语境实现 Fuzz
已知存在接口 /api/v2/Contact/Us,访问返回 401。
这种情况下,我们除了在字符上进行一些 ; 等符号的 fuzz 是不够的,我们还可以通过业务逻辑进行推测:
all
detailed
details
info
delete
remove
contacts
list
contactlist
query
search
随后通过 Fuzzing,成功发现未授权端点 /api/v2/contact/contactlist,直接泄露了 27,000 条联系人数据。
基于动作导向的 REST API 枚举
目前存在接口 /Api/v2.0/User/ 并且 GET 请求可以正常访问。
那么我们就可以将 user 作为一个独立的对象,Fuzz 下其下属是不是存在一些动作操作:
GET /Api/v2.0/User/delete
GET /Api/v2.0/User/add
GET /Api/v2.0/User/Rename <-- 命中
GET /Api/v2.0/User/Update
GET /Api/v2.0/User/edit
GET /Api/v2.0/User/{target_user_id}
随后根据命中的 GET /Api/v2.0/User/Rename 结合报错信息完成后了 IDOR 的发现。
逻辑参数覆盖
现存在接口 /api/v1/integration/{slug} 访问返回 401。但是通过另外一个账号得知正常响应如下:
{
"name": "private-integration",
"public": false,
"config": "..."
}
于是尝试参数覆盖:
// 拒绝
GET /api/v1/integration/private-slug
// 成功访问
GET /api/v1/integration/private-slug?public=true
静态分析
除了分析流量请求之外,我们还可以分析 JS 文件。JS 中常常保留旧版本的兼容代码或未上线的功能。
方法:
- 首先在 JS 文件中搜索已知的 API 前缀,如
/api/v2/integration。 - 然后找到所有调用该路径的代码块。
// 如在 main.js 中发现
function installIntegration(id) {
return http.post('/api/v2/integration/install', {id: id});
}
function getConfig(id) {
return http.get('/api/v2/integration/configuration');
}
此时我们大胆结合业务逻辑(ID、WorkspaceID 等)进行拼凑:
/api/v2/integration/install
/api/v2/integration/install/{id-org}
/api/v2/integration/configuration
/api/v2/integration/configuration/{id-workspace}
/api/v2/integration/configurations
觉得本文内容对您有启发或帮助? 点个关注➕,获取更多深度分析与前沿资讯!
👉 往期精选
攻防演练中的“降维打击”:逃逸出内网边界的影子资产与SaaS供应链挖掘
【深度复盘】Trust Wallet 惊魂24小时:当官方插件变成“内鬼”,一行代码如何盗走600万美元?
【漏洞挖掘Tips】一种新的 GraphQL 绕过角度
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:漏洞集萃 Pwn1 Pwn1《API 渗透实战:从 JSON 响应倒推隐藏的高危路由》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论