2021-DASCTF八月挑战赛

babypython[国赛总决赛复现]

在这里插入图片描述是个上传界面,经测试只能上传zip文件
看到页面提示,猜测只有admin才能得到flag,需要伪造session,伪造session要用到一个工具-flask-unsign
所以这道题关键是需要找到key.

可以上传zip文件,同时后台自动解压的情况下,从而实现任意文件读取。
软连接导致任意文件读取
我们可以压缩一个软链接,类似于windows下的快捷方式,然后网站后台会解压读取该软链接指向的服务器上的文件,就能达到读取任意文件的效果。

ln -s /etc/passwd passwd
zip -y passwd.zip passwd

生成了一个读取**/etc/passwd的zip软链接
在这里插入图片描述再读取下环境变量
/proc/self/environ**

同样执行上面两行命令,改下要读取的目录
这里读不到,会显示bad然后跳转到?error=1

再来读取下app/uwsgi.ini

/app/main.py

uWSGI是一个Web应用服务器,它具有应用服务器,代理,进程管理及应用监控等功能。它支持WSGI协议,同时它也支持自有的uWSGI协议
在这里插入图片描述
在这里插入图片描述

依旧没有读到源码。。。。。当时就溜了,可能是复现的问题
/app/hard_t0_guess_n9f5a95b5ku9fg/hard_t0_guess_also_df45v48ytj9_main.py
真正源码在上面读取下,源码太长就不上去了
其中有两行代码

*app.config[‘SECRET_KEY’] = str(random.random()100)
random.seed(uuid.getnode())

就是session是随机生成的,种子是uuid.getnode()
在这里插入图片描述那么首先就是找到mac地址,有下面几种方法。
在这里插入图片描述
得到mac地址。
然后就是把mac地址处理下,转换成二进制,然后设置成seed,生成一下KEY。脚本如下

在这里插入图片描述

在这里插入图片描述

得到key
在这里插入图片描述

flask-unsign伪造session

在这里插入图片描述丢这里踩坑了,这个工具貌似不能用浮点数,只能换个

https://github.com/noraj/flask-session-cookie-manager

在这里插入图片描述
得到cookie
在这里插入图片描述先这一道,后续再补

猜你喜欢

转载自blog.csdn.net/ZXT2804567059/article/details/120031287