Webug4.0靶場通關筆記07- 第9關反射XSS和第10關存儲XSS

目錄

第09關 反射型XSS

1.打開靶場

2.源碼分析

3.滲透實戰

第10關 存儲型XSS

1.打開靶場

2.源碼分析

3.滲透實戰


本系列為通過《Webug4.0靶場通關筆記》的滲透集合,本文為反射型和存儲型XSS漏洞關卡的滲透部分,通過對XSS關卡源碼的代碼審計找到漏洞的真實原因,講解XSS漏洞的原理并進行滲透實踐。

第09關 反射型XSS

  • 反射型 XSS:攻擊者構造包含惡意腳本的 URL,誘使用戶點擊。用戶點擊鏈接后,惡意腳本隨頁面請求提交給服務器,服務器處理后將腳本反射回客戶端瀏覽器,由瀏覽器解析并執行,整個過程類似 “客戶端 — 服務器 — 客戶端” 的反射,惡意腳本不存儲在服務器。
  • 存儲型 XSS:攻擊者將惡意腳本提交到目標網站的數據庫或文件中,如在論壇發帖、評論、留言等操作時注入。當用戶訪問包含該惡意腳本的頁面時,腳本從服務器被加載到客戶端瀏覽器并執行。

1.打開靶場

打開反射型靶場,如下所示此關卡有flag

反射型XSS的網址如下所示

http://192.168.71.1/webug4/control/xss/xss_1.php?id=1

根據url可知參數為id=1,如下圖紅框所示,1輸出在頁面中,那么可以從id的參數入手嘗試注入

?隨手將參數修改為id=2,如下所示輸出在頁面中

嘗試將id改為字符串,發現完整字符串輸出在頁面中,猜測存在xss漏洞,可能輸入內容未加過濾直接輸出

2.源碼分析

如下所示,參數id包含alert時將flag復制到cookie中

<?phprequire_once "../../common/common.php";
if (!isset($_SESSION['user'])) {header("Location:../login.php");
}
setcookie("flag", "", time() - 1);
if (isset($_GET["id"])) {if (!empty($_GET["id"])) {if (strstr($_GET['id'], 'alert')){$sql = "SELECT * FROM env_list WHERE id = 9";$res = $dbConnect->query($sql);$row = mysqli_fetch_assoc($res);setcookie("flag", $row['envFlag']);}}
}
require_once TPMELATE."/xss_1.html";

這段代碼是一個存在反射型XSS漏洞的PHP腳本,主要邏輯如下:

  • 檢查用戶是否登錄(未登錄則跳轉至登錄頁)。

  • 清除名為flag的Cookie(但未設置安全屬性)。

  • 檢查id參數是否存在且非空,若包含alert字符串,則查詢數據庫并設置flag?Cookie(存儲敏感信息)。

  • 最終加載模板文件xss_1.html,但未對id參數進行任何輸出編碼或嚴格過濾。

?據此,我們如果想獲取到flag,需要將cookie提取出來,也就是通過document.cookie獲得,這時候可以通過反射型注入語句獲取,即<script>alert(document.cookie)</script>

3.滲透實戰

構造包含alert的獲取cookie的XSS注入命令

id=<script>alert(document.cookie)</script>

完整url注入為

http://192.168.71.1/webug4/control/xss/xss_1.php?id=<script>alert(document.cookie)</script>

滲透結果如下

如上所示,獲取到

flag=fsdafasdfas

?提交到系統中

?提示正確,本關卡滲透成功

第10關 存儲型XSS

1.打開靶場

?打開反射型靶場,如下所示此關卡有flag

反射型XSS的網址如下所示

http://192.168.71.1/webug4/control/xss/xss_2.php

頁面打開后如下所示

該界面具有迷惑性,鼠標一直向下滑會出現留言板界面, 根據經驗這很可能是存儲型XSS漏洞如下所示

2.源碼分析

如下所示對傳入的參數message進行處理

<?phprequire_once "../../common/common.php";
if (!isset($_SESSION['user'])) {header("Location:../login.php");
}
setcookie("xss2_flag", "", time() - 1);
if (isset($_POST["message"])) {if (!empty($_POST["message"])) {$filter = array('insert', 'update', 'select', 'delete', 'from');$message = strtolower(trim($_POST["message"]));$userId = $_SESSION['user'];if (in_array($message, $filter)) {echo "<script>alert('Please don\'t try to deposit dangerous characters')</script>";exit();}else{if (strstr($message, "alert")) {$s = "SELECT * FROM env_list WHERE id = 10";$r = $dbConnect->query($s);$w = mysqli_fetch_assoc($r);setcookie("xss2_flag", $w['envFlag']);}$sql = "INSERT INTO storage_xss(content, userId) VALUES('{$message}', '{$userId}')";$res = $dbConnectWidth->query($sql);}}
}$sql1 = "SELECT * FROM storage_xss WHERE userId = '".$_SESSION['user']."'";
$res1 = $dbConnectWidth->query($sql1);
require_once TPMELATE."/xss_2.html";

