能力值:
( LV9,RANK:170 )
2 楼
坐看云起................
能力值:
( LV17,RANK:1820 )
3 楼
LZ为何不在文档中写好再发上来呢?
能力值:
( LV2,RANK:10 )
4 楼
膜拜下,LS大哥,
认真看下,LZ的文章...
能力值:
( LV5,RANK:60 )
5 楼
因为还没有写文档
能力值:
( LV2,RANK:10 )
6 楼
test [ecx],eax 是为了触发栈内存的PAGE_GUARD保护,让系统分配内存。
能力值:
( LV5,RANK:60 )
7 楼
[QUOTE=cooolie;1033801]test [ecx],eax 是为了触发栈内存的PAGE_GUARD保护,让系统分配内存。[/QUOTE]
一语中的,谢谢
能力值:
( LV13,RANK:388 )
8 楼
漏洞成因简单说就是有符号数和无符号数直接比大小,照这个思路接着挖,估计还有
作者的代码严重有问题啊
能力值:
( LV5,RANK:60 )
9 楼
其实这个也不能说作者的不严密的问题,这个是有符号与无符号数的匹配问题。唉,默认的数为int有符号,而memcpy又无符号。这样的话就有不匹配的问题。
我想的话,如果你有一个域是用来作为长度限制的话,这个变量你的申明的时候就用size_t这样的c/c++宏来声明 。这样就可以少很多的问题了,你们认为呢。各位大大
能力值:
( LV8,RANK:120 )
10 楼
漏洞贴我要学习啊
能力值:
( LV2,RANK:10 )
11 楼
不错啊 学习了
能力值:
( LV2,RANK:10 )
12 楼
占楼顶贴,很牛!
能力值:
( LV2,RANK:10 )
13 楼
公司有feiq的人很多,这个真要认真学习下了
能力值:
( LV13,RANK:388 )
14 楼
在执行handler的时候,ebx当然是0了,看代码
.text:7C923256 ExecuteHandler@20 proc near ; CODE XREF: RtlpExecuteHandlerForException(x,x,x,x,x)+5j .text:7C923256 .text:7C923256 arg_0 = dword ptr 4 .text:7C923256 arg_4 = dword ptr 8 .text:7C923256 arg_8 = dword ptr 0Ch .text:7C923256 arg_C = dword ptr 10h .text:7C923256 arg_10 = dword ptr 14h .text:7C923256 .text:7C923256 push ebx .text:7C923257 push esi .text:7C923258 push edi .text:7C923259 xor eax, eax.text:7C92325B xor ebx, ebx .text:7C92325D xor esi, esi .text:7C92325F xor edi, edi .text:7C923261 push [esp+0Ch+arg_10] .text:7C923265 push [esp+10h+arg_C] .text:7C923269 push [esp+14h+arg_8] .text:7C92326D push [esp+18h+arg_4] .text:7C923271 push [esp+1Ch+arg_0] .text:7C923275 call ExecuteHandler2@20 .text:7C92327A pop edi .text:7C92327B pop esi .text:7C92327C pop ebx .text:7C92327D retn 14h
能力值:
( LV5,RANK:60 )
15 楼
请问bitt大大,jmp/call ebx是怎么用的呢?望指点?!!!!
能力值:
( LV13,RANK:388 )
16 楼
不敢当,jmp ebx在seh handler里我感觉是不能用的,pop、pop、retn是比较稳定的能跳回可控区的方法
这得从异常分发流程说起,异常产生后先进内核KiTrapXX,然后由内核里的KiDispatchException分发,具体参见http://apps.hi.baidu.com/share/detail/21298681
我是内核菜,讲不太清楚,不过没关系,这里和内核没关系,主要是用户层异常分发
在没有调试器的状况下,内核会把异常记录为一个结构体EXCEPTION_RECORD,再分发给用户层异常分发器KiUserExceptionDispatcher,你在一条异常指令上单步就直接到这里了
KiUserExceptionDispatcher中实际负责分发异常的函数是RtlDispatchException,其中先执行veh链上的各个veh handler,异常未被处理 然后 展开seh链 逐个执行,RtlpExecuteHandlerForException->ExecuteHandler->ExecuteHandler2
最终call这个handler的就是ExecuteHandler2
.text:7C923282 ExecuteHandler2@20 proc near ; CODE XREF: ExecuteHandler@20+1Fp
.text:7C923282
.text:7C923282 arg_0 = dword ptr 8
.text:7C923282 arg_4 = dword ptr 0Ch
.text:7C923282 arg_8 = dword ptr 10h
.text:7C923282 arg_C = dword ptr 14h
.text:7C923282 arg_10 = dword ptr 18h
.text:7C923282
.text:7C923282 push ebp
.text:7C923283 mov ebp, esp
.text:7C923285 push [ebp+arg_4]
.text:7C923288 push edx
.text:7C923289 push large dword ptr fs:0
.text:7C923290 mov large fs:0, esp
.text:7C923297 push [ebp+arg_C]
.text:7C92329A push [ebp+arg_8]
.text:7C92329D push [ebp+arg_4]
.text:7C9232A0 push [ebp+arg_0]
.text:7C9232A3 mov ecx, [ebp+arg_10]
[COLOR="Red"].text:7C9232A6 call ecx[/COLOR]
.text:7C9232A8 mov esp, large fs:0
.text:7C9232AF pop large dword ptr fs:0
.text:7C9232B6 mov esp, ebp
.text:7C9232B8 pop ebp
.text:7C9232B9 retn 14h
.text:7C9232B9 ExecuteHandler2@20 endp
其中的ecx,指向的就是我们的handler,那为什么要pop、pop。retn呢,call到handler之后,
esp指向的是返回地址,其次是ExecuteHandler2传进来的4个参数,
看看这handler的原型把
NTAPI
EXCEPTION_ROUTINE (
__inout struct _EXCEPTION_RECORD *ExceptionRecord,
[COLOR="Red"] __in PVOID EstablisherFrame,[/COLOR]
__inout struct _CONTEXT *ContextRecord,
__in PVOID DispatcherContext
);
其中第二个参数EstablisherFrame其实就是handler所在seh节点指针EXCEPTION_REGISTRATION_RECORD
这个事可控的,先pop掉返回地址,在pop掉ExceptionRecord,然后esp指向的就是EstablisherFrame,直接retn就到了我们可以控制的地方,所以写pop pop retn
而ebx早在ExecuteHandler里就已经清零了,这里肯定没法用
能力值:
( LV5,RANK:60 )
17 楼
谢谢bitt大大的回复。pop,pop,ret这个了解一点,下一步我会仔细的看一下关于结构化异常处理的相关知识的。再次感谢!
这个是以前找的一些资料,接下来我会仔细求证的。
thanks
上传的附件:
能力值:
( LV2,RANK:10 )
18 楼
mark..............
能力值:
(RANK:250 )
19 楼
关于call ebx为什么不能使用,这里引用下泉哥翻译的那个exploit系列教程里面的一段话:
“Xor
为了能够编写一个基于SEH 溢出的Exploit,我们需要在Windows xp sp1 之前版本和SP1 以
及后续版本之间做个详细的比较。从SP1 开始,在调用异常处理例程之前,所有的寄存器都
将先被清空(如:xor eax,eax),这让Exploit 的编写变得更复杂。这个意味着当第一次发生
异常时会有一个或多个寄存器指向你的Payload,但是一旦EH 发挥作用,这些寄存器都将被
清空(所以你无法直接跳转到它们(如:jmp esp)来执行你的shellcode)。等一下我们将会
讨论这个。
”
《Q版》里面的大多数实验环境都是在win2000和 win xp sp0下 所以 要注意测试环境。
关于漏洞的利用楼主用心分析得很详尽,鼓励~
另外提醒下,漏洞利用分析中,最好不要直接提供利用工具~
能力值:
( LV5,RANK:60 )
20 楼
好的,以后会注意的。
能力值:
( LV12,RANK:230 )
21 楼
上等的硬货!!!支持!
能力值:
( LV5,RANK:75 )
22 楼
真狠,看来一个比较都的小心翼翼的。
能力值:
( LV2,RANK:10 )
23 楼
虽然看不懂。但是好强大。
能力值:
( LV2,RANK:10 )
24 楼
飞秋作者好像更新了飞秋的漏洞了
刚在飞秋官网上看到的
http://www.feiq18.com
能力值:
( LV5,RANK:60 )
25 楼
http://www.feiq18.com/forum.php?mod=viewthread&tid=2198441&extra=page%3D1
是的,作者已更新
上传的附件: