CiscoIOS系统缓冲区溢出攻击研究

合集下载

缓冲区溢出攻击实验

缓冲区溢出攻击实验

HUNAN UNIVERSITY课程实验报告题目: Buflab-handout学生姓名学生学号专业班级计科1403(一)实验环境联想ThinkPadE540 VM虚拟机ubuntu32位操作系统(二)实验准备1.使用tar xvf命令解压文件后,会有3个可执行的二进制文件bufbomb,hex2raw,makecookie。

bufbomb运行时会进入getbuf函数,其中通过调用Gets函数读取字符串。

要求在已知缓冲区大小的情况下对输入的字符串进行定制完成特定溢出操作。

从给的PDF文件中我们得知getbuf函数为:/ /Buffer size for getbuf#define NORMAL_BUFFER_SIZE 32int getbuf(){char buf[NORMAL_BUFFER_SIZE];Gets(buf);return 1;}这个函数的漏洞在于宏定义的缓冲区的大小为32,若输入的字符串长于31(字符串末尾结束符)则会导致数据的覆盖,从而导致一系列损失;在此实验中,我们正是利用这个漏洞来完成实验。

2. hex2raw可执行文件就是将给定的16进制的数转成二进制字节数据。

Makecookie是产生一个userid。

输入的相应的用户名产生相应的cookie值。

