Linux下溢出漏洞利用学习
Linux下溢出漏洞利用学习
背景:从进入计算机领域已有近八年的时间了,自我感觉在整体轮廓上对各层次都有了一定的了解。但就安全领域来说,却是实实在在的门外汉;然而安全话题却一直引领计算机行业的发展。最近看了不少关于黑客及逆向工程方面的资料,自认有了一定的了解;尤其在学习Xfocus出版的《网络渗透技术》时,发现溢出漏洞的发现和利用原来是这么回事。下面就我所理解的和基于书上所展示的实例,说说Linux环境下的漏洞是怎样的以及是如何利用的。适宜读者:想了解溢出漏洞的小白;熟悉Linux环境下的C编程,熟悉Gcc与Gdb;熟悉Linux下的AT&T汇编;了解Perl
1. 编程环境
2. 一个溢出漏洞实例
3. 溢出是如何发生的
4. 如何编写及提取Shellcode
5. 怎样利用溢出漏洞
1. 编程环境
我的测试环境是Red Hat 9.0。当然你也可以使用其他的Linux版本,不过在高版本的Linux环境下可能会有防溢出机制(比如说Ubuntu 7.10);尽管说在这种环境下也许有高人可以做到溢出利用,但这已不属于本文章的范畴。如果你是小白,如果你想一次成功,推荐你先在RH9中测试。
在利用漏洞时使用的是perl脚本;这里并不需要你有太深的perl功底,只要能理解这里使用的几条语句就行了。当然,在你的Red Hat上一定要安装gcc、gdb和perl解释器,这些在安装光盘里都可以找到。
2. 一个溢出漏洞实例
为了在直观上对溢出有个清晰的理解,我们先给出一个非常简单的溢出漏洞实例。首先看一个有溢出漏洞的简单程序vulnerable.c:
#include <stdio.h> |
程序中在使用strcpy函数时,因为没有检测字符串的长度而导致当argv[1]串长超过16字节时就会出现缓冲区溢出现象。使用gcc命令将vulnerable.c编译为可执行程序vulnerable,命令为gcc -o vulnerable vulnerable.c,如下图所示:
为了在本地利用该漏洞,我们需要精心构造shellcode,下面是用perl写的利用程序exploit.pl:
#!/usr/bin/perl |
其中,上面提到的两个程序附在附件中(这里需要注意的是exploit.pl在创建后需要修改属性才能执行)。上面的shellcode是精心构造过的,在后面的构造shellcode章节将讲述。
运行exploit.pl我们将得到一个shell(sh-2.05b$):
如果你能得到控制台(sh-2.05b$),就代表你已经攻击成功了。下面我们将详细讲述溢出漏洞相关的内容。
|
评论暂时关闭