20155309 南皓芯 缓冲区溢出漏洞实验

了解

缓冲区漏洞是一种非常普遍、非常危险的漏洞,在各种操作系统、应用软件中广泛存在。利用缓冲区溢出攻击,可以导致程序运行失败、系统宕机、重新启动等后果。更为严重的是,可以利用它执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作。

一、实验简介

缓冲区溢出攻击:通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,造成程序崩溃或使程序转而执行其它指令,以达到攻击的目的。本课程将带领大家重现攻击理解此漏洞。

二、实验准备

系统用户名shiyanlou

实验楼提供的是64位Ubuntu linux,而本次实验为了方便观察汇编语句,我们需要在32位环境下作操作,因此实验之前需要做一些准备。

1、输入命令安装一些用于编译32位C程序的东西:

我们依次输入以下命令
1.sudo apt-get update
2.sudo apt-get install lib32z1 libc6-dev-i386
3.sudo apt-get install lib32readline-gplv2-dev

1071511-20171029110020117-691463690.png

三、实验步骤

3.1 初始设置

Ubuntu和其他一些Linux系统中,使用地址空间随机化来随机堆(heap)和栈(stack)的初始地址,这使得猜测准确的内存地址变得十分困难,而猜测内存地址是缓冲区溢出攻击的关键。因此本次实验中,我们使用以下命令关闭这一功能:
sudo systc1 -w kernel.randomize_va_space=0

此外,为了进一步防范缓冲区溢出攻击及其它利用shell程序的攻击,许多shell程序在被调用时自动放弃它们的特权。因此,即使你能欺骗一个Set-UID程序调用一个shell,也不能在这个shell中保持root权限,这个防护措施在/bin/bash中实现。

linux系统中,/bin/sh实际是指向/bin/bash或/bin/dash的一个符号链接。为了重现这一防护措施被实现之前的情形,我们使用另一个shell程序(zsh)代替/bin/bash。下面的指令描述了如何设置zsh程序:
1.sudo su
2.cd/bin
3.rm sh
4.ln -s zsh sh
5.exit

20155309 南皓芯 缓冲区溢出漏洞实验

20155309 南皓芯 缓冲区溢出漏洞实验

现在我们要得到shellcode在内存中的地址,输入命令:

1.gdb stack

2.disass main

结果如下:

1071511-20171029150855820-1578058618.png

通过root攻击,我们已经或得了root权限

遇到的问题

1.在实验的时候由于没将漏洞程序与攻击程序同时放入tmp中导致了失败,后来修改后就可以了。

感悟与体会

通过分析漏洞,也思考了一些漏洞攻击的防范问题。整个防范措施大概有源码级保护方法、运行期保护方法、阻止攻击代码执行、加强系统保护等几种。对于源码保护,可以提高警惕,在编写程序时对于涉及缓冲区的部分进行严格的边界检查,防止溢出。也可以利用漏洞扫描工具对源码中可能存在缓冲区溢出漏洞的代码部分分析,寻找bug并解决。运行期保护主要研究如何在程序运行的过程中发现或阻止缓冲区溢出攻击。比如数组边界检查,检查数组实际长度是否超过了分配的长度,如果超过,立即进行相应的处理。阻止攻击代码执行,可以设定堆栈数据段不可执行,这样就可以避免被攻击。加强系统保护主要是保护系统信息、关闭不需要的服务、最小权限原则、使用系统的堆栈补丁、检查系统漏洞并及时为软件打上安全补丁

转载于:https://www.cnblogs.com/nhx19970709/p/7750616.html

相关资源:南网2013计量自动化上行规约调试软件-互联网文档类资源-CSDN文库

来源:巷中人

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2017年9月26日
下一篇 2017年9月26日

相关推荐