堵塞Web漏洞
gunguymadman
|
1#
gunguymadman 发表于 2008-08-02 11:26
堵塞Web漏洞
Web的大多数安全问题都属于下面三种类型之一:
1、服务器向公众提供了不应该提供的服务。 2、服务器把本应私有的数据放到了公开访问的区域。 3、服务器信赖了来自不可信赖数据源的数据。 显然,许多服务器管理员从来没有从另一个角度来看看他们的服务器,例如使用端口扫描程序。如果他们曾经这样做了,就不会在自己的系统上运行那么多的服务,而这些服务原本无需在正式提供Web服务的机器上运行,或者这些服务原本无需面向公众开放。 与这种错误经常相伴的是,为了进行维护而运行某些不安全的、可用于窃取信息的协议。例如,有些Web服务器常常为了收集订单而提供POP3服务,或者为了上载新的页面内容而提供FTP服务甚至数据库服务。在某些地方这些协议可能提供安全认证(比如APOP)甚至安全传输(比如POP或者FTP的SSL版本),但更多的时候,人们使用的是这些协议的非安全版本。有些协议,比如Msql数据库服务,则几乎没有提供任何验证机制。 从公司外面访问自己的网络,完整地检测、模拟攻击自己的网站看看会发生些什么,这对于Web管理者来说是一个很好的建议。有些服务在机器安装之后的默认配置中已经启动,或者由于安装以及初始设置的需要而启动了某些服务,这些服务可能还没有正确地关闭。例如,有些系统提供的Web服务器会在非标准的端口上提供编程示范以及系统手册,它们往往包含错误的程序代码并成为安全隐患所在。正式运行的、可从Internet访问的Web服务器不应该运行这些服务,请务必关闭这些服务。 9.1Web服务器常见漏洞介绍 Www@Chinaz@com 我们的目的就是向大家介绍Web服务器的常见漏洞,相信看了自己也能试着发现一些Web服务器的漏洞了。不过需要记住的是,不要为了寻找漏洞而寻找漏洞。另外,即使你找到了漏洞,是否能够利用还是另外一回事。 Web服务器存在的主要漏洞包括物理路径泄露,CGI源代码泄露,目录遍历,执行任意命令,缓冲区溢出,拒绝服务,条件竞争和跨站脚本执行漏洞,和CGI漏洞有些相似的地方,但是更多的地方还是有着本质的不同。不过无论是什么漏洞,都体现着安全是一个整体的真理,考虑Web服务器的安全性,必须要考虑到与之相配合的操作系统。 中.国站长站 9.1.1物理路径泄露 物理路径泄露一般是由于Web服务器处理用户请求出错导致的,如通过提交一个超长的请求,或者是某个精心构造的特殊请求,亦或是请求一个Web服务器上不存在的文件。这些请求都有一个共同特点,那就是被请求的文件肯定属于CGI脚本,而不是静态HTML页面。 还有一种情况,就是Web服务器的某些显示环境变量的程序错误的输出了Web服务器的物理路径,这应该算是设计上的问题。 Www.Chinaz.com 9.1.2目录遍历 站长.站 目录遍历对于Web服务器来说并不多见,通过对任意目录附加“../”,或者是在有特殊意义的目录附加“../”,或者是附加“../”的一些变形,如“..\”或“..//”甚至其编码,都可能导致目录遍历。前一种情况并不多见,但是后面的几种情况就常见得多,去年非常流行的IIS二次解码漏洞和Unicode解码漏洞都可以看作是变形后的编码。 Www.Chinaz.com 9.1.3执行任意命令 [中国站长站] 执行任意命令即执行任意操作系统命令,主要包括两种情况。一是通过遍历目录,如前面提到的二次解码和UNICODE解码漏洞,来执行系统命令。另外一种就是Web服务器把用户提交的请求作为SSI指令解析,因此导致执行任意命令。 9.1.4缓冲区溢出 缓冲区溢出漏洞想必大家都很熟悉,无非是Web服务器没有对用户提交的超长请求没有进行合适的处理,这种请求可能包括超长URL,超长HTTPHeader域,或者是其它超长的数据。这种漏洞可能导致执行任意命令或者是拒绝服务,这一般取决于构造的数据。 Chinaz.com 9.1.5拒绝服务 拒绝服务产生的原因多种多样,主要包括超长URL,特殊目录,超长HTTPHeader域,畸形HTTPHeader域或者是DOS设备文件等。由于Web服务器在处理这些特殊请求时不知所措或者是处理方式不当,因此出错终止或挂起。 9.1.6条件竞争 这里的条件竞争主要针对一些管理服务器而言,这类服务器一般是以System或Root身份运行的。当它们需要使用一些临时文件,而在对这些文件进行写操作之前,却没有对文件的属性进行检查,一般可能导致重要系统文件被重写,甚至获得系统控制权。 9.2CGI的安全性 中.国.站长站 现在我们来谈谈到底什么是CGI(CommonGateIntergace)。在物理上,CGI是一段程序,它运行在Server上,提供同客户段Html页面的接口。这样说大概还不好理解。那么我们看一个实际例子:现在的个人主页上大部分都有一个留言本。留言本的工作是这样的:先由用户在客户段输入一些信息,如名字之类的东西。接着用户按一下“留言”(到目前为止工作都在客户端),浏览器把这些信息传送到服务器的CGI目录下特定的CGI程序中,于是CGI程序在服务器上按照预定的方法进行处理。在本例中就是把用户提交的信息存入指定的文件中。然后CGI程序给客户端发送一个信息,表示请求的任务已经结束。此时用户在浏览器里将看到“留言结束”的字样。整个过程结束。 CGI是一种共用网关接口,它可以称之为一种机制.因此您可以使用不同的程序编写适合的CGI程序,这些程序语言包括VisualBasic、Delphi或C/C++等,您将已经写好的程序放在Web服务器的计算机上运行,再将其运行结果通过Web服务器传输到客户端的浏览器上。事实上,这样的编制方式比较困难而且效率低下,因为你每一次修改程序都必须重新将CGI程序编译成可执行文件。 站.长站 9.2.1为什么使用CGI CGI可以为我们提供许多HTML无法做到的功能,比如: 中国.站长站 1、一个记数器 2、顾客信息表格的提交以及统计 Www^Chinaz^com 3、搜索程序 4、Web数据库 用HTML是没有办法记住客户的任何信息的,就算用户愿意让你知道。用HTML也是无法把信息记录到某一个特定文件里的。要把客户段的信息记录在服务器的硬盘上,就要用到CGI。这是CGI最重要的作用,它补充了HTML的不足。是的,仅仅是补充,不是替代。 9.2.2CGI安全问题 在计算机领域——尤其在Internet上——尽管大部分Web服务器所编的程序都尽可能保护自己的内容不受侵害,但只要CGI脚本中有一点安全方面的失误——口令文件、私有数据、以及任何东西,就能使入侵者能访问计算机。遵循一些简单的规则并保持警惕能使自己的CGI脚本免受侵害,从而可以保护自己的权益。这里所说的CGI安全,主要包括两个方面,一是Web服务器的安全,一是CGI语言的安全 先从CGI问题的分类开始谈起,一般来说,CGI问题主要有以下几类: 1、暴露敏感或不敏感信息; 中国.站长站 2、缺省提供的某些正常服务未关闭; 3、利用某些服务漏洞执行命令; 4、应用程序存在远程溢出; 5、非通用CGI程序的编程漏洞。 中国站长_站,为中文网站提供动力 下面我们就来详细介绍一下关于CGI的漏洞: ●配置错误 这里所说的配置错误主要指CGI程序和数据文件的权限设置不当,这可能导致CGI源代码或敏感信息泄露。还有一个经常犯的错误就是安装完CGI程序后没有删除安装脚本,这样攻击者就可能远程重置数据。前些日子“XX大联盟”论坛多次被黑就是这个低级错误所致。 ●边界条件错误 这个错误主要针对C语言编写的CGI,利用这个错误,攻击者可能发起缓冲区溢出攻击,从而提升权限。 ●访问验证错误 这个问题主要是因为用于验证的条件不足以确定用户的身份而造成的,经常会导致未经授权访问,修改甚至删除没有访问权限的内容。用于确定用户身份的方法一般有两种,一是账号和密码,一是Session认证。而不安全的认证方法包括Userid认证,Cookie认证等等。 ●来源验证错误 比较常见的利用这种错误进行攻击的方法就是DoS,也就是拒绝服务攻击,如我们知道的灌水机,就是利用CGI程序没有对文章的来源进行验证,从而不间断的发文章,最后导致服务器硬盘充满而挂起。 ●输入验证错误 站.长站 这种错误导致的安全问题最多,主要是因为没有过滤特殊字符。比如说,没有过滤“%2”造成的畸形注册,没有过滤“../”经常造成泄露系统文件,没有过滤“$”经常导致泄露网页中的敏感信息,没有过滤“;”经常导致执行任意系统指令,没有过滤“|”或“\t”经常导致文本文件攻击,没有过滤“’”和“#”经常导致SQL数据库攻击,没有过滤“<”和“>”导致的Cross-SiteScripting攻击等。 Chinaz_com ●意外情况处理失败 Www_Chinaz_com 这种错误也很常见,如没有检查文件是否存在就直接打开设备文件导致拒绝服务,没有检查文件是否存在就打开文件提取内容进行比较而绕过验证,上下文攻击导致执行任意代码等。 中.国.站.长.站 ●策略错误 这种错误主要是由于编制CGI程序的程序员的决策造成的。如原始密码生成机制脆弱导致穷举密码导致在Cookie中明文存放账号密码导致敏感信息泄露,使用与CGI程序不同的扩展名扩展名存储敏感信息导致该文件被直接下载,丢失密码模块在确认用户身份之后直接让用户修改密码而不是把密码发到用户的注册信箱,登陆时采用账号和加密后的密码进行认证导致攻击者不需要知道用户的原始密码就能够登陆等。 ●习惯问题 [中国站长站] 程序员的习惯也可能导致安全问题,如使用某些文本编辑器修改CGI程序时,经常会生成“.bak”文件,如果程序员编辑完后没有删除这些备份文件,则可能导致CGI源代码泄露。另外,如果程序员总喜欢把一些敏感信息(如账号密码)放在CGI文件中的话,只要攻击者对该CGI文件有读权限(或者利用前面介绍的一些攻击方法)就可能导致敏感信息泄露。 ●使用错误 主要是一些函数的使用错误,如Perl中的“die”函数,如果没有在错误信息后面加上“\n”的话,就极可能导致物理路径泄露。 ●其它错误 此外,还有一些其它难以归类的错误,如“非1即”导致绕过认证的问题。 中.国站长站 9.2.3常用的的CGI漏洞检测工具 1.Twwwscan 中.国站长站 这个工具速度比较快,而且可以利用参数把windows系统和unix系统分开扫描,不使用图形界面,比较简单些; 2.Cis Www@Chinaz@com 是个图形化的小巧扫描工具,主要是针对windows系统设计,对检查出来的CGI问题有比较详细的描述,利于使用、分析和解决漏洞; 3.Voideye 图形界面做的比较花哨,可以检查的CGI问题比较多些,但不太准确。 中国.站长站 4.Webscan 检查种类特多,好象有3来条,能提供HTML格式报告,集合了一些跟随攻击方式,这些工具只是检查一下服务器有没有这个链接存在,如果有,就会报出存在漏洞,这当然会有很多误报,工具是死的,人是活的,熟练应用这些辅助工具需要点时间熟悉一下就行了。 Chinaz^com 9.2.4如何让你的CGI更安全 站.长.站 了解了CGI的安全问题,我们也该知道怎么加强CGI的安全了吧?下面简单总结一下作为参考: Www_Chinaz_com 1、使用最新版本的Web服务器,安装最新的补丁程序,正确配置服务器; 2、按照帮助文件正确安装CGI程序,删除不必要的安装文件和临时文件; 站.长.站 3、使用C编写CGI程序时,使用安全的函数; 4、使用安全有效的验证用户身份的方法; 中.国站长站 5、验证用户的来源,防止用户短时间内过多动作; 6、推荐过滤; 7、注意处理好意外情况 8、实现功能时制定安全合理的策略; 中国站长.站 9、培养良好的编程习惯; 中.国.站长站 1、科学严谨的治学态度,避免“想当然”的错误; 9.3 ASP的安全性 ASP(ActiveServerPage),一个重要的Web技术。它的出现给互联网带来了新的活力,它以一种前所未有的方式处理浏览器与服务器的交互通过内建对象、ADO支持、WSH(可通过它管理NTDOMAIN)几乎可以完成传统应用程序所能完成的一切工作! [中国站长站] ASP是一种类似HTML(HypertextMarkupLanguage超文本标识语言)、Script与CGI(CommonGAtewayInterface通用网关接口)的结合体,但是其运行效率却比CGI更高、程序编制也比HTML更方便且更有灵活性,程序安全及保密性也比Script好。如果您是第一次接触互连网(Internet),那么您可能不很了解上述名词,以下对各种名词加以解释并说明它们之间的区别。 HTML(HypertextMarkupLanguage)是一种超文本标识语言,文件通过这种格式可以在互连网上载送浏览,用户只要使用网页浏览器工具就可以浏览这些文件,目前比较常用的工具包括MicrosoftInternetExplorer,NetscapeCommunicator等,由于HTML文件都是由标签(tag)所组成,因此它比较适合制作静态网页,再者,由于先天上的限制HTML是无法直接存取数据库的,所以存取数据库的工作大多是依靠CGI来处理。ASP不但可以包含HTML标签,也可以直接存取数据库及使用无限扩充的ActiveX控件,因此在程序编制上要比HTML方便而且更富有灵活性。 Chinaz.com 简单讲,ASP是位于服务器端的脚本运行环境,通过这种环境,用户可以创建和运行动态的交互式Web服务器应用程序,如交互式的动态网页,包括使用HTML表单收集和处理信息,上传与下载等等,就像用户在使用自己的CGI程序一样。但是他比CGI简单。更重要的是,ASP使用的ActiveX技术基于开放设计环境,用户可以自己定义和制作组件加入其中,使自己的动态网页几乎具有无限的扩充能力,这是传统的CGI等程序所远远不及的地方。使用ASP还有个好处,就在于ASP可利用ADO(ActiveDataObject,微软的一种新的数据访问模型,类似于DAO)方便地访问数据库,从而使得开发基于WWW的应用系统成为可能。 Chinaz@com 9.3.1ASP漏洞分析和解决方法 Www_Chinaz_com ASP的漏洞已经算很少的了,想要找到数据库的实际位置也不简单,但这不表明黑客无孔可入,也正是这个观点,一般的程序设计员常常忘记仔细的检查是否有漏洞,所以才有可能导致网站资料被窃取的事件发生。 Www~Chinaz~com ASP里面含有一个安全漏洞,就是在/site/eg/source.asp这个随软件一起销售的范例程序,里面的内容有教使用者如何在服务器的这个目录下随意写入档案。解决这个漏洞的方法是建议删除所有软件提供的范例程序。 1、Code.asp文件会泄漏ASP代码 Www.Chinaz.com 举个很简单的例子,在微软提供的ASP1.的例程里有一个.asp文件,专门用来查看其它.asp文件的源代码,该文件为ASPSamp/Samples/code.asp。如果有人把这个程序上传到服务器,而服务器端没有任何防范措施的话,他就可以很容易地查看他人的程序。例如: 中国站.长站 code.aspsource=/directory/file.asp 不过这是个比较旧的漏洞了,相信现在很少会出现这种漏洞。 下面这命令是比较新的: Chinaz~com http://someurl/iissamples/exair/howitworks/code.asp/lunwen/soushuo.asp=xxx.asp Chinaz_com 最大的危害莫过于ASP文件可以被上述方式读出;数据库密码以明文形式暴露在黑客眼前; Www.Chinaz.com 问题解决或建议: Www~Chinaz~com 对于IIS自带的showASPcode的ASP程序文件,删除该文件或者禁止访问该目录即可。 2、filesystemobject组件篡改下载FAT分区上的任何文件的漏洞 IIS3、IIS4的ASP的文件操作都可以通过Filesystemobject实现,包括文本文件的读写目录操作、文件的拷贝改名删除等,但是这个强大的功能也留下了非常危险的“后门”。利用Filesystemobjet可以篡改下载FAT分区上的任何文件。即使是NTFS分区,如果权限没有设定好的话,同样也能破坏,一不小心你就可能遭受“灭顶之灾”。遗憾的是很多Webmaster只知道让Web服务器运行起来,很少对NTFS进行权限设置,而NT目录权限的默认设置偏偏安全性又低得可怕。因此,如果你是Webmaster,建议你密切关注服务器的设置,尽量将Web目录建在NTFS分区上,目录不要设定EveryoneFullControl,即使是是管理员组的成员一般也没什么必要FullControl,只要有读取、更改权限就足够了。也可以把Filesystemobject的组件删除或者改名。 3、输入标准的HTML语句或者javascript语句会改变输出结果 Chinaz@com 在输入框中输入标准的HTML语句会得到什么相的结果呢? 比如一个留言本,我们留言内容中输入: <fontsize=1>你好!</font> 如果你的ASP程序中没有屏蔽HTML语句,那么就会改变“你好”字体的大小。在留言本中改变字体大小和贴图有时并不是什么坏事,反而可以使留言本生动。但是如果在输入框中写个javascript的死循环,比如:<aherf=”http://someurl“onMouseover=”while(1){window.close(’/’)}“>特大新闻</a> 那么其他查看该留言的客人只要移动鼠标到”特大新闻“,上就会使用户的浏览器因死循环而死掉。 解决方法和建议: 编写类似程序时应该做好对此类操作的防范,譬如可以写一段程序判断客户端的输入,并屏蔽掉所有的HTML、JavaScrip。 中国.站.长站 4、AccessMDB数据库有可能被下载的漏洞 问题描述: 在用Access做后台数据库时,如果有人通过各种方法知道或者猜到了服务器的Access数据库的路径和数据库名称,那么他能够下载这个Access数据库文件,这是非常危险的。比如:如果你Access数据库book.mdb放在虚拟目录下的database目录下,那么有人在浏览器中输入: http://someurl/database/book.mdb 如果你的book.mdb数据库没有事先加密的话,那book.mdb中所有重要的数据都掌握在别人的手中。 中 |