打CTF比赛,中抓包Web方向遇到盲注、工具命令执行回显受限,中抓包第一反应就是工具掏Burp Suite。这东西几乎是中抓包标配,但很多人只把它当代理用,工具其实浪费了八成功能。中抓包
抓包工具的工具本质是中间人。浏览器发请求,中抓包不直接到服务器,工具先经过工具,中抓包工具记录、工具修改、中抓包重放。工具CTF里最典型的中抓包场景:题目给了一个登录框,你输入admin/admin,返回"密码错误"。Burp拦截这个请求,把username改成admin' or 1=1-- ,放行,直接进后台。整个过程不到十秒。
Burp的Proxy模块是入口。配置浏览器代理127.0.0.1:8080,装好CA证书,HTTPS流量也能解密。证书这步新手经常卡住——访问http://burp下载cacert.der,导入浏览器受信任根证书,不然抓到的全是加密乱码。
Repeater才是真正干活的地方。右键请求发到Repeater,左边改请求,右边看响应。CTF里经常需要手工调Payload,比如SQL注入过滤了空格,用/**/代替;过滤了逗号,用join或者offset。Repeater的响应渲染功能很实用,有些题目回显在HTML注释里,Raw视图一眼就能看到。
Intruder做爆破。Sniper模式单参数,Cluster bomb多参数交叉。但社区版限速,CTF比赛里爆破四位验证码还行,跑字典就太慢。我一般用Intruder的Pitchfork模式配合小字典,或者直接写Python脚本调requests库,速度更快。
Decoder模块处理编码。CTF里常见的JWT、Base64、URL编码嵌套,一层层解。有个技巧:Decoder支持智能解码,能自动识别多层编码。去年强网杯有道题,Payload经过三次Base64加一次Hex,用Decoder直接解到底。
Comparer做差异对比。盲注时布尔条件不同,响应长度差几个字节,肉眼看不出来。发到Comparer,Word级别对比,差异高亮显示。这功能在时间盲注里也用得上——响应时间差0.1秒,Comparer能标出来。
除了Burp,另一个工具是Yakit。国产的,界面更符合国内选手习惯。它的MITM交互式劫持功能比Burp直观,右键直接生成PoC。但生态不如Burp,插件少。我一般两个都开着,Burp做精细操作,Yakit快速验证。
命令行工具不能少。curl配合--proxy参数走Burp,或者直接用curl -x http://127.0.0.1:8080。有时候服务器只允许特定User-Agent,curl -A "Mozilla/5.0" 比在Burp里改方便。还有httpie,语法更简洁,http POST http://target.com username=admin password=123。
移动端CTF现在也多了。Android App抓包,Burp配好代理后,还得处理SSL Pinning。用Frida hook掉证书校验,或者Xposed模块JustTrustMe。这步不过,抓到的全是CONNECT请求,看不到明文。
WebSocket流量Burp也能抓,但需要手动开启WebSocket拦截。CTF里WebSocket题目不多,遇到一次是实时聊天室,消息里藏了flag。Burp的WebSocket历史记录能回放消息,改包重发。
抓包工具在CTF里不是万能钥匙。有些题目反代检测代理头,X-Forwarded-For暴露了Burp的IP,直接封。这时候得用Proxifier做全局代理,或者干脆用VPS中转。还有题目检测TLS指纹,Burp的JA3指纹和浏览器不一样,直接拒绝连接。遇到这种,换用浏览器插件SwitchyOmega配原生代理,或者用mitmproxy改TLS指纹。
工具终究是工具。CTF里最关键的还是看请求和响应的细节——Set-Cookie里的JWT、响应头里的Server版本、HTML里的隐藏字段。Burp的Logger模块记录所有流量,比赛结束后复盘,经常发现当时漏看的线索。
我习惯在Repeater里给每个请求加注释,标上测试目的。比如"测试union注入"、"尝试绕过WAF"。比赛时间紧,但注释能省下大量回溯时间。有次打了一小时没进展,翻注释发现三小时前有个请求返回了200但响应体为空,重新看那个包,发现是分块传输编码,chunk里藏了flag。
抓包工具用熟了,会有肌肉记忆。看到登录框就想发Repeater,看到数字参数就想发Intruder。但别被工具绑架,有时候一个curl命令就能解决的问题,没必要开Burp。效率优先。