分享
 
 
 

WindowsWorkstation服务远程漏洞分析

王朝system·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

微软最近为了减轻系统管理员的工作负担,把发布安全公告的周期从不定期改为定期发布,这无疑给系统管理员安装补丁提供了极大的方便,可以一起安装几个补丁。而不用为每个补丁都折腾一番。在2003年11月11日,微软又一起发布了3个安全公告,其中漏洞危害等级最高的当属MSO3-049:WindowsWorkstation服务远程溢出漏洞了。以下我们就这个漏洞的一些具体信息展开探讨。

关于这个漏洞的安全公告可以从http://www.microsoft.com/technet/security/bulletin/MS03-049.asp看到。但是按照惯例,微软网站上的安全公告只有一些关于漏洞的简单描述、受影响平台、补丁下载地址等,不会有详细的技术信息,这点信息对系统管理员人员来说己经足够了,但对想深入了解一些技术细节的读者来说是远远不够的。那么,一般情况下我们该从何处去了解漏洞的详细技术信息呢?一般有3种途径:

1、在安全公告的后面,一般会有"感谢某某人/某某公司/某某组织发现开向微软提交漏洞"这样的信息,然后我们就可以尝试去漏洞发现者的网站上找找看有没有关于漏洞的详细技术信息。

2、关注一些黑客/安全论坛、邮件列表等等,一般情况下在那些地方都会就漏洞展开一些深入的探讨。

3、自己独立研究。假如上述途径不行,那就只有靠自己了。

本文提到的漏洞是由世界著名的网络安全公司EEYE Digital Security的安全研究人员发现的,在他们公司的网站上也公布了关于此漏洞的详细技术信息,我们可以从http//www.eeye.com/html/Research/Advisories/AD2003111l.html获得这些信息(英文)。

Microsoft DCE/RPC服务可以提供网络管理功能,这些功能提供管理用户账户和网络资的源管理,部分网络管理功能在Windows目录下的debug子目录会生成调试日志文件。

微软Windows200O和WindowsXP中的Workstation服务在处理日志记录时缺少充分的边界缓冲区检查,远程攻击者可以利用这个漏洞提供超长参数触发缓冲区溢出,以SYSTEM权限(Workstation服务默认以SYSTEM权限运行的)在系统上执行任意指令。

日志功能中使用vsphntf()在日志文件中生成字符串,日志文件名为NetSetup.LOG,它保存在%SYSTEMROOT%\debug目录中。这个记录函数有部分处理Workstation服务命令的函数调用,如NetValidateName、NetJoinDomain等。在NetValidateName()这个函数中,computer name作为第二个参数最终记录在日志文件中。

例如,我们使用如下形式调用NetValidateName()APL

NetValidateName(L"\\\\192.168.0.100","AAAAAAAA",NULL,NULL,0);

那么,我们可以在远程主机中产生如下记录条目:

08/13 13:01:01 NetpValidateName:checking to see if''is valid as type 0 name 08/13 13:01:01 NetpValidateName:''is not a valid NetBIOS\\AAAAAAAA name:0x57

如果我们指定超长字符串作为NetVaUdateName()API的第二个参数,如果调试文件可写就可以在特定主机上发生缓冲区溢出。

一般如果是NTFS文件系统,在Windows目录中的debug目录不允许所有人可写,这表示不能使用NULL会话来生成日志。因为WsImpersonateClien()API在打开日志文件前调用,如果连接客户端没有有效的权限来写日志文件,那么CreateFUe()就会失败,vsphntf()就不会被执行,因此此漏洞在FAT32系统和%SYSTEMROOT%\debug目录可写的情况下可被利用。

但是,在WindowsXP上实现了部分扩展的RPC函数,这些函数在调用WsImpersonateClient()前打开日志文件,不过这些RPC函数没有提供文档化说明,但可以通过观察WKSSVC.DLL中的函数表得到。这些扩展命令的RPC号开始于OxlB,如OXlB调用NetpManageComputers(),但在打开日志文件前不调用WsImpersonateClient()。

NetpManageComputers()的使用没有被公开化,但是我们可以在LMJoin.h中找到NetAddAlternateComputerName()API的原型定义,这个API从NETAPI32.DLL导出,这个API也一样没有文档化。

我们可以使用如下形式调用这个RPC函数

(0x1B):

NetAddAlternateComputerName(L"\\\\192.168.0.200",LONG_UNICODE_STRING,0,0,0);

使用上述方法,我们不需要任何特殊权限(只需要有能建立IPCNULLSession的权限),便可使得远程主机把第二个参数写到它的日志文件中去,如定义超长Unicode字符串作为第二个参数("AltemateName"),在第一个参数指定的的远程系统就会由于缓冲区溢出而崩溃。Unicode字符串long_unicode_string会在日志记录函数调用前被转换为ASCII字符串。

从以上的详细技术信息中,我们可以得知有两种攻击方法。

1、调用NetValidateName函数,提供超长参数,发送至目标主机.

适用环境 Windows200O,WindowsXP。

条件限制 目标文件系统为FAT32,或WINNT目录下的DEBUG任何人都具有写权限。

