CVE:CVE-2003-0812
CNNVD:CNNVD-200312-058
Microsoft DCE/RPC服务可以提供网络管理功能，这些功能提供管理用户帐户和网络资源管理的功能。部分网络管理功能在Windows目录下的"debug"子目录会生成调试日志文件。
Microsoft Workstation服务在处理日志记录时缺少充分的边界缓冲区检查，远程攻击者可以利用这个漏洞提供超长参数触发缓冲区溢出，以SYSTEM权限在系统上执行任意指令。
日志功能中使用vsprintf()在日志文件中生成字符串，日志文件名为"NetSetup.LOG"，其保存在Windows "debug"目录中。
这个记录函数有部分处理Workstation服务命令的函数调用，如"NetValidateName"， "NetJoinDomain"等，在这NetValidateName()中，"computer name"作为第二个参数最终记录在日志文件中。
如我们使用NetValidateName() API：
   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
如果我们指定超长字符串作为NetValidateName() API的第二个参数，如果调试文件可写就可以在特定主机上发生缓冲区溢出。
一般如果是NTFS文件系统，在Windows目录中的"debug"目录不允许所有人可写，这表示不能使用NULL会话来生成日志。WsImpersonateClient() API在打开日志文件前调用，如果连接客户端没有有效的权限来写日志文件，那么CreateFile()就会失败，vsprintf()就不会被执行，因此此漏洞在FAT32系统和"%SYSTEMROOT%\debug"目录可写的情况下可被利用。
但是部分扩展RPC函数实现在Windows XP上在调用WsImpersonateClient()前打开日志文件，不过这些RPC函数没有提供文档化说明，不过可以观察在WKSSVC.DLL中的函数表观察到。这些扩展命令的RPC号开始于0x1B，如0x1B调用NetpManageComputers()，但在打开日志文件前不调用WsImpersonateClient()。
NetpManageComputers()的使用没有被公开化，但是我们可以在"LMJoin.h"中找到NetAddAlternateComputerName() API的原型定义，这个API从NETAPI32.DLL导出，这个API也一样没有文档化。我们可以执行这个RPC函数(0x1B)使用如下API产生包：
   NetAddAlternateComputerName(L"\\\\192.168.0.200"，long_unicode_string，NULL，NULL，0);
我们不需要特殊权限在远程主机上写第二个产生到日志文件中，如定义超长Unicode字符串作为第二个参数("AlternateName")，在第一个参数定义的远程系统就会由于缓冲区溢出而崩溃。Unicode字符串"long_unicode_string"会在日志记录函数调用前被转换为ASCII字符串。
solution:Upgrade microsoft windows_2000 to a higher version than *,*:sp1,*:sp2,*:sp3,*:sp4,and avoid the version *:sp1,*:sp2,*:sp3,*:sp4; Upgrade microsoft windows_xp to a higher version than *,*:gold,*:sp1,and avoid the version *:gold,*:sp1