XSS跨站點腳漏洞概述

2021-02-23 SegmentFault

來源:SegmentFault 思否社區

作者:乘著風

XSS(Cross Site Scripting)跨站點腳本是一種代碼注入攻擊,攻擊者利用Web站點的代碼漏洞,在用戶訪問的網頁時運行植入的惡意JS腳本,從而影響用戶訪問或竊取用戶信息。

XSS分類


根據惡意腳本的觸發方式,XSS攻擊可分成三種形式,分別是反射型,存儲型和DOM型。

反射型XSS:客戶端的提交的內容中帶XSS腳本,伺服器端處理不當,直接在頁面上輸出內容,導致惡意代碼被執行。

例如:惡意用戶在頁面中的文本框中輸入腳本代碼,表單提交後,伺服器程序未對文本框數據進行轉義處理,直接列印到頁面上,頁面返回到客戶端展示時,觸髮腳本執行。

存儲型XSS:攻擊者向系統中注入惡意代碼,惡意代碼在資料庫中保存,用戶訪問從資料庫中讀取的內容生成的頁面時,觸發惡意代碼執行。

例如:惡意用戶在論壇發帖內容中包含腳本代碼,發帖內容提交後保存到伺服器資料庫中,當其他用戶瀏覽此帖子時,從資料庫中讀取帖子內容展示,帖子內容觸髮腳本在瀏覽器中執行。

DOM型XSS:反射型XSS類似,區別在於帶惡意代碼的數據不通過伺服器端處理,直接由客戶端JS腳本處理(DOM樹操作)時,觸發惡意代碼執行。

例如:惡意用戶在URL參數中植入腳本,用戶點擊URL在瀏覽器打開後,JS讀取有腳本的參數,未做適當處理,觸髮腳本執行。

DOM型XSS


在不需要和伺服器交互情況下,客戶端JS腳本可以在瀏覽器中直接查找、操作(增刪改)DOM模型的元素。同時也能讀取用戶在瀏覽器的輸入,如URL對象、location對象,並提取相關的參數。如果用戶輸入的內容總包含惡意腳本,而程序沒有進行有效的處理和過濾(如把傳輸數據直接交給eval執行),就會導致DOM型XSS攻擊。

攻擊示例


以下示例代碼中,JS代碼從瀏覽器URL中讀取param參數,未經校驗和處理,直接寫入document中,如果參數內容中夾帶可執行的JS腳本塊,腳本就會直接執行。

<!--dom_xss_sample.html--><!DOCTYPE html><html><head>    <title>DOM XSS</title></head><body>    <p>DOM XSS攻擊示例</p></body><script>    var pos=document.URL.indexOf("param=") + 6;    document.write(decodeURI(document.URL.substring(pos,document.URL.length)));</script></html>

在URL中,增加param=<script>alert(0)</script>參數,參數內容通過document.write直接寫入到頁面中。

除了直接在參數中帶顯而易見的腳本外,在其他標籤中夾雜可執行的事件也是常見方式,如在img標籤的onerror事件中執行腳本。示例如下:param=<img src="null" onerror="alert('1')" />

從以上示例中可以看出,造成DOM型XSS漏洞攻擊,主要有兩個過程:

其中,輸入除了上述document.URL,還包括如下數據源:

對輸入的處理,除了上述document.write,還包括如下方法:

document.forms[0].action=…document.location.hostname=…document.location.replace(…)document.location.assign(…)window.location.href=… (and assigning to location’s href, host and hostname)

更多的DOM型XSS攻擊方法,可參考如下文檔 DOM Based Cross Site Scripting or XSS of the Third Kind

防禦方法


對於DOM型XSS的攻擊,OWASP組織提供了7條RULE和10條GUIDELINE,此處不再累贅,請參考官方原文DOM based XSS Prevention Cheat Sheet

點擊左下角閱讀原文,到 SegmentFault 思否社區 和文章作者展開更多互動和交流。

相關焦點

  • web漏洞挖掘指南 -XSS跨站腳本攻擊
    跨站腳本英文全稱(Cross Site Scripting跨站腳本),為了不和css層疊樣式表(英文全稱:Cascading Style Sheets)混淆,因此將跨站腳本縮寫為XSS。產生XSS漏洞根本原因其實是web應用未對用戶的輸入進行嚴格的過濾和轉義,導致攻擊者可從正常的輸入功能注入腳本代碼,我常將xss攻擊理解為一種javascript注入,當帶有xss惡意代碼的頁面被其他用戶訪問到時,js便會被執行,js腳本可以執行很多操作,比如:竊取用戶cookie,讀取用戶鍵盤記錄,截屏,惡意跳轉等,甚至可以結合BEEF的hook.js鉤子劫持用戶瀏覽器。
  • 跨站腳本攻擊(XSS)
    跨站腳本攻擊,它指的是惡意攻擊者往Web頁面裡插入惡意html代碼,當用戶瀏覽該頁之時,嵌入其中Web裡面的html代碼會被執行,從而達到惡意用戶的特殊目的。已知的常規跨站腳本攻擊漏洞有三種:1)存儲式;2)反射式;3)基於DOM。
  • 獨家分享:跨站腳本攻擊XSS詳解
    反射型XSS或不持久型XSS(中危漏洞)存儲性XSS或持久型XSS(高危漏洞)DOM XSS(低危漏洞/中危漏洞)跨站腳本攻擊存在地方跨站腳本攻擊測試方法跨站腳本攻擊實戰演示xss平臺搭建及後臺使用(cookie獲取)反射型XSS(POST)獲取用戶密碼xss釣魚攻擊過程演示
  • 跨站腳本漏洞(XSS)的學習筆記
    </a>即在輸入框中輸入#' onclick="alert(111)">讓a標籤閉合提交後內容如下:說明該頁面存在dom型xss漏洞       Xss後臺跨站腳本漏洞要想實現get型xss獲取cookie的效果,需要偽造一個提交頁面,偽造頁面被打開後向存在漏洞的網站提交post請求,後臺觸發xss惡意腳本獲取cookie。
  • 跨站腳本漏洞(XSS)基礎講解
    二、XSS 漏洞簡介    跨站腳本攻擊是指惡意攻擊者往Web頁面裡插入惡意Script代碼,當用戶瀏覽該頁之時,嵌入其中Web裡面的Script代碼會被執行,從而達到惡意攻擊用戶的目的。    xss漏洞通常是通過php的輸出函數將javascript代碼輸出到html頁面中,通過用戶本地瀏覽器執行的,所以xss漏洞關鍵就是尋找參數未過濾的輸出函數。    常見的輸出函數有:echo printf print print_r sprintf die var-dump var_export.
  • 挖洞思路 | XSS跨站腳本攻擊漏洞挖掘技巧總結
    這就是DOM型XSS漏洞,這種漏洞數據流向是: 前端-->瀏覽器XSS的過濾和繞過前面講sql注入的時候,我們講過程序猿對於sql注入的一些過濾,利用一些函數(如:preg_replace()),將組成sql語句的一些字符給過濾,以防止注入。那麼,程序猿也可以用一些函數將構成xss代碼的一些關鍵字符給過濾了。
  • XSS(跨站腳本攻擊)的最全總結
    不同點在於payload到達伺服器的方式。不要愚蠢的認為一個只讀的站點對反射型xss是免疫的。xss會引起一系列的問題,嚴重程度從噪音幹擾到完全的帳戶危害。大多數嚴重的xss攻擊涉及用戶回話cookie洩露,允許攻擊者劫 用戶的會話從而接管帳戶。其他破壞性攻擊包括終端用戶文件洩露、特洛伊木馬安裝、重定向用戶到其他頁面或站點、或修改頁面內容。
  • 跨站腳本攻擊:如何防止XSS漏洞?
    美國國土安全部(Department of Homeland Security)目前向聯邦機構發出警告,要警惕一種特別具有攻擊性的網絡攻擊形式——跨站腳本攻擊(XSS)。美國國土安全部警告說:「這種攻擊允許攻擊者冒充受害者進入網站,這些漏洞可能會允許攻擊者不僅竊取cookie,還可以記錄鍵盤敲擊、捕捉屏幕截圖、發現和收集網絡信息,以及遠程訪問和控制受害者的設備。」
  • ​PHP 跨站腳本漏洞解析
    這是 OWASP 對跨站腳本漏洞(Cross-Site Scripting)的描述。大意為「當惡意腳本被注入到原本安全並可信任的網站中,攻擊者使用Web應用程式將惡意代碼發送給其他用戶時,便會觸發跨站腳本漏洞」。
  • 老司機帶你學安全測試:反射式XSS(跨站)漏洞示例
    1、反射式XSS(Cross Site Scripting 跨站)漏洞:客戶端請求到伺服器端,伺服器沒有驗證請求中的信息
  • Web漏洞之XSS
    該漏洞發生在用戶端,是指惡意攻擊者往Web站點裡插入惡意腳本代碼,當用戶瀏覽該網站時,嵌入其裡面的腳本代碼會被執行,從而達到惡意用戶的特殊目的。根據是否寫入數據看來分類主要有反射性和存儲型兩大類。區別:存儲型XSS的惡意代碼存在資料庫裡,反射型XSS的惡意代碼存在URL裡。
  • 遭遇 XSS 跨站腳本攻擊?穩住,這些方法可保你渡劫 | 附代碼、圖解
    而當我們輸入JS腳本代碼時,它會彈出相應的窗口,這就是一個XSS注入點。http://localhost/xss/xss-01.php?也稱為非持久型、參數型跨站腳本。這種類型的跨站腳本是最常見,也是使用最廣泛的一種,主要用於惡意腳本附加到URL地址的參數中。一般出現在輸入框、URL參數處。持久型跨站腳本也可以說是存儲型跨站腳本,比反射型XSS更具威脅性,並且可能影響到Web伺服器自身安全。一般出現在網站的留言、評論、博客日誌等於用戶交互處。
  • XSS跨站腳本攻擊及分類
    XSS (Cross Site Scripting),即跨站腳本攻擊,是一種常見於 Web 應用中的計算機安全漏洞。
  • 谷歌翻譯服務(Google Translator)的跨站漏洞
    在這篇文章裡,越南籍作者通過發現了谷歌翻譯服務(Google Translator)越翻英界面中存在的跨站漏洞(XSS
  • XSS 與 CSRF 兩種跨站攻擊
    但最近又聽說了另一種跨站攻擊 CSRF ,於是找了些資料了解了一下,並與 XSS 放在一起做個比較。XSS:腳本中的不速之客XSS 全稱「跨站腳本」,是注入攻擊的一種。其特點是不對伺服器端造成任何傷害,而是通過一些正常的站內交互途徑,例如發布評論,提交含有 JavaScript 的內容文本。
  • 跨站腳本:反射式
    Reflected五、規則概述:攻擊者往Web頁面裡插入惡意腳本代碼,當用戶瀏覽該頁面時,嵌入其中的腳本代碼會被執行,並將結果反饋給用戶,從而達到攻擊者的特殊目的。反射型XSS是指客戶端發送帶有惡意代碼的請求信息到伺服器端,伺服器端沒有驗證請求中的信息,又推到客戶端,形成反射式跨站請求風險。例1:test.jsp從HTTP請求中讀取員工的id並顯示,代碼如下:<% String id = request.getParameter("id"); %>...
  • (XSS跨站腳本攻擊)
    1.XSS介紹跨站腳本攻擊,英⽂全稱是Cross Site Scripting,為了和前端編程語
  • Web漏洞 | XSS(跨站攻擊腳本)詳解
    如下圖該連結的為:http://127.0.0.1/vulnerabilities/xss_r/?name=<script>alert(/xss/)</script>那麼,我們要怎麼構造惡意代碼來誘使用戶點擊並且用戶點擊後不會發現點擊了惡意連結呢?
  • 【入門教程】常見的Web漏洞--XSS
    此漏洞也是網站存在相當多的漏洞,僅次於SQL注入,攻擊者可以使用XSS來繞過訪問控制,如同源策略。利用XSS可以竊取帳號,網頁掛馬,發動拒絕服務攻擊,發送垃圾郵件等等。插入圖像(如--imx image.png)--fla=FLASH 用XSS插入Flash視頻(--fla movie.swf)--xst=XST 跨站點跟蹤(如--xst http(s)://host.com) -g,GETDATA 使用GET請求發送payload(如-
  • Web 安全 - 跨站腳本攻擊 XSS 三種類型及防禦措施
    XSS(Cross Site Scripting)是一種代碼注入方式的跨站腳本攻擊,為了與層疊樣式表 CSS 區分,而簡稱 XSS。存儲型 XSS 攻擊存儲型 XSS 攻擊是將惡意代碼存儲到網站伺服器,如果出現漏洞傳播速度、影響範圍較為廣泛,常見於社區、論壇等帶有內容保存的系統中。