pikachu靶場通關筆記13 XSS關卡09-XSS之href輸出

目錄

一、href

1、常見取值類型

2、使用示例

3、安全風險

二、源碼分析

1、進入靶場

2、代碼審計

3、滲透思路

三、滲透實戰

1、注入payload1

2、注入payload2

3、注入payload3


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

一、href

href(Hypertext Reference)是 HTML 中用于定義超鏈接目標地址的核心屬性,常見于 <a>、<link> 和 <area> 標簽。href 屬性的值可以是任何有效文檔的相對或絕對 URL,包括片段標識符和 JavaScript 代碼段。

<a>標簽的 href 屬性是 HTML 中用于創建超鏈接的關鍵屬性,它定義了鏈接的目標地址,用于指定超鏈接目標的 URL。如果用戶選擇了<a>標簽中的內容,那么瀏覽器會嘗試檢索并顯示 href 屬性指定的 URL 所表示的文檔,或者執行 JavaScript 表達式、方法和函數的列表。

1、常見取值類型

其值可以是 URL(如 https://example.com)、錨點(如 #section)或 協議鏈接(如 mailto:、tel:)具體如下所示。

  • 絕對 URL:指向完整的網頁地址,如?https://www.example.com。這是最常見的用法,用于鏈接到其他網站。

  • 相對 URL:相對于當前頁面的路徑,如?page2.html?或?../subfolder/page3.html。常用于鏈接到同一網站內的其他頁面。
  • 電子郵件地址:使用?mailto:?前綴,如?mailto:info@example.com。點擊鏈接時會打開默認的郵件客戶端,創建一封新郵件。
  • 錨點:指向當前頁面或其他頁面中的特定位置,如?#section2。常用于創建頁面內的導航鏈接。

2、使用示例

<a href="https://www.example.com">訪問示例網站</a>
<a href="mailto:info@example.com">發送郵件</a>
<a href="#section2">跳轉到頁面內的特定位置</a>

3、安全風險

通過合理使用 <a> 標簽的 href 屬性,可以為用戶提供便捷的導航和交互體驗。但若未過濾用戶輸入,攻擊者可注入 javascript: 偽協議(如 javascript:alert(1))或惡意 data: URI,觸發 XSS 攻擊。

二、源碼分析

1、進入靶場

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

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

2、代碼審計

查看xss_03.php源碼內容,如下所示使用htmlspecialchars函數且參數為ENT_QUOTES對輸入參數進行了過濾處理,這說明沒法用上一個關卡的單引號進行XSS滲透了,具體如下所示。

這段 PHP 代碼的主要功能是處理用戶通過 GET 請求提交的 message 參數。盡管代碼使用了?htmlspecialchars?函數并指定?ENT_QUOTES?對用戶輸入進行處理,但仍然存在 XSS安全風險,主要原因如下:

  • 協議限制缺失:代碼沒有對用戶輸入的 URL 協議進行嚴格限制,攻擊者可以使用?javascript:?協議來注入惡意腳本。即使使用?htmlspecialchars?對特殊字符進行了編碼,javascript:?協議本身并不會被阻止,仍然可以觸發 XSS 攻擊。
  • 僅依賴字符編碼:僅僅依靠?htmlspecialchars?進行字符編碼是不夠的。對于 URL 輸入,需要額外的驗證和過濾機制來確保其安全性,防止惡意協議的使用。

對源碼進行詳細注釋,具體如下所示。

<?php
// 檢查 $_GET 數組中是否存在名為 'submit' 的元素
// 這一步用于判斷用戶是否通過 GET 請求提交了表單,只有提交了表單才會進入后續邏輯
if (isset($_GET['submit'])) {// 檢查 $_GET 數組中名為 'message' 的元素是否為空if (empty($_GET['message'])) {// 如果 'message' 為空,向 $html 變量中追加一段提示信息// 提示用戶應該輸入一個 URL$html .= "<p class='notice'>叫你輸入個url,你咋不聽?</p>";}// 檢查用戶輸入的 'message' 是否等于 'www.baidu.com'if ($_GET['message'] == 'www.baidu.com') {// 如果等于 'www.baidu.com',向 $html 變量中追加一段提示信息$html .= "<p class='notice'>我靠,我真想不到你是這樣的一個人</p>";} else {// 輸出在 a 標簽的 href 屬性里面, 這里注釋提示可以使用 javascript 協議來執行 js// 并給出防御建議:只允許 http 和 https 協議,其次再進行 htmlspecialchars 處理// 使用 htmlspecialchars 函數對用戶輸入的 'message' 進行處理// ENT_QUOTES 標志表示同時對單引號和雙引號進行轉換// 這樣可以將特殊字符轉換為 HTML 實體,避免一些 XSS 攻擊$message = htmlspecialchars($_GET['message'], ENT_QUOTES);// 向 $html 變量中追加一個超鏈接元素// 超鏈接的 href 屬性使用處理后的 $message 變量,文本提示用戶點擊自己輸入的 URL$html .= "<a href='{$message}'> 閣下自己輸入的 url 還請自己點一下吧</a>";}
}
?>

3、滲透思路

雖然代碼使用了 htmlspecialchars 函數對用戶輸入進行處理,但仍然有XSS安全風險,攻擊者可以通過????使用?javascript:?協議來對該XSS安全風險進行攻擊。攻擊者可以輸入?javascript:alert('XSS')?作為?message?參數的值。當用戶點擊生成的超鏈接時,瀏覽器會執行?javascript:?協議后面的代碼,彈出一個包含?XSS?的警告框。

三、滲透實戰

1、注入payload1

輸入注入語句javascript:alert(1019),如下所示彈框“1019”,滲透成功。

2、注入payload2

輸入注入語句javascript:alert("ljn"),如下所示彈框“ljn”,滲透成功。

3、注入payload3

輸入注入語句javascript:alert('ljn'),如下所示彈框“ljn”,滲透成功。

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

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

相關文章

day26-計算機網絡-4

1. tcp的11種狀態 ss -ant -a 表示看所有狀態 -n 表示不將ip解析為主機名 -t 表示tcp 1.1. closed狀態&#xff08;客戶端、服務端&#xff09; 客戶端發起建立連接前的狀態服務端啟動服務前的狀態 1.2. listen狀態&#xff08;服務端&#xff09; 服務端軟件運行的時候狀…

基于autodl部署Cross-Modal-Re-ID-baseline

https://arxiv.org/abs/2001.04193 https://github.com/mangye16/Cross-Modal-Re-ID-baseline/tree/master?tabreadme-ov-file# 需要SYSU-MM01.zip pip install numpy pandas scipy scikit-learn pillow tqdm把SYSU-MM01放到…/Datasets/SYSU-MM01/ori_data下 先運行pytho…

線程安全集合

前置閱讀&#xff1a; 數據結構等算法概念 樹堆排序 鎖相關概念&#xff1a; 鎖概念鎖實現 隊列 Queue 與 Deque 的區別 Queue 是單端隊列&#xff0c;只能從一端插入元素&#xff0c;另一端刪除元素&#xff0c;實現上一般遵循 先進先出&#xff08;FIFO&#xff09; 規則…

ESP32與STM32

ESP32與STM32深度對比&#xff1a;物聯網與嵌入式開發的王者之爭 一、核心架構對比 1.1 ESP32 - 無線物聯網霸主 // 典型雙核架構配置 #include "freertos/FreeRTOS.h" #include "freertos/task.h"void app_main() {// 核心0執行無線通信任務xTaskCreat…

在SpringBoot中使用AWS SDK實現郵箱驗證碼服務

1.依賴導入&#xff08;maven&#xff09; <dependency><groupId>software.amazon.awssdk</groupId><artifactId>ses</artifactId><version>2.31.46</version></dependency> 2.申請兩個key 發件人郵箱需要驗證&#xff1a; …

從零到一:Maven 快速入門教程

目錄 Maven 簡介Maven 是什么為什么使用 Maven&#xff1f; 安裝 Maven下載 Maven 配置 Maven解壓文件配置本地倉庫保存路徑配置國內倉庫地址 Maven 的核心概念了解 pom.xml 文件坐標依賴范圍生命周期compileprovidedruntimetestsystemimport 依賴傳遞依賴排除依賴循環 繼承1. …

Java-39 深入淺出 Spring - AOP切面增強 核心概念 通知類型 XML+注解方式 附代碼

點一下關注吧&#xff01;&#xff01;&#xff01;非常感謝&#xff01;&#xff01;持續更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持續更新中&#xff01;&#xff08;長期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI煉丹日志-28 - Aud…

第四講:類和對象(下)

1. 再探構造函數 ? 之前我們實現構造函數時&#xff0c;初始化成員變量主要使?函數體內賦值&#xff0c;構造函數初始化還有?種? 式&#xff0c;就是初始化列表&#xff0c;初始化列表的使??式是以?個冒號開始&#xff0c;接著是?個以逗號分隔的數據成 員列表&#xff…

linux 安裝mysql8.0;支持國產麒麟,統信uos系統

一&#xff1a;使用我已經改好的mysql linux mysql8.0解壓可用&#xff0c;點我下載 也在國產麒麟系統&#xff0c;統信uos系統也測試過&#xff0c;可用&#xff1b; 下載后&#xff0c;上傳mysql.tar.gz 然后使用root角色去執行幾個命令即可&#xff1b;數據庫密碼&#xf…

音頻剪輯軟件少之又少好用

我們平時見到的圖片以及視頻編輯工具非常多&#xff0c;但是音頻剪輯軟件卻是少之又少&#xff0c;更不用說有沒有好用的&#xff0c;今天&#xff0c;給大家帶來一款非常專業的音頻剪輯軟件&#xff0c;而且是會員喔。 軟件簡介 一款手機號登錄即可以享受會員的超專業音頻剪…

論文閱讀:CLIP:Learning Transferable Visual Models From Natural Language Supervision

從自然語言監督中學習可遷移的視覺模型 雖然有點data/gpu is all you need的味道&#xff0c;但是整體實驗和談論豐富度上還是很多的&#xff0c;非常長的原文和超級多的實驗討論&#xff0c;隔著屏幕感受到了實驗的工作量之大。 Abstract 最先進的計算機視覺系統被訓練來預測…

第9篇:數據庫中間件的容錯機制與高可用架構設計

9.1 為什么數據庫中間件需要容錯與高可用設計&#xff1f; 隨著系統復雜性增加&#xff0c;數據庫中間件不僅承載 SQL 路由、分片、事務控制等核心職責&#xff0c;也成為系統的 單點風險源。 為確保系統 724 小時穩定運行&#xff0c;中間件必須具備&#xff1a; 自動故障檢測…

c#壓縮與解壓縮-SharpCompress

SharpCompress SharpCompress 是一個開源項目庫&#xff0c;能夠處理文件。c#庫對于壓縮已經有很多&#xff0c;可以隨意選擇&#xff0c;看了SharpCompress感覺比較簡潔&#xff0c;還是介紹給大家。 項目地址&#xff1a; sharpcompress 項目使用 引入nuget包&#xff1…

Go中的協程并發和并發panic處理

1 協程基礎 1.1 協程定義&#xff08;Goroutine&#xff09; 概念&#xff1a;Go 語言特有的輕量級線程&#xff0c;由 Go 運行時&#xff08;runtime&#xff09;管理&#xff0c;相比系統線程&#xff08;Thread&#xff09;&#xff0c;創建和銷毀成本極低&#xff0c;占用…

性能優化筆記

性能優化轉載 https://www.cnblogs.com/tengzijian/p/17858112.html 性能優化的一般策略及方法 簡言之&#xff0c;非必要&#xff0c;不優化。先保證良好的設計&#xff0c;編寫易于理解和修改的整潔代碼。如果現有的代碼很糟糕&#xff0c;先清理重構&#xff0c;然后再考…

frida簡介及環境搭建

frida簡介及環境搭建 一、frida簡介二、frida環境搭建一、frida簡介 frida是一款輕量級的Hook框架,也可以說是一種動態插樁工具,可以插入一些原生代碼到原生app的內存空間去,動態地監視和修改器行為,這些原生平臺可以是Win、Mac、Linux、Android或者iOS。 frida分為兩個部…

Python實例題:Python計算微積分

目錄 Python實例題 題目 代碼實現 實現原理 符號計算&#xff1a; 數值計算&#xff1a; 可視化功能&#xff1a; 關鍵代碼解析 1. 導數計算 2. 積分計算 3. 微分方程求解 4. 函數圖像繪制 使用說明 安裝依賴&#xff1a; 基本用法&#xff1a; 示例輸出&#…

Mybatis 攔截器 與 PageHelper 源碼解析

Mybatis 攔截器 與 PageHelper 源碼解析 一、MyBatis插件機制的設計思想二、Interceptor接口核心解析2.1 核心方法2.2 Intercepts、Signature 注解2.3 自定義攔截器 三、PageHelper 介紹3.1 使用姿勢3.2 參數與返回值3.3 使用小細節 四、PageHelper 核心源碼解析4.1 分頁入口&a…

Linux中 SONAME 的作用

?? 一、從 -lexample 到 SONAME ? 假設你有以下文件結構: /libexample.so → libexample.so.1 /libexample.so.1 → libexample.so.1.0.0 /libexample.so.1.0.0 # SONAME: libexample.so.1/libexample.so.2 → libexample.so.2.0.0 /libexample.so.2.0…

熱門消息中間件匯總

文章目錄 前言RabbitMQ基本介紹核心特性適用場景 Kafka基本介紹核心特性適用場景 RocketMQ基本介紹核心特性適用場景 NATS基本介紹核心特性適用場景 總結選型建議與未來趨勢選型建議未來趨勢 結語 前言 大家后&#xff0c;我是沛哥兒。作為技術領域的老濕機&#xff0c;在消息…