利用unicode和net dde漏洞夺取系统管理员权限? by coolweis
by coolweis
前言
本文的目的不是要教你去黑人家的机器,只是给大家一个思路。请不要做违反法律的事情。任何利用本方法破坏别人机器等事情本人及本人所在的公司均不负责。
unicode漏洞可谓尽人皆知(偏偏许多系统管理员不知道,呵呵),但是unicode只能拿到guest权限,虽然还有其他办法获得管理员权限,但是比较复杂。
2001年2月5日,atstake上面公布了一个windows2000的net dde消息权限提升漏洞。利用这个漏洞可以获得管理员权限,完全控制机器。下面是nsfocus上面的关于这个漏洞的详细描述。
发布日期: 2001-2-7
更新日期: 2001-2-7
受影响的系统:
Microsoft Windows 2000 Professional
Microsoft Windows 2000 Server
Microsoft Windows 2000 Advanced Server
描述:
网络动态数据交换(Network Dynamic Data Exchange)是一种在不同的Windows机器上的应用程序之间动态共享数据的技术。这种共享是通过名为受信任共享(trusted shares)的通信通道来完成的,受信任共享由网络DDE代理服务来管理。本地机器上的进程可以向网络DDE代理发出请求,包括指定针对某个特定的受信任共享应该运行什么应用程序。但是由于
网络DDE代理运行在本地系统用户的安全上下文中并在此安全上下文中处理所有请求,因此攻击者就有机会让网络DDE代理在本地
系统用户的安全上下文中执行其指定的代码,从而提升权限并完全控制本地机器。
细节描述如下:
Network DDE DSDM(DDE Share Database Manager)服务负责维护所有活动的网络DDE共享的一个
列表并管理NetDDE连接。当该服务启动时,在当前登录用户的桌面上将创建一个隐藏的IPC窗口,用来与打开了DDE特性的应用程序进行
通信。该窗口所处理的消息及其格式未在正式
文档中描述。
窗口的名字是“NetDDE Agent”,类名是“NDDEAgent”。由于窗口是由WINLOGON创建的,窗口过程将运行在WINLOGON的进程空间中,它以SYSTEM的权限来处理消息。该窗口所处理的消息之一是“WM_COPYDATA”消息,DDE用该消息将一块内存从一个进程传递给另一个进程。绝大多数窗口间通信通常是由PostMessage( )来完成的,但WM_COPYDATA消息却是由SendMessa
ge( )函数来发
送的,并由底层的消息子系统(CSRSS)作为一种特殊情况进行处理。
通过该消息发送给隐藏窗口的结构具有如下格式:
4 字节 - E1 DD E1 DD (魔数: 0xDDE1DDE1)
4 字节 - 01 00 00 00 (未知: 0x00000001)
4 字节 - 01 00 00 00 (未知: 0x00000001)
8 字节 - 05 00 00 09
00 00 00 01 (DDE Share Mod Id)
4 bytes - CC CC CC CC (未知: 未使用?)
ASCIIZ - "SHARENAME$" (以NULL结尾的串: DDE受信任的共享名)
ASCIIZ - "cmd.exe" (以NUL
L结尾的串: DDE服务器启动命令)
当上述缓冲区传递给窗口过程时,它将首先检查3个魔数(即前12个字节)的值,如果与上述的值不同,则消息处理过程将返回一个错误。否则就取出两个ASCIIZ串并将其转换成Unicode串,然后检查共享名以确保它存在并且是一个受信任的共享。
由于默认情况下在系统中存在几个受信任共享,因此可以对其进行穷举,对每个共享名都尝试运行命令直到找到一个受信任的共享。“DDE Share Mod ID”将和上述结构中的对应的数进行比较,如果相等则将在WINLOGON进程的上下文中执行上述第二个ASCIIZ串所指定的命令,因此将创建一个继承了SYSTEM进程令牌的进程。“DDE Share Mod Id”本应是一个相对随机的8字节数,但实际上却一直是个常数0x0100000009000005。
<* 来源:DilDog (dildog@atstake)
Microsoft Security Bulletin (MS01-007)
*>
从上面的描述可以看出,我们可以利用这个漏洞进行提升权限。
根据atstake提供的
程序,经过试验证实确实可以提升用户权限。假设我们编译的文件名