WEB安全--XSS--DOM破壞

一、前言

繼XSS基礎篇后,我們知道了三種類型的XSS,這篇文章主要針對DOM型XSS的原理進行深入解析。

二、DOM型XSS原理

2.1、什么是DOM

以一個形象的比喻:

網頁就像是一座房子,而 **DOM** 就是這座房子的“藍圖”或者“結構圖”。房子的每個部分(如門、窗、墻壁)都代表網頁上的某個元素,而 **DOM** 就是用來描述這些元素的工具,使得你可以清楚地知道哪里是門、哪里是窗,甚至改變它們的位置或大小。

所以通過DOM可以得到或者修改網頁標簽的屬性。

舉例:

<h1 id="header">Hello World</h1>
<button id="changeHeader">Change Header</button>
<script>// 獲取 h1 標簽和按鈕let header = document.getElementById('header');let changeHeaderButton = document.getElementById('changeHeader');// 給按鈕添加點擊事件changeHeaderButton.addEventListener('click', function() {// 修改 h1 標簽的文本內容header.innerText = 'New Header Text';});
</script>//點擊按鈕時,<h1> 標簽的文本內容會從 "Hello World" 改為 "New Header Text"。

2.2、DOM破壞

DOM 破壞(DOM Clobbering)是指在 HTML 中,某些屬性、元素的 ID 或名稱等與瀏覽器自帶的 DOM 對象(如 JavaScript 中的全局變量)發生沖突,導致原本應該是 DOM 元素的引用被覆蓋或者破壞的現象。

也就是說,我們插入到瀏覽器的數據被接受并覆蓋網頁標簽中本來就有的信息,那這就會造成DOM破壞。

舉例:

img

這個例子可以看出原本是沒有cookie這個屬性的,然后我創建了一個div,再創建一個img,里面包含一個name屬性,值為cookie。

接著把img放入div,把div放入document.body下,再調用document.cookie發現獲取了這個img標簽,這就說明document.cookie已經被我們用img標簽給覆蓋了。

這個例子可以看出原本是沒有cookie這個屬性的,然后我創建了一個div,再創建一個img,里面包含一個name屬性,值為cookie。

接著把img放入div,把div放入document.body下,再調用document.cookie發現獲取了這個img標簽,這就說明document.cookie已經被我們用img標簽給覆蓋了。

實例(xss game第八關):

<h2 id="boomer">Ok, Boomer.</h2>
<script>boomer.innerHTML = DOMPurify.sanitize(new URL(location).
searchParams.get('boomer') || "Ok, Boomer")
//這里直接用DOMPurify框架過濾,那想直接繞過這個過濾顯然不太可能setTimeout(ok, 2000)//此時我們試著從這個位置入手
</script>

setTimeout可以接受函數或字符串作為參數并執行它。

在這里,ok變量被執行,但它不存在;這里的JS代碼是沒有任何關于ok參數的定義的,所以我們可以使用DOM破壞,通過DOM破壞,將HTML元素注入到DOM中。

構造ok參數,因為setTimeout函數執行字符串,所以需要用到<a>或者<textarea>標簽,因為這兩個標簽自帶ToString方法。

payload:

?? ?<a id=ok href="tel:alert(1)">a

? ? ? ??
當我創建這個<a>標簽時,瀏覽器會自動在javascript中創建一個ok變量,當setTimeout(ok, 2000)運行時通過id=ok找到這個標簽時<a>標簽會調用ToString()方法,返回href中的值“tel:alert(1)”到setTimeout()中,最后setTimeout()將執行其中的語句。
這里需要注意的是我們要用DOMPurify框架白名單中的tel來替換javascript。

2.3、多層DOM破壞:

繼XSS-GAME的DOM破壞之后,思考如果需要覆蓋的數據是雙層結構(x.y)該怎么辦呢?

方法一、通過自定義方法寫入雙層字符 HTMLCOLLECTION:

 <div id="x"><a id="x" name="y" href="aaaa:1111"></a></div>
</body>
<script>alert(x.y);
</script>#這里實際上是創建了一個htmlcollection集合,然后通過collection[name]的方式來調用。

方法二、使用篩選出支持雙選的標簽:

form-button
form-fieldset
form-image
form-img
form-input
form-object
form-output
form-select
form-textarea

構建雙層:

<from id="x"><output id="y">雙層級</output><script>alert(x.y.value);
</script>

構建三層:

