<address id="ttjl9"></address>

      <noframes id="ttjl9"><address id="ttjl9"><nobr id="ttjl9"></nobr></address>
      <form id="ttjl9"></form>
        <em id="ttjl9"><span id="ttjl9"></span></em>
        <address id="ttjl9"></address>

          <noframes id="ttjl9"><form id="ttjl9"></form>

          淺談XSS跨站腳本攻擊

          2018-6-18    seo達人

          如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里

          淺談 跨站腳本攻擊(XSS)

          一、概述

          1、什么是跨站腳本攻擊

          跨站腳本攻擊(Cross Site Scripting),簡稱XSS,  是指:由于網站程序對用戶輸入過濾不足,致使攻擊者利用輸入可以顯示在頁面上對其他用戶造成影響的代碼來盜取用戶資料、利用用戶身份進行某種動作或者對訪問者進行病毒侵害的一種攻擊方式。
          直白點:惡意攻擊者往Web頁面里插入惡意Script代碼,當用戶瀏覽該頁之時,嵌入其中Web里面的Script代碼會被執行,從而達到惡意攻擊用戶的目的。

          不同于大多數攻擊(一般只涉及攻擊者和受害者),XSS涉及到三方,即攻擊者、客戶端與網站。XSS的攻擊目標是為了盜取客戶端的cookie或者其他網站用于識別客戶端身份的敏感信息。獲取到合法用戶的信息后,攻擊者甚至可以假冒最終用戶與網站進行交互。

          2、為什么簡稱XSS,而不是CSS

          跨站腳本攻擊(Cross Site Scripting),為了不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故將跨站腳本攻擊縮寫為XSS。

          3、XSS漏洞成因

           XSS漏洞成因是由于動態網頁的Web應用對用戶提交請求參數未做充分的檢查過濾,允許用戶在提交的數據中摻入代碼,然后未加編碼地輸出到第三方用戶的瀏覽器,這些攻擊者惡意提交代碼會被受害用戶的瀏覽器解釋執行。

          4、舉個例子

          [php] view plain copy
          1. <?php    
          2.      header("Content-Type: text/html; charset=utf-8");  
          3.      $username = $_GET["name"];  
          4.      echo "<p>Hi,".$username."!</p>";  
          5. ?>  
          6.   
          7. //這段PHP代碼的主要作用是從URL獲取用戶輸入的參數作為用戶名,并在頁面中顯示“Hi,XXX”  

          (1)正常情況下:我們在url中輸入:   http://localhost/test.php?name=Sam    

          給參數name傳一個值Sam,顯示如下圖

          (2)那么,在非正常情況下呢即:把傳遞給name的參數值改為一段可執行的Javascript代碼)?

          我們在url中輸入:http://localhost/test.php?name=<script>alert("My name is Sam");</script>

          如果我們后臺沒有進行任何關于傳入參數值的過濾,會顯示如下圖結果


          二、XSS生效方式

          XSS主要有三種生效方式:(1)構造URL   (2)發布內容式     (3)蠕蟲式

          1、生效方式:構造URL 

          XSS攻擊者通過構造URL的方式構造了一個有問題的頁面;當其他人點擊了此頁面后,會發現頁面出錯,或者被暗中執行了某些js腳本,這時,攻擊行為才真正生效。


          一般來說,動態頁面中會將url中的部分內容回寫在頁面中。以百度的搜索為例,輸入網址:http://www.baidu.com/s?wd=<script>alert("wrong")<%2Fscript>

          搜索后會顯示如下頁面:

          因為參數<script>alert("wrong")<%2Fscript>是<script>alert("wrong")</script>轉義后的結果,搜索結果頁中,會在標題中中和搜索框中回寫用戶輸入的內容。

          如果這里沒有經過轉義處理,則頁面中就嵌入了一段script,并執行該代碼,并彈出對話框提示用戶。如果是其他惡意代碼,則可能造成破壞。然后攻擊者將此URL廣為傳播——比如說,以報錯的方式發給百度的管理員,管理員打開這個URL就中招了。


          下面我們來通過下圖,圖解XSS


          舉例

          例1、

          若未對XSS進行預防,

          我們在URL中正常輸入如下,搜索結果會如下圖顯示:beijing  的相關詞條

          如果在url中非正常輸入如下的話,查看源碼后input的value屬性值會自動變為  <script>alert("xss test")</script>


          若已對XSS進行了預防,

          非正常輸入后則會顯示如下圖:


          例2、

          若未對XSS進行預防,

          在URL中輸入紅框中的值,搜索后則顯示如下:

          若已對XSS預防,

          則搜索結果如下圖:


          2、生效方式:發布式內容

          構造URL攻擊方式傳播范圍有限,被攻擊者只要有基本的安全意識就可以避免,因此這種手段的危險性比較小。相比之下,通過發表內容構造的XSS的危害就大了很多。

          在可以發表內容的論壇、討論區、吧、博客、微博等網站上,用戶發表的內容會保存起來,允許其他用戶瀏覽。這些保存的內容顯示在頁面上的時候,如果沒有經過正確的處理,也會把攻擊者精心構造的內容顯示出來,訪問該內容的用戶就此中招。如果該頁面流傳廣泛,則影響會更加深遠。

          拿 留言板舉例

          例、

          留言板的任務是把用戶留言的內容展示出來。正常情況下,用戶的留言都是正常的語言文字,留言板顯示的內容也就沒毛病。

          然而這個時候如果有人不按套路出牌,在留言內容中丟進去一行”<script>alert(“mdzz”)</script>
          之后當瀏覽這條留言的時候,就會彈出如下信息框。


          3、生效方式:蠕蟲式 

          最暴力的方式是使用蠕蟲——就是首先發一個有問題的文章,瀏覽者閱讀時會被暗中執行惡意代碼,發表一篇新的文章的,該文章也含有同樣的惡意代碼。這樣有可能在最快時間內將攻擊鋪滿整個網站。蠕蟲式攻擊將暗中偷偷摸摸的攻擊行為變成了光明正大的攻城拔寨,極容易被發現和修復。


          Eg:早在2011年新浪就曾爆出過嚴重的xss漏洞,導致大量用戶自動關注某個微博號并自動轉發某條微博。(蠕蟲式)
          它以吸引人眼球的方式,讓當微博用戶主動點擊攻擊鏈接。之后微博網友會立刻執行一段有害代碼,造成三個結果:發布一條微博;成為攻擊發起人的粉絲;向其他好友發送含同樣鏈接地址的私信。新浪微博很快發現這個漏洞,刪除了含攻擊鏈接的微博內容,并將攻擊發起人ID刪除。


          注:上面我們只是為了方便以彈窗舉例,但是XSS攻擊方式絕不是彈窗這么簡單


          三、XSS攻擊實例

          (1)XSS偷取用戶信息

          (2)XSS盜取Cookie

          (3)XSS釣魚網站

          (4)XSS蠕蟲攻擊

          四、XSS的破壞方式

          (1)破壞頁面結構:用戶輸入的內容包含了html的標簽,與前面的標簽等閉合,導致頁面的DIV結構發生變化,頁面錯亂。

          (2)破壞顯示內容:用戶輸入的內容包含了單引號或雙引號,與前面的單引號或雙引號匹配,導致后面的內容丟失,顯示不出來。

          (3)破壞JS:用戶產生的內容直接輸出到js片斷中,但僅轉義少數字符不能保證排除攻擊,所以容易導致JS被破壞

          五、XSS攻擊 繞過過濾的一些簡單方法

          1、大小寫繞過

          這個繞過方式的出現是因為網站僅僅只過濾了<script>標簽,而沒有考慮標簽中的大小寫并不影響瀏覽器的解釋所致。

          例:

          如果我們在URL中輸入:  localhost/test.php?name=<script>alert(''hey!")</script>     

          ,由于網站對<script>標簽進行了過濾,所以搜索后什么都不會發生。

          而如果我們輸入:  localhost/test.php?name=<sCript>alert(''hey!")</scRipt>  

          ,實質就是改變了<script>的大小寫,則結果如下圖所示,我們又愉快的彈出了彈窗。



          2、利用過濾后返回語句再次構成攻擊語句來繞過

          即我們輸入一串原始值,網站將輸入的原始值進行過濾,過濾后的值仍是一段可執行的代碼。

          讓過濾完script標簽后的語句中還有script標簽。
                即:<sCri<script>pt>alert("hey!")</scRi</script>pt> 過濾后
          仍為可執行的JS代碼<script>alert("hey!")</script>


          如下圖:將參數name值設為<sCri<script>pt>alert("hey!")</scRi</script>pt>

          ,輸入后仍會出現彈窗



          3、并不是只有script標簽才可以插入代碼!

          當script標簽已經被完全過濾后,前面兩種方法就都不會成功。
          莫慌,能植入腳本代碼的不止script標簽。

          例如:我們用<img>標簽做一個示范。
          我們利用如下方式在URL中輸入:http://localhost/test.php?name=<img src='w.123' onerror='alert("hey!")'>  
          之后就可以再次愉快的彈窗。(因為我們指定的圖片地址根本不存在也就是一定會發生錯誤,這時候onerror里面的代碼自然就得到了執行。)


          以下列舉幾個常用的可插入代碼的標簽。
          <div onmouseover=‘do something here’> 當用戶鼠標在這個塊上面時即可運行(可以配合weight等參數將div覆蓋頁面,鼠標不劃過都不行)
          類似的還有onclick,這個要點擊后才能運行代碼

          4、編碼腳本代碼繞過關鍵字過濾。
          有的時候,服務器往往會對代碼中的關鍵字(如alert)進行過濾,這個時候我們可以嘗試將關鍵字進行編碼后再插入,不過直接顯示編碼是不能被瀏覽器執行的,我們可以用另一個語句eval()來實現?!緀val()會將編碼過的語句解碼后再執行】

          alert(1)編碼過后就是\u0061\u006c\u0065\u0072\u0074(1),

          所以構建出來的攻擊語句http://localhost/test.php?name=<script>eval(\u0061\u006c\u0065\u0072\u0074(1))</script>

          如下圖執行后又會出現彈窗


          5、組合各種方式
          在實際運用中漏洞的利用可能不會這么直觀,需要我們不斷的嘗試,甚至組合各種繞過方式來達到目的。

          藍藍設計www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務



          日歷

          鏈接

          個人資料

          藍藍設計的小編 http://www.syprn.cn

          存檔

          亚洲va欧美va天堂v国产综合