当前位置: 首页 > news >正文

不止于Cookie:手把手教你用Fiddler Hook住任意Header与AJAX请求(附常用代码片段)

不止于Cookie:手把手教你用Fiddler Hook住任意Header与AJAX请求(附常用代码片段)

在Web开发与安全测试领域,精准拦截和修改HTTP请求的能力往往能决定效率的边界。当传统开发者工具仅能被动查看网络请求时,Hook技术如同手术刀般切入请求生命周期,实现从观察到操控的质变。本文将聚焦Fiddler+JavaScript Hook组合技,突破常规抓包工具的限制,直击AuthorizationX-CSRF-Token等关键Header的拦截篡改,以及AJAX请求的全链路监控。

1. Hook技术核心原理解析

Hook的本质是运行时劫持——在目标函数执行前后插入自定义逻辑。浏览器环境中,所有HTTP请求最终都会转化为XMLHttpRequestfetch的调用,这为Hook提供了统一的切入点。

1.1 两种主流Hook实现方式对比

方法一:原型链重写(推荐用于Header拦截)
// 拦截setRequestHeader方法示例 const originalSetHeader = XMLHttpRequest.prototype.setRequestHeader; XMLHttpRequest.prototype.setRequestHeader = function(key, value) { if (key.toLowerCase() === 'authorization') { console.log(`[Hook] 捕获到Auth头: ${value}`); value = value.replace('Bearer', 'Hooked'); // 篡改Token } return originalSetHeader.apply(this, [key, value]); };

优势

  • 兼容性好(支持IE9+)
  • 可捕获动态生成的Header
  • 实时修改请求参数
