[pasecactf_2019]flask_ssti

[pasecactf_2019]flask_ssti

考点

  • Flask SSTI 读取config

  • 根据加密代码写解密代码

wp

输入一个name会回显,这里就是SSTI了

看给的代码,只是一部分代码

def encode(line, key, key2):
    return ''.join(chr(x ^ ord(line[x]) ^ ord(key[::-1][x]) ^ ord(key2[x])) for x in range(len(line)))
app.config['flag'] = encode('', 'GQIS5EmzfZA1Ci8NslaoMxPXqrvFB7hYOkbg9y20W3', 'xwdFqMck1vA0pl7B8WO3DrGLma4sZ2Y6ouCPEHSQVT')

把flag用key和key2异或再写入到config中,那就先读取config

在最后面看到flag

'flag': '-M7\x10wH57dU*`.\x0e\x1a\x02j\x02(DN\x12\x08\x17 mSd\x02^E\\ \n.zF`\x15Y\x16G'

密文是flag经过一系列异或运算得到的,用相同的代码就可以得到flag, encode 脚本即为 decode 脚本

def encode(line, key, key2):
    return ''.join(chr(x ^ ord(line[x]) ^ ord(key[::-1][x]) ^ ord(key2[x])) for x in range(len(line)))

enc = "-M7\x10wH57dU*`.\x0e\x1a\x02j\x02(DN\x12\x08\x17 mSd\x02^E\\ \n.zF`\x15Y\x16G"
flag = encode(enc, 'GQIS5EmzfZA1Ci8NslaoMxPXqrvFB7hYOkbg9y20W3', 'xwdFqMck1vA0pl7B8WO3DrGLma4sZ2Y6ouCPEHSQVT')

print(flag)

另外,buu 上题目描述的代码有误。

最后更新于