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 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...

DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...

1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...

R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...