瞭解跨站腳本***

跨站腳本***(Cross-site scripting,通常簡稱爲XSS)發生在客戶端,可被用於進行竊取隱私、釣魚欺騙、偷取密碼、傳播惡意代碼等***行爲。

惡意的***者將對客戶端有危害的代碼放到服務器上作爲一個網頁內容, 使得其他網站用戶在觀看此網頁時,這些代碼注入到了用戶的瀏覽器中執行,使用戶受到***。

一般而言,利用跨站腳本***,***者可竊會話COOKIE從而竊取網站用戶的隱私,包括密碼。

XSS***使用到的技術主要爲HTML和Javascript,也包括VBScript和ActionScript等。XSS***對WEB服務器雖無直接危害,但是它藉助網站進行傳播,使網站的使用用戶受到***,導致網站用戶帳號被竊取,從而對網站也產生了較嚴重的危害。

跨站腳本漏洞原理

***者通過網站的輸入點嵌入非法的HTML標籤與JavaScript腳本並執行以達到在客戶端***的目的。 ***者注入的標籤與腳本最終都要在客戶端執行,***的過程實際上都 在客戶端的瀏覽器上發生的。 能在客戶端進行跨站的不僅僅是HTML標籤與JavaScript腳本,還包含一些其它的客戶端應用,比如Flash裏的ActionScript腳本也能輔助發起XSS***

跨站腳本漏洞發生在哪裏

Cross-Site Scripting (XSS) 漏洞在以下情況下發生:

  1. 數據通過一個不可信賴的數據源進入 Web 應用程序。 對於 Reflected XSS,不可信賴的源通常爲 Web 請求,而對於 Persisted(也稱爲 Stored)XSS,該源通常爲數據庫或其他後端數據存儲

  2. 在未檢驗包含數據的動態內容是否存在惡意代碼的情況下,便將其傳送給了 Web 用戶

跨站腳本漏洞實例

例 1

類型1:CSS跨站
[HTML_REMOVED]//style屬性值用戶可控或者用戶可以直接編輯模板
惡意用戶可以提交“xss:expr/*XSS*/ession(alert('XSS'))”作爲STYLE標籤的屬性值,或者在編輯模板的地方,
惡意用戶可以將JS代碼寫入CSS文件,導致跨站漏洞
類型2:HTML標籤跨站
[HTML_REMOVED]">
由於程序沒有對標籤進行轉義,惡意用戶可以提交
http://www.test.com/search.php? evil_content =">[HTML_REMOVED]alert(/XSS/)[HTML_REMOVED]<
執行任意JS代碼,導致跨站漏洞
類型3:Javascript跨站
[HTML_REMOVED]
var UID ='0';
var isLogin =false;
var KEY ='';//KEY變量用戶可控
var FROMTAG =1;
[HTML_REMOVED]
用戶可以提交:
http://www.test.com/news/tag.jsp?key=%27;alert%281%29;//
變量key包含在JavaScript代碼段中。原始代碼被修改爲:
[HTML_REMOVED]
var UID ='0';
var isLogin =false;
var KEY ='';alert(1);//惡意用戶修改了頁面輸出代碼';

例 2

下面的 ASP.NET 代碼片段會在一個 HTTP 請求中讀取一個僱員 ID,並顯示給用戶。

protectedSystem.Web.UI.WebControls.TextBoxLogin;
protectedSystem.Web.UI.WebControls.LabelEmployeeID;
...
EmployeeID.Text=Login.Text;

如果 Login 只包含標準的字母或數字文本,這個例子中的代碼就能正確運行。 如果 Login 有一個包含元字符或源代碼的值,那麼 Web 瀏覽器就會像顯示 HTTP 響應那樣執行代碼。

