IT学习网 - 爱学习 - 最具影响力综合资讯网站 -- 中国IT界的领航者!
热门关键字:      88888  as  xxx
站外
广告
站外
广告

堆栈环境安全分析:ASRL和Shell代码的那些事儿你知多少

发布时间:2016-10-21 05:45文章来源:互联网文章作者: 佚名点击次数:
在这篇文章中,我将会针对一种新型的堆栈环境来进行安全分析。除此之外,我还会告诉大家如何自己构建一个payload来绕过ASLR(随机分配地址空间技术),整个过程与我在此前那篇文章中所描述的方法有一些略微的变化。 注:在我进行测试Windows 7系统环境中,DEP(

在这篇文章中,我将会针对一种新型的堆栈环境来进行安全分析。除此之外,我还会告诉大家如何自己构建一个payload来绕过ASLR(随机分配地址空间技术),整个过程与我在此前那篇文章中所描述的方法有一些略微的变化。

注:在我进行测试Windows 7系统环境中,DEP(数据执行保护)功能已经被禁用了。DEP是一套软硬件技术,它不仅能够防止存储在栈内存中的操作码得到直接执行,而且它还能够在内存上执行额外的安全检查以帮助防止恶意代码在目标系统中运行。

了解Windows架构下的堆栈环境

相较于Linux而言,Windows的堆栈架构则稍有不同。除了堆栈空间的架构有区别之外,Windows的调用规则也与Linux平台不一样。我待会儿会跟大家解释这些不同之处对我们意味着什么,但是在此之前,我们要先了解一下不同环境下的堆栈架构,以及各个方法之间相互调用的规则。

需要注意的是,被调用的方法(method)需要负责清除堆栈空间中所有与之相关的数据。这时我们就要明确区分出函数的主调用者和被调用者了,这一点非常的重要,因为这些函数会将数据写入我们的堆栈。

在Linux平台下,我们是以调用者的身份进行操作的,而这就意味着某个方法需要通过调用其他的方法来将正确的操作指令压入栈中,当其他的方法返回了相应的值之后,系统才会通过调用此前压入栈中的命令来清除堆栈中相关的数据。但是我们可以看到,Windows平台则是以一种被调用者的模式运行的。这也就意味着,被调用的方法将要负责清理堆栈中的相关数据。所以,Windows平台下的堆栈示意图与我们之前那张Linux环境下的堆栈结构图片大致相似,但是仍然有一些细微的区别。

Linux的堆栈结构如下图所示:

Windows的堆栈结构如下图所示:

从这张图片中我们可以看到,EIP寄存器之后还有一些数据,而ESP寄存器之后还有一些队列数据。而在ESP寄存器之前的数据就是负责清除数据的操作码,这些操作码的插入位置需要根据不同系统架构的调用规则来进行区分。我之所以要给大家介绍这些内容,是因为这些知识对于我们之后编写漏洞利用代码来说是非常重要的。所以在我们继续讲解之前,我要帮各位同学填补这部分的知识空缺。

实际上,从我们的角度来看,Windows的堆栈架构与Linux的堆栈架构有着惊人地相似之处。从广义的角度来讲,两者而唯一的区别就是Windows堆栈有ASLR。所以,这就是我们这篇文章中的主角,我们将会尝试使用这篇文章中所要介绍的漏洞利用方法来尝试绕过ASLR。接下来,让我们开始吧!

构建恶意输入

与之前RedHat8的漏洞利用过程非常相似,但我们这次只需把注意力放在一个缓冲区溢出漏洞的身上。虽然该缓冲区的具体长度要稍后才能确定,但是我们现在至少要获取到足够的信息以了解该缓冲区的实际架构。

首先,我们要解决如何绕过ASLR的问题。为此,我们要使用一个简单的机制(jmp esp),这样我们就可以跳转到ESP寄存器指向的地址。这也就意味着,我们在不知道ESP寄存器指向地址的情况下实现了相对跳转。这是一个好消息,因为就算我们的堆栈帧会存储在堆栈空间的随机位置上,但总是会有一个指针指向栈底,我们可以通过一个简单的操作码去访问这个指针地址。

所以,只要我们能够找到“jump esp”指令,我们就可以将其放入堆栈的EIP寄存器中。请记住,在这种情况下, EIP寄存器所指向的任何代码都将得到执行。剩下的就是那部分负责清除数据的代码了。实际上,我并不清楚这些代码是何时被压入栈中的。但是接下来,我们要确保的就是我们的payload会在这部分代码执行完毕之后正确运行。
堆栈环境安全分析:ASRL和Shell代码的那些事儿你知多少
本文由 IT学习网 整理,转载请注明“转自IT学习网”,并附上链接。
原文链接:http://www.ourlove520.com/Article/diannao/wangluo/519308.html

标签分类:

上一篇:上一篇:手把手教你如何从内存中提取出LastPass的用户凭证
下一篇: 下一篇:利用bash特性的攻击方式浅析,使用Sqlmap的你可能踩中了“蜜罐”
无觅关联推荐,快速提升流量