首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >缓冲区/堆溢出-执行内容的寄存器

缓冲区/堆溢出-执行内容的寄存器
EN

Security用户
提问于 2012-07-11 11:30:28
回答 1查看 3.4K关注 0票数 5

当执行缓冲区溢出/堆溢出时,EIP是否指示接下来将执行哪个部分?此外,在利用具有缓冲区溢出漏洞的部分时,ESP在执行后是否会指向攻击代码的开始(这将是shell代码和gibbersih的一些组合)?

如果这看起来太模糊了,谁能给我看一下,在执行漏洞的过程中,每个寄存器会指向什么?

EN

回答 1

Security用户

发布于 2012-07-11 17:48:43

ESP是否指向漏洞代码的开始(这将是shell代码和gibbersih的一些组合)?

实际上,EIP将指向攻击代码的开始,而不是ESP。在典型的堆栈缓冲区溢出中,ESP将继续处于有/没有利用代码的位置。唯一需要覆盖的是EIP,将其更改为内存中的不同地址--在那里您已经以某种方式“植入”了您的开发代码。

为了举例说明,让我们看看堆栈的关系图和各种寄存器的注释值:

让我们假设在被调用函数中有一个可利用的缓冲区,其中可以提供任意数量的数据(gets、rougue等)。攻击者计算存储返回地址(EIP)的堆栈上位置之前的确切字节数。因此输入可以是形式的(每个块对应于下面的每一行)。

代码语言:javascript
复制
AAAAAAAA AAAAAAAA AAAAAAAA AAAAAAAA AAAAAAAA 0834FD4C

其中0834FD4C是新的指令指针,攻击者希望在保存的EIP位置上放置,而前面的A只是到达EIP的垫片(记住堆栈向下增长)。

溢出之后,让我们假设堆栈如下所示:

此时,攻击者已经成功地植入了新的EIP。每当被调用函数返回时,ret指令将弹出保存的EIP (现在是0x0834FD4C)到%eip寄存器,控制流将从这个内存地址恢复,并开始执行它在那里找到的任何指令。同样,攻击者必须确保预先将利用漏洞的代码放置在此位置。

被叫人返回后:

EBP :可以根据攻击者在越界缓冲区中提供的数据进行更改或更改。请记住,由于他必须在到达EIP之前践踏EBP,当然他也必须为EBP提供一个值。通常,攻击者将非常勤奋地枚举堆栈,以确定当前的EBP并将其放置到有效负载中,使其与以前相同。就像。他可以(而且应该)提供如下内容:

代码语言:javascript
复制
AAAAAAAA AAAAAAAA AAAAAAAA AAAAAAAA 082376ED 0834FD4C

其中082376ED是现有的EBP。这将确保它不会在任务中更改为覆盖EIP的任意值。

EIP :它被更改为新值。

ESP :不管缓冲区溢出与否,它都会恢复到相同的值。

因此,函数返回后,您将处于旧调用方的堆栈框架中,但将执行其他代码。

为了好玩和利润而捣毁这堆东西是获取更多信息的极好来源。

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

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

复制
相关文章

相似问题

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