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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;在消息…