目录
考点:
JavaScript 原型链与原型链污染
Undefsafe 模块原型链污染(CVE-2019-10795)
大体思路:
js审计如果看见merge,clone函数,可以往原型链污染靠,跟进找一下关键的函数,找污染点
切记一定要让其__proto__解析为一个键名
前言:
静下心来,慢慢思考。
解题:
扫描目录可得www.zip,进行代码审计 routes 下的 index.js文件:
var express = require('express');
var router = express.Router();
const isObject = obj => obj && obj.constructor && obj.constructor === Object;
const merge = (a, b) => { //用了危险函数 merge
for (var attr in b) {
if (isObject(a[attr]) && isObject(b[attr])) {
merge(a[attr], b[attr]);
} else {
a[attr] = b[attr];
}
}
return a
}
const clone = (a) => {
return merge({}, a);
}
function safeKeyword(keyword) {
if(keyword.match(/(admin)/is)) {
return keyword
}
return undefined
}
//路由
router.get('/', function (req, res) {
if(!req.session.user){ //没登录 返回到login
res.redirect('/login');
}
res.outputFunctionName=undefined; //outputFunctionName=undefined
res.render('index',data={'user':req.session.user.user}); //渲染
});
router.get('/login', function (req, res) {
res.render('login');
});
router