**我产生的cookie值为0x5eb52e1c,如下图所示:Level0:实验要求:从英文的PDF文件中的“Your task is to get BUFBOMB to execute the code for smoke when getbuf executes its return statement,rather than returning to test. Note that your exploit string may also corrupt parts of the stack not directlyrelated to this stage, but this will not cause a problem, since smoke causes the program to exit directly.”这句话看出实验让我们在test运行完后,不直接退出,而是跳到smoke函数处执行然后退出,这点很重要!(本人之前一直没有成功就是错在这儿)Test源码:void test(){int val;// Put canary on stack to detect possible corruptionvolatile int local = uniqueval();val = getbuf();// Check for corrupted stackif (local != uniqueval()) {printf("Sabotaged!: the stack has been corrupted\n");}else if (val == cookie) {printf("Boom!: getbuf returned 0x%x\n", val);validate(3);} else {printf("Dud: getbuf returned 0x%x\n", val);}}smoke源码:void smoke(){printf("Smoke!: You called smoke()\n");validate(0);exit(0);}对bufbomb函数进行反汇编并获取getbuf函数的反汇编代码:从上面的汇编代码中我们可以得知,lea指令把buf的指针地址(-0x28(%ebp))传给了Gets()。

Cisco IOS堆管理和保护机制及其脆弱性研究

Cisco IOS堆管理和保护机制及其脆弱性研究
maa e n a d rt cin n g met n poe t meh n m, a d t d o te rn iit o te o cai s n su y n h fa gbly f h me h ns i ca i m whn ei ig e p v rl e rs tn h a o efo s w a t c ta k. Afe ta , sme tr ht o ef cie p ra h s r dsusd o mpo e h meh ns o l ha ma a e n a d rtc in a d o n a c te a ut o lS o eit f etv a po c e a e i se t i rv te c c aim f OS e p n g me t n poe t , n t e hn e h fc ly f O t rs o s
维普资讯
_ _ _ 柄 再 掌0 广 ≥0
C s o l S堆管理和保护机 制及其脆 弱性研 究 i O c
范俊 俊 ,鲁 云 萍
( 江南 计算技术研究所 ,江苏 无锡 2 4 8 ) 10 3
Hale Waihona Puke 摘要 :缓冲 区堆 溢 出攻 击是 目前 Cc 路 由器的主要安 全威胁 。该 文分析 了 Cc l 堆 管理和保护机制 的工作原理 ,研 究其 面 io s io O s S
2 2 Cso lS堆块管理 结构 . i O c
2 Cic OS堆管理机制研 究 s ol
2 1 Cso lS存储器结构 . i O c
Ci c s 0路 由器 实 际 上 是 一 个 嵌 入 式 系统 ,用 于 实 现
C so [ ic OS使用 动态 内存分 配机 制 ,在 内存 中划 分 出 专 门的 区域 ( 区 ) 堆 ,应用 程 序可 以动 态地 从 中 申请 所 需 大 小 的内存 块使 用 ,这些 内存 块 也就 是堆块 。[ OS使 用双 向链 表管 理 堆块 ,用 一个 双 向 链表 将所 有堆 块连 在 一起 ,

缓冲区溢出攻击的基本原理

缓冲区溢出攻击的基本原理

缓冲区溢出攻击的基本原理
缓冲区溢出攻击(Buffer Overflow Attack)是一种常见的安全漏洞,指的是攻击者利用输入数据的长度或格式错误,超出程序设计者预留的存储空间范围,从而写入到相邻内存空间中,进而控制程序的执行或修改程序的行为。

缓冲区溢出攻击的基本原理如下:
1.内存分配:程序在运行时会根据变量类型和长度来分配内存空间。

2.缓冲区溢出:攻击者通过向程序输入异常数据,超出了程序预留的内存空
间。

3.覆盖关键数据:溢出的数据覆盖了原本存储的数据,可能是程序的返回地
址、函数指针等关键信息。

4.控制程序行为:攻击者利用溢出的数据修改程序的执行路径,跳转到自己
准备好的恶意代码。

5.执行恶意代码:程序执行了攻击者注入的恶意代码,可能导致系统崩溃、
拒绝服务或远程执行任意命令。

为了避免缓冲区溢出攻击,开发人员可以采取以下措施:
•使用安全的编程语言和工具,如内存安全的语言(如Rust)或经过良好测试的C/C++库。

•限制输入数据的长度,确保不会超过缓冲区可容纳的大小。

•进行输入验证和过滤,确保输入数据符合预期的格式和范围。

•定期更新软件和操作系统,及时修补已知的漏洞。

•实施数据执行保护(DEP)和地址空间布局随机化(ASLR)等安全机制。

综上所述,缓冲区溢出攻击是一种常见的安全漏洞,它利用错误处理输入数据的程序中的缺陷,从而控制程序行为。

开发人员和系统管理员应该密切关注安全问题,采取相应的防护措施,以保护系统和用户的信息安全。

缓冲区溢出原因及解决

缓冲区溢出原因及解决

第三讲缓冲区溢出n1 缓冲区溢出问题简介n2 几种典型的缓冲区溢出n3 防范措施缓冲区溢出1 缓冲区溢出问题简介缓冲区溢出是一种常见的漏洞.据统计,通过缓冲区溢出进行的攻击占所有系统攻击总数的80%以上.这种错误的状态发生在写入内存的数据超过了分配给缓冲区的大小的时候,就像一个杯子只能盛一定量的水,如果放到杯子中的水太多,多余的水就会一出到别的地方。

由于缓冲区溢出,相邻的内存地址空间被覆盖,造成软件出错或崩溃。

如果没有采取限制措施,可以使用精心设计的输入数据使缓冲区溢出,从而导致安全问题。

缓冲区溢出缓冲区溢出问题的历史很长一段时间以来,缓冲区溢出都是一个众所周知的安全问题, C程序的缓冲区溢出问题早在70年代初就被认为是C语言数据完整性模型的一个可能的后果。

这是因为在初始化、拷贝或移动数据时,C语言并不自动地支持内在的数组边界检查。

虽然这提高了语言的执行效率,但其带来的影响及后果却是深远和严重的。

•1988年Robert T. Morris的finger蠕虫程序.这种缓冲区溢出的问题使得Internet几乎限于停滞,许多系统管理员都将他们的网络断开,来处理所遇到的问题. •1989年Spafford提交了一份关于运行在VAX机上的BSD版UNIX的fingerd的缓冲区溢出程序的技术细节的分析报告,引起了部分安全人士对这个研究领域的重视•1996年出现了真正有教育意义的第一篇文章, Aleph One在Underground发表的论文详细描述了Linux系统中栈的结构和如何利用基于栈的缓冲区溢出。

缓冲区溢出Aleph One的贡献还在于给出了如何写开一个shell的Exploit的方法,并给这段代码赋予shellcode的名称,而这个称呼沿用至今,我们现在对这样的方法耳熟能详--编译一段使用系统调用的简单的C程序,通过调试器抽取汇编代码,并根据需要修改这段汇编代码。

•1997年Smith综合以前的文章,提供了如何在各种Unix变种中写缓冲区溢出Exploit更详细的指导原则。

缓冲区溢出攻击实验报告

缓冲区溢出攻击实验报告

缓冲区溢出攻击实验报告班级:10网工三班学生姓名:谢昊天学号:1215134046实验目的和要求:1、掌握缓冲区溢出的原理;2、了解缓冲区溢出常见的攻击方法和攻击工具;实验内容与分析设计:1、利用RPC漏洞建立超级用户利用工具scanms.exe文件检测RPC漏洞,利用工具软件attack.exe对172.18.25.109进行攻击。

攻击的结果将在对方计算机上建立一个具有管理员权限的用户,并终止了对方的RPC服务。

2、利用IIS溢出进行攻击利用软件Snake IIS溢出工具可以让对方的IIS溢出,还可以捆绑执行的命令和在对方计算机上开辟端口。

3、利用WebDav远程溢出使用工具软件nc.exe和webdavx3.exe远程溢出。

实验步骤与调试过程:1.RPC漏洞出。

首先调用RPC(Remote Procedure Call)。

当系统启动的时候,自动加载RPC服务。

可以在服务列表中看到系统的RPC服务。

利用RPC漏洞建立超级用户。

首先,把scanms.exe文件拷贝到C盘跟目录下,检查地址段172.18.25.109到172.18.25.11。

点击开始>运行>在运行中输入cmd>确定。

进入DOs模式、在C盘根目录下输入scanms.exe 172.18.25.109-172.18.25.110,回车。

检查漏洞。

2.检查缓冲区溢出漏洞。

利用工具软件attack.exe对172.18.25.109进行攻击。

在进入DOC 模式、在C盘根目录下输入acctack.exe 172.18.25.109,回车。

3,利用软件Snake IIS溢出工具可以让对方的IIS溢出。

进入IIS溢出工具软件的主界面.IP:172.18.25.109 PORT:80 监听端口为813单击IDQ溢出。

出现攻击成功地提示对话框。

4.利用工具软件nc.exe连接到该端口。

进入DOs模式,在C盘根目录下输入nc.exe -vv 172.18.25.109 813 回车。

缓冲区溢出攻击与防范实验报告

缓冲区溢出攻击与防范实验报告

缓冲区溢出攻击与防范实验报告——计算机网络(2)班——V200748045黄香娥1·缓冲区溢出的概念:缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量溢出的数据覆盖在合法数据上,理想的情况是程序检查数据长度并不允许输入超过缓冲区长度的字符,但是绝大多数程序都会假设数据长度总是与所分配的储存空间想匹配,这就为缓冲区溢出埋下隐患.操作系统所使用的缓冲区又被称为"堆栈". 在各个操作进程之间,指令会被临时储存在"堆栈"当中,"堆栈"也会出现缓冲区溢出。

2·缓冲区溢出的危害:在当前网络与分布式系统安全中,被广泛利用的50%以上都是缓冲区溢出,其中最著名的例子是1988年利用fingerd漏洞的蠕虫。

而缓冲区溢出中,最为危险的是堆栈溢出,因为入侵者可以利用堆栈溢出,在函数返回时改变返回程序的地址,让其跳转到任意地址,带来的危害一种是程序崩溃导致拒绝服务,另外一种就是跳转并且执行一段恶意代码,比如得到shell,然后为所欲为。

3·缓冲区溢出原理:由一个小程序来看://test.c#include "stdio.h"#include "stdlib.h"#include "string.h"void overflow(void){char buf[10];strcpy(buf,"0123456789123456789");}//end overflowint main(void){overflow();return 0;}//end main按F11进入"Step into"调试模式,如下:按F11跟踪进入overflow,让程序停在6,现在再看一下几个主要参数:esp=0x0012ff30,eip发生了变化,其它未变。

缓冲区溢出攻击的原理分析与防范

缓冲区溢出攻击的原理分析与防范

3、缓冲区溢出的防御方法
3.1、写正确的代码的方法 3.2、通过操作系统使得缓冲区不可执行,从而阻止攻击者植入攻击代码 3.3、利用编译器的数组边界检查来实现缓冲区的保护 3.4、在程序指针失效前进行完整性检查
4、总结与展望
4.1全文总结
4.2 展望
5、参考文献
本课题的研究意义
随着信息与网络技术的发展,以及这些技术在军事领域 的不断渗透,计算机网络已成为连接未来信息化战场的枢纽。 对计算机的攻击,能够获得大量宝贵的情报以及达到其它武 器系统所不能及的效果。因此对以计算机为基础的网络攻击 与防护就自然成为军事领域密切关注的问题。近年来,缓冲 区溢出漏洞的广泛性和破坏性受到国内外信息安全研究领域 的极切关注。从1988年CERT(计算机紧急响应小组)成立以来, 统计到的安全威胁事件每年以指数增长。缓冲区溢出攻击作 为网络攻击一种主要形式占所有系统攻击总数的80%以上[1]。 这种缓冲区溢出漏洞可以发生在不同的操作系统以及不同的 应用程序上。 缓冲区溢出攻击是黑客攻击的主要手段,给网络信息安全 带来了越来越大的危害。已有的防御手段研究相对滞后,目 前国内外的研究大多集中在某个具体漏洞的利用与防范上, 缺乏全面的研究。并且现有的缓冲区溢出防御手段也存在诸 多不足之处。论文主要是对缓冲区溢出攻击的原理分析与防 范进行深入研究。 论文首先介绍了缓冲区和堆栈的基本概念,研究并总结了 缓冲区溢出的原理和过程,并介绍了一些常用的攻击方法。 在此基础上,论文研究并总结了目前防御缓冲区溢出攻击的 一些常用方法,主要从主客观两方面来讨论。主观方面,主 要是要提高程序员编写代码的质量,形成良好的编程风格; 客观方面,主要是从系统和软件做一些相关的检查和优化。
缓冲区溢出影响及危害
• 在几乎所有计算机语言中,不管是新的语言还是旧的 语言,使缓冲区溢出的任何尝试通常都会被该语言本身自 动检测并阻止(比如通过引发一个异常或根据需要给缓冲 区添加更多空间),但是有两种语言不是这样:C和C++ 语言。C\C++语言由于其针灵活应用的特性,通常允许让 额外的数据乱写到其余内存的任何位置,而这种情况可能 被利用从而导致意想不到的结果。而且,用C\C++编写正 确的代码来始终如一地处理缓冲区溢出则更为困难;很容 易就会意外地导致缓冲区溢出。更重要的一点就是C\C++ 的应用非常广泛,例如,Red Hat Linux 7.1中86%的代码 行都是用C或C++编写的。因此,大量的代码对这个问题 都是脆弱的,出现缓冲区溢出也就是常见的事情。 缓冲区溢出漏洞很容易被蠕虫病毒利用造成了很大的 危害,如2001年7月19日,CodeRed蠕虫爆发,造成的损 失估计超过20亿美元[2],2001年9月18日,Nimda蠕虫被 发现,造成的损失更大,超过26亿美元,2002年Slapper 蠕虫出现,2003年1月25日Slammer蠕虫爆发,2004年5 月1日,“震荡波”被发现,这几个病毒对网络安全造成 的破坏之大是前所未有的。而以上病毒都利用了缓冲区溢 出漏洞。

缓冲区溢出

缓冲区溢出

第4章缓冲区溢出内容提要缓冲区溢出是一种常见的软件漏洞形式,可被用于实现远程植入、本地提权、信息泄露、拒绝服务等攻击目的,具有极大的攻击力和破坏力。

学习缓冲区溢出原理和利用有助于巩固自身安全,加强系统防御。

本章包含六个实验,涵盖了缓冲区溢出原理和利用两部分内容,前者包括栈溢出、整型溢出、UAF(Use After Free)类型缓冲区溢出实验,后者通过覆盖返回地址、覆盖函数指针和覆盖SHE(Structured Exception Handler)链表实验学习溢出利用技术。

本章重点y缓冲区溢出原理及实践;y常见缓冲区溢出利用方式及实践。

·52·网络安全实验教程4.1 概述缓冲区一词在软件中指的是用于存储临时数据的区域,一般是一块连续的内存区域,如char Buffer[256]语句就定义了一个256 B的缓冲区。

缓冲区的容量是预先设定的,但是如果往里存入的数据大小超过了预设的区域,就会形成所谓的缓冲区溢出。

例如,memcpy(Buffer, p, 1024)语句,复制的源字节数为1024 B,已经超过了之前Buffer缓冲区定义的256 B。

由于缓冲区溢出的数据紧随源缓冲区存放,必然会覆盖到相邻的数据,从而产生非预期的后果。

从现象上看,溢出可能会导致:(1)应用程序异常;(2)系统服务频繁出错;(3)系统不稳定甚至崩溃。

从后果上看,溢出可能会造成:(1)以匿名身份直接获得系统最高权限;(2)从普通用户提升为管理员用户;(3)远程植入代码执行任意指令;(4)实施远程拒绝服务攻击。

产生缓冲区溢出的原因有很多,如程序员的疏忽大意,C语言等编译器不做越界检查等。

学习缓冲区溢出的重点在于掌握溢出原理和溢出利用两方面的内容。

4.2 缓冲区溢出原理及利用下面介绍缓冲区溢出原理和缓冲区溢出利用两部分内容。

4.2.1 缓冲区溢出原理栈溢出、整型溢出和UAF(Use After Free)类型缓冲区溢出是缓冲区溢出常见的三种溢出类型,下面分别介绍它们的原理。

缓冲区溢出详解

缓冲区溢出详解

缓冲区溢出详解缓冲区溢出(Buffer Overflow)是计算机安全领域内既经典⽽⼜古⽼的话题。

随着计算机系统安全性的加强,传统的缓冲区溢出攻击⽅式可能变得不再奏效,相应的介绍缓冲区溢出原理的资料也变得“⼤众化”起来。

其中看雪的《0day安全:软件漏洞分析技术》⼀书将缓冲区溢出攻击的原理阐述得简洁明了。

本⽂参考该书对缓冲区溢出原理的讲解,并结合实际的代码实例进⾏验证。

不过即便如此,完成⼀个简单的溢出代码也需要解决很多书中⽆法涉及的问题,尤其是⾯对较新的具有安全特性的编译器——⽐如MS的Visual Studio2010。

接下来,我们结合具体代码,按照对缓冲区溢出原理的循序渐进地理解⽅式去挖掘缓冲区溢出背后的底层机制。

⼀、代码 <=> 数据顾名思义,缓冲区溢出的含义是为缓冲区提供了多于其存储容量的数据,就像往杯⼦⾥倒⼊了过量的⽔⼀样。

通常情况下,缓冲区溢出的数据只会破坏程序数据,造成意外终⽌。

但是如果有⼈精⼼构造溢出数据的内容,那么就有可能获得系统的控制权!如果说⽤户(也可能是⿊客)提供了⽔——缓冲区溢出攻击的数据,那么系统提供了溢出的容器——缓冲区。

缓冲区在系统中的表现形式是多样的,⾼级语⾔定义的变量、数组、结构体等在运⾏时可以说都是保存在缓冲区内的,因此所谓缓冲区可以更抽象地理解为⼀段可读写的内存区域,缓冲区攻击的最终⽬的就是希望系统能执⾏这块可读写内存中已经被蓄意设定好的恶意代码。

按照冯·诺依曼存储程序原理,程序代码是作为⼆进制数据存储在内存的,同样程序的数据也在内存中,因此直接从内存的⼆进制形式上是⽆法区分哪些是数据哪些是代码的,这也为缓冲区溢出攻击提供了可能。

图1 进程地址空间分布图1是进程地址空间分布的简单表⽰。

代码存储了⽤户程序的所有可执⾏代码,在程序正常执⾏的情况下,程序计数器(PC指针)只会在代码段和操作系统地址空间(内核态)内寻址。

数据段内存储了⽤户程序的全局变量,⽂字池等。

简述缓冲区溢出攻击的原理以及防范方法

简述缓冲区溢出攻击的原理以及防范方法

简述缓冲区溢出攻击的原理以及防范方法
一、缓冲区溢出攻击原理
缓冲区溢出攻击(Buffer Overflow Attack)是一种非法异常的程序运行行为,它发生的目的是让受害者的程序运行出现崩溃,从而获得机器控制权限,可以获取机器中存有的敏感资料,并进行恶意操作,如发送垃圾邮件,拒绝服务攻击(DoS attack),远程控制等行为破坏网络安全。

缓冲区溢出攻击的基本原理,就是恶意程序使用某种方法,将程序缓冲区中存放的数据或者信息溢出,超出缓冲区的容量,而这种溢出的数据又存放了受害者程序控制机器的恶意命令,从而给受害者程序植入恶意代码,使恶意程序获得了机器的控制权限,进而达到攻击系统的目的。

二、防范方法
1、使用受检程序,受检程序是一种编译技术,通过对程序源代码进行类型检查、安全检查等操作,来把漏洞修复好,从而起到防止缓冲区溢出攻击的作用。

2、使用数据流分析技术,它是一种动态分析技术,可以识别出恶意代码并阻止其危害,对程序运行的漏洞进行检查,从而防止攻击者利用缓冲区溢出攻击系统。

3、实行严格的安全审计制度,对程序源码、程序诊断、数据加密技术等进行严格的审计,确保程序运行的安全性,以及防止攻击者利用缓冲区溢出攻击系统。

4、采用虚拟化技术,虚拟化技术可以在不同的安全层次上对程序进行控制,对程序运行的过程进行审查,从而防止攻击者使用缓冲区溢出攻击系统。

5、对网络环境进行安全审计,包括电脑中存在的安全漏洞,系统的安全配置,网络设备的稳定性以及系统的社会工程学攻击等,从而确保网络环境能够不被缓冲区溢出攻击所侵袭。

缓冲溢出攻击实验报告

缓冲溢出攻击实验报告

一、实验目的及要求1. 了解缓冲区溢出攻击的原理和类型。

2. 掌握缓冲区溢出攻击的实验方法和步骤。

3. 理解缓冲区溢出攻击的危害性。

4. 学习防范和避免缓冲区溢出攻击的方法。

二、实验环境1. 操作系统:Windows 102. 编程语言:C/C++3. 漏洞利用工具:Metasploit4. 实验环境搭建:使用虚拟机软件(如VMware)搭建实验环境,靶机为Windows 7 SP1,攻击机为Kali Linux。

三、实验内容1. 漏洞分析:分析实验环境中存在的缓冲区溢出漏洞。

2. 攻击实现:利用Metasploit工具对靶机进行攻击,实现远程代码执行。

3. 防御措施:学习防范和避免缓冲区溢出攻击的方法。

四、实验步骤1. 漏洞分析- 使用Ghidra工具对实验环境中的漏洞程序进行反汇编,分析程序中的缓冲区溢出漏洞。

- 发现漏洞程序存在缓冲区溢出漏洞,攻击者可以通过输入超长字符串来覆盖返回地址,从而控制程序的执行流程。

2. 攻击实现- 使用Metasploit工具中的`exploit/multi/handler`模块,设置攻击目标为靶机的IP地址和端口。

- 使用`set payload`命令设置攻击载荷,选择`windows/x64/meterpreter/reverse_tcp`,该载荷可以在攻击成功后与攻击机建立反向连接。

- 使用`set LHOST`命令设置攻击机的IP地址,使用`set LPORT`命令设置端口号。

- 使用`set target`命令设置攻击目标,选择漏洞程序的模块和参数。

- 使用`exploit`命令启动攻击,等待攻击成功。

3. 防御措施- 代码审计:对程序进行代码审计,及时发现并修复缓冲区溢出漏洞。

- 输入验证:对用户输入进行严格的验证,限制输入长度,防止输入超长字符串。

- 边界检查:在代码中添加边界检查,防止缓冲区溢出。

- 安全编程:遵循安全编程规范,使用安全的编程语言和库,避免使用存在漏洞的函数。

缓冲区溢出实验报告

缓冲区溢出实验报告

缓冲区溢出报告院系:计算机与通信工程学院班级:信息安全10-02班1.实验目的掌握缓冲区溢出的原理掌握常用的缓冲区溢出方法理解缓冲区溢出的危害性掌握防范和避免缓冲区溢出攻击的方法2.实验工具溢出对象:CCProxy 7.2(1)(2)调试工具:使用Vmware虚拟机,安装CCPROXY7.2进行实验调试。

3.实验步骤了解CCProxy 7.2代理服务器为大家解决了很多问题,比如阻挡黑客攻击和局域网共享上网等。

•国内非常受欢迎的一款代理服务器软件•设置简单,使用方便•不仅支持常见的HTTP和SOCKS代理,而且支持FTP/Telnet等这类不常用的协议及其它协议关于CCProxy6.2缓冲区溢出漏洞说明CCProxy在代理Telnet协议时,可以接受Ping命令Ping命令格式:ping hostname\r\n当hostname的长度大于或者等于1010字节时,CCProxy 6.2会发生缓冲区溢出,导致程序崩溃CCProxy 6.2缓冲区溢出漏洞演示在目标主机运行CCProxy,使用默认设置运行CCProxy的机器IP是192.168.6.132使用telnet命令连接CCProxy:telnet 192.168. 6.132 23返回信息:(如图)输入ping命令,后接畸形数据:在ping命令后接10个字符A(ping AAAAAAAAAA),观察返回信息将字符A的数量变为100个、1000个、2000个,观察返回信息(注:由于本人安装的是7.2版本,其漏洞已修复,故智能识别252个字符,其后被截断,所以当出现的畸形字符长度超过252时,就不再被识别,所以会有“host not found”)原理:如果终端提示“Host not found”,说明CCProxy正确地处理了这个畸形数据,仍工作正常如果终端提示“失去了跟主机的连接”,表明CCProxy已经崩溃CCProxy 6.2缓冲区溢出漏洞利用如何利用这个漏洞,来实现攻击目的,做一些特别的事情。

CiscoIOS系统缓冲区溢出攻击研究

CiscoIOS系统缓冲区溢出攻击研究

free( )函数的处理过程如图 4 所示。
是 相邻前一个内存块
与前一个
是否为空闲快 ?
内存ቤተ መጻሕፍቲ ባይዱ合并

相邻后一个内存块 是 是否为空闲快 ?
与后一个 内存块合并

将所得空闲块 加入到空闲块
链表中
图 4 free( )函数流程
在进行空闲块合并操作时要修改空闲块链表,将前一个 或后一个空闲内存块从空闲块双向链表上删除,还要修改前 后内存块的相关指针值,假设待释放的内存块相邻的后一个 内存块为空闲块,则合并前后的内存空闲块链表如图 5 所示。
出是指当用户输入超出程序中 malloc( )函数预先分配的空间 大小,而系统没有进行边界检查时,超出的数据部分就会覆 盖掉这段空间之后的存储区域。
以下的具体漏洞利用方面说明都以 Cisco IOS 的 TFTP 服 务长文件名远程缓冲区溢出漏洞为例,TFTP 服务器在处理长 文件名时缺少正确的边界检查,如果请求的文件名超过 700 个字节就有可能导致路由器崩溃而重新启动。这是因为 IOS 的 TFTP 服务在收到请求时会向内存池管理程序请求一个内 存块来存储文件名,若是发送一个 get AAAAAA…(700 个) 命令,就会出现堆溢出,超出的部分文件名数据覆盖了内存 块中的 REDZONE 字段和下一个内存块的头部。所以,系统 的 Check Heaps 进程在检查内存双向链表的正确性时就会发 现异常,从而强制系统重启。 2.2 堆溢出利用分析

REDZONE
REDZONE
图 2 IOS 内存块数据结构 图 3 IOS 空闲内存块数据结构
1.3 IOS 中的内存保护机制 虽然 IOS 没有采取进程间的存储保护机制,但是为了系

缓冲区溢出-原理和简单利用-概述说明以及解释

缓冲区溢出-原理和简单利用-概述说明以及解释

缓冲区溢出-原理和简单利用-概述说明以及解释1.引言概述部分是文章的开篇,旨在引入读者对于缓冲区溢出问题的背景和概念。

下面是概述部分的内容:1.1 概述在计算机科学和网络安全领域中,缓冲区溢出(Buffer Overflow)是一种常见的安全漏洞,它可能导致系统崩溃、数据泄露、远程命令执行等严重后果。

本文将介绍缓冲区溢出的原理和简单利用方法。

缓冲区溢出指的是当向一个缓冲区写入数据时,超出了该缓冲区所能容纳的大小,导致溢出的数据覆盖到相邻的内存区域。

这种溢出可能会覆盖控制流程信息,改变程序执行路径,从而使攻击者能够执行恶意代码。

缓冲区溢出是一种经典的安全漏洞,其发现最早可以追溯到20世纪70年代。

尽管多年来在软件和系统的开发过程中进行了一系列的改进和加固,但仍然存在很多软件和系统容易受到缓冲区溢出攻击的漏洞存在。

正因如此,了解缓冲区溢出的原理和简单利用方法对于计算机科学和网络安全从业人员来说是至关重要的。

本文的主要目的是帮助读者理解缓冲区溢出的原理,并介绍常见的利用方法。

在深入研究和了解缓冲区溢出的背景之后,读者将能够更好地理解和应对这种常见的安全威胁。

接下来的章节将分别介绍缓冲区溢出的原理,并提供一些简单的利用方法作为案例。

最后,我们将总结本文的内容,并进一步讨论缓冲区溢出的意义和应对措施。

通过阅读本文,我们希望读者能够加深对于缓冲区溢出问题的理解,提高对于软件和系统安全的意识,并能够采取相应的措施来预防和应对这种安全漏洞。

让我们一起深入探索缓冲区溢出的原理和简单利用方法吧!文章结构是指文章整体组织的安排和框架。

一个良好的文章结构可以帮助读者更好地理解和吸收文章内容。

本文主要讨论缓冲区溢出的原理和简单利用方法,因此文章结构如下:1. 引言1.1 概述引入缓冲区溢出的基本概念和定义,解释缓冲区溢出在计算机领域的重要性和普遍存在的问题。

1.2 文章结构介绍本文的文章结构以及各个部分的内容安排,方便读者了解整个文章的组织。

缓冲区溢出攻击原理及防范_XXX

缓冲区溢出攻击原理及防范_XXX

缓冲区溢出攻击原理及防范作者姓名:XXX 班级:计算机网络XXX学号:2200951XXX 指导教师:XXX教授摘要缓冲区简单来说是一块连续的计算机内存区域,可以保存相同数据类型的多个实例, 缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量溢出的数据覆盖在合法数据上,理想的情况是程序检查数据长度并不允许输入超过缓冲区长度的字符,但是绝大多数程序都会假设数据长度总是与所分配的储存空间相匹配,这就为缓冲区溢出埋下隐患.操作系统所使用的缓冲区又被称为"堆栈". 在各个操作进程之间,指令会被临时储存在"堆栈"当中,"堆栈"也会出现缓冲区溢出。

缓冲区溢出是最常见的安全漏洞,针对缓冲区溢出的漏洞进行攻击,是很常见的攻击手段,可以使本地用户获得超级用户权限,也可以使外部攻击者通过网络直接进入系统。

本文详细分析了缓冲区溢出的基本原理,描述了利用缓冲区溢出漏洞进行攻击的基本方式,并通过对一段实例程序的溢出和构建攻击语句直观的演示了缓冲区溢出的形成过程及其攻击原理,最后提出了防范缓冲区溢出的有效措施。

关键词:缓冲区溢出堆栈漏洞AbstractSimply ,buffer is a continuous computer memory area, can keep the same data types of multiple instances, buffer overflow is when computer to the buffer filled with data f igures within the capacity of the buffer itself more than the data covered in legal spill data, the ideal situation is not allowed to check the data length program more than the length of the input buffer characters, but most of the program will be always with the assumption that data length distribution of storage space match, this is the buffer overf low buried hidden trouble. Operating system used by buffer is known as the "stack". I n between each operation process, the instructions will be temporarily stored in the "st ack" of "stack" also can appear buffer overflow. Buffer overrun is the most common s ecurity flaws in the buffer overflow vulnerability to attack, it is very common attack method, can make local users get super user permissions, also can make the external a ttackers through the network directly into the system.This paper analyzes the basic principle of buffer overflow, describes the use of buf fer overrun vulnerabilities to attack the basic way of, and through the example of a pr ogram and the construction of overflow attack statement intuitive demonstrates buffer overflow the forming process and the principle of attack, finally puts forward the cou ntermeasures of buffer overflow effective measures.Keywords:buffer overflow Stack shellcod目录摘要 (1)Abstract (2)绪论 (1)第一章缓冲区溢出基本原理 (2)1.1 栈缓冲区溢出 (2)1.2 HEAP/BSS缓冲区溢出 (4)1.2.1重要性 (4)1.2.2相关概念介绍 (4)1.2.3Heap/BSS溢出攻击 (5)第二章缓冲区溢出攻击 (8)2.1 shellcode基础 (9)2.2 可注入shellcode的编写 (11)2.3 远程缓冲区溢出威胁 (15)第三章缓冲区溢出攻击防御 (17)3.1 给有漏洞的程序打补丁 (17)3.2 编写安全的代码 (17)3.3 静态分析 (17)3.4 动态测试 (17)3.5软件开发过程中的防范策略 (18)3.6 缓冲区溢出攻击的抵御 (23)第四章缓冲区溢出攻击与防御实例设计 (25)4.1 缓冲区溢出攻击实例 (25)总结与展望 (27)致谢 (28)参考文献 (29)绪论随着计算机技术、现代通信技术和网络技术的发展,尤其是Internet的广泛使用,计算机网络与人们的工作和生活的联系越来越密切、越来越深入,同时也使网络系统的安全问题日益复杂和突出。

缓冲区溢出攻击与防范实验

缓冲区溢出攻击与防范实验

实验十二缓冲区溢出攻击与防范实验1.实验目的通过实验掌握缓冲区溢出的原理;通过使用缓冲区溢出攻击软件模拟入侵远程主机;理解缓冲区溢出危险性;理解防范和避免缓冲区溢出攻击的措施。

2.预备知识2.1缓冲区溢出攻击简介缓冲区溢出攻击之所以成为一种常见的攻击手段,其原因在于缓冲区溢出漏洞太普通了,并且易于实现。

而且,缓冲区溢出所以成为远程攻击的主要手段,其原因在于缓冲区溢出漏洞给予了攻击者所想要的一切:植入并且执行攻击代码。

被植入的攻击代码以一定的权限运行有缓冲区溢出漏洞的程序,从而得到被攻击主机的控制权。

下面简单介绍缓冲区溢出的基本原理和预防办法。

(1)缓冲区概念缓冲区是内存中存放数据的地方。

在程序试图将数据放到机器内存中的某一个位置的时候,因为没有足够的空间就会发生缓冲区溢出。

而人为的溢出则是有一定企图的,攻击者写一个超过缓冲区长度的字符串,植入到缓冲区,然后再向一个有限空间的缓冲区中植入超长的字符串,这时可能会出现两个结果:一是过长的字符串覆盖了相邻的存储单元,引起程序运行失败,严重的可导致系统崩溃;另一个结果就是利用这种漏洞可以执行任意指令,甚至可以取得系统root特级权限。

缓冲区是程序运行的时候机器内存中的一个连续块,它保存了给定类型的数据,随着动态分配变量会出现问题。

大多时为了不占用太多的内存,一个有动态分配变量的程序在程序运行时才决定给它们分配多少内存。

如果程序在动态分配缓冲区放入超长的数据,它就会溢出了。

一个缓冲区溢出程序使用这个溢出的数据将汇编语言代码放到机器的内存里,通常是产生root权限的地方。

仅仅单个的缓冲区溢出并不是问题的根本所在。

但如果溢出送到能够以root权限运行命令的区域,一旦运行这些命令,那可就等于把机器拱手相让了。

造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。

缓冲区是一块用于存放数据的临时内存空间,它的长度事先已经被程序或操作系统定义好。

缓冲区类似于一个杯子,写入的数据类似于倒入的水。

缓冲区溢出攻击原理

缓冲区溢出攻击原理

缓冲区溢出攻击原理一、缓冲区溢出攻击原理缓冲区溢出是一种非常普遍、非常危险的漏洞,在各种操作系统、应用软件中广泛存在。

利用缓冲区溢出攻击,可以导致程序运行失败、系统当机、重新启动等后果。

更为严重的是,可以利用它执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作。

缓冲区溢出是一种系统攻击的手段,通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的。

据统计,通过缓冲区溢出进行的攻击占所有系统攻击总数的80%以上。

知道了这个数据我非常震惊,以前进行的活动大都是找各方面的黑客软件然后学习这个软件怎么用,但是众所周知,攻击型的黑客软件都是各大杀毒软件的活靶子,基本上几天就不能用了,所以学习了这些软件的原理,我也能写几行代码,不再依赖黑客软件,就算汇编语言难掌握,也可以保存好常用的代码,其使用方法是比较简单的,下面是我学习的过程,由于没有经验,肯定有不少疏漏,也肯定不少地方绕了弯路,但自己学的过程中也获得了更多乐趣和收货时的喜悦,下面是具体介绍。

我用的是windows xp sp3编程软件是vc6.0。

还用到了olldbg2.0。

都是很常用的工具。

先介绍一下缓冲区溢出攻击的基础知识储备,进程内存空间是我最先接触的,现在看来也是最必要的基础,windows系统核心内存区间0xFFFFFFFF~0x80000000 (4G~2G)为Win32操作系统保留用户内存区间0x00000000~0x80000000 (2G~0G)堆: 动态分配变量(malloc), 向高地址增长进程使用的内存可以按照功能大致分成以下4 个部分。

(1)代码区:这个区域存储着被装入执行的二进制机器代码,处理器会到这个区域取指并执行。

(2)数据区:用于存储全局变量等。

(3)堆区:进程可以在堆区动态地请求一定大小的内存,并在用完之后归还给堆区。

动态分配和回收是堆区的特点。

网络安全技术原理与实践 第六章 缓冲区溢出攻击

网络安全技术原理与实践  第六章 缓冲区溢出攻击

6.2 缓冲区溢出攻击方式
目前的缓冲区溢出攻击,可以按照以下方法进行分类: (1)按照溢出位置分类:栈溢出、堆溢出和BSS段溢出。 (2)按照攻击者欲达到的目标分类:在程序的地址空间里植 入适当的代码以及通过适当地初始化寄存器和存储器从而控 制程序转移到攻击者安排的地址空间去执行。 (3)按照攻击目标分类:攻击栈中的返回地址、攻击栈中保 存的旧框架指针、攻击堆或BSS段中的局部变量或参数、攻 击堆或BSS段中的长跳转缓冲区。
缓冲区溢出攻击示意图
6.3 缓冲区溢出攻击步骤
6.3.1 获取漏洞信息
缓冲区溢出漏洞信息的 获取,主要有两种途径, 一是自己挖掘,二是从漏 洞公告中获得。当前,公 布漏洞信息的权威机构主 要有 公共漏洞公告 (Common Vulnerabilities and Exposures,CVE)和计 算机应急响应小组 (Computer Emergency Response Team,CERT)中 获取漏洞信息,如图所示。
6.2.3 流程跳转技术
缓冲区溢出的一个非常关键的步骤就是要实现进程执行流程 跳转,这也正是缓冲区溢出攻击的首要目的。只有实现了流程的 跳转,才能在被攻击的主机上执行所植入的代码,实现控制被攻 击主机的目的。要实现执行流程跳转,攻击者可以通过缓冲区溢 出漏洞修改有关执行流程的管理信息,如返回地址。
6.4 缓冲区溢出攻击的防范方法
目前有三种基本的方法保护缓冲区免受缓冲区溢出的攻击和影: 强制写正确的代码的方法 基于探测方法的防御 对缓冲区溢出漏洞检测研究主要分为如下的三类: 1)基于源代码的静态检测技术 2)基于目标代码的检浏技术 3)基于源代码的动态检测技术 基于操作系统底层的防御 1)库函数的保护 2)操作系统内核补丁保护 (a)NOEXEC技术 (b)ASLR(Address Space Layout Randomization,地址空间结构 随机化)

实验七-缓冲区溢出攻击实验

实验七-缓冲区溢出攻击实验

实验七缓冲区溢出攻击实验
一、实验目的
1、理解缓冲区溢出攻击的原理;
2、获取目标主机的最高权限,利用远程桌面登录。

二、实验环境
1、实验环境:Windows 2000/2003的目标主机,通过虚拟机加载;
2、软件工具:metasploit frmamework。

三、实验步骤
1.攻击目标
Windows 2000主机
2.攻击开始
步骤1:使用nmap对目标进行端口扫描
步骤2:目标开启135端口,可利用MS03-026漏洞进行入侵,用到的工具是metasploit frmamework。

安装完毕后选择console模式
(1)查询MS03-026漏洞所对应的溢出模块
(2)进入此模块
(3)设置有效载荷为执行特定命令,配置相关参数
(4)执行攻击命令,成功进入目标系统
(5)添加系统账号并把它加入系统管理员组中
四、实验小结:
缓冲区溢出,是针对程序设计缺陷,向程序输入缓冲区写入使之溢出的内容(通常是超过缓冲区能保存的最大数据量的数据),从而破坏程序运行、趁著中断之际并获取程序乃至
系统的控制权。

缓冲区溢出攻击的目的在于扰乱具有某些特权运行的程序的功能,这样可以使得攻击者取得程序的控制权,如果该程序具有足够的权限,那么整个主机就被控制了。

一般而言,攻击者攻击root程序,然后执行类似“exec(sh)”的执行代码来获得root权限的shell。

通过该实验我了解到通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,造成程序崩溃或使程序转而执行其它指令,以达到攻击的目的。

造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。

缓冲区溢出攻击的原理和防范技术分析

缓冲区溢出攻击的原理和防范技术分析

缓冲区溢出攻击的原理和防范技术分析姜燕;刘娜【摘要】基于解决缓冲区溢出这一普遍发生的网络安全漏洞的目的,通过软件、硬件技术层面的验证方法,结合人工检查、静态发现技术、动态防御技术等实验手段,得出了在向缓冲区中传榆数据时可以通过数组边界检%Buffer overflow is a typical and frenquently happened security hole in the network. Some experimental methods supported by software, hardware technology, combined with manual inspection, static discovery technology and dynamic defense technology have been tested to fix the hole. It is proved to be effective precautionary technology to use array border inspection, non-executable buffer setting, returning address protection techniques and so on in order to fix the loopholes caused by buffer attacks.【期刊名称】《电子设计工程》【年(卷),期】2013(021)008【总页数】4页(P148-150,153)【关键词】网络安全;缓冲区溢出攻击;防范技术;漏洞【作者】姜燕;刘娜【作者单位】湖北医药学院公共管理学院,湖北十堰442000【正文语种】中文【中图分类】TP393缓冲区溢出是指向缓冲区中传输的数据超出了缓冲区所能容纳的最大长度,从而使提交的数据超过相应的边界而进入了其他区域[1]。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

