XSS反射实战

news2024/11/15 13:45:31

目录

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="&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:%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)">  &#60=< -->
         <div>&#60;img src=x onerror=alert(4)&#62;</div>
         <!-- HTML会把它当作普通字符串,可以显示,但是无法执行 -->
         <textarea>&#60;script&#62;alert(5)&#60;/script&#62;</textarea>
         <textarea><script>alert(6)</script></textarea>
         <!-- 执行 ,实体编码,认单引号-->
         <button onclick="confirm('7&#39;);">Button</button>
         <!-- Unicode编码,没有执行,不能编译符号,如等号,单引号,双引号 -->
         <button onclick="confirm('8\u0027);">Button</button>
         <!-- HTML字符实体编码 alert(9);   没有执行,不认识&-->
         <script>&#97;&#108;&#101;&#114;&#116;&#40;&#57;&#41;&#59</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="&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x36;&#x25;&#x33;&#x31;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x36;&#x25;&#x36;&#x33;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x36;&#x25;&#x33;&#x35;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x37;&#x25;&#x33;&#x32;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x37;&#x25;&#x33;&#x34;&#x28;&#x31;&#x35;&#x29;">ddd</a>
</body>
</html>

1.数据状态中的字符引用

当我们进入数据状态中的字符引用时,确实可以将编码字符进行解码,但是不会进入标签开始的状态在问题4中,“<”和“>”字符被编码为“&#60”和“&#62”。当解析器解析完“<div>”并处于“数据状态”时,这两个字符将会被解析。当解析器遇到“&”字符,它会知道这是“数据状态的字符引用”,因此会消耗一个字符引用(例如“&#60”)并释放出对应字符的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去执行

 

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

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

相关文章

二叉树进阶之二叉搜索树:一切的根源

前言&#xff1a; 在学完了简单的容器与C面向对象的三大特性之后&#xff0c;我们首先接触的就是map与set两大容器&#xff0c;但是这两个容器底层实现的原理是什么呢&#xff1f;我们不而知&#xff0c;今天&#xff0c;主要来为学习map与set的底层原理而打好基础&#xff0c…

【精选】学生考勤管理系统设计与实现(源码+辅导+设计)

目录&#xff1a; 系统介绍&#xff1a; 第2章 开发技术介绍 2.1 B/S结构 2.2 Java语言 2.3 springboot框架 2.4 MySQL数据库 系统设计 系统的总体功能设计 系统实现界面&#xff1a; 3.视频演示 系统测试 测试概述 测试结果 参考代码&#xff1a; 为什么选择我&am…

【数据结构】PTA 单链表逆转 C语言

本题要求实现一个函数&#xff0c;将给定的单链表逆转。 函数接口定义&#xff1a; List Reverse( List L ); 其中List结构定义如下&#xff1a; typedef struct Node *PtrToNode; struct Node {ElementType Data; /* 存储结点数据 */PtrToNode Next; /* 指向下一个结点的…

进程间通信学习记录(IPC 机制以及共享内存)

0.System V IPC机制&#xff1a; ①.IPC对象包含&#xff1a;共享内存、消息队列和信号灯集。 ②.每个IPC对象有唯一的ID。 ③.IPC对象创建后一直存在&#xff0c;直到被显示地删除。 ④.每一个IPC对象有一个关联的KEY。&#xff08;其他进程通过KEY访问对应的IPC对象&#xff…

XSS和DOM破坏案例

XSS案例 环境地址&#xff1a;XSS Game - Learning XSS Made Simple! | Created by PwnFunction 1.Ma Spaghet! 源码&#xff1a; <!-- Challenge --> <h2 id"spaghet"></h2> <script>spaghet.innerHTML (new URL(location).searchParam…

【LiteX】【开发板】【BoChenK7】使用Python开发FPGA【SDRAM/DDR/Bootloader】

目录 开发板介绍下载仓库工程设计代码实现 工程构建启动测试Memory测速Bootloader&#xff08;裸机BareMetal程序&#xff09;Bootloader&#xff08;Linux OS&#xff09; 开发板信息 开发板介绍 手头目前只有一个购买的BoChenK7开发板&#xff0c;后续会用它来进行LiteX FPG…

政务大数据解决方案(九)

政务大数据解决方案旨在通过构建高效的数据处理与分析系统&#xff0c;全面整合政府各部门数据资源&#xff0c;运用尖端技术进行深入挖掘与智能分析&#xff0c;为政府决策提供科学、精准的数据支撑&#xff0c;优化政策制定与执行流程&#xff0c;同时通过加强数据安全与隐私…

基于Kotlin Multiplatform实现静态文件服务器(一)

本文将介绍如何基于Kotlin Multiplatform、Jetpack Compose实现静态文件服务器&#xff0c;并运行在Android、Windows以及Linux&#xff08;暂不支持server和mac&#xff09;。 创建KMP&#xff08;Kotlin Multiplatform&#xff09;项目 环境设置 安装Android Studiio 2023.…

