又学到东西了 

上传的附件 Exploit 编写系列教程第三篇_基于SEH的Exploit.rar
Exploit编写教程第三篇b:基于SEH的Exploit-又一个实例.pdf

  • 标 题:答复
  • 作 者:moonife
  • 时 间:2009-11-26 23:17:24

我写了一个简单的例子来演示文章作者所使用的关键技术,
阅读本篇的朋友可以先用OD跟踪下下面代码出来的程序,
用这个配合着阅读文章,就应该不会被作者翻来覆去的讲解弄晕了 呵呵

引用:
.386 
.model flat, stdcall 
option casemap :none 
;====================================
include    windows.inc
include    user32.inc
includelib  user32.lib
include    kernel32.inc
includelib  kernel32.lib
;====================================
.data 
szCap    db "By:moonife",0 
szInfo db "SEH Based Exploit Demo...",0 
szMsg db "Nothing...",0
;====================================
.code 
Start: 
  ASSUME FS:NOTHING 
        push    offset SEH_Handler     ;这里写这个纯粹是为了展示 不然可以直接安装Fake_Handler
        push    fs:[0]      
        mov    fs:[0],esp                      ;安装SEH
;====================================
;下面模拟缓冲区覆盖过程
        mov DWORD ptr[esp],909006EBh    ;覆盖 “next  SEH”为 jmp $+6 / nop / nop
        mov DWORD ptr[esp+4],offset Fake_Handler     ;覆盖“SE Handler”为指向pop pop ret指令串的指针
        mov BYTE  ptr[esp+8],0E9h             ;相当于向缓冲区中写入shellcode
        lea ebx,[esp+8]                          
        mov eax,offset FakeShellcode-5
        sub eax,ebx
        mov DWORD ptr[esp+9],eax            ;这里写入的“shellcode”为 jmp FakeShellcode
;====================================
        xor eax,eax
        mov [eax],eax    ;制造异常并跳到SEH_Handler进行处理

        invoke    MessageBox,NULL,addr szMsg,addr szCap,MB_OK   ;这里不会被执行了
        pop    fs:[0] 
        add    esp,4 
        invoke    ExitProcess,NULL        
;====================================
SEH_Handler:  
      invoke    MessageBox,NULL,addr szMsg,addr szCap,MB_OK 
      mov eax,1  ;ExceptionContinueSearch 不处理,需要其他例程或系统接着处理 
      ret
;====================================
Fake_Handler:    ;pop pop ret 指令串   OD跟踪的时候在这里下个断,然后单步
      pop edi
      pop esi
      ret       
;====================================
FakeShellcode:
        invoke    MessageBox,NULL,addr szInfo,addr szCap,MB_OK
        invoke    ExitProcess,NULL 
;====================================
end Start