OD: RPC - MS06040 & MS08067
RPC 漏洞简介
Remote Procedure Call,分布式计算中常用到的技术。两台计算机通信过程可以分为两种形式:一种是数据的交换,另一种是进程间通信。RPC 属于进程间通信。
RPC 就是在程序中调用一个函数(可能需要很大的计算量),而这个函数是在另外一个或多个远程机器上执行,执行完后将结果返回到调用的机器上继续执行后续操作。RPC 调用过程中的网络操作对程序员来说是透明的,只要将接口定义好,RPC 体系会完成网络上建链、握手、验证、传参、返回等细节问题,让程序员更加关注程序算法与逻辑而非网络细节。
比起其他类型的漏洞,RPC 漏洞危害更大,攻击者不需要利用社工来使未 patch 的机器中招,而可以通过 RPC 主动进行攻击。
RPC 系列漏洞往往伴随蠕虫传播,2003 年的 Blaster、2006 年的 Wargbot / Mocbot、2008 年的 Conficker / Downadup / Kido 都 利用了不同的 RPC 漏洞。Wargbot 利用的 MS06040 和 Conficker 利用的 MS08067 时隔两年,但漏洞出现在同一个 RPC 函数中,同一个函数在修复后又出现如此严重的漏洞并不常见。
RPC 编程简介
使用 RPC 编程时首先要定义远程进程的接口 IDL(Interface Description Language)文件,在这个文件里要指定 RPC 的接口信息以及 interface 下的 function 信息。微软的 IDL 叫做 MIDL,是兼容 IDL 标准的。定义好的 IDL 文件接口经过微软的 MIDL 编译器编译后会生成 3 个文件,一个客户端 stub,一个服务端 stub,还有一个 RPC 调用的头文件。其中 stub 负责 RPC 调用过程所有的网络操作细节。
编译 MS06040 接口文件的命令如下:
midl /acf rpc_exp_040.acf rpc_exp_040.idl # vc6. 组件中有 midl 命令
将产生的 rpc_exp_040_s.c、rpc_exp_040_c.c 和 rpc_exp_040.h 添加进工程,并 include "rpc_exp_040.h" 即可。
(作者参考了 samba 上的 Windows 网络编程接口资料才找到相关 IDL 信息)
MS06040 简介
Windows 系统中有一些非常重要的 DLL,如负责 GUI 操作的 user32.dll、负责系统调用和内存操作的 kernel32.dll 与 ntdll.dll,负责网络操作的 netapi32.dll。几乎所有使用 socket 网络的程序都会加载 netapi32.dll。MS06040 指的就是这个 DLL 的导出函数 NetpwPathCanonicalize() 中存在的缓冲区溢出缺陷,而 NetpwPathCanonicalize() 又可以被 RPC 调用。
2006 年 8 月 8 日,微软公布 MS06040 漏洞和补丁,CVE-2006-3439,补丁号为 KB921883,威胁等级为严重。
动态调试
以 Windows 2000 Pro SP4 为例,进行动态调试。Windows 2000 中,netapi32.dll 位于 C:\WINNT\System32\ 下,如果系统已经 patch 过,则原先的漏洞 DLL 会备份到 C:\WINNT\$Nt UninstallKB921883$ 里。
NetpwPathCanonicalize() 是 netapi32.dll 的导出函数,用于格式化网络路径字符串,其原型如下:
int NetpwPathCanonicalize (
uint16 path[], // [in] path name
uint8 can_path[], // [out] canonicalized path
uint32 maxbuf, // [in] max size of can_path
uint16 prefix[], // [in] path prefix
uint32* pathtype, // [in out] path type
uint32 pathflags, // [in] path flags, 0 or 1
);
这是一个 Unicode 字符串处理函数,大体功能是:如果 prefix 串非空,将 prefix 串与 path 串用 '\' 相连,并复制到 can_path 中,输出串的容量为 maxbuf 字节大小:
prefix + '\' + path => can_path[max_buf]
在路径合并过程中,函数会做各种检查,如 prefix 或 path 长度是否越界、是否符合路径规范,或 can_path 的容量是否够大等,否则函数将退出,并返回相应错误号,例如 ERROR_INVALID_NAME 0x7B,ERROR_INVALID_PARAMETER 0x135,NERR_BufTooSmall 0x84B 等;函数成功则返回 0,并对 pathtype 进行更新。(关于 NetpwPathCanonicalize() 的细节资料很难找到,Google 上也只是在 srvsvc 的接口定义文件 IDL 里看到函数声明。作者主要是通过 IDA 反汇编找到的这些信息。)
OD: RPC - MS06040 & MS08067的更多相关文章
- 深入浅出MS06-040
入浅出MS06-040 时至今日,网上已有颇多MS06-040的文章,当中不乏精辟之作.与其相比,本文突显业余,技术上无法超越,徒逞口舌之快.本文适合有一定计算机基础,初步了解溢出攻击原理,略微了解逆 ...
- ms08-067漏洞的复现
MS08-067漏洞重现 (1):MS08-067远程溢出漏洞描述 MS08-067漏洞的全称为“Windows Server服务RPC请求缓冲区溢出漏洞”,如果用户在受影响的系统上收到特制的 RPC ...
- 使用Metaspoit攻击MS08-067
kali视频学习请看 http://www.cnblogs.com/lidong20179210/p/8909569.html 使用Metaspoit攻击MS08-067 MS08-067漏洞的全称为 ...
- 20169219 使用Metaspoit攻击MS08-067实验报告
MS08-067漏洞介绍 MS08-067漏洞的全称为"Windows Server服务RPC请求缓冲区溢出漏洞",如果用户在受影响的系统上收到特制的 RPC 请求,则该漏洞可能允 ...
- 20169201 使用Metaspoit攻击MS08-067实验
MS08-067漏洞介绍 MS08-067漏洞的全称为"Windows Server服务RPC请求缓冲区溢出漏洞",如果用户在受影响的系统上收到特制的 RPC 请求,则该漏洞可能允 ...
- FastSocket学习笔记~RPC的思想,面向对象的灵活
首先非常感谢这位来自新浪的老兄,它开发的这个FastSocket非常不错,先不说性能如何,单说它的使用方式和理念上就很让人赞口,从宏观上看,它更像是一种远程过程的调用RPC,即服务器公开一些命令,供客 ...
- alluxio源码解析-rpc调用概述(1)
alluxio中几种角色以及角色之间的rpc调用: 作为分布式架构的文件缓存系统,rpc调用必不可少 client作为客户端 master提供thrift rpc的服务,管理以下信息: block信息 ...
- 缓冲区溢出分析第08课:MS06-040漏洞研究——动态调试
前言 经过上次的分析,我们已经知道了MS06-040漏洞的本质,那么这次我们就通过编程实现漏洞的利用. 编写漏洞利用程序的框架 这里我使用的是VC++6.0进行编写,需要将包含有漏洞的netapi32 ...
- MS06-040漏洞研究(中)【转载】
课程简介 经过上次的分析,我们已经知道了MS06-040漏洞的本质,那么这次我们就通过编程实现漏洞的利用. 课程介绍 实验环境: 操作机: Windows XP 实验工具: Tools Path ID ...
随机推荐
- IOS中用模型取代字典的好处
使用字典的坏处 一般情况下,设置数据和取出数据都是用“字符串类型的key”,编写这些key时,编译器不会有任何友情提示,需要手敲 dict[@“name”]=@“Kevin”; NSString *n ...
- Linux企业级开发技术(2)——epoll企业级开发之epoll接口
epoll的接口非常简单,总共只有三个函数: 1.int epoll_create(intsize); 生成一个 Epoll 专用的文件描述符,size用来告诉内核这个监听的数目一共有多大.这个参数不 ...
- POJ 3694 Network(无向图求桥+重边处理+LCA)
题目大意: 给你一个无向图,然后再给你一个Q代表有Q次询问,每一次加一条边之后还有几座桥.在这里要对重边进行处理. 每次加入一条边之后,在这条搜索树上两个点的公共祖先都上所有点的桥都没了. 这里重边的 ...
- 【模拟】NCPC 2014 K Train passengers
题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1797 题目大意: 有N个车站,火车一共可以坐M个人,每个车站下车Ai,上车Bi个人,在 ...
- Delphi NativeXml读取中文乱码问题解决
NativeXml默认的字符类型为Utf8String,有时在读取中文时还是会出现乱码问题,在329版本中提供一种类型转换函数sdUtf8ToWide(),我们可以这样sdUtf8ToWide(AXm ...
- vim下缩进及高亮设置
1.配置文件的位置 在目录 /etc/ 下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效.而在每个用户的主目录下,都可以自己建立私有的配置文件,命名为:“.vimrc” ...
- [LeetCode] 141&142 Linked List Cycle I & II
Problem: Given a linked list, determine if it has a cycle in it. Follow up:Can you solve it without ...
- VS2015接口智能提示少了异常信息 怎么破~
问题:我想让VS2015提示的时候也显示关于“异常”的批注信息,亲们 如何破? 下图是VS3013的提示 下图是VS2015的提示 下图是接口注释
- Selenium webdriver 操作chrome 浏览器
Step1: 下载chromedriver. 下载路径: http://chromedriver.storage.googleapis.com/index.html 选择一个合适的下载即可.我下载的是 ...
- P - The Shortest Path in Nya Graph-hdu4725(双端队列+拆点)
题意:有N个点和N层..一层有X个点(0<=X<=N).两邻两层间有一条路花费C.还有M条小路在两个点之间.问从第一个点走到第N个点最短路是多少... 可以考虑在每一层增加一个点,这个点到 ...