github编辑

[HCTF 2018]Hideandseek

[HCTF 2018]Hideandseek

考点

  • Linux下的ln命令

  • Python随机数漏洞

  • flask session伪造

wp

提示先登录,随便输账号密码,比如aaaa/aaaa,提示要上传压缩包

F12看到session是eyJ1c2VybmFtZSI6ImFhYWEifQ.FVpCHQ.ekVxiCec35C4f6Dm2G2qW-HES7U

解码是{'username': 'aaaa'}

上传一个压缩包,返回了压缩包中的文件内容,那这里使用ln软链接可能有任意文件读取,和[SWPU2019]Web3差不多

  • ln -s /etc/passwd test

  • zip -ry test.zip test

读取/proc/self/cmdline/proc/self/environ/proc/cmdline,有用的就只有/proc/self/environ

再读取/app/uwsgi.ini

读取/app/main.py发现是个假的文件,原题的uwsgi.ini文件如下

读取/app/hard_t0_guess_n9f5a95b5ku9fg/hard_t0_guess_also_df45v48ytj9_main.py

获取flag的条件是session的username为admin

值得注意的是,它使用了random.seed(uuid.getnode())去生成随机数种子,然后设置secret_key为随机数app.config['SECRET_KEY'] = str(random.random()*100)

Python中的random是伪随机数,只要种子是一样的,后面产生的随机数也是一样的

uuid.getnode()是返回当前主机网卡MAC地址的十进制形式,Linux中记录MAC地址的文件是/sys/class/net/eth0/address或者 /etc/sysconfig/network-scripts/ifcfg-eth0

读取/sys/class/net/eth0/address,得到9e:e1:ac:68:a3:d1

然后重新跑一下随机数,Python2和3都试一下

然后重新生成session

这里的随机数考点和[CISCN2019 华东南赛区]Web4一样。

小结

最后更新于