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 ...
随机推荐
- 在Adobe Reader中保存PDF表单数据的方法
通常,Adobe Reader 用户填写表单后,是无法保存所填表单的副本的.但是,对于 Reader 8 和更高版本的用户,您可以扩展其权限,使他们可以完成此操作.如果您使用的是 Acrobat Pr ...
- javabean 简介
javabean其实包含多个方面的含义. Java语言开发的可重用组件 优点:1,代码简洁.2,HTML与Java分离,好维护.3,将常用程序写成可重用组件,避免重复. 特点:1,所有类放在同 ...
- IFrame中Session丢失的解决办法
1.打开IIS管理器 inetmgr2.选择被嵌入iframe源站点或者目录,右键点击打开属性框3.切换到HTTP头4.添加5.自定义HTTP头名: P3P6.自定义HTTP头值: CP=" ...
- avi文件格式详解【转】
AVI是音频视频交错(Audio Video Interleaved)的英文缩写,它是Microsoft公司开发的一种符合RIFF文件规范的数字音频与视频文件格式,原先用于Microsoft Vide ...
- BZOJ 1507 Editor
Description Input 输入文件editor.in的第一行是指令条数t,以下是需要执行的t个操作.其中: 为了使输入文件便于阅读,Insert操作的字符串中可能会插入一些回车符,请忽略掉它 ...
- activiti入门3排他网关,并行网管,包含网关,事件网关(转)
网关用来控制流程的流向 网关可以消费也可以生成token. 网关显示成菱形图形,内部有有一个小图标. 图标表示网关的类型. 基本分支 首先 利用 流程变量 写个带有分支的一个基本流程 流程图: 部署 ...
- struts2框架通过jQuery实现AJAX应用
众所周知,在web2.0时代,哪个web框架要是不跟AJAX沾点边,都不好意思说自己的框架有多么多么NB,当然struts也不例外,从 struts1开始到现在的struts2也都对AJAX有支持.A ...
- List、Set、 数组等转字符串
public class Test { public static void main(String[] args) { String str = ""; // list转字符串 ...
- ZOJ-2112-Dynamic Rankings(线段树套splay树)
题意: 完成两个操作: 1.询问一个区间里第k小的数: 2.修改数列中一个数的值. 分析: 线段树套平衡树,线段树中的每个节点都有一棵平衡树,维护线段树所记录的这个区间的元素.这样处理空间上是O(nl ...
- Linux下动态库的使用
1.生成动态库: gcc -fPIC -shared -o libdemo.so demo.c 考虑程式库major的升级会破坏兼容性:而minior的升级则可能不会,一般建议用以下方式来生成动态库. ...