PortSwigger靶場之DOM XSS in document.write sink using source location.search通關秘籍

一、靶場描述

這個靶場在搜索查詢的跟蹤功能中,包含一個基于DOM的跨站腳本(DOM-based XSS)漏洞。

該漏洞的產生是因為網站使用了一個名為 document.write 的 JavaScript 函數,這個函數會把數據直接寫入到頁面中。而寫入的數據來源于 location.search,也就是網站 URL 中問號 (?) 之后的部分,這部分內容是你可以完全控制的。

衍生一下,標簽<img>是在在網頁中插入圖片的意思,主要屬性包括:

  • src:圖片的地址,必填,比如:src="example.jpg"
  • alt:圖片無法顯示時的替代文本
  • width、height:設置圖片大小
<img src="logo.png" alt="網站LOGO" width="100" height="50">

其中:
<img src=xxx οnerrοr=" ">:當src="xxx" 是不存在或無法加載的資源時,瀏覽器會觸發 onerror 事件,可以利用圖片加載失敗觸發 JavaScript 執行

<img src=xxx οnlοad=" ">:當src="xxx" 是有效且能正常加載的資源時,瀏覽器會觸發 onload 事件,可以利用圖片加載成功觸發 JavaScript 執行

我們訪問/resources/images/tracker.gif可以訪問

所以本靶場可以利用圖片加載成功觸發 JavaScript 執行通關,但是主要使用的是下面三、攻擊思路,這種也是一種辦法。

" onload="alert(1)"

當你的輸入被拼接到原始代碼中后,最終生成的HTML字符串變成了:

<img src="/resources/images/tracker.gif?searchTerms="" onload="alert(1)">

二、漏洞原理詳解

1、基于DOM的跨站腳本 (DOM-based XSS):

  • 這是一種特殊的XSS攻擊。與存儲型和反射型XSS不同,DOM型XSS的攻擊載荷(payload)不一定會發送到服務器。

  • 整個攻擊過程發生在用戶的瀏覽器端。具體來說,是頁面的客戶端JavaScript代碼,在處理數據時不夠安全,導致了漏洞。

  • 在這個靶場中,流程是這樣的:

    a. 瀏覽器加載頁面的合法JavaScript代碼。

    b. 這段代碼從URL中讀取數據 (通過 location.search)。

    c. 代碼沒有對讀取到的數據進行安全處理(過濾或編碼),就直接使用 document.write 將其寫入到頁面的文檔對象模型(DOM)中。

    d. 如果URL中包含了惡意腳本,這個腳本就會被寫入頁面并執行。

2、危險函數 (Sink):

document.write這是一個非常經典的導致DOM-XSS的函數。它會把傳入的字符串當作HTML來解析并插入到文檔流中。如果字符串里包含 <script> 標簽,瀏覽器就會執行它。

3、數據來源 (Source):

location.search這是指URL中從 ? 開始的所有內容(查詢字符串)。例如,在 http://example.com/search?query=apple 這個URL中, location.search 的值就是 ?query=apple。攻擊者可以隨意構造這個部分。

4、解決目標

要成功完成這個靶場,你需要構造一個特殊的URL。當這個URL被訪問時,它能夠觸發DOM-XSS漏洞,并成功執行 alert 函數(即在瀏覽器中彈出一個警告框)。

三、攻擊思路:

在輸入框隨便輸入字符串,發現我們的輸入被拼接到url,然后函數?document.write()?將從url中獲取的search參數寫入頁面中

這是一段 JavaScript 代碼,它的主要功能是跟蹤用戶在網站上的搜索行為,但它包含一個嚴重的安全漏洞。

1、代碼詳解

<script>// 定義一個名為 trackSearch 的函數,它接收一個參數叫 queryfunction trackSearch(query) {// 使用 document.write 向頁面寫入一段 HTML 代碼document.write(// 這段 HTML 是一個 <img> 圖像標簽// 圖像的源(src)指向一個跟蹤像素(tracker.gif)// 關鍵在于,它把用戶輸入的搜索詞(query)作為參數拼接到了圖像的 URL 后面'<img src="/resources/images/tracker.gif?searchTerms=' + query + '">');}// 從當前頁面的 URL 中獲取名為 'search' 的參數值// 例如,如果 URL 是 https://example.com/?search=1// 那么 query 變量的值就是 '1'var query = (new URLSearchParams(window.location.search)).get('search');// 判斷 query 是否存在 (即 URL 中是否有 'search' 參數)if (query) {// 如果存在,就調用上面定義的 trackSearch 函數,并將獲取到的搜索詞傳進去trackSearch(query);}
</script>

2、功能總結

這段代碼的目的是:

  1. 從當前頁面的 URL 地址欄里,尋找一個名為 search 的參數 (例如: .../?search=關鍵詞)。

  2. 如果找到了這個參數,就把它的值(也就是用戶搜索的關鍵詞)取出來。

  3. 然后,它會動態地在頁面上創建一個看不見的圖像(一個1x1像素的跟蹤GIF)。這個圖像的 URL 地址會把用戶的搜索關鍵詞作為 searchTerms 參數附加上去。

  4. 當瀏覽器嘗試加載這個圖像時,就會向服務器發送一個請求,服務器通過分析這個請求日志,就能知道用戶剛剛搜索了什么關鍵詞,從而實現搜索行為跟蹤。

