一 前言
Microsoft Active Server Pages(ASP)是服務器端腳本編寫環境,使用它可以創建和運行動態、交互的 Web 服務器應用程序。使用 ASP 可以組合 HTML 頁 、腳本命令和 ActiveX 組件以創建交互的 Web 頁和基於 Web 的功能強大的應用程序。
現在很多網站特別是電子商務方面的網站,在前台上大都用ASP來實現。以至於現在ASP在網站應用上很普遍。
ASP是開發網站應用的快速工具,但是有些網站管理員只看到ASP的快速開發能力,卻忽視了ASP安全問題。ASP從一開始就一直受到眾多漏洞,後門的困擾,包括%81的噩夢,密碼驗證問題,IIS漏洞等等都一直使ASP網站開發人員心驚膽跳。
本文試圖從開放了ASP服務的*作系統漏洞和ASP程序本身漏洞,闡述ASP安全問題,並給出解決方法或者建議。
二 關鍵字
ASP,網絡安全,IIS,SSL,加密。
三 ASP工作機理
Active Server Page技術為應用開發商提供了基於腳本的直觀、快速、高效的應用開發手段,極大地提高了開發的效果。在討論ASP的安全性問題之前,讓我們來看看ASP是怎麼工作的。ASP腳本是采用明文(plain text)方式來編寫的。
ASP腳本是一系列按特定語法(目前支持vbs cript和js cript兩種腳本語言)編寫的,與標准HTML頁面混合在一起的腳本所構成的文本格式的文件。當客戶端的最終用戶用WEB浏覽器通過INTERNET來訪問基於ASP腳本的應用時,WEB浏覽器將向WEB服務器發出HTTP請求。WEB服務器分析、判斷出該請求是ASP腳本的應用後,自動通過ISAPI接口調用ASP腳本的解釋運行引擎(ASP.DLL)。ASP.DLL將從文件系統或內部緩沖區獲取指定的ASP腳本文件,接著就進行語法分析並解釋執行。最終的處理結果將形成HTML格式的內容,通過WEB服務器"原路"返回給WEB浏覽器,由WEB浏覽器在客戶端形成最終的結果呈現。這樣就完成了一次完整的ASP腳本調用。若干個有機的ASP腳本調用就組成了一個完整的ASP腳本應用。
讓我們來看看運行ASP所需的環境:
Microsoft Internet Information Server 3.0/4.0/5.0 on NT Server
Microsoft Internet Information Server 3.0/4.0/5.0 on Win2000
Microsoft Personal Web Server on Windows 95/98
WINDOWS NT Option Pack所帶的Microsoft IIS提供了強大的功能,但是IIS在網絡安全方面卻是比較危險的。因為很少有人會用Windows 95/98當服務器,因此本文我更多的從NT中的IIS安全問題來探討。
四 微軟自稱的ASP的安全優點
雖然我們本文的重點是探討ASP漏洞和後門,但是有必要談談ASP在網絡安全方面的"優點",之所以加個"",是因為有時這些微軟宣稱的"優點"恰恰是其安全隱犯。
微軟稱ASP在網絡安全方面一大優點就是用戶不能看到ASP的源程序,從ASP的原理上看,ASP在服務端執行並解釋成標准的HTML語句,再傳送給客戶端浏覽器。"屏蔽"源程序能很好的維護ASP開發人員的版權,試想你辛辛苦苦做了一個很優秀的程序,給人任意COPY,你會怎麼想?而且黑客還能分析你的ASP程序,挑出漏洞。更重要的是有些ASP開發者喜歡把密碼,有特權的用戶名和路徑直接寫在程序中,這樣別人通過猜密碼,猜路徑,很容易找到攻擊系統的"入口"。但是目前已經發現了很多能查看ASP源程序的漏洞,後面我們還要討論。
IIS支持虛擬目錄,通過在"服務器屬性"對話框中的"目錄"標簽可以管理虛擬目錄。建立虛擬目錄對於管理WEB站點具有非常重要的意義。虛擬目錄隱藏了有關站點目錄結構的重要信息。因為在浏覽器中,客戶通過選擇"查看源代碼",很容易就能獲取頁面的文件路徑信息,如果在WEB頁中使用物理路徑,將暴露有關站點目錄的重要信息,這容易導致系統受到攻擊。其次,只要兩台機器具有相同的虛擬目錄,你就可以在不對頁面代碼做任何改動的情況下,將WEB頁面從一台機器上移到另一台機器。還有就是,當你將WEB頁面放置於虛擬目錄下後,你可以對目錄設置不同的屬性,如:Read、Excute、s cript。讀訪問表示將目錄內容從IIS傳遞到浏覽器。而執行訪問則可以使在該目錄內執行可執行的文件。當你需要使用ASP時,就必須將你存放.asp文件的目錄設置為"Excute(執行)"。建議大家在設置WEB站點時,將HTML文件同ASP文件分開放置在不同的目錄下,然後將HTML子目錄設置為"讀",將ASP子目錄設置為"執行",這不僅方便了對WEB的管理,而且最重要的提高了ASP程序的安全性,防止了程序內容被客戶所訪問。
五 ASP漏洞分析和解決方法
有人說一台不和外面聯系的電腦是最安全的電腦,一個關閉所有端口,不提供任何服務的電腦也是最安全的。黑客經常利用我們所開放的端口實施攻擊,這些攻擊最常見的是DDOS(拒絕服務攻擊).下面我會列出ASP的二十幾個漏洞,每個漏洞都會有漏洞描述和解決方法。
1 在ASP程序後加個特殊符號,能看到ASP源程序
受影響的版本:
win95+pws
IIS3.0
98+pws4 不存在這個漏洞。
IIS4.0以上的版本也不存在這個漏洞。
問題描述:
這些特殊符號包括小數點,%81, ::$DATA。比如:
http://someurl/msadc/samples/selector/showcode.asp?source=/msadc/samples/../../../../../../boot.ini ;(可以看到boot.ini的文件內容)那麼在安裝有IIS3.0和win95+PWS的浏覽中就很容易看到somepage.asp的源程序。究竟是什麼原因造成了這種可怕的漏洞呢?究其根源其實是 Windows NT 特有的文件系統在做怪。有一點常識的人都知道在 NT 提供了一種完全不同於 FAT 的文件系統:NTFS,這種被稱之為新技術文件系統的技術使得 NT 具有了較高的安全機制,但也正是因為它而產生了不少令人頭痛的隱患。大家可能不知道, NTFS 支持包含在一個文件中 的多數據流,而這個包含了所有內容的主數據流被稱之為"DATA" target="_blank" target="_blank" target="_blank" >
2 ACCESS mdb 數據庫有可能被下載的漏洞
問題描述:
在用ACCESS做後台數據庫時,如果有人通過各種方法知道或者猜到了服務器的ACCESS數據庫的路徑和數據庫名稱,那麼他能夠下載這個ACCESS數據庫文件,這是非常危險的。比如:如果你的ACCESS數據庫book.mdb放在虛擬目錄下的database目錄下,那麼有人在浏覽器中打入:
http:// ;someurl/database/book.mdb如果你的book.mdb數據庫沒有事先加密的話,那book.mdb中所有重要的數據都掌握在別人的手中。
解決方法:
(1) 為你的數據庫文件名稱起個復雜的非常規的名字,並把他放在幾目錄下。所謂"非常規",打個比方:比如有個數據庫要保存的是有關書籍的信息,可不要把他起個"book.mdb"的名字,起個怪怪的名稱,比如d34ksfslf.mdb,再把他放在如./kdslf/i44/studi/ 的幾層目錄下,這樣黑客要想通過猜的方式得到你的ACCESS數據庫文件就難上加難了。
(2)不要把數據庫名寫在程序中。有些人喜歡把DSN寫在程序中,比如:
DBPath = Server.MapPath("cmddb.mdb")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath
假如萬一給人拿到了源程序,你的ACCESS數據庫的名字就一覽無余。因此建議你在ODBC裡設置數據源,再在程序中這樣寫:
conn.open "shujiyuan"
(3)使用ACCESS來為數據庫文件編碼及加密。首先在選取"工具->安全->加密/解密數據庫,選取數據庫(如:employer.mdb),然後接確定,接著會出現"數據庫加密後另存為"的窗口,存為:employer1.mdb。接著employer.mdb就會被編碼,然後存為employer1.mdb..
要注意的是,以上的動作並不是對數據庫設置密碼,而只是對數據庫文件加以編碼,目的是為了防止他人使用別的工具來查看數據庫文件的內容。
接下來我們為數據庫加密,首先以打開經過編碼了的employer1.mdb,在打開時,選擇"獨占"方式。然後選取功能表的"工具->安全->設置數據庫密碼",接著輸入密碼即可。
為employer1.mdb設置密碼之後,接下來如果再使用ACCEES數據庫文件時,則ACCESS會先要求輸入密碼,驗證正確後才能夠啟動數據庫。
不過要在ASP程序中的connection對象的open方法中增加PWD的參數即可,例如:
param="driver={Microsoft Access Driver (*.mdb)};Pwd=yfdsfs"
param=param&";dbq="&server.mappath("employer1.mdb")
conn.open param
這樣即使他人得到了employer1.mdb文件,沒有密碼他是無法看到employer1.mdb的。
3 code.asp文件會洩漏ASP代碼
問題描述:
舉個很簡單的例子,在微軟提供的 ASP1.0 的例程裡有一個 .asp 文件專門用來查看其它 .asp 文件的源代碼,該文件為 ASPSamp/Samples/code.asp。如果有人把這個程序上傳到服務器,而服務器端沒有任何防范措施的話,他就可以很容易地查看他人的程序。例如 :
code.asp?source=/directory/file.asp
不過這是個比較舊的漏洞了,相信現在很少會出現這種漏洞。
下面這命令是比較新的:
http://someurl/iissamples/exair/howitworks/code.asp?/lunwen/soushuo.asp=xxx.asp ;
最大的危害莫過於asa文件可以被上述方式讀出;數據庫密碼以明文形式暴露在黑客眼前;
問題解決或建議:
對於IIS自帶的show asp code的asp程序文件,刪除該文件或者禁止訪問該目錄即可
4、filesystemobject 組件篡改下載 fat 分區上的任何文件的漏洞
問題描述:
IIS3、 IIS4 的 ASP 的文件*作都可以通過 filesystemobject 實現,包括文本文件的讀寫目錄*作、文件的拷貝改名刪除等,但是這個強大的功能也留下了非常危險的 "後門"。利用 filesystemobjet 可以篡改下載 fat 分區上的任何文件。即使是 ntfs 分區,如果權限沒有設定好的話,同樣也能破壞,一不小心你就可能遭受"滅頂之災 "。遺憾的是很多 webmaster 只知道讓 web 服務器運行起來,很少對 ntfs 進行權限 設置,而 NT 目錄權限的默認設置偏偏安全性又低得可怕。因此,如果你是 Webmaster,建議你密切關注服務器的設置,盡量將 web 目錄建在 ntfs 分區上,目錄不要設定 everyone full control,即使是是管理員組的成員一般也沒什麼必要 full control,只要有讀取、更改權限就足夠了。 也可以把filesystemobject的組件刪除或者改名。
5、輸入標准的HTML語句或者javas cript語句會改變輸出結果
問題描述:
在輸入框中打入標准的HTML語句會得到什麼相的結果呢?比如一個留言本,我們留言內容中打入:
你好!
如果你的ASP程序中沒有屏蔽html語句,那麼就會改變"你好"字體的大小。在留言本中改變字體大小和貼圖有時並不是什麼壞事,反而可以使留言本生動。但是如果在輸入框中寫個 javas cript 的死循環,比如http://someurl"/' target=_blank>http://someurl";; onMouseover="while(1){window.close('/')}">特大新聞
那麼其他查看該留言的客人只要移動鼠標到"特大新聞",上就會使用戶的浏覽器因死循環而死掉。
解決方法和建議:
編寫類似程序時應該做好對此類*作的防范,譬如可以寫一段程序判斷客戶端的輸入,並屏蔽掉所有的 HTML、 Javas cript 語句。
6、ASP程序密碼驗證漏洞
漏洞描述:
很多網站把密碼放到數據庫中,在登陸驗證中用以下sql,(以asp為例)
sql="select * from user where username='"&username&"'and pass='"& pass &'"
此時,您只要根據sql構造一個特殊的用戶名和密碼,如:ben' or '1'='1
就可以進入本來你沒有特權的頁面。再來看看上面那個語句吧:
sql="select * from user where username='"&username&"'and pass='"& pass&'"
此時,您只要根據sql構造一個特殊的用戶名和密碼,如:ben' or '1'='1
這樣,程序將會變成這樣: sql="select*from username where username="&ben'or'1'=1&"and pass="&pass&"
or 是一個邏輯運算符,作用是在判斷兩個條件的時候,只要其中一個條件成立,那麼等式將會成立.而在語言中,是以1來代表真的(成立).那麼在這行語句中,原語句的"and"驗證將不再繼續,而因為"1=1"和"or"令語句返回為真值.。
另外我們也可以構造以下的用戶名:
username='aa' or username<>'aa'
pass='aa' or pass<>'aa'
相應的在浏覽器端的用戶名框內寫入:aa' or username<>'aa
口令框內寫入:aa' or pass<>'aa,注意這兩個字符串兩頭是沒有'的。
這樣就可以成功的騙過系統而進入。
後一種方法理論雖然如此,但要實踐是非常困難的,下面兩個條件都必須具備。
1. 你首先要能夠准確的知道系統在表中是用哪兩個字段存儲用戶名和口令的,只有這樣你才能准確的構造出這個進攻性的字符串。實際上這是很難猜中的。
2.系統對你輸入的字符串不進行有效性檢查。
問題解決和建議:
對輸入的內容驗證和"'"號的處理。
7、IIS4或者IIS5中安裝有INDEX SERVER服務會漏洞ASP源程序
問題描述:
在運行IIS4或者IIS5的Index Server,輸入特殊的字符格式可以看到ASP源程序或者其它頁面的程序。甚至以及添打了最近關於參看源代碼的補丁程序的系統,或者沒有.htw文件的系統,一樣存在該問題。獲得asp程序,甚至global.asa文件的源代碼,無疑對系統是一個非常重大的安全隱患。往往這些代碼中包含了用戶密碼和ID,以及數據庫的源路徑和名稱等等。這對於攻擊者收集系統信息,進行下一步的入侵都是非常重要的。
通過構建下面的特殊程序可以參看該程序源代碼:
http://someurl/null.htw?CiWebHitsFile=/welcome/welcome.asp%20&CiRestriction=none&CiHiliteType=Full ;
)
由於'null.htw'文件並非真正的系統映射文件,所以只是一個儲存在系統內存中的虛擬文件。哪怕你已經從你的系統中刪除了所有的真實的.htw文件,但是由於對null.htw文件的請求默認是由webhits.dll來處理。所以,IIS仍然收到該漏洞的威脅。
問題解決或者建議:
如果該webhits提供的功能是系統必須的,請下載相應的補丁程序。如果沒必要,請用IIS的MMC管理工具簡單移除.htw的映象文件。
補丁程序如下:
Index Server 2.0:
Intel:
http://www.microsoft.com/downloads/release.asp?ReleaseID=17726 ;