1. 程式人生 > >實驗吧題庫Guess Next Session

實驗吧題庫Guess Next Session

實驗吧 CTF web

Guess Next Session
實驗吧題目,鏈接:http://ctf5.shiyanbar.com/web/Session.php
這個題目操作上倒不是太復雜,主要是理解了session的原理,就非常好做
先貼上源碼
<?php
session_start();
if (isset ($_GET[‘password‘])) {
if ($_GET[‘password‘] == $_SESSION[‘password‘])
die (‘Flag: ‘.$flag);
else
print ‘<p>Wrong guess.</p>‘;
}

mt_srand((microtime() ^ rand(1, 10000)) % rand(1, 10000) + rand(1, 10000));

?>

代碼要求,當參數值等於$_SESSION[‘password’]獲取的值時,可以獲得flag
1.session的工作原理
(1)首先使用session_start()函數進行初始化,啟動會話
(2)當執行PHP腳本時,通過使用$_SESSION變量註冊session文件。
(3)當PHP腳本執行結束時,未被銷毀的session變量會被自動保存在本地一定路徑下的session庫中, 這個路徑可以通過php.ini文件中的session.save_path指定,下次瀏覽網頁時可以加載使用。

2.session_start()做了什麽

(1)讀取名為PHPSESSID(默認)的cookie值,假使為abc123

(2)若讀取到PHPSESSID這個COOKIE,創建$_SESSION變量,並從相應的目錄中(可以再php.ini中設置)讀取SESS_abc123(默認是這種命名方式)文件,將字符裝在入$_SESSION變量中; 若沒有讀取到PHPSESSID這個COOKIE,也會創建$_SESSION變量,同時創建一個sess_abc321(名稱為隨機值)的session文件,同時將abc321作為PHPSESSID的cookie值返回給瀏覽器端。

所以源碼中的第一個函數上來就讀取cookie的PHPSESSID的值,然後就進入判斷語句,比對兩個參數是否相等。
我們抓包,將cookie的PHPSESSID的值改為空,Password改為空。返回flag。

技術分享圖片
處理過程
1、當我們發送請求的時候,服務器以session_start()來開啟會話,產生cookie相應頭信息(默認為PHPSESSID),記錄到新的session文件中,這裏我們給的參數值是空,獲取的$SESSION[‘password’]的值也為空。
2、然後再看腳本執行,使用$_SESSION[‘password‘]讀取session文件的password的空值。
3、最後,將get的password的空值與$SESSION[‘password’]讀取的空值比較,相等,得到flag。

實驗吧題庫Guess Next Session