AppScan扫Fiddler脚本这事儿,脚本核心就一句话:别让流量代理变成测试盲区。脚本很多人用Fiddler抓包抓得欢,脚本等要上AppScan做安全扫描时,脚本却忘了自己正坐在一个“中间人”的脚本位置上——扫描器看到的不是真实应用,而是脚本你代理转发的二手数据。这坑我踩过,脚本扫出来的脚本漏洞全是代理自己加的请求头,白忙活两小时。脚本
先讲个具体场景。脚本你本地起了Fiddler,脚本端口8888,脚本AppScan配置里填了代理地址,脚本开始扫描。脚本扫到一半,脚本报错说“SSL证书校验失败”,你以为是应用的问题,查了半天发现是Fiddler的根证书没装到AppScan的Java环境里。这种破事,十次里有八次是代理配置和证书信任的锅。更隐蔽的是,Fiddler默认会改写某些响应头,比如移除`Content-Security-Policy`,AppScan就会误判成“缺少安全头”——这锅甩给开发,人家一脸无辜。
所以我的做法是:扫描前,先给Fiddler写个专用脚本,把那些干扰项全部抹平。不是让Fiddler隐身,而是让它“透明化”。脚本要干三件事:第一,禁用所有插件和自动改写规则,尤其是那些动Header的;第二,固定一个干净的User-Agent,别让扫描器请求带上Fiddler的指纹;第三,把HTTPS解密后的证书替换成AppScan信任的那个,别用默认生成的。
写脚本时有个细节容易忽略——Fiddler的`OnBeforeRequest`事件里,你可能会顺手改URL或加参数,但AppScan的爬虫对URL变化极度敏感。你改一个`?debug=1`,它可能就认为这是个新页面,然后疯狂发起探测请求,把目标服务器搞崩。我吃过这亏,一次扫描直接把测试环境的Nginx干到502,运维差点拉黑我。
另一个坑是会话保持。Fiddler默认会合并Cookie,但AppScan需要独立的会话隔离。脚本里得把`Cookie`头原样透传,别自作主张做合并或拆分。否则扫描器检测登录态时会乱套,一会儿报“未授权访问”,一会儿报“会话固定”,全是假阳性。
对了,别忘了Fiddler的`QuickExec`命令行。你可以用脚本在扫描启动前自动清空所有会话缓存,避免旧请求干扰新扫描。这招对长时间扫描尤其管用——Fiddler跑久了内存占用飙升,脚本里定期`Session.Clear()`能救你一命。
最后说点主观的。别迷信网上那些“一键AppScan+Fiddler配置”的教程,很多是拿老版本凑合。Fiddler Everywhere和经典版的脚本API不完全兼容,你照着经典版写,在Everywhere上直接报错。我现在的做法是,脚本里写两套逻辑,用`if (Fiddler.FiddlerApplication.IsSystemProxy)`判断环境,再决定执行哪段。虽然丑,但稳。
跑完扫描,记得把Fiddler的脚本关掉再手动测一遍关键流程。因为脚本一旦启用,所有流量都被“净化”过,真实攻击payload可能被脚本误杀。你扫出个SQL注入,但脚本把单引号转义了,实际漏洞根本不存在——这种假阳性比漏报更坑人。