安全中国首页 > 文章中心 > 溢出文章
 
安全中国网友投稿专用上传FTP空间:
Ftp服务器:download.anqn.com
Ftp端口:21
用户名:anqn
密 码:anqn.com
 

小心我“DIR”溢出你!(图)

更新时间:2008-7-25 0:08:47
责任编辑:果果龙
热 点:

作者:axis

好吧,我承认我昨天是在弄DIR溢出

不是sharpxxxxx那个。

dir溢出其实有好几个,有的和cmd有关,有的需要特定环境。

我今天整的这个又是一个YY漏洞。

微软一直没有补,因为在微软看来,这个应该不属于漏洞吧,溢出了也提不了权限,顶多算一个bug。

所以很多牛人都不整这个bug,而最近dummy爆了一个暴风影音的0day,也是个unicode的,我只在IE里触发了,不知道在perl脚本下咋触发,后来想起了这个dir漏洞。

我最喜欢做的事情就是整些没用的,仅仅用来YY的东西,时不时自虐一下,所以今天看看这个dir溢出。

在我的xp sp2 cn上,cmd版本

Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.

首先,触发漏洞:D:>dir \\?\AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA......(超长)

就溢出了,cmd crash,简单吧

大概200多个A就可以造成溢出。

看看溢出时候的状况:

发现输出的参数: A 经过unicode编码后,一路覆盖到了栈底,异常了~~~

异常时寄存器如下:

停在这里:
77C17EA2    66:8901         MOV WORD PTR DS:[ECX],AX     ; //===> EIP指向这里
77C17EA5    41              INC ECX
77C17EA6    41              INC ECX

SEH也被覆盖了:
0013FF30   00410041 A.A.
0013FF34   00410041 A.A. 指向下一个 SEH 记录的指针
0013FF38   00410041 A.A. SE处理程序
0013FF3C   00410041 A.A.
0013FF40   00410041 A.A.
0013FF44   00410041 A.A.

其实栈溢出也好利用,要么覆盖返回地址,要么覆盖seh。

第二次找到漏洞原因,重新设定好断点,触发之:

溢出就发生在这个该死的 wcscpy 里

实际上是 wcscpy( [ebp-210h], [ebp-41C] );

跟进去后:
77C17E94 > 8BFF            MOV EDI,EDI
77C17E96    55           PUSH EBP
77C17E97    8BEC        MOV EBP,ESP
77C17E99    8B4D 08        MOV ECX,DWORD PTR SS:[EBP+8]
77C17E9C    8B55 0C       MOV EDX,DWORD PTR SS:[EBP+C]
77C17E9F    66:8B02        MOV AX,WORD PTR DS:[EDX]
77C17EA2    66:8901        MOV WORD PTR DS:[ECX],AX
77C17EA5    41               INC ECX
77C17EA6    41             INC ECX
77C17EA7    42           INC EDX
77C17EA8    42             INC EDX
77C17EA9    66:85C0       TEST AX,AX
77C17EAC ^ 75 F1        JNZ SHORT msvcrt.77C17E9F
77C17EAE    8B45 08       MOV EAX,DWORD PTR SS:[EBP+8]
77C17EB1    5D                POP EBP
77C17EB2    C3                RETN

跟完之后才发现一个见鬼的地方,由于src和dest相距不远,所以在拷贝的过程中,dest把src的末尾的0字节给覆盖掉啦~~ 这样这个拷贝就因为找不到src的0字节而无法结束,所以会一直拷贝下去。

最后的结果就是在栈里有了若干个拷贝的镜像,最后因为一路覆盖到了栈底,所以异常了!

注意看 \.\.?.\. 是分隔不同拷贝的地方

如果这个溢出是发生在堆里,那么就heap spray了,最后会造成内存泄露。

这里是发生在栈里的,那就叫做 stack spray吧!

由于这里肯定会异常,wcscpy根本就无法正常返回,所以覆盖返回地址控制的方法可以不同考虑了。

那么正常人都会想到这里覆盖seh利用

而在这里seh也确实是被我们覆盖掉了。

不过可惜的是,xp sp2已经有了safeseh的保护了。而我们这个漏洞更是可怜的很。

可以看到,加载的模块居然没有一个可以利用的~!

1 2 3 下一页

 
相关文章
一日一文章
 
一日一软件
一日一动画