原型污染漏洞利用工具揭秘:Prototype Pollution Gadgets Finder

本文深入探讨JavaScript原型污染漏洞的利用方法,重点介绍Doyensec团队开发的Burpsuite插件如何通过自动化检测和利用服务端原型污染漏洞中的gadgets实现攻击,涵盖Axios和Nodemailer等常见库的漏洞利用场景。

揭秘原型污染漏洞利用工具

引言

原型污染近年来已成为Web安全领域的热门漏洞。当攻击者利用JavaScript原型继承特性修改对象原型时,就可能注入恶意代码或改变应用程序行为,导致敏感信息泄露、类型混淆漏洞,甚至在某些条件下实现远程代码执行。

1
2
3
4
// 浏览器控制台中的原型污染示例
Object.prototype.isAdmin = true;
const user = {};
console.log(user.isAdmin); // 输出: true

理解漏洞利用需要掌握两个核心概念:

污染源(Source):指未经验证就执行递归赋值的代码片段,主要分为:

  • 自定义代码:开发者编写的未充分验证用户输入的代码
  • 存在漏洞的第三方库
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
// 导致原型污染的递归赋值示例
function merge(target, source) {
    for (let key in source) {
        if (typeof source[key] === 'object') {
            if (!target[key]) target[key] = {};
            merge(target[key], source[key]);
        } else {
            target[key] = source[key];
        }
    }
}

利用链(Gadget):指利用原型污染漏洞实现攻击的代码方法,通过操纵基础对象原型来改变应用逻辑。

现有研究现状

客户端原型污染已有丰富研究和工具,如PP-Finder CLI和Burp Suite的DOM Invader。但服务端研究存在明显不足:

  1. PortSwigger的研究缺乏实际漏洞利用方案
  2. YesWeHack的指南虽提供有用gadgets但缺乏自动化发现方法

工具介绍

我们开发了Burpsuite插件"Prototype Pollution Gadgets Finder",其核心工作流程是:

  1. 从请求中获取JSON对象
  2. 尝试用预定义gadgets污染所有可能字段
  3. 检测后自动清除污染以避免系统影响

工具采用带外(OOB)检测技术,即使污染属性未被立即使用也能被发现。

Gadget发现方法论

我们通过系统分析Node.js库文档发现可利用参数,并定义标准化gadget描述格式:

1
2
3
4
5
{
  "payload": {"<parameter>": "<URL>"},
  "description": "<功能描述>",
  "null_payload": {"<parameter>": {}}
}

Axios库案例

通过操纵baseURLproxy参数可实现SSRF和请求劫持:

1
2
3
4
5
{
  "payload": {"baseURL": "https://<URL>"},
  "description": "修改'baseURL'导致SSRF或数据泄露",
  "null_payload": {"baseURL": {}}
}

Nodemailer库案例

利用ccbcc参数可拦截邮件:

1
2
3
4
5
{
  "payload": {"cc": "email@<URL>"},
  "description": "添加CC地址拦截平台邮件",
  "null_payload": {"cc": {}}
}

我们鼓励安全社区贡献新的gadgets,共同完善这一工具。完整安装指南和使用说明请访问我们的GitHub仓库。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计