近日,由於發現一些站點仍然存在UBB 的跨站腳本攻擊的漏洞.跨站腳本攻擊雖然很少會對服務器造成一些什麼比較大的影響,但對於一個站點來說,存在這種漏洞實在是太不值得!小則,彈點什麼東東出來;中則改改主頁;重則竊取用戶的COOKIES資料,更甚者將會G掉瀏覽者的硬盤.一個站點被變成一個惡意網站,還有誰敢來?如果再加上該站的站長比較"盲"一些,豈不亂套了?

小小的一段代碼就真的能使一個站點成這樣?好叫我們來具體的看看所謂的跨站腳本攻擊到底會成為什麼樣的攻擊模式.進入一個含UBB功能的站點,比如留言板,論壇,或是含提交程序的站點.首先,講一下最簡單的腳本攻擊:等HTML字符的過濾問題.

登陸過一個CGI製作站點.以原來ASP的眼光看CGI的站點,感覺CGI對腳本的過濾應該很好.於是做了最初的測試.在用戶一欄中填寫,提交用戶註冊後發現並沒提出非法字符的提示.註冊完成後,點擊資料也發現頁面變形了.如在其他幾個如國家,性別裡填寫也會出現同樣的問題,那頁面就沒法看了.於是換了一個站點,再次提交出現了非法字符提示,看來站點是已經過濾的<>等HTML的腳本字符,那好,我們改用ASCII 碼替換<> 如& #60; & #62;代替提交後再來看,又出現了上面頁面變形的情況,看來非法過濾機制還不是很完善. 更有甚者,我竟發現一個站點內的姓名欄填寫時沒有字數大小設置,沒有過濾任何非法字符,如果我提交個什麼惡意代碼那還不成全了我?

簡單的腳本攻擊如等HTML格式的代碼一定要過濾好,上面的一些站點還沒牽扯到UBB就出問題了.那我們下面就開始重點講一下UBB過濾漏洞的問題.UBB 是論壇中用來替換HTML編輯的一種格式符號,如[b ][/b ]可以替換成HTML中的< b>..然而就是這一個替換問題,就成了跨站腳本攻擊的最佳積聚地.測試了一個ASP留言版以及一個整站的程序代碼:

初級問題: [url ]的過濾,在提交該代碼時可以構建一個onmouseover函數的惡意代碼,既然onmouseover可以生效,那還有什麼辦不到的?一些原碼程序在變換[url ][/url ]時,只是將[url ]s2[/ url]中的s2直接提交到< a href="s2" target=_blank>S2中.看到如此轉換我們可以使用相應的ASCII 碼中的& #34;來代替",我們多提交一個"然後在構建onmouseover函數進行操作,後果?你應該知道!:P

[img ]的過濾,這真的算是個老大難的問題.很早以前就是[img]的腳本攻擊流行一時啊.這次測試中,很多站點還是仍然存在這個漏洞.有點程序根本沒有進行過濾.尤其是一些免費留言板的提供站點很多都存在這樣的問題.下面我們主要將一下[IMG ]標籤的問題:

很簡單的[img ]javascript :alert();[/ img]提交後轉換成的代碼為< img src="javascript :alert();">,好,到這裡我們就可以看到javascript :alert();被< img src="">標籤激活了.表現就是彈出對話框.上面寫著你在()中要提交的東西.如documents.cookie 呵呵..大多數人都應該知道這東西是做什麼.更有甚者,使用document.write();函數,可以寫網頁.寫什麼?當然是惡意代碼,如[ img]javascript :document.write();[ /img].()中間加你要加的,寫你要寫的,想多危險就多危險.

高級問題: 由於[img ]的初級問題騷擾很多站點就對一個敏感的字符開始過濾.如ja連接,do連接,wr連接,提交後自動分為j a,d o,w r.或是對字符進行過濾java,document,等等.而這些只能難倒一小部分人.我們仍然可以利用ASCII碼來代替.可能有人會對代替後的代碼仍然不能正常顯示而困惑.好,我們下面以一個完整的例子介紹: 某站點UBB過濾代碼段如下:
<%
Function code_ssstrers)
dim strer:strer=strers
if strer="" or isnull(strer) then code_ss"":exit function

