缓冲区溢出原理及教学版攻击演示

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

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

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
缓冲区溢出攻击是指攻击者通过向程序输入超出缓冲区长度的数据,从而覆盖程序的内存空间,执行恶意代码或者控制程序流程的一种攻击方式。缓冲区溢出攻击可以导致程序崩溃,甚至可以执行任意代码,造成严重的安全威胁。 缓冲区溢出攻击原理是:当用户向程序输入数据时,如果输入的数据长度超过了程序预留的缓冲区长度,就会覆盖程序内存中的其他数据,甚至可以覆盖程序代码,从而执行恶意代码。 缓冲区溢出攻击的方法主要有以下几种: 1. 栈溢出攻击攻击者通过向栈中注入超出缓冲区长度的数据,覆盖程序的返回地址,从而控制程序流程。 2. 堆溢出攻击攻击者通过向堆中注入超出缓冲区长度的数据,达到覆盖程序的指针、控制程序流程等目的。 为了防范缓冲区溢出攻击,可以采取以下措施: 1. 对用户输入进行过滤:对用户输入的数据进行验证、过滤,去掉特殊字符、注释符等敏感信息。 2. 使用编译器选项:使用编译器提供的选项,如-fstack-protector、-Wformat等,可以检测和防范缓冲区溢出攻击。 3. 使用内存保护机制:使用内存保护机制,如ASLR(地址空间布局随机化)、DEP(数据执行保护)等技术,可以保护程序的内存空间,防止缓冲区溢出攻击。 4. 使用安全编程技术:使用安全编程技术,如使用安全函数、静态分析工具等,可以有效防范缓冲区溢出攻击。 5. 定期更新程序:及时修补漏洞,更新程序软件和开发库,以避免被攻击者利用已知漏洞实施攻击

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值