【CTFer成長之路】XSS的魔力

XSS闖關

level1

訪問url:

http://c884a553-d874-4514-9c32-c19c7d7b6e1c.node3.buuoj.cn/level1?username=xss

因為是xss,所以對傳參進行測試,修改?username=1,進行訪問

在這里插入圖片描述

會發現username參數傳入什么,welcome之后就會顯示什么,所以直接構造<script>標簽payload:

<script>alert(/xss/)</script>

成功通關

在這里插入圖片描述

level2

訪問url:

http://c884a553-d874-4514-9c32-c19c7d7b6e1c.node3.buuoj.cn/level2?username=xss

繼續對傳參進行測試,修改?username=1,進行訪問,依舊回顯

在這里插入圖片描述

輸入script標簽

<script>alert(/xss/)</script>

發現被轉碼了,右鍵查看源碼

在這里插入圖片描述

url中username之后的參數傳入var username里,也就是說這行代碼是動態改變的

可以看到username被escape函數編碼了,比較難繞過。

類似于SQL注入中的堆疊注入,閉合前面的單引號,注釋后面的單引號,之后只要把我們的js代碼傳入里面,就可以在這個script標簽中執行

構造payload:

';alert(1);'

拼接之后這行代碼會變為:

var username = '';alert(1);'';

效果等同于

var username = '';
alert(1);
'';

代碼就會執行alert(1)了

在這里插入圖片描述

level3

訪問url:

http://45a495fa-3b10-4d00-b9c0-c76d2660f037.node3.buuoj.cn/level3?username=xss

輸入第二關構造的payload:

';alert(1);'

發現’被\轉義了

在這里插入圖片描述

因為第一個單引號會被過濾,所以我們輸入兩個雙引號,構造payload:

'';alert(1);'

代碼就會執行alert(1)

在這里插入圖片描述

審查源碼,我們可以發現,第三題并沒有escape。在這里可以使用使用a標簽+鼠標滑過事件,構造payload:

<a onmouseover="alert(1)">

當鼠標劃過這個a標簽時,觸發alert

在這里插入圖片描述

構造payload:

<img src=1 onerror=alert(1)>

使用img標簽

在這里插入圖片描述

level4

訪問url:

45a495fa-3b10-4d00-b9c0-c76d2660f037.node3.buuoj.cn/level4

這是一個定時重定向,每過十秒就會重定向刷一次頁面

在這里插入圖片描述

觀察url,發現沒有給出參數,所以右鍵查看源碼

 <script type="text/javascript">//time為10就是10秒重定向刷一次頁面var time = 10;var jumpUrl;//自定義的參數//獲取參數jumpUrl//getQueryVariable結果為false,就賦為location.href;為true,getQueryVariable并把jumpUrl傳過去,并賦值為函數的返回值if(getQueryVariable('jumpUrl') == false){jumpUrl = location.href;}else{jumpUrl = getQueryVariable('jumpUrl');}//下面就是一些賦值和十秒倒計時setTimeout(jump,1000,time);function jump(time){if(time == 0){location.href = jumpUrl;}else{time = time - 1 ;document.getElementById('ccc').innerHTML= `頁面${time}秒后將會重定向到${escape(jumpUrl)}`;setTimeout(jump,1000,time);}}//關鍵在這里function getQueryVariable(variable){//URL中,從?開始的參數部分然后以&進行分割,分成數組//首先,想到的是,既然有&,并且上面提到了jumpUrl變量,那我們就得構造一個&jumpUrl變量//這個函數returnjumpUrl的值給到上面倒計時中的innerHTMLvar query = window.location.search.substring(1);var vars = query.split("&");for (var i=0;i<vars.length;i++) {var pair = vars[i].split("=");if(pair[0] == variable){return pair[1];}}return(false);}</script>

注意jumpUrl就是我們要跳轉的網頁,因此我們要注入的點應該是jumpUrl。

先一步一步審一下代碼。getQueryVariable函數里面的query就是?后面的內容,比如http://localhost:3000/level4?123456,這樣的話query就是123456。

