第2章 环境搭建:Burp Suite、Postman与API安全工具

做API安全测试,说白了就是一场攻防对抗。你得先把自己的武器库备齐了,才能去探测目标系统的漏洞。

我个人习惯把工具分为三类:拦截代理、请求构造、自动化扫描。这一章咱们就把这三板斧都搭好。先别急着装软件,先想明白每样工具解决什么问题,这才是老手和新手的区别。

2.1 核心工具链总览

你在项目里最常用的工具,就这三个阵营:

  • Burp Suite —— 流量拦截与中间人攻击的核心。我见过不少新手直接用浏览器开发者工具看请求,那只能看自己发出的,根本没法模拟攻击者视角。
  • Postman —— 接口调试与批量测试。它其实不只是个HTTP客户端,它的脚本能力能帮你做很多自动化验证。
  • 专用安全工具 —— 比如sqlmap、kiterunner、jwt_tool等。这些是针对特定漏洞类型的利器。
我的建议: 不要试图一次性装全所有工具。先用Burp + Postman跑通一个完整的攻击链,再逐步扩展。否则你很可能陷入"装了一堆工具,一个也没配通"的尴尬局面。

下面这张图展示了这些工具在测试流程中的位置。眼睛要盯着数据的流向——从浏览器到Burp,再到目标API,Postman在旁边做辅助验证。

API 安全测试工具协同流程 浏览器 / 客户端 Burp Suite 拦截代理 目标 API 服务 请求 → 转发 → Postman 调试测试 直接请求(可选) 专用安全工具 sqlmap / jwt_tool / kiterunner 配合调试 测试日志 / 报告 导出 📌 核心原则 • 所有请求必须经过代理 • Postman 与 Burp 可协同使用 • 安全工具聚焦单点深度

2.2 Burp Suite 安装与配置

Burp Suite 可以说是API渗透的标配。我刚开始用的时候也踩过坑,比如忘了装CA证书,结果全是TLS加密流量,啥也看不了。

安装步骤 其实很简单:

  1. 去PortSwigger官网下载Community版(免费)或Pro版(付费)。我自己平时用Pro,因为那个主动扫描器能省不少力气。
  2. 用 java -jar burpsuite_xxx.jar 启动。嗯,前提是你得装了JDK 17+。
  3. 第一次启动后,选Temporary Project,用默认配置就行。

2.2.1 代理设置与证书安装

这里有个关键动作:让Burp能抓到HTTPS流量。你想想看,现在90%的API都是HTTPS,抓不到加密流量就相当于盲人摸象。

配置顺序是这样的:

  • Burp里进入 Proxy → Intercept 标签,确保 intercept 按钮为 "Intercept is on"。
  • 打开 Proxy → Settings,默认监听地址是 127.0.0.1:8080。如果你要用手机测试,得改成 0.0.0.0:8080 —— 我提醒一下,这样做有安全风险,别在公开网络里用。
  • 浏览器里装SwitchyOmega之类的插件,把代理指向 127.0.0.1:8080。
  • 访问 http://burp,下载CA证书并安装到系统信任根。
我曾经碰到过: 安装证书后浏览器还是报"连接不安全"。后来发现是国内某些定制版浏览器(比如360、QQ浏览器)没有使用系统证书库。解决办法是单独在浏览器设置里导入证书,或者干脆换Chrome/Firefox。

2.2.2 核心模块速览

模块用途在API测试中的角色
Proxy拦截/修改流量捕获API请求,实时篡改参数
Repeater手动重放请求精确测试单个API端点的响应变化
Intruder自动化参数枚举爆破、Fuzz、参数探测
Decoder编码/解码处理Base64、URL编码等API常见格式
Logger++流量日志记录所有经过代理的请求,便于事后分析

你真正要在API测试中频繁使用的,是Proxy + Repeater + Intruder 这三个的组合。Logger++属于辅助,但别小看它——我经常靠翻日志找到遗漏的漏洞点。

2.3 Postman 环境配置与脚本能力

Postman 在安全测试里的角色,和Burp是互补的。Burp管拦截,Postman管构造。

