首页
社区
课程
招聘
[原创]cve-2011-1984 wins提权漏洞分析
发表于: 2011-9-26 14:49 15444

[原创]cve-2011-1984 wins提权漏洞分析

2011-9-26 14:49
15444

cve-2011-1984 wins提权漏洞分析
冰雪风谷[NNU]
email: bingxuefenggu@126.com

1漏洞介绍:

这是一个关于WINS的漏洞,当用户收到一个特殊的破坏的WINS的数据包时,将有可能提权,
攻击者必须登陆到机器上,或者有权限登陆到机器上去利用这个漏洞。
歧形的数据包将会被ECommEndDlg这个有问题的函数处理从而进行攻击。

2相关版本:
受影响的版本
   . Windows Server 2003 SP0, SP1 and SP2.
   . Windows Server 2003 x64 Edition SP2.
   . Windows Server 2003 SP2 for Itanium-based Systems.
   . Windows Server 2008 SP2.
   . Windows Server 2008 x64 Edition SP2.
   . Windows Server 2008 R2 for x64-based Systems.
   . Other versions and platforms are probably affected too, but they
were no checked.
不受影响的版本:
   . Windows XP SP3.
   . Windows XP Professional x64 Edition SP2.
   . Windows Vista SP2.
   . Windows Vista x64 Edition SP2.
   . Windows Server 2008 for Itanium-based Systems SP2.
   . Windows 7.
   . Windows 7 for x64-based Systems.
   . Windows Server 2008 R2 for Itanium-based systems.
3漏洞调试环境的安装

搭建windows 2003 sp2虚拟机,并按参考文档安装wins服务。
按参考文档下载poc,针对老版本的wins,需要对poc进行一些相关的修改。
由于老版本的wins中没有对数据进行加密,所以应该把poc中发送udp数据加密的地方去掉。
poc的使用
python wins_poc.py wins_tcp_dynamic_port wins_udp_dynamic_port writeable_address(hex)
其中wins_tcp_dynamic_port和wins_udp_dynamic_port通过如下命令获得

C:\Python25>netstat -ban
Active Connections
  Proto  Local Address          Foreign Address        State           PID
  TCP    0.0.0.0:42             0.0.0.0:0              LISTENING       1312
  [wins.exe]
  TCP    0.0.0.0:1027           0.0.0.0:0              LISTENING       1312
  [wins.exe]
  UDP    0.0.0.0:42             *:*                                    1312
  [wins.exe]
  UDP    127.0.0.1:1026         *:*                                    1312
  [wins.exe]
如上,我们发现wins_tcp_dynamic_port为1027,wins_udp_dynamic_port为1026.
后面writeable_address的地址,先设为0x4b5f5f5f.

4漏洞调试

我们用windbg附加到wins.exe程序上后,按上述方式执行wins_poc.py

0:020> g
(4d0.6bc): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
eax=00000064 ebx=42424242 ecx=7c823adb edx=42424242 esi=00001000 edi=424242a5
eip=7c823ab3 esp=0422f548 ebp=0422f574 iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00010246
kernel32!IsBadWritePtr+0x31:
7c823ab3 8a02            mov     al,byte ptr [edx]          ds:0023:42424242=??
0:015> kvn
 # ChildEBP RetAddr  Args to Child              
00 0422f574 0101483a 42424242 00000064 0422fa78 kernel32!IsBadWritePtr+0x31 (FPO: [SEH])
01 0422f5a8 01015ab9 0422fa78 0422f5c4 00000000 wins!ChkNtfSock+0xac (FPO: [2,6,4])
02 0422ffb8 7c824829 00000000 00000000 00000000 wins!MonTcp+0x1db (FPO: [SEH])
03 0422ffec 00000000 010158de 00000000 00000000 kernel32!BaseThreadStart+0x34 (FPO: [SEH])

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 6
支持
分享
最新回复 (17)
雪    币: 267
活跃值: (24)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
2
占楼出租
2011-9-26 14:52
0
雪    币: 146
活跃值: (182)
能力值: ( LV13,RANK:220 )
在线值:
发帖
回帖
粉丝
3
顶冰雪风谷 哈 分析很好哈
2011-9-26 14:53
0
雪    币: 180
活跃值: (76)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
分析得不错 不过现在用wins服务器并不多 很多都是域了 所以看能不能在特定环境下用到:)
2011-9-26 15:11
0
雪    币: 500
活跃值: (200)
能力值: ( LV13,RANK:270 )
在线值:
发帖
回帖
粉丝
5
谢谢支持。哈哈。
2011-9-26 17:42
0
雪    币: 500
活跃值: (200)
能力值: ( LV13,RANK:270 )
在线值:
发帖
回帖
粉丝
6
这个漏洞的利用太难了。
关键是通过分析,学习和掌握poc的一些技巧,和漏洞的本质。
2011-9-26 17:45
0
雪    币: 1015
活跃值: (235)
能力值: ( LV12,RANK:440 )
在线值:
发帖
回帖
粉丝
7
支持楼主一个,楼主太强了
2011-9-27 08:14
0
雪    币: 1685
活跃值: (699)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
漏洞分析都要支持。
2011-9-27 08:16
0
雪    币: 27
活跃值: (127)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
9
漏洞分析的文章都要支持加学习
2011-9-27 08:24
0
雪    币: 433
活跃值: (1870)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
10
顶冰雪的大作……
2011-9-27 08:43
0
雪    币: 95
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
这几天我也看了这个漏洞了 就是能给指定地址的值加1  楼主的这段话不是很明白:
恰好是某个保存着函数返回地址的栈地址或者是某个函数指针,那么通过多次触发漏洞。
多次对该地址内存做dec(或者inc),那么就可以将函数的返回地址或者函数指针中保存的函数地址
改写为某个值(甚至为0),那么随后函数返回或者通过函数指针调用函数时,就会执行攻击者布置在
内存中的shellcode,从而以SYSTEM权限来执行shellcode.
shellcode可以使用heapspray的方式来布局。

如果想找那个 特定的writeable地址 应该满足什么条件才能利用呢
2011-9-27 10:34
0
雪    币: 234
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
嘿嘿 帮顶帮顶
2011-9-27 10:41
0
雪    币: 230
活跃值: (149)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
2003下,wins组件是强制启用DEP的,wins_poc.py 用heapspary得到的堆都是RW权限,没有E权限。且这个漏洞仅在特定版本的wins上触发率高些(50%),其他版本触发率低的可怜。
总的来说,这个exp的价值非常低。
2011-9-27 11:04
0
雪    币: 23
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
标记一下回去看
2011-9-27 11:28
0
雪    币: 220
活跃值: (721)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
我还以为有利用代码呢?
2011-9-27 13:44
0
雪    币: 47
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
利用价值不高但是可以用来分析学习嘛
2011-9-27 15:57
0
雪    币: 473
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
学习学习学习,真大牛啊
2011-9-28 19:38
0
雪    币: 310
活跃值: (159)
能力值: ( LV12,RANK:200 )
在线值:
发帖
回帖
粉丝
18
你的win2003 有 netstat -an 命令?
2011-9-29 09:25
0
游客
登录 | 注册 方可回帖
返回
//