前不久,騰訊新推出的網絡空間“Q-ZONE”暴出了存在跨站漏洞,很難想象,一項新推出的業務居然如果脆弱,不由不讓人佩服騰訊的開發能力,下面便我們來了解一下“Q-ZONE”的這一跨站漏洞吧。
Q-Zone跨站漏洞的分析
1、Q-Zone對用戶輸入的過濾
進入Q-Zone后,依次點擊“設置→空間設置→QQ空間名稱”,在這里將可以修改空間的顯示名稱。如果我們寫入一段可執行的腳本代碼,只要過濾不嚴格的話,同樣會被保存在首頁中,通過調用執行代碼,達到攻擊瀏覽者的目的。下面我們先測試一下這個輸入框中能否寫入跨站腳本:
在“輸入空間名稱”輸入框中輸入上面的代碼“ ”時,發現在輸入框中限制了輸入字符的長度,總共只能輸入24個字符。而且當我們輸入許可長度的代碼,點擊提交后會彈出“請不要在輸入中包含"<>等字符”的對話框。看來Q-Zone對用戶的輸入進行了過濾。
2、查看Q-Zone的輸入過濾方式
在Q-Zone頁面中點擊“查看→源文件”,在代碼段開始處,可以看見如下代碼段:
|
有一點點ASP編程基礎的用戶,相信都可以看懂這段代碼吧?在代碼中通過“StrLenOfAscii()”函數,獲得了用戶輸入數據ASCⅡ碼的長度,除2后賦值給len變量。后面的代碼檢測len變量長度大于12的話,就提示輸入名稱太長。最重要的是前面的一句:“if (!checkFormValue(form1)) return false”,其中“checkFormValue()”函數很明顯可以推斷是用來檢測輸入數據中是否包含特殊字符的。當檢測到數據中包含被過濾的字符時,就彈出了前面所說的對話框。
通過分析,我們可以肯定Q-Zone是在客戶端對用戶輸入數據進行過濾的。
Q-Zone跨站漏洞的利用
即然Q-Zone是在客戶端對用戶輸入數據進行過濾的,那么就給我們留下了可利用的機會。我們可以繞過客戶端的限制,直接修改輸入數據進行提交。但是Q-Zone對用戶提交數據還進行了另外一個限制,就是不允許外站提交,在這里我們保存的HTML文件也無法正常提交數據。因此,我們必須另外想一個辦法,修改提交數據。
1、截獲提交數據
我們先運行一個叫作WSockExpert的軟件,運行WSockExpert后點擊工具欄上的“打開”按鈕,顯示當前的進程列表。如果是用QQ的面板打開Q-Zone的,那么在進程列表中選擇“QQ.exe→**的家”;如果是用IE打開Q-Zone的,可以在IE進程中找到相應的進程,確定后點擊“Open”按鈕開始監視與網站服務器交換的數據。
返回到Q-Zone網頁中,在“空間名稱”處輸入任意可提交的字符如“1234567890”,然后點擊“提交”,回到WSockExpert中,點中間列表框中的第3行“send”附近的數據欄,可以看到提交的數據內容:
|
“Cookie”是Cookie內容,包含了用戶驗證的東西;而“spacename=1234567890”就是我們提交的空間名稱數據了;前面的“Content-Length: 20”是提交的這段數據的長度。在數據中,還可以看到“Referer: http://q-zone.qq.com/cgi-bin/user/cgi_show_spacename”,這是我們要提交的服務端網頁地址。
2、修改提交數據
將下面窗口中的提交數據內容全部復制后,保存為一個1.TXT文件,將代碼中的“spacename=1234567890”
改為:“spacename= ”,“Content-Length: 20”改為“Content-Length: 40”
現在我們只要將這些數據提交到服務器上,就可以繞過客戶端對數據的過濾了,這就要用到另外一個叫作NC的工具了。
將上面保存的“1.txt”復制到與“nc.exe”同一個文件夾中,打開Windows系統中的命令提示符窗口,在命令行下進入NC.exe所在的文件夾,輸入“nc -vv q-zone.qq.com 80<1.txt”,命令執行后,就會向遠程服務器提交我們修改過的數據了。
提示:我們可以將“Test”換成任意中文,但是需要先轉換為IE編碼,例如“測試”的IE編碼為“%B2%E2%CA%D4”,具體的轉換過程這里就不用多說了。
3、檢測代碼執行結果
打開我們的Q-Zone,此時會自動彈出一個提示窗口。說明我們已經在遠程的網頁中成功的插入了“ ”這條代碼!同時在修改空間名稱的頁面中,可以看到已提交修改的原來被限制了的空間名稱。
跨站漏洞應用實例——盜取用戶Cookie
上面進行的僅僅是一個簡單的測試,如果攻擊者在Q-Zone中寫出危險的代碼,例如盜取瀏覽網頁者的Cookie內容的代碼時,就很有可能獲得Cookie中的各種論壇或網站的帳號及密碼。下面簡單的說一說這種利用方式:
1、上傳Cookie收集網頁
申請一個網站空間,上傳一內容如下的ASP文件——info.asp,這個網頁主要用來收集后面的Cookie內容。
|
2、在Q-Zone中寫入盜Cookie代碼
運行“Q-ZONE個人空間名稱跨站漏洞利用工具”,將下面的代碼提交插入到Q-Zone中:
|
當其他QQ用戶瀏覽你的Q-Zone時,就會將在當前網頁中新開一個窗口,連接到你指定的收集Cookie網頁,并將自己的COOKIE內容發送到網站空間中的"cookies.txt"文件內,打開該文件后,就可以看到所有用戶的COOKIE信息,而這些COOKIE信息中很可能就包括著用戶的各個論壇和網站密碼帳號哦!
小知識:CSS跨站漏洞
跨站漏洞又叫CSS漏洞,這里的CSS可不是網站設計中的CSS(分層樣式表),而是指黑客入侵者通過某種方式,在遠程的WEB頁面的HTML代碼中寫入特殊的字符串。當其它上網者在瀏覽此頁面時,嵌入頁面中的這些字符就會被作為一段腳本代碼而執行。
黑客向遠程頁面中寫入代碼的方法很多,比如最常見的是在論壇中發帖時,在帖子中加入可執行的代碼;或者在網站的用戶資料修改處,也可以通過更改簽名、聯系方式等,在用戶信息頁面中嵌入腳本代碼。無論采用何種方式寫入執行代碼時,要求網頁程序沒有對用戶輸入的數據進行嚴格的過濾,有的網頁程序限制了用戶寫入的字符類型,有危險的特殊代碼就無法寫入執行。利用跨站漏洞,入侵者可以進行非常多的攻擊,比如盜取別的人COOKIES中的帳號和密碼,或者偽造頁面信息、進行拒絕服務等。可以說跨站漏洞是一個危害性非常大的漏洞。
用戶輸入過濾方式
網頁程序對用戶輸入進行過濾的方式一般有兩種:一種是在服務端進行過濾,也就是說當用戶將數據提交到網頁服務器后,在服務器端對用戶的輸入進行檢測過濾是否符合要求;另外一種是在客戶端進行過濾,也就是說當用戶輸入數據后,在將數據提交發送到遠程的網站服務器上時,首先在客戶端進行數據過濾檢測,符合要求再發送。比如許多網頁程序為了防止用戶構造提交的數據進行SQL攻擊,在遠程服務器端進行了數據過濾;同時在許多網站上我們也可以看到一些用戶注冊之類的表單,限制了用戶輸入數據的長度,這些大部份是在客戶端進行限制的。
修改IE提交數據
一般說來,對用戶輸入端進行的簡單限制,可以通過直接修改網頁源代碼繞過。例如上面提到的對用戶輸入長度的限制,如果我們將源代碼中的“maxlength="24"”改為“maxlength="1000"”,并將上面的檢測用戶輸入內容的代碼段刪除掉后,保存成一個html文件后。再重新打開保存的HTML文件,就可以突破限制提交數據了。


