pikachu之XSS

XSS(跨站腳本)概述

Cross-Site Scripting 簡稱為“CSS”,為避免與前端疊成樣式表的縮寫"CSS"沖突,故又稱XSS。一般XSS可以分為如下幾種常見類型:
1.反射性XSS;
2.存儲型XSS;
3.DOM型XSS;


XSS漏洞一直被評估為web漏洞中危害較大的漏洞,在OWASP TOP10的排名中一直屬于前三的江湖地位。
XSS是一種發生在前端瀏覽器端的漏洞,所以其危害的對象也是前端用戶。
形成XSS漏洞的主要原因是程序對輸入和輸出沒有做合適的處理,導致“精心構造”的字符輸出在前端時被瀏覽器當作有效代碼解析執行從而產生危害。
因此在XSS漏洞的防范上,一般會采用“對輸入進行過濾”和“輸出進行轉義”的方式進行處理:
輸入過濾:對輸入進行過濾,不允許可能導致XSS攻擊的字符輸入;
輸出轉義:根據輸出點的位置對輸出到前端的內容進行適當轉義;

pikachu之XSS

反射型xss(get)

問我喜歡的NBA球星,那必然牢大,然后直接出來頁面。

嘗試隨便輸入123,我們發現輸入的內容全都會出現在頁面上。

想直接構造<script>alert(1)</script>,但是發現一個問題,這個框框太小了不夠用...于是我們打開控制臺,找到框框的位置,將框框的20改為100,如下:

這次就能輸入了,彈框成功。

或者可以在url的參數進行操作,令參數=<script>alert(1)</script>,彈框即可

反射性xss(post)

點擊提示直接登錄,再次填入kobe。

這道題跟上題一樣,填入paylaod直接彈框,不再多說。

存儲型xss

依舊輸入<script>alert(1)</script>

反復刷新頁面,依然彈窗,說明存儲型xss是永久型的。

DOM型xss

這道題我們隨便輸入一個,發現下面生成了超鏈接,但是是一個空超鏈接,無論我們輸入什么都是這幾個字。

接下來輸入百度網址,點擊超鏈接發現可以跳轉百度。

那么猜測結構可能是<a href="我們的輸入">what do you see?</a>

這樣的話輸入" >45查看有沒有閉合成這樣:

<a src="" >45">what do you see?</a>假如成功閉合,那么超鏈接的文本應該變成

45">what do you see?

可惜沒有。

嘗試將雙引號換成單引號,成功。

輸入' οnclick=alert(1)>45

按理來說結構變成這樣,應該點擊一下就會彈框。

<a src='' onlick=alert(1)>45'>what do you see?</a>

成功。

DOM型xss-x

這里隨便輸入,然后點擊請說出你的傷心往事,然后下面又出現了一個超鏈接。

點擊超鏈接,然后又出現了一個超鏈接,并且url參數位置出現了一個#符號。

試著將輸入改為http://www.baidu.com,然后點擊請輸入你的傷心往事,發現url參數增加了我們輸入的鏈接。

點擊下面超鏈接,然后點擊出現的另外一個就讓往事都隨風,都隨風吧超鏈接,成功跳轉百度。

構造paylaod

' οnclick=alert(1)>

最終點擊就讓往事都隨風,都隨風吧成功彈窗。

源代碼如下,這里其實就是我們輸入' οnclick=alert(1)>內容會出現在url參數位置,即text=' οnclick=alert(1)>#然后點擊請說出你的傷心往事,然后就會執行domxss()函數,這個函數中的

