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

目录

一、源码分析

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.pswp.cn/diannao/85776.shtml

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

相关文章

PARADISE:用于新生儿缺氧缺血性脑病(HIE)疾病识别与分割的个性化和区域适应性方法|文献速递-深度学习医疗AI最新文献

Title 题目 PARADISE: Personalized and regional adaptation for HIE disease identification and segmentation PARADISE&#xff1a;用于新生儿缺氧缺血性脑病&#xff08;HIE&#xff09;疾病识别与分割的个性化和区域适应性方法 1 文献速递介绍 缺氧缺血性脑病&…

OpenCV C++ 心形雨动画

❤️ OpenCV C 心形雨动画 ❤️ 本文将引导你使用 C 和 OpenCV 库创建一个可爱的心形雨动画。在这个动画中&#xff0c;心形会从屏幕顶部的随机位置落下&#xff0c;模拟下雨的效果。使用opencv定制自己的专属背景 目录 简介先决条件核心概念实现步骤 创建项目定义心形结构…

【记录】Python|Python支持if 1<a<2、if not a、if a is None这三种写法

今天让AI帮我写代码&#xff0c;突然发现写出来一句类似1<a<2&#xff0c;我顿感疑惑&#xff1a;不是只能用and连接吗&#xff1f; 一试发现真行&#xff0c;那我辛辛苦苦写了好几年的 (条件1) and (条件2) 算什么&#xff1f;算我勤快吗&#xff1f;&#x1f62d; 常…

Matlab | MATLAB 中的插值详解

MATLAB 中的插值详解 插值是数值分析中的核心技术,用于在已知数据点之间估计未知点的值。MATLAB 提供了完整的插值函数库,涵盖一维到高维数据,支持多种插值方法。以下从基础到高级全面解析: 一、插值核心概念 1. 数学本质 给定数据点 ( x i , y i ) (x_i, y_i) (<

正则表达式检测文件类型是否为视频或图片

// 配置化文件类型检测&#xff08;集中管理支持的类型&#xff09; const FILE_TYPE_CONFIG {video: {extensions: [mp4, webm, ogg, quicktime], // 可扩展支持更多格式regex: /^video\/(mp4|webm|ogg|quicktime)$/i // 自动生成正则},image: {extensions: [jpeg, jpg, png,…

Redis最佳实践——热点数据缓存详解

Redis在电商热点数据缓存中的最佳实践 一、热点数据定义与识别 1. 热点数据特征 高频访问&#xff08;QPS > 1000&#xff09;数据规模适中&#xff08;单条 < 10KB&#xff09;数据变化频率低&#xff08;更新间隔 > 5分钟&#xff09;业务关键性高&#xff08;直接…

8088单板机C语言sprintf()格式化串口输出---Prj04

#include "tiny_stdarg.h" // 使用自定义可变参数实现#define ADR_273 0x0200 #define ADR_244 0x0400 #define LED_PORT 0x800 #define PC16550_THR 0x1f0 #define PC16550_LSR 0x1f5 / //基本的IO操作函数 / char str[]"Hello World! 20250531 Ve…

【面试】音视频面试

H.264 与 H.265 有什么区别&#xff1f; 1&#xff09;主要区别 H.265 也称为高效视频编码 (HEVC)&#xff0c;是 H.264 的升级和更高级的版本&#xff1b;H.265 的编码架构大致上 和 H.264 的架构相似&#xff0c;主要也包含&#xff1a;帧内预测&#xff08;intra predicti…

Windows系统下npm报错node-gyp configure got “gyp ERR“解决方法

感谢原博主&#xff0c;此文参考网址&#xff1a;https://zhuanlan.zhihu.com/p/398279220 确保已经安装node.js &#xff08;官方网址&#xff1a;https://nodejs.org/zh-cn/download&#xff09; 首先在命令窗口执行命令安装windows-build-tools&#xff1a; npm install -…

git stash命令用法

git stash 是 Git 中一个非常有用的命令&#xff0c;它可以临时保存当前工作区的修改&#xff0c;让你可以切换到其他分支或者处理其他任务&#xff0c;而不需要提交这些还未完成的修改。 一、基本用法 1. 保存当前修改&#xff08;包括暂存区和工作区的内容&#xff09; git…

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…

2025年目前最新版本Android Studio自定义xml预览的屏幕分辨率

一、前言 在实际开发项目当中&#xff0c;我们的设备的分辨率可能会比较特殊&#xff0c;AS并没有自带这种屏幕分辨率的设备&#xff0c;但是我们又想一边编写XML界面&#xff0c;一边实时看到较为真实的预览效果&#xff0c;该怎么办呢&#xff1f;在早期的AS版本中&#xff…

Edge Databases:赋能分布式计算环境

Edge 计算通过将数据处理推向数据源头彻底改变了传统计算范式。随着物联网设备、移动应用和分布式系统的大规模部署&#xff0c;面向边缘场景优化的数据库解决方案已成为关键技术需求。这类专用数据库能够在算力有限、内存受限且网络连接不稳定的终端设备上稳定运行&#xff0c…

Pluto论文阅读笔记

主要还是参考了这一篇论文笔记&#xff1a;https://zhuanlan.zhihu.com/p/18319150220 Pluto主要有三个创新点&#xff1a; 横向纵向用lane的query来做将轨迹投回栅格化地图&#xff0c;计算碰撞loss对数据进行正增强和负增强&#xff0c;让正增强的结果也无增强的结果相近&a…

【计算机网络】传输层UDP协议

&#x1f525;个人主页&#x1f525;&#xff1a;孤寂大仙V &#x1f308;收录专栏&#x1f308;&#xff1a;计算机网络 &#x1f339;往期回顾&#x1f339;&#xff1a; 【计算机网络】应用层协议Http——构建Http服务服务器 &#x1f516;流水不争&#xff0c;争的是滔滔不…

「Java教案」顺序结构

课程目标 1&#xff0e;知识目标 能够正确使用Java顺序结构的基本语法&#xff0c;例如变量的声明、变量的赋值、表达式的计算、数据的输出。能够正确使用顺序结构的执行规则及其在程序中的作用&#xff0c;解决实际问题。 2&#xff0e;能力目标 能够独立完成顺序结构程序…

第八部分:阶段项目 6:构建 React 前端应用

现在&#xff0c;是时候将你学到的 React 基础知识付诸实践&#xff0c;构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段&#xff0c;你可以先使用模拟数据&#xff0c;或者如果你的后端 API&#xff08;阶段项目 5&#xff09;已经搭建好&#xff0c;可以直接连…

GO语言----基础类型取别名

文章目录 取别名示例注意事项 Go语言中使用type关键字为基础类型取别名。 type是Go语言中用于定义新类型的关键字&#xff0c;它提供了强大的类型定义能力。 取别名示例 type MyInt int注意事项 这创建了一个新类型MyInt&#xff0c;它底层是int类型&#xff0c;但与int是不同…

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

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

Mac版本Android Studio配置LeetCode插件

第一步&#xff1a;Android Studio里面找到Settings&#xff0c;找到Plugins&#xff0c;在Marketplace里面搜索LeetCode Editor。 第二步&#xff1a;安装对应插件&#xff0c;并在Tools->LeetCode Plugin页面输入帐号和密码。 理论上&#xff0c;应该就可以使用了。但是&a…