2009年9月9日 星期三

ASP常見的安全漏洞

ASP的漏洞已經算很少的了,想要找到數據庫的實際位置也不簡單,但這不表明黑客無孔可入,也正是這個觀點,一般的程序設計員常常忘記仔細的檢查是否有漏洞,所以才有可能導致網站資料被竊取的事件發生。

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.1580GET /default.asp%5C HTTP/1.0Host: 10.11.11.15User-Agent: Mozilla/4.0Content-Length: 18Content-Type: text/htmlTranslate: fmatch=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 以及檔案,只安裝你需要的東西,並且定期使用安全檢測軟件對服務器進行檢查,到網上瞭解最新的系統安全消息和知識。

註: 本文轉載自網路 非原創
轉載自 黑客擂台 原文