# Insecure deserialization Lab8 本題是基於序列化的會話機制,如果可以構建合適的小工具鏈,則可以利用本實驗室的不安全反序列化來獲取管理員的密碼。 要解決該實驗室,請訪問原始程式碼並使用它來構建小工具鏈以獲取管理員的密碼,然後登入並刪除 carlos。 可以使用以下認證登錄自己的帳戶:`wiener:peter` 一樣先進入網站並登入看 Cookie。 ![image](https://hackmd.io/_uploads/rJuS-niDeg.png) 觀察 Cookie 。很顯然這次不是 b64,是 Java serialized object。 既然不能跟之前一樣直接看原文,那我們看看他有沒有其他檔案,而他確實有其他的 java 檔,所以就一個一個看看。 ![image](https://hackmd.io/_uploads/r1J6f3jwgg.png) 而在瀏覽其中一個檔可以發現他有用到 SQL 語法,`ProductTemplate.readObject()` 會把 id 丟進 SQL 查詢裡,也就是有 SQLi 了。 ![image](https://hackmd.io/_uploads/H1Lbr3oPll.png) 也就是說:只要我控制 id,我就能在 `readObject()` 的 SQL 中注入我想要的語句。因此我們可以建 gadget chain ,使用 Java 程式碼建立一個 ProductTemplate 物件並設定 id 欄位為 payload。 在 github 上面有範本讓我們可以直接使用,這樣我們可以直接減去寫腳本的時間,所以: ![image](https://hackmd.io/_uploads/S1Vej1hPee.png) 透過這個腳本可執行我們的 SQL 語法,他會將我們的內容以 Java serialized object 形式列出,我們再把這個結果丟到 session 裡面就可以執行。 所以我們用下面 SQL 語法,透過錯誤訊息來查密碼。 ``` ' UNION SELECT NULL, NULL, NULL, CAST(password AS numeric), NULL, NULL, NULL, NULL FROM users-- ``` ![image](https://hackmd.io/_uploads/H1wyyl2wgx.png) 得出密碼:`5fql7pqpkw1xzaenmcy0` ![image](https://hackmd.io/_uploads/rJIIyghvll.png) ![image](https://hackmd.io/_uploads/r11vkg2wlx.png) ![image](https://hackmd.io/_uploads/rkPw1xnweg.png) ---