vars是query以&作為分隔符分隔后形成的數組。簡單來說就是相當于獲得了每個參數。

然后遍歷每個參數。將每個參數以=為分隔符再分隔形成數組,這樣pair[0]相當于參數名,pair[1]相當于值。接著進行判斷,if(pair[0] == variable){return pair[1];}

因此我們直接構造好參數名,就是控制返回的內容。

因此這樣:

通過這樣的方式來實現注入

…/level4?payload

偽鏈接

javascript:alert(1),瀏覽器會把javascript后面的那一段內容當做代碼,直接在當前頁面執行。

代碼中接收jumpUrl作為跳轉url,所以構造payload:

../level4?jumpUrl=javascript:alert(1)

等待十秒利用js偽協議觸發alert(1)

在這里插入圖片描述

level5

訪問url:

http://efd46ffe-debb-45f1-95e5-77ebeb9ae065.node3.buuoj.cn/level5

沒有參數,只有一個輸入框

輸入正常payload:

<script>alert(/xss/)</script>

輸入如下圖:

在這里插入圖片描述

結果顯示不能用post方法

在這里插入圖片描述

右鍵查看源碼

<script type="text/javascript">//類比第四關中,getQueryVariable為false,不進行操作,我們需要執行js代碼,這顯然不是我們要的//如果想要為true,那就帶上這個autosubmit參數//只是跟這個參數autosubmit參數值的關系不大,只是需要有這樣一個參數,因為下面,都是在對另一個參數action操作if(getQueryVariable('autosubmit') !== false){var autoForm = document.getElementById('autoForm');//這里又一次出現了getQueryVariable函數,其實就是得存在actionautoForm.action = (getQueryVariable('action') == false) ? location.href : getQueryVariable('action');autoForm.submit();}else{}function getQueryVariable(variable){var query = window.location.search.substring(1);var vars = query.split("&");for (var i=0;i<vars.length;i++) {var pair = vars[i].split("=");if(pair[0] == variable){return pair[1];}}return(false);}</script>

源碼中有條件限制

第一個限制為

