频道栏目
首页 > 安全 > 系统安全 > 正文

网络渗透——浅谈溢出

2012-02-16 11:17:59      个评论      
收藏   我要投稿
溢出之路,跟来我来吧,tianlu教你学溢出。
溢出的定义:溢出顾名思义,满则溢。如同一杯水,当它满出后就有水流出来。而对于计算机,当执行的程序过多数据过长,就会导致数据“流出”到其他运行的合法程序或者我们的系统缓冲区,并加以执行。也正因如此,缓冲区溢出容易受到攻击并且危害巨大,这也成为了现在一个较为主流的攻击方式。大家抓J的什么批量135溢出啊,445等等这里不做过多介绍我相信你比我还清楚。其原理也与此大同小异,下面我们就看一个关于溢出的简单小示例:
这里我们允许DOS(命令提示符),输入c:\???这里可以会看到提示无法找到文件,很正常你文件也没有叫???的吧,好啦,闲话少说我们继续。紧接着,我们将?的长度扩展,并键入返回。这里我们又会看到提示,文件名过长,如果我们紧接着将?的长度扩展的很长很长呢?我们就会看到DOS程序出错的提示,也就是大家会看到的“发送错误报告请求”“不发送”,这里tianlu我就不做截图了。由此可见


下面我们讲一个具体的例子,就是大家熟知的135端口溢出漏洞。RPC协议是win系统的使用协议,提供了系统的正常的进程交互通信,允许在远程主机上运行任意程序。系统的大多功能服务都必须依靠他来正常运行,可见其漏洞会造成的危害。http://baike.baidu.com/view/32726.htm,下面我们就来看一下RPC服务的操作步骤,
在控制面板中,打开管理工具,并双击服务,打开服务窗口。在列表中找到RPC(全称Remote Procedure Call )打开,在常规选项卡中可以查看该协议的启动类型,选择依存关系可以在对话框中查看一些服务的依存关系。
可以看到受其影响的系统组件很多,其中也包括了DCOM借口服务,这个接口服务用来客户端机器发送给服务器的DCOM对象激活请求,黑客可以利用此漏洞以本地系统权限执行任意的指令,包括建立系统管理员权限的账户等等。

 
如果我们相对DCOM接口进行配置具体操作如下,
打开组件服务(可在运行中输入Dcomcnfg),单击组件服务前的“+”展开至DCOM子菜单项目为止,这样就可以查看各个配置了。这里大家有的系统会看是否记录,我们可以任意选择(这里tianlu是有理由的,因为大多的系统特指win系统默认开启135端口,会给计算机造成不小的损失但大家不必担心我们继续,我一会会给大家讲解)之后选择任意的配置对象右击,从弹出的菜单中选择属相,之后会看到XXXXX class属性对话框,这里XXXXX是大家任意选择的配置对象。我选择的如图,这里大家不要做过多的设置有的默认设置了,主要看标示一栏,如图所示我的默认启动用户了,说明我的135端口打开了(其实这着实是一句废话,因为win系统大多都是默认打开的)我们可以在DOS下输入netstat -an来检测,我的135是果断打开了的




由于DCOM可以远程操作其他计算机的相应DCOM服务,这个也就是用于调用其他PC所具有的函数RPC,利用这个漏洞黑客们可以用特殊形式请求到远程计算机的135端口,轻则造成DDOS重则造成利用管理员权限执行任何指令。
关于RPC服务远程溢出漏洞攻击的例子这里我就不举出了,我相信你比我还熟练,你的什么雪落系列抓J等等(tianlu也玩过,早期135抓J很疯狂的,本人不做抓J的交流)。可以看出RPC这一漏洞就会给我们的计算机造成不小的损失,那我们应该怎么做呢?
从杯满则溢的道理中我相信你已经知道了如何防范了,下面就由我来给大家一一说出,
1编写正确的代码,这个方法属于根本上的防止了缓冲区溢出攻击,特别是像类似C语言此类复杂易出错的编写程序。尽管人们懂得如何安全正确的编写程序组,但漏洞却扔层出不穷,于是人们开发一些用于查错的工具,防止出现代码的错误编写,最简单的方法就是用grep来搜索代码中容易产生漏洞的库调用。
2.非执行的缓冲区
前面我们提到计算机的数据流出会占据其他合法程序的运行,以及系统缓冲区并加以执行,这就变得至关重要。因为他会自动执行,变得棘手了起来。如果我们不执行呢,事实上类似早期unix和linux系统都是此类原理,但如今他们在数据段中动态放入可执行的代码,保持程序的兼容性不可能是的所有程序的数据段不可执行。但对于这一问题win和linux都发布了相关的补丁,其中linux将可执行的代码必须放入堆栈中,但这方法不能杜绝所有溢出攻击。非执行的堆栈保护可以有效对付把代码植入自动变量的缓冲区溢出攻击,而对于其他形式的攻击则没有用。其他的攻击可以采用把代码植入堆或者静态数据段中来进行保护。
3数组边界检查
这不做过多介绍用到Compaq C编译器,植入代码引起缓冲区溢出是一个方面,扰乱程序的执行流程是另一个方面。不像非执行缓冲区保护,数组边界检查完全没有了缓冲区溢出的产生和攻击。这样,只要数组不能被溢出,溢出攻击也就无从谈起。为了实现数组边界检查,则所有的对数组的读写操作都应当被检查以确保对数组的操作在正确的范围内。最直接的方法是检查所有的数组操作,但是通常可以来用一些优化的技术来减少检查的次数。
4.程序指针完整性检查
与边界检查不同,防止程序指针被改变的不同,程序指针完整性检查在程序指针引用之间就检测它的改变,即便一个黑客公公改变程序指针,由于系统事先检测到了指针的改变,这个指针将不会被使用。
其实对于普通用户大家只要做到关端口,下杀软,打补丁,少运行程序即可。
这么这次的浅谈溢出就到这里,一味的机械操作是不用有进步的,从原理上掌握溢出才是王道。。

本文作者tianlu
相关TAG标签 网络
上一篇:mysql注入sleep语句引发的拒绝服务及修复方案
下一篇:主动防御缓冲区溢出攻击的硬件技术
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站