ASP的漏洞已经算很少的了,想要找到数据库的实际位置也不简单,但这不表明黑客无孔可入,也正是这个观点,一般的程序设计员常常忘记仔细的检查是否有漏洞,所以才有可能导致网站资料被窃取的事件发生。今天我在这里和大家谈谈ASP常见的安全漏洞,以引起大家的重视及采取有效的防范措施。(注意,在本文中所介绍的方法请大家不要试用,请大家自觉遵守网络准则,谢谢!)
Microsoft 的 Internet Information Server(IIS)提供利用 Active Server Pages(ASPs)而动态产生的网页服务。一个ASP文件,就是一个在 HTML 网页中,直接内含程序代码的文件。回询(request)一个 ASP 文件,会促使 IIS 运行网页中内嵌的程序代码,然后将其运行结果直接回送到浏览器上面。另一方面,静态的 HTML 网页,是按照其原来的样子回传到浏览器上面,没有经过任何的解析处理。在这里,IIS 是利用档案的附加档名来区别档案的型态。一个附加档名为 .htm 或 .html 的档案是属于静态的 HTML 档案,而附加档名为 .asp 的档案则为一个Active Server Pages 档案。正因为如此,这一个Active Server Pages 就给别人留了后门。
例如,通过利用这个简单的参数,就会显示它所在的系统的时间。日期是自动从系统取得的,而以网页的方式传送出来。通过浏览器回询这个网页,我们不会看到刚刚的程序代码,而是看到程序代码的执行结果,或许在所有网络安全漏洞里面,最不受重视的就是未经过解析的文件内容或程序代码无意中被显示出来的安全漏洞。简单的说,这些安全漏洞允许使用者从网页服务器骗取动态网页里面的程序代码。
以前最早人们利用 ASP安全漏洞的方式,就是利用 Windows NT 的数据传输串行的特性去存取档案。你只要利用一个最简单的参数(::$DATA)你就可以看到 ASP 的原始程序了。
例如,以下的 URL:
http://10.1.1.11/login.asp::$DATA
你会取得一个叫做login.asp的档案中未经过解析的 ASP 程序代码。因为这个 URL 字符串并没有以 .asp 做结束,IIS 就没有办法决定这个被回询的档案是否为一个 ASP 档。
显示的程序代码如下:
xxxx
alert("请输入您的 密码!!")
}
else {
document.f1.action="checkuser.asp"
document.f1.submit()
}
}
xxxx
注:checkuser.asp 就是检查帐号密码的东西!
当然了,并非所有的程序代码上安全漏洞都归咎于网页服务器软件。例如,如果你采用典型安装 Widows NT Option Pack 4.0的话,安装程序会将Exploration Air 安装上去,这是提供给 ASP 程序设计员当范例用的网站应用软件程序。其中Widows NT Option Pack 4.0的 showcode.asp 档案会将 Exploration Air 范例网站的原始程序代码整齐的显示出来。由于在程序里面并没有严格的权限检验程序,一个有经验的访客就可以猜到文件名称以及它们的目录路径,他就可以利用 showcode.asp 将任何在档案系统里面的档案读取。
这个黑客只要在他的浏览器里面用URL字符串,指定正确的文件名称以及目录路径当作 showcode.asp 的参数就可以了。例如,以下的 URL 可以让黑客看到在10.11.11.15服务器上default.asp 里面的原始程序代码:
http://10.11.11.15/msadc/
Samples/SELECTOR/showcode.asp?source=/
msadc/Samples/../../../../../
inetpub/wwwroot/default.asp
msadc/Samples/SELECTOR/showcode.asp 这是一个 FSO 的范例程序,主要用意在教您如何使用 FSO 去 View ASP 的 Source ,程序中虽然有限定只能 View /msadc/samples/ 下的档案。但是利用 MapPath 中回到上一层的语法来加以破解。(你可用一连串的 "../" 来跳到档案系统的最顶层,然后将在其它目录的档案窃取出来,当然要先经过存取权这一关才可以。)
架设有服务器的朋友可以试试看这个 Link ,试试能不能看到你根目录底下的档案 ,如果可以,那你就该注意了!
而在IIS 5.0 的安全漏洞,其中之一就是利用 .htr 控制模块(handler)解析档案能力的安全漏洞了。IIS 的 Internet Service Manager 使用 ism.dll 来处理 .htr 档案。IIS 本身则使用 asp.dll 来处理 ASP 档案。利用 .htr 的安全漏洞,黑客可以将任何档案(包括 .asp 档,.asa 档等等)用 ism.dll 处理,而非用 asp.dll 处理。而因为 ism.dll 并非被设计用来处理 ASP 的 tag,它便直接把原始程序代码显示出来。要想利用这个安全漏洞,远程的黑客们只要在他们的 URL字符串的尾巴加上 +.htr。例如,要在10.11.11.15上看 default.asp 的原始程序代码,一个黑客可以用下面的 URL:
http://10.11.11.15/default.asp+.htr
这时你只要在浏览器的菜单栏,选择“查看/源文件”就可以看到 ASP的程序,一切都很简单,防火墙挡不住这个。不过,和showcode.asp不一样的是,这个漏洞不能让黑客们直接在网站服务器文件根目录之外窃取出指定的档案。另外,如果 ASP 文档有 的卷标,这个方法运作起来也不会很顺利。在碰到 % 符号时,输出结果会被终止掉。因此,利用这个漏洞所能窃取的一般是使用 SCRIPT RUNAT="SERVER" ... /SCRIPT 卷标的 ASP 文件。
一般说来,在任何一个建在 IIS ASP 以及 SQL Server 之上的网站中,让黑客感兴趣的资料是global.asa。这个global.asa 档案是存在于网站文件根目录之下,它含有一些网页应用程序的设定参数。设定的参数可以包括事先定义好的变量,数据库使用者识别码及密码,系统名称,以及数据库服务器地址。一旦黑客们取得 global.asa,就等于取得了整个网站大门的钥匙。
例如,利用以下的URL: http://10.11.11.15/global.asa+.htr可以取得10.11.11.15上面的 global.asa 档案。注意那个数据库连接字符串中的 UID 和 PWD。这给了黑客一个使用者名称以及密码:
SCRIPT LANGUAGE="VBScript" RUNAT="Server">
Sub Application_OnStart
Set Db = Server.CreateObject("Commerce.DbServer")
Db.ConnectionString = "DSN=trans.db;UID=sa;PWD=n0t4u2c"
Db.Application = http://10.11.11.15/
Set Application("Db") = Db
End Sub
Sub Session_OnStart
'==Visual InterDev Generated - DataConnection startspan==
'--Project Data Connection
Session("DataConn_ConnectionString") =
"DSN=CertSrv;DBQ=C:\WINNT2\System32\CertLog\certsrv.mdb;DriverId=25;
FIL=MS Access;MaxBufferSize=512;PageTimeout=5;"
Session("DataConn_ConnectionTimeout") = 15
Session("DataConn_CommandTimeout") = 30
Session("DataConn_RuntimeUserName") = ""
Session("DataConn_RuntimePassword") = ""
'==Visual InterDev Generated - DataConnection endspan==
End Sub
/SCRIPT
Microsoft 已经以修正这项安全漏洞。
在.htr 安全漏洞得到修正之后,黑客们又找到了新的切入点:Translate: f 模块的安全漏洞。Translate: f 模块是 Microsoft 为了 FrontPage 2000 以及 FrontPage 2000 Server extensions on Windows 2000 而设计的 WebDAV 的一部份。如果一个反斜线(\)被附加到所要求的档案资源之后,而且 Translate: f 模块在提出回询的 HTTP 表头标题里面,那么网页服务器就会回传完全未经处理的 ASP 原始程序代码。
下面是一个使用 Netcat(相关网址:http://www.l0pht.com/~weld/netcat/)送出回询的 HTTP 表头,可以用来取得10.11.11.15上面 default.asp 的原始程序代码:
$ nc10.11.11.1580
GET /default.asp%5C HTTP/1.0
Host: 10.11.11.15
User-Agent: Mozilla/4.0
Content-Length: 18
Content-Type: text/html
Translate: f
match=www&errors=0
注意:在 GET 回询中,用了%5C。 反斜线字符(\)的十六位 ASCII 码表示方式就是 %5C。 这个方法,在 ASP 以及 ASA 的档案里面都可以使用。另外,在IIS 4.0 上安装运行FrontPage 2000 Server extensions 会存在这种安全漏洞。如果你相进一步了解该项安全漏洞的更多信息,可以在 http://www.securityfocus.com/bid/1578 ,此外Microsoft 也已经公布了修复的patch (下载网址:http://download.microsoft.com/download/win2000platform/Patch/Q256888/NT5/EN-US/Q256888_W2K_SP1_x86_en.EXE。)
结论:
系统架设时的不小心,程序编写时的不注意,往往就是可能导致泄密的主因。为了减少你的网页服务器不会再遭受这种安全漏洞的威胁,你要确定你的网页服务器没有任何会泄漏珍贵信息的程序或不必要的 script 以及档案,只安装你需要的东西,并且定期使用安全检测软件对服务器进行检查,到网上了解最新的系统安全消息和知识。