typecho老版本的反序列化研究

weixin_33866037發表於2018-11-22

雖然自己也水了些CVE,但是並沒有自己滿意的、漂亮的漏洞利用鏈,今天呢主要是自己還沒審出過反序列化漏洞,所以找了typecho老版本來審一下。

正文

在install.php第246行會反序列化操作

48820-eea2d93a9a67a996.png

進Typecho_Cookie類看一下get方法

48820-d010d7de0283ca3b.png

這裡很顯然是一個獲取值的。繼續看一下怎麼進入到這個反序列化,這裡php夾雜著html程式碼,不太方便看,我簡單處理一下。首先

48820-86aa9f8963c958ff.png

這裡是判斷是否已經安裝的,一般其他cms的寫法是隻判斷是否已經存在了lock檔案,但是這裡有個可控引數,也就是我們還能進入這個install.php頁面。繼續往下走,可以直接進入反序列化操作。這裡還需要魔術方法,可以參考我總結的另外一篇文章http://p0desta.com/2018/04/01/php%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E6%80%BB%E7%BB%93/

48820-bab6baaf08671607.png

這裡我首先跟的是 $db->addServer,但是當我跟到 Config.php第62到81行的時候

48820-f577514357a65bf1.png

只發現到這裡如果類當做陣列遍歷的時候會觸發 cureent方法,但是我全域性搜 current方法並沒有找到可以利用的地方。

然後繼續跟一下

48820-66706044bd2ae9ba.png

跟到 Db.php第114行到135行

48820-f1d8aeb04b92539b.png

危險的地方在於

48820-84beafd13407bb3d.png

因為 $adapterName方法是可控的,被當做字串拼接了,那麼就會觸發 toString方法,簡化一下

48820-4245f5df69a652df.png

那麼全域性搜一下toString找一下可以利用的地方

48820-878ad6a03e92c4ee

找到這個跟進去,這裡看Feed.php第290行

48820-9f33d9d9b6337199.png

讀取不可訪問屬性的值時,get() 會被呼叫,那麼只要item['author']我們可控,那麼就可以出發get()魔術方法。

通過全域性搜素 __get()跟進/var/Typecho/Request.php,267行

48820-90ed2302526a5289.png

繼續看get方法

48820-689fdb412aadc3c0.png

接著呼叫了 _applyFilter方法,繼續跟進

48820-4d50acdecbed579d.png
48820-bf46b3e88c5eb6e2.png

一開始我直接構造getshell,並沒有遇到什麼問題,但是如果想講執行結果輸出出來就會遇到問題,問題產生的原因呢在於

install.php第54行 ob_start();

看一下手冊

48820-4fd57832e540e185

什麼意思呢,這裡我寫個小demo來解釋一下

48820-fc685663b6fe9d93.png

這個執行的話是不會有輸出的, ob_start()啟用了緩衝,輸出結果會被寫入到緩衝區,但是如果執行了ob_end_clean函式就會把緩衝區的內容丟棄掉,那麼也就沒有輸出了。在Common.php第225行

48820-76ea96fafa4be7e2.png

設定了使用者自定義的異常處理函式,當存在未捕獲的異常時會呼叫,看一下定義測函式

48820-ac331234481ca12a.png

@ob_end_clean();顯然,它清理了緩衝區。

這裡因為payload使我們構造好帶進去的,很難做到不觸發異常,那麼我們有什麼辦法來繞過呢。這裡我想到的是讓它執行完我們的命令之後引發個報錯,看一下報錯型別

48820-6971bb5dd13792ec.png

寫個demo解釋一下

48820-cf9ac73bcaf2cdd9.png
48820-c5a7158d9aa725af

看Feed.php第292-296行

48820-fab2cda15085fe4d.png

那麼我們就可以讓其停止執行,這樣的話就不會執行到 ob_end_clean函式了。修改payload如下

48820-7d60f172dd8e023a.png
48820-41b5c9b742b0a789

總結

總的利用鏈還是非常有意思的

48820-5bcf8067335822ba.png

有趣的攻擊鏈總能引起研究的興趣。




本文僅用於普及網路安全知識,提高小夥伴的安全意識的同時介紹常見漏洞的特徵等,若讀者因此做出危害網路安全的行為後果自負,與合天智匯以及原作者無關,特此宣告。本文為原創文章,轉載請註明出處!

相關文章