Webug3.0通關筆記14 第十四關:存儲型XSS

目錄

第十四關:存儲型XSS

1.打開靶場

2.源碼分析

3.滲透實戰


第十四關:存儲型XSS

本文通過《webug3靶場第十四關 存儲型XSS》來進行存儲型XSS關卡的滲透實戰。

存儲型 XSS(Stored Cross - Site Scripting),也被稱為持久型 XSS,是跨站腳本攻擊(XSS)的一種類型。它的特點是攻擊者將惡意腳本存儲在目標網站的服務器端數據庫、文件系統等持久化存儲介質中。當其他用戶訪問包含該惡意腳本的頁面時,惡意腳本會被瀏覽器執行,從而導致攻擊發生。

存儲型XSS漏洞對比上一關卡的反射型XSS漏洞,,最主要的區別如下所示。

  • 存儲型 XSS:攻擊者把惡意腳本提交到目標網站的服務器,這些腳本會被持久化保存,像存儲在數據庫、文件系統里。當其他用戶訪問包含此惡意腳本的頁面時,腳本就會在其瀏覽器中執行。比如在論壇的留言板、評論區,攻擊者輸入惡意腳本,若網站未對輸入進行嚴格過濾,腳本就會被保存,之后其他用戶瀏覽該留言或評論時,惡意腳本就會執行。
  • 反射型 XSS:攻擊者通過誘導用戶點擊包含惡意腳本的鏈接來發動攻擊。用戶點擊鏈接后,服務器會接收鏈接中的惡意腳本,并將其原樣反射到響應頁面中,隨后在用戶瀏覽器里執行。例如在搜索框中,若網站對輸入過濾不嚴格,攻擊者可構造包含惡意腳本的搜索鏈接,誘導用戶點擊,服務器返回的搜索結果頁面就會包含該惡意腳本。

整理來講,兩者區別如下所示。

對比維度存儲型 XSS反射型 XSS
攻擊方式攻擊者提交惡意腳本至服務器并持久保存,用戶訪問含該腳本頁面時執行攻擊者誘導用戶點擊含惡意腳本鏈接,服務器將腳本反射到響應頁面執行
數據存儲惡意腳本存于服務器端,持久存在惡意腳本不存于服務器,僅臨時包含在響應中
影響范圍影響所有訪問含腳本頁面的用戶,范圍廣、持續久僅影響點擊惡意鏈接的用戶
檢測難度相對容易,可掃描服務器數據發現較困難,腳本臨時存在于響應中
防范難度需嚴格過濾驗證輸入、清理檢查存儲數據,難度大對輸入輸出嚴格過濾編碼,避免腳本注入執行

1.打開靶場

如下所示打開靶場,第14關卡如下圖紅框所示。

點擊第十四關,完整的URL地址如下所示。

http://192.168.71.1/webug3/pentest/test/10/

?很明顯這是一個留言區,頁面顯示了已有的多條留言信息。

這個留言板可能存在存儲型XSS漏洞。

2.源碼分析

如下所示對傳入的留言參數并未進行任何檢查過濾,而是直接存儲到數據庫中,很明顯可以通過注入XSS語句形成XSS存儲型漏洞。

<?php
//禁用錯誤報告error_reporting(0);
header("Content-Type: text/html;charset=utf-8");
require_once 'conn.php';
include'./key/config/sql.php';if(isset($_POST["comment"]))
{#$comment=$_POST["comment"];</script>中等級別
$date=date('y-m-d h:i:s',time());$query = "insert into comment(content, time) values('".$_POST['comment']."', '".$date."') ";//構建查詢語句$result = mysql_query($query);//執行查詢
if (!$result) {die("could not to the database\n" . mysql_error());
}
if (mysql_numrows($result)<=0) {echo "<script type='text/javascript'>alert('提交成功!');location.href='index.php'</script>";
}else{echo "<script type='text/javascript'>alert('提交失敗,請重新提交!');location.href='index.php'</script>";
}
}
?>
<!DOCTYPE html>
<head>
<meta http-equiv=Content-Type content="text/html;charset=utf-8">
<title>評論區</title>
<meta name="description" content="Test">
<meta name="author" content="MRYE+">
</head>
<body>
你覺得學好滲透需要自學哪幾本書?
<form action="" method="post">
<input type="text" id="comment" name="comment" /><input type="submit" id="submit" name="submit" value="留言"/>
</form>
<hr/>
<?php$query = "select * from comment ";//構建查詢語句$result = mysql_query($query);//執行查詢
while($result_row=mysql_fetch_row(($result)))//取出結果并顯示
{
$id=$result_row[0];
$content=$result_row[1];
$time=$result_row[2];
echo "序號為:".$id."</br>";
echo "評論為:".$content."</br>";
echo "評論時間:".$time."</br>";
echo "<hr/>";
echo "<hr/>";
}?>
</body>
</html>

這個漏洞是因為XSS內容未經過濾,并直接存入數據庫,導致出現異常。

$query = "insert into comment(content, time) values('".$_POST['comment']."', '".$date."') ";

3.滲透實戰

獲取cookie的XSS注入命令如下所示。

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

向留言板中輸入如上語句。

點擊留言,接下來彈框獲取到cookie信息,如下所示滲透成功。

這之后,每次再進入到留言板界面,都會有彈出cookie的彈框,存儲型XSS獲取成功

4.存儲型XSS漏洞防范

