扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
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和管理员组才有权限写。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者