pikachu靶场通关笔记13 XSS关卡09-XSS之href输出

news2025/6/7 7:08:02

目录

一、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.coloradmin.cn/o/2401059.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MCP客户端Client开发流程

1. uv工具入门使用指南 1.1 uv入门介绍 MCP开发要求借助uv进行虚拟环境创建和依赖管理。 uv 是一个Python 依赖管理工具&#xff0c;类似于pip 和 conda &#xff0c;但它更快、更高效&#xff0c;并且可以更好地管理 Python 虚拟环境和依赖项。它的核心目标是 替代 pip 、…

学习日记-day21-6.3

完成目标&#xff1a; 目录 知识点&#xff1a; 1.集合_哈希表存储过程说明 2.集合_哈希表源码查看 3.集合_哈希表无索引&哈希表有序无序详解 4.集合_TreeSet和TreeMap 5.集合_Hashtable和Vector&Vector源码分析 6.集合_Properties属性集 7.集合_集合嵌套 8.…

C语言探索之旅:深入理解结构体的奥秘

目录 引言 一、什么是结构体&#xff1f; 二、结构体类型的声明和初始化 1、结构体的声明 2、结构体的初始化 3、结构体的特殊声明 4、结构体的自引用 5、结构体的重命名 三、结构体的内存对齐 1、对齐规则 2、为什么存在内存对齐&#xff1f; 3、修改默认对齐数 三…

经典算法回顾之最小生成树

最小生成树&#xff08;Minimum Spanning Tree&#xff0c;简称MST&#xff09;是图论中的一个重要概念&#xff0c;主要用于解决加权无向图中连接所有顶点且总权重最小的树结构问题。本文对两种经典的算法即Prim算法和Kruskal算法进行回顾&#xff0c;并对后者的正确性给出简单…

Ubuntu下实现nginx反向代理

1. 多个ngx实例安装 脚本已经在deepseek的指导下完成啦&#xff01; deepseek写的脚本支持ubuntu/centos两种系统。 ins_prefix"/usr/local/" makefile_gen() {ngx$1 ngx_log_dir"/var/log/"$ngx"/"ngx_temp_path"/var/temp/"${ngx}…

c++ QicsTable使用实例

效果图&#xff1a; #include <QicsTable.h> #include <QicsDataModelDefault.h> #include <QVBoxLayout> Demo1::Demo1(QWidget *parent) : QWidget(parent) { ui.setupUi(this); const int numRows 10; const int numCols 5; // create th…

在WordPress上添加隐私政策页面

在如今的互联网时代&#xff0c;保护用户隐私已经成为每个网站管理员的责任。隐私政策不仅是法律要求&#xff0c;还能提高用户对网站的信任。本文将介绍两种常用方法&#xff0c;帮助你在WordPress上轻松创建并发布隐私政策页面。这些方法简单易行&#xff0c;符合中国用户的阅…

阿里云ACP云计算备考笔记 (3)——云服务器ECS

目录 第一章 整体概览 第二章 ECS简介 1、产品概念 2、ECS对比本地IDC 3、BGP机房优势 第三章 ECS实例 1、实例规格族 2、实例系列 3、应用场景推荐选型 4、实例状态 5、创建实例 ① 完成基础配置 ② 完成网络和安全组配置 ③ 完成管理配置和高级选项 ④ 确认下单…

从零开始:用Tkinter打造你的第一个Python桌面应用

目录 一、界面搭建&#xff1a;像搭积木一样组合控件 二、菜单系统&#xff1a;给应用装上“控制中枢” 三、事件驱动&#xff1a;让界面“活”起来 四、进阶技巧&#xff1a;打造专业级体验 五、部署发布&#xff1a;让作品触手可及 六、学习路径建议 在Python生态中&am…

Web开发主流前后端框架总结

&#x1f5a5; 一、前端主流框架 前端框架的核心是提升用户界面开发效率&#xff0c;实现高交互性应用。当前三大主流框架各有侧重&#xff1a; React (Meta/Facebook) 核心特点&#xff1a;采用组件化架构与虚拟DOM技术&#xff08;减少真实DOM操作&#xff0c;优化渲染性能&…

