題目內(nèi)容:這個真的是爆破赛糟。
error_reporting(0);// 關(guān)閉錯誤報告
session_start();//啟動會話
require('./flag.php');
if(!isset($_SESSION['nums'])){//isset() — 檢測變量是否設(shè)置。
$_SESSION['nums'] = 0;
$_SESSION['time'] = time();//返回當(dāng)前時間的 Unix 時間戳
$_SESSION['whoami'] = 'ea';
}
if($_SESSION['time']+120<time()){
session_destroy();//session_destroy — 銷毀一個會話中的全部數(shù)據(jù)
}//120s后會話結(jié)束
$value = $_REQUEST['value'];
$str_rand = range('a', 'z');//range創(chuàng)建一個包含從 "a" 到 "z" 之間的元素范圍的數(shù)組
$str_rands = $str_rand[mt_rand(0,25)].$str_rand[mt_rand(0,25)];//mt_rand() 使用 Mersenne Twister 算法返回0到25之間的隨機整數(shù)砸逊。$str_rand[mt_rand(0,25)]返回"a" 到 "z"之間任意字母璧南。$str_rand[mt_rand(0,25)].$str_rand[mt_rand(0,25)]是兩任意字母相連
if($_SESSION['whoami']==($value[0].$value[1]) && substr(md5($value),5,4)==0){//substr(string,start,length)。===是包括變量值與類型完全相等师逸。==只是比較兩個數(shù)的值是否相等司倚,由于substr是字符串,和數(shù)字比較的時候會強制轉(zhuǎn)化成數(shù)字0篓像,自然和0相等动知。
$_SESSION['nums']++;
$_SESSION['whoami'] = $str_rands;
echo $str_rands;
}
if($_SESSION['nums']>=10){//循環(huán)10次輸出flag,暴力破解
echo $flag;
}
show_source(__FILE__);
?>
分值:10分
代碼內(nèi)容:先設(shè)置初始值nums=0员辩,time是當(dāng)前時間盒粮,whoami=ea。當(dāng)whoami=value時奠滑,num+1丹皱,whoami=$str_rands,循環(huán)宋税。nums>=10時摊崭,打印flag。120s后會話結(jié)束杰赛,由于時間120秒呢簸,完全可以手工做10次,即可得到flag乏屯。
方法:先設(shè)置數(shù)組value[]=ea
?value[]=ea
根时,得到兩個字母,重新給value[]賦值辰晕,重復(fù)10次蛤迎,得到flag