首页 > 技术文章 > 缓冲区溢出基础与实践

Lyj0717 2021-10-20 08:53 原文

实验简介

实验所属系列:信息安全基础

实验对象: 本科/专科信息安全专业

相关课程及专业:信息网络安全概论、网络攻击与防御技术、渗透测试技术

实验时数(学分):4学时

实验类别:实践实验类

实验目的

1)理解缓冲区溢出的原理与危害;

2)了解防范缓冲区溢出的基本方法;

3)了解常见的缓冲区溢出攻击。

预备知识

缓冲区溢出

    缓冲区溢出是指当计算机向缓冲区内填充数据时超过了缓冲区本身的容量,溢出的数据覆盖在合法数据上。理想的情况是:程序检查数据长度并不允许输入超过缓冲区长度的字符,但是绝大多数程序都会假设数据长度总是与所分配的储存空间相匹配,这就为缓冲区溢出埋下了隐患。

    操作系统所使用的缓冲区,又被称为"堆栈"。在各个操作进程之间,指令会被临时储存在“堆栈”中,“堆栈”也会出现缓冲区溢出。

    缓冲区溢出的危害:在当前网络与分布式系统安全中,被广泛利用的50%以上都是缓冲区溢出,其中最著名的例子是1988年利用fingerd漏洞的蠕虫。而缓冲区溢出中,最为危险的是堆栈溢出,因为入侵者可以利用堆栈溢出,在函数返回时改变返回程序的地址,让其跳转到任意地址,带来的危害是:一种情况是程序崩溃导致拒绝服务,另外一种就是跳转并且执行一段恶意代码,比如得到shell,然后为所欲为。

MS12-020漏洞

    微软于2012年3月12日发布安全公告,公布了MS12-020漏洞,漏洞级别为严重,这个级别是微软所有漏洞级别的最高级别,意即会对服务和企业运营造成巨大损失。

    这个漏洞的定义是指操作系统的远程桌面协议存在重大漏洞,入侵者(黑客)可以通过向远程桌面默认端口(3389)发一系列特定RDP包,从而获取超级管理员权限,进而入侵系统。

    若该主机同时提供80端口服务,那么疑似有相对更大的隐患。

    根据微软的安全公告,Windows全系列操作系统(WinXP/Vista/Win7/Win2000/ Win2003/Win2008)均存在受控威胁。但因为远程桌面管理的特殊性,几乎所发现的主机都是服务器,PC机暂未发生。

    21

    防护过程中最重要的就是开启自动更新,接受microsoft的更新。

    如果没有开启自动更新,或是不能确定该补丁包有否更新,请登录:  http://www.microsoft.com/downloads/zh-cn/details.aspx?familyid=b69b4b9b-c0a1-4c1e-b081-8529eaf1536a

    下载补丁更新,页面为2003SP2的补丁,页面下方的列表有支持其他操作系统的补丁。

    防护过程的第二步是修改远程桌面端口或是设置远程桌面允许的白名单IP。

Metasploit工具

    Metasploit是一款开源的安全漏洞检测工具,可以帮助安全和IT专业人士识别安全性问题,验证漏洞的缓解措施,并对安全性进行评估,提供真正的安全风险情报。这些功能包括智能开发,密码审计,Web应用程序扫描,社会工程等。

    Metasploit是一个攻击工具开发平台,可以扩展的模型将负载控制,编码器,无操作生成器和漏洞整合在一起,使 Metasploit Framework 成为一种研究高危漏洞的途径。它集成了各平台上常见的溢出漏洞和流行的 shellcode ,并且不断更新。最新版本的 MSF 包含了750多种流行的操作系统及应用软件的漏洞,以及224个 shellcode 。作为安全工具,它在安全检测中用着不容忽视的作用,并为漏洞自动化探测和及时检测系统漏洞提供了有力保障。

实验环境

实验环境为两台互相连网Windows主机。拓扑图如下:

3

说明:

1. 网络环境中有两台主机,有一台主机在实验环境可见并可登录,我们称为实验机(客户机);另一台主机不可见,但从实验机可以访问,这台主机即为本次实验任务的攻击目标,我们称为目标机。

2. 实验机IP为:10.1.1.35;目标机IP为:10.1.1.2。

实验步骤一

任务一:使用给定的程序测试缓冲区溢出

 

1、登录到实验机上。

2、查看可引起缓冲区溢出的代码。

阅读一段C语言代码,思考下这些代码是否存在问题,代码如下:

/*

*buffer.c

 */

#include <stdio.h>

int main()

{

char name[8];

printf(“Please input your name: ”);

gets(name);

printf(“your name is : %s!”, name);

return 0;

}

 

3、切换到命令行。

点击开始->运行,输入cmd后进入命令行,如下图所示:

 

4、测试缓冲区溢出。

在系统命令行下,切换到C盘的根目录下,使用dir命令查看,其中buffer.exe为本任务的实验程序:

 

 

在提示符下输入buffer运行程序,输入bjhit,发现程序正常运行!

 

 

继续进行测试,输入my name is bjhit,这时候程序出现异常!

 

 

5、反复测试与思考。

再次运行buffer.exe,更换输入内容(每次大于10个),查看每次返回结果。

并思考:为什么会出现异常?为什么每次返回内容不同?如何修改程序防止缓冲区溢出。

注:在测试过程中,如果实验机不再响应键盘鼠标操作,可能是在测试缓冲区溢出时破坏了实验的系统环境,此时需重启实验机。

实验步骤二

任务二:利用溢出工具溢出目标系统,获取目标系统shell

 

在cmd下切换到C:\目录下,查看该目录下的文件,可以看到有个文件dns.exe,这个文件即是我们本次实验的溢出工具。如下图所示:

 

 

运行dns.exe工具,仔细查看使用说明:

 

 

按照使用说明扫描目标主机。

 

仔细观察返回结果与说明。

按照说明对目标主机进行溢出

 

 

仔细观察返回结果说明。

使用telnet与远程主机建立连接。

 

 

观察建立连接后结果。

 

输入ipconfig /all 命令查看目标主机信息,看是否拿到目标主机shell。

 

 

实验步骤三

任务三:利用MS12-020漏洞溢出目标系统,使目标系统瘫痪

1、运行Metasploit console。

 

 

启动后界面如下图所示:

 

2、对目标主机进行信息收集。

在msf>提示符下输入命令:db_nmap -sT -p3389  10.1.1.2, 收集目标主机信息,并对返回的信息进行分析。

 

可以看到目标主机的相关信息,如操作系统为windows2003,开放了3389远程桌面等等。

搜索一下这个漏洞的利用模块:search ms12_020

 

3、利用ms12_020漏洞,对目标机进行攻击。

在msf命令提示符下,

输入use auxiliary/dos/windows/rdp/ms12_020_maxchannelids命令,并设置相关的参数,如下图:

 

 

使用exploit命令进行利用,查看攻击结果

 

ping 目标主机,查看主机是否瘫痪。

ping 10.1.1.2

 

 

 

实验报告要求

对实验结果进行分析,完成思考题目,总结实验的心得体会,并提出实验的改进意见。

分析与思考

1)写出实验完成过程,并回答各实验任务的相关问题。

2)拿到目标系统的shell后,为了以后进入该系统,思考有无其他的利用方法?

 

 

推荐阅读