GlobalSign、DigiCert、Sectigo三种SSL安全证书有什么区别?

‌GlobalSign、DigiCert和Sectigo是三家知名的SSL证书颁发机构&#xff0c;其产品在安全性、功能、价格和适用场景上存在一定差异。选择SSL证书就像为你的网站挑选最合身的“安全盔甲”&#xff0c;核心是匹配你的实际需求&#xff0c;避免过度配置或防护不足。 一、核心特点对…

力扣面试150题--二叉搜索树中第k小的元素

Day 58 题目描述 思路 直接采取中序遍历&#xff0c;不过我们将k参与到中序遍历中&#xff0c;遍历到第k个元素就结束 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* …

SQL Server Agent 不可用怎么办?

在 SQL Server Management Studio (SSMS) 中&#xff0c;SQL Server Agent 通常位于对象资源管理器&#xff08;Object Explorer&#xff09;的树形结构中&#xff0c;作为 SQL Server 实例的子节点。以下是详细说明和可能的原因&#xff1a; 1. SQL Server Agent 的位置 默认路…

css-塞贝尔曲线

文章目录 1、定义2、使用和解释 1、定义 cubic-bezier() 函数定义了一个贝塞尔曲线(Cubic Bezier)语法&#xff1a;cubic-bezier(x1,y1,x2,y2) 2、使用和解释 x1,y1,x2,y2&#xff0c;表示两个点的坐标P1(x1,y1),P2(x2,y2)将以一条直线放在范围只有 1 的坐标轴中&#xff0c;并…

docker使用proxy拉取镜像

前提条件&#xff0c;宿主机可以访问docker hub 虚拟机上telnet 宿主机7890能正常访问 下面的才是关键&#xff0c;上面部分自己想办法~ 3. 编辑 /etc/docker/daemon.json {"proxies": {"http-proxy": "http://192.168.100.1:7890","ht…

服务端定时器的学习(一)

一、定时器 1、定时器是什么&#xff1f; 定时器不仅存在于硬件领域&#xff0c;在软件层面&#xff08;客户端、网页和服务端&#xff09;也普遍应用&#xff0c;核心功能都是高效管理大量延时任务。不同应用场景下&#xff0c;其实现方式和使用方法有所差异。 2、定时器解…

Modbus转EtherNET IP网关开启节能改造新范式

在现代工业生产和能源管理中&#xff0c;无锡耐特森Modbus转EtherNET IP网关MCN-EN3001发挥着至关重要的作用。通过将传统的串行通信协议Modbus转换为基于以太网的EtherNET IP协议&#xff0c;这种网关设备不仅提高了数据传输的效率&#xff0c;而且为能源管理和控制系统的现代…

C#入门学习笔记 #7(传值/引用/输出/数组/具名/可选参数、扩展方法(this参数))

欢迎进入这篇文章,文章内容为学习C#过程中做的笔记,可能有些内容的逻辑衔接不是很连贯,但还是决定分享出来,由衷的希望可以帮助到你。 笔记内容会持续更新~~ 本篇介绍各种参数,参数本质上属于方法的一部分,所以本篇算是对方法更深度的学习。本章难度较大... 传值参数 …

【DeepSeek】【Dify】:用 Dify 对话流+标题关键词注入,让 RAG 准确率飞跃

1 构建对话流处理数据 初始准备 文章大纲摘要 数据标注和清洗 代码执行 特别注解 2 对话流测试 准备工作 大纲生成 清洗片段 整合分段 3 构建知识库 构建 召回测试 4 实战应用测试 关键词提取 智能总结 测试 1 构建对话流处理数据 初始准备 构建对话变量 用…

yFiles:专业级图可视化终极解决方案

以下是对yFiles的详细介绍,结合其定义、功能、技术特点、应用场景及行业评价等多维度分析: 一、yFiles的定义与核心定位 yFiles是由德国公司yWorks GmbH开发的 动态图与网络可视化软件开发工具包(SDK) ,专注于帮助用户将复杂数据转化为交互式图表。其核心价值在于提供跨平…