1. userid 藏在返回包里,但几百个包一起看就废了
1.1 登录爆破里的 userid 信号
登录爆破里判断用户名枚举,最直接的证据就是响应包里的 userid。原文「登录爆破小技巧」里写得很清楚:存在的用户名会先返回 userid,再进入密码校验;不存在的用户名通常只返回一句「用户名或密码错误」。单个包看,差异非常明显;可一旦跑起字典,几百上千个响应包堆在一起,想靠肉眼找出哪些包多了 userid,基本是给自己找罪受。这时候我习惯先把 Codex 的模型通道指到 TaoToken,让 Codex 来做这个差异对比。TaoToken 在这里只负责把 Codex 的通道连通,不参与 burp 抓包,也不替你改数据包。配通之后,把导出的返回包粘贴给 Codex,它给出的差异清单就是你下一步在授权测试里用的用户名字典。
这套流程能成立的关键,在于把「看包」这件机械活交给模型,而不是继续用肉眼硬扛。原文章节里还提到另一种情况:密码字段做了强加密,没法直接爆破密码,只能固定一个弱口令去跑用户名。这时候响应包里的 userid 依然是分水岭,命中的用户名会带着 userid 继续走密码校验,没命中的直接返回错误。无论哪种情况,第一件事都是把 userid 出现过的响应挑出来。
1.2 Codex 只读文本,不碰 burp
先说边界:Codex 不会自己抓包,不会直接连你的 burp,更不会替你向目标系统发包。它做的是文本分析,你给它什么文本,它就分析什么文本。所以「让 Codex 看 userid」本质上是很轻量的一步:把 burp 导出的响应包整理好,像贴代码一样贴到 Codex 对话里,请它列出所有包含 userid 的行。
这意味着你不需要在 burp 里装任何 AI 插件,也不需要把代理流量交给 Codex。原来的抓包方式不变,原来的爆破流程也不变,唯一变的是「读返回包」这个动作,从人眼变成模型。后面所有配置,都是为了把这个模型通道搭通。
2. 先把 Codex 的通道指到 TaoToken
2.1 去 TaoToken 创建 YOUR_API_KEY
打开 TaoToken,注册后在控制台创建 API Key。创建出来的 Key 就是后面配置里的YOUR_API_KEY,复制后自己收好。TaoToken 的角色是统一 API 兼容通道,它把不同模型的调用收敛成一把 Key,省去你为每个模型单独申请账号、单独配置额度的麻烦。对 Codex 来说,它不关心你用的是哪家模型通道,只关心config.toml里填的 Base URL 和 Key 能不能用。
这一步对应原文里的「开始抓包前先确认环境」:爆破前的准备不止是开 burp,还包括把分析工具本身跑通。Key 创建后不要贴到公共聊天窗口,也不要写进任何会提交到 Git 的配置文件里。
2.2 改 Codex 的 config.toml
Codex 的配置文件在~/.codex/config.toml。先备份原文件,再改成下面这样:
model = "YOUR_MODEL_ID" model_provider = "taotoken" [model_providers.taotoken] name = "TaoToken" base_url = "https://taotoken.net/api" env_key = "TAOTOKEN_API_KEY"YOUR_MODEL_ID是占位符。实际填什么,以 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 模型广场当时列表为准,不要凭记忆填一个带日期后缀的模型名。然后新建~/.codex/.env,写入:
TAOTOKEN_API_KEY=YOUR_API_KEY这里有两个容易踩的细节。第一,填进 Codex 的 Base URL 是https://taotoken.net/api,末尾不要加/v1。官网落地页是给人点击操作的,不能拿来当接口地址。第二,env_key指向的是环境变量名,不是 Key 本身,所以.env里的变量名必须和env_key完全一致。如果 Codex 运行时报当前 provider 不支持responsesAPI,可以在[model_providers.taotoken]下面补一行wire_api = "chat"再重启 Codex。
2.3 验证通道是否打通
保存配置后,在终端跑一句:
codex exec "用一句话说明你现在使用的模型提供方"如果 Codex 能正常回复,说明模型通道已经通了。这个验证很重要,因为后面所有分析都建立在对话能发出去的基础上。如果这一步没过,先不要急着贴返回包,回到.env和config.toml把变量名和地址检查一遍。
3. 把 burp 返回包整理成 Codex 能读的文本
3.1 从 burp 导出响应包,而不是肉眼摘录
Codex 不直接读 burp,需要你把数据包导出成文本,再贴进对话。在 burp 的 HTTP history 里选中登录接口相关的请求,右键Copy to file导出;如果用 Intruder,直接从结果列表里把响应包批量复制出来。导出后不用保留整个原始报文,请求行、状态行、响应头里的动态字段都可以删掉,只留服务端返回的核心内容。
下面是一个简化后的响应包示例:
HTTP/1.1 200 OK Content-Type: application/json {"error":0,"userid":10239,"msg":"密码错误"}另一个:
HTTP/1.1 200 OK Content-Type: application/json {"error":1,"msg":"用户名或密码错误"}第一个响应里出现了userid,第二个没有。这个判断在人眼看来很简单,但一百个包放在一起,行与行之间的差异会变得非常像,尤其当响应体里还有其他数字字段时,userid很容易被忽略。Codex 的优势在于它不会疲劳,也不会因为翻页翻到后面忘了正常的响应长什么样。
3.2 剪掉噪音字段,做成差异对照表
响应体里如果混着时间戳、session、token 这些每次都变的值,Codex 会花不少精力去忽略它们。建议在粘贴前先做一层裁剪:把登录校验无关的字段删掉,只保留error、msg、userid以及你测试时使用的用户名。然后排成一张表:
| 用户名 | 响应体片段 | 是否出现 userid |
|---|---|---|
| admin | {"error":0,"userid":10239,"msg":"密码错误"} | 是 |
| test | {"error":1,"msg":"用户名或密码错误"} | 否 |
| demo | {"error":0,"userid":4421,"msg":"密码错误"} | 是 |
| guest | {"error":1,"msg":"用户名或密码错误"} | 否 |
表格比大段原始报文更直接。Codex 看到这张表后,能立刻把「哪些用户名命中了 userid」列出来,而你只需要复制和粘贴。注意,Codex 只是文本分析,不会替你执行任何爆破动作。真正的登录请求仍然要你在本地用 burp 完成,Codex 不参与发包,也不接触目标系统。
4. 让 Codex 输出 userid 差异清单
4.1 给 Codex 的提示词要具体
把上面整理好的文本贴给 Codex,提示词可以这样写:
这是一组登录接口响应包,来自我有权限测试的授权环境。请找出所有包含 userid 字段的响应,输出用户名和 userid 的对照表。没有 userid 的响应不要输出。只做文本分析,不要修改数据包。提示词里写明「授权环境」不是客套话,而是边界:数据包可能包含真实用户名,分析前自己先确认有没有权限处理这些数据。提示词越具体,Codex 输出越干净。如果你只丢一句「帮我看这个包」,它可能会把状态码、响应头、时间戳全都分析一遍,反而浪费时间。
4.2 拿清单回 burp 二次验证
Codex 给出的对照表会把出现userid的用户名列在一起。这个清单的价值在于:它把几百个包压缩成几十个候选用户名,你不需要再逐个翻原始响应。回到 burp 后,用这些用户名继续做密码校验,观察是否进入下一步流程。
这里要特别说清楚:Codex 不是用来代替 burp 的,它只是帮你把「看包」这一步变快。爆破是否成功、密码校验是否通过,仍然由 burp 和目标系统决定。把 Codex 当成一个耐心且不会看漏的助手,而不是把整个渗透过程交给它。另外,如果你把完整响应包粘贴给 Codex,记得删除 Cookie、Authorization 这类敏感头。Codex 只需要响应体里那几段校验字段,不需要你的会话凭证。
5. 配好之后最常遇到的三个报错
5.1 401 Unauthorized:Key 没认出来
Codex 返回 401 时,先看env_key和.env是否一致。.env里的变量名应该是TAOTOKEN_API_KEY,值是从 TaoToken 创建的YOUR_API_KEY。很容易犯的错是把官网登录密码填进去,那个不能用。改完.env后,要重启 Codex 进程再试,环境变量不会自动热加载。
5.2 404 Not Found:Base URL 末尾多了东西
如果 Codex 握手阶段就报 404,第一嫌疑是 Base URL 写成了https://taotoken.net/api/v1。TaoToken 的接口地址是https://taotoken.net/api,末尾不带/v1。也不要填成首页地址。接口地址和官网地址是两回事:官网给人点,Base URL 给程序填。
5.3 model not found:模型 ID 别自己造
config.toml里的model必须是模型广场当时存在的 ID。有些模型 ID 带日期后缀或者版本号,你凭记忆少打一个字符就会报 model not found。最稳妥的办法是打开模型广场,直接复制完整 ID,再填进配置。
6. 跑通之后去控制台对一下用量
6.1 回到控制台确认这次调用
配置保存后,先在 TaoToken 模型对话 里用同一把 Key 发一条测试消息,确认模型 ID 和 Base URL 没填错。如果这里能正常回复,再去 Codex 里重跑一遍刚才的验证命令,基本就不会再出幺蛾子。等真正分析完一批返回包后,回 控制台 API Keys 看这次调用有没有记上账。
6.2 长期用的话,按量规划再决定开什么
如果你打算把「响应包差异分析」变成日常操作,调用量会涨得很快。先到 Coding Plan 看当前套餐够不够,再决定要不要升级。Key 始终在控制台管理,不要把它写进会被同步的配置文件里。分析完返回包后,把包含敏感信息的对话记录清理掉,这是比任何 Key 管理都重要的一步。