pikachu靶場通關筆記14 XSS關卡10-XSS之js輸出(五種方法滲透)

目錄

一、源碼分析

1、進入靶場

2、代碼審計

二、滲透實戰

1、根據提示輸入tmac

2、XSS探測

3、注入Payload1

4、注入Payload2

5、注入Payload3

6、注入Payload4

7、注入Payload5?


本系列為通過《pikachu靶場通關筆記》的XSS關卡(共10關)滲透集合,通過對XSS關卡源碼的代碼審計找到安全風險的真實原因,講解XSS的原理并進行滲透實踐,本文使用5種方法對XSS1第10關卡XSS之js輸出進行滲透。

一、源碼分析

1、進入靶場

打開pikachu靶場第09關XSS之js輸出,這是一個輸入框頁面,完整URL地址如下所示。

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

2、代碼審計

右鍵查看源碼,發現javascript代碼,具體如下所示。

接下來查看xss_04.php源碼內容,很明顯此代碼存在 XSS安全風險,核心原因在于直接將未經過濾和驗證的 PHP 變量 $jsvar 嵌入到 JavaScript 代碼中。$jsvar 的值來自用戶通過 GET 請求提交的 message 參數,攻擊者可以構造包含惡意 JavaScript 代碼的輸入,當這些惡意代碼被嵌入到 JavaScript 代碼塊中時,就會在頁面加載或執行相應邏輯時被瀏覽器執行。對應的完整JavaScript代碼注釋后如下所示。

<script>// 從 PHP 代碼中獲取 $jsvar 變量的值,并將其賦值給 JavaScript 變量 $ms// 這里是通過 PHP 的 echo 語句將 $jsvar 的值嵌入到 JavaScript 代碼中$ms = '<?php echo $jsvar;?>';// 檢查 $ms 變量的長度是否不為 0// 即判斷 $ms 是否有實際的內容if ($ms.length != 0) {// 檢查 $ms 變量的值是否等于 'tmac'if ($ms == 'tmac') {// 如果 $ms 的值等于 'tmac',使用 jQuery 的 text 方法// 將 ID 為 'fromjs' 的元素的文本內容設置為 'tmac確實厲害,看那小眼神..'$('#fromjs').text('tmac確實厲害,看那小眼神..');} else {// 如果 $ms 的值不等于 'tmac'// 注釋掉的代碼,原本想彈出一個包含 $ms 內容的警告框// alert($ms);// 使用 jQuery 的 text 方法// 將 ID 為 'fromjs' 的元素的文本內容設置為 '無論如何不要放棄心中所愛..'$('#fromjs').text('無論如何不要放棄心中所愛..');}}
</script>

如上代碼中提到了jvar變量,相關定義如下圖所示。如下所示使用htmlspecialchars函數且參數為ENT_QUOTES對輸入參數進行了過濾處理,這說明沒法用第08關卡的單引號進行XSS滲透了。

這段 PHP 代碼的主要功能是處理用戶通過 GET 請求提交的 message 參數。當用戶提交表單(即 submit 參數存在)且 message 參數有值時,將 message 的值賦給 $jsvar 變量。若 $jsvar 的值為 tmac,則在頁面上顯示一張名為 tmac.jpeg 的圖片。詳細注釋后的源碼如下所示。

<?php
// 初始化一個空字符串變量 $jsvar,用于存儲后續要在 JavaScript 中使用的變量值
$jsvar = '';
// 初始化一個空字符串變量 $html,用于存儲后續要輸出的 HTML 內容
$html = '';// 檢查 $_GET 數組中是否存在名為 'submit' 的元素,并且是否存在名為 'message' 的元素且其值不為 null
// 即判斷用戶是否通過 GET 請求提交了 'submit' 參數,同時也提交了 'message' 參數且該參數有值
if (isset($_GET['submit']) && $_GET['message'] != null) {// 將用戶通過 GET 請求提交的 'message' 參數的值賦給 $jsvar 變量$jsvar = $_GET['message'];// 檢查 $jsvar 變量的值是否等于 'tmac'if ($jsvar == 'tmac') {// 如果等于 'tmac',向 $html 變量中追加一個 img 標簽// img 標簽的 src 屬性使用預定義的常量 $PIKA_ROOT_DIR 拼接圖片的路徑// 用于在頁面上顯示一張名為 tmac.jpeg 的圖片$html .= "<img src='{$PIKA_ROOT_DIR}assets/images/nbaplayer/tmac.jpeg' />";}
}
?>