起初,這個例子似乎是不會輕易遭受***的。 畢竟,有誰會輸入導致惡意代碼的 URL,並且還在自己的電腦上運行呢? 真正的危險在於,***者會創建惡意的 URL,然後使用電子郵件或者其他詭計誘使受害者點擊這個鏈接。 當受害者點擊這個鏈接時,就會不知不覺地通過易受***的 Web 應用程序,使自己的電腦蒙受惡意內容帶來的風險。 這種對易受***的 Web 應用程序進行盜取的機制通常被稱爲反射式 XSS。

例 3

下面的 ASP.NET 代碼片段會根據一個給定的僱員 ID 來查詢數據庫,並顯示出該僱員的相應姓名。

protectedSystem.Web.UI.WebControls.LabelEmployeeName;
...
string query ="select * from emp where id="+ eid;
   sda =newSqlDataAdapter(query, conn);
   sda.Fill(dt);
string name = dt.Rows[0]["Name"];
...
EmployeeName.Text= name;

如同例 2,如果對 name 的值處理得當,該代碼就能正常地執行各種功能;如若處理不當,就會對代碼的盜取行爲無能爲力。 同樣,這段代碼暴露出的危險較小,因爲 name 的值是從數據庫中讀取的,而且顯然這些內容是由應用程序管理的。 然而,如果 name 的值是由用戶提供的數據產生,數據庫就會成爲惡意內容溝通的通道。

如果不對儲存於數據庫中的所有數據進行恰當的輸入確認,那麼***者便能在用戶的 Web 瀏覽器中執行惡意命令。

這種類型的 Persistent(稱作 Stored XSS)盜取極其陰險狡猾,由於數據存儲的間接性,使得辨別威脅的難度增大,而且還提高了一個***影響多個用戶的可能性。 XSS 盜取會從訪問提供留言簿 (guestbook) 的網站開始。

***者會在這些留言簿的條目中嵌入 JavaScript,接下來所有訪問該留言簿的用戶都會執行這些惡意代碼

跨站腳本漏洞危害

  1. 釣魚欺騙:最典型的就是利用目標網站的反射型跨站腳本漏洞將目標網站重定向到釣魚網站,或者注入釣魚JavaScript以監控目標網站的表單輸入,甚至發起基於DHTML更高級的釣魚***方式。

  2. 網站掛馬:跨站時利用IFrame嵌入隱藏的惡意網站或者將被***者定向到惡意網站上,或者彈出惡意網站窗口等方式都可以進行掛馬***。

  3. 身份盜用:Cookie是用戶對於特定網站的身份驗證標誌,XSS可以盜取到用戶的Cookie,從而利用該Cookie盜取用戶對該網站的操作權限。如果一個網站管理員用戶Cookie被竊取,將會對網站引發巨大的危害。

  4. 盜取網站用戶信息:當能夠竊取到用戶Cookie從而獲取到用戶身份使,***者可以獲取到用戶對網站的操作權限,從而查看用戶隱私信息。

  5. 垃圾信息發送:比如在SNS社區中,利用XSS漏洞借用被***者的身份發送大量的垃圾信息給特定的目標羣。

  6. 劫持用戶Web行爲:一些高級的XSS***甚至可以劫持用戶的Web行爲,監視用戶的瀏覽歷史,發送與接收的數據等等。

  7. XSS蠕蟲:XSS 蠕蟲可以用來打廣告、刷流量、掛馬、惡作劇、破壞網上數據、實施DDoS***等。

跨站腳本漏洞解決方案

  1. 檢查變量是否正確初始化並明確變量類型

  2. 不僅要驗證數據的類型,還要驗證其格式、長度、範圍和內容。

  3. 不要僅僅在客戶端對數據做HTML標籤轉義以及過濾單引號,雙引號等危險字符,關鍵的過濾步驟也應該在服務端進行。

  4. 對輸出到頁面的數據也要做安全檢查,數據庫裏的值有可能會在一個大網站的多處都有輸出,即使在輸入做了編碼等操作,在各處的輸出點時也要進行安全檢查。

  5. 在發佈應用程序之前測試所有已知的威脅。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章