极光小课堂 | 缓冲区溢出原理

  原   理  

简单说下其原理:通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,进而运行精心准备的指令,以达到攻击的目的。

极光小课堂 | 缓冲区溢出原理_第1张图片

如上图,程序的缓冲区比作一个个格子(内存单元),每个格子中存放不同的东西,有的是命令,有的是数据,当程序需要接收用户数据,程序预先为之分配了4个格子(上图中黄色的0~3号格子)。

按照程序设计,就是要求用户输入的数据不超过4个。

而用户在输入数据时,假设输入了16个数据,而且程序也没有对用户输入数据的多少进行检查(这种情况太常见了,windows 系统本身就出过 n 个缓冲区溢出漏洞),就往预先分配的格子中存放,这样不仅4个分配的格子(内存)被使用了,其后相邻的12个格子中的内容都被新数据覆盖。


一般情况下后面的格子是可以被当成代码执行的,嘿嘿,那么好玩的事情来了,我们可以精心制造一段指令,比如格式化硬盘指令来让cpu执行。

极光小课堂 | 缓冲区溢出原理_第2张图片

   实 例 演 示   

接下来通过一个实例来演示如何利用缓冲区溢出漏洞来攻击目标主机。


漏洞测试环境介绍:
操作系统:winxp(被攻击方,在虚拟机里), win7(攻击方)


漏洞挖掘软件:FTPFuzz,这货可以构建任意数据结合ftp命令发送给服务器,查找溢出漏洞用的。


漏洞测试目标软件:GoodFTP Server ,这是一个架设FTP服务器的软件。


辅助软件:OllyICE ,用来跟踪程序的运行过程,破解程序必备 。

1

首先,用OllyIce打开GoodFTP,因为程序接受到ftp命令是一串文本,所以会用到一个名为strstr的api函数,所谓api函数就是操作系统课上讲的系统调用了。

2

然后给strstr下个断点,让程序运行到这里的时候暂停下来,以便观察情况。如下图,左起第一列是内存地址(虚地址),第二第三列是机器码与对应的汇编代码,最后一列就是寄存器里的内容了。极光小课堂 | 缓冲区溢出原理_第3张图片

3

请出刚才提到的漏洞挖掘软件——FTPFuzz,设置一下让它不断向目标主机的21号端口发送AAAAAAAAAAAA……

极光小课堂 | 缓冲区溢出原理_第4张图片

4

回到OllyIce中,因为程序收到数据后会将之当成文本处理,这时系统会用到刚才提到的strstr函数了,于是就暂停下来,因为之前下了一个断点(黄色的地方)。

极光小课堂 | 缓冲区溢出原理_第5张图片

5

我们观察一下寄存器部分,比如ECX寄存器所指向的内存单元里有一大堆的A,说明已经收到了数据正准备处理呢。

极光小课堂 | 缓冲区溢出原理_第6张图片

6

继续执行下去,终于提示出错了,说内存地址4141414141不可读,嘿嘿,cpu把我们发送的数据AAAAA…….当成指令来执行了。

极光小课堂 | 缓冲区溢出原理_第7张图片

发挥下想象力,如果那个内存区域不是一大堆的41,而是我们精心准备好的指令呢?

7

下面是我们的攻击代码,其作用是向目标主机发送我们精心准备的数据,也就是shellcode变量部分,介时目标主机将执行这部分指令。

极光小课堂 | 缓冲区溢出原理_第8张图片

上面是一段python代码,变量shellcode的内容是一段x86指令集的机器码,这些机器码的作用是弹出一个对话框。


然后执行刚才的该pythone脚本,可以看到执行成功的提示了,这时我们回到虚拟机看看GoodFtp怎样了。


注意箭头所指,溢出攻击成功!目标系统成功执行我们发送的指令了。

极光小课堂 | 缓冲区溢出原理_第9张图片

    总   结   

小结:现在的操作系统一般都会有相应的措施,来应对缓冲区溢出漏洞。比如栈随机化、栈检测等。此外,合理的给各种应用分配权限也是一种办法。

关于极光

极光(Aurora Mobile,纳斯达克股票代码:JG)成立于2011年,是中国领先的开发者服务提供商。极光专注于为移动应用开发者提供稳定高效的消息推送、即时通讯、统计分析、极光分享、短信、一键认证、深度链接等开发者服务。截止到2019年12月份,极光已经为超过50万移动开发者和145.2万款移动应用提供服务,其开发工具包(SDK)安装量累计336亿,月度独立活跃设备13.6亿部。同时,极光持续赋能开发者和传统行业客户,推出精准营销、金融风控、市场洞察、商业地理服务产品,致力于为社会和各行各业提高运营效率,优化决策制定。

你可能感兴趣的:(极光小课堂 | 缓冲区溢出原理)