目录
简介
SSTI(Server-Side Template Injection),即服务端模板注入攻击,通过与服务端模板的输入输出交互,在过滤不严格的情况下,构造恶意输入数据,从而达到读取文件或者getshell的目的,目前CTF常见的SSTI题中,大部分是考python的。
基础知识
模板语法
|
|
魔术方法
|
|
常规逃逸
|
|
内置函数
介绍
flask提供了两个内置的全局函数:url_for、get_flashed_messages
,两个都有__globals__
键;
jinja2一共有3个内置的全局函数:range、lipsum、dict
,其中只有lipsum有__globals__
键
条件
flask的内置函数只有flask的渲染方法render_template()和render_template_string()渲染时才可使用;
jinja2的内置函数无条件,flask和jinja2的渲染方法都可使用
payload
|
|
内置类
Undefined
介绍
在渲染().__class__.__base__.__subclasses__().c.__init__
初始化一个类时,此处由于不存在c类理论上应该报错停止执行,但是实际上并不会停止执行,这是由于Jinja2内置了Undefined类型,渲染结果显示为<class 'jinja2.runtime.Undefined'>
,所以看起来并不存在的c类实际上触发了内置的Undefined类型。
payload
|
|
bytes
例题:xctf_huaweicloud-qualifier-2020/web/mine2
介绍
python3新增了bytes类,用于代表字符串,其fromhex()方法可以将十六进制转换为字符串。
payload
|
|
bypass
字符串过滤
|
|
符号过滤
|
|
编码绕过
|
|
request方法
|
|
原理有限,姿势无限,希望看到更多带佬的骚姿势(*^_^*)
参考
关于Flask SSTI,解锁你不知道的新姿势https://mp.weixin.qq.com/s/Uvr3NlKrzZoWyJvwFUFlEA)