对Windows 2000中wkssvc.dll中某个函数的分析
来源:互联网 发布:政治学 知乎 编辑:程序博客网 时间:2024/06/10 12:59
by envymask
文件名: wkssvc.dll
语言:简体中文
文件版本:5.0.2195.6862
最后修改时间:2003-10-23
RPC接口
UUID:6bffd098-a112-3610-9833-46c3f87e345a
Opnum::0x16
Function Name:NetrUnjoinDomain2
远程可以通过管道wkssvc调用,匿名帐号就行
说明:这是一个具有潜在漏洞的函数,为什么说具有潜在漏洞呢?因为我没有找到方法触发,这个过程要重现,首先要控制目标机器的DNS服务器A,添加某个域名的Service Type查询目录,然后指向一个受控制的IP B,把这个Service Type解析到B IP,然后在B机器上伪造一个LDAP服务器,负责返回查询结果,也就是返回后面那个DomainControllerName的关键。根据我的测试,我最大只能在LDAP数据包将Hostname字段增加到0xff,而且Windows在调用DsGetDcNameW后,只处理Hostname字段小于64字节的数据包,大于或等于64字节的不处理,这儿又卡住了。如果哪位牛Man能够构造这种Long Hostname的数据包,而且能让Windows处理,就能触发这个溢出。
由于是今年9月份的时候分析的这个dll,很多细节都不记得了,只能想起来这么些。
远程调用方法:
先建立Null Session的SMB连接,然后调用下面的API
NetJoinDomain(L"////目标IP",
L"某个域名",NULL,NULL,NULL,NETSETUP_DOMAIN_JOIN_IF_JOINED);
函数调用过程:
NetrUnjoinDomain2 -> sub_7672068E -> sub_7671EDB6 -> sub_76721D5B
Codz:
调用详细过程:
NetrUnjoinDomain2:
.text:7671CE58 push ebp
.text:7671CE59 mov ebp, esp
.text:7671CE5B push ecx
.text:7671CE5C push ecx
.text:7671CE5D push esi
.text:7671CE5E push edi
.text:7671CE5F xor edi, edi
.text:7671CE61 xor esi, esi
.text:7671CE63 cmp [ebp+arg_8], edi ; arg_8不能为0
.text:7671CE66 mov [ebp+var_4], edi
.text:7671CE69 mov [ebp+var_8], edi
.text:7671CE6C jnz short loc_7671CE71 ; 必跳
.text:7671CE6E push 57h
.text:7671CE70 pop esi
.text:7671CE71
.text:7671CE71 loc_7671CE71: ; CODE XREF: sub_7671CE58+14j
.text:7671CE71 cmp esi, edi
.text:7671CE73 jnz short loc_7671CECC ; 不跳
.text:7671CE75 lea eax, [ebp+var_8]
.text:7671CE78 push eax
.text:7671CE79 push [ebp+arg_14]
.text:7671CE7C push [ebp+arg_0]
.text:7671CE7F call sub_7671CD18 ; 返回值要为0
.text:7671CE84 mov esi, eax
.text:7671CE86 cmp esi, edi
.text:7671CE88 jnz short loc_7671CECC ; 不跳
.text:7671CE8A lea eax, [ebp+var_4]
.text:7671CE8D push eax
.text:7671CE8E call sub_7671DFA6 ; 调用GetComputerName
.text:7671CE93 mov esi, eax ; 返回值要为0
.text:7671CE95 cmp esi, edi
.text:7671CE97 jnz short loc_7671CECC ; 不跳
.text:7671CE99 mov eax, [ebp+var_4]
.text:7671CE9C cmp esi, edi
.text:7671CE9E mov [ebp+arg_4], eax
.text:7671CEA1 jnz short loc_7671CECC ; 不跳
.text:7671CEA3 call sub_76718EA7 ; 返回值要为0
.text:7671CEA8 mov esi, eax
.text:7671CEAA cmp esi, edi ;
.text:7671CEAC jnz short loc_7671CECC ; 不跳
.text:7671CEAE push [ebp+arg_18]
.text:7671CEB1 push [ebp+var_8]
.text:7671CEB4 push [ebp+arg_10]
.text:7671CEB7 push [ebp+arg_C]
.text:7671CEBA push [ebp+arg_8]
.text:7671CEBD push [ebp+arg_4]
.text:7671CEC0 call sub_7672068E ; 进入才能溢出
...
...
...
sub_7672068E:
.text:7672068E push ebp
.text:7672068F mov ebp, esp
.text:76720691 push ecx
.text:76720692 push ebx
.text:76720693 push esi
.text:76720694 xor esi, esi
.text:76720696 and [ebp+var_4], esi
.text:76720699 call sub_76723855
.text:7672069E push offset aNetpdodomainjo ; "NetpDoDomainJoin/n"
.text:767206A3 call sub_767238B6
.text:767206A8 cmp [ebp+arg_4], esi
.text:767206AB pop ecx
.text:767206AC jnz short loc_767206B1 ; 必跳
.text:767206AE push 57h
.text:767206B0 pop esi
.text:767206B1
.text:767206B1 loc_767206B1: ; CODE XREF: sub_7672068E+1Ej
.text:767206B1 test esi, esi
.text:767206B3 jnz short loc_7672072F ; 不跳
.text:767206B5 cmp [ebp+arg_0], esi
.text:767206B8 jnz short loc_767206CF
.text:767206BA lea eax, [ebp+var_4]
.text:767206BD push eax
.text:767206BE call sub_767207F7 ; 返回值要为0
.text:767206C3 mov esi, eax
.text:767206C5 test esi, esi
.text:767206C7 jnz short loc_7672072F ; 不跳
.text:767206C9 mov eax, [ebp+var_4]
.text:767206CC mov [ebp+arg_0], eax
.text:767206CF
.text:767206CF loc_767206CF: ; CODE XREF: sub_7672068E+2Aj
.text:767206CF test esi, esi
.text:767206D1 jnz short loc_7672072F ; 不跳
.text:767206D3 mov ebx, [ebp+arg_14] ; arg_14要为1
.text:767206D6 push [ebp+arg_0]
.text:767206D9 test bl, 1 ; bl要为1
.text:767206DC jz short loc_76720717 ; 不跳
.text:767206DE call sub_7671EC9B
.text:767206E3 mov esi, eax
.text:767206E5 cmp esi, 0A83h
.text:767206EB jnz short loc_767206FC
.text:767206ED test ebx, 80000000h
.text:767206F3 jnz short loc_767206FA
.text:767206F5 test bl, 20h
.text:767206F8 jz short loc_767206FC
.text:767206FA
.text:767206FA loc_767206FA: ; CODE XREF: sub_7672068E+65j
.text:767206FA xor esi, esi
.text:767206FC
.text:767206FC loc_767206FC: ; CODE XREF: sub_7672068E+5Dj
.text:767206FC ; sub_7672068E+6Aj
.text:767206FC test esi, esi
.text:767206FE jnz short loc_7672072F ; 不跳
.text:76720700 push ebx
.text:76720701 push [ebp+arg_10]
.text:76720704 push [ebp+arg_C]
.text:76720707 push [ebp+arg_8]
.text:7672070A push [ebp+arg_4]
.text:7672070D push [ebp+arg_0]
.text:76720710 call sub_7671EDB6 ; 进入才能溢出
...
...
...
sub_7671EDB6:
...
...
...
.text:7671EEF7 lea eax, [ebp+var_20]
.text:7671EEFA push eax
.text:7671EEFB push [ebp+var_C]
.text:7671EEFE call ds:RtlRunDecodeUnicodeString
.text:7671EF04 push 3
.text:7671EF06 push [ebp+var_1C]
.text:7671EF09 push [ebp+arg_C]
.text:7671EF0C push [ebp+var_28]
.text:7671EF0F push [ebp+arg_0]
.text:7671EF12 call sub_767202DC ; 返回值要是2554h或0
.text:7671EF17 mov edi, eax
.text:7671EF19 lea eax, [ebp+var_20]
.text:7671EF1C push eax
.text:7671EF1D lea eax, [ebp+var_C]
.text:7671EF20 push eax
.text:7671EF21 call ds:RtlRunEncodeUnicodeString
.text:7671EF27 cmp edi, esi ; ESI = 2554h
.text:7671EF29 jnz short loc_7671EF2D ; 此处不跳
.text:7671EF2B xor edi, edi
.text:7671EF2D
.text:7671EF2D loc_7671EF2D: ; CODE XREF: sub_7671EDB6+173j
.text:7671EF2D cmp edi, ebx ; ebx = 0
.text:7671EF2F jnz loc_7671F677 ; 此处不跳,上面edi 应该为 0
.text:7671EF35 cmp [ebp+var_38], ebx
.text:7671EF38 jnz short loc_7671EF59 ; 此处跳
.text:7671EF3A lea eax, [ebp+var_8]
.text:7671EF3D push eax
.text:7671EF3E lea eax, [ebp+var_4]
.text:7671EF41 push eax
.text:7671EF42 lea eax, [ebp+var_48]
.text:7671EF45 push eax
.text:7671EF46 push 1020h
.text:7671EF4B push [ebp+arg_0]
.text:7671EF4E push [ebp+var_28]
.text:7671EF51 push ebx
.text:7671EF52 call sub_7671FEEA ; 调用DsGetDcNameW或DsGetDcNameWithAccountW函数
.text:7671EF52 ; 并将返回的DomainControllerName Copy到NetApiBufferAllocate
.text:7671EF52 ; 申请的内存,再把内存地址赋值给var_4
.text:7671EF57 mov edi, eax ; 返回值要为0
.text:7671EF59
.text:7671EF59 loc_7671EF59: ; CODE XREF: sub_7671EDB6+182j
.text:7671EF59 cmp edi, ebx ; ebx = 0
.text:7671EF5B jnz loc_7671F677 ; 此处不跳
.text:7671EF61 lea eax, [ebp+var_20]
.text:7671EF64 push eax
.text:7671EF65 push [ebp+var_C]
.text:7671EF68 call ds:RtlRunDecodeUnicodeString
.text:7671EF6E push [ebp+var_44]
.text:7671EF71 push [ebp+var_1C]
.text:7671EF74 push [ebp+arg_C]
.text:7671EF77 push [ebp+var_4] ; DomainControllerName
.text:7671EF7A call sub_76721D5B ; 进入有溢出函数
sub_76721D5B:
.text:76721D5B push ebp
.text:76721D5C mov ebp, esp
.text:76721D5E sub esp, 2D0h
.text:76721D64 push ebx
.text:76721D65 push esi
.text:76721D66 push edi
.text:76721D67 mov edi, [ebp+arg_0] ; arg_0超长就溢出
.text:76721D6A xor esi, esi
.text:76721D6C xor ebx, ebx
.text:76721D6E cmp word ptr [edi], 5Ch
.text:76721D72 lea eax, [ebp+var_2D0]
.text:76721D78 mov [ebp+var_4], esi
.text:76721D7B jz short loc_76721D97
.text:76721D7D lea eax, [ebp+var_2D0]
.text:76721D83 push offset asc_76711A14 ; wchar_t *
.text:76721D88 push eax ; wchar_t *
.text:76721D89 call ds:wcscpy
.text:76721D8F pop ecx
.text:76721D90 lea eax, [ebp+var_2CC]
.text:76721D96 pop ecx
.text:76721D97
.text:76721D97 loc_76721D97: ; CODE XREF: sub_76721D5B+20j
.text:76721D97 test [ebp+arg_C], 20h
.text:76721D9B jz short loc_76721DA0 ; arg_0
.text:76721D9D push 2
.text:76721D9F pop ebx
.text:76721DA0
.text:76721DA0 loc_76721DA0: ; CODE XREF: sub_76721D5B+40j
.text:76721DA0 push edi ; arg_0
.text:76721DA1 push offset aWsIpc ; "%ws/IPC$"
.text:76721DA6 push eax ; 局部变量
.text:76721DA7 call ds:swprintf ; 溢出
- 对Windows 2000中wkssvc.dll中某个函数的分析
- WINDOWS中恶意的DLL
- windows中线程及dll函数调用
- 如何快速设置Windows XP系统中某个文件夹对某用户的访问权限
- demo集合第1弹:加载windows dll库,并使用dll中函数的方法
- 替换字符串中某个字符的函数
- PB中对INI文件读写的补充函数:删除指定的节或者指定节中某个项
- Windows的系统中DLL文件详解
- win32 的DLL中创建windows窗口
- 【Windows】DLL中获取自身的句柄
- Windows中,使用DLL的优点
- 生成dll文件以及python对DLL中函数的调用(参数类型以及返回值)
- 应用程序调用dll组件,及dll组件之间的关系,dll中类及函数的导入导出;dll的导出方式和链接方式分析(一)
- solaris中有类似windows的DLL有关的函数吗?
- windows下查看.dll文件和Linux查看.so文件中函数的实际名称
- 对Oracle数据库中某个用户数据的复制
- 设置用户对数据库中某个表的查看权限
- 对jsonarray中某个对象的某一个字段进行排序
- ASP.NET保持用户状态的九种选择
- HTTPS中间人攻击
- 中国程序员如何表达感情
- VC中使用GIF格式图片美化界面
- vc计算磁盘大小的方法
- 对Windows 2000中wkssvc.dll中某个函数的分析
- AgileChina 2007年度首次联合聚会活动
- 使用ant 的exec时不能随意省略可执行文件的扩展名
- QQ、MSN签名精选
- 她结婚了?
- SAP-MM模块学习
- VC++ 2005编译出程序在XP下执行出错的解决方法
- 终于可以在emacs里面用五笔输入中文了
- spring的功能特点