在Win2000中提升权限的实例及心得5c.\pipe\lsass",这样Pipe3就可以伪造一个同名的Named Pipe;。。。。。。这以后的几步我想就不用重复了,大家都应该清楚。下面说说我Exploit的情况: 先用WinDbg找到lsass可能要运行的指令地址,lsass有多个Thread,我从不同Thread的ESP寄存器中找了几个地址。然后以我的一般用户名“moda”登录dallas。最后让Pipe3在这些地址分别设断点,总有那么一个地址会成功地中断lsass程,并且产生一个Warning对话框(Dialog Box)报告“SingleStep Exception”。当我选择中断进程后, lsass退出执行,Pipe3报告“LSA died!”: D:\MyJob\securitylab\pipe3\Debug>pipe3 Fun with debug registers. Written by Georgi Guninski vvdr started: lsasspid=240 breakp=5ffebc LSA died! Stop writing to pipe start \\.\pipe\lsass Failed to create named pipe: \\.\pipe\lsass 由于lsass是重要的系统进程,它的终止运行把使系统在一分钟内自动Shutdown。另外我们注意到, \\.\pipe\lsass并没有成功地创建。为什么呢?我抢在系统Shutdown之前运行了一下Pipelist: D:\MyJob\securitylab\pipe3\Debug>pipelist PipeList v1.01 by Mark Russinovich http://www.sysinternals.com Pipe Name Instances Max Instances --------- --------- ------------- InitShutdown 2 -1 lsass 2 -1 ntsvcs 49 -1 scerpc 2 -1 net\NtControlPipe1 1 1 DhcpClient 1 -1 net\NtControlPipe2 1 1 。。。。。。。。。。。。。。。。 很奇怪,虽然lsass进程终止运行,但是它的Named Pipe还在----这大概是Pipe3没能创建“\\.\pipe\lsass”的原因。由于时间的关系,我没能深入研究这个问题,不过哪位朋友要是用Pipe3成功地实现Exploit的话,不要忘记告诉我一声! 不过话又说回来,这种利用Debug Register来终止lsass进程的方法----即使成功的话,也太暴露了:整个系统居然会Shutdown!任何一个傻瓜管理员都会发现有黑客入侵。这大概是黑客中的业余水平。好一点的黑客要做到“轻轻的我走了,正如我轻轻的来”,要象伟大的诗人兼武林高手徐自摩那样施展一把轻功,让傻瓜管理员根本发现不了,当然耳朵厉害的管理员还是会发现的----“谁?有黑客!抓黑客!”。水平达到最高境界的黑客应该是能够羚羊挂角、踏雪无痕的,这就不是我能评论的了。 利用Win32 API的设计缺陷提升权限: 几个星期以前我在计算机安全网站上看到两篇新发表的文章:<>、<>,作者是Chris Paget(网名Foon),我建议大家去下面的网址读一下他的原著: http://security.tombom.co.uk/shatter.html http://security.tombom.co.uk/moreshatter.html。 这两篇文章详细地介绍了怎么样利用Win32 API的一个设计缺陷来提升普通用户的权限。我们前面也提到,普通用户的进程可以向他/她的Desktop上任何Window发送Message,让目标Window执行用户指定的操作,比如说COPY/PASTE(拷贝/沾贴)、定时运算(Timer)等等。这个Window可能属于用户自己,也可能属于Local System(象"NetDDE Agent")----这样问题就来了: ---- 普通用户如你我他她它(比尔盖茨说狗也可能上网的,所以我们要算上“它”)在 他的Desktop上先找到一个属于Local System的Window,我们给这个Window起一个 名字叫WINDOWXYZ,这个WINDOWXYZ上最好有能接收沾贴内容的Control(比如说 EDIT); ---- 用户可以把黑客码用“WM_PASTE”(Message之一)沾贴到WINDOWXYZ的Control里; ---- 用户找到被沾贴的黑客码在WINDOWXYZ进程中的地址; ---- 用户然后发送“WM_TIMER”(Message之二)给WINDOWXYZ,同时把黑客码地址作为 参数一并传给WINDOWXYZ,WINDOWXYZ於是执行定时运算,开始运行黑客码。这些 黑客码是以Local System的权限运行的,所以普通用户的权限被成功地提升。 ---- 实际上,根据FOON的文章,即使普通用户在其Desktop上找不到属于Local System的Window,他也有办法提升权限:他可以利用Tool Help函数得到属于 Local System的进程及其Thread,只要其中任何一个Thread能处理Window的 Message,用户就可以用函数PostThreadMessage()向这个属于Local System的 Thread发送Message,然后就。。。如此这般。。。地提升权限。不过我没有时间 亲手试验过这种方法。 这两篇文章引起了很大的反响,其中最引人注意的是Microsoft的答复,Micorsoft说这种方法老早就有人提出来了,Nothing New!又说根本就不应该在普通用户的Desktop上创建属于Local System的Window,编程序的人应该避免这样的设计。但实际上隐藏式的窗口"NetDDE Agent"就出自于Microsoft的设计,它属于Local System但是却运行在登录用户的Desktop上,看来Microsoft是知法犯法啊! 我觉得这个缺陷就象不安全的函数strcpy一样,C语言在实现strcpy函数时有漏洞 (函数返回地址、函数堆栈栈底地址等系统管理信息与缓冲区分配在一块,缓冲区的溢出就会覆盖系统管理信息),於是大家寄希望于程序员能够避免使用函数strcpy。现在Microsoft也承认在普通用户的Desktop上创建一个Window是危险的,所以它也寄希望于大家编程时避免使用这样的设计。 下面我专门编写了一个服务进程“SimpleService”来演示一下Microsoft的这个设计缺陷。SimpleService以Local System的权限运行,它打开一个Named Pipe然后等待Named Pipe Client与它联络;普通用户接着登录计算机并运行程序“Client”,“Client”是一个Named Pipe Client;它向SimpleService的Named Pipe随便写一些字节,於是SimpleService就在登录用户的Desktop上产生一个对话窗口(Dialog Box)。普通用户最后利用FOON的攻击程序Shatter攻击这个对话窗口来获得“Local System”的权限。 因为SimpleService程序太长,所以我只节选了关键的部分让大家参考: <=======================SimpleService==========================> #define SZAPPNAME _T("Simple") #define SZSERVICENAME _T("SimpleService") #define SZSERVICEDISPLAYNAME _T("Simple Service") 上一篇: 自动安装Windows2000系统 下一篇: 怎么样让Win2000系统达到最佳性能 更多相关文章
|
推荐文章
精彩文章
|