Java二十三种设计模式-迭代子模式(16/23)

迭代器模式&#xff1a;顺序访问集合的稳健方式 引言 迭代器模式&#xff08;Iterator Pattern&#xff09;是一种行为型设计模式&#xff0c;它允许顺序访问一个集合对象中的各个元素&#xff0c;而不需要暴露集合的底层表示。 基础知识&#xff0c;java设计模式总体来说设计…

ESP32-C3在MQTT访问时出现“transport_base: Poll timeout or error”问题的分析(1)

笔者最近在测试时,突然遇到了以下错误: 网上看过一些帖子,要么就是只提出遇到了相同问题,但没有解答。如:transport_base: Poll timeout or error, errno=Connection already in progress - ESP32 Forum 要么就是和本问题类似,但不完全相同的问题。如: TRANSPORT_BASE:…

Tomcat学习进阶

目录 Apache Tomcat架构配置线程模型Tomcat 的类加载机制类加载器层次结构类加载流程 Tomcat 的优化策略Tomcat 的集群部署Tomcat故障排查 Apache Tomcat 架构配置 Apache Tomcat是一个开源的Java Servlet容器和Web服务器&#xff0c;它实现了Java EE规范中的Servlet和JSP API。…

mysql中的innodb存储结构

什么是InnoDB存储引擎 InnoDB是MySQL的默认存储引擎&#xff0c;它是一个事务安全的存储引擎&#xff0c;支持行级锁定和外键约束。InnoDB为MySQL提供了高性能、高可靠性和高可用性的解决方案。 InnoDB 的核心特点和功能 事务支持&#xff1a;InnoDB支持ACID事务特性&#x…

[算法题]【模板】前缀和/【模板】二维前缀和

题目链接: 【模板】前缀和 / 【模板】二维前缀和 两道前缀和模板题. 【模板】前缀和: 定义一维前缀和数组: presum[i]: 表示 1 - i 位置的和 状态转移方程: presum[i] presum[i - 1] arr[i - 1] 定义数组时多开一个位置, 下标位置从 1 开始计算, 不从 0 开始是为了避免越界…

我眼中的胶水工作:挑战与机遇并存

我眼中的胶水工作&#xff1a;挑战与机遇并存 胶水工作&#xff0c;看似不起眼&#xff0c;却如同团队运作的隐形脉络&#xff0c;起着至关重要的连接作用。它涵盖了各种各样的任务&#xff0c;从注意到团队成员的阻碍并伸出援手&#xff0c;到审查设计文档&#xff0c;再到新…

实现微信的订阅消息或模板消息API来实现实时通知(服务通知)

实现微信的订阅消息或模板消息API以实现实时通知&#xff0c;需要经过几个关键步骤&#xff0c;包括用户订阅、消息发送和接收消息事件。以下是具体实现流程&#xff1a; 1. 用户订阅消息 首先&#xff0c;需要让用户订阅消息。这通常通过前端代码触发一个授权请求来完成&am…

C:每日一题:字符串左旋

题目&#xff1a;实现一个函数&#xff0c;可以实现字符串的左旋 例如&#xff1a;ABCD左旋一个字符就是BCDA&#xff1b;ABCD左旋两个字符就是CDAB&#xff1b; 1、解题思路&#xff1a; 1.确定目标旋转k个字符&#xff0c;我们要获取字符串的长度 len&#xff0c;目的是根…

8.14 day bug

bug1 好家伙&#xff0c;折腾一个小时没通过&#xff0c;原来是代码写多了 // 定义初始状态 const defaultState {login: false };// 定义 reducer const reducer (state defaultState, action) > {if (action.typeLOGIN) {// 当接收到 LOGIN action 时&#xff0c;更新…

备战秋招60天算法挑战,Day20

题目链接&#xff1a; https://leetcode.cn/problems/reverse-bits/ 视频题解&#xff1a; https://www.bilibili.com/video/BV1W2421Z7bi/ LeetCode 190.颠倒二进制位 题目描述 颠倒给定的 32 位无符号整数的二进制位。 举个例子&#xff1a; 输入&#xff1a;n 00000010…

Nginx--简介、安装、常用命令和配置文件

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 一、Nginx简介 1、nginx介绍 Nginx (engine x) 是一个高性能的 HTTP 和 反向代理 服务&#xff0c;也是一个IMAP/POP3/SMTP服务。因它的稳定性、丰…

分布式锁实现方案--redis、zookeeper、mysql

分布式锁的几种实现方式 悲观锁和乐观锁分布式锁的实现要求 -- 互斥性、避免死锁、可重入性、高可用行、性能互斥-只能有一个客户端持有锁 -- redis setnx避免死锁引入过期时间 -- redis ttl锁过期问题 -- 自动续期 -- redis释放别人锁问题 -- 锁附加唯一性 -- 给每个客户端设置…