3、嚴重的安全問題 (DOM-based XSS)

這段代碼最關鍵的問題在于它使用了 document.write() 函數來處理從URL中獲取的用戶輸入,并且沒有任何安全過濾

一個攻擊者可以構造一個惡意的 URL,如下所示:

https://[網站地址]/?search="><script>alert('XSS')</script>

當用戶訪問這個 URL 時,代碼的執行流程會變成這樣:

  1. query 變量獲取到的值是:"><script>alert('XSS')</script>

  2. trackSearch 函數被調用,document.write() 執行的內容就變成了:

    <img src="/resources/images/tracker.gif?searchTerms=""><script>alert('XSS')</script>">
    
  3. 瀏覽器在解析這段 HTML 時,會先閉合 <img> 標簽,然后遇到 <script> 標簽,就會立即執行里面的 JavaScript 代碼,導致彈出一個警告框。

結論: 這段代碼實現了一個簡單的搜索跟蹤功能,但由于直接將 URL 參數寫入頁面,導致了嚴重的基于DOM的跨站腳本(DOM-XSS)漏洞,允許攻擊者在網站上執行任意腳本。

你需要將一個惡意的JavaScript載荷(payload)放在URL的查詢字符串中。當頁面上的腳本讀取這個查詢字符串并用 document.write 將其寫入頁面時,你的腳本就會被執行。

一個典型的攻擊URL會類似這樣:

https://......./?search=<script>alert('XSS')</script>

至此,成功通關。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/95323.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/95323.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/95323.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深度學習篇---Pytorch常用優化器

優化器介紹&#xff1a;在 PyTorch 中&#xff0c;優化器&#xff08;Optimizer&#xff09;的作用是根據模型參數的梯度來更新參數&#xff0c;以最小化損失函數。下面用通俗易懂的方式介紹幾種常用的優化器&#xff1a;1. SGD&#xff08;隨機梯度下降&#xff09;最基礎的優…

0903 C++類的運算符重載、靜態成員與繼承

Part 1.梳理思維導圖一.運算符重載1.運算符重載的作用使原本只能對基本數據類型生效的運算符&#xff0c;在重載后&#xff0c;滿足可以對構造類型數據生效。2.關系運算符重載a.關系運算符種類> > < < !b.分析參數表達式…

Cloudflare安全規則實用指南:從路徑攔截到IP限制的10個經典范例

前言&#xff1a;在Cloudflare的安全防護體系中&#xff0c;自定義規則是抵御特定威脅的“精準武器”。除了基礎的路徑攔截&#xff0c;日常運維中還有許多高頻場景需要針對性配置。本文將通過10個實用范例&#xff0c;帶你掌握Cloudflare規則的靈活用法&#xff0c;覆蓋路徑防…

數據結構(時空復雜度)

目錄 一、算法復雜度 二、時間復雜度 1.不同時間度代碼舉例 三、空間復雜度 一、算法復雜度 算法復雜度&#xff08;評估算法優劣一個重要指標&#xff09;分為時間復雜度和空間復雜度。 時間復雜度是指執行算法所需要的計算工作量&#xff0c;而空間復雜度是指執行這個…

ESXI8多網卡鏈路聚合

1. 背景 測試服務器只有千兆網卡&#xff0c;增加上行帶寬&#xff0c;使用兩塊網卡做鏈路聚合。 2. 環境 VM ESXI 8.0 華為交換機 S5735S 3. 交換機配置 負載均衡方式采用了src-dst-ipTrunk模式采用了手工負載分擔&#xff08;測試了靜態LACP&#xff0c;未成功&#xff09;4.…

從“人工驅動”到“AI協同”:良策金寶AI如何助力設計院數智化躍遷?

在“雙碳”目標驅動下&#xff0c;電力工程項目的數量與復雜度持續攀升。設計院面臨“項目多、周期短、人力緊”的三重壓力&#xff0c;傳統的“人工驅動”模式已難以為繼。良策金寶AI&#xff0c;正是這場變革的核心引擎。它以AI驅動數智化服務&#xff0c;為工程設計企業提供…

vue3 vite 自適應方案

兩種方案&#xff1a; 1 使用 postcss-pxtorem插件 npm install postcss-pxtorem autoprefixer --save-dev # 或 yarn add postcss-pxtorem autoprefixer -D 2、postcss-px-to-viewport npm install postcss-px-to-viewport --save-dev 或 yarn add postcss-px-to-viewport -D …

華為研發投資與管理實踐(IPD)讀書筆記

在全球科技產業競爭日趨激烈的背景下&#xff0c;企業研發管理早已告別 “依賴個體經驗、靠運氣突破” 的粗放時代&#xff0c;如何將研發創新從 “偶然成功” 轉化為 “可復制、可持續的必然成果”&#xff0c;成為所有追求長期競爭力的企業必須破解的命題。華為&#xff0c;作…

【LeetCode_283】移動零