<form id="x" name="y"><output id="z">三層級</output></form>
<form id="x"></form><script>alert(x.y.z.value);
</script>

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

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

相關文章

Linux系統遠程操作和程序編譯

Linux系統遠程操作和程序編譯 了解和熟悉Linux系統的遠程終端登錄、遠程圖形桌面訪問、 X圖形窗口訪問和FTP文件傳輸操作 網絡設置和用戶創建&#xff1a; 在虛擬機Ubuntu系統中&#xff0c;將網絡連接設置為“橋接模式”&#xff0c;并配置好IP和網關。確保其他Windows 10系統…

linux開發環境

1.虛擬機環境搭建 在 Ubuntu 系統中&#xff0c;打開&#xff08;如圖中顯示的窗口 &#xff09;常見快捷鍵有&#xff1a; Ctrl Alt T&#xff1a;這是最常用的打開終端的快捷鍵組合 &#xff0c;按下后會快速彈出一個新的終端窗口。 在 VMware 虛擬機環境中&#xff0c;若…

藍橋·20264-祝福語--找連續字串的長度

#include <iostream> using namespace std; int main() {// 請在此輸入您的代碼//最小字典序&#xff0c;一定是全a&#xff0c;找s的最長字串a,結果就是該字串長度加1&#xff08;t不能是s的子串&#xff09;//所以這道題就變成了&#xff0c;找s中字串a出現的長度strin…

7.第二階段x64游戲實戰-分析人物屬性

免責聲明&#xff1a;內容僅供學習參考&#xff0c;請合法利用知識&#xff0c;禁止進行違法犯罪活動&#xff01; 本次游戲沒法給 內容參考于&#xff1a;微塵網絡安全 上一個內容&#xff1a;6.第二階段x64游戲實戰-分析人物狀態 首先打開人物面板&#xff0c;查看人物的…

數組的常見算法一

注: 本文來自尚硅谷-宋紅康僅用來學習備份 6.1 數值型數組特征值統計 這里的特征值涉及到&#xff1a;平均值、最大值、最小值、總和等 **舉例1&#xff1a;**數組統計&#xff1a;求總和、均值 public class TestArrayElementSum {public static void main(String[] args)…

汽車電子筆記之:基于Tasking編譯器怎么制作庫文件并將庫文件集成進工程釋放

目錄 1、概述 2、庫工程創建、使用步驟 2.1、選擇對應的MCU型號及空工程 2.2、選擇需要封裝的代碼 2.3、將需要封裝的代碼復制到庫工程 2.4、整理庫工程工程屬性 2.5、預留不生成庫的.c源文件 2.6、編譯生成.a文件 2.7、將.a集成進工程 2.7.1、創建釋放給客戶的工程 …

[ctfshow web入門] web29

前置知識 eval: 把字符串按照 PHP 代碼來執行&#xff0c;例如eval(“echo 1;”);這個函數擁有回顯 system&#xff1a;使php程序執行系統命令&#xff0c;例如&#xff0c;system(“ls”);就是查看當前目錄&#xff0c;這個擁有回顯 preg_match&#xff1a;查找字符串是否匹配…

7-8 超速判斷

模擬交通警察的雷達測速儀。輸入汽車速度&#xff0c;如果速度超出60 mph&#xff0c;則顯示“Speeding”&#xff0c;否則顯示“OK”。 輸入格式&#xff1a; 輸入在一行中給出1個不超過500的非負整數&#xff0c;即雷達測到的車速。 輸出格式&#xff1a; 在一行中輸出測…

【GESP】C++二級練習 luogu-B3721 [語言月賽202303] Stone Gambling S

GESP二級練習&#xff0c;多層循環分支練習&#xff0c;難度★?☆☆☆。 題目題解詳見&#xff1a;https://www.coderli.com/gesp-2-luogu-b3721/ 【GESP】C二級練習 luogu-B3721 [語言月賽202303] Stone Gambling S | OneCoderGESP二級練習&#xff0c;多層循環分支練習&am…

深入理解C++面向對象特性之一 多態

歡迎來到干貨小倉庫&#xff0c;堪比沙漠!!! 從“Hello World”到改變世界&#xff0c;中間隔著千萬次再試一次. 1.多態的概念 多態的概念&#xff1a;通俗來說&#xff0c;就是多種形態&#xff0c; 具體點就是去完成某個行為&#xff0c;當不同的對象去完成時會 產生出不同的…