if(getQueryVariable(‘autosubmit’) !== false){

突破第一個限制的方法是給autosubm傳個值

autosubmit=1

第二個限制為

autoForm.action = (getQueryVariable(‘action’) == false) ? location.href : getQueryVariable(‘action’);

突破第二個限制的方法是getQueryVariable(‘action’) 不能為false,然后構造action

action=javascript:alert(1)

構造payload:

?autosubmit=1&action=javascript:alert(1)

成功執行alert(1)

在這里插入圖片描述

level6

訪問url:

http://efd46ffe-debb-45f1-95e5-77ebeb9ae065.node3.buuoj.cn/level6?username=xss

輸入paylaod:

<script>alert(1)</script>

結果輸入完全被當成了字符串

在這里插入圖片描述

本題考查的是二次渲染導致的XSS

構造payload進行驗證

?username={{3*3}}

頁面輸出了9,證實了是模板xss

在這里插入圖片描述

查看一下這個環境用的是哪個模板,發現是AngularJS 1.4.6:

在這里插入圖片描述

逃逸的payload為:

{{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1)//');}}

因此我們可以構造payload為:

?username={{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1)//');}}

成功獲取flag:

在這里插入圖片描述

文筆生疏,措辭淺薄,望各位大佬不吝賜教,萬分感謝。

免責聲明:由于傳播或利用此文所提供的信息、技術或方法而造成的任何直接或間接的后果及損失,均由使用者本人負責, 文章作者不為此承擔任何責任。

轉載聲明:儒道易行 擁有對此文章的修改和解釋權,如欲轉載或傳播此文章,必須保證此文章的完整性,包括版權聲明等全部內容。未經作者允許,不得任意修改或者增減此文章的內容,不得以任何方式將其用于商業目的。

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

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

相關文章

自主機器人模擬系統

一、系統概述 本代碼實現了一個基于Pygame的2D自主機器人模擬系統&#xff0c;具備以下核心功能&#xff1a; 雙模式控制&#xff1a;支持手動控制&#xff08;WASD鍵&#xff09;和自動導航模式&#xff08;鼠標左鍵設定目標&#xff09; 智能路徑規劃&#xff1a;采用改進型…

快速上手非關系型數據庫-MongoDB

簡介 MongoDB 是一個基于文檔的 NoSQL 數據庫&#xff0c;由 MongoDB Inc. 開發。 NoSQL&#xff0c;指的是非關系型的數據庫。NoSQL有時也稱作Not Only SQL的縮寫&#xff0c;是對不同于傳統的關系型數據庫的數據庫管理系統的統稱。 MongoDB 的設計理念是為了應對大數據量、…

性能優化實踐:啟動優化方案

性能優化實踐&#xff1a;啟動優化方案 在Flutter應用開發中&#xff0c;啟動性能是用戶體驗的第一印象&#xff0c;也是應用性能優化的重要環節。本文將從理論到實踐&#xff0c;深入探討Flutter應用的啟動優化方案。 一、Flutter應用啟動流程分析 1. 啟動類型 冷啟動&…

在文本廢墟中打撈月光

在文本廢墟中打撈月光 ----再讀三三的《山頂上是海》之“暗室”所理 今天是2025年5月1日&#xff0c;傳統的“五一”小長假。當我早飯后“坐”在衛生間的那幾分鐘里&#xff0c;閨女和兒子就騎著家中僅有的兩輛電動車去了圖書館。我是該做些什么&#xff1f; 于是我左手拿著三…

C++之類和對象基礎

?向對象三?特性&#xff1a;封裝、繼承、多態 類和對象 一.類的定義1. 類的定義格式2.類域 二.實例化1.對象2.對象的大小 三.this指針 在 C 的世界里&#xff0c;類和對象構成了面向對象編程&#xff08;Object-Oriented Programming&#xff0c;OOP&#xff09;的核心框架&…

計算機網絡——HTTP/IP 協議通俗入門詳解

HTTP/IP 協議通俗入門詳解 一、什么是 HTTP 協議&#xff1f;1. 基本定義2. HTTP 是怎么工作的&#xff1f; 二、HTTP 協議的特點三、HTTPS 是什么&#xff1f;它和 HTTP 有啥區別&#xff1f;1. HTTPS 概述2. HTTP vs HTTPS 四、HTTP 的通信過程步驟詳解&#xff1a; 五、常見…

使用 Java 實現一個簡單且高效的任務調度框架

目錄 一、任務調度系統概述 &#xff08;一&#xff09;任務調度的目標 &#xff08;二&#xff09;任務調度框架的關鍵組成 二、任務狀態設計 &#xff08;一&#xff09;任務狀態流轉設計 &#xff08;二&#xff09;任務表設計&#xff08;SQL&#xff09; 三、單機任…

基于GPT 模板開發智能寫作輔助應用

目錄 項目說明 1. 項目背景 2. 項目目標 3. 功能需求 4. 技術選型 項目結構 詳細代碼實現 前端代碼(client) client/src/main.js client/src/App.vue client/src/components/HistoryList.vue 后端代碼(server) server/app.js server/routes/api.js server/mo…

linux 使用nginx部署next.js項目,并使用pm2守護進程

前言 本文基于&#xff1a;操作系統 CentOS Stream 8 使用工具&#xff1a;Xshell8、Xftp8 服務器基礎環境&#xff1a; node - 請查看 linux安裝node并全局可用pm2 - 請查看 linux安裝pm2并全局可用nginx - 請查看 linux 使用nginx部署vue、react項目 所需服務器基礎環境&…

使用huggingface_hub需要注意的事項

在安裝huggingface_hub的時候要注意如果你的python是放在c盤下時記得用管理員模式命令行來安裝huggingface_hub&#xff0c;否則安裝過程會報錯&#xff0c;之后也不會有huggingface-cli命令。 如果安裝時因為沒有用管理員權限安裝而報錯了&#xff0c;可以先卸載huggingface-…

Spring MVC @RequestHeader 注解怎么用?

我們來詳細解釋一下 Spring MVC 中的 RequestHeader 注解。 RequestHeader 注解的作用 RequestHeader 注解用于將 HTTP 請求中的**請求頭&#xff08;Request Headers&#xff09;**的值綁定到 Controller 方法的參數上。 請求頭是 HTTP 請求的一部分&#xff0c;包含了關于…

Rust 學習筆記:關于結構體的例題

Rust 學習筆記&#xff1a;關于結構體的例題 Rust 學習筆記&#xff1a;關于結構體的例題下面的程序能通過編譯嗎&#xff1f;下面的程序能通過編譯嗎&#xff1f;下面的程序能通過編譯嗎&#xff1f;哪種說法最能描述 Display 和 Debug 特質之間的區別&#xff1f;下面哪個選項…

STM32 SPI通信協議

1. SPI協議概述 1.1 什么是SPI&#xff1f; SPI&#xff08;Serial Peripheral Interface&#xff09;是由摩托羅拉公司于1980年代提出的同步串行通信協議&#xff0c;主要用于短距離高速芯片間通信。作為四線制全雙工通信協議&#xff0c;它以簡單的硬件實現和高效的傳輸速率…

92.一個簡單的輸入與顯示示例 Maui例子 C#例子

一、關于項目命名的注意事項 在開發.NET MAUI項目時&#xff0c;項目命名是一個不可忽視的細節。如果你習慣了在C#控制臺或WPF項目中使用中文項目名稱&#xff0c;那么在.NET MAUI中&#xff0c;你可能會遇到一些問題。我之前就因為使用中文項目名稱而導致項目無法直接運行&am…

Locate 3D:Meta出品自監督學習3D定位方法

標題&#xff1a; Locate 3D: Real-World Object Localization via Self-Supervised Learning in 3D 摘要&#xff1a; 我們提出了 Locate 3D&#xff0c;這是一種可根據指代表達&#xff08;如“沙發和燈之間的小咖啡桌”&#xff09;在三維場景中定位物體的模型。Locate 3…

FastAPI 與數據庫交互示例

目錄 安裝必要的包完整代碼示例運行應用使用說明API 端點說明代碼解析 下面將創建一個簡單的 FastAPI 應用程序&#xff0c;演示如何與 SQLite 數據庫進行交互。這個例子包括創建、讀取、更新和刪除&#xff08;CRUD&#xff09;操作。 安裝必要的包 首先&#xff0c;需要安裝…

YOLO旋轉目標檢測之ONNX模型推理

YOLO旋轉檢測相較于目標檢測而言&#xff0c;其只是最后的輸出層網絡發生了改變&#xff0c;一個最明顯的區別便是&#xff1a;目標檢測的檢測框是xywh&#xff0c;而旋轉檢測則為xywha&#xff0c;其中&#xff0c;這個a代表angle&#xff0c;即旋轉角度&#xff0c;其余的基本…

架構進階:深入學習企業總體架構規劃(Oracle 戰略專家培訓課件)【附全文閱讀】

本文主要討論了企業總體技術架構規劃的重要性與實施建議。針對Oracle戰略專家培訓課件中的內容&#xff0c;文章強調了行業面臨的挑戰及現狀分析、總體技術架構探討、SOA集成解決方案討論與問題解答等方面。文章指出&#xff0c;為了消除信息孤島、強化應用系統&#xff0c;需要…

llamafactory-cli webui啟動報錯TypeError: argument of type ‘bool‘ is not iterable

一、問題 在阿里云NoteBook上啟動llamafactory-cli webui報錯TypeError: argument of type ‘bool’ is not iterable This share link expires in 72 hours. For free permanent hosting and GPU upgrades, run gradio deploy from the terminal in the working directory t…

Gas 優化不足、升級機制缺陷問題

以下是針對智能合約中 Gas 優化不足 與 升級機制缺陷 的技術風險分析與解決方案: 一、Gas 優化不足 1. 核心問題 Gas 優化不足會導致合約執行成本過高,直接影響用戶體驗和協議可行性,尤其在交易高峰期可能引發鏈上擁堵或交易失敗。 2. 常見風險點 冗余計算與存儲操作 例如…