在线搜索
|
有问题找看雪
Exploit 编写系列教程第三篇_基于SEH的Exploit(+3b)
标 题:
Exploit 编写系列教程第三篇_基于SEH的Exploit(+3b)
作 者:
moonife
时 间:
2009-11-26 23:13:46
链 接:
http://bbs.pediy.com/showthread.php?t=102040
又学到东西了
上传的附件
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