綜上,第10關的代碼存在 XSS安全風險,原因在于直接將用戶輸入的內容$_GET['message']賦值給 $jsvar 變量,且未對輸入進行任何過濾和驗證,接又將未經過濾和驗證的 PHP 變量 $jsvar 嵌入到 JavaScript 代碼中。$jsvar 的值來自用戶通過 GET 請求提交的 message 參數,攻擊者可以構造包含惡意 JavaScript 代碼的輸入,當這些惡意代碼被嵌入到 JavaScript 代碼塊中時,就會在頁面加載或執行相應邏輯時被瀏覽器執行。

二、滲透實戰

1、根據提示輸入tmac

進入到pikachu靶場XSS關卡最后一關,根據點擊提示獲得的信息“輸入被動態的生成到了javascript中,如何是好。輸入tmac試試-_-”,輸入tmac,效果如下所示。

頁面提示看那小眼神..“tmac確實厲害,看那小眼神..”,就這是因為js代碼種輸入為tmac,故而fromjs元素被賦值為“tmac確實厲害,看那小眼神..”,同時因為jvar為tmac,頁面顯示了圖片tmac.jpeg,相關源碼如下所示。

if ($jsvar == 'tmac') {// 如果等于 'tmac',向 $html 變量中追加一個 img 標簽// img 標簽的 src 屬性使用預定義的常量 $PIKA_ROOT_DIR 拼接圖片的路徑// 用于在頁面上顯示一張名為 tmac.jpeg 的圖片$html .= "<img src='{$PIKA_ROOT_DIR}assets/images/nbaplayer/tmac.jpeg' />";
}
如果輸入是tmac時,?將 ID 為 'fromjs' 的元素的文本內容設置為 'tmac確實厲害,看那小眼神..'
如果輸入不是tmac時,將 ID 為 'fromjs' 的元素的文本內容設置為 '無論如何不要放棄心中所愛..'

2、XSS探測

輸入Payload語句<script>alert('ljn')</script>探測XSS安全風險,如下所示。

<script>alert('ljn')</script>

輸入payload后沒有任何反應,右鍵源碼,搜索關鍵字ljn,可知因為ms不是tmac所以輸出“無論如何不要放棄心中所愛”。具體代碼邏輯如下所示。

由于ms參數未有任何過濾,故而滲透的思路可以通過與上圖綠色框中的<script>構造閉合,只要構造出一個js語句就好了。

3、注入Payload1

前提1:語句的開始與上圖中綠色的<script>構造閉合,如'</script>即可閉合。

重點:接下來是xss惡意腳本,如<script>alert('ljn')</script>,注入語句如下所示。

'</script><script>alert('ljn')</script>

右鍵源碼-搜索關鍵字ljn,分析滲透成功的原因,Payload1如何通過閉合語句來進行滲透的。紅色框中的閉合如下所示。

<script>$ms=''</script>

綠色框內為惡意彈窗<script>alert('ljn')</script>,效果如下所示。

4、注入Payload2

本次Paylaod的效果為彈框cookie值,注入Payload如下所示。

'</script><script> alert(document.cookie)</script>

右鍵查看源碼,搜索關鍵字cookie,閉合構造如下,故而可以彈框成功。

5、注入Payload3

首先要用’;閉合掉當前ms的賦值的語句,然后插入新js語句,然后再用//注釋掉老語句遺留下來的’;

開頭有<script>
結尾有</script>
只要中間包含xss惡意腳本,如彈框alert('ljn')
那么就變成了<script>alert('ljn')</script>

接下來我們嘗試進行閉合,目前可變參數為ms=’string’;

前提1:語句的開始為包含';閉合掉ms賦值語句,如';,在中間插入 xss惡意腳本,如alert('ljn')

前提2:語句的末尾為//,注釋掉后ms賦值語句最后的';

本次Paylaod的效果為彈框“ljn”,注入Payload設置為';alert('ljn')//或者或者';alert('ljn');//如下所示。

';alert('ljn')//
';alert('ljn');//

右鍵源碼,搜索關鍵字ljn,閉合構造的原因如下所示。

Payload中第一個';使得ms賦值函數聲明結束,接下來的alert('ljn')就可以是一個新的語句,但是原本ms賦值語句的最后為單引號和分號,故而在他們之前還需要加上//注釋掉,從而構造如下閉合語句。

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

其中alert('ljn')<script></script>生成如下腳本,構成彈框