var str =window.location.search就是首先將url的參數從?到最后(或者#,但是不返回#)賦給str,也就是str=?text=' οnclick=alert(1)>,

然后這里var txss = decodeURIComponent(str.split("text=")[1]);,就是將str的內容按照text=進行分隔,然后存入數組。

如:[ "?", "' οnclick=alert(1)>" ],然后提取[1]位置也就是' οnclick=alert(1)>,并且賦值給txss,使用decodeURIComponent()對經過URL編碼的字符串進行解碼

然后將txss的所有+號換成空格,隨后賦值給xss。

然后是最關鍵的

document.getElementById("dom").innerHTML = "<a href='"+xss+"'>就讓往事都隨風,都隨風吧</a>";

它會將"<a href='"+xss+"'>就讓往事都隨風,都隨風吧</a>";賦值給我們的名為dom屬性的內容,而xss就是' οnclick=alert(1)>,所以就是將

"<a href='' οnclick=alert(1)>'>就讓往事都隨風,都隨風吧</a>";賦值給dom,而dom就是一個顯示內容的地方,也就是顯示出來'>就讓往事都隨風,都隨風吧這個鏈接,點擊就會彈窗。

window.location.search:這是瀏覽器提供的一個屬性,它返回當前頁面URL中從問號???開始到末尾(或到#錨點,不返回最后的#)的部分,也就是查詢字符串(Query String)。

示例:如果當前頁面的URL是?https://example.com/vulnerable-page?text=<script>alert('xss')</script>&other=123,那么?window.location.search?的值就是?"?text=<script>alert('xss')</script>&other=123"

document.getElementById("dom").innerHTML

  • document:代表整個HTML網頁文檔。

  • .getElementById("dom")獲取元素。這是一個方法,用于在?document?中查找一個?id?屬性為?"dom"?的HTML元素。

  • .innerHTML獲取或設置元素的HTML內容。這個屬性代表該元素內部的所有HTML代碼。

document.getElementById("dom").innerHTML = "<a href='"+xss+"'>就讓往事都隨風,都隨風吧</a>";

在頁面上找到一個ID為?dom?的元素,然后把它里面的所有內容替換成一個新的超鏈接。這個新鏈接的地址(href)來自于變量?xss?的值,鏈接顯示的文本是“就讓往事都隨風,都隨風吧”。

xss之盲打

這道題兩個框都輸入彈框js腳本,發現頁面底下就出現了謝謝參與。。。沒什么返回

點擊提示,進入后臺界面,然后登錄管理員賬號,登錄后臺的時候彈框了。這種就是xss盲打,攻擊者無法看到攻擊是否成功,當管理員訪問后臺的時候就會執行輸入的攻擊腳本。

xss之過濾

思路一

首先輸入<script>alert(1)</script>,發現返回>。

任意輸入幾個字符,發現會原樣返回,那么肯定我們輸入的payload某被過濾了。

輸入<sad>試一下,發現被過濾。

輸入<b>abc</b>,發現<b>起作用了,abc進行了加粗,那么到這里其實可以猜測出系統可能使用了白名單,經過測試,<s>,<img src="">,<a href=""></a>也可以存活。

既然<img src="">可以存活,那么我們可以構造一個payload試一試

payload:<img src="1" οnerrοr="alert(1)">? ##因為圖片的地址不正確導致報錯從而導致onerror事件觸發,其中onerror其實也可以替代成onclick事件,通過點擊圖片觸發彈框事件。

其實<a>超鏈接標簽也存活,那么也可以想到一個思路,構造payload

payload:<a href="#" οnclick=alert(1)>鏈接</a>

其中#是一個占位符,它的作用有:

1.讓這個?<a>?標簽保持一個合法鏈接的樣式和行為(鼠標變成小手,有鏈接顏色),但阻止它進行真正的頁面跳轉

2.當用戶點擊這個鏈接時,瀏覽器會將頁面滾動到頂部(因為?#?代表頁面頂部錨點)

可以使用<s>標簽,payload:

<s οnclick=alert(1)>123 ##點擊劃線123即可觸發。

思路二

我們輸入"<>'on/`() script img href src查看一下回顯,發現回顯這樣。

然后一個一個的進行測試,輸入",測試,輸入<>,測試...最終發現,如果單個輸入的話那么全部都可以輸出,這里就要大膽猜測一下了,為什么全部輸入的時候script后面的保存完好呢?當然肯定不是單獨過濾了script,因為直接輸入script的話可以輸出。反正肯定跟script有關。

嘗試輸入"script,'script,<script,>script,()script,/script...

接下來發現,除了<script以外,所有的組合全部都沒有被過濾。

嘗試輸入:<55bf58script,在<和script之間混合數據,最后發現無論混合多少數據或者不加入數據,都會被過濾,那么大膽猜測過濾了<.*script。

可以考慮大小寫繞過

payload:

<sCript>alert(1)</sCript>

<sCript>prompt(/xss/)</sCript> <sCript>prompt(`xss`)</sCript>?<sCript>prompt('xss')</sCript>

<sCript>confirm(1)</sCript>

這里既然不能使用script,就開始考慮別的如<s>,<img>標簽,這里不在贅述。

xss之htmlspecialchars

思路一

輸入<script>alert(1)</script>,發現竟然把我記錄了!當看到這種超鏈接那么背后肯定是有<a>標簽的。

查看頁面源代碼,發現<>都被編碼了,因此這關想閉合標簽是不行了。但是發現單引號沒有被html編碼,所有可以考慮閉合單引號。

payload:

#' οnclick='confirm(/xss/)'或者#' οnclick='confirm(/xss/)閉合單引號。

思路二

可以之間修改前端代碼嘗試,然后點擊超鏈接發現彈框。

htmlspecialchars()的作用就是把預定義的字符轉換為了HTML實體。預定義的字符如下:

& 成為 &amp;
" 成為 &quot;
' 成為 &#039;或&apos;
< 成為 &lt;
> 成為 &gt;

htmlspecialchars()函數默認是不對單引號進行轉義的,要想連單引號一起轉義,需要給函數傳入參數ENT_QUOTES,所以一般情況下如果遇到htmlspecialchars()函數的話,考慮一下單引號的閉合從而進行攻擊。

ENT_COMPAT:默認編碼,但是編碼雙引號不編碼單引號
ENT_QUOTES:編碼雙引號和單引號
ENT_NOQUOTES:不編碼任何引號

xss之href輸出

思路一

首先輸入百度網址,看一下怎么個事,然后點擊下面超鏈接跳轉到了百度頁面,這道題一想就可以知道在<a>標簽上面做手腳。

檢查代碼,然后在這里發現了我們輸入的網址。

更改為這樣

<a href="#" οnclick="confirm(`xss`)">...

點擊超鏈接發現彈框。

思路二

同樣也可以在輸入框構造,但是經過我的測試<,>,',"都被htmlspecialchars()函數編碼了,那么想要通過閉合的方法好像行不通了。

這里可以利用JavaScript協議。

payload:

javascript:alert(document.cookie)
javascript:prompt(document.cookie)
javascript:confirm(document.cookie)

輸入后點擊超鏈接發現提取了我的cookie。

解析:

javascript: 這是一個偽協議,表示接下來的內容是 JavaScript 代碼,可以在當前頁面的上下文中執行。
document.cookie: 這是一個 JavaScript 表達式,用于獲取當前頁面的 Cookie 值。Cookie 是一種用于在客戶端和服務器之間存儲數據的機制,它可以用于標識和跟蹤用戶會話狀態。xss之js輸出

xss之js輸出

輸入<script>alert(1)</script>,頁面沒變化,但是查看頁面源代碼我們發現了下面的一段javascript的if語句,其中ms的內容就是我們輸入的內容。

這里嘗試閉合,構造:';alert(1);//

完整閉合如下

通過//將';進行注釋
如果不注釋';的話,那么語句是$ms='';alert(1);';,在紅色部分語句可能會發生錯誤。

$ms='';alert(1);//'; 

因為alert(1)本身就在javascript腳本中,所以會直接執行。

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

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

相關文章

【Element Plus `el-select` 下拉菜單響應式定位問題深度解析】

Element Plus el-select 下拉菜單響應式定位問題深度解析 本文檔旨在深入剖析一個在響應式布局中常見的 UI 問題&#xff1a;如何確保一個靠近屏幕邊緣的 el-select 組件的下拉菜單&#xff0c;在任何屏幕尺寸下都能以預期的、優雅的方式顯示。 1. 需求背景 在一個大屏數據展示…

Qt 項目文件(.pro)中添加 UI 文件相關命令

在 Qt 的 .pro 項目文件中&#xff0c;處理 UI 文件&#xff08;.ui 文件&#xff09;通常需要以下配置&#xff1a; 基本 UI 文件配置 自動包含 UI 文件&#xff1a; qmake FORMS yourfile.ui \anotherfile.ui Qt 構建系統會自動使用 uic&#xff08;用戶界面編譯器&#xff…

展會回顧 | 聚焦醫療前沿 , 禮達先導在廣州醫博會展示類器官自動化培養技術

8月22-24日&#xff0c;廣州醫博會在廣交會展館B區圓滿落幕。此次盛會匯聚了來自全球醫療健康領域的頂尖專家學者、企業代表與合作伙伴。展會內容涵蓋基礎研發、臨床應用、前沿技術、產業轉化、醫療服務及金融支持&#xff0c;全景呈現醫療健康產業的創新生態&#xff0c;成為連…

華為eNSP防火墻綜合網絡結構訓練.docx

1.IP及VLAN規劃情況 設備 接口 IP vlan 備注 AR1 g0/0/0 1.1.1.2/28 PPPOE g0/0/1 3.3.3.1/30 g0/0/2 114.114.114.254/24 AR2 g0/0/0 2.2.2.2/28 DHCP g0/0/1 3.3.3.2/30 g0/0/2 100.100.100.254/24 FW1 g1/0/0 10.0.0.1/30 tr…

從 Oracle 到 TiDB,通過ETL工具,高效實現數據拉通

在當前企業數字化轉型的浪潮中&#xff0c;打破數據孤島、實現異構數據庫間的數據高效流轉已成為提升業務敏捷性與決策效率的關鍵。許多企業在要將 Oracle 數據庫中的海量數據準確地同步至TiDB 分布式數據庫時遇到了挑戰。這一過程不僅要求數據的絕對一致性&#xff0c;還對同步…

Effective c++ 35條款詳解

您問到了最關鍵的一點&#xff01;這正是策略模式的精妙之處——它通過組合&#xff08;composition&#xff09;而非繼承&#xff08;inheritance&#xff09;來實現多態效果。讓我詳細解釋這是如何工作的&#xff0c;以及它與傳統繼承多態的區別。&#x1f504; 策略模式如何…

51c自動駕駛~合集19

自己的原文哦~ https://blog.51cto.com/whaosoft/11793894 #DRAMA 首個基于Mamba的端到端運動規劃器 運動規劃是一項具有挑戰性的任務&#xff0c;在高度動態和復雜的環境中生成安全可行的軌跡&#xff0c;形成自動駕駛汽車的核心能力。在本文中&#xff0c;我…

大數據新視界 -- Hive 數據倉庫:架構深度剖析與核心組件詳解(上)(1 / 30)

&#x1f496;&#x1f496;&#x1f496;親愛的朋友們&#xff0c;熱烈歡迎你們來到 青云交的博客&#xff01;能與你們在此邂逅&#xff0c;我滿心歡喜&#xff0c;深感無比榮幸。在這個瞬息萬變的時代&#xff0c;我們每個人都在苦苦追尋一處能讓心靈安然棲息的港灣。而 我的…

軟考 系統架構設計師系列知識點之雜項集萃(137)

接前一篇文章:軟考 系統架構設計師系列知識點之雜項集萃(136) 第253題 在面向對象設計中,用于描述目標軟件與外部環境之間交互的類被稱為( ),它可以( )。 第1空 A. 實體類 B. 邊界類 C. 模型類 D. 控制類 正確答案:B。 第2空 A. 表示目標軟件系統中具有持久…

(附源碼)基于Spring Boot公務員考試信息管理系統設計與實現

摘 要 隨著公務員考試日益受到社會的廣泛關注&#xff0c;一個高效、便捷的公務員考試信息管理系統顯得尤為重要。本文設計并實現了一個基于前端Vue框架&#xff0c;后端采用Java與Spring Boot技術&#xff0c;數據庫選用MySQL&#xff0c;并部署在Tomcat服務器上的信息管理系統…

學習JavaScript的第一個簡單程序:Hello World

在JavaScript中&#xff0c;最簡單的程序是打印"Hello World"。可以通過以下方式實現&#xff1a; console.log("Hello World");將上述代碼保存為hello.js文件&#xff0c;通過Node.js運行或在瀏覽器控制臺中執行。 瀏覽器環境實現 在HTML文件中嵌入Jav…

【Big Data】Alluxio 首個基于云的數據分析和開源AI數據編排技術

目錄 1. 什么是 Alluxio&#xff1f;? 2. Alluxio 的誕生背景&#xff1a;為什么需要數據編排層&#xff1f;? 痛點 1&#xff1a;計算與存儲強耦合&#xff0c;適配成本高? 痛點 2&#xff1a;跨集群 / 跨云數據移動效率低? 痛點 3&#xff1a;數據訪問延遲高&#x…

uniApp App 嵌入 H5 全流程:通信與跳轉細節拆解

在 uniApp App 開發中&#xff0c;通過 WebView 嵌入 H5 頁面是常見需求&#xff08;如活動頁、第三方頁面&#xff09;&#xff0c;核心需解決「H5 與 App 通信」「H5 操作后返回/跳轉 App」兩大問題。本文基于 DCloud 官方方案&#xff08;原文鏈接&#xff09;&#xff0c;對…

技能提升必備:鴻蒙HarmonyOS應用開發者認證

技能提升必備&#xff1a;鴻蒙HarmonyOS應用開發者認證&#xff0c;HarmonyOS 認證是華為為開發者打造的能力衡量體系。隨著 HarmonyOS 系統影響力不斷擴大&#xff0c;市場對相關開發人才需求激增。該認證分為基礎與高級等不同級別&#xff0c;覆蓋應用開發、設備開發等方向。…

Chromium 架構中的 ContentClient / ContentBrowserClient 設計原理全解析

一、前言在閱讀 Chromium 源碼時&#xff0c;很多人會對這樣一段調用產生疑惑&#xff1a;bool BrowserMainLoop::AudioServiceOutOfProcess() const { return base::FeatureList::IsEnabled(features::kAudioServiceOutOfProcess) && !GetContentClient()->browser…

window和liunx提權學習筆記

liunx提權 反彈shell升級交互式反彈sehell 反彈的服務器 接受的服務器 連接上之后的shell&#xff0c;沒有tab鍵補全&#xff0c;不可以上下鍵顯示歷史命令 你會發現并不能如愿所償&#xff0c;「上下方向鍵」被強制轉換為了 ^[[A、^[[B 等字符。 正是由于「簡單 shell」的各種…

畢業項目推薦:47-基于yolov8/yolov5/yolo11的焊縫質量檢測識別系統(Python+卷積神經網絡)

文章目錄 項目介紹大全&#xff08;可點擊查看&#xff0c;不定時更新中&#xff09;概要一、整體資源介紹技術要點功能展示&#xff1a;功能1 支持單張圖片識別功能2 支持遍歷文件夾識別功能3 支持識別視頻文件功能4 支持攝像頭識別功能5 支持結果文件導出&#xff08;xls格式…

Java實現圖像像素化

使用Java實現圖像像素化藝術效果&#xff1a;從方案到實踐的完整指南引言&#xff1a;像素藝術的復興與編程實現 在當今高清、視網膜屏幕的時代&#xff0c;像素藝術&#xff08;Pixel Art&#xff09;作為一種復古的數字藝術形式&#xff0c;反而煥發出了新的生命力。從獨立游…

SpringBoot 自研運行時 SQL 調用樹,3 分鐘定位慢 SQL!

在復雜的業務系統中&#xff0c;一個接口往往會執行多條SQL&#xff0c;如何直觀地看到這些SQL的調用關系和執行情況&#xff1f; 本文將使用SpringBoot MyBatis攔截器構建一個SQL調用樹可視化系統。 項目背景 在日常開發中&#xff0c;我們經常遇到這樣的場景&#xff1a; …

部署 Go 項目的 N 種方法

Go 語言&#xff08;Golang&#xff09;以其簡單、高效和易于部署的特點&#xff0c;成為了很多企業開發和部署服務的首選語言。無論是微服務架構&#xff0c;還是命令行工具&#xff0c;Go 的編譯方式和標準庫使得部署變得更加輕松。本文將介紹部署 Go 語言項目的幾種常見方法…