XSS反射实战
目录
1.XSS向量编码
2.xss靶场训练(easy)
2.1第一关
2.2第二关
方法一
方法二
2.3第三关
2.4第四关
2.5第五关
2.6第六关
2.7第七关
第一种方法:
第二种方法:
第三个方法:
2.8第八关
1.XSS向量编码
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="author" content="system"><meta name="keywords" content="whoami"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title><script>alert(1)</script></title></head><body><a href="javascript:alert(1)">aa</a><a href="%6a%61%76%61%73%63%72%69%70%74:%61%6c%65%72%74%28%31%29">aaa</a> -----不能解码---因为这一长串是urlcode编码,在href是识别不了的<a href="javascript:%61%6c%65%72%74%28%32%29">aaaa</a>-----可以解码,这一长串先会HTML实体编码成javascript:alert(1),让href认识,然后在urlcode编码<!-- html编码不认识%3a --><a href="javascript%3aalert(3)">bbbbb</a> <!-- 相当于<img src="1"onerror="alert(4)"> <=< --><div><img src=x onerror=alert(4)></div><!-- HTML会把它当作普通字符串,可以显示,但是无法执行 --><textarea><script>alert(5)</script></textarea><textarea><script>alert(6)</script></textarea><!-- 执行 ,实体编码,认单引号--><button onclick="confirm('7');">Button</button><!-- Unicode编码,没有执行,不能编译符号,如等号,单引号,双引号 --><button onclick="confirm('8\u0027);">Button</button><!-- HTML字符实体编码 alert(9); 没有执行,不认识&--><script>alert(9);</script><!-- Unicode 编码 alert,执行 --><script>\u0061\u006c\u0065\u0072\u0074(10);</script><!-- Unicode 编码 alert(11) 执行不了--><script>\u0061\u006c\u0065\u0072\u0074\u0028\u0031\u0031\u0029</script><!-- Unicode 编码 alert 和 12,不能执行 --><script>\u0061\u006c\u0065\u0072\u0074(\u0031\u0032)</script><!-- 不能执行 --><script>alert('13\u0027)</script>//不能执行<script>alert('14\u000a')</script>// html实体编码,urlcode编码,Unicode编码<a href="javascript:%5c%75%30%30%36%31%5c%75%30%30%36%63%5c%75%30%30%36%35%5c%75%30%30%37%32%5c%75%30%30%37%34(15)">ddd</a>
</body>
</html>
1.数据状态中的字符引用
当我们进入数据状态中的字符引用时,确实可以将编码字符进行解码,但是不会进入标签开始的状态在问题4中,“<”和“>”字符被编码为“<”和“>”。当解析器解析完“<div>”并处于“数据状态”时,这两个字符将会被解析。当解析器遇到“&”字符,它会知道这是“数据状态的字符引用”,因此会消耗一个字符引用(例如“<”)并释放出对应字符的token。在这个例子中,对应字符指的是“<”和“>”。读者可能会想:这是不是意味着“<”和“>”的token将会被理解为标签的开始和结束,然后其中的脚本会被执行?答案是脚本并不会被执行。原因是解析器在解析这个字符引用后不会转换到“标签开始状态”。正因为如此,就不会建立新标签。因此,我们能够利用字符实体编码这个行为来转义用户输入的数据从而确保用户输入的数据只能被解析成“数据”
2.RCDATA状态中的字符引用
1. 空元素(Void elements),如<area>,<br>,<base>等等
2. 原始文本元素(Raw text elements),有<script>和<style>
3. RCDATA元素(RCDATA elements),有<textarea>和<title>
4.外部元素(Foreign elements),例如MathML命名空间或者SVG命名空间的元素 ,avg跟图像有关
5.基本元素(Normal elements),即除了以上4种元素以外的元素
五类元素的区别如下:
空元素,不能容纳任何内容(因为它们没有闭合标签,没有内容能够放在开始标签和闭合标签中间)。
原始文本元素,可以容纳文本。
RCDATA元素,可以容纳文本和字符引用。
外部元素,可以容纳文本、字符引用、CDATA段、其他元素和注释
基本元素,可以容纳文本、字符引用、其他元素和注释
3.属性值状态字符引用
2.xss靶场训练(easy)
进入网站:
XSS Game - Learning XSS Made Simple! | Created by PwnFunction
2.1第一关
要求:是显示alert(1337),不能使用用户交互,如a标签,带有点击事件的标签
源码分析
somebody=John,那么这段代码将导致<h2 id="spaghet"></h2>元素的内容更新为John Toucha Ma Spaghet!。
如果URL是http://example.com/(没有somebody查询参数),那么内容将更新为Somebody Toucha Ma Spaghet!。
根据官方文档解释,<script>这个标签并不安全,并不会执行,所以这里使用更为安全的img标签
主要使用的是img触发标签
somebody=<img%20src=1%20οnerrοr="alert(1337)">
图片加载错误时会触发onerror的值,然后把1337显示出来
< 在hmtl中会当作字符串展示在页面上,不会当作标签转义
2.2第二关
源码分析:
从URL的查询参数中获取jeff的值(如果存在),否则使用默认值"JEFFF",然后将这个值嵌入到一个字符串中,并最终将这个字符串。显示在网页上的一个<h2>元素中
innerText元素本身不能渲染,相当于什么标签都不能被执行
方法一
我们可以把关注点放在这句话:
eval(`ma = "Ma name ${jeff}"`)
让eval执行,可以看到就成功了
这里其实就是用的闭合,
相当于执行: eval(`ma="Ma name aaa";alert(1337);""`)
先执行"Ma name aa"的赋值,其次执行:alert(1337);,最后闭合,防止报错
方法二
把输入的全部执行
nan在js中表示非数字类型,
NaN 非数字(not a number)属性是代表非数字值的特殊值。
2.3第三关
过滤了<>
?wey=aaaa"%20οnfοcus=alert(1337)%20autofocus="
如果没有autofocus是需要用户输入,这样属于跟用户交互了,没有满足要求,而添加autofocus是可以让其自动聚焦
2.4第四关
源代码分析:
2秒后会自动提交
在form表单里面的action会出现JavaScript伪协议事件
?ricardo=javascript:alert(1337)
2.5第五关
过滤了括号,反斜杠,转义字符
这里使用了innerHTML,可以还是使用<img src= onerr=">
但是这个题它过滤了括号
这里可以使用url编码去解码成括号
如果直接%28,html无法识别,%2528---转成%28----转成(
?markassbrownlee=<img%20src=1%20οnerrοr=location="javascript:alert%25281337%2529">
2.6第六关
过滤字母数字-------考虑使用编码
js编码
这样就可以绕过使用数字字母,但是这样页面是识别不了了的,还需要url编码,才能被页面解析
然后将编码放在balls
2.7第七关
过滤了转义字符,单引号,双引号,加号,短横杠,感叹号…
同时过滤长度
第一种方法:
js有三种定义函数的方式:
1.function 语句形式
function test1() {
alert("我是test1");
}
2.函数直接量形式
var test2 = function() {
alert("我是test2");
}
3.通过Function构造函数形式定义函数
var test3 = new Function("a", "b", "return a+b;");
第一个字母是大写表示是一个类
这里,可以使用Function()()函数,同时由于还过滤了alert,根据js严格区分大小写的特点,我们可以在路径上输入大写的alert,但是为了能识别出alert,还需要转成小写
?mafia=Function(/ALERT(1337)/.source.toLowerCase())()
第二种方法:
使用parselent函数,tostring函数可以二进制转换
注意:这里为什么数字是30,而不是28,29等其他数字,主要是在二进制里,30才能包含字母t
?mafia=eval(8680439..toString(30))(1337)
parseIn将alert转换成二进制8680439,然后 eval对8680439..toString(30)转换为alert
第三个方法:
使用location.hash.slice函数
location.hash获取的是#后面的内容
Slice()截取函数,slice(1),截取从1开始往后的内容,这样就可以不会把#打印出来
?mafia=eval(location.hash.slice(1))#alert(1337)
2.8第八关
想绕过DOMPurify.sanitize函数是不可能的!!!!
观察setTimeout(ok, 2000),每2秒输出ok,但是ok并没有被定义
所以可以创建ok
.map一个一个取
?boomer=<a%20id=ok%20href="tel:alert(1337)">
a标签的href自动替换成字符串,相当于把tel:alert(1337)当作字符串处理,id=ok,可以获取到href标签, 为什么这里不使用JavaScript,是因为在DOMPurify函数里,把JavaScript拉进了黑名单里,因此我们可以所以它里面的白名单函数如tel 替代JavaScript去执行
相关文章:

XSS反射实战
目录 1.XSS向量编码 2.xss靶场训练(easy) 2.1第一关 2.2第二关 方法一 方法二 2.3第三关 2.4第四关 2.5第五关 2.6第六关 2.7第七关 第一种方法: 第二种方法: 第三个方法: 2.8第八关 1.XSS向量编码 &…...
远程消息传递的艺术:NSDistantObject在Objective-C中的妙用
标题:远程消息传递的艺术:NSDistantObject在Objective-C中的妙用 引言 在Objective-C的丰富生态中,NSDistantObject扮演着至关重要的角色,特别是在处理分布式系统中的远程消息传递。它允许对象之间跨越不同地址空间进行通信&…...

指向派生类的基类指针、强转为 void* 再转为基类指针、此时调用虚函数会发生什么?
指向派生类的基类指针、强转为 void* 再转为基类指针、此时调用虚函数会发生什么? 1、无论指针类型怎么转,类对象内存没有发生任何变化,还是vfptr指向虚函数表,下面是成员变量,这在编译阶段就已经确定好了;…...

操作系统(Linux实战)-进程创建、同步与锁、通信、调度算法-学习笔记
1. 进程的基础概念 1.1 进程是什么? 定义: 进程是操作系统管理的一个程序实例。它包含程序代码及其当前活动的状态。每个进程有自己的内存地址空间,拥有独立的栈、堆、全局变量等。操作系统通过进程来分配资源(如 CPU 时间、内…...

react的setState中为什么不能用++?
背景: 在使用react的过程中产生了一些困惑,handleClick函数的功能是记录点击次数,handleClick函数被绑定到按钮中,每点击一次将通过this.state.counter将累计的点击次数显示在页面上 困惑: 为什么不能直接写prevStat…...

2.2算法的时间复杂度与空间复杂度——经典OJ
本博客的OJ标题均已插入超链接,点击可直接跳转~ 一、消失的数字 1、题目描述 数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗? 2、题目分析 (1)numsS…...

【CentOS 】DHCP 更改为静态 IP 地址并且遇到无法联网
文章目录 引言解决方式标题1. **编辑网络配置文件**:标题2. **确保配置文件包含以下内容**:特别注意 标题3. **重启网络服务**:标题4. **检查配置是否生效**:标题5. **测试网络连接**:标题6. **检查路由表**࿱…...

Linux 操作系统 --- 信号
序言 在本篇内容中,将为大家介绍在操作系统中的一个重要的机制 — 信号。大家可能感到疑惑,好像我在使用 Linux 的过程中并没有接触过信号,这是啥呀?其实我们经常遇到过,当我们运行的进程当进程尝试访问非法内存地址时…...

黑马前端——days09_css
案例 1 页面框架文件 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Compati…...
【Python爬虫】技术深度探索与实践
目录 引言 第一部分:Python爬虫基础 1.1 网络基础 1.2 Python爬虫基本流程 第二部分:进阶技术 2.1 动态网页抓取 2.2 异步编程与并发 2.3 反爬虫机制与应对 第三部分:实践案例 第四部分:法律与道德考量 第五部分&#x…...

智启万象|挖掘广告变现潜力,保障支付安全便捷
谷歌致力于为开发者提供 先进的广告变现与支付解决方案 一起回顾 2024 Google 开发者大会 了解如何利用谷歌最新工具和功能 提高变现收入,优化用户体验,保障交易安全 让变现更上一层楼 广告检查器是谷歌 AdMob 平台最新推出的高级测试工具,开…...

函数递归,匿名、内置行数,模块和包,开发规范
一、递归与二分法 一)递归 1、递归调用的定义 递归调用:在调用一个函数的过程中,直接或间接地调用了函数本身 2、递归分为两类:直接与间接 #直接 def func():print(from func)func()func() # 间接 def foo():print(from foo)bar…...

Springboot3 整合swagger
一、pom.xml <dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-api</artifactId><version>2.1.0</version></dependency> 二、application.yml # SpringDoc配置 # springdoc:swa…...
查看同一网段内所有设备的ip
使用命令提示符(CMD)进行扫描 查看本机IP地址 首先通过 ipconfig /all 命令查看本机的IP地址,确定你的网段,例如 192.168.1.。 Ping网段内每个IP地址 接着使用循环命令: for /L %i IN (1,1,254) DO ping -w 1 -n …...

Spark MLlib 特征工程(上)
文章目录 Spark MLlib 特征工程(上)特征工程预处理 Encoding:StringIndexer特征构建:VectorAssembler特征选择:ChiSqSelector归一化:MinMaxScaler模型训练总结Spark MLlib 特征工程(上) 前面我们一起构建了一个简单的线性回归模型,来预测美国爱荷华州的房价。从模型效果来…...

《SPSS零基础入门教程》学习笔记——03.变量的统计描述
文章目录 3.1 连续变量(1)集中趋势(2)离散趋势(3)分布特征 3.2 分类变量(1)单个分类变量(2)多个分类变量 3.1 连续变量 (1)集中趋势 …...
2024年杭州市网络与信息安全管理员(网络安全管理员)职业技能竞赛的通知
2024年杭州市网络与信息安全管理员(网络安全管理员)职业技能竞赛的通知 一、组织机构 本次竞赛由杭州市总工会牵头,杭州市人力资源和社会保障局联合主办,杭州市萧山区总工会承办,浙江省北大信息技术高等研究院协办。…...
SpringBoot参数校验详解
前言 在web开发时,对于请求参数,一般上都需要进行参数合法性校验的,原先的写法时一个个字段一个个去判断,这种方式太不通用了,Hibernate Validator 是 Bean Validation 规范的参考实现,用于在 Java 应用中…...
安全基础学习-SHA-1(Secure Hash Algorithm 1)算法
SHA-1(Secure Hash Algorithm 1)是一种密码学哈希函数,用于将任意长度的输入数据(消息)转换成一个固定长度的输出(哈希值或摘要),长度为160位(20字节)。SHA-1的主要用途包括数据完整性验证、数字签名、密码存储等。 1、SHA-1 的特性 定长输出:无论输入数据长度是多…...

leetcode350. 两个数组的交集 II,哈希表
leetcode350. 两个数组的交集 II 给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...

(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...

Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...

算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...