防御層面具體防御方法原理
輸入驗證白名單驗證只允許符合特定規則的字符(如字母、數字、部分特定符號)輸入,阻止惡意腳本代碼中的特殊字符(如<script>等)進入系統,從源頭防止惡意腳本注入。
長度限制限制用戶輸入內容的長度,避免攻擊者利用長串惡意代碼繞過過濾機制,減少惡意腳本成功注入的可能性。
輸出編碼HTML 實體編碼將用戶輸入內容中的特殊字符(如<編碼為&lt;>編碼為&gt;等)轉換為 HTML 實體,使瀏覽器將其作為普通文本顯示,而不是解析為可執行的腳本代碼。
JavaScript 編碼對輸出到 JavaScript 環境中的內容進行編碼,如對單引號(')、雙引號(")等進行轉義處理,防止惡意腳本破壞 JavaScript 代碼結構并執行。
服務器端安全策略定期漏洞掃描使用專業安全工具定期掃描服務器,檢查是否存在存儲型 XSS 漏洞,及時發現并修復潛在的安全隱患。
權限控制嚴格控制用戶對服務器資源的訪問權限,避免未授權用戶上傳惡意腳本,降低存儲型 XSS 攻擊風險。
更新系統和應用及時更新服務器操作系統、Web 應用程序及相關組件,修復已知的安全漏洞,防止攻擊者利用舊版本漏洞進行攻擊。
設置 HTTP 安全頭Content - Security - Policy(CSP)通過設置 CSP 頭,明確指定頁面允許加載的資源來源,阻止瀏覽器從非信任源加載腳本,限制惡意腳本的執行環境。
開發規范與意識安全編碼培訓對開發人員進行安全編碼培訓,使其了解存儲型 XSS 的原理和危害,掌握正確的輸入驗證、輸出編碼等安全開發技巧。
代碼審查在開發過程中,對代碼進行嚴格審查,檢查是否存在可能導致存儲型 XSS 漏洞的代碼邏輯錯誤,如未對用戶輸入進行過濾就直接存儲和使用。

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

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

相關文章

Java父類、子類實例初始化順序詳解

1、完整的初始化順序&#xff08;含繼承&#xff09; 1、父類的靜態初始化 父類靜態變量默認值 → 父類靜態變量顯式賦值 父類靜態代碼塊&#xff08;按代碼順序執行&#xff09;。 2、子類的靜態初始化 子類靜態變量默認值 → 子類靜態變量顯式賦值 子類靜態代碼塊&…

13.組合模式:思考與解讀

原文地址:組合模式&#xff1a;思考與解讀 更多內容請關注&#xff1a;7.深入思考與解讀設計模式 引言 在軟件開發中&#xff0c;是否曾經遇到過這樣一種情況&#xff1a;你有一個對象&#xff0c;它本身很簡單&#xff0c;但是它包含了其他類似的對象。隨著系統變得越來越復…

OpenCV實戰教程 第一部分:基礎入門

第一部分&#xff1a;基礎入門 1. OpenCV簡介 什么是OpenCV及其應用領域 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一個開源的計算機視覺和機器學習軟件庫&#xff0c;于1999年由Intel公司發起&#xff0c;現在由非營利組織OpenCV.org維護。Ope…

虛幻商城 Quixel 免費資產自動化入庫(2025年版)

文章目錄 一、背景二、問題講解1. Quixel 免費資產是否還能一鍵入庫?2. 是不是使用了一鍵入庫功能 Quixel 的所有資產就能入庫了?3. 一鍵入庫會入庫哪些資產?三、實現效果展示四、實現自動化入庫五、常見問題1. 出現401報錯2. 出現429報錯3. 入庫過于緩慢4. 入庫 0 個資產一…

uni-app - 小程序使用高德地圖完整版

文章目錄 ??功能描述??效果??開發環境??代碼部分??功能描述 頁面自動通過定位獲取用戶位置并展示周邊POI數據,同時支持關鍵詞輸入實時聯想推薦關聯地點信息, 實現精準智能的地點發現與檢索功能。 ??效果 ??開發環境 unibest2.5.4nodev18.20.5pnpm9.14.2wot-des…

牛客:AB4 逆波蘭表達式求值

鏈接&#xff1a;逆波蘭表達式求值_牛客題霸_牛客網 題解&#xff1a; 利用棧&#xff0c;遍歷字符串數組&#xff0c;遇到運算數則入棧&#xff0c;遇到運算符則取出棧頂兩個運算數進行運算&#xff0c;并將運算結果入棧。 class Solution { public:/*** 代碼中的類名、方法…

Ant(Ubuntu 18.04.6 LTS)安裝筆記

一、前言 本文與【MySQL 8&#xff08;Ubuntu 18.04.6 LTS&#xff09;安裝筆記】同批次&#xff1a;先搭建數據庫&#xff0c;再安裝JDK&#xff0c;后面肯定就是部署Web應用。其中Web應用的部署使用 Ant 方式&#xff0c;善始善終&#xff0c;特以筆記。 二、準備 &#xf…

ultralytics 目標檢測 混淆矩陣 背景圖像 沒被記錄

修改 utils/metrics.py ConfusionMatrix def process_batch(self, detections, gt_bboxes, gt_cls):"""Update confusion matrix for object detection task.Args:detections (Array[N, 6] | Array[N, 7]): Detected bounding boxes and their associated inf…

iview 如何設置sider寬度

iview layout組件中&#xff0c;sider設置了默認寬度和最大寬度&#xff0c;在css樣式文件中修改無效&#xff0c;原因是iview默認樣式設置在了element.style中&#xff0c;只能通過行內樣式修改 樣式如下&#xff1a; image.png image.png 修改方式&#xff1a; 1.官方文檔中寫…

go-zero(十七)結合DTM :實現分布式事務

1. 基礎概念介紹 1.1 什么是分布式事務 在微服務架構中&#xff0c;一個業務操作常常需要調用多個服務來完成。例如&#xff0c;在電商系統中下單時&#xff0c;需要同時操作訂單服務和庫存服務。這種跨服務的操作就需要分布式事務來保證數據一致性。 分布式事務面臨以下挑戰…

2025 簡易Scrum指南(簡體中文版)

Scrum是一個輕量級的、以團隊為中心的框架&#xff0c;用于解決復雜的問題并創造價值。Scrum有意保持非完整性&#xff0c;Scrum的設計初衷旨在依靠使用者的集體智慧來不斷演進構建。 Scrum建立在實驗主義和精益思想的基礎上&#xff0c;它賦能團隊靈活巧妙地工作&#xff0c;…

2025最新福昕PDF編輯器,PDF萬能處理工具

軟件介紹 Foxit PDF Editor Pro 2025 中文特別版&#xff08;以前稱為 Foxit PhantomPDF Business&#xff09;是一款專為滿足各種辦公需求而設計的業務就緒的PDF工具包。 軟件特點 1. 強大的PDF編輯能力 創建新文檔&#xff1a;用戶可以從無到有地構建PDF文檔&#xff0c;添…

ollama的若干實踐

1. 本地ollama 1.1 本地安裝ollama 方法 1&#xff1a;手動檢查最新版本并下載 訪問 Ollama 的 GitHub Releases 頁面&#xff1a; 打開 https://github.com/ollama/ollama/releases 查看最新的穩定版本&#xff08;如 v0.7.0 或更高&#xff09; 手動下載最新版本&#xff08…

Spring Security源碼解析

秒懂SpringBoot之全網最易懂的Spring Security教程 SpringBoot整合Spring-Security 認證篇&#xff08;保姆級教程&#xff09; SpringBoot整合Spring Security【超詳細教程】 spring security 超詳細使用教程&#xff08;接入springboot、前后端分離&#xff09; Security 自…

LeetCode 3392.統計符合條件長度為 3 的子數組數目:一次遍歷模擬

【LetMeFly】3392.統計符合條件長度為 3 的子數組數目&#xff1a;一次遍歷模擬 力扣題目鏈接&#xff1a;https://leetcode.cn/problems/count-subarrays-of-length-three-with-a-condition/ 給你一個整數數組 nums &#xff0c;請你返回長度為 3 的 子數組&#xff0c;滿足…

讀論文筆記-CoOp:對CLIP的handcrafted改進

讀論文筆記-Learning to Prompt for Vision-Language Models Problems 現有基于prompt engineering的多模態模型在設計合適的prompt時有很大困難&#xff0c;從而設計了一種更簡單的方法來制作prompt。 Motivations prompt engineering雖然促進了視覺表示的學習&#xff0c…

從零構建 MCP Server 與 Client:打造你的第一個 AI 工具集成應用

目錄 &#x1f680; 從零構建 MCP Server 與 Client&#xff1a;打造你的第一個 AI 工具集成應用 &#x1f9f1; 1. 準備工作 &#x1f6e0;? 2. 構建 MCP Server&#xff08;服務端&#xff09; 2.1 初始化服務器 &#x1f9e9; 3. 添加自定義工具&#xff08;Tools&…

Django 自定義celery-beat調度器,查詢自定義表的Cron表達式進行任務調度

學習目標&#xff1a; 通過自定義的CronScheduler調度器在兼容標準的調度器的情況下&#xff0c;查詢自定義任務表去生成調度任務并分配給celery worker進行執行 不了解Celery框架的小伙伴可以先看一下我的上一篇文章&#xff1a;Celery框架組件分析及使用 學習內容&#xff…

藍橋杯 1. 確定字符串是否包含唯一字符

確定字符串是否包含唯一字符 原題目鏈接 題目描述 實現一個算法來識別一個字符串的字符是否是唯一的&#xff08;忽略字母大小寫&#xff09;。 若唯一&#xff0c;則輸出 YES&#xff0c;否則輸出 NO。 輸入描述 輸入一行字符串&#xff0c;長度不超過 100。 輸出描述 輸…

a-upload組件實現文件的上傳——.pdf,.ppt,.pptx,.doc,.docx,.xls,.xlsx,.txt

實現下面的上傳/下載/刪除功能&#xff1a;要求支持&#xff1a;【.pdf,.ppt,.pptx,.doc,.docx,.xls,.xlsx,.txt】 分析上面的效果圖&#xff0c;分為【上傳】按鈕和【文件列表】功能&#xff1a; 解決步驟1&#xff1a;上傳按鈕 直接上代碼&#xff1a; <a-uploadmultip…