RPC漏洞的通用分析方法(图)
2009-01-11 17:32
393 查看
作者: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 一同探讨相关问题和提出意见。
一.工具准备
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 一同探讨相关问题和提出意见。
相关文章推荐
- RPC漏洞的通用分析方法
- 【分析】通用的攻击WebDAV漏洞的方法
- Apache后缀名解析漏洞分析和防御方法
- 灰帽黑客:正义黑客的道德规范、渗透测试、攻击方法和漏洞分析技术(第3版)
- web上存漏洞及原理分析、防范方法(安全文件上存方法)
- 通用网站系统漏洞及修复方法
- 漏洞分析----非常给力的方法----虚拟机快照
- 网站服务器通用和专用保护方法比较分析
- 灰帽黑客:正义黑客的道德规范、渗透测试、攻击方法和漏洞分析技术(第3版)
- ThinkPHP 3.1、3.2一个通用的漏洞分析
- 日常分析软件漏洞方法(转)
- PHP利用hash冲突漏洞进行DDoS攻击的方法分析
- glibc CVE-2015-7547漏洞的分析和修复方法
- java关于迭代器的分析...设计更通用的容器遍历方法
- PHP文件包含漏洞原理分析和利用方法
- glibc CVE-2015-7547漏洞的分析和修复方法【转】
- 【漏洞分析】struts2漏洞中关于动态方法调用的一点思考
- ASP漏洞分析和解决方法
- java关于迭代器的分析...设计更通用的容器遍历方法