: continue req_elem = item.find('.//request') resp_elem = item.find('.//response') if req_elem is None or resp_elem is None: continue req_bytes = base64.b64decode(req_elem.text) if req_elem.get('base64') == 'true' else req_elem.text.encode() resp_bytes = base64.b64decode(resp_elem.text) if resp_elem.get('base64') == 'true' else resp_elem.text.encode() items.append({ 'url': url, 'method': req_bytes.split(b' ')[0].decode(), 'request': req_bytes.decode('utf-8', errors='ignore')[:3000], # 截断 'response': resp_bytes.decode('utf-8', errors='ignore')[:3000] }) return items
</code></pre></div>
<p><strong>第三步:AI批量分析</strong></p>
<p>把预处理后的流量分批发给AI,每批10-20条请求(取决于token限制)。Prompt设计是关键:</p>
<div class=)
你是一名资深渗透测试工程师,擅长发现越权漏洞(IDOR)。现在给你一组HTTP请求和响应,请逐一分析,找出可能存在越权风险的接口。
分析标准:1. 请求参数中是否包含身份标识(如userId、uid、orderId、cardId等)?参数值是否可预测(纯数字、简单递增)?2. 请求中是否有身份认证信息(Cookie、Authorization头)?如果同一个用户对不同的资源ID请求,响应中包含不同的用户数据,可能存在水平越权。3. 如果某个接口看起来应该只有管理员才能访问(如/admin/、/manage/),但普通用户的请求也能成功,可能存在垂直越权。4. 响应内容中是否包含明文敏感信息(身份证、手机号、家庭住址、密码)?
请用JSON格式返回分析结果,每条潜在漏洞包含以下字段:- url: 请求URL- method: HTTP方法- risk: 风险评估(高危/中危/低危/无风险)- analysis: 分析说明- suggestion: 测试建议(如“替换uid参数为1001尝试获取其他用户数据”)
输入数据:{requests_data}
调用AI API:
import requests
def analyze_traffic(requests_list): prompt = build_prompt(requests_list) # 构建完整Prompt response = requests.post( 'https://api.deepseek.com/v1/chat/completions', # 可换成Ollama本地接口 headers={'Authorization': 'Bearer sk-xxx'}, json={ 'model': 'deepseek-chat', 'messages': [{'role': 'user', 'content': prompt}], 'temperature': 0.1, 'response_format': {'type': 'json_object'} }, timeout=120 ) return response.json()['choices'][0]['message']['content']
脚本跑完后,把AI返回的JSON汇总,按风险等级排序输出。我用这套流程分析一个中型电商站点的6000条流量,AI标出了23条疑似越权,人工验证后确认12条真实漏洞,耗时不到40分钟。换做手工,至少两个下午。
四、真实案例:AI怎么找到我漏掉的越权
某次SRC测试一个在线教育平台,我手工翻了半天API,只找到一个学生查看自己成绩的越权(改studentId可看他人成绩),中危。后来我把当天Burp导出的所有流量扔进AI,它额外揪出了三个我漏掉的洞:
- 水平越权:查看他人合同 — 接口
/api/contract/preview?contractId=550e8400-e29b-41d4-a716,contractId是个UUID。手工测到UUID通常就放弃了,觉得不可遍历。但AI指出这个UUID在另一个接口/api/course/list的响应中以course.contractId的形式返回,而且courseId是可遍历的数字。AI建议“先遍历courseId获取所有contractId,再逐一遍历合同内容”。一套组合拳打出高危,赏金4000元。 - 垂直越权:普通用户调用管理员接口 — 接口
/api/admin/setScore,我手工看URL里有admin就以为做了权限控制,没去试。但AI注意到这个请求的Cookie是一个普通学生账号的Session,且请求体中userId和score参数都与Cookie所属账号不一致,判定可能为垂直越权。我手动验证:把学生Cookie放到管理员接口上请求,成功修改了任意学生的成绩,高危,赏金5000元。 - 批量越权:遍历手机号获取全量用户 — 接口
/api/user/search?keyword=138,返回包含手机号匹配的前10条用户简要信息。AI分析说:“keyword参数无限制,且响应包含手机号和用户ID,可与前面的越权接口联动,批量获取全站用户数据”。我写了个脚本遍历138-139号段,拖出6万多用户数据,严重漏洞,赏金8000元。
这一轮下来,AI帮我多赚了17000元,而成本只是几千个token的API费用,几毛钱。
五、AI vs Autorize:到底谁更强?
Autorize(及AutorizePro)是Burp的经典越权检测插件。它的工作方式:让你配置高权限和低权限两个账号的Cookie/Token,然后对每个请求自动复制一份,替换为低权限凭证重放,对比两次响应。如果响应相似(或完全一致),就标记为疑似越权。
Autorize的优势在于实时性和自动化,但局限性也很明显:
- 只能发现“两个不同权限用户看到相同数据”的情况。如果返回数据不同但都是敏感信息(如A看到张三,B看到李四),Autorize可能漏报。
- 无法处理复杂参数:UUID、哈希串、签名参数,Autorize不会自动构造。
- 无法理解业务上下文:它不知道哪个参数是用户ID,只能靠正则匹配。
AI的优势恰好弥补了这些缺陷:它能理解UUID、JWT、Base64,能从响应语义判断是否泄露了另一个用户的数据,还能给出具体的越权测试方案。AI的劣势是成本、延迟和隐私风险(流量上传到云端)。
最佳实践:先用Autorize粗筛,把“响应相同”的高可能接口标出来;再把Autorize标出的可疑接口导出,丢给AI做深度分析。 这样既利用了Autorize的速度,又发挥了AI的语义能力。
六、注意事项:隐私、成本、幻觉
- 隐私风险:Burp流量里包含认证Cookie、个人信息、业务数据。如果你用云端API(如DeepSeek、OpenAI),等于把所有敏感数据都传给了模型厂商。建议两个方案:①使用本地部署的模型(如Ollama + Qwen/DeepSeek-Coder),数据不出本机;②对流量做脱敏处理,把Cookie值替换为占位符,把手机号/身份证替换为假数据,再发给AI。
- 成本控制:一次分析几千条请求,token消耗可能达到几十万。建议过滤掉静态资源和重复请求,只发送URL+参数+响应摘要,而不是完整响应体。
- 幻觉问题:AI有时会“脑补”不存在的越权场景,比如把正常的分页参数误判为ID。所有AI标记的漏洞,必须手工验证。我的做法是让AI输出“建议的测试Payload”,然后手工在Burp Repeater里验证,确认危害后再写报告。
- Prompt优化:越权分析的质量严重依赖Prompt设计。建议把你自己的越权测试经验整理成规则,注入到Prompt中。例如:“如果参数名包含uid、userId、memberId,且值为纯数字,则极有可能是越权入口。”
七、写在最后
把Burp流量扔给AI自动找越权,不是什么黑科技,就是把“人类逐条看流量”这个重复劳动用AI替代了。逻辑还是那些逻辑——看参数、看权限、看响应——但AI不会累、不会漏、不会因为UUID太长而跳过。
我用了三个月,越权漏洞的发现量翻了一倍多,赏金也水涨船高。如果你还在手工一条条审流量,不妨花一个下午把这套流水线搭起来。测试一下你家SRC的目标,你可能发现,那些藏在UUID和复杂业务逻辑里的越权,AI一个都没放过。
严正声明:本文所有技术均用于合法授权的安全测试,所有案例均已脱敏。未经授权将流量上传至第三方AI服务可能导致数据泄露,请自行评估合规风险。建议使用本地模型处理敏感流量。越权漏洞挖掘必须在授权范围内进行,未授权测试属违法行为。









评论