CVE2014-6287分析報告

wyzsk發表於2020-08-19
作者: cssembly · 2014/09/29 11:30

0x00 寫在前面


在烏雲zone裡看到了《HFS 2.3x 遠端命令執行(抓雞駭客末日)》的文章,以前只是分析二進位制漏洞,這種命令注入漏洞還是第一次分析,從網上下了HFS 2.3.279這個版本,執行起來之後,執行POC,四個calc就執行起來了。

poc:

http://localhost:80/?search==%00{.exec|calc.}

PS:分析到最後,google查詢可執行模組中的字串“parserLib”,才知道這個漏洞是CVE2014-6287。。。。。。一種淡淡的憂傷。不過還是說一下分析的過程吧。

0x01 準備工作


首先是分析前的一些準備工作,用PEiD檢視了一下檔案,加了asp的殼,透過PEiD通用脫殼器簡單的進行脫殼。

enter image description here

enter image description here

透過IDA載入脫殼後的檔案,看到一些函式如圖,根據之前對c++中string類實現的認識,看來應該是使用了靜態編譯,字串處理的庫程式碼被靜態連結到了可執行檔案中。

enter image description here

透過PEid對脫殼後的檔案進行編譯器識別,識別為Borland Delphi 6.0 - 7.0,透過IDA載入相應的簽名庫,對函式進行簽名,這樣就能識別出大量的行內函數,方便分析。透過簽名,已經可以識別出5636個行內函數,這樣分析起來就方便很多。

enter image description here

enter image description here

0x02 分析過程


透過IDA檢視檔案匯入函式,查詢WinExec、ShellExecuteA等程式啟動相關函式,透過交叉引用找到函式呼叫點,透過windbg設定斷點,觀察引數,確實是由ShellExecuteA啟動了計算器。同時檢視程式的呼叫棧。

enter image description here

enter image description here

透過呼叫棧,可已找到sub_531438函式,該函式解釋了exec|calc命令,並啟動了calc。對函式進行分析,可知該函式是對使用者的命令進行解釋執行的函式,相關程式碼如下。

enter image description here

繼續透過呼叫棧,結合IDA對“exec|calc”的傳遞過程進行分析,找到

int __stdcall sub_51E268(signed char *** a1, int a2)

函式,**a1指向需要解釋的字串“\x00{.exec|calc.}”,其中int __cdecl sub_51DFA0(int a1)函式對“\x00{.exec|calc.}”對其進行分析並執行。

enter image description here

enter image description here

對於

http://localhost:80/?search=%20{.exec|calc.}

透過對比sub_51E268處**a1指向需要解釋的字串,可以看到{.|等字元都被編碼了。

enter image description here

可見

http://localhost:80/?search=%00{.exec|calc.}

%00導致了{.exec|calc.}中的特殊字元轉換失敗,因此需要對轉換函式進行定位。在模組中對“&#”字串進行查詢,定位得到

int __fastcall sub_528EB0(int a1, int a2)

完成對{|等字元進行轉換。

enter image description here

sub_51E390做正規表示式匹配,查詢{|等字元,當%20{.exec|calc.}傳遞給該函式時,該函式返回值為2。下面由

sub_4B827C、Sysutils::IntToStr

將字元轉換為10進位制字串形式,最終替換掉原始字串中的{。

enter image description here

enter image description here

對於

http://localhost:80/?search=%00{.exec|calc.}

sub_51E390返回值為0,因此後面的{|等字元不會被轉換,最終導致了後面的命令執行。

enter image description here

檢視

int __fastcall sub_51E390(int a1, int a2)

函式,可以看到“\\{[.:]|[.:]\\}|\\|”和“m!”,在分析的過程中,看到過字串“parserLib”,就google一下。。。。。。。

enter image description here

enter image description here

檢視該漏洞詳情,可以看到和分析的結果一致,由於正規表示式的問題,導致了最終的遠端程式碼執行。

enter image description here

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章