小心我“DIR”溢出你
好吧,我承认我昨天是在弄DIR溢出。
C9E {f8NK8xPCZ7x0IXPUB技术博客}iBg1AD不是sharpxxxxx那个。IXPUB技术博客 D6l-BY2Y
^7kpc%}(\7^&l0dir溢出其实有好几个,有的和cmd有关,有的需要特定环境。IXPUB技术博客0{j2Wcd(O
IXPUB技术博客"_"CR;i\#U我今天整的这个又是一个YY漏洞。
W q1{/Z`wZAF0IXPUB技术博客[["_&k2OS,D.V N微软一直没有补,因为在微软看来,这个应该不属于漏洞吧,溢出了也提不了权限,顶多算一个bug。
:F0?7BLDC,Q@0IXPUB技术博客-q#[,Pzf9T所以很多牛人都不整这个bug,而最近dummy爆了一个暴风影音的0day,也是个unicode的,我只在IE里触发了,不知道在perl脚本下咋触发,后来想起了这个dir漏洞。IXPUB技术博客DI)R{fI:|#R
~&DuUd B}NL0我最喜欢做的事情就是整些没用的,仅仅用来YY的东西,时不时自虐一下,所以今天看看这个dir溢出。IXPUB技术博客GS\ a6@i,Xk
IXPUB技术博客8@Wv)AY6_0p+g&U8_
在我的xp sp2 cn上,cmd版本IXPUB技术博客
r8I(L)XkJ2\
d?0QexXO-A
i!M0MicrosoftWindowsXP [版本 5.1.2600]
+Hi P/HF0(C) 版权所有 1985-2001 Microsoft Corp.IXPUB技术博客GGq;{q0R
%q+l`X;z#j0首先,触发漏洞:
C9Lf8M-o'c["L0h.I`:E,OD5JMP1[0D:>dir \\?\AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA......(超长)IXPUB技术博客7};vl3i7sf!| cZ
,W9l^[d,Z&t;x#|0就溢出了,cmd crash,简单吧IXPUB技术博客jE$`g:qm*^
IXPUB技术博客!AWm k_%H4oFdF大概200多个A就可以造成溢出。
{K*I^eo0 ~\@ NP7_1T0看看溢出时候的状况:
fr0gH!i0
0WfX,?~[0发现输出的参数: A 经过unicode编码后,一路覆盖到了栈底,异常了~~~IXPUB技术博客TK X"Ln/S)x;XB%HW`
异常时寄存器如下:
0l9F\;B,F#\B0
Y:b^%apV'qnz0停在这里:IXPUB技术博客t8X+P+iz@X.O,d
77C17EA2 66:8901 MOV WORD PTR DS:[ECX],AX ; //===> EIP指向这里
b(j0o#lKeA,]/b077C17EA5 41 INC ECXIXPUB技术博客8P%}h)w$T[~
Q
77C17EA6 41 INC ECXIXPUB技术博客 nH3qeZ$w0h
SEH也被覆盖了:IXPUB技术博客Xk+n5D}D!f/nX
0013FF30 00410041 A.A.IXPUB技术博客da3kM+wL
0013FF34 00410041 A.A. 指向下一个 SEH 记录的指针
"~hi[/X00013FF38 00410041 A.A. SE处理程序IXPUB技术博客+QG"OU
[%\R"t
0013FF3C 00410041 A.A.IXPUB技术博客9x+r$K\6f
0013FF40 00410041 A.A.IXPUB技术博客RKL
s)G}$r
0013FF44 00410041 A.A.
其实栈溢出也好利用,要么覆盖返回地址,要么覆盖seh。IXPUB技术博客$T[)SS*Nh+lV)F
`9F7w,E[)d;N0第二次找到漏洞原因,重新设定好断点,触发之:
5lo+I"HT&u%Td8w0
IXPUB技术博客*Q0Bl#c'_pc#k x
溢出就发生在这个该死的 wcscpy 里IXPUB技术博客IG4?U6w8m
1~d?l@q0实际上是wcscpy( [ebp-210h], [ebp-41C] );IXPUB技术博客dy+xg [F(kn7e
IXPUB技术博客t l%D"?FEa E\跟进去后:IXPUB技术博客;L:h&Z.W/O6[#Z
77C17E94 > 8BFF MOV EDI,EDIIXPUB技术博客 Pq:XS1s'Y
77C17E96 55 PUSH EBP
"r;o3q Qad sI?077C17E97 8BEC MOV EBP,ESP
E9?Qag^077C17E99 8B4D 08 MOV ECX,DWORD PTR SS:[EBP+8]IXPUB技术博客o(r?e gAT
77C17E9C 8B55 0C MOV EDX,DWORD PTR SS:[EBP+C]
C
[T
WAEsV077C17E9F 66:8B02 MOV AX,WORD PTR DS:[EDX]
#^ J[-EQ&J,P*]077C17EA2 66:8901 MOV WORD PTR DS:[ECX],AX
C7b\M7k077C17EA5 41 INC ECX
P(k-MwzI077C17EA6 41 INC ECX
:f+u%Q+Owg\Q077C17EA7 42 INC EDX
%o"`.K7pl+j i^077C17EA8 42 INC EDX
n6kL6SC)c077C17EA9 66:85C0 TEST AX,AX
~D)eY9{3HBa077C17EAC ^ 75 F1 JNZ SHORT msvcrt.77C17E9F
0E0Bx6n oI3q.ZY077C17EAE 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
XIZxgDp2DUp:_*C077C17EB1 5D POP EBP
{ohp-In$`qq@6w077C17EB2 C3 RETNIXPUB技术博客j}Py(c*Sm:Z$jn8u
跟完之后才发现一个见鬼的地方,由于src和dest相距不远,所以在拷贝的过程中,dest把src的末尾的0字节给覆盖掉啦~~这样这个拷贝就因为找不到src的0字节而无法结束,所以会一直拷贝下去。IXPUB技术博客6d4E/Us,iRVA
rA-y+CMe0}c3\0最后的结果就是在栈里有了若干个拷贝的镜像,最后因为一路覆盖到了栈底,所以异常了!
'P4Q(G4C)EQU0
TJt\d3V0注意看 \.\.?.\. 是分隔不同拷贝的地方IXPUB技术博客^
RJF#t+]fl
[+])V']9AKS?XfG0如果这个溢出是发生在堆里,那么就heap spray了,最后会造成内存泄露。IXPUB技术博客a8N!]'z4Nc$j
by(N&E4@aiL0这里是发生在栈里的,那就叫做stack spray吧!IXPUB技术博客R[P bfW.q
IXPUB技术博客 ?j wg"O7}}d5N由于这里肯定会异常,wcscpy根本就无法正常返回,所以覆盖返回地址控制的方法可以不同考虑了。IXPUB技术博客$Zq FhI:O
?M7qA5Fd0那么正常人都会想到这里覆盖seh利用IXPUB技术博客*wPYE(~Cth7A
IXPUB技术博客E,]"E1Hp#uh而在这里seh也确实是被我们覆盖掉了。IXPUB技术博客-[^1I!Mge
LF]Z$|'mE0不过可惜的是,xp sp2已经有了safeseh的保护了。而我们这个漏洞更是可怜的很。
U0KO,v;h9C:P:W0
IXPUB技术博客 P)tz
sNom(z.U:S
可以看到,加载的模块居然没有一个可以利用的~!IXPUB技术博客6k5w2Yx]y?i
HJ1Y1Ir9Fu F0然后诡异的事情发生了,本以为代码页和堆是可以跳转的,结果在这里都不行。IXPUB技术博客o#X(d8T1J"| C
%j.D9p)\e,Y&h0经过测试,唯一能跳转的是内存中属性为 ”RE" 的段,以及cmd.exe自己注册的seh handlerIXPUB技术博客/th(i*j s2a#cu8@ z
%jnW.{ H1bC3N`$d*Q0到了这里,基本可以判断在正常情况下这个漏洞在xp sp2下是无法利用的了,当然如果有什么牛人有啥新的利用方法,也请告诉我。
3K-E Eq+D2s:j0W"|%w"_2s(b^ dJ0欲知后事如何,且听下回分解。
wyX _(JL4T.m0IXPUB技术博客e[:rM2F接着前面来。IXPUB技术博客 Q:B$m0@b3Pj4g
IXPUB技术博客8AmXF5g"pF:[b在xp sp2 上由于有safeseh所以无法成功利用,那么我们换到win2000。
4J d2A&TF.G5Z8O0IXPUB技术博客 eN$B,K2Xp o测试平台:Windows2000 Server SP4 CNIXPUB技术博客;cFK|ke#T
IXPUB技术博客C5D CK"] ~P
e
当我信心满满,摩拳擦掌的来到2000平台时,遭受到了一次严重的打击,把我雷到了~~
1~XrTmvAs0
@[*H9I&l0y0win 2000的默认cmd居然没有这个漏洞!
Aw? Om4J N\p6^-Ea0不过,你不能小看我的无耻。IXPUB技术博客/Z}_3w1fAsP
IXPUB技术博客6Cy+wS+a'mH*Q是的,为了达到YY强国的目的,为了彻底的强XDIR,我把XP下的cmd.exe拷贝了一份到2000平台,这样就可以正常溢出了。IXPUB技术博客p7sM~+I eC
IXPUB技术博客7IS_a(bHh0nC不过奇怪的是,banner显示的还是5.0 的版本IXPUB技术博客Z]z Z4i
IXPUB技术博客7V3k+~.})oK由于摆脱了safeseh的限制,在2000下我们可以任意跳转到喜欢去的地方IXPUB技术博客a'lgd2ir2e
7O
`7o*]8l.I(g#jo:U+dK0而且更开心的是,到了2000下,可以直接输入不可见字符了(也许是我土,void牛告诉我cmd里按住ctrl,再从小键盘输入数字就可以打不可见字符,不过我的笔记本没小键盘,无法体验了。),只要是双字节的不可见字符(用UltraEdit,进行unicode的16进制编辑即可),拷贝过来直接贴进去就行了。IXPUB技术博客
`pC*YtW-|*P)c,z)\N!A
Y F'x&}q1uPR0在我系统上,cmd用的是GBK编码
l j i P4@dYQl0
F ~%u9wl
e0这样的话,包括覆盖SEH、写shellcode在内,都会非常轻松。IXPUB技术博客S(h;X5]^h7SwT0VH
f};btT0n!tU0但是在开篇我就说了,我今天是来自虐的,所以我准备用纯可见字符获取控制权。
-}Z0EPe r[0Y|1e%?)g k0为了选用合适的nop,可以用unicode的“q",编码后就是 "7100"
0NlIH5O0