RPC漏洞的通用分析方法

RPC漏洞的通用分析方法

Friddy

一.工具準備
1.IDA Pro Advanced 5.2(強大的靜態逆向工具)
2.HexRays(強大的可以將彙編代碼轉換爲高質量的C代碼的IDA插件)
3.mIDA(極好的抽象RPC接口的IDA插件)

二.找到溢出點
1.補丁比較。
(1)保留沒有更新的文件到文件夾Old
   (2)打補丁,將更新後的文件放到文件夾New
   (3)使用“Darun Grim”等類似的補丁比較工具進行比較,找到微軟偷偷修改的地方

2.圈day類型
   (1)FUZZ,估計忙活一年能FUZZ到兩、三個已經是祖輩上燒了高香了。
   (2)靜態分析,通過IDA找常見容易溢出的函數,比如strcpy、lstrcpy、strcat、wcscpy、wcscat、sprintf等等。彙編上,可以注意rep movsd,,比如ms08-066導致提權的AFD.sys就是使用了rep movsd
   (3)留意平時使用軟件時的報錯,可能就是溢出了。

三.朔源
1.下面Friddy就拿ms08067來舉例子,不對之處請指正,見笑了。比如通過補丁比較工具分析netapi32.dll找到了sub_5FDDA180子程序被微軟修改了。

在Functions標籤裏面找到sub_5FDDA180雙擊進去

點擊sub_5FDDA180,右擊選擇Chart of xrefs to,找到是被哪個函數調用了

可以看到

是NetpwPathCanonicalize調用了sub_5FDDA180這個子函數。下面看看NetpwPathCanonicalize這個函數:

在IDA的導出函數表中可以找到NetpwPathCanonicalize:

下面的問題就是找到通過誰可以去調用NetpwPathCanonicalize了。查詢《Windows network services internals》一文,搜索PathCanonicalize關鍵字,可以查到以下信息:
######################################################################
The srvsvc interface is used to manage the lanmanserver service.
Interface Operation number Operation name
4b324fc8-1670-01d3-1278-5a47bf6ee188 v3.0: srvsvc //Coment by Friddy
0x00 NetrCharDevEnum
0x01 NetrCharDevGetInfo
0x02 NetrCharDevControl
0x03 NetrCharDevQEnum
…………
0x1e NetprPathType
0x1f NetprPathCanonicalize//這個就是我們想要找的調用的地方了
0x20 NetprPathCompare
……………….
0x24 NetrShareEnumSticky
######################################################################
原來我們要找的接口在srvsvc.dll中的opcode爲0x1f的地方。
下面還是用IDA去逆向srvsvc.dll
下面我們就來使用mIDA了,呼出mIDA的快捷鍵是Ctrl+7,找到opcode爲0x1f的地方

Opcode爲0x1f處的函數名爲:sub_74FFDAE2。雙擊這個函數,
可以看到:

OK!調用NetpwPathCanonicalize的地方已經找到了。雙擊call NetpwPathCanonicalize,可以看到:

再雙擊jmp     ds:__imp_NetpwPathCanonicalize可以看到:

果真在這裏加載了NETAPI32.DLL中的NetpwPathCannonicalize,說明我們找對了。
在mIDA的窗口中,選擇Opcode爲0x1f處的函數,右鍵選擇Decompile

可以得到接口的定義爲:
######################################################################

[
uuid(4b324fc8-1670-01d3-1278-5a47bf6ee188),
version(3.0)
]

interface mIDA_interface
{
/* opcode: 0x1F, address: 0x74FFDAE2 */
long  sub_74FFDAE2 (
[in][unique][string] wchar_t * arg_1,
[in][string] wchar_t * arg_2,
[out][size_is(arg_4)] char * arg_3,
[in][range(0,64000)] long arg_4,
[in][string] wchar_t * arg_5,
[in, out] long * arg_6,
[in] long arg_7
);
}
######################################################################
到此,朔源已經完成。

四.溢出
還是接着之前說的通過比較得到的溢出點,在netapi32.dll的sub_5FDDA180處右擊選擇”Chart of xref from”,可以看到:

這裏使用了wcscpy和wcscat,溢出………………….

由於是講解RPC漏洞的通用分析方法,不再對ms08067漏洞進入深入的分析。想對它進行具體分析,可以使用HexRays將sub_5FDDA180和sub_5FDDA26B處逆向成C的代碼,看了不容易犯糊塗。

五.總結
RPC相關的漏洞,由於介紹較少,使得對初學者無從下手,對這方面感興趣的,可以加Friddy的QQ568623聯繫,也可以發郵件到:[email protected]  一同探討相關問題和提出意見。

最後,在2009新年裏,祝大家0day多多!

doc格式文檔下載:下載文件點擊下載此文件
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章