打开文件是一个这样的界面,发现可能存在文件包含漏洞,于是想到用php://filter/协议流去读取文件的源码(其中最重要的就是upload源码,index并不重要)
如下图所示:源码如下:
感觉最重要的是下面的部分:
$seed = rand(0,999999999);
mt_srand($seed);
$ss = mt_rand();
$hash = md5(session_id() . $ss);
setcookie(‘SESSI0N’, $hash, time() + 3600);
查到mt_srand()函w3school给的介绍是 mersenne twister随机数生成器
mt_srand(seed) 参数seed用来给随机数播种
mt_srand() 播种 Mersenne Twister 随机数生成器。语法
mt_srand(seed)
mt_rand() 使用 Mersenne Twister 算法返回随机整数。语法
mt_rand(min,max)
以上这段代码的意思就是用 rand函数随机生成(0,999999999)之间的一个种子数,然后给mt_rand播种,再赋值给
s
s
此
时
返
回
的
h
a
s
h
就
是
s
e
s
s
i
o
n
i
d
(
)
和
ss 此时返回的hash就是session_id()和
ss此时返回的hash就是sessionid()和ss一块的hash ,我们提交的时候将session_id删掉,这样的话就可以解出来$ss的值,我们首先创建一个php的文件,内容为一句话,然后添加到压缩包文件,再把压缩包改名为jpg,最后利用Zip://协议流解析里面的内容,如下图所示:
然后可以用php_mt_seed这款工具暴力破解出随机数的种子,
(下载地址 https://www.openwall.com/php_mt_seed/)
mt_srand()为刚才求出的种子,然后访问这个脚本,就可以拿到文件的路径
根据源代码可以推测出文件的路径,然后利用zip://包含文件 解析PHP代码
最后链接菜刀拿flag就可以了