Microsoft Active Server Pages(ASP)是伺服器端指令碼編寫環境,使用它可以建立和
運行動態、互動的 Web 服務器應用程式。使用 ASP 可以組合 HTML 頁 、指令碼命令和
ActiveX 組件以建立互動的 Web 頁和基於 Web 的功能強大的應用程式。
現在很多網站特別是電子商務方面的網站,在前台上大都用ASP來實現。以至於現在ASP
在網站應用程式上很普遍。
ASP是開發網站應用程式的快速工具,但是有些網站管理員只看到ASP的快速開發能力,卻忽
視了ASP安全問題。ASP從一開始就一直受到眾多漏洞,後門的困擾,包括%81的噩夢,密
碼驗證問題,IIS漏洞等等都一直使ASP網站開發人員心驚膽跳。
本文試圖從開放了ASP服務的作業系統漏洞和ASP程式本身漏洞,闡述ASP安全問題,並給
出解決方案或者建議。
ASP工作機理
Active Server Page技術為應用開發商提供了基於指令碼的直觀、快速、高效的應用開發
手段,極大地提高了開發的效果。在討論ASP的安全性問題之前,讓我們來看看ASP是怎
麼工作的。ASP指令碼是採用明文(plain text)方式來編寫的。
ASP指令碼是一系列按特定文法(目前支援vbscript和jscript兩種指令碼語言)編寫的,與
標準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、Script。讀
訪問表示將目錄內容從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/somepage.asp.
訪問網址超出本站範圍,不能確定是否安全
繼續訪問 取消訪問http://someurl/somepage.asp.
http://
訪問網址超出本站範圍,不能確定是否安全
繼續訪問 取消訪問http:// someurl/somepage.asp%81
http://
訪問網址超出本站範圍,不能確定是否安全
繼續訪問 取消訪問http:// someurl/somepage.asp:DATA
http://
訪問網址超出本站範圍,不能確定是否安全
繼續訪問 取消訪問http:// someurl/somepage.asp %2e
http://
訪問網址超出本站範圍,不能確定是否安全
繼續訪問 取消訪問http:// someurl/somepage %2e%41sp
http://
訪問網址超出本站範圍,不能確定是否安全
繼續訪問 取消訪問http:// someurl/somepage%2e%asp
http://
訪問網址超出本站範圍,不能確定是否安全
繼續訪問 取消訪問http:// someurl/somepage.asp %2e
http://someurl/msadc/samples/selector/showcode.asp?
訪問網址超出本站範圍,不能確定是否安全
繼續訪問 取消訪問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",因此使得在瀏覽器 裡直接存取
NTFS 系統的這個特性而輕易的捕獲在檔案中的指令碼程式成為了可能。然而 直接導致
:DATA 的原因是由於 IIS 在解析檔案名稱的時候出了問題,它沒有很好地規範檔案名稱。
解決方案和建議:
如果是Winodws NT使用者,安裝IIS4.0或者IIS5.0,Windows2000不存在這個問題。如果是
win95使用者,安裝WIN98和PWS4.0。
2 ACCESS mdb 資料庫有可能被下載的漏洞
問題描述:
在用ACCESS做後台資料庫時,如果有人通過各種方法知道或者猜到了伺服器的ACCESS數
據庫的路徑和資料庫名稱,那麼他能夠下載這個ACCESS資料庫檔案,這是非常危險的。
比如:如果你的ACCESS資料庫book.mdb放在虛擬目錄下的database目錄下,那麼有人在
瀏覽器中打入:
http://
訪問網址超出本站範圍,不能確定是否安全
繼續訪問 取消訪問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)}wd=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/ ... n/soushuo.asp=xxx.a
sp
最大的危害莫過於asa檔案可以被上述方式讀出;資料庫密碼以明文形式暴露在駭客眼前
;
問題解決或建議:
對於IIS內建的show asp code的asp程式檔案,刪除該檔案或者禁止訪問該目錄即可
4、filesystemobject 組件篡改下載 fat 分區上的任何檔案的漏洞
問題描述:
IIS3、 IIS4 的 ASP 的檔案操作都可以通過 filesystemobject 實現,包括文本文
件的讀寫目錄操作、檔案的拷貝改名刪除等,但是這個強大的功能也留下了非常危險的
"後門"。利用 filesystemobjet 可以篡改下載 fat 分區上的任何檔案。即使是 ntfs
分區,如果許可權沒有設定好的話,同樣也能破壞,一不小心你就可能遭受"滅頂之災 "。
遺憾的是很多 webmaster 只知道讓 網頁伺服器運行起來,很少對 ntfs 進行許可權 設定
,而 NT 目錄許可權的預設設定偏偏安全性又低得可怕。因此,如果你是 Webmaster ,建
議你密切關注伺服器的設定,盡量將 web 目錄建在 ntfs 分區上,目錄不要設定
everyone full control,即使是是Administrator 群組的成員一般也沒什麼必要 full control,
只要有讀取、更改許可權就足夠了。 也可以把filesystemobject的組件刪除或者改名。
5、輸入標準的HTML語句或者javascript語句會改變輸出結果
問題描述:
在輸入框中打入標準的HTML語句會得到什麼相的結果呢?
比如一個留言本,我們留言內容中打入:
你好!
如果你的ASP程式中沒有屏蔽html語句,那麼就會改變"你好"字型的大小。在留言本
中改變字型大小和貼圖有時並不是什麼壞事,反而可以使留言本生動。但是如果在輸入
框中寫個 javascript 的死迴圈,比如:特大新聞
那麼其他查看該留言的客人只要移動滑鼠到"特大新聞",上就會使使用者的瀏覽器因死循
環而死掉。
解決方案和建議:
編寫類似程式時應該做好對此類操作的防範,譬如可以寫一段程式判斷用戶端的輸入,
並屏蔽掉所有的 HTML、 Javascrip[/post]