[GYCTF2020]FlaskApp
flask的模板注入加一个debug模式下的命令执行
题目开局给的是一个base64的加解密网站,说明了是flask写的,hint界面在注释里面藏了一句PIN(我一开始还不知道是什么意思)
后来在解码处输入了一个错误的字符串,进入了debug界面,可以看到解码部分的源码
@app.route('/decode',methods=['POST','GET'])
def decode():
if request.values.get('text') :
text = request.values.get("text")
text_decode = base64.b64decode(text.encode())
tmp = "结果 : {0}".format(text_decode.decode())
if waf(tmp) :
flash("no no no !!")
return redirect(url_for('decode'))
res = render_template_string(tmp)
发现在debug模式下可以运行一个shell,但是要输入一个叫PIN码的东西,这个就是提示中出现的PIN了,每个机器的PIN码是由几个数据固定生成的,那么我们只要读取到对应的文件,自然就能计算出PIN从而任意命令执行
而这里又使用了模板渲染,自然可以测一下ssti,简单的{{8+8}}可以被计算即可证明存在模板注入。不过这里也提出了有Waf,就需要测一下waf禁用了什么。简单找几个payload试试,发现os,flag和popen,system,import之类的常用命令执行的字段被禁用了,不过就这种过滤还是很容易绕过的,毕竟还是得用ssti读文件去计算PIN码,网上找几个payload就可以了