题目来源:攻防世界 Confusion1
目录
step 4:已确认为SSTI漏洞中的Jinjia2模板漏洞,构造payload
一、打开靶机,整理信息
题目信息:php语言,可以用扫描器,
Login和Register功能都用不了,Home就是当前页面
冷知识:蟒蛇——python 大象——elePHPant
蛇缠住了大象,猜测本题中用到了php+python,网页源码中该图片名称为:PythonVsPhp
二、解题思路
step 1:查看网页源码信息
Home页面读到了网页源码信息
Login、Register页面虽然报错,但是也包含了信息(看到其他师傅的wp才发现,报错页面也是会包含信息的)
根据txt后缀,这里应该是暗示了flag的位置
step 2:模板注入
新知识:服务器模板注入(SSTI)
服务器模板注入(SSTI)
1.概念:当应用程序在处理用户输入并将其直接嵌入到模板中进行渲染,而没有进行适当的输入验证和过滤时,就可能发生 SSTI 漏洞。攻击者可以利用这个漏洞,通过精心构造恶意输入,让模板引擎执行恶意代码,从而控制服务器。
2.攻击原理
- 模板引擎工作流程:正常情况下,模板引擎从应用程序获取数据,将数据填充到模板的占位符中,然后生成最终的 HTML 页面返回给用户。例如,一个简单的模板可能是 “Hello, { {username}}!”,其中
{ {username}}
是占位符,应用程序会将实际的用户名数据填充进去。- 攻击方式:攻击者利用 SSTI 漏洞,将恶意代码作为数据输入,模板引擎会把这些恶意代码当作合法的模板指令进行解析和执行。例如,在某些支持 Python 代码执行的模板引擎中,攻击者可能输入
{ {__import__('os').system('rm -rf /')}}
,这条恶意代码如果被执行,就可能删除服务器根目录下的所有文件(在 Linux 系统中),造成严重破坏。3.检测方法
- 手动测试:在输入处输特殊字符与模板语句,如 Jinja2 中输
{ {7*7}}
,看能否执行。故意输错引发报错,分析含模板引擎调试信息的错误提示,判断是否存在漏洞。- 自动化扫描工具:借助 OWASP ZAP 等 Web 漏洞扫描器,模拟攻击场景检测。利用 Bandit 等代码扫描工具,排查开发代码中用户输入直接嵌入模板且无过滤的风险。
- 日志分析:审查 Web 服务器日志,找含模板语法或恶意代码的异常请求。查看应用程序日志,依据处理用户输入时的异常记录,判断是否存在 SSTI 漏洞。
如果处于解题阶段,可以挨个尝试漏洞(需要很大的知识储备量),但是学习的目的是为了增加知识储备量,所以学会漏洞原理以及出现场景才是重点。
参考思路: