




已阅读5页,还剩56页未读, 继续免费阅读
(计算机科学与技术专业论文)缓冲区溢出和sql注入的渗透测试.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
太原理:l :大学硕士研究生学位论文 缓冲区溢出和s q l 注入的渗透测试 摘要 渗透测试是检测网络漏洞的重要手段。它能使网络管理人员直观 地体会到网络漏洞的危害程度,增强安全意识,并且能够根据检测结 果有效的提高网络的安全程度。因此,渗透测试技术的研究及工具实 现具有重要的意义。 缓冲区溢出和s q l 注入是渗透测试中重要的技术。本课题的最 终目的是实现一个基于缓冲区溢出和s q l 注入的测试工具。本文深 入介绍了缓冲区溢出攻击和s q l 注入的原理,包括:栈、堆、格式 化字符串、单字节四种缓冲区溢出的过程;覆盖返回地址、函数地址 两种流程跳转技术;s h e l l c o d e 的编写方法、流程及筛选;s q l 注入的 原理;利用系统表对m s s q ls e r v e r 的注入方法,注入方法分为提示 开启与提示关闭。 n b s i 是当前流行的针对m s s q l s e r v e r 的注入测试工具,但是其 注入检测方法却不够准确,而且仅针对a s p ,本文的实验表明j s p 中 也存在注入漏洞。使用抓包工具w i n s o c k e x p e r t 对n b s i 的注入检测 及猜解方法进行分析,可以得出n b s i 采用基于状态码的方法判断注 入漏洞并猜解数据,本文发现的存在注入漏洞的页面表明这种方法比 较片面。本文在其基础上进行了改进:采用状态码及返回信息结合的 方法进行注入检测及猜解。本文针对a s p 与j s p 采用m s s q ls e r v e r 作为后台数据库且其提示信息开启时设计了关键字,根据返回信息是 否包含定义的关键字判定注入漏洞。注入猜解则是根据状态码进行 的。 在此基础上,本文实现了一个基于缓冲区溢出和s o l 注入的测 试工具,这对渗透测试的:自动化存重大的意义。测试工具采用i a v a 语言实现( 缓冲区溢出的核心模块使用j a v a 语言的原生方法实现) , 太原理工大学硕士研究生学位论文 为保证各个模块协同工作,使用了多线程技术,软件代码在i b u i l d e r 2 0 0 5 环境下完成。 总体来说,本文在深入分析缓冲区溢出和s q l 注入的基础上, 一重新筛选t q t i e l l 石o - d e - - 对s q l 注7 ( 的方法进行了改进。_ 并且采 一j a v a 一 语言实现了一个渗透测试工具。测试结果表明:该工具的缓冲区溢出 测试保证了目标系统的稳定性,s q l 注入的准确性相对于n b s i 更好, 并能进行j s p 注入,而且可以在l i n u x 系统下运行。 关键词:渗透测试,缓冲区溢出,s q l 注入,j a v a 太原理j :大学硕士研究生学位论文 b u f f e r0 v e r f l o wa n ds q li n j e c t l 0 nf o r p e n e t r a r i o nt e s t a b s t a c t p e n e t r a t i o nt e s ti sa ni m p o r t a n tw a yt od e t e c tn e t w o r kv u l n e r a b i l i t y n e t w o r km a n a g e rc o u l df e e lh o wh a r m f u li ti sf r o md o i n gp e n e t r a t i o nt e s t , t h e nb u i l du ps e c u r i t ys e n s e ,e n h a n c et h en e t w o r ks e c u r i t ye f f i c i e n t l y a c c o r d i n gt ot h er e s u l to fd e t e c t i o n s oi t sv e r ys i g n i f i c a n tt od or e s e a r c h a n dr e a l i z et o o l sb a s e do np e n e t r a t i o nt e s t b u f f e ro v e r f l o wa n ds q li n j e c t i o na r ec r u c i a l t e c h n o l o g y i n p e n e t r a t i o nt e s t i nt h e t h e s i sw ew i l lf i n a l l yr e a l i z eat e s t t o o lb a s e do n b u f f e ro v e r f l o wa n ds q li n j e c t i o n t h et h e s i si n t r o d u c e st h e o r i e si n d e t a i lo fb u f f e ro v e r f l o wa n ds q l i n j e c t i o n ,i n c l u d i n gt h eb u f f e rf l o w p r o c e s so fs t a c k 、h e a p 、f o r m a ts t r i n ga n ds i n g l eb y t e ,t w of l o wj u m p s k i l l ( r e p l a c i n gr e t u r n a d d r e s sa n df u n c t i o ne n t r a n c ea d d r e s s ) ,w r i t i n g 、 f l o wa n df i l t e r i n go fs h e l l c o d e ,t h et h e o r yo fs q li n j e c t i o n ,t h ei n j e c t i o n a t t a c kt om s s q ls e r v e rw i t hs y s t e mt a b l eu s i n g t h ei n j e c t i o nm e t h o d c l a s s i f i e dt ot w os i t u a t i o n s :o p e n i n gf e e d b a c ka n ds h u t t i n gf e e d b a c k n b s ii so n ep o p u l a ri n j e c t i o nt e s tt o o la i m e da tm s s q ls e r v e r , b u t t h ed e t e c t i o nm e t h o do fi n j e c t i o ni sn o ta c c u r a t ee n o u g h ,a n di t o n l y a i m e da ta s p , i nt h ee x p e r i m e n to ft h e t h e s i ss h o w st h e r ea r ei n j e c t i o n v u l n e r a b i l i t y i nj s eiu s ec a p t u r i n gp a c k e t st o o lw i n s o c k e x p e r tt o a n a l y z ei n j e c t i o nt e s ta n dg u e s sm e t h o do fn b s i ,t h e nf i n do u tn b s i i d e n t i f yi n j e c t i o nt e s ta n dg u e s sm e t h o db a s e do ns t a t ec o d e t h i sm e t h o d i sl i m i t e df r o mt h ef i n d i n gt h a tt h e r ea r ei n j e c t i o nv u l n e r a b i l i t i e si np a g e s w em a k es o m e i m p r o v e m e n tb a s e d o ni t :d o i n gi n j e c t i o nt e s ta n d g u e s s i n go ns t a t ec o d ew i t hr e t u r ni n f o r m a t i o n id e s i g nk e y w o r d sa i m e d i i i 太原理:f :大学硕士研究生学位论文 a ta s pa n dj s pw i t hm s s q la sb a c k s t a g ed a t a b a s ew h i l ef e e d b a c ki s o p e n i n g ,t h e ni d e n t i f yi ft h e r e a r ei n j e c t i o nv u l n e r a b i l i t i e sa c c o r d i n gt o t h er e t u r ni n f o r m a t i o nw i t ho rw i t h o u td e f i n e dk e yw o r d s ,a n dt h e i n j e e t i o ng u e s s i n g ,i s g r o u n d e d o ns t a t e _ c o d e i nt h e t h e s i sir e a l i z e dat e s tt o o lw i t hj a v al a n g u a g e ,t h et o o lb a s e d o nb u f f e ro v e r f l o wa n ds q li n j e c t i o n ,i t sp r e t t ys i g n i f i c a n tt ot h e a u t o m a t i o no fp e n e t r a t i o nt e s t t oa s s u r ee a c hm o d u l ec o o p e r a t ew i t h e a c ho t h e rw e l l ,iu s e dt h em u l t i t h r e a dt e c h n o l o g y , t h es o f t w a r ec o d ew a s f i n i s h e du n d e rj b u i l d e r2 0 0 5 i nan u t s h e l l ,t h et h e s i sb a s e do nc o n s i d e r i n gb u f f e ro v e r f l o wa n d s q li n j e c t i o n ,r e c h o s et h es h e l lc o d e ,m a d ei m p r o v e m e n t t os q l i n j e c t i o n ,a n dr e a l i z eap e n e t r a t i o nt e s tt o o lw i t hj a v al a n g u a g e f r o mt h e e x p e r i m e n tw ec o u l dd r a wt h ec o n c l u s i o n :t h et o o lc o u l dk e e ps y s t e m s a f ef r o mt h eb u f f e ro v e r f l o wt e s t i t sm o r ea c c u r a t et h a nn b s io ns q l i n j e c t i o n ,a n dw ec o u l dm a k ej s pi n j e c t i o nw i t hi t t h ep l a t f o r ma l s o c o u l dr u ni nl i n u xs y s t e m k e y w o r d s :p e n e t r a t i o nt e s t ,b u f f e ro v e r f l o w ,s q li n j e c t i o n ,j a v a i v 声明尸明 本人郑重声明:所呈交的学位论文,是本人在指导教师的指导下, 独立进行研究所取得的成果。除文中已经注明引用的内容外,本论文 不包含其他个人或集体已经发表或撰写过的科研成果。对本文的研究 做出重要贡献的个人和集体,均已在文中以明确方式标明。本声明的 法律责任由本人承担。 论文作者签名: 堑至盏孽 e ti 莓i : 圣:! ! :垒! 尘? 关于学位论文使用权的说明 本人完全了解太原理工大学有关保管、使用学位论文的规定,其 中包括:学校有权保管、并向有关部门送交学位论文的原件与复印 件;学校可以采用影印、缩印或其它复制手段复制并保存学位论文; 学校可允许学位论文被查阅或借阅;学校可以学术交流为目的, 复制赠送和交换学位论文;学校可以公布学位论文的全部或部分内 容( 保密学位论文在解密后遵守此规定) o 签名:砬q 二日期:j 盟牛 导师签名:童刍转乏。日期:垄玉:垒:兰3 太原理一i :火学硕十研究生学位论文 1 1 课题背景 第一章绪论 随着互联网的飞速发展,网络已经深入到了人们生活中的每一个部分,利 用计算机网络来获取和交流信息已经必不可少。与此同时,由于网络协议自身 的缺陷、网络的丌放性以及黑客的攻击,网络安全越来越受到人们的重视,也 已经成为研究的热点。而在网络安全领域内,由于渗透测试可以发现新的安全 漏洞,所以它是当今保证网络安全最流行的方法之一。 渗透测试本身是一种专业的安全服务,类似于军队里的“实战演习”或者 “沙盘推演”的概念,通过实战和推演,让用户清晰了解目前网络的脆弱性。 国外很多著名的安全公司都提供这种服务,但是目前国内的现状是:大多数企 业没有意识到渗透测试的作用;仅有少数的信息安全企业有能力出色的完成渗 透测试服务。因此,渗透测试甚至一度成为检验安全公司技术能力的一个标尺。 渗透测试的技术手段十分丰富,本文重点研究其中的缓冲区溢出和s q l 注 入技术。这是因为:缓冲区溢出漏洞危害巨大,一般来说,缓冲区溢出都会得 到系统管理员权限,后果不墩设想,而且此种类型的漏洞利用程序在网络上传 播很广,易于获取,但是渗透测试不同于黑客攻击,应该保证目标系统的稳定 性与安全性,所以应对缓冲区溢出攻击程序慎重的选择;s q l 注入是近年来比 较流行的攻击技术,国外在这方面的研究到2 0 0 0 年就已经比较成熟,国内则在 2 0 0 3 年爿比较流行,但是针对j s p 的注入研究则都较少。 一般来说,很多渗透测试必须由测试人员手动进行( 比如脚本漏洞是由于 程序编写不严密导致的,具体的测试必须根据程序的编写进行) ,导致渗透测试 的工作量巨大,因此有必要尽可能采用程序实现的方法来代替手动测试。 缓冲区溢出攻击和s q l 注入作为渗透测试中重要的方法,测试步骤相对固 定,有利于使用程序实现。但是很多工具进行测试时方法不够灵活,有时会降 低测试准确性,这对渗透测试的检测方法以及实现方法提出了更高的要求。 奎堕堡;! ;查堂堡主塑壅圭堂堡笙苎 1 2 渗透测试简介 很多人认为渗透测试的目的是侵入到某个企, d i n 络的内部【2 】,这是一种错 误前认识了) i - 。w 渗透测试大员会尽最大的努力来攻破目标网络,一但测试的总- 体一 目标是验证被测网络安全策略的有效性,并根据测试结果来调整安全策略。网 络安全领域内有很多技术,为什么要采用渗透测试呢? 最重要的原因是,渗透 测试可以展现攻击者获得了什么样的信息,这些信息的泄漏会造成何种程度的 损害。渗透测试通过模拟攻击者采用的手段来检测网络漏洞,展示了主机的 安全性是多么容易受到攻击,并且生动晚明了此种威胁可能造成的后果。因此, 渗透测试有时候又被称为“e t h i c a lh a c k i n g l 3 l ,。渗透测试- 1 - 以针对大多数流行的 环境,包括企业内部网、外部网、拨号网络等;渗透测试包含的技术很多,如 拒绝服务攻击l “、缓冲区溢出攻击1 5 1 【“、漏洞扫描n 脚本攻击队暴力破解等。 目前很多安全公司都有专业的渗透测试服务【9 】,而且市场需求也在不断增长1 1 0 1 。 完整的渗透测试包括四个步骤:发现、列举、漏洞映射、侵入【1 1 l ,下面将 分别介绍。 发现 无论被测试的是什么环境,在合理的时白j 段内获得尽可能多的有关目 标组织的信息是重要的一步。i n t e r n e t 是各种信息的最好来源,例如测试者 可以彻底的搜索各w h o i s 数据库和新闻组,可能得到比该组织预期更多 的i n t e r n e t 连接信息;对基于网络的攻击,可以使用p i n g 或i c m p n u m 之类 的工具进行大范围的p i n g 扫描来决定潜在的目标;使用端口扫描工具,可 以识别所有开放的端口。 列举 列举和发现的关键区别在于深入的程度。列举涉及到主动获取用户名、 网络共享信息和服务器程序版本信息等。这些信息可以通过连接不同平台、 匿名登录获取标志信息来得到,例如t e l n e t 、w i n d o w s 的空会话连接等。 漏洞映射 漏洞映射使用目标的关键信息映射众所周知的安全漏洞。常见的方法 是将特定系统的属性和开放的安全漏洞信息资源作比较,这些资源包括供 应商的安全警告,计算机紧急响应组( c o m p u t e re m e r g e n c yr e a d i n e s st e a m , c e r t ) 发柿的漏洞信息等。 2 太原理:l :火学硕十研究生学位论文 侵入 通过漏洞映射得到目标系统的弱点后就可以进入入侵阶段,渗透测试 人员利用这些弱点尝试获得目标的最高权限。无论采用什么方法,目标最 终是获得系统的特权。 测试目标不同,涉及采用的技术也会有一定差异,因此下面简单说明在不 同位置、攻击路径不同时可能采用的技术。 内网测试 内网测试指的是渗透测试人员由内部网络发起测试,这类测试能够模 拟企业内部违规操作者的行为。最主要的优势是绕过了防火墙的保护。可 能采用的技术有:远程缓冲区溢出;口令猜测:b s 或c s 应用程序测试。 外网测试 外网测试是渗透测试人员完全处于外部网络,模拟对内部网络状态一 无所知的外部攻击者的行为。可能采用的技术有:对网络设备的远程攻击: 口令管理安全性测试;防火墙规则试探、规避;w e b 及其它开放应用服务 的安全性测试。 不同网段v l a n 之间的渗透 这种渗透方式是从某内部或外部网段,尝试对另一网段v l a n 进行渗 透。可能采用的技术有:对网络设备的远程攻击;对防火墙的远程攻击或 规则探测、规避尝试。 1 3 现有渗透测试工具的不足 渗透测试根掘已知的目标信息可以分成:黑箱式测试和透明式测试。黑箱 式测试指测试人员对目标系统没一无所知,如i p 地址,网络的配置情况等;而 在透明式测试中,测试人员已经对目标系统和网络配置及软硬件的使用情况有 了一定的了解。黑箱式测试能够利用类似于s p i k e 的工具快速地自动进行。使 用s p i k e ,能够映射很多漏洞信息并提供了溢出代码,然而s p i k e 发起的攻击 是随机的,所以这个工具会中断系统或者服务。 目前还有许多透明式的商业测试工具和开放源码的测试工具,如c a n v a s 和 c o r ei m p a c t 包括了网络扫描器和缓冲区溢出平台;m e t a s p l o i t 和l i b e x p l o i t 是丌 放源码的缓冲区溢出测试工具。这些工具中包括了常见的溢出程序及生成 3 太原理:l 大学硕+ 研究生学位论文 s h e l l c o d e 的工具。缓冲区溢出作为渗透测试中必不可少的技术,可能会给目标 系统留下安全漏洞或者造成无意的损害,如m e t a s p o i t 中针对w i n d o w s 系统 l s a s s 服务的攻击程序会导致系统在一分钟之内重新启动。当前的缓冲区溢出 一测试工具一般没有认真筛选溢出代码,一所_ 以使用它们进行测试时目标主机的安 全性无法保证。 随着网络管理员安全意识的增强,缓冲区溢出漏洞的寿命已经越来越短, 一般服务器都能够及时的安装系统补丁,所以缓冲区溢出一般在内网渗透测试 时采用。在这种情形下,s q l 注入技术显得非常重要,因为s q l 注入使用的是 提供服务的端口。n b s i 是目前国内最强的注入检测工具,但是在准确性方面不 高,并且仅仅针对a s p ( a c t i v es e r v e rp a g e ) 。但是经过测试,j s p o a v as e r v e rp a g e ) 中也可能存在注入。 1 4 论文研究的内容 本文第一部分详细介绍了缓冲区溢出的原理,并对缓冲区溢出的不可靠代 码及s q l 注入方法进行了分析,重新筛选了s h e l l c o d e 。第二部分阐述了s o l 注入的原理,针对m s s q ls e r v e r 改进了s q l 注入的检测及猜解方法,新的方 法采用状态码及返回信息相结合的方法进行注入。注入检测根据关键字判定, a s p 注入的关键字包括:m i c r o s o f t ,p r o v i d e r ,数据类型,错误,转换,发生语 法错误,j s p 注入的关键字包括:i a v a s q l s q l e x c e p t i o n ,数据类型,转换,发 生语法错误。最后,实现了一个基于缓冲区溢出和s o l 注入的渗透测试工具。 实验部分包括:使用抓包工具w i n s o c k e x p e r t 对n b s i 的注入检测及猜解方 法进行分析,使用本文所实现的工具进行缓冲区溢出实验及s q l 注入实验。实 验结果表明,该工具的准确性相对于n b s i 更好,并能进行j s p 注入。 软件的实现采用j a v a 语言,这使得本工具具有良好的跨平台性。 1 5 论文安排 全文共分为六章,其余章节具体安排如下: 第二章主要对缓冲区溢出攻击技术的原理进行研究,并对其中的关键技术 进行分析,最后重新筛选了s h e l l c o d e 。 第三章主要研究s q l 注入的原理,分析了m s s q ls e r v e r 的三个关键系统 :4 太原理:i :大学硕士研究生学位论文 表,介绍了采用系统表进行注入的方法。本章最后,给出了我们在测试中发现 的j s p 出错信息,由此表明j s p 中也存在注入。 第四章是软件的设计与实现,介绍了软件的结构和实现流程。 第五章为实验部分,列出了实验结果,并与同类软件进行了比较。 第六章是结论部分,针对研究中出现的问题,提出了今后的研究设想。 5 太原理:l = 大学硕士研究生学位论文 第二章缓冲区溢出攻击技术 一一f _ 一 缓冲区溢出攻击占到了网络攻击总量的百分之五十以上,而且缓冲区溢 出造成的危害巨大,因此针对缓冲区溢出攻击漏洞进行渗透测试是必不可少的。 本章将重点讲述缓冲区溢出漏洞产生的原因和缓冲区溢出攻击技术的原理。 2 1 缓冲区溢出攻击技术简介 所谓缓冲区,简单说就是指程序运行时内存中的一块连续的区域。例如c 语言中经常要用到的数组,其中最常见的是字符数组。数组与c 语言中所有的 变量一样,可以被声明为静态或动态。静态变量在程序加载时定位于数据段, 动念变量在程序运行时定位于堆栈之中。“缓冲区溢出”简单地讲就是向一个缓 冲区中写入过多的数据,超出了其边界所产生的溢出1 5 1 。 缓冲区溢出将导致系统受到三个方面的攻击:导致关于数据不可获取的拒 绝服务攻击( 针对可得性的攻击) ;导致数据被更改( 针对完整性的攻击) ;导 致敏感信息被读取( 针对机密性的攻击) 【1 3 1 。 攻击者通过精确构造数据并控制用于堆栈缓冲区溢出的数据的量,达到执 行其所期望的代码的目的。攻击者发送的数据中都包含一些特殊的字节码( 二 进制指令) ,一旦攻击成功,这些二进制指令将会被执行。这些攻击者使用的二 进制指令代码被称作s h e l l c o d e ,s h e l l c o d e 将为攻击者对被攻击主机的控制提供 服务。这些s h e l l c o d e 将以被攻击进程同等的权限运行,大多数的服务程序都是 以超级用户权限运行的。也就是说,s h e l l c o d e 有可能以超级用户权限执行,这 样攻击者就可以完全控制目标主机。 如上所述,缓冲区溢出攻击大致可以分为三个步骤:首先,向有漏洞程序 的缓冲区注入攻击字符串( 包括s h e l l c o d e ) ;然后,利用其漏洞改写内存中的特 定数据( 如返回地址) 使得程序的执行流程跳转至预先植入的s h e l l c o d e :最后, 执行:s h e l l c o d e 使攻击者获得被攻击主机的控制权,攻击者继而以一定的方式控 制被攻击主机。 一 缓冲区溢出攻击技术的种类很多。从攻击原理分类,缓冲区溢出攻击可以 分为栈溢出、堆溢出、格式化字符串溢出和单字节溢出等;从攻击方式分类, 6 太原理上火学硕士研究生学位论文 又可分为本地溢出和远程溢出两类。本文将主要讨论远程溢出攻击技术。 2 2 普通的缓冲区i 益t t :l 攻击技术 2 2 1 堆栈溢出攻击技术 进程在内存中的映像可以被分成三个区域:文本、数据和堆栈( 如图2 - 1 所示) 。文本区是由程序确定的,存放代码( 指令) 和只读数据。文本区域对应 可执行文件的文本段,这个区域通常被标记为只读,任何针对该区域的写操作 都会导致错误。数据区域包含了己初始化和未初始化的数掘,静态变量储存在 这个区域中。数据区域对应可执行文件中的d a t a b s s 段。堆栈区用来存放动 态变量和函数调用的现场数据。这里重点关注堆栈区域。 蜒蓝 堆栈堆b s s 参数 一 高地址 享库 低地址 图2 1 内存结构 f i 9 2 - 1m e m o r ys t r u c t u r e 由于系统程序多是由c 语言编写的,而c 语言编译器又没有对数组边界做 严格的检查,所以缓冲区溢出多出现在c 语言编写的程序中。下面的程序中, 向一个缓冲区填充的数据量超过它所能容纳的数据量( 即超过了缓冲区的边 界) ,此时若不做边界检查,就会发生缓冲区溢出。 v o i df u n c t i o n ( c h a r + b u f s r c ) c h a rb u f _ d e s t 1 6 ; s t r c p y ( b u f _ d e s t ,b u f _ s r c ) ; t 主函数+ 、 m a i n 0 7 太原理i :大学硕士研究生学位论文 i n t 1 ; c h a rs t r 2 5 6 ; f o r ( i :o ;i 2 5 6 ;i + + ) s t r i = a ; 一一伍丽俩( s 仃) - 一 , 从程序中明显可以看出,数组s t r 的大小( 2 5 6 字节) 远远超过了目的缓冲 区b u fd e s t 的大小( 1 6 字节) ,从而导致了缓冲区溢出。 在高级语言中,程序函数调用和函数中的临时变量都会用到堆栈。当程序 中发生函数调用时,主要完成如下操作:首先把参数压入堆栈;继而向堆栈中 压入指令寄存器( e i p ) 中的内容,作为返回地址( r e t ) ;接着放入堆栈的是丛 址寄存器( e b p ) 的内容:然后把当前的栈指针( e s p ) 拷贝到( e b p ) ,作为新 的基地址;最后把e s p 减去适当的数值,为本地变量留出一定空问。调用函数 f u n c t i o n 前后,堆栈使用情况如图2 2 所示: 低地址 离地址 s t r e b p- 谢用前调用时 训用后 图2 - 2 函数调用时栈的情形 f i g 2 - 2m e m o r ys t a t eo fu s i n gf u n c t i o n ,节 从图2 2 中可以看出,f u n c t i o n 函数调用完成后,s t r 数组的内容( 2 5 6 个字 母一a 即0 x 6 1 6 1 6 1 ) 已经覆盖了从地址b u f e s t 到地址b u f _ d e s t + 2 5 6 内存空间 ( 阴影部分) 的所有原来的内容,包括调用函数f u n c t i o n 时保存的e b p 和返回 地址r e t 。这样,函数返回时就返回到地址0 x 6 1 6 1 6 1 ,发生错误。可见,缓冲区 溢出允许攻击者改变程序的正常执行流程。如果攻击者将一段s h e l l c o d e 放入缓 8 太原理1 :火学硕十研究生学位论文 冲区中,并覆盖函数的返回地址使之指向这段s h e l l c o d e ( 如图2 3 ) ,则当函数 返回时,程序将转而执行攻击者所植入的s h e l l c o d e ,进而攻击者将获得主机的 控制权。如果被攻击的程序是以超级用户身份运行,则攻击者可获得超级用户 权限,将完全控制被攻击主机。 低地址高她址 缓冲区 e b p 参数 n o p s h e l l c o d e 严尉r e t q 图2 - 3 覆盖返回地址 f i g 2 - 3r e p l a c i n gt h er e t u r na d d r e s s 这种溢出攻击由于攻击字符串是放在栈中,所以通常被称为栈溢出【1 4 | 。 2 2 2 堆溢出攻击技术 所谓堆( h e a p ) ,就是由应用程序动态分配的内存区。操作系统中,大部 分的内存区是在内核一级被动态分配的,但h e a p 段是由应用程序来分配的, 它在编译的时候被初始化。非初始化的数据段( b s s ) 用于存放程序的静态变 量,这部分内存都是被初始化为零的。由于在考虑缓冲区溢出攻击时,h e a p 段和b s s 段具有相近的特性,因此下面将要提到的“基于堆的溢出”既包含 h e a p 段的溢出,也包含b s s 段的溢出。 在大部分的系统( 包括l i n u x 系统) 中,h e a p 段是向上增长的( 向高地 址方向增长) 。也就是说,如果一段程序中先后声明两个静态变量,则先声明的 变量的地址小于后声明的变量的地址。 接下来是一段有漏洞的程序: s t a t i cc h a rb u f f e r 5 0 ; s t a t i ci n t ( + f u n c p t r ) 0 ; w h i l e ( 4 s t r ) + b u f f e r + + = + s t r ; + s t r + + : 9 太原理工大学硕十研究生学位论文 ) + f u n c p t r o ; 在堆中,变量的存放如图2 - 4 所示: 一一 一一一一 一一一一 低地址高地址 b u f f e 5 0 】 f u n c d tr 图2 - 4 堆中变量的存放 f i g 2 4v a r i a b l es t o r a g ei nh e a p 其中,b u f f e r 是一个字符数组,f u n c p t r 是一个函数指针,s t r 是程序从外部 获得的一个字符串。函数指针实质上就是函数的入口地址。由于程序在做字符 串拷贝时没有做边界检查,攻击者可以覆盖f u n c p t r 函数指针的值【1 5 】。程序在执 行f u n c p t r 函数时,就会跳转到被覆盖地址处继续执行。如果攻击者精确构造填 充数据,就可以在缓冲区中植入s h e l l c o d e 并使用s h e l l c o d e 的内存地址覆盖 f u n c p t r ,当f u n c p t r 被调用时,s h e l l c o d e 将被执行。 针对堆还有另外一种类型的攻击。在c 语言中包含了一个简单的检验恢复 系统,称为s e t j m p l o n g j m p 。在检验点设定“s e t j m p ( j m p b u o ”,用 “l o n g j m p ( j m p _ b u f , v a l ) ”来恢复检验点。 s e t j m p ( j m p _ b u f ) 用来保存当前的堆栈栈l 帧到j m p - b u f 中, l o n g j m p ( j m p _ b u f , v a l ) 将从j m p _ b u f 中恢复堆栈栈帧,l o n g i m p 执行完后,程序继 续从s e t j m p o | r f l t - - 条语句处执行,并将v a l 作为s e t j m p o 的返回值。j m p _ b u f 被声明为全局变量,因此存放在堆中。i m p 中保存有寄存器 、 、_buf e b xe s ie d i e b p 、e s p 、e i p ,如果能在l o n g j m p 执行以前覆盖掉j m p b u f ,就能重写寄存器 e i p 。因此当l o n g j m p 恢复保存的堆栈栈帧后,程序就可以跳到指定的地方去执 行。跳转地址可以在堆栈中,也可以在堆中。 2 2 3 格式化字符串溢出攻击技术 在c 语言中,p r i n t f o 函数被用来向终端( 或系统隐含指定的输出设备) 输出若 干任意类型的数据。艺的一般格式为: + p r i n t f f 格式控制,输出表项) ; 1 0 太原理i :火学硕十研究生学位论文 c 语言提供一系列与p r i n t f 函数搠有相近特性的函数。这一系列函数包括 f p r i n t f 、s p r i n t f 、s n p r i n t f 、v p r i n t f 、v f p r i n t f 、v s p r i n t f 和v s n p r i n t f 等。格式化 字符串就是p r i n t f 系列输出函数中用来控制数据输出格式的格式控制字符串。 p r i n t f 系列函数被调用时,从格式串中依次读取字符,当遇到格式化字符时, 就按照格式控制字符从输出表项对应的变量中读耿数据,然后按照控制字符规 定的格式输出数据。 表2 - 1 列出了与本文相关的格式控制字符: 表2 - 1 相关格式化字符及含义 t a b l e 2 - 1r e l a t e df o r m a ts t r i n ga n dm e a n i n g 格= 】= i = 化j ,符表1 盥义 d x u n 以+ 进制输整数 以l 。六进制输整数 以j 进制输:| :无符寸整数 输j | j 的字符数写入变量 输j | j j ,符 在这早重点关注格式化字符“n ”。“n ”的作用是把已经输出的字符串的 长度写入指定的内存变量中。“n ”在一般的编程中很少用到,但在一些大型 程序中由于运行情况复杂,程序员往往需要使用这个格式符获取当前输出的字 符个数。 如果p r i n t f 中的输出表项的个数大于格式化字符的个数,多余的输出表项将 被忽略;如果输出表项的个数小于格式化字符的个数,p r i n t f 将从给定的输出表 项的下一个内存单元为多余的格式控制字符读取数据。 例如,语句: p r i n t f ( “d ,d ,d ,”,1 ,2 ) ; 当这条语句执行时,堆栈的情况如图2 5 所示。从图2 5 中可以看出,格式 化字符串地址和输出表项依次存放在堆栈中,p r i n t f 函数依次从输出表项读取数 据并输出。对于第3 个“d ”,读到的数据将是图2 5 中“d u m p ”内存单元的 值。如果将上面的语句的“d ”换成“n ”,这时倘若“d u m p ”的值为有效地 址,则以它为地址的内存单元将会被改写为6 ( p r i n t f 函数输出的字符串的长度) 。 l h 此n - q - 见,利用p r i n t f 函数可以改写内存【1 6 ) 。 太原理:【大学硕士研究生学位论文 一一一一一 输:| ;表项1 输f f 表项2 e b p 一格= l _ i :化字符串一 1 2 d u m p 图2 - 5 调用p r i n t f 时的内存结构 f i g 2 5m e m o r ys t r u c t l l r eo fu s i n gp r i n t f p r i n t f 函数参数个数可变,除“格式控制”是必需的外,输出表项可以没有。 如果没有输出表项,则格式控制字符串中不应含有格式控制符。但是如果这个 格式控制字符串来自外部输入,就不能保证其中不含格式控制符。 许多“经验丰富”的程序员出于效率的考虑,习惯使用这样的语句: p r i n t f ( s t r ) ; 而不是 p r i n t f ( “s ”s t r ) ; 在这里s t r 是个字符串。如果这个字符串是来自外部的输入,攻击者就有 可能利用它,达到修改内存并执行任意代码的目的。 再看如下的一段代码: c h a rs t r 8 0 ; s n p r i n t f ( s t r , 8 0 ,f o r m a t ) ; 其中,f o r m a t 是字符串且来自外部输入。注意,这里省略了输出表项。当 s n p r i n t f 函数被调用时,堆栈的情形如图2 - 6 所示。从图2 - 6 可以看出,当前的 堆栈中依次存放着函数的参数、2 0 字节无关数据和字符数组s t r 。如果f o r m a t 字符串包含足够多个格式控制字符,s n p r i n t f 函数将依次从堆栈中读取数据来作 为格式控制符的输出值,s n p r i n t f 将可能直读到字符数组s t r 。我们知道对于 “n ”,则将已经输出的字符的个数写到以读到的数据作为地址的内存单元中 改写内存。注意,输出字符的个数是字符串应当输出字符的个数,而不是 实际输出字符的个数。也就是说,即使程序中限定了输出字符串的长度,攻击 者仍可以使用类似“m u ”( 其中m 为一整数值) 的格式控制符得到任意大小的 输出字符个数。由此,攻击者可以利用这个漏洞来修改任意内存为任意值。 1 2 太原理:i :大学硕士研究生学位论文 e b p s lr 地址 s t r 的长度 e b p 格式化:,符串地址 d u m p ( 2 0 :,节) s t r ( 2 0 :节) 图2 - 6 调用s n p r i n t f 时的内存结构 f i g 2 6m e m o r ys t r u c t ur eo fu s i n gs n p r i n t f 针对上面的代码,可以在f o r m a t 的开始部分放入要改写的内存的地址,然 后使用5 个“x ”跳过2 0 字节的无关数据。s n p r i n t f 在处理f o r m a t 字符串时, 首先将f o r m a t 中放入的内存地址原样拷贝到s t r 数组中,然后根据格式控制符 从堆栈中读数据。如果在f o r m a t 中再加上一个“n ”,那么当前输出的字符的 个数将被写入到在f o r m a t 中预设的地址中。同时还可以利用“m u ”设定当 前输出字符串的长度而得到任意的值。 例如要在o x b f f f f b e o 中写入0 x 1 0 2 0 4 0 8 0 ,则可以使用这样的f o r m a t 串, “) ( e o x x f b ) ( f f l x 6 f a a a a x e l l x f b x f f k x b f a a a a l x e 2 ) 【f b ) 【f f k x b f a a a a l x e 3 k f b 、) ( f t k x b f x x x x 6 8 u n 1 9 2 u n 2 2 4 u n 2 4 0 u n ”。其中a a a a 是用来填充的,没有 实际意义。可以看出,数据的写入是通过如图2 7 所示的四个步骤完成: 未写入前二二 互工至 三j 臣! 互工至 三口王 第1 步写入后 第2 步写入后 第3 步写入后 第4 步丐入石 8 0 0 0 0 0 0 04 14 14 14 l 8 0 4 0们0 0 0 04 14 14 1 _ 8 0 4 0 2 0 0 2 0 0 0 04 14 1 8 04 0 2 0j 00 3 0 0 0 04 1 太原理:l :大学硕士研究生学位论文 每步的写入的具体情况如下: 1 1 在o x b f f f f b e o 中写入o x 0 0 0 0 0 0 8 0 2 1 在o x b f f f f b e l 中写入o x 0 0 0 0 0 1 4 0 3 1 在o x b f f f f b e 2 冲写j k o x o o o 0 0 2 2 0 4 、在o x b f f f f b e 3 中写入o x 0 0 0 0 0 3 1 0 可以看出写入一个确定的数,每一步写入的数值是上一步己经输出的字符 串个数和增加的输出字符的个数的和。对于给定的要写入的数,用来计算每一 步需增加的输出字符的个数的算法描述如下: w r i t e _ b y t e + = o x l 0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司背景墙策划方案
- 公司春季放风筝活动方案
- 公司游园小活动策划方案
- 公司职称评审策划方案
- 公司群体互动策划方案
- 公司群体性运动活动方案
- 公司节前大扫除活动方案
- 公司知识跨年活动方案
- 公司管理规范年活动方案
- 公司旅游预热引流活动方案
- 2025中国国新控股有限责任公司招聘7人笔试参考题库附带答案详解
- 酒店客户关系管理试题及答案
- 高压氧试题(含答案)
- 传染病人转诊制度
- Notre-Dame de Paris 巴黎圣母院音乐剧歌词(中法双语全)
- 物理学史考试题库及答案(含各题型)
- 深静脉血栓预防和护理评估
- 扣眼穿刺法课件
- 术后尿潴留预防与处理
- 2025年中级育婴员技能等级证书理论全国考试题库(含答案)
- 2025年果树种植技术培训与咨询服务合同范本
评论
0/150
提交评论