<script>
alert('ljn')
</script>

6、注入Payload4

本次Paylaod的效果為彈框“1019”,注入Payload如下所示。

';alert(1019);//
';alert(1019)//

右鍵源碼,搜索關鍵字1019,閉合構造如下,故而可以彈框成功

7、注入Payload5?

本次Paylaod的效果為彈框cookie值,注入Payload如下所示。

';alert(document.cookie);//
';alert(document.cookie)//

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

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

相關文章

PARADISE:用于新生兒缺氧缺血性腦病(HIE)疾病識別與分割的個性化和區域適應性方法|文獻速遞-深度學習醫療AI最新文獻

Title 題目 PARADISE: Personalized and regional adaptation for HIE disease identification and segmentation PARADISE&#xff1a;用于新生兒缺氧缺血性腦病&#xff08;HIE&#xff09;疾病識別與分割的個性化和區域適應性方法 1 文獻速遞介紹 缺氧缺血性腦病&…

OpenCV C++ 心形雨動畫

?? OpenCV C 心形雨動畫 ?? 本文將引導你使用 C 和 OpenCV 庫創建一個可愛的心形雨動畫。在這個動畫中&#xff0c;心形會從屏幕頂部的隨機位置落下&#xff0c;模擬下雨的效果。使用opencv定制自己的專屬背景 目錄 簡介先決條件核心概念實現步驟 創建項目定義心形結構…

【記錄】Python|Python支持if 1<a<2、if not a、if a is None這三種寫法

今天讓AI幫我寫代碼&#xff0c;突然發現寫出來一句類似1<a<2&#xff0c;我頓感疑惑&#xff1a;不是只能用and連接嗎&#xff1f; 一試發現真行&#xff0c;那我辛辛苦苦寫了好幾年的 (條件1) and (條件2) 算什么&#xff1f;算我勤快嗎&#xff1f;&#x1f62d; 常…

Matlab | MATLAB 中的插值詳解