现在很少有Windows200O/XP系统使用FAT32作为文件系统了吧?而且默认情况下,WINNT目录下的DEBUG目录只有管理员是具有写权限的,所以利用这种攻击方法没有实际意义。

当我们调用NetVaUdateName函数给目标主机发送一段超长数据后(假如目标系统满足上述条件限制),系统处理流程如下(以Qindows200Osever英文版为例):

wkssvc!NetpValidateName

|_wkssvc!NetSetuppOpenLog

|_wkssvc!NetpLogPrintHelper

|_wkssvc!NetpLogPrintRoutingeV

|_wkssvc!NetpDebugDumpRoutine

2、调用NetAddAlternateComputerName函数,提供超长参数。发送至目标主机。

适用环境 WindowsXP。

条件限制只要能跟目标WindowsXP系统建立IPCNULLSession就可以进行攻击。

当我们调用NetAddAltenateComputerName函数给目标主机发送一段超长数据后(假如目标系统满足上述条件限制),系统处理流程如下:

wkssvc!NetrAddAltrnateComputerName

|_wkssvc!NetpManageAltComputerName

|_wkssvc!NetSetuppOpenLog

|_wkssvc!NetpLogPrintHelper

|_wkssvc!NetpLogPrintRoutineVEx

|_skssvc!NetpDebugDumpRoutine

|_MSVCRT!vsprintf

由上述内容我们可以看到,不管是哪种攻击方法,不管是攻击Windows2000还是WindowsXP平台,目标系统处理的流程都差不多,出现漏洞的都是wkssvc.dll中一个函数名为NetpDebugDumpRoutine的函数。

OK,我们现在就来分析一下出现漏洞的那个函数的汇编代码,看看漏洞是怎么产生的!

以下汇编代码(由最强悍的反汇编软件IDA分析所得)分析基于WindowsXP简体中文专业版。没有安装任何补丁,wkssvc.dll的版本为5.1.2600.0(所以你在不同版本下看到的汇编代码可能稍有不同)。

1、通过NetValidateName函数发起攻击

如前所述。攻击Windows200O和WindowsXP平台均可以通过调用NetValidateName这个函数来实现。但是,目标系统在处理这个函数发送的数据包过程中,在调用有漏洞的函数wkssvc!NetpDebugDumpRoutine将超长参数记录到日志文件触发缓冲区溢出之前,目标系统会先调用WsImpersonateClient函数,模拟客户端的权限,以客户端提供的有效的访问令牌的权限去打开日志文件。也就是说,假如你跟目标系统建立的只是IPCNULLSesSon(空会话),那么目标系统是以空会话的权限去打开日志文件的。这样我们的问题就来了!当文件系统是NTFS的情况下,Windows200O和WindowsXP下的日志文件默认只有SYSTEM和管理员组才有权限写。所以,目标系统以空会话的权限去打开日志文件会失败,那么也就无法触发后面的缓冲区溢出了!所以,只有当目标系统是FAT格式文件系统时(因为FAT文件系统没有权限一说),或日志文件任何人具有可写权限时(没有管理员会这样设置吧?),这种方法才能攻击成功!

2、通过NetAddAltemateComputerName函数发起攻击

这个函数只在WindowsXP系统中的neta过32.dll中实现了,在Windows2000中没有实现这个函数,所以不能调用这个函数对Windows2000发起攻击,只能在WindowsXP平台下,对WindowsXP平台发起攻击。利用这个函数,只要能跟目标WindowsXP系统建立空会话就可以了。

当然,我们也可以通过嗅探NetAddAlternateComputerName函数所生成的数据包,分析数据包格式,自己重组这个RPC数据包,这样就可以在别的平台上对Windnows XP发起攻击了

3、字符转换

从前面的汇编代码分析中我们可以看到,攻击测试时发送的超长字符串会被转换成什么字符,直接取决于vsprintf函数的第二个参数(格式化串)。

1)NetpValidateName

调用NetpVaUdateName函数发送超长字符串到目标系统时,目标系统会两次调用vsprintf函数把这些字符串保存在堆栈中。

第一次的格式化串为:

NetpValidateName:checking to see if '%ws'is valid as type%d name

第二次的格式化串为:

NetpValidateName:,'%OWS',is not a validNetBIOS%sname:ox%1x

对于格式化串%ws。本质上它就是一个WideChar到MultiByte的转换过程,即是说把我们源字符串当作UNICODE串,然后把它转换成ANSI字符。在不同的平台下,对于%s格式,vsprintf的处理过程还有些差别,在下一部分我们再详细阐述。

虽然第一次和第二次的格式化串中都有%ws,但在第二次的格式化串中还有一个%s,所以,利用这个攻击测试时发送的超长字符串就不会被改变,即是说shellcode不会被转换成其他字符。

所以,利用NetAddAlternateComputerName函数来发起攻击是相对比较容易的!

2)NetAddAlternateComputerName

调用NetAddAltemateComDuterName函数发送超长字符串到目标系统时,目标系统只有一次调用vsprintf的处理。格式化串为

AlternateName=%ws

在Wide Char到MultiByte的转换过程中,假如转换后的MultiByte不是合法的字符(合不合法取决于系统默认的CODEPAGE),那么就会被截断或替换。事实上,在不同

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有