|
ASP漏洞大全 (www.Jojoo.net) 2002-10-22 (請(qǐng)雙擊自動(dòng)滾屏觀看,單擊停止,再擊..)
Microsoft Active Server Pages(ASP)是服務(wù)器端腳本編寫(xiě)環(huán)境,使用它可以創(chuàng)建和運(yùn)行動(dòng)態(tài)、交互的 Web 服務(wù)器應(yīng)用程序。使用 ASP 可以組合 HTML 頁(yè) 、腳本命令和 ActiveX 組件以創(chuàng)建交互的 Web 頁(yè)和基于 Web 的功能強(qiáng)大的應(yīng)用程序。 現(xiàn)在很多網(wǎng)站特別是電子商務(wù)方面的網(wǎng)站,在前臺(tái)上大都用ASP來(lái)實(shí)現(xiàn)。以至于現(xiàn)在ASP在網(wǎng)站應(yīng)用上很普遍。 ASP是開(kāi)發(fā)網(wǎng)站應(yīng)用的快速工具,但是有些網(wǎng)站管理員只看到ASP的快速開(kāi)發(fā)能力,卻忽視了ASP安全問(wèn)題。ASP從一開(kāi)始就一直受到眾多漏洞,后門(mén)的困擾,包括%81的噩夢(mèng),密碼驗(yàn)證問(wèn)題,IIS漏洞等等都一直使ASP網(wǎng)站開(kāi)發(fā)人員心驚膽跳。 本文試圖從開(kāi)放了ASP服務(wù)的操作系統(tǒng)漏洞和ASP程序本身漏洞,闡述ASP安全問(wèn)題,并給出解決方法或者建議。
ASP工作機(jī)理
Active Server Page技術(shù)為應(yīng)用開(kāi)發(fā)商提供了基于腳本的直觀、快速、高效的應(yīng)用開(kāi)發(fā)手段,極大地提高了開(kāi)發(fā)的效果。在討論ASP的安全性問(wèn)題之前,讓我們來(lái)看看ASP是怎么工作的。ASP腳本是采用明文(plain text)方式來(lái)編寫(xiě)的。
ASP腳本是一系列按特定語(yǔ)法(目前支持vbscript和jscript兩種腳本語(yǔ)言)編寫(xiě)的,與標(biāo)準(zhǔn)HTML頁(yè)面混合在一起的腳本所構(gòu)成的文本格式的文件。當(dāng)客戶端的最終用戶用WEB瀏覽器通過(guò)INTERNET來(lái)訪問(wèn)基于ASP腳本的應(yīng)用時(shí),WEB瀏覽器將向WEB服務(wù)器發(fā)出HTTP請(qǐng)求。WEB服務(wù)器分析、判斷出該請(qǐng)求是ASP腳本的應(yīng)用后,自動(dòng)通過(guò)ISAPI接口調(diào)用ASP腳本的解釋運(yùn)行引擎(ASP.DLL)。ASP.DLL將從文件系統(tǒng)或內(nèi)部緩沖區(qū)獲取指定的ASP腳本文件,接著就進(jìn)行語(yǔ)法分析并解釋執(zhí)行。最終的處理結(jié)果將形成HTML格式的內(nèi)容,通過(guò)WEB服務(wù)器"原路"返回給WEB瀏覽器,由WEB瀏覽器在客戶端形成最終的結(jié)果呈現(xiàn)。這樣就完成了一次完整的ASP腳本調(diào)用。若干個(gè)有機(jī)的ASP腳本調(diào)用就組成了一個(gè)完整的ASP腳本應(yīng)用。 讓我們來(lái)看看運(yùn)行ASP所需的環(huán)境: 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提供了強(qiáng)大的功能,但是IIS在網(wǎng)絡(luò)安全方面卻是比較危險(xiǎn)的。因?yàn)楹苌儆腥藭?huì)用Windows 95/98當(dāng)服務(wù)器,因此本文我更多的從NT中的IIS安全問(wèn)題來(lái)探討。
微軟自稱的ASP的安全優(yōu)點(diǎn)
雖然我們本文的重點(diǎn)是探討ASP漏洞和后門(mén),但是有必要談?wù)凙SP在網(wǎng)絡(luò)安全方面的"優(yōu)點(diǎn)",之所以加個(gè)"",是因?yàn)橛袝r(shí)這些微軟宣稱的"優(yōu)點(diǎn)"恰恰是其安全隱犯。微軟稱ASP在網(wǎng)絡(luò)安全方面一大優(yōu)點(diǎn)就是用戶不能看到ASP的源程序, 從ASP的原理上看,ASP在服務(wù)端執(zhí)行并解釋成標(biāo)準(zhǔn)的HTML語(yǔ)句,再傳送給客戶端瀏覽器。"屏蔽"源程序能很好的維護(hù)ASP開(kāi)發(fā)人員的版權(quán),試想你辛辛苦苦做了一個(gè)很優(yōu)秀的程序,給人任意COPY,你會(huì)怎么想?而且黑客還能分析你的ASP程序,挑出漏洞。更重要的是有些ASP開(kāi)發(fā)者喜歡把密碼,有特權(quán)的用戶名和路徑直接寫(xiě)在程序中,這樣別人通過(guò)猜密碼,猜路徑,很容易找到攻擊系統(tǒng)的"入口"。但是目前已經(jīng)發(fā)現(xiàn)了很多能查看ASP源程序的漏洞,后面我們還要討論。 IIS支持虛擬目錄,通過(guò)在"服務(wù)器屬性"對(duì)話框中的"目錄"標(biāo)簽可以管理虛擬目錄。建立虛擬目錄對(duì)于管理WEB站點(diǎn)具有非常重要的意義。虛擬目錄隱藏了有關(guān)站點(diǎn)目錄結(jié)構(gòu)的重要信息。因?yàn)樵跒g覽器中,客戶通過(guò)選擇"查看源代碼",很容易就能獲取頁(yè)面的文件路徑信息,如果在WEB頁(yè)中使用物理路徑,將暴露有關(guān)站點(diǎn)目錄的重要信息,這容易導(dǎo)致系統(tǒng)受到攻擊。其次,只要兩臺(tái)機(jī)器具有相同的虛擬目錄,你就可以在不對(duì)頁(yè)面代碼做任何改動(dòng)的情況下,將WEB頁(yè)面從一臺(tái)機(jī)器上移到另一臺(tái)機(jī)器。還有就是,當(dāng)你將WEB頁(yè)面放置于虛擬目錄下后,你可以對(duì)目錄設(shè)置不同的屬性,如:Read、Excute、Script。讀訪問(wèn)表示將目錄內(nèi)容從IIS傳遞到瀏覽器。而執(zhí)行訪問(wèn)則可以使在該目錄內(nèi)執(zhí)行可執(zhí)行的文件。當(dāng)你需要使用ASP時(shí),就必須將你存放.asp文件的目錄設(shè)置為"Excute(執(zhí)行)"。建議大家在設(shè)置WEB站點(diǎn)時(shí),將HTML文件同ASP文件分開(kāi)放置在不同的目錄下,然后將HTML子目錄設(shè)置為"讀",將ASP子目錄設(shè)置為"執(zhí)行",這不僅方便了對(duì)WEB的管理,而且最重要的提高了ASP程序的安全性,防止了程序內(nèi)容被客戶所訪問(wèn)。
ASP漏洞分析和解決方法
有人說(shuō)一臺(tái)不和外面聯(lián)系的電腦是最安全的電腦,一個(gè)關(guān)閉所有端口,不提供任何服務(wù)的電腦也是最安全的。黑客經(jīng)常利用我們所開(kāi)放的端口實(shí)施攻擊,這些攻擊最常見(jiàn)的是DDOS(拒絕服務(wù)攻擊).下面我會(huì)列出ASP的二十幾個(gè)漏洞,每個(gè)漏洞都會(huì)有漏洞描述和解決方法。
1 在ASP程序后加個(gè)特殊符號(hào),能看到ASP源程序
受影響的版本: win95+pws IIS3.0 98+pws4 不存在這個(gè)漏洞。 IIS4.0以上的版本也不存在這個(gè)漏洞。 問(wèn)題描述: 這些特殊符號(hào)包括小數(shù)點(diǎn),%81, ::$DATA。比如: http://someurl/somepage.asp. http:// someurl/somepage.asp%81 http:// someurl/somepage.asp::$DATA http:// someurl/somepage.asp %2e http:// someurl/somepage %2e%41sp http:// someurl/somepage%2e%asp http:// someurl/somepage.asp %2e http://someurl/msadc/samples/selector/showcode.asp?source=/msadc/samples/../../../../../../boot.ini (可以看到boot.ini的文件內(nèi)容) 那么在安裝有IIS3.0和win95+PWS的瀏覽中就很容易看到somepage.asp的源程序。究竟是什么原因造成了這種可怕的漏洞呢?究其根源其實(shí)是 Windows NT 特有的文件系統(tǒng)在做怪。有一點(diǎn)常識(shí)的人都知道在 NT 提供了一種完全不同于 FAT 的文件系統(tǒng):NTFS,這種被稱之為新技術(shù)文件系統(tǒng)的技術(shù)使得 NT 具有了較高的安全機(jī)制,但也正是因?yàn)樗a(chǎn)生了不少令人頭痛的隱患。大家可能不知道, NTFS 支持包含在一個(gè)文件中 的多數(shù)據(jù)流,而這個(gè)包含了所有內(nèi)容的主數(shù)據(jù)流被稱之為"DATA",因此使得在瀏覽器 里直接訪問(wèn) NTFS 系統(tǒng)的這個(gè)特性而輕易的捕獲在文件中的腳本程序成為了可能。然而 直接導(dǎo)致 ::$DATA 的原因是由于 IIS 在解析文件名的時(shí)候出了問(wèn)題,它沒(méi)有很好地規(guī)范文件名。
解決方法和建議:
如果是Winodws NT用戶,安裝IIS4.0或者IIS5.0,Windows2000不存在這個(gè)問(wèn)題。如果是win95用戶,安裝WIN98和PWS4.0。
2 ACCESS mdb 數(shù)據(jù)庫(kù)有可能被下載的漏洞
問(wèn)題描述: 在用ACCESS做后臺(tái)數(shù)據(jù)庫(kù)時(shí),如果有人通過(guò)各種方法知道或者猜到了服務(wù)器的ACCESS數(shù)據(jù)庫(kù)的路徑和數(shù)據(jù)庫(kù)名稱,那么他能夠下載這個(gè)ACCESS數(shù)據(jù)庫(kù)文件,這是非常危險(xiǎn)的。比如:如果你的ACCESS數(shù)據(jù)庫(kù)book.mdb放在虛擬目錄下的database目錄下,那么有人在瀏覽器中打入: http:// someurl/database/book.mdb 如果你的book.mdb數(shù)據(jù)庫(kù)沒(méi)有事先加密的話,那book.mdb中所有重要的數(shù)據(jù)都掌握在別人的手中。
解決方法:
(1) 為你的數(shù)據(jù)庫(kù)文件名稱起個(gè)復(fù)雜的非常規(guī)的名字,并把他放在幾目錄下。所謂"非常規(guī)",打個(gè)比方:比如有個(gè)數(shù)據(jù)庫(kù)要保存的是有關(guān)書(shū)籍的信息,可不要把他起個(gè)"book.mdb"的名字,起個(gè)怪怪的名稱,比如d34ksfslf.mdb,再把他放在如./kdslf/i44/studi/ 的幾層目錄下,這樣黑客要想通過(guò)猜的方式得到你的ACCESS數(shù)據(jù)庫(kù)文件就難上加難了。
(2)不要把數(shù)據(jù)庫(kù)名寫(xiě)在程序中。有些人喜歡把DSN寫(xiě)在程序中,比如: DBPath = Server.MapPath("cmddb.mdb") conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath 假如萬(wàn)一給人拿到了源程序,你的ACCESS數(shù)據(jù)庫(kù)的名字就一覽無(wú)余。因此建議你在ODBC里設(shè)置數(shù)據(jù)源,再在程序中這樣寫(xiě):conn.open "shujiyuan"
(3)使用ACCESS來(lái)為數(shù)據(jù)庫(kù)文件編碼及加密。首先在選取"工具->安全->加密/解密數(shù)據(jù)庫(kù),選取數(shù)據(jù)庫(kù)(如:employer.mdb),然后接確定,接著會(huì)出現(xiàn)"數(shù)據(jù)庫(kù)加密后另存為"的窗口,存為:employer1.mdb。接著employer.mdb就會(huì)被編碼,然后存為employer1.mdb..要注意的是,以上的動(dòng)作并不是對(duì)數(shù)據(jù)庫(kù)設(shè)置密碼,而只是對(duì)數(shù)據(jù)庫(kù)文件加以編碼,目的是為了防止他人使用別的工具來(lái)查看數(shù)據(jù)庫(kù)文件的內(nèi)容。 接下來(lái)我們?yōu)閿?shù)據(jù)庫(kù)加密,首先以打開(kāi)經(jīng)過(guò)編碼了的employer1.mdb,在打開(kāi)時(shí),選擇"獨(dú)占"方式。然后選取功能表的"工具->安全->設(shè)置數(shù)據(jù)庫(kù)密碼",接著輸入密碼即可。為employer1.mdb設(shè)置密碼之后,接下來(lái)如果再使用ACCEES數(shù)據(jù)庫(kù)文件時(shí),則ACCESS會(huì)先要求輸入密碼,驗(yàn)證正確后才能夠啟動(dòng)數(shù)據(jù)庫(kù)。不過(guò)要在ASP程序中的connection對(duì)象的open方法中增加PWD的參數(shù)即可,例如: param="driver={Microsoft Access Driver (*.mdb)};Pwd=yfdsfs" param=param&";dbq="&server.mappath("employer1.mdb") conn.open param 這樣即使他人得到了employer1.mdb文件,沒(méi)有密碼他是無(wú)法看到employer1.mdb的。
3 code.asp文件會(huì)泄漏ASP代碼
問(wèn)題描述: 舉個(gè)很簡(jiǎn)單的例子,在微軟提供的 ASP1.0 的例程里有一個(gè) .asp 文件 ,專門(mén)用來(lái)查看其它 .asp 文件的源代碼,該文件為 ASPSamp/Samples/code.asp。如果有人把這個(gè)程序上傳到服務(wù)器,而服務(wù)器端沒(méi)有任何防范措施的話,他就可以很容易地查看他人的程序。例如 : code.asp?source=/directory/file.asp 不過(guò)這是個(gè)比較舊的漏洞了,相信現(xiàn)在很少會(huì)出現(xiàn)這種漏洞。 下面這命令是比較新的: http://someurl/iissamples/exair/howitworks/code.asp?/lunwen/soushuo.asp=xxx.asp 最大的危害莫過(guò)于asa文件可以被上述方式讀出;數(shù)據(jù)庫(kù)密碼以明文形式暴露在黑客眼前;
問(wèn)題解決或建議:
對(duì)于IIS自帶的show asp code的asp程序文件,刪除該文件或者禁止訪問(wèn)該目錄即可
4、filesystemobject 組件篡改下載 fat 分區(qū)上的任何文件的漏洞
問(wèn)題描述: IIS3、 IIS4 的 ASP 的文件操作都可以通過(guò) filesystemobject 實(shí)現(xiàn),包括文本文件的讀寫(xiě)目錄操作、文件的拷貝改名刪除等,但是這個(gè)強(qiáng)大的功能也留下了非常危險(xiǎn)的 "后門(mén)"。利用 filesystemobjet 可以篡改下載 fat 分區(qū)上的任何文件。即使是 ntfs 分區(qū),如果權(quán)限沒(méi)有設(shè)定好的話,同樣也能破壞,一不小心你就可能遭受"滅頂之災(zāi) "。遺憾的是很多 webmaster 只知道讓 web 服務(wù)器運(yùn)行起來(lái),很少對(duì) ntfs 進(jìn)行權(quán)限 設(shè)置,而 NT 目錄權(quán)限的默認(rèn)設(shè)置偏偏安全性又低得可怕。因此,如果你是 Webmaster ,建議你密切關(guān)注服務(wù)器的設(shè)置,盡量將 web 目錄建在 ntfs 分區(qū)上,目錄不要設(shè)定 everyone full control,即使是是管理員組的成員一般也沒(méi)什么必要 full control,只要有讀取、更改權(quán)限就足夠了。 也可以把filesystemobject的組件刪除或者改名。
5、輸入標(biāo)準(zhǔn)的HTML語(yǔ)句或者javascript語(yǔ)句會(huì)改變輸出結(jié)果
問(wèn)題描述: 在輸入框中打入標(biāo)準(zhǔn)的HTML語(yǔ)句會(huì)得到什么相的結(jié)果呢? 比如一個(gè)留言本,我們留言內(nèi)容中打入: <font size=10>你好!</font> 如果你的ASP程序中沒(méi)有屏蔽html語(yǔ)句,那么就會(huì)改變"你好"字體的大小。在留言本中改變字體大小和貼圖有時(shí)并不是什么壞事,反而可以使留言本生動(dòng)。但是如果在輸入框中寫(xiě)個(gè) javascript 的死循環(huán),比如:<a herf="http://someurl" onMouseover="while(1){window.close('/')}">特大新聞</a> 那么其他查看該留言的客人只要移動(dòng)鼠標(biāo)到"特大新聞",上就會(huì)使用戶的瀏覽器因死循環(huán)而死掉。
解決方法和建議:
編寫(xiě)類似程序時(shí)應(yīng)該做好對(duì)此類操作的防范,譬如可以寫(xiě)一段程序判斷客戶端的輸入,并屏蔽掉所有的 HTML、 Javascrip
|
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!