藍橋備賽指南(14):樹的直徑與重心

樹的直徑 什么是樹的直徑&#xff1f;樹的直徑是樹上最長的一條鏈&#xff0c;當然這條鏈并不唯一&#xff0c;所以一棵樹可能有多條直徑。直徑由兩個頂點u、v來決定&#xff0c;若由一條直徑&#xff08;u,v)&#xff0c;則滿足一下性質&#xff1a; 1&#xff09;u、v的度數…

AIDD-人工智能藥物設計-網絡藥理學-多組學與網絡藥理學分析揭示龜齡集治療少精癥的機制

IF6.7|多組學與網絡藥理學分析揭示龜齡集治療少精癥的機制 2024年10月28日&#xff0c;海軍軍醫大學張衛東教授團隊在Phytomedicine&#xff08;IF6.7&#xff09;上發表了題為“Multi-omics and network pharmacology approaches reveal Gui-Ling-Ji alleviates oligoastheno…

搜狗拼音輸入法純凈優化版:去廣告,更流暢輸入體驗15.2.0.1758

前言 搜狗輸入法電腦版無疑是裝機必備的神器。它打字精準&#xff0c;詞庫豐富全面&#xff0c;功能強大&#xff0c;極大地提升了輸入效率。最新版的搜狗拼音輸入法更是借助AI技術&#xff0c;讓打字變得既準確又高效。而搜狗輸入法的去廣告精簡優化版&#xff0c;通過移除廣…

Franka雙臂機器人:多領域革新與核心技術深度解析

雙臂Franka機器人以類人化操作能力、毫秒級力控響應及智能協同算法為核心&#xff0c;持續推動工業自動化、醫療輔助與農業生產的革新進程。本文深度解析其技術突破與跨行業實踐案例。 Franka雙臂優勢&#xff1a; 高靈活度&#xff1a;7自由度設計&#xff0c;模擬人類手臂運…

Django視圖詳解

前言 歡迎來到我的博客 個人主頁:北嶺敲鍵盤的荒漠貓-CSDN博客 一、Django視圖是什么&#xff1f; 視圖&#xff08;View&#xff09; 是Django處理HTTP請求的核心組件。它接收一個HttpRequest對象&#xff0c;處理業務邏輯&#xff0c;并返回一個HttpResponse對象&#xff08…

【工具變量】上市公安企業社會信任數據集(2004-2023年)

企業社會信任是衡量企業與社會之間信任度的重要指標&#xff0c;反映了企業在公眾眼中的信譽和可靠性。社會信任對企業的持續發展和品牌形象有著至關重要的影響。本分享數據參考張維迎&#xff08;2002年&#xff09;的做法&#xff0c;采用中國企業家調查系統的地區信任調查數…

Python爬取數據(二)

一.example2包下的 1.re模塊的compile函數使用 import repatternre.compile(r\d) print(pattern) 2.match的方法使用 import re patternre.compile(r\d) # m1pattern.match(one123twothree345four) #參數2&#xff1a;指定起始位置(包含),參數3&#xff1a;終止位置(包含),…

spring之Bean的循環依賴問題、反射機制手寫Spring框架、Spring IoC注解式開發

一、Bean的循環依賴問題 1.什么是Bean的循環依賴 A對象中有B屬性。B對象中有A屬性。這就是循環依賴。我依賴你&#xff0c;你也依賴我。 比如&#xff1a;丈夫類Husband&#xff0c;妻子類Wife。Husband中有Wife的引用。Wife中有Husband的引用。 public class Husband {priv…

狀態機的基本使用

狀態機 1. 什么是狀態機 1.1 場景 在業務代碼中對一些業務狀態進行硬編碼&#xff0c;如果有一天更改了業務邏輯就需要更改代碼&#xff0c;不方便進行系統擴展和維護。 if (status 狀態1) {// TODO } else if(status 狀態2) {// TODO } ...另外對訂單狀態的管理是散落在…

22 | 如何繼續提升 Go 開發技術?

提示&#xff1a; 所有體系課見專欄&#xff1a;Go 項目開發極速入門實戰課&#xff1b;歡迎加入 云原生 AI 實戰營 星球&#xff0c;12 高質量體系課、20 高質量實戰項目助你在 AI 時代建立技術競爭力&#xff08;聚焦于 Go、云原生、AI Infra&#xff09;。 「Go 項目開發極速…