用途
本技能用于在授权安全测试中检测和利用 JavaScript 原型链污染(Prototype Pollution)漏洞,目标对象包括 Node.js 应用与重度使用 JavaScript 的 Web 应用。适用于测试接受深度合并 JSON 对象的 API、审查对象合并/克隆/扩展操作,以及评估 npm 包中的原型污染 gadget。
主要能力
- 污染源识别:客户端 URL 参数(
?__proto__[key]=value、?constructor[prototype][key]=value)、hash 片段、postMessage;服务端 JSON 请求体中的__proto__与constructor.prototype。 - 客户端利用:结合 gadget 实现 DOM XSS,涉及 innerHTML、jQuery
$.html()、transport_url等属性,以及通过污染绕过净化器(如allowedTags、tagName)。 - 服务端利用:通过 child_process、EJS、Handlebars、Pug 等 gadget 实现远程代码执行;通过污染
isAdmin、role、verified等属性实现认证与授权绕过;通过污染 schema 校验属性绕过输入验证;通过污染toString/valueOf造成拒绝服务。 - 自动化检测:使用 ppfuzz、Nuclei 模板、Burp Scanner 服务端检测,以及基于状态码反射(如污染
status为 510)和错误/时序的探测技术。
使用方式
- 识别并验证污染源:在浏览器控制台检查
({}).polluted,或用 curl 构造 JSON 请求体测试服务端。 - 定位 gadget:借助 DOM Invader 自动检测源并扫描 gadget,或依据已知属性链条手动构造。
- 构造利用链:将源与 sink 连接,实现 XSS、RCE、权限提升等效果。
- 自动化扫描:运行 ppfuzz、Nuclei 或 Burp Scanner 的对应检查项。
- 输出评估报告:记录目标、类型、影响、源—gadget—sink 对应表及修复建议。
适用场景
- DOM XSS(如通过分析脚本的
transport_url注入)。 - 通过模板引擎 gadget 实现 RCE。
- 管理员权限提升。
- JSON Schema 校验绕过。
- 拒绝服务。
前置条件
Burp Suite(含 DOM Invader 扩展)、Node.js 开发环境、对 JavaScript 原型链与对象继承的理解、常见污染 gadget 知识。
限制与法律声明
技能明确声明仅限授权安全测试与教育用途;未经系统所有者书面许可的使用属违法,可能违反计算机欺诈相关法律。
修复建议
使用 Object.create(null) 创建配置对象、冻结 Object.prototype、过滤 __proto__ 与 constructor 键、用 Map 替代普通对象、更新存在漏洞的 npm 包。