我个人习惯把Postman的环境变量当配置中心。比如不同的API域名、、都写在变量里,测试集合直接引用变量。这样换环境时只需要改一套变量,不用改几百个请求。

环境变量设置示例:

// 在 Postman 的 Environment 中创建
变量名: base_url
初始值: https://api.example.com/v1
当前值: https://api.target.com/v1   // 测试时切换

变量名: auth_
初始值: eyJhbGciOiJIUzI1NiIs...
当前值: <从Burp里复制的真实>

2.3.1 Pre-request Script 与 Tests

这是Postman真正强大的地方。你可以用JavaScript写脚本,在请求发出前或响应返回后自动执行逻辑。

举个例子,测试JWT认证时,我经常这样用:

// Pre-request Script: 自动从环境变量注入
const  = pm.environment.get("auth_");
pm.request.headers.add({
    key: "Authorization",
    value: "Bearer " + 
});

你想想看,如果一个API测试集合有200个请求,每个都要手动填,那还不得疯掉?用脚本一次搞定。

我的经验: 在Tests脚本里加上pm.response.to.have.status(200)这样的断言。看起来简单,但批量跑完测试后一眼就能看到哪些请求返回异常,那些异常可能就是漏洞的入口。我曾用这个方法在CI流水线里发现了一个未授权访问的API端点。

2.4 辅助安全工具清单

除了上面两个主力,还有几样小工具得备着。它们不一定每天用,但遇到特定场景时,能帮你省下大把时间。

工具名称用途安装方式
curl命令行HTTP请求系统自带/WSL/brew
jqJSON格式化与过滤brew install jq / apt install jq
sqlmap自动化SQL注入检测git clone + python setup.py
jwt_toolJWT令牌安全检测git clone + pip install
kiterunnerAPI路径/端点爆破从GitHub Releases下载二进制
wfuzzWeb Fuzz测试pip install wfuzz
快速上手建议: 先用 curl + jq 组合。这两个命令行的工具最轻量,而且能直接和Burp的输出接力。比如从Burp复制一个cURL命令,再通过管道传给jq整理格式,比在GUI里点来点去快多了。

2.4.1 一个典型的组合用法

假设你从Burp的Logger里复制了一个POST请求的cURL命令:

curl -X POST "https://api.example.com/user/login" \
  -H "Content-Type: application/json" \
  -d '{"username":"admin","password":"123456"}' | jq .

这个输出直接就是格式化好的JSON。如果你想要提取特定的字段,比如看access_是否存在泄露风险,可以用 jq '.access_'。

请注意: 在命令行里直接传用户名密码做测试,千万要注意日志安全。我见过有人把敏感凭据直接写进脚本,结果push到公开仓库去了…… 要么用环境变量,要么养成测试后立刻清空命令历史的习惯。

2.5 验证环境是否就绪

工具装完了,怎么确认它们真的能协同工作?我建议你跑一个最简单的"冒烟测试":

  1. 打开Burp,打开拦截,浏览器设好代理。
  2. 访问任意一个公开API(比如 httpbin.org/get)。
  3. 在Burp里看到请求被拦截,点击 Forward 放行。
  4. 在Burp的Repeater里,直接修改请求参数(比如加一个 ?test=1),再发送。
  5. 用Postman导入同一个请求,加上之前的环境变量,确认能正常返回。

如果以上五步都能跑通,那恭喜你,你的基础环境已经搭好了。别小看这个流程,我见过有团队卡在第一周,就因为在证书安装那一步没配好。

我个人的一个小窍门: 把Burp里的请求直接右键"Copy as curl",然后粘贴到Postman里导入。这样做的好处是——完全保留原始请求的所有header和cookies,不会因为手动输入而漏掉某个关键字段。尤其是在测试OAuth2流程时,一个没复制到的state参数就可能导致整个测试失败。

好了,工具链都就位了。接下来你就可以开始真正的API安全测试了——嗯,先别急,在我们实操之前,还是得确保每个工具的版本都是最新的。特别是Burp Pro的扫描器插件,每两周更新一次,老旧版本可能会漏掉最新的漏洞payload。