关于MS08-067的一点细节
2008-10-27 13:30:33 来源:WEB开发网此时 si = 0x2e 然后前后判断是否是 ..
71BAA363 8D46 FE LEA EAX,DWORD PTR DS:[ESI-2]
71BAA366 3BD8 CMP EBX,EAX
71BAA368 0F85 50380200 JNZ NETAPI32.71BCDBBE
71BAA36E 8D46 02 LEA EAX,DWORD PTR DS:[ESI+2]
71BAA371 66:8B10 MOV DX,WORD PTR DS:[EAX]
71BAA374 66:83FA 2E CMP DX,2E
71BAA378 0F85 8A380200 JNZ NETAPI32.71BCDC08
71BAA37E 8D46 04 LEA EAX,DWORD PTR DS:[ESI+4]
71BAA381 66:8B18 MOV BX,WORD PTR DS:[EAX]
71BAA384 66:83FB 5C CMP BX,5C
second copy 第二个拷贝,把中间的 x.. 弄没了
71BAA388 /0F85 3D380200 JNZ NETAPI32.71BCDBCB
71BAA38E |85FF TEST EDI,EDI
71BAA390 |0F84 0B630000 JE NETAPI32.71BB06A1
71BAA396 |50 PUSH EAX
71BAA397 |57 PUSH EDI
71BAA398 |FF15 2C10BA71 CALL DWORD PTR DS:[<&msvcrt.wcscpy>] ; msvcrt.wcscpy
漏洞代码就是下面这个:
71BCDBDE 8D47 FE LEA EAX,DWORD PTR DS:[EDI-2]
71BCDBE1 66:8338 5C CMP WORD PTR DS:[EAX],5C
71BCDBE5 /75 18 JNZ SHORT NETAPI32.71BCDBFF
71BCDBE7 |66:8B38 MOV DI,WORD PTR DS:[EAX]
71BCDBEA |8B4D 08 MOV ECX,DWORD PTR SS:[EBP+8]
71BCDBED |66:83EF 5C SUB DI,5C
71BCDBF1 |66:F7DF NEG DI
71BCDBF4 |1BFF SBB EDI,EDI
71BCDBF6 |F7D7 NOT EDI
71BCDBF8 |23F8 AND EDI,EAX
71BCDBFA ^|E9 55C7FDFF JMP NETAPI32.71BAA354
71BCDBFF 3B45 08 CMP EAX,DWORD PTR SS:[EBP+8]
71BCDC02 ^ 74 E3 JE SHORT NETAPI32.71BCDBE7
71BCDC04 48 DEC EAX
71BCDC05 48 DEC EAX
71BCDC06 ^ EB D9 JMP SHORT NETAPI32.71BCDBE1
试图往栈低址去寻找"",结果错误计算了开始的地址,导致根本找不到。
按照cocoruder的说法,在计算错误后,有机会第二次执行第二个 wcscpy ,从而覆盖那个错误计算出的地址。
不过我没找到能再次执行拷贝的方法,我的整个栈低址几乎就是一片0,每次都上溢了.
有的机器里也许能够找到那个“”吧,或者存在一种能够稳定利用的方法。
使用 pipebrowser 好像也有机会控制EIP,可以继续搞搞。
瞎扯到这里,不说了,大家再一起继续郁闷吧。
更多精彩
赞助商链接