代碼實現了一個簡單的留言存儲功能,主要邏輯包括:

  • 檢查用戶登錄狀態,未登錄則跳轉

  • 清除名為xss2_flag的Cookie

  • 接收用戶提交的message參數,進行簡單的SQL關鍵字過濾(如select/insert等),這個過濾是為避免二次SQL注入進行filter處理(不過這個代碼卡法這寫的有問題,因為in_array函數的處理有問題,實際上也等于沒有這個函數,基本上也無法過濾)

  • 如果message包含"alert"則設置包含敏感信息的Cookie,即當message包含alert關鍵字時,將flag寫入到cookie中

  • 將用戶輸入存儲到數據庫(將message信息存儲到數據庫中)并顯示歷史留言

如上所示存在存儲型XSS注入,并可以通過將調用獲取cookie的XSS注入語句實現注入,XSS漏洞主要原因包括:

  • 輸入過濾不徹底:僅過濾部分SQL關鍵字(如select/insert)和"alert"字符串,未對HTML/JS特殊字符(如<>'")進行編碼或過濾

  • 直接數據庫存儲:用戶輸入的原始message直接存入數據庫,未做凈化處理

  • 未輸出編碼:在xss_2.html模板中直接輸出數據庫內容時,未使用htmlspecialchars等函數進行編碼

  • Cookie設置不安全setcookie未設置HttpOnly/Secure屬性,易被XSS竊取

3.滲透實戰

構造包含alert的獲取cookie的XSS注入命令

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

在留言處進行注入并點擊提交

如下所示,獲取到flag

如上所示,flag獲取成功

xss2_flag=asdfsdfadfsdrew

提交flag

滲透成功

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

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

相關文章

Prometheus的安裝部署

目錄 一、概述 二、Prometheus的安裝 1、二進制方式 1.1、下載系統安裝包?編輯 1.2、解壓 1.3、創建數據目錄&#xff0c;服務運行用戶 1.4、設置為系統服務&#xff08;創建服務運行腳本&#xff09; 1.5、啟動服務&#xff0c;并通過瀏覽器訪問驗證 2、容器方式 2…

Jupyter Notebook為什么適合數據分析?

Jupyter Notebook 是一款超實用的 Web 應用程序&#xff0c;在數據科學、編程等諸多領域都發揮著重要作用。它最大的特點就是能讓大家輕松創建和共享文學化程序文檔。這里說的文學化程序文檔&#xff0c;簡單來講&#xff0c;就是把代碼、解釋說明、數學公式以及數據可視化結果…

Python清空Word段落樣式的方法

在 Python 中&#xff0c;你可以使用 python-docx 庫來操作 Word 文檔&#xff0c;包括清空段落樣式。以下是幾種清空段落樣式的方法&#xff1a; 方法一&#xff1a;直接設置段落樣式為"Normal" from docx import Documentdoc Document(your_document.docx) # 打…

macOS 上是否有類似 WinRAR 的壓縮軟件?

對于習慣使用 Windows 的用戶來說&#xff0c;WinRAR 是經典的壓縮/解壓工具&#xff0c;但 macOS 系統原生并不支持 RAR 格式的解壓&#xff0c;更無法直接使用 WinRAR。不過&#xff0c;macOS 平臺上有許多功能相似甚至更強大的替代工具&#xff0c;以下是一些推薦&#xff1…

WebRtc09:網絡基礎P2P/STUN/TURN/ICE

網絡傳輸基本知識 NATSTUN&#xff08;Session Traversal Utilities for NAT&#xff09;TURNICE NAT 產生的原因 IPV4地址不夠出于網絡安全的原因 NAT種類 完全錐型NAT(Full Cone NAT)地址限制型NAT(Address Restricted Cone NAT)端口限制型NAT(Port Restricted Cone NAT…

如何添加或刪除極狐GitLab 項目成員?

極狐GitLab 是 GitLab 在中國的發行版&#xff0c;關于中文參考文檔和資料有&#xff1a; 極狐GitLab 中文文檔極狐GitLab 中文論壇極狐GitLab 官網 項目成員 (BASIC ALL) 成員是有權訪問您的項目的用戶和群組。 每個成員都有一個角色&#xff0c;這決定了他們在項目中可以…

用單目相機和apriltag二維碼aruco實現單目定位

目錄 一、核心流程與代碼框架 1. ?環境準備? 2. ?ArUco定位實現 3. ?AprilTag定位實現&#xff08;需額外安裝Apriltag庫&#xff09; 二、關鍵優化點 1?.亞像素角點優化 2? 多標簽聯合定位 三、性能指標&#xff08;實測&#xff09; 四、常見問題 ?檢測失敗…

tinyrenderer筆記(透視矯正)

tinyrenderer個人代碼倉庫&#xff1a;tinyrenderer個人練習代碼 引言 還要從上一節知識說起&#xff0c;在上一節中我為了調試代碼&#xff0c;換了一個很簡單的正方形 obj 模型&#xff0c;配上紋理貼圖與法線貼圖進行渲染&#xff0c;得了下面的結果&#xff1a; what&…

MySQL的內置函數與復雜查詢

目錄 前言 一、聚合函數 1.1日期函數 1.2字符串函數 1.3數學函數 1.4其它函數 二、關鍵字周邊 2.1關鍵字的生效順序 2.2數據源 2.3可以使用聚合函數的關鍵字 前言 在前面幾篇文章中&#xff0c;講解了有關MySQL數據庫、數據庫表的創建、數據庫表的數據操作等等。本文我…

見多識廣4:Buffer與Cache,神經網絡加速器的Buffer

目錄 前言傳統意義上的Buffer與Cache一言以蔽之定義與主要功能BufferCache 數據存儲策略二者對比 神經網絡加速器的bufferInput BufferWeight BufferOutput Buffer與傳統buffer的核心區別總結 前言 知識主要由Qwen和Kimi提供&#xff0c;我主要做筆記。 參考文獻&#xff1a; …

內存的位運算

示例&#xff1a;提取和設置標志位 假設我們有一個32位的整數&#xff0c;其中不同的位代表不同的標志。例如&#xff1a; 位0&#xff1a;是否開啟日志&#xff08;0表示關閉&#xff0c;1表示開啟&#xff09; 位1&#xff1a;是否啟用調試模式&#xff08;0表示禁用&#…

linux -shell原理與運用

1---shell的工作方式和功能 shell的工作方式: shell本身也是一個應用程序,存儲在/bin 或者是/user/bin中 登錄的時候 會根據/etc/passwd文件載入shell默認執行 shell啟動后,就會顯示命令提示符,等待用戶輸入命令 命令的邏輯: 首先會判斷時內部命令還是外部命令,如果是內部…

js獲取uniapp獲取webview內容高度

js獲取uniapp獲取webview內容高度 在uni-app中&#xff0c;如果你想要獲取webview的內容高度&#xff0c;可以使用uni-app提供的bindload事件來監聽webview的加載&#xff0c;然后通過調用webview的invokeMethod方法來獲取內容的高度。 以下是一個示例代碼&#xff1a; <te…

Windows系統升級Nodejs版本

什么是nodejs Node.js 是一個免費、開源、跨平臺的 JavaScript 運行時環境, 它讓開發人員能夠創建服務器 Web 應用、命令行工具和腳本。 NodeJs官網 網址&#xff1a;Node.js — 在任何地方運行 JavaScript 可以通過網址下載安裝&#xff0c;通過官網可以看到現在最新版本為22…

Relay算子注冊(在pytorch.py端調用)

1. Relay算子注冊 (C層) (a) 算子屬性注冊 路徑: src/relay/op/nn/nn.cc RELAY_REGISTER_OP("hardswish").set_num_inputs(1).add_argument("data", "Tensor", "Input tensor.").set_support_level(3).add_type_rel("Identity…

【JavaEE】網絡原理之初識(1.0)

目錄 ?編輯 局域網與廣域網 IP地址和端口號 實現簡單的服務器客戶端交互 簡單理解socket TCP和UDP的差別&#xff08;初識&#xff09; socket面對udp DatagramSocket API DatagramSocket 構造方法 DatagramSocket 方法&#xff1a; DatagramPacket API Data…

Redis數據結構ZipList,QuickList,SkipList

目錄 1.ZipList 1.2.解析Entry&#xff1a; 1.3Encoding編碼 1.4.ZipList連鎖更新問題 2.QuickList SkipList跳表 RedisObject 五種數據類型 1.ZipList redis中的ZipList是一種緊湊的內存儲存結構&#xff0c;主要可以節省內存空間儲存小規模數據。是一種特殊的雙端鏈表…

laravel 12 監聽syslog消息,并將消息格式化后存入mongodb

在Laravel 12中實現監聽Syslog消息并格式化存儲到MongoDB&#xff0c;需結合日志通道配置、Syslog解析和MongoDB存儲操作。以下是具體實現方案&#xff1a; 一、環境配置 安裝MongoDB擴展包 執行以下命令安裝必要的依賴&#xff1a; composer require jenssegers/mongodb ^4.0確…

【STM32項目實戰】一文了解單片機的SPI驅動外設功能

前言&#xff1a;在前面我有文章介紹了關于單片機的SPI外設CUBEMX配置&#xff0c;但是要想使用好SPI這個外設我們還必須對其原理性的時序有一個詳細的了解&#xff0c;所以這篇文章就補充一下SPI比較偏向底層的時序性的邏輯。 1&#xff0c;SPI簡介 SPI是MCU最常見的對外通信…

【挖洞利器】GobyAwvs解放雙手

【滲透測試工具】解放雙手&Goby配合Awvs滲透測試利器\x0a通過Goby和Awvs 解放雙手https://mp.weixin.qq.com/s/SquRK8C5cRpWmfGbIOqxoQ