源码:
<?php
$flag="flag";
session_start();
if(isset($_GET['password'])){
if($_GET['password']==$_SESSION['password'])
die('Flag:'.$flag);
else
print'<p>Wrongguess.</p>';
}
mt_srand((microtime()^rand(1,10000))%rand(1,10000)+rand(1,10000));
?>
函数释义:
mt_srand()播种 Mersenne Twister 随机数生成器。
mt_srand(seed) ,用 seed参数 来给随机数发生器播种。
microtime()函数返回当前 Unix 时间戳的微秒数。
rand()函数生成随机整数。
代码分析:
输出flag的条件
$_GET['password']==$_SESSION['password'])
password和session都为空,即可相等,因此清除掉sessions即可
解题过程:
password和session都为空,即可相等,因此清除掉sessions即可
但是真正在实践的时候,没有抓包删除session值,只是将password参数置空可以获取到flag,如下所示:
http://localhost:63342/php_bugs-master/08%20SESSION%E9%AA%8C%E8%AF%81%E7%BB%95%E8%BF%87.php?password=
抓包进行尝试,password和PHPSESSID都为空的情况下可以爆出flag
只有PHPSESSID为空不可以,不能获取到flag值
注意:不能直接将cookie中的内容全部删除,因为我是直接在phpstorm中打开的网页链接,所以有一个Phpstorm-454e6646值,都删除会报错。如果是直接从phpstorm中打开则需要注意,其他情况可忽略该注意事项。
参考链接:
https://github.com/bowu678/php_bugs