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 ...
随机推荐
- EasyUI篇のDataGrid
HTML: <table id="dg"></table> 或者 <div id="dg"></div> JS: ...
- 关于asp.net core部署到iis中出现 HTTP Error 502.5 - Process Failure的问题
环境是windows Server2008R2 出现这个问题搞了一下午都没解决,最后又加班才算搞定,由于英文不太好,官方的文档看了好几遍,也按照文档做的,但还是出现这个问题,百度google搜了很多解 ...
- Node.js事件发射器
在Node很多对象发出事件,例如net.Server每个同级连接到它,一个fs.readStream发出打开文件事件时,每次都发出一个事件. 它发出事件的所有对象都是events.EventEmitt ...
- Kaggle Bike Sharing Demand Prediction – How I got in top 5 percentile of participants?
Kaggle Bike Sharing Demand Prediction – How I got in top 5 percentile of participants? Introduction ...
- Maven的常用命令
转载:http://www.cnblogs.com/phoebus0501/archive/2011/05/10/2042511.html Maven库: http://repo2.maven.org ...
- 【POJ】3283 Card Hands
字典树. #include <iostream> #include <cstdio> #include <cstring> #include <string& ...
- C# dll玩注入!.net运行时库内置!?
Contents Introduction Back To Fundamentals Load The CLR Fundamentals Advanced DLL Injection Fundamen ...
- Codelab for Android Design Support Library used in I/O Rewind Bangkok session
At the moment I believe that there is no any Android Developer who doesn't know about Material Desig ...
- 《A First Course in Probability》-chaper5-连续型随机变量-均匀随机变量
在连续随机变量这部分,有一种特殊的随机变量X,对于X所有可能取值,P(X)都相等,我们称其为均匀随机变量. 基于均匀随机变量的定义,我们容易看到,其密度函数f(x)必然是一条平行于x轴的直线,因为这样 ...
- zoj 1760 floyd构图+Dinic最大流
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1760 #include <cstdio> #includ ...