方法二:Object.defineProperty(适合Cookie操作)
let cookieCache = ''; Object.defineProperty(document, 'cookie', { set: function(val) { if (val.includes('sessionid')) { console.log(`[Hook] 敏感Cookie设置: ${val}`); val = val + '; Secure'; // 自动添加安全标记 } cookieCache = val; return val; }, get: function() { return cookieCache; } });

适用场景

  • 需要监听属性读写双向操作
  • 精细控制属性描述符(configurable/writable)

1.2 关键技术点拆解

技术指标原型链重写defineProperty
触发时机方法调用时属性读写时
性能影响较低中等(需代理getter/setter)
调试友好度调用栈清晰可能打断点困难
典型应用Header修改、AJAX拦截Cookie监控、DOM属性Hook

实战提示:现代网站常使用fetchAPI,需额外Hook:

const originalFetch = window.fetch; window.fetch = async function(...args) { const [input, init] = args; if (init?.headers?.get('X-Secret')) { console.log('[Hook] 捕获到秘密Header'); } return originalFetch.apply(this, args); };

2. Fiddler自动化Hook工作流搭建

2.1 环境配置四步法

  1. 安装Fiddler Classic(≥v5.0)

    • 启用HTTPS解密(Tools > Options > HTTPS)
    • 配置根证书信任
  2. 注入Hook脚本

    • 使用FiddlerScript(Rules > Customize Rules)
    static function OnBeforeRequest(oSession: Session) { if (oSession.uriContains("api.example.com")) { oSession.utilSetRequestBody( oSession.GetRequestBodyAsString() .Replace("original", "modified") ); } }
  3. 编程猫插件增强

    • 将JS Hook代码粘贴至插件窗口
    • 启用AutoResponder模拟异常响应
  4. 浏览器联动调试

    • 配置代理为127.0.0.1:8888
    • 配合Chrome DevTools的XHR/fetch Breakpoints

2.2 常见问题排错指南

  • Hook失效检查清单
    • 确认代码注入时机早于目标代码执行
    • 检查网站是否使用WebWorker隔离环境
    • 验证是否有CSP(Content Security Policy)限制
    • 尝试在DOMContentLoaded事件前注入脚本

3. 实战:OAuth2.0令牌拦截与篡改

以下演示如何捕获并修改Authorization: Bearer令牌:

(function() { const originalOpen = XMLHttpRequest.prototype.open; XMLHttpRequest.prototype.open = function(method, url) { this.addEventListener('readystatechange', function() { if (this.readyState === 4) { const authHeader = this.getResponseHeader('Authorization'); if (authHeader) { console.log(`[Hook] 刷新令牌: ${authHeader}`); // 可在此处将令牌转发至自己的服务器 } } }); return originalOpen.apply(this, arguments); }; })();

安全测试典型场景

  1. 令牌泄露检测(检查是否明文传输)
  2. 权限越权测试(修改user_id参数)
  3. 重放攻击模拟(重复使用过期令牌)

4. 高阶技巧:动态AJAX请求分析

针对单页应用(SPA)的异步请求监控方案:

4.1 请求/响应全链路Hook

const originalSend = XMLHttpRequest.prototype.send; XMLHttpRequest.prototype.send = function(body) { const startTime = Date.now(); this.addEventListener('load', function() { console.table({ URL: this.responseURL, Status: this.status, Duration: `${Date.now() - startTime}ms`, RequestSize: body?.length || 0, ResponseSize: this.responseText?.length || 0 }); }); return originalSend.call(this, body); };

4.2 可视化监控面板

将上述数据通过WebSocket实时推送至监控界面,使用D3.js绘制:

  • 请求时序图
  • 异常状态码热力图
  • 数据传输量趋势分析

5. 防御对策:如何检测和防范Hook

作为开发者,可采用以下反Hook策略:

// 检测XMLHttpRequest是否被篡改 if (XMLHttpRequest.prototype.setRequestHeader.toString() .includes('[native code]') === false) { console.warn('XHR方法已被Hook!'); } // 冻结关键对象 Object.freeze(XMLHttpRequest.prototype); Object.defineProperty(document, 'cookie', { configurable: false, writable: false });

企业级防护建议

  • 使用WebAssembly实现敏感逻辑
  • 实施代码混淆(如Terser
  • 服务端校验请求参数签名
  • 定期更新CSP策略

在某个电商爬虫项目中,我们曾通过Hook动态生成的X-Signature请求头,发现其算法只是简单地对时间戳做MD5哈希。这种通过逆向工程获得的信息,最终帮助我们设计出更稳定的数据采集方案。

http://www.rkmt.cn/news/1396248.html

相关文章:

  • 2026年度深圳劳动仲裁好评榜深度解读 - 资讯速览
  • 2026年权威的 山东青岛铝门窗、系统门窗品牌排行:5家实力品牌深度对比 - 奔跑123
  • ChatGPT Plus 值得买吗?2026 年 Free、Go、Plus、Pro 套餐完整对比
  • Unity Roguelike核心架构:地图生成、状态机与战斗反馈全解析
  • 构建多模型容灾策略时 Taotoken 的路由与稳定性价值
  • 用Python和rioxarray搞定MODIS数据:从下载到可视化,手把手教你分析科罗拉多州山火前后变化
  • 【Lovable外卖平台搭建实战指南】:从0到1落地高并发订单系统的关键7步
  • Unity高性能网格生成:模块化GridDescriptor与数据流优化
  • 近两年深圳劳动仲裁机构实力测评:技术效果口碑多维度对比 - 资讯速览
  • AMBA总线协议APB/AHB面试通关指南:从时序图到10个高频问题解析
  • 避坑指南:X99主板+E5洋垃圾装机,这些奇葩问题(如0xAb错误、点不亮)我全遇到了
  • 半监督图学习在金融反洗钱中的应用:从图嵌入到模型解释
  • 深圳劳动仲裁服务机构选择参考:多场景下的实操经验 - 资讯速览
  • 机器学习力场微调策略评估:从MACE模型到Cr-Sb2Te3热电材料应用
  • 莫尔自旋电子学:扭转二维磁性材料与机器学习加速设计
  • 医学影像AI可解释性:基于示例的XAI技术原理与应用
  • 基于交叉注意力的可解释AI:照亮帕金森病语音诊断黑盒模型
  • 多语言仇恨言论检测:从词嵌入到Transformer的混合策略与实战
  • 创想三维×联想:平板3D创意周边设计大赛第二期来袭
  • 【车位计数】基于matlab GUI图像处理技术检测并计数停车场内的可用停车位【含Matlab源码 15564期】
  • Rainbond v6.8.0 发布:两款 AI 能力助力开发者部署排障!
  • 2026背景调查公司哪家可靠?资深从业者拆解核心判定标准 - 资讯纵览
  • 【病害识别】基于matlab丝脉监测SVM稻叶病害识别【含Matlab源码 15568期】含报告
  • 在多轮对话应用中观察Taotoken服务稳定性的长期记录
  • 北京法人变更哪家专业? - 资讯速览
  • Steam成就管理器:如何安全备份和恢复你的游戏成就数据
  • Win10下GMT6.1中文出图避坑全记录:从Ghostscript重装到脚本编码(ANSI)
  • 软件定义看门狗:从硬件心跳到智能故障检测的架构演进
  • 网盘代码迁移难题何解?Skill、SubAgent、Agent Team 三项 AI 技术组合提效又提质
  • 向量空间JBoltAI联合省信研院共建工业AI实验室