刷爆LeetCode系列LeetCode第283題&#xff1a;github地址前言題目描述題目與思路分析代碼實現算法代碼優化LeetCode第283題&#xff1a; github地址 有夢想的電信狗 前言 本文用C實現 LeetCode 第283題 題目描述 題目鏈接&#xff1a;https://leetcode.cn/problems/move-z…

一文弄懂C/C++不定參數底層原理

目錄 一、C語言的可變參數&#xff1a;基于棧幀的手動讀取 &#xff08;1&#xff09;C函數調用的棧幀結構 &#xff08;2&#xff09;C 可變參數的 4 個核心宏&#xff1a;如何 “手動讀棧” &#xff08;3&#xff09;實戰代碼&#xff1a;用 C 可變參數實現求和函數 &a…

【Android】【設計模式】抽象工廠模式改造彈窗組件必知必會

寫一個 Android 版本的抽象工廠彈窗 Manager 管理器&#xff0c;使用 DialogFragment 實現&#xff0c;這樣能更貼近真實的開發場景。結構設計 抽象產品&#xff1a;BaseDialogFragment&#xff08;繼承 DialogFragment&#xff09;具體產品&#xff1a;LoginDialogFragment, …

Win64OpenSSL-3_5_2.exe【安裝步驟】

官網下載 注意&#xff1a;科學上網&#xff0c;可以加速下載速度&#xff01; Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions 下載后得到&#xff1a;Win64OpenSSL-3_5_2.exe 雙擊安裝 修改安裝路徑&#xff1a; 默認就選擇第一個。 重要提醒?…

華為云云原生架構賦能:大騰智能加速業務創新步伐

巨大的渦輪、細小的螺絲&#xff0c;一臺航天飛機發動機的三維模型呈現在屏幕上&#xff0c;遠程同事同步協作&#xff0c;一臺復雜設備在工程師高效的協同中不斷完善。深圳市大騰信息技術有限公司&#xff0c;正是這場工業變革的推動者之一。大騰智能以“云原生工業”的融合為…

基于https+域名的Frp內網穿透教程(Linux+Nginx反向代理)

系列文章目錄 基于http公網ip的Frp內網穿透教程(win server) 基于http域名的Frp內網穿透教程(win serverIIS反向代理) 基于http公網ip的Frp內網穿透教程(Linux) 基于https域名的Frp內網穿透教程(LinuxNginx反向代理) 目錄 系列文章目錄 前言 一、Frp是什么&#xff1f; 1. …

裸機程序(1)

一、裸機裸機是一個在計算機硬件與軟件開發領域高頻出現的概念&#xff0c;核心定義是 “未安裝操作系統&#xff08;OS&#xff09;&#xff0c;僅包含硬件本身&#xff08;或僅運行最底層硬件驅動 / 控制程序&#xff09;的設備”。在電腦中&#xff0c;裸機會映射代碼到cpu&…

95%企業AI失敗?揭秘LangGraph+OceanBase融合數據層如何破局!?

本文較長&#xff0c;建議點贊收藏&#xff0c;以免遺失。更多AI大模型應用開發學習視頻及資料&#xff0c;盡在聚客AI學院。不知道你們有沒有遇到過&#xff0c;在我們一些實際落地的AI項目中&#xff0c;雖然前期“Demo 很驚艷&#xff0c;但上線后卻無人問津”。你們有沒有想…

樹莓集團產教融合:數字學院踐行職業教育“實體化運營”要求

在職業教育改革不斷深化的背景下&#xff0c;“實體化運營” 成為推動職業教育高質量發展的重要方向。樹莓集團積極響應這一要求&#xff0c;以產教融合為核心&#xff0c;打造數字學院&#xff0c;切實踐行職業教育 “實體化運營”&#xff0c;為培養高素質數字領域專業人才探…

ELK 統一日志分析系統部署與實踐指南(上)

#作者&#xff1a;張桐瑞 文章目錄1 ELK 技術棧概述1.1ELK 核心組件詳解1.2 ELK 工作流程2 ELK部署2.1 環境描述2.1.7 配置es集群下篇&#xff1a;《ELK 統一日志分析系統部署與實踐指南&#xff08;下&#xff09;》 鏈接: [https://blog.csdn.net/qq_40477248/article/detail…

上位機知識篇---poweshellcmd

要理解 PowerShell 和 CMD 的區別&#xff0c;我們可以先打個通俗的比方&#xff1a;CMD 像老式功能機&#xff0c;只能干打電話、發短信這些 “基礎活”&#xff1b;而 PowerShell 像智能手機&#xff0c;不僅能做基礎操作&#xff0c;還能裝 APP、玩復雜功能&#xff0c;甚至…

利用 Python 繪制環形熱力圖

暑假伊始&#xff0c;Coldrain 參加了學校舉辦的數模集訓&#xff0c;集訓的過程中&#xff0c;遇到了需要展示 59 個特征與 15 個指標之間的相關性的情況&#xff0c;在常用的圖表不大合適的情況下&#xff0c;學到了一些厲害的圖表&#xff0c;但是似乎千篇一律都是用 R 語言…