在大学的课程中,我们最近从标准的缓冲区溢出转移到了基于SEH的溢出。我们需要SEH缓冲区溢出。
到目前为止,我的理解是,如果源代码中没有显式的异常处理程序,则每个线程都会获得一个自动的异常处理程序,另外还会有特定的处理程序。对于容易受到SEH BOF攻击的程序,缓冲区溢出将导致例如免疫调试器可在出现异常时暂停程序。仅在将异常传递给程序之后,EIP寄存器才会被恶意缓冲区覆盖。

传递异常后,用我的缓冲区中的值覆盖EIPESP,然后将其他寄存器清零(在我的示例中为EAXEBXESIEDI)。因此我可以控制EIPESP,但是教程中提到由于归零寄存器的缘故,它是无用的。
但是,他们从不解释为什么归零寄存器是问题所在-这是我的第二个缺乏理解。
问题2:

归零寄存器到底是怎么处理的,为什么它们会中断shellcode的执行?

现在我们也覆盖NSEH和SEH记录并使用模式可以找出确切的偏移量以覆盖这些记录。然后,神奇的是,引用了一些具有POP POP RET的模块,从而到达了ESP + 8。最后跳?


我可以利用该漏洞利用程序并且可以像这样处理它,但是如果不真正了解发生了什么,那感觉就很不令人满意,毫无意义。我最近才刚开始使用低级的东西,但仍然有很多东西要学习,因此我非常感谢您的每一次帮助。

#1 楼

首先,请阅读以下内容:

https://www.blackhat.com/presentations/bh-asia-03/bh-asia-03-litchfield.pdf

这几乎就是所有的开始。

SEH缓冲区溢出是特定的堆栈溢出,其目标是EXCEPTION_REGISTRATION_RECORD沿堆栈向下任意距离。


为什么难道不是每个程序都会发生这种情况,因为无论如何都应该有一个自动异常处理程序?


是的,因为您不能在Windows上真正禁用SEH。只要您的缓冲区溢出可以达到EXCEPTION_REGISTRATION_RECORD,并且您可以触发异常。在我的示例中为EAX,EBX,ESI和EDI。)


从我的ntdll.dll版本10.0.17134.254 ...
/>
XOR拥有指向当前EAX的指针,因此如果您用有效负载地址覆盖了EXCEPTION_REGISTRATION_RECORD并将其设置为执行EXCEPTION_REGISTRATION_RECORD->Next的随机指令,则可能是攻击向量。 > EXCEPTION_REGISTRATION_RECORD->Handler已在JMP/CALL [EAX]的开始处设置为EBX。先前包含0

RtlDispatchExceptionPEXCEPTION_RECORDESIPEXCEPTION_RECORD


究竟是什么被清零的寄存器有什么用,为什么它们会中断Shellcode执行?


它们不一定。在执行处理程序之前,我们必须先经过EDI-> PCONTEXT,最终无论如何都会覆盖所有寄存器。

这就是为什么内核在返回到用户模式之前将它们保存在ntdll!KiDispatchUserException结构中的原因。
此漏洞利用并不是一个简单的ntdll!RtlDispatchException劫持。


为什么我需要POP POP RET和最终跳转?


您是不是为什么不直接将CONTEXT设置为shellcode?

这是一个ROP小工具,可将执行重定向到EIP的值。如果您利用漏洞利用了那么远的地方,那么您可以控制EXCEPTION_REGISTRATION_RECORD->Handler处的数据,但是您可能不一定事先知道这些数据。和处理程序执行。如果其中任何一个失败,程序将在运行处理程序之前终止。这些内容取决于您要定位的Windows版本。 SafeSEH是其中之一。很简单,它根据白名单验证处理程序地址,但无法验证未使用SafeSEH编译的模块中的处理程序。因此,如果POP / POP / RET来自未经SafeSEH加载和编译的模块,则ntdll无法确定它是否是恶意的。


再加上最后的一次跳动。


这是最好的部分!登陆后,我们可以将shellcode放在这里。除了我们需要完整的ESP+8之外,以便ESP+8成为漏洞利用的第一部分。 POP / RET将返回。

x86中的短跳转可以仅用2个字节进行编码。因此,此最后一次跳转在ESP+8上跳过了6个字节,因此它对于漏洞利用仍然有效。 2010年10月27日/流行音乐播放器-ret-instruction序列的需要/

评论


可能值得注意的是,这种基于堆栈的攻击在Microsoft的64位环境中不再起作用。请参阅文章osronline.com/article.cfm?article=469。对于32位程序(C ++),MS还提供了/ SAFESEH链接器选项,也可以防止此类攻击(如果我理解正确的话)。

–乔什
18-09-18在11:58