代码之后构造一个假的空闲块,合理地填写块头部各个字段
值以防止 Check Heaps 进程发现异常而使系统崩溃。同样以
TFTP 服务长文件名远程缓冲区溢出漏洞为例,构造发送的
TFTP 请求文件名如图 6 所示。
AAAAAAAAAAAA AAAAAAAAAAAA
… AAAAAAAAAAAA
Fake Block
Next Free Block Next Free Ptr Prev Free Ptr
Next Free Block Next Free Ptr Prev Free Ptr
图 5 空闲块合并前后空闲块链表
用程序语言来描述这个过程如下:
*(Fake->Free_Prev) = Fake->Free_Next
同时,在内存池中,还有另一个双向链表,即空闲块双 向链表,它将所有的空闲内存块组织起来。空闲内存块的数 据结构如图 3 所示。系统在内存块头部的后面,又加上一个 空闲块头部结构。其中也包含了两个指针:Next Free ptr 和 Prev Free ptr,分别指向最近的前一个空闲内存块和后一个空 闲内存块,这样将内存中所有空闲内存块串联起来,组成了
路由器是 Internet 网络中进行网间连接的关键设备,是网 络间相互连接的枢纽。路由器系统构成了基于 TCP/IP 的 Internet 的主要框架,对路由器技术的研究和应用在整个互联 网络技术的研究和应用中始终具有核心地位。因此,路由器 的相关安全技术是网络安全的重要课题,路由器攻击方面的 研究不管是对于网络的安全渗透性测试或是增强路由器的抗 攻击性来说都是非常重要的[1]。Cisco 路由器在互联网中得 到广泛使用,本文从 Cisco 路由器上 IOS 的基础和特性以及 缓冲区溢出原理出发,阐述了一种利用 IOS 的堆溢出漏洞远 程攻击路由器的方法,并提出了针对该类攻击的防护措施。
3 防护措施
从路由器自身安全策略上来说,存在该类可远程利用的 堆溢出漏洞的 Cisco IOS 系统并没有根本的措施来抵御此类 攻击。但是,用户仍然可以采取一些方法来防止此类攻击的 发生。
(1)Cisco 公司以及一些安全组织非常重视 IOS 的安全性, 不断致力于加强 IOS 系统安全性和稳定性的工作。随着 Cisco IOS 版本的更新,IOS 的安全性也在不断提高。针对各种 Cisco 网络产品的安全漏洞,Cisco 公司都会及时响应并采取措施, 比如发布修补漏洞的 IOS 版本等。从用户角度来说,为了保 证网络安全,除了要对路由器等网络设备进行完善的安全配 置之外,还应该关注相关的安全动态,积极更新 Cisco 设备 的 IOS 版本,从而抵御该类网络攻击。
MAGIC PID
Alloc Check Alloc Name
Alloc PC Next ptr Prev ptr Size + Usage Usage Count Last Dealloc
Data
4-B
Block Head
MAGIC2 Unknown Padding Padding Next Free ptr Prev Free ptr
基金项目:国家“863”计划基金资助项目“网络安全积极防御关键 技术研究”(2003AA146010) 作者简介:凤 丹(1983-),女,硕士研究生,主研方向:网络安全, 路由器;邹 敏,工程师 收稿日期:2007-01-21 E-mail:wsfd311@
空闲块双向链表。
4-B
第 33 卷 第 24 期 Vol.33 No.24
计算机工程 Computer Engineering
2007 年 12 月 December 2007
·安全技术·
文章编号:1000—3428(2007)24—0138—03 文献标识码:A
中图分类号:TP393.08
Cisco IOS 系统缓冲区溢出攻击研究
… 2 IOS 内存块数据结构 图 3 IOS 空闲内存块数据结构
1.3 IOS 中的内存保护机制 虽然 IOS 没有采取进程间的存储保护机制,但是为了系
统的安全和稳定,IOS 也采取了一些其他机制来保证内存的 正确性和完整性。在 IOS 的进程中,有一个进程一直在运行, 就是“Check Heaps”进程,它定期检查 IOS 运行代码和存储 堆结构的完整性,若发现异常,则强制系统重启[3]。
Shellcode 是笔者自己编写的可以被 IOS 执行的一段二进 制代码,可以在 Shellcode 中实现很多功能以达到对路由器系 统的控制,例如:重写路由器 NVRAM 中存储的配置文件、 打开 TTY 控制台等。
该方法在实验室环境下,针对 Cisco2501 系列路由器的 IOS 11.2 版本,可以达到预期的攻击控制效果。
整个 IOS 内存被组织成一个完整连续的虚拟地址空间, 通常根据物理内存的不同类型分成区(region),区又同时被分 成多个子区。IOS 通过一系列存储池(pool)来管理可用的空闲 存储区域,这些存储池也就是通常意义上的堆。每个池都是 存储块(block)的集合,这些块根据需要可以被分配也可以被 收回。
出是指当用户输入超出程序中 malloc( )函数预先分配的空间 大小,而系统没有进行边界检查时,超出的数据部分就会覆 盖掉这段空间之后的存储区域。
以下的具体漏洞利用方面说明都以 Cisco IOS 的 TFTP 服 务长文件名远程缓冲区溢出漏洞为例,TFTP 服务器在处理长 文件名时缺少正确的边界检查,如果请求的文件名超过 700 个字节就有可能导致路由器崩溃而重新启动。这是因为 IOS 的 TFTP 服务在收到请求时会向内存池管理程序请求一个内 存块来存储文件名,若是发送一个 get AAAAAA…(700 个) 命令,就会出现堆溢出,超出的部分文件名数据覆盖了内存 块中的 REDZONE 字段和下一个内存块的头部。所以,系统 的 Check Heaps 进程在检查内存双向链表的正确性时就会发 现异常,从而强制系统重启。 2.2 堆溢出利用分析
(1)
(Fake->Free_Next)->Free_Prev = Fake->Free_Prev
(2)
可以利用这两条内存的读写操作,完成溢出后的程序流
程跳转,即用 Shellcode 地址覆盖某函数的返回地址,从而使
系统跳转执行它们自己定义的代码,达到控制功能。
具体实现时,采用构造假空闲块的方法,在发送的溢出
*(ReturnAddress) = &(Shellcode)
这样,在 TFTP 缓冲区内存块与 Fake Block 进行合并之 后,就会将某一系统进程的返回地址改写为填写的 Shellcode 的地址,系统在执行完该系统进程之后返回时就会执行到 Shellcode 上,从而达到了控制整个系统流程的效果。
向 Cisco IOS 发送一个超过 700 B 的 TFTP 文件名请求就 会导致系统重启,但是为了达到更好的攻击效果,即在溢出 之后能够使 IOS 执行特定的 Shellcode,从而控制路由器,要 对 Cisco IOS 上的堆溢出利用方式进行研究。
系统在利用 free 函数释放一个内存块之前要检查内存块 链表上相邻的内存块是否为空闲块,若为空闲块,则首先要 进行空闲块的合并操作,然后再将待释放的内存块释放,将 合并生成的新空闲块插入到空闲块链表中。用流程图表示
Study on Cisco IOS Buffer Overflow Attack
FENG Dan, ZOU Min
(Jiangnan Institute of Computing Technology, Wuxi 214083)
【Abstract】Router security is very important in computer networks. This paper focuses on Cisco routers which are the broadest used, describes the basics of IOS which runs in Cisco routers, then based on the principle of buffer overflow, describes a method of buffer overflow attack in Cisco IOS, and presents the defense methods against this kind of attack. 【Key words】network security; router; buffer overflow
凤 丹,邹 敏
(江南计算技术研究所,无锡 214083)
摘 要:路由器安全在网络安全领域占有非常重要的地位,该文针对互联网中使用最为广泛的 Cisco 路由器,介绍 Cisco IOS 的基础特性, 从缓冲区溢出的原理出发,阐述一种利用 IOS 缓冲区溢出漏洞远程攻击路由器的方法,提出针对该类攻击的防护措施。 关键词:网络安全;路由器;缓冲区溢出
1 Cisco 路由器 IOS 相关基础
1.1 Cisco IOS 简介 Cisco IOS 是 Cisco 公司专门开发的用于其网络产品上的
操作系统,目前 Cisco 公司出品的路由器、交换机、防火墙 等网络产品上使用的基本都是 Cisco IOS 操作系统。
Cisco IOS 是一个基于单片机结构的嵌入式操作系统,其 上并行运行多个进程,每个进程有且只有一个线程,有自己 的内存栈空间、CPU 上下文(例如寄存器值等)。为了保证高 效、迅速地进行报文交换,Cisco 牺牲了一些稳定性和安全性, IOS 在很多方面没有采取其他操作系统的安全保护措施,例 如,IOS 进程间没有存储保护机制,虽然每个进程都有各自 的存储空间,但是其他的进程同样可以访问该空间[2]。 1.2 Cisco IOS 内存结构剖析
Check Heaps 进程每隔一分钟检查一次内存池中的内存 块双向链表,检查每个内存块的头部数据结构中的相关字段 是否正确,同时检查空闲内存块双向链表,检查空闲快头部 结构中的相关字段正确性。被检查的相关字段见图 2 和图 3 中的阴影部分字段。
相关文档
最新文档