pikachu之XSS

XSS(跨站脚本)概述

Cross-Site Scripting 简称为“CSS”,为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS。一般XSS可以分为如下几种常见类型:
1.反射性XSS;
2.存储型XSS;
3.DOM型XSS;


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

pikachu之XSS

反射型xss(get)

问我喜欢的NBA球星,那必然牢大,然后直接出来页面。

尝试随便输入123,我们发现输入的内容全都会出现在页面上。

想直接构造<script>alert(1)</script>,但是发现一个问题,这个框框太小了不够用...于是我们打开控制台,找到框框的位置,将框框的20改为100,如下:

这次就能输入了,弹框成功。

或者可以在url的参数进行操作,令参数=<script>alert(1)</script>,弹框即可

反射性xss(post)

点击提示直接登录,再次填入kobe。

这道题跟上题一样,填入paylaod直接弹框,不再多说。

存储型xss

依旧输入<script>alert(1)</script>

反复刷新页面,依然弹窗,说明存储型xss是永久型的。

DOM型xss

这道题我们随便输入一个,发现下面生成了超链接,但是是一个空超链接,无论我们输入什么都是这几个字。

接下来输入百度网址,点击超链接发现可以跳转百度。

那么猜测结构可能是<a href="我们的输入">what do you see?</a>

这样的话输入" >45查看有没有闭合成这样:

<a src="" >45">what do you see?</a>假如成功闭合,那么超链接的文本应该变成

45">what do you see?

可惜没有。

尝试将双引号换成单引号,成功。

输入' οnclick=alert(1)>45

按理来说结构变成这样,应该点击一下就会弹框。

<a src='' onlick=alert(1)>45'>what do you see?</a>

成功。

DOM型xss-x

这里随便输入,然后点击请说出你的伤心往事,然后下面又出现了一个超链接。

点击超链接,然后又出现了一个超链接,并且url参数位置出现了一个#符号。

试着将输入改为http://www.baidu.com,然后点击请输入你的伤心往事,发现url参数增加了我们输入的链接。

点击下面超链接,然后点击出现的另外一个就让往事都随风,都随风吧超链接,成功跳转百度。

构造paylaod

' οnclick=alert(1)>

最终点击就让往事都随风,都随风吧成功弹窗。

源代码如下,这里其实就是我们输入' οnclick=alert(1)>内容会出现在url参数位置,即text=' οnclick=alert(1)>#然后点击请说出你的伤心往事,然后就会执行domxss()函数,这个函数中的