strer=replace(strer,"<","<")
strer=replace(strer,">",">")
strer=replace(strer," "," ") 』空格
strer=replace(strer,CHR(9)," ") 』table
strer=replace(strer,"』","』") 』單引號
strer=replace(strer,"""",""") 』雙引號

dim re,re_v
re_v="[^\(\)\;\』;""\[]*"
』re_v=".[^\[]*"
Set re=new RegExp
re.IgnoreCase =True
re.Global=True

re.Pattern="(javascript :)"
strer=re.Replace(strer,"javascript:")
re.Pattern="(javascript)"
strer=re.Replace(strer,"javascript")
re.Pattern="(jscript:)"
strer=re.Replace(strer,"jscript :")
re.Pattern="(js:)"
strer=re.Replace(strer,"js:")
re.Pattern="(value)"
strer=re.Replace(strer,"value")
re.Pattern="(about:)"
strer=re.Replace(strer,"about:")
re.Pattern="(file:)"
strer=re.Replace(strer,"file&:")
re.Pattern="(document.)"
strer=re.Replace(strer,"document :")
re.Pattern="(vbscript:)"
strer=re.Replace(strer,"vbscript :")
re.Pattern="(vbs:)"
strer=re.Replace(strer,"vbs :")
re.Pattern="(on(mouse|exit|error|click|key))"
strer=re.Replace(strer,"on$2")


能看懂ASP的朋友,就可以看出,以上代碼段對javascript,jscript:,js:,about;value,document., onmouse以及onexit等語句進行了過濾和替換.並對一些特殊字符進行了替換.如".",";""(",")" [替換代碼為""中間的"..仔細觀察代碼後我們會發現其過濾機制並非想想像的那樣完美.提交:[ mg]& #176& #93& #118& #97& #115& #79rip& #106& #57documen& #115& #76write& #30& #29哈哈又被黑了& #29& #61& #29[/ mg] 類似代碼就可以實現更高級的腳本攻擊.注:由於很多站點仍存在此問題,所以將代碼修改過,無攻擊性了.

打開你的FT2000,使用文本編輯,你可以找到任何特殊字符所屬的ASCII碼.如:分號;可以代替為&# 59,句點.可以代替為&# 46,以這樣的形式我們再次提交代碼.果然,上面整個的過濾機制幾乎完全失效了.根本沒起到什麼防禦作用.

看了以上的攻擊方法,是不是覺得很鬱悶?如果才能避免上面的問題發生?

1.如果你的站點程序含論壇,留言板,以及其他程序中含提交數據格式的,沒有很好過濾機制,請馬上下載升級程序或是停止使用.避免造成更多的問題.
2.各提供免費論壇,免費申請留言板的站,請將UBB格式關閉.或找到更好的解析UBB.ASP程序頁.
3.對一些會編寫ASP的朋友,我建議大家過濾一下字符:(全部字符將寫在[]中)如:
["|.|;|:|\|/|&|$|#|`|)|,|』|"|-|~|[|(||] 注:其中|為分割符

4.對於某些站點建議去掉問題比較多的留言板,或是其他含提交的程序.如:原www.sangel.net使用的guestbook,一些不知名的程序體問題更是多多.建議換掉它.

5.我本人也修改了一個國外的留言板,前台基本已經修改完畢.後台這幾天正在趕.修改後感覺在文本提交和輸入以及留言時都有了很好的過濾.本來打算全採用英文界面,但考慮到N多chinese 對英語不過關,我還是將部分程序漢化了.有興趣的朋友可以http://www.e3i5.com/guestbook/ 測試.我們歡迎善意的測試.

以下是國內一些經過本人測試的站點的留言板有問題的地址,(請各位站長注意啦,及時修補程序免得造成不必要的麻煩),測試的時間比較短一些,可能有一些站點沒有找到.可能存在著更嚴重的問題.

以上就是這次腳本攻擊測試的全部內容。綜觀全部站點,看上去安全性真是的不敢再想.問題多多.
雖然只是舉手之勞就可以解決的問題,但稍不小心就會造成大問題。 

資料來源 中國黑客聯盟 by 新疆人胡胡
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 ivan0914 的頭像
    ivan0914

    I'n Blog 之萬象真藏

    ivan0914 發表在 痞客邦 留言(0) 人氣()