本来想直接复现昨天的DASCTF,但是前面的一个DASCTF已经开始看了,那就放到下次再写。
yet another sandbox
js沙箱逃逸。
下载复现获得一个c写的readflag,
有个js的模块文件app.mjs:
import express from 'express'; import path from 'path'; const __dirname = path.resolve(); const app = express(); app.use(express.json()); app.use('/asserts', express.static('asserts')); function runInShadowRealm(code) { let shadowRealm = new ShadowRealm(); let result = shadowRealm.evaluate(code); shadowRealm = null; return result; } app.get('/', (_, res) => { return res.sendFile(__dirname+'/index.html'); }); app.post('/api/run', async (req, res) => { try{ let { code } = req.body; var msg = await runInShadowRealm(code); } catch(error) { var msg = error.toString(); } res.json({"msg": msg}); }); app.listen(1337, () => { console.log('Server listening on port 1337'); })
网上搜了下说是shadowRealm沙盒:
Javascript 新特性前瞻 —— ShadowRealms - 掘金 (juejin.cn)
这里的evaluate跟eval差不多,就是在独立环境运行的而已,而code就是框里我们传的东西:
但好像也没有ban掉什么东西,所以直接在框里写个import就能RCE了:
我们队里wp是直接用的/readflag:
(后面的题好难
标签:code,shadowRealm,res,app,express,sandbox,CBCTF,another,DASCTF From: https://www.cnblogs.com/EddieMurphy-blogs/p/17856763.html