var str =window.location.search就是首先将url的参数从?到最后(或者#,但是不返回#)赋给str,也就是str=?text=' οnclick=alert(1)>,

然后这里var txss = decodeURIComponent(str.split("text=")[1]);,就是将str的内容按照text=进行分隔,然后存入数组。

如:[ "?", "' οnclick=alert(1)>" ],然后提取[1]位置也就是' οnclick=alert(1)>,并且赋值给txss,使用decodeURIComponent()对经过URL编码的字符串进行解码

然后将txss的所有+号换成空格,随后赋值给xss。

然后是最关键的

document.getElementById("dom").innerHTML = "<a href='"+xss+"'>就让往事都随风,都随风吧</a>";

它会将"<a href='"+xss+"'>就让往事都随风,都随风吧</a>";赋值给我们的名为dom属性的内容,而xss就是' οnclick=alert(1)>,所以就是将

"<a href='' οnclick=alert(1)>'>就让往事都随风,都随风吧</a>";赋值给dom,而dom就是一个显示内容的地方,也就是显示出来'>就让往事都随风,都随风吧这个链接,点击就会弹窗。

window.location.search:这是浏览器提供的一个属性,它返回当前页面URL中从问号 ? 开始到末尾(或到#锚点,不返回最后的#)的部分,也就是查询字符串(Query String)。

示例:如果当前页面的URL是 https://example.com/vulnerable-page?text=<script>alert('xss')</script>&other=123,那么 window.location.search 的值就是 "?text=<script>alert('xss')</script>&other=123"

document.getElementById("dom").innerHTML

  • document:代表整个HTML网页文档。

  • .getElementById("dom")获取元素。这是一个方法,用于在 document 中查找一个 id 属性为 "dom" 的HTML元素。

  • .innerHTML获取或设置元素的HTML内容。这个属性代表该元素内部的所有HTML代码。

document.getElementById("dom").innerHTML = "<a href='"+xss+"'>就让往事都随风,都随风吧</a>";

在页面上找到一个ID为 dom 的元素,然后把它里面的所有内容替换成一个新的超链接。这个新链接的地址(href)来自于变量 xss 的值,链接显示的文本是“就让往事都随风,都随风吧”。

xss之盲打

这道题两个框都输入弹框js脚本,发现页面底下就出现了谢谢参与。。。没什么返回

点击提示,进入后台界面,然后登录管理员账号,登录后台的时候弹框了。这种就是xss盲打,攻击者无法看到攻击是否成功,当管理员访问后台的时候就会执行输入的攻击脚本。

xss之过滤

思路一

首先输入<script>alert(1)</script>,发现返回>。

任意输入几个字符,发现会原样返回,那么肯定我们输入的payload某被过滤了。

输入<sad>试一下,发现被过滤。

输入<b>abc</b>,发现<b>起作用了,abc进行了加粗,那么到这里其实可以猜测出系统可能使用了白名单,经过测试,<s>,<img src="">,<a href=""></a>也可以存活。

既然<img src="">可以存活,那么我们可以构造一个payload试一试

payload:<img src="1" οnerrοr="alert(1)">  ##因为图片的地址不正确导致报错从而导致onerror事件触发,其中onerror其实也可以替代成onclick事件,通过点击图片触发弹框事件。

其实<a>超链接标签也存活,那么也可以想到一个思路,构造payload

payload:<a href="#" οnclick=alert(1)>链接</a>

其中#是一个占位符,它的作用有:

1.让这个 <a> 标签保持一个合法链接的样式和行为(鼠标变成小手,有链接颜色),但阻止它进行真正的页面跳转

2.当用户点击这个链接时,浏览器会将页面滚动到顶部(因为 # 代表页面顶部锚点)

可以使用<s>标签,payload:

<s οnclick=alert(1)>123 ##点击划线123即可触发。

思路二

我们输入"<>'on/`() script img href src查看一下回显,发现回显这样。

然后一个一个的进行测试,输入",测试,输入<>,测试...最终发现,如果单个输入的话那么全部都可以输出,这里就要大胆猜测一下了,为什么全部输入的时候script后面的保存完好呢?当然肯定不是单独过滤了script,因为直接输入script的话可以输出。反正肯定跟script有关。

尝试输入"script,'script,<script,>script,()script,/script...

接下来发现,除了<script以外,所有的组合全部都没有被过滤。

尝试输入:<55bf58script,在<和script之间混合数据,最后发现无论混合多少数据或者不加入数据,都会被过滤,那么大胆猜测过滤了<.*script。

可以考虑大小写绕过

payload:

<sCript>alert(1)</sCript>

<sCript>prompt(/xss/)</sCript> <sCript>prompt(`xss`)</sCript> <sCript>prompt('xss')</sCript>

<sCript>confirm(1)</sCript>

这里既然不能使用script,就开始考虑别的如<s>,<img>标签,这里不在赘述。

xss之htmlspecialchars

思路一

输入<script>alert(1)</script>,发现竟然把我记录了!当看到这种超链接那么背后肯定是有<a>标签的。

查看页面源代码,发现<>都被编码了,因此这关想闭合标签是不行了。但是发现单引号没有被html编码,所有可以考虑闭合单引号。

payload:

#' οnclick='confirm(/xss/)'或者#' οnclick='confirm(/xss/)闭合单引号。

思路二

可以之间修改前端代码尝试,然后点击超链接发现弹框。

htmlspecialchars()的作用就是把预定义的字符转换为了HTML实体。预定义的字符如下:

& 成为 &amp;
" 成为 &quot;
' 成为 &#039;或&apos;
< 成为 &lt;
> 成为 &gt;

htmlspecialchars()函数默认是不对单引号进行转义的,要想连单引号一起转义,需要给函数传入参数ENT_QUOTES,所以一般情况下如果遇到htmlspecialchars()函数的话,考虑一下单引号的闭合从而进行攻击。

ENT_COMPAT:默认编码,但是编码双引号不编码单引号
ENT_QUOTES:编码双引号和单引号
ENT_NOQUOTES:不编码任何引号

xss之href输出

思路一

首先输入百度网址,看一下怎么个事,然后点击下面超链接跳转到了百度页面,这道题一想就可以知道在<a>标签上面做手脚。

检查代码,然后在这里发现了我们输入的网址。

更改为这样

<a href="#" οnclick="confirm(`xss`)">...

点击超链接发现弹框。

思路二

同样也可以在输入框构造,但是经过我的测试<,>,',"都被htmlspecialchars()函数编码了,那么想要通过闭合的方法好像行不通了。

这里可以利用JavaScript协议。

payload:

javascript:alert(document.cookie)
javascript:prompt(document.cookie)
javascript:confirm(document.cookie)

输入后点击超链接发现提取了我的cookie。

解析:

javascript: 这是一个伪协议,表示接下来的内容是 JavaScript 代码,可以在当前页面的上下文中执行。
document.cookie: 这是一个 JavaScript 表达式,用于获取当前页面的 Cookie 值。Cookie 是一种用于在客户端和服务器之间存储数据的机制,它可以用于标识和跟踪用户会话状态。xss之js输出

xss之js输出

输入<script>alert(1)</script>,页面没变化,但是查看页面源代码我们发现了下面的一段javascript的if语句,其中ms的内容就是我们输入的内容。

这里尝试闭合,构造:';alert(1);//

完整闭合如下

通过//将';进行注释
如果不注释';的话,那么语句是$ms='';alert(1);';,在红色部分语句可能会发生错误。

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

因为alert(1)本身就在javascript脚本中,所以会直接执行。

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

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

相关文章

【Element Plus `el-select` 下拉菜单响应式定位问题深度解析】

Element Plus el-select 下拉菜单响应式定位问题深度解析 本文档旨在深入剖析一个在响应式布局中常见的 UI 问题&#xff1a;如何确保一个靠近屏幕边缘的 el-select 组件的下拉菜单&#xff0c;在任何屏幕尺寸下都能以预期的、优雅的方式显示。 1. 需求背景 在一个大屏数据展示…

Qt 项目文件(.pro)中添加 UI 文件相关命令

在 Qt 的 .pro 项目文件中&#xff0c;处理 UI 文件&#xff08;.ui 文件&#xff09;通常需要以下配置&#xff1a; 基本 UI 文件配置 自动包含 UI 文件&#xff1a; qmake FORMS yourfile.ui \anotherfile.ui Qt 构建系统会自动使用 uic&#xff08;用户界面编译器&#xff…

展会回顾 | 聚焦医疗前沿 , 礼达先导在广州医博会展示类器官自动化培养技术

8月22-24日&#xff0c;广州医博会在广交会展馆B区圆满落幕。此次盛会汇聚了来自全球医疗健康领域的顶尖专家学者、企业代表与合作伙伴。展会内容涵盖基础研发、临床应用、前沿技术、产业转化、医疗服务及金融支持&#xff0c;全景呈现医疗健康产业的创新生态&#xff0c;成为连…

华为eNSP防火墙综合网络结构训练.docx

1.IP及VLAN规划情况 设备 接口 IP vlan 备注 AR1 g0/0/0 1.1.1.2/28 PPPOE g0/0/1 3.3.3.1/30 g0/0/2 114.114.114.254/24 AR2 g0/0/0 2.2.2.2/28 DHCP g0/0/1 3.3.3.2/30 g0/0/2 100.100.100.254/24 FW1 g1/0/0 10.0.0.1/30 tr…

从 Oracle 到 TiDB,通过ETL工具,高效实现数据拉通

在当前企业数字化转型的浪潮中&#xff0c;打破数据孤岛、实现异构数据库间的数据高效流转已成为提升业务敏捷性与决策效率的关键。许多企业在要将 Oracle 数据库中的海量数据准确地同步至TiDB 分布式数据库时遇到了挑战。这一过程不仅要求数据的绝对一致性&#xff0c;还对同步…

Effective c++ 35条款详解

您问到了最关键的一点&#xff01;这正是策略模式的精妙之处——它通过组合&#xff08;composition&#xff09;而非继承&#xff08;inheritance&#xff09;来实现多态效果。让我详细解释这是如何工作的&#xff0c;以及它与传统继承多态的区别。&#x1f504; 策略模式如何…

51c自动驾驶~合集19

自己的原文哦~ https://blog.51cto.com/whaosoft/11793894 #DRAMA 首个基于Mamba的端到端运动规划器 运动规划是一项具有挑战性的任务&#xff0c;在高度动态和复杂的环境中生成安全可行的轨迹&#xff0c;形成自动驾驶汽车的核心能力。在本文中&#xff0c;我…

大数据新视界 -- Hive 数据仓库:架构深度剖析与核心组件详解(上)(1 / 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

软考 系统架构设计师系列知识点之杂项集萃(137)

接前一篇文章:软考 系统架构设计师系列知识点之杂项集萃(136) 第253题 在面向对象设计中,用于描述目标软件与外部环境之间交互的类被称为( ),它可以( )。 第1空 A. 实体类 B. 边界类 C. 模型类 D. 控制类 正确答案:B。 第2空 A. 表示目标软件系统中具有持久…

(附源码)基于Spring Boot公务员考试信息管理系统设计与实现

摘 要 随着公务员考试日益受到社会的广泛关注&#xff0c;一个高效、便捷的公务员考试信息管理系统显得尤为重要。本文设计并实现了一个基于前端Vue框架&#xff0c;后端采用Java与Spring Boot技术&#xff0c;数据库选用MySQL&#xff0c;并部署在Tomcat服务器上的信息管理系统…

学习JavaScript的第一个简单程序:Hello World

在JavaScript中&#xff0c;最简单的程序是打印"Hello World"。可以通过以下方式实现&#xff1a; console.log("Hello World");将上述代码保存为hello.js文件&#xff0c;通过Node.js运行或在浏览器控制台中执行。 浏览器环境实现 在HTML文件中嵌入Jav…

【Big Data】Alluxio 首个基于云的数据分析和开源AI数据编排技术

目录 1. 什么是 Alluxio&#xff1f;​ 2. Alluxio 的诞生背景&#xff1a;为什么需要数据编排层&#xff1f;​ 痛点 1&#xff1a;计算与存储强耦合&#xff0c;适配成本高​ 痛点 2&#xff1a;跨集群 / 跨云数据移动效率低​ 痛点 3&#xff1a;数据访问延迟高&#x…

uniApp App 嵌入 H5 全流程:通信与跳转细节拆解

在 uniApp App 开发中&#xff0c;通过 WebView 嵌入 H5 页面是常见需求&#xff08;如活动页、第三方页面&#xff09;&#xff0c;核心需解决「H5 与 App 通信」「H5 操作后返回/跳转 App」两大问题。本文基于 DCloud 官方方案&#xff08;原文链接&#xff09;&#xff0c;对…

技能提升必备:鸿蒙HarmonyOS应用开发者认证

技能提升必备&#xff1a;鸿蒙HarmonyOS应用开发者认证&#xff0c;HarmonyOS 认证是华为为开发者打造的能力衡量体系。随着 HarmonyOS 系统影响力不断扩大&#xff0c;市场对相关开发人才需求激增。该认证分为基础与高级等不同级别&#xff0c;覆盖应用开发、设备开发等方向。…

Chromium 架构中的 ContentClient / ContentBrowserClient 设计原理全解析

一、前言在阅读 Chromium 源码时&#xff0c;很多人会对这样一段调用产生疑惑&#xff1a;bool BrowserMainLoop::AudioServiceOutOfProcess() const { return base::FeatureList::IsEnabled(features::kAudioServiceOutOfProcess) && !GetContentClient()->browser…

window和liunx提权学习笔记

liunx提权 反弹shell升级交互式反弹sehell 反弹的服务器 接受的服务器 连接上之后的shell&#xff0c;没有tab键补全&#xff0c;不可以上下键显示历史命令 你会发现并不能如愿所偿&#xff0c;「上下方向键」被强制转换为了 ^[[A、^[[B 等字符。 正是由于「简单 shell」的各种…

毕业项目推荐:47-基于yolov8/yolov5/yolo11的焊缝质量检测识别系统(Python+卷积神经网络)

文章目录 项目介绍大全&#xff08;可点击查看&#xff0c;不定时更新中&#xff09;概要一、整体资源介绍技术要点功能展示&#xff1a;功能1 支持单张图片识别功能2 支持遍历文件夹识别功能3 支持识别视频文件功能4 支持摄像头识别功能5 支持结果文件导出&#xff08;xls格式…

Java实现图像像素化

使用Java实现图像像素化艺术效果&#xff1a;从方案到实践的完整指南引言&#xff1a;像素艺术的复兴与编程实现 在当今高清、视网膜屏幕的时代&#xff0c;像素艺术&#xff08;Pixel Art&#xff09;作为一种复古的数字艺术形式&#xff0c;反而焕发出了新的生命力。从独立游…

SpringBoot 自研运行时 SQL 调用树,3 分钟定位慢 SQL!

在复杂的业务系统中&#xff0c;一个接口往往会执行多条SQL&#xff0c;如何直观地看到这些SQL的调用关系和执行情况&#xff1f; 本文将使用SpringBoot MyBatis拦截器构建一个SQL调用树可视化系统。 项目背景 在日常开发中&#xff0c;我们经常遇到这样的场景&#xff1a; …

部署 Go 项目的 N 种方法

Go 语言&#xff08;Golang&#xff09;以其简单、高效和易于部署的特点&#xff0c;成为了很多企业开发和部署服务的首选语言。无论是微服务架构&#xff0c;还是命令行工具&#xff0c;Go 的编译方式和标准库使得部署变得更加轻松。本文将介绍部署 Go 语言项目的几种常见方法…