信息来源:中国暗域网络
ASP(Active Server Pages)是服务器端脚本编写环境,使用它可以创建和运行动态、交互的 Web 服务器应用程序。使用 ASP 可以组合 HTML 页 、脚本命令和 ActiveX 组件以创建交互的 Web 页和基于 Web 的功能强大的应用程序。现在有很多网站都使用ASP程序来实现的,包括很多电子商务网站,这样让ASP程序在网站上应用得十分普遍。的确,ASP是一种快速的网站开发工具,但是人们只是看到ASP的快速开发能力,却忽视了ASP所存在的安全问题。ASP一直都是存在众多的安全漏洞,比如,源代码泄露漏洞,密码验证问题,IIS漏洞等等,这些都是困绕着ASP程序开发人员的安全问题。
网上有很多ASP程序的安全漏洞,本文整理了多数ASP程序的漏洞利用方法以及解决方案。
一.ASP程序后的特殊符号漏洞
受影响的版本:
win95+pws
IIS3.0
98+pws4 不存在这个漏洞。
IIS4.0以上的版本也不存在这个漏洞。
问题描述:
这些特殊符号包括小数点,%81, ::$DATA。比如:
http://11.11.11.11/index.asp.
http://11.11.11.11/index.asp%81
http://11.11.11.11/index.asp::$DATA
http://11.11.11.11/index.asp %2e
http://11.11.11.11/index.asp %2e%41sp
http://11.11.11.11/index%2e%asp
http://11.11.11.11/index.asp %2e
http://11.11.11.11/msadc/samples ... ./../../../boot.ini
可以查看到boot.ini里的内容
在安装有IIS3.0和win95+PWS的浏览中就很容易看到index.asp的源程序。究竟是什么原因造成了这种可怕的漏洞呢?
究其根源其实是 Windows NT 特有的文件系统在做怪。有一点常识的人都知道在 NT 提供了一种完全不同于 FAT 的文件系统:NTFS。这种被称之为新技术文件系统的技术使得NT具有了较高的安全机制,但也正是因为它而产生了不少令人头痛的隐患。大家可能不知道, NTFS 支持包含在一个文件中的多数据流,而这个包含了所有内容的主数据流被称之为"DATA",因此使得在浏览器里直接访问 NTFS系统的这个特性而轻易的捕获在文件中的脚本程序成为了可能。然而 直接导致 ::$DATA 的原因是由于 IIS
在解析文件名的时候出了问题,它没有很好地规范文件名。
解决方法和建议:
如果是Winodws
NT用户,安装IIS4.0或者IIS5.0,Windows2000不存在这个问题。如果是win95用户,安装WIN98和PWS4.0。
二. 利用组件可对文件进行读写漏洞
(利用Activer server explorer可对文件进行读写访问)
漏洞描述:
chinaasp的Activer server explorer可以很方便的对本地文件在线查看服务器上的目录
在线查看文件的名称、大小、类型、修改时间,在线编辑纯文本文件,如.txt、.htm、.asp、.pl、.cgi等等,直接执行服务器上的文件。
Activer server explorer要求填写相对路径或者绝对路径,但是假如:有一个攻击者把Activer server
explorer上传到目标服务器上的某个目录,并且这个目录支持ASP的话,那么他就可以通过Activer server
explorer修改、执行目标服务器上的文件。这种情况可以发生在一个攻击者拥有目标NT服务器上的一个可写目录帐号,并且这个目录又支持ASP。比如一些支持ASP的个人免费主页服务器,把Activer
server
explorer先传上你申请的免费主页空间,再通过各种方法得到目标服务器的路径,(比如可通过漏洞:"请求不存在的扩展名为idq或ida
文件,会暴露文件在服务器上的物理地址.").或者直接在相对路径上填".",一般是默认。这样攻击者就能任意修改,执行目标服务器上的文件,不管他对这个文件有无读写访问权。
所以那些提供有ASP服务的个人主页或者其它服务的服务器,就要加倍小心这种攻击了。
漏洞解决方法
其实Activer server explorer就是利用了上面讲的漏洞 4 filesystemobject 组件篡改下载 fat
分区上的任何文件的漏洞。
那么我们如何才能限制用户使用FileSystemObject对象呢?一种极端的做法是完全反注册掉提供FileSystemObject对象的那个组件,也就是Scrrun.dll。具体的方法如下:
在MS-DOS状态下面键入:
Regsvr32 /u c:\windows\system\scrrun.dll
(注意:在实际操作的时候要更改成为你本地的实际路径)
但是这样的话,就不能使用FileSystemObject对象了,有时利用FileSystemObject对象来管理文件是很方便,有什么办法能两全其美呢?
我们可以做到禁止他人非法使用FileSystemObject对象,但是我们自己仍然可以使用这个对象。
方法如下:
查找注册表中
HKEY_CLASSES_ROOT\Scripting.FileSystemObject 键值
将其更改成为你想要的字符串(右键-->"重命名"),比如更改成为
HKEY_CLASSES_ROOT\Scripting.FileSystemObject2
这样,在ASP就必须这样引用这个对象了:
Set fso = CreateObject("Scripting.FileSystemObject2")
而不能使用:
Set fso = CreateObject("Scripting.FileSystemObject")
如果你使用通常的方法来调用FileSystemObject对象就会无法使用了。
只要你不告诉别人这个更改过的对象名称,其他人是无法使用FileSystemObject对象的。这样,作为站点管理者我们就杜绝了他人非法使用FileSystemObject对象,而我们自己仍然可以使用这个对象来方便的实现网站在线管理等等功能了!
三.ASP主页中.inc文件泄露漏洞
漏洞描述:
受影响的版本:任何提供ASP服务的系统
远程:YES / 本地:YES
内容摘要:
当存在asp的主页正在制作并没有进行最后调试完成以前,可以被某些搜索引擎机动追加为搜索对象,如果这时候有人利用搜索引擎对这些网页进行查找,会得到有关文件的定位,并能在浏览器中察看到数据库地点和结构的细节揭示完整的源代码。
具体操作过程是:
- 利用搜索引擎查找包含+"Microsoft VBScript 运行时刻错误执行搜索"+".inc ," 的关键字
- 搜索引擎会自动查找包含asp的包含文件(.inc)并显示给用户
- 利用浏览器观看包含文件的源代码,其中可能会有某些敏感信息
漏洞的利用:
例子:
-
http://shopping.altavista.com/inc/lib/prep.lib
暴露数据库连接和性质, 资源地点, 小甜饼逻辑,服务器 IP 地址
-
http://www.justshop.com/SFLib/ship.inc
暴露数据库性质
-
http://www.bbclub.com:8013/includes/general.inc
暴露 cobranding
-
http://www.salest.com/corporate/admin/include/jobs.inc
暴露 datafile 地点和结构
-
http://www.bjsbabes.com/SFLib/design.inc
包括数据库结构为 StoreFront 2000 暴露源代码
-
http://www.ffg.com/scripts/IsSearchEngine.inc
暴露搜索引擎记录文件
-
http://www.wcastl.com/include/functions.inc
暴露成员电子邮件地址
-
http://www.wcastl.com/flat/comments.txt
暴露成员私人的注释文件
-
http://www.traveler.net/two/cookies.inc
暴露 cookie 逻辑
解决方案:
- 搜索引擎应该不索引有 asp 运行时刻错误的页
- 程序员应该在网页发布前对其进行彻底的调试
- 安全专家需要固定 asp 包含文件以便外部的用户不能看他们
asp 新闻组、站点提供两个解决方案对这个漏洞进行修正,首先对 .inc 文件内容进行加密,其次也可以使用 .asp 文件代替 .inc
文件使用户无法从浏览器直接观看文件的源代码。.inc 文件的文件名不用使用系统默认的或者有特殊含义容易被用户猜测到的,尽量使用无规则的英文字母。
四.非正常的 HTR 请求漏洞
摘要:
微软已经证实在其发布的WEB服务器产品Internet Information Server
4.0中存在一个严重的系统漏洞,该漏洞导致对于IIS服务器的“服务拒绝攻击”,在这种情况下,可能导致任何2进制代码在服务器上运行。有关该漏洞的补丁将在近期发布,请所有IIS用户密切关注。
漏洞介绍:
IIS支持多种需要服务器端处理的文件类型,譬如:ASP、ASA、IDC、HTR,当一个WEB用户从客户端请求此类文件时,相应的DLL文件将自动对其进行处理。然而在ISM.DLL这个负责处理HTR文件的文件中被发现存在严重的安全漏洞。(注:HTR文件本身是用来远程管理用户密码的)
该漏洞包含了一个在ISM.DLL中未经验证的缓冲,它可能对WEB服务器的安全运作造成两方面的威胁。首先,是来自服务拒绝攻击的威胁,一个来自非正常的对.HTR文件请求将导致缓存溢出,从而直接导致IIS崩溃,当这种情况发生时,无须重启服务器,但是IIS
WEB
服务器必须重新启动。另一个威胁更令人头痛,通过使用一个精心构建过的文件请求将可以利用标准的缓存溢出手段导致2进制代码在服务器端运行,在这种情况下,什么都可能发生!该漏洞不包括提供用来管理用户密码的功能的.HTR文件。
原理分析:
至少在一个IIS的扩展名中(例如:ASP,IDC,HTR)存在溢出。我们推测溢出将在IIS把完整的URL传递给DLL去处理扩展名时发生。如果ISAPI
DLL
没有正确的检查限制范围从而导致INETINFO.EXE产生一个溢出,用户就从可以远端执行2进制代码。攻击方法:向IIS发一个如下的HTTP请求:"GET
/[overflow].htr HTTP/1.0",IIS将崩溃。这里的[overflow]可以是3K长的代码。
大家可能对.HTR文件不是很熟悉,其实IIS具有让NT用户通过WEB目录/iisadmpwd/更改自己的口令的能力。而这个功能正是由一组.HTR文件和ISAPI的一个扩展DLL:
ISM.DLL实现的。当一个完整的URL传递到ISM.DLL时,由于没有适当的大小限制的检查,就会导致溢出产生,从而使得服务器崩溃。HTR/ISM.DLL
ISAPI 是IIS4缺省安装。
解决途径:
由于目前微软尚未发布可供使用的补丁程序,因此我们只能做一些应急的防范。
1、将.HTR扩展名从ISAPI DLL 的列表中删除
在你的NT桌面上,点击“开始”—>“程序”—>“Windows NT 4.0 Option Pack”—>“Microsoft Internet
Information Server”—>“Internet 服务管理器”;双击“Internet Information
Server”;鼠标右键单击计算机名称并选择“属性”;在“主属性”下拉式菜单中选择“WWW服务”并点击“编辑”按钮;选择“主目录”文件夹,并点击“配置”按钮,在“应用程序映射”列表框中选中.HTR的相关映射,选择“删除”,并确定。
2、安装微软提供的补丁程序,请密切关注以下网址
http://www.microsoft.com/security
http://www.microsoft.com/security/products/iis/CheckList.asp
可能一些朋友会感到不解,为什么我在ASP篇17、18期连续利用两大篇幅着重讨论IIS、ASP的安全性问题,如果你是一个WEB开发者、ASP程序员,我想你就应该能够体会我的用意。我们进行网络编程、开发交互性的网站,当然首先是为了发展、建设自身网站,但是这一些都是建立在安全的基础上,这里的安全包括对自己辛辛苦苦开发的ASP或其他网络应用程序代码的保护、确保网站服务器安全正常的运行、确保用户信息的安全及认证等等,当今后电子商务成为真正广泛运作的一种商务运行手段后,安全性更是关键之关键。我们中的很多朋友在作为ASP程序员的同时又身兼网络管理员的职责,因此熟悉系统的运作、及时了解系统漏洞、第一时间解决安全性问题就显得十分重要和必要,因此在本文的结尾,作者将整理的一些关于NT、IIS系统配置的安全性建议罗列出来,希望能给大家一些帮助。
1、使用最新版本的Microsoft Internet Information Server4.0,并安装NT最新版本的Service
Pack5,服务器的文件系统不要使用FAT,应该使用NTFS。
2、把IIS中的sample、scripts、iisadmin和msadc等web目录设置为禁止匿名访问并限制IP地址。在微软还没有提供补丁之前,把ism.dll有关的应用程序映射删除。
3、有条件的话就采用防火墙机制,最简单的如web服务开在前台,目录放在后台,如果能一个服务一台机当然最好。
4、Web目录,CGI目录,scripts目录和winnt目录等重要目录要用NTFS的特性设置详细的安全权限,包含注册表信息的Winnt目录只允许管理员完全控制,一般的用户只读的权限也不要给。凡是与系统有关的重要文件,除了Administrator,其它帐号都应该设置为只读权限,而不是everyone/完全控制
。
5、只开你需要的服务,block掉所有不应该打开的端口,如NetBios端口139,这是一个典型的危险端口;怎样禁止这些端口?除了使用防火墙外,NT的Tcp/IP设置里面也提供了这种功能:打开控制面板-网络-协议-TCP/IP-属性-高级-启用安全机制-配置,这里面提供了TCP和UDP端口的限制和IP协议的限制功能。
6、管理员的帐号要设置得复杂一些,建议加入特殊字符。
7、把FTP,Telnet的TCP端口改为非标准端口,通常我都是设置到10000~65000的范围
8、删除可以删除的所有共享,包括打印机共享和隐藏的共享如ICP$,Admin$等,微软说这些特殊共享资源很重要,大多数情况下不能删除,而实际上放在Internet上的机器大多数不需要共享。
IPC$: 适用于远程管理计算机和查看共享资源,在网上最好不要用
Admin$: 实际上就是 c:\winnt,也没有必要共享
C$:
登录为Admin和Backup-operator的用户可以用\\计算机名\C$的方式访问C盘,虽然仅限于局域网,但是远程黑客也有办法伪装成局域网的登录用户,所以都应该关掉。
Print$: 这是放打印机驱动程序的目录,与上面的一样也是个很危险的入口。
Netlogon: 这是处理域登录请求的共享。如果你的机器为主域控制器,域内有其它机器要登录进来,就不要删除它,否则照样可以删除。
如何关闭这些共享?用“服务器管理器”—>“共享目录”—>“停止共享”
9、将ASP的目录集中管理,ASP的程序目录设置详尽的访问权限,一般建议不要使用“读”权限。
10、把winnt下的sam._文件改名,实践证明这个可能泄露密码的文件可以删除不要。
11、对于已知的NT安全漏洞,都应该在自己的机器上做测试检查。并及时安装补丁程序。
12、有必要的情况下采用IIS4.0提供的SSL安全通信机制来防止数据在网上被截获。
五.ASP程序密码验证漏洞
受影响的系统:Microsoft NT+IIS
不受影响的版本: 未知
远程: YES / 本地:YES
内容摘要:
NT+sql上的ASP程序密码验证漏洞:
原理:
很多网站把密码放到数据库中,在登陆验证中用以下sql,(以asp为例)
sql="select * from user where username='"&username&"'and pass='"& pass&'"
此时,您只要根据sql构造一个特殊的用户名和密码,如:ben' or '1'='1
hehe ...是不是进去了??
漏洞的利用:
sql="select * from user where username='"&username&"'and pass='"& pass&'"
此时,您只要根据sql构造一个特殊的用户名和密码,如:ben' or '1'='1
这样,程序将会变成这样: sql="select*from user where username="&ben'or'1'=1&"and pass="&pass&"
学过编程的应该知道: or 是一个逻辑运算符,作用是在判断两个条件的时候,只要其中一个条件成立,那么等式将会成立.而在语言中,是以1来代表真的(成立).那么在这行语句中,原语句的"and"验证将不再继续,而因为"1=1"和"or"令语句返回为真值.
解决方案:
由漏洞的发现者提供的解决方法:
比较好的应该按照以下方式:
1、处理输入字符,
2、处理‘,|等字符
3、select * from user where user=’ " & User & "' "
4、如果返回不为假,则取密码
pass=rs("passwd")
5、判断:if pass=password
6、得出结论。