MATLAB 中的插值詳解 插值是數值分析中的核心技術,用于在已知數據點之間估計未知點的值。MATLAB 提供了完整的插值函數庫,涵蓋一維到高維數據,支持多種插值方法。以下從基礎到高級全面解析: 一、插值核心概念 1. 數學本質 給定數據點 ( x i , y i ) (x_i, y_i) (<

正則表達式檢測文件類型是否為視頻或圖片

// 配置化文件類型檢測&#xff08;集中管理支持的類型&#xff09; const FILE_TYPE_CONFIG {video: {extensions: [mp4, webm, ogg, quicktime], // 可擴展支持更多格式regex: /^video\/(mp4|webm|ogg|quicktime)$/i // 自動生成正則},image: {extensions: [jpeg, jpg, png,…

Redis最佳實踐——熱點數據緩存詳解

Redis在電商熱點數據緩存中的最佳實踐 一、熱點數據定義與識別 1. 熱點數據特征 高頻訪問&#xff08;QPS > 1000&#xff09;數據規模適中&#xff08;單條 < 10KB&#xff09;數據變化頻率低&#xff08;更新間隔 > 5分鐘&#xff09;業務關鍵性高&#xff08;直接…

8088單板機C語言sprintf()格式化串口輸出---Prj04

#include "tiny_stdarg.h" // 使用自定義可變參數實現#define ADR_273 0x0200 #define ADR_244 0x0400 #define LED_PORT 0x800 #define PC16550_THR 0x1f0 #define PC16550_LSR 0x1f5 / //基本的IO操作函數 / char str[]"Hello World! 20250531 Ve…

【面試】音視頻面試

H.264 與 H.265 有什么區別&#xff1f; 1&#xff09;主要區別 H.265 也稱為高效視頻編碼 (HEVC)&#xff0c;是 H.264 的升級和更高級的版本&#xff1b;H.265 的編碼架構大致上 和 H.264 的架構相似&#xff0c;主要也包含&#xff1a;幀內預測&#xff08;intra predicti…

Windows系統下npm報錯node-gyp configure got “gyp ERR“解決方法

感謝原博主&#xff0c;此文參考網址&#xff1a;https://zhuanlan.zhihu.com/p/398279220 確保已經安裝node.js &#xff08;官方網址&#xff1a;https://nodejs.org/zh-cn/download&#xff09; 首先在命令窗口執行命令安裝windows-build-tools&#xff1a; npm install -…

git stash命令用法

git stash 是 Git 中一個非常有用的命令&#xff0c;它可以臨時保存當前工作區的修改&#xff0c;讓你可以切換到其他分支或者處理其他任務&#xff0c;而不需要提交這些還未完成的修改。 一、基本用法 1. 保存當前修改&#xff08;包括暫存區和工作區的內容&#xff09; git…

【C語言練習】080. 使用C語言實現簡單的數據庫操作

080. 使用C語言實現簡單的數據庫操作 080. 使用C語言實現簡單的數據庫操作使用原生APIODBC接口第三方庫ORM框架文件模擬1. 安裝SQLite2. 示例代碼:使用SQLite創建數據庫、表和插入數據3. 編譯和運行4. 示例運行輸出:5. 注意事項6. 總結080. 使用C語言實現簡單的數據庫操作 在…

2025年目前最新版本Android Studio自定義xml預覽的屏幕分辨率

一、前言 在實際開發項目當中&#xff0c;我們的設備的分辨率可能會比較特殊&#xff0c;AS并沒有自帶這種屏幕分辨率的設備&#xff0c;但是我們又想一邊編寫XML界面&#xff0c;一邊實時看到較為真實的預覽效果&#xff0c;該怎么辦呢&#xff1f;在早期的AS版本中&#xff…

Edge Databases:賦能分布式計算環境

Edge 計算通過將數據處理推向數據源頭徹底改變了傳統計算范式。隨著物聯網設備、移動應用和分布式系統的大規模部署&#xff0c;面向邊緣場景優化的數據庫解決方案已成為關鍵技術需求。這類專用數據庫能夠在算力有限、內存受限且網絡連接不穩定的終端設備上穩定運行&#xff0c…

Pluto論文閱讀筆記

主要還是參考了這一篇論文筆記&#xff1a;https://zhuanlan.zhihu.com/p/18319150220 Pluto主要有三個創新點&#xff1a; 橫向縱向用lane的query來做將軌跡投回柵格化地圖&#xff0c;計算碰撞loss對數據進行正增強和負增強&#xff0c;讓正增強的結果也無增強的結果相近&a…

【計算機網絡】傳輸層UDP協議

&#x1f525;個人主頁&#x1f525;&#xff1a;孤寂大仙V &#x1f308;收錄專欄&#x1f308;&#xff1a;計算機網絡 &#x1f339;往期回顧&#x1f339;&#xff1a; 【計算機網絡】應用層協議Http——構建Http服務服務器 &#x1f516;流水不爭&#xff0c;爭的是滔滔不…

「Java教案」順序結構

課程目標 1&#xff0e;知識目標 能夠正確使用Java順序結構的基本語法&#xff0c;例如變量的聲明、變量的賦值、表達式的計算、數據的輸出。能夠正確使用順序結構的執行規則及其在程序中的作用&#xff0c;解決實際問題。 2&#xff0e;能力目標 能夠獨立完成順序結構程序…

第八部分:階段項目 6:構建 React 前端應用

現在&#xff0c;是時候將你學到的 React 基礎知識付諸實踐&#xff0c;構建一個簡單的前端應用來模擬與后端 API 的交互了。在這個階段&#xff0c;你可以先使用模擬數據&#xff0c;或者如果你的后端 API&#xff08;階段項目 5&#xff09;已經搭建好&#xff0c;可以直接連…

GO語言----基礎類型取別名

文章目錄 取別名示例注意事項 Go語言中使用type關鍵字為基礎類型取別名。 type是Go語言中用于定義新類型的關鍵字&#xff0c;它提供了強大的類型定義能力。 取別名示例 type MyInt int注意事項 這創建了一個新類型MyInt&#xff0c;它底層是int類型&#xff0c;但與int是不同…

服務端定時器的學習(一)

一、定時器 1、定時器是什么&#xff1f; 定時器不僅存在于硬件領域&#xff0c;在軟件層面&#xff08;客戶端、網頁和服務端&#xff09;也普遍應用&#xff0c;核心功能都是高效管理大量延時任務。不同應用場景下&#xff0c;其實現方式和使用方法有所差異。 2、定時器解…

Mac版本Android Studio配置LeetCode插件

第一步&#xff1a;Android Studio里面找到Settings&#xff0c;找到Plugins&#xff0c;在Marketplace里面搜索LeetCode Editor。 第二步&#xff1a;安裝對應插件&#xff0c;并在Tools->LeetCode Plugin頁面輸入帳號和密碼。 理論上&#xff0c;應該就可以使用了。但是&a…