1. 程式人生 > >i春秋——“百度杯”CTF比賽 十月場——Login

i春秋——“百度杯”CTF比賽 十月場——Login

cat dex this HERE session wake ima base64 query

根據頁面源碼提示的 test1 test1 登錄

技術分享圖片

刷新此頁面並抓包,有個show=0值得關註

技術分享圖片

在發送的包的header中加一句show:1,即可得到member.php的源碼

技術分享圖片

 1 <?php
 2     include ‘common.php‘;
 3     $requset = array_merge($_GET, $_POST, $_SESSION, $_COOKIE);
 4     class db
 5     {
 6         public $where;
 7         function __wakeup()
 8         {
9 if(!empty($this->where)) 10 { 11 $this->select($this->where); 12 } 13 } 14 15 function select($where) 16 { 17 $sql = mysql_query(‘select * from user where ‘.$where); 18 return @mysql_fetch_array
($sql); 19 } 20 } 21 22 if(isset($requset[‘token‘])) 23 { 24 $login = unserialize(gzuncompress(base64_decode($requset[‘token‘]))); 25 $db = new db(); 26 $row = $db->select(‘user=\‘‘.mysql_real_escape_string($login[‘user‘]).‘\‘‘); 27 if($login[‘user‘] === ‘ichunqiu‘)
28 { 29 echo $flag; 30 }else if($row[‘pass‘] !== $login[‘pass‘]){ 31 echo ‘unserialize injection!!‘; 32 }else{ 33 echo "(╯‵□′)╯︵┴─┴ "; 34 } 35 }else{ 36 header(‘Location: index.php?error=1‘); 37 } 38 39 ?>

array array_merge ( array $array1 [, array $... ] ) //將一個或多個數組的單元合並起來,一個數組中的值附加在前一個數組的後面。返回作為結果的數組。
string gzuncompress ( string $data [, int $length = 0 ] ) //此函數解壓縮字符串。與
gzcompress()對應
mysql_real_escape_string() //函數轉義 SQL 語句中使用的字符串中的特殊字符:
\x00 \n \r \ ‘ " \x1a

特別註意array_merge() 如果輸入的數組中有相同的字符串鍵名,則該鍵名後面的值將覆蓋前一個值。然而,如果數組包含數字鍵名,後面的值將不會覆蓋原來的值,而是附加到後面。

接著看題,根據源碼,只要提交符合條件的token就可拿到flag,但我們並沒有在post,get,cookie中提交token,然而服務器卻返回"(╯‵□′)╯︵┴─┴",說明token是在SESSION中,那我們只要在cookie裏覆蓋token即可

技術分享圖片

技術分享圖片

於是構造

技術分享圖片

然後在cookie中提交

技術分享圖片

i春秋——“百度杯”CTF比賽 十月場——Login