首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SEH如何利用旁路DEP和ASLR?

SEH如何利用旁路DEP和ASLR?
EN

Security用户
提问于 2013-09-12 11:58:31
回答 2查看 2.9K关注 0票数 4

我刚开始使用基于结构化异常处理的攻击。

为什么我们不直接将返回地址放在SE处理程序中以跳转到SE代码呢?(没有安全的SEH)

有人能解释一下为什么要使用流行音乐吗?

我读到一些东西说SEH绕过ASLR和DEP,但是怎么做?

我们的外壳代码将位于堆栈上,并且由于堆栈仍然是不可执行的,如何绕过DEP?

EN

回答 2

Security用户

发布于 2014-03-02 11:33:07

http://www.exploit-db.com/wp-content/themes/exploit/docs/17505.pdf

使用SEH来实现利用,既不是DEP,也不是ASLR。

特别是,DEP将减少堆栈内存页上外壳代码的执行,这最终是基于SEH的漏洞试图实现的目标。

如果进程间隔中没有一个非ASLR模块来定位SEH利用关键的POP POP RET,则ASLR将继续阻碍开发。

正如Van在他的评论中所建议的,ROP (以及模块基本地址发现的信息泄漏)对于DEP和ASLR失败是必要的。

票数 2
EN

Security用户

发布于 2018-08-29 15:18:37

  1. 假设外壳代码在堆栈上,我们不会将外壳代码的地址放在异常处理程序的地址中(您称之为“返回地址”),因为Windows有一些基本的防御机制,可以防止异常跳转到堆栈上的地址。SEH经常被滥用,并且被反复使用,所以它被创建了。今天,SafeSEH定义了允许异常跳转到它们的确切地址,因此使用SafeSEH攻击将无法工作。
  2. 我们使用pop, pop, ret,因为我们可以很容易地在文本段中找到这段代码。正如我前面解释的,我们不能跳到堆栈上的地址,但是我们可以跳到文本段。pop, pop, ret跳转到下一个SEH记录的地址,因为在异常处理程序开始运行时,ESP距它只有8个字节。注意,我们控制这个值。

在winDBG中:

代码语言:javascript
复制
0:000> !exchain
*0012ffb0*: seh_overflow!ILT+85(__except_handler4)+0 (0041105a)
0012ffe0: kernel32!ValidateLocale+2b0 (7c839ac0)
Invalid exception stack at ffffffff
0:000> g
(614.f68): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
:
0:000> dd esp L4
0012f6f8  7c9032a8 0012f7e0 *0012ffb0* 0012f7fc
  1. 有时我们无法绕过DEP。但是,如果我们看到有一个易受攻击的DLL,我们可以通过调用VirtualProtect来利用这个漏洞来改变堆栈的内存保护以包含可执行位,而不是跳转到外壳代码。

我还问了一个问题关于这个问题,你可能想看看

票数 1
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/42314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档