渗透测试burp
Burp Suite 不是渗透一把锤子,它更像一套精密的测试手术器械。很多人第一次打开它,渗透看到 Proxy、测试Repeater、渗透Intruder 这些标签,测试会觉得不过是渗透抓包改包的工具集合。真正用起来才发现,测试它把渗透测试里最琐碎、渗透最需要耐心的测试环节——拦截、观察、渗透修改、测试重放、渗透比对——串成了一条流畅的测试工作流。
我习惯把 Burp 的渗透 Proxy 模块当作整个测试的“神经中枢”。浏览器配好代理,流量就像被放进了一个透明的管道。你可以选择让请求直接通过,也可以按下 Intercept is on,把每一个 HTTP 请求捏在手里。有一次测一个登录接口,前端做了复杂的 JS 加密,密码字段在传输前已经被混淆。我打开 Intercept,把请求拦下来,直接改掉 JSON 里的 role 字段,从 user 改成 admin,放行。后端居然只校验了密码哈希,没管角色参数。这种漏洞用扫描器不一定能发现,但手动拦截改包,几秒钟就确认了。
Repeater 是我用得最频繁的模块。它不花哨,就是把一个请求反复发送、反复修改。测越权的时候,我经常把 A 用户的 Cookie 塞进 B 用户的请求里,在 Repeater 里来回切换。左边是原始请求,右边是响应,改一个参数,点一次 Send,看状态码和返回内容的变化。这个过程很像在做对照实验,控制变量,观察结果。有时候一个 userId 参数改成别的值,返回的 JSON 里就带出了别人的手机号和地址。Repeater 让这种验证变得极其顺手,不需要重新登录,不需要重新抓包,所有历史请求都在标签页里排着。
Intruder 则适合那些需要批量尝试的场景。比如一个优惠券兑换接口,参数是六位数字码。我把请求发到 Intruder,把码的位置标记成 payload,加载数字字典,设置线程数和重试策略。跑起来之后,根据响应长度或状态码排序,很快就能筛出有效的码。但 Intruder 的免费版有速率限制,社区版用起来会明显卡顿。如果测试目标有频率限制,还得配合宏或者手动调整延迟。我一般会先用 Repeater 确认单个请求的响应特征,再决定要不要上 Intruder 批量跑。
Scanner 模块在专业版里才开放自动扫描。它背后的逻辑是爬虫加被动/主动探测。被动扫描不发送额外请求,只分析经过 Proxy 的流量,适合在手动浏览时顺带发现一些明显问题,比如缺失安全头、Cookie 没设 HttpOnly。主动扫描会构造大量请求去探测 SQL 注入、XSS 之类的漏洞。但主动扫描的噪音很大,容易触发 WAF,也可能对生产环境造成影响。我通常只在测试环境或者授权明确的靶场上开主动扫描,真实项目里更依赖手动验证。
还有一个容易被忽略的模块是 Comparer。它能把两个请求或两个响应做逐字节对比。测盲注的时候,我经常把布尔条件为真和假的响应分别存下来,丢进 Comparer 里看差异。有时候差异只有一个字符,或者一个 HTTP 头的变化。人眼盯着看容易漏,Comparer 用颜色标出来,一目了然。
Burp 的扩展生态也值得一说。BApp Store 里有大量插件,比如 Logger++ 可以记录所有工具产生的流量,Turbo Intruder 用 Python 脚本处理高并发场景,JSON Web Tokens 插件能直接解码和篡改 JWT。我装了一个叫 AuthMatrix 的插件,专门用来做权限矩阵测试,把不同用户角色的 session 填进去,它会自动交叉发送请求,生成一张权限对照表。这种工具把重复劳动压缩到了极致。
用 Burp 时间长了,会形成一种条件反射:看到任何输入点,先想能不能拦下来改一改;看到任何返回,先想能不能在 Repeater 里重放几次。它不替你思考漏洞在哪里,但它把“验证想法”的成本降到了最低。一个猜测,一次改包,一个响应,循环往复。渗透测试的乐趣,多半就藏在这个循环里。
(责任编辑:休闲)
