能力值:
( LV13,RANK:350 )
2 楼
我写了一个简单的例子来演示文章作者所使用的关键技术,
阅读本篇的朋友可以先用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
能力值:
( LV17,RANK:1820 )
3 楼
还是perl 明了简单啊,编写exploit,perl当属精品!
能力值:
( LV13,RANK:290 )
4 楼
太速度了,俺得加油了。
能力值:
( LV2,RANK:10 )
5 楼
学习中呀,总觉得好难
能力值:
( LV17,RANK:1820 )
6 楼
回复dge:你那篇是本专题的精华所在,也是内容最长的一篇,慢慢翻译,保证质量,呵呵…
能力值:
( LV13,RANK:220 )
7 楼
请教一个问题,这个是异常的过程
_SEHHandler proc _lpExceptionRecord,_lpSEH,_lpContext,_lpDispatcherContext
pushad
mov esi,_lpExceptionRecord
mov edi,_lpContext
assume esi:ptr EXCEPTION_RECORD,edi:ptr CONTEXT
mov eax,_lpSEH
push [eax + 0ch]
pop [edi].regEbp
push [eax + 8]
pop [edi].regEip
push eax
pop [edi].regEsp
assume esi:nothing,edi:nothing
popad
mov eax,ExceptionContinueExecution
ret
_SEHHandler endp
下面是安装的:
assume fs:nothing
push ebp
lea eax,[ebx + offset _Error]
push eax
lea eax,[ebx + offset _SEHHandler]
push eax
push fs:[0]
mov fs:[0],esp
;********
t调试的时候红体字部分总是
mov eax,FFFFFFF
00401041 |. 8B45 0C MOV EAX,DWORD PTR SS:[EBP+C]
有可能出现的问题在哪呢?,
异常处理程序自己异常了
在此感谢lz的热心
翻译及帮助
能力值:
( LV13,RANK:350 )
8 楼
我没看出什么 你这样写是做什么呢?
能力值:
( LV13,RANK:220 )
9 楼
就是一个堆栈本来的应是有数据的,但是现在变成了FFFFFFFF,可能有哪些原因呢,像这个提问的
mov eax,_lpSEH
应该是:_lpSEH应该是指向一个结构的地址的
MOV EAX,DWORD PTR SS:[EBP+C](反汇编中的mov eax,_lpSEH的表示)
但是DWORD PTR SS:[EBP+C]传递的却是FFFFFFFF
能力值:
( LV2,RANK:10 )
10 楼
楼主太负责了,支持@@@
能力值:
( LV2,RANK:10 )
11 楼
感谢辛勤劳动的楼主
能力值:
( LV2,RANK:10 )
12 楼
[QUOTE=instruder;718857]就是一个堆栈本来的应是有数据的,但是现在变成了FFFFFFFF,可能有哪些原因呢,像这个提问的
mov eax,_lpSEH
应该是:_lpSEH应该是指向一个结构的地址的
MOV EAX,DWORD PTR SS:[EBP+C](反汇编中的mov eax,_lpSEH的表示)
...[/QUOTE]
你跟过头了吧,怎么变成值了。
能力值:
( LV2,RANK:10 )
13 楼
感谢楼主,正在学习这一段
能力值:
( LV2,RANK:10 )
14 楼
支持下 嘿嘿
能力值:
( LV2,RANK:10 )
15 楼
纠正个错别字..P15
“在windows xp sp1之前,为了执行shellcode你可以直接跳到寄存器。但sp1和更搞版本系统 ”
是“更高”吧....
能力值:
( LV2,RANK:10 )
16 楼
从第三篇开始难度略微增加了
能力值:
( LV4,RANK:50 )
17 楼
始终没弄明白为什么就刚好需要pop/pop/ret呢?有人能稍微详细的讲一下吗,文章里讲的比较少,-moonife兄的例子也调试了下,但是始终没搞懂为什么。
能力值:
( LV13,RANK:350 )
18 楼
pop 弹出Ntdll模块中调用SEH回调函数时压入的返回地址
pop 弹出SEH回调函数参数一:lpExceptionRecord
ret 把参数二lpSEH弹到EIP中 这个参数就是前面我们注册的EXCEPTION_REGISTRATION结构地址了
可以看下罗云彬的win32汇编的14章 讲得比较细的
; SEH Handler 异常处理程序 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> _Handler proc C _lpExceptionRecord,_lpSEH,_lpContext,_lpDispatcherContext local @szBuffer[256]:byte pushad mov esi,_lpExceptionRecord mov edi,_lpContext assume esi:ptr EXCEPTION_RECORD,edi:ptr CONTEXT invoke wsprintf,addr @szBuffer,addr szMsg,\ [edi].regEip,[esi].ExceptionCode,[esi].ExceptionFlags invoke MessageBox,NULL,addr @szBuffer,NULL,MB_OK mov [edi].regEip,offset _SafePlace assume esi:nothing,edi:nothing popad mov eax,ExceptionContinueExecution ret _Handler endp
; 在堆栈中构造一个 EXCEPTION_REGISTRATION 结构 ;******************************************************************** assume fs:nothing push offset _Handler push fs:[0] mov fs:[0],esp
能力值:
(RANK:110 )
19 楼
哪位大虾能提供一下Millenium MP3 Studio 1.0的安装文件啊,为了做学Expoit编写3,找遍了网络。都是2.0的版本。
能力值:
( LV17,RANK:1820 )
20 楼
能力值:
( LV2,RANK:10 )
21 楼
请问谁研究教程三b后面的练习题了
http://www.corelan.be:8800/index.php/forum/writing-exploits/exploit-for-m3u-file-eip-overwrite-additional-excercise-of-tutorial-3-part-b/
好像给出了答案,但是没太分析明白,请大牛帮忙解答下?没看明白是覆盖EIP还是SEH法
能力值:
( LV2,RANK:10 )
22 楼
刚刚又调了调,赶紧跟贴,呵呵
我用了2064个0x61填充(2064包含http://),运行没有异常,而是EIP直接被覆盖了,而刚才是用了大概2300个0x61填充就会报异常,这两个漏洞直接有联系吗?被整迷糊了,向大牛求解
能力值:
( LV17,RANK:1820 )
23 楼
具体要用多少个垃圾字符去填充,视你自己的系统环境而定,并不是像教程上面那样固定不变的,教程上面的exploit在中文的系统上很多情况下是不能用的,你得自己编写出属于自己系统的exploit。
能力值:
( LV2,RANK:10 )
24 楼
嗯,后面的调试就是我自己填数据测试的,也写出exploit了!但是我如果再多填写一些数据就会出现跟教程3b一样的情况了,是覆盖SEH了。不知道这两种情况之间有没有啥联系?
能力值:
( LV2,RANK:10 )
25 楼
我就纳闷了 我在SP3的环境下找到了溢出点SEH HANDLE 然后用POP POP RET地址填充,其中POP POP RET的地址是程序自带的xaudio.dll,而且还是用OD插件OllySSeh查找的。其它都是垃圾字节,但是断下来之后为什么 那个POP POP RET地址会被修改了呢??