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联系,也可以发邮件到:qianyang@ssyeah.com  一同探讨相关问题和提出意见。

最后,在2009新年里,祝大家0day多多!

doc格式文档下载:下载文件 点击下载此文件













[本日志由 friddy 于 2009-01-07 01:35 PM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: RPC
评论: 4 | 引用: 0 | 查看次数: 8241
回复回复Justine[2017-11-28 11:09 AM | del]
I believe this site has some really great information for everyone : D.
回复回复Hollie[2017-11-06 12:18 AM | del]
Just had to emphasize I'm just delighted I came onto your web site.
回复回复Zak[2017-06-10 07:14 AM | del]
Link exchange is nothing else but it is only placing the other person's blog link on your page at proper place and other person will also do same in support of you.
回复回复fengzheng[2009-01-07 07:07 PM | del]
谢谢 牛人的 教导!
有您这样的 牛牛 网络才得以发展!
您这 才是 真正的  XX 精神 !
不要听 有些 人 瞎XX 什么人啊!


愿意做你的徒弟 fengzheng
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