天天看點

http路徑轉file會變成反斜杠_PHP session反序列化漏洞

最近有點忙,有空學習一下 感覺似懂非懂,今晚來刷個題,驗證一下我的一些想法

入口:http://web.jarvisoj.com:32784/index.php?

是一個反序列化的題,源碼中

http路徑轉file會變成反斜杠_PHP session反序列化漏洞

隻是判斷是否set了phpinfo 如果有就輸出phpinfo,是以說這是關于session的題

session反序列化漏洞的原理網上有,總結一下就是兩次處理會話的session引擎不同,一個是php 一個是php serialize,而session_start()函數的定義如下:

http路徑轉file會變成反斜杠_PHP session反序列化漏洞

就是如果存在現有會話,就重用,而重用的方式是從預設的session存儲檔案裡将資料反序列化得出,如果存儲使用php serialize 而反序列化取回資料用的是php 那這就導緻了問題

接着題目講,題目中沒有給出寫入session 的方法,這就很尴尬了。。看了前輩的wp ,原來有個叫session 上傳進度的東西

http路徑轉file會變成反斜杠_PHP session反序列化漏洞

當PHP檢測到同名post請求 就會再$_SESSION中添加一條資料 看來就是用這個來寫session的

那就搞一個檔案上傳的同時再post一個請求:

http路徑轉file會變成反斜杠_PHP session反序列化漏洞

将filename 改成 poc

http路徑轉file會變成反斜杠_PHP session反序列化漏洞

poc 得到

,得到目前目錄資訊

http路徑轉file會變成反斜杠_PHP session反序列化漏洞

這裡為什麼改filename的值,不改其他的值,開始我也不太懂 後來查了PHP手冊,

http路徑轉file會變成反斜杠_PHP session反序列化漏洞
http路徑轉file會變成反斜杠_PHP session反序列化漏洞

例子中上傳的是兩個檔案,如果一個檔案的化,就能看出了,filename的鍵值對被寫進入了 是以這裡修改的是filename的值

再說下這個poc ,檢視phpinfo得知

http路徑轉file會變成反斜杠_PHP session反序列化漏洞

前面是local 後面是master

一開始上傳session那個地方是使用php_serialize的,後來執行php的腳本,就變成了php的引擎 ,再重用上傳的會話,用php引擎反序列化後,就會導緻了問題 ,這是我的了解

講下poc ,就是php_serialize引擎在處理session時會識别 | 這個字元,但是php引擎則會把 |

當成鍵值對的分隔符,是以用phpserialize處理過的session來給php反序列,就會得到問題,具體在這裡展現就是執行個體化了一個類,完了又自動調用__destruct,,具體原理可以百度,很多前輩都寫了

|O:5:"OowoO":1:{s:4:"mdzz";s:36:"print_r(scandir(dirname(__FILE__)));";} (為了防止"被轉義 加了)

這個 | 後面,用php引擎解釋實際上就是

new OowoO()

,print_r(scandir(dirname(__FILE__)))就是mdzz 瑪德智障嗎 哈哈 為什麼不用system ,因為disable了

http路徑轉file會變成反斜杠_PHP session反序列化漏洞

後面還有,沒截到

查到了目前目錄的flag檔案,接下來就是換指令了,目前目錄在哪

http路徑轉file會變成反斜杠_PHP session反序列化漏洞

目前目錄

整個流程補完

http路徑轉file會變成反斜杠_PHP session反序列化漏洞
http路徑轉file會變成反斜杠_PHP session反序列化漏洞

在如何寫入session 和調用session 那地方感覺還是一知半解,總結就是摳腳