xss.haozi.me靶场详解

2023-10-29

前言

由于xss.haozi.me是一个在线靶场, 服务部署在 Github,若网速不好,则需要科学上网。由于本靶场是一个白盒测试的靶场,我们可以看到代码的源码,所以可以直接根据源码的限制的条件来思考如何绕过。

0x00

在这里插入图片描述

通过源码我们发现本关没有任何限制所以直接输入
payload:<script>alert(1)</script>
就可以过关了
在这里插入图片描述

0x01

在这里插入图片描述
进入第一关分析源码得知,将我们输入的数据包裹在<textarea>标签中返回,因为<textarea>为RCDATA元素,在此标签中,只能返回</textarea>标签无法创建其他标签,所以这一关我们需要将<textarea>标签闭合输入其他标签

如果想具体了解<textarea>元素为什么无法创建其他标签可以查看这一篇我写的文章 从XSS Payload学习浏览器解码

payload为:</textarea><script>alert(1)</script>
在这里插入图片描述

0x02

在这里插入图片描述
分析源码可以得知,将输入数据的返回值放在input标签中的value值里,因为本关没有做任何过滤,所以这里有两种绕过方法。

第一种:闭合vlaue值直接写input事件
第二种:闭合input标签,重新写入恶意标签

payload如下:

方法1:aaa" οnclick="alert(1)
方法2:"> <script>alert(1)</script>

由于方法1为点击事件,需要点击文本框才能生效,所以本关推荐方法2。
在这里插入图片描述

在这里插入图片描述

0x03

在这里插入图片描述
进入第三关发现本关通过使用正则表达式来过滤了我们的(),将()替换为空
若对正则表达式不了解的可以查看这篇文章链接: 正则表达式常用语法解析

所以本关我们的思路就是尝试写不带括号的标签,或者通过编码的形式来绕过

以下给出两种payload方法绕过

方法1:使用反引号代替括号
<script>alert`1`</script>
方法二:使用html实体编码对括号进行编码
<img src=1 onerror="alert&#40;1&#41;">:若要使用编码的方法绕过,需要注意html解析规范
例:<script>alert&#40;1&#41;</script>将不会成功
因为<script>标签中解析编码后,不会执行编码后的函数只会将编码后的文本打印出来
所以若要使用编码,通常使用在on事件中的语句进行编码

在这里插入图片描述
在这里插入图片描述

0x04

在这里插入图片描述
进入这一关分析源码发现,在上一关的基础上将我们的反引号也过滤掉了,所以我们直接使用上一关的方法二就能成功绕过了。
在这里插入图片描述

0x05

在这里插入图片描述
进入第五关,分析源码发现将我们输入的数据放在html注释符中,并使用替换函数将注释符-->替换为一个emoji符号。

所以我们的绕过思路就是如何从注释行中逃逸出来。
正常的html注释格式为<!--aaaaa-->,但经过测试可以发现,在html中使用
<!--aaaa--!>的方法也达到注释的效果。
所以本关我们的payload为:--!><script>alert(1)</script>
在这里插入图片描述

0x06

在这里插入图片描述
分析代码可以发现本关将输入数据放在input标签中,并将auto和on关键字>字符进行了一个替换添加。目的防止我们在input标签中使用事件弹窗,也不让使用>对input标签进行闭合。

但因为html的特性,可以不同行执行命令,我们可以在auto、on关键字后换行,再书写=alert(1)函数。payload如下:

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

在这里插入图片描述

0x07

在这里插入图片描述
分析代码发现本关将<>和尖括号中的字符全部过滤,防止我们书写新的标签造成恶意弹窗。

这里就需要利用一个html的特性了,html在解析中有一种纠错机制,img标签不写后面的“>”仍然是可以正常执行的。
payload的为:<img src="1" onerror="alert(1)"
在这里插入图片描述

0x08

在这里插入图片描述
通过分析源码发现,本关将输入数据放入在一个<style>标签中,并过滤了</style>标签防止我们进行闭合操作。

本关的绕过思路是使用换行操作,因为他只识别某一行特定字符进行过滤,但html可以执行不同行的命令,所以使用换行操作进行闭合style标签绕过过滤。

payload为:

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

在这里插入图片描述

0x09

在这里插入图片描述
进入本关分析源码可以发现,如果不输入domainRe变量中的字符串则会直接返回语句Invalid URL,输入正确语句后放入script标签中。

所以本关需要考虑如何把变量中的url闭合
将第一个script闭合后,由于有return的返回值">,所以还需要使用注释符注释就可以绕过了。
在这里插入图片描述
payload为:

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

在这里插入图片描述

0x0A

在这里插入图片描述
进入本关后发现,本关在上一关的基础上,过滤了&、'、"、<、>、\等字符转换为实体编码。

所以本关不能想上一关一样闭合标签了,所以只能思考别的方法进行绕过。
本关可以使用url@重定向的方式进行绕过

在网址中间使用符号@
(例如https://www.google.com@stackoverflow.com)将重定向到
https://stackoverflow.com/网站(@字符后的域URL)。
其中以@分隔的话前面表示的是用户名和密码,后面表示的是登录的网站和端口,
也可以以表示重定向到第二个网站。

所以本关可以在本地写入一个test.js文件,在js文件中写入alert(1)进行重定向
payload为:
http://www.segmentfault.com@127.0.0.1/test.js
在这里插入图片描述

注意:由于不同的浏览器可能会有保护机制,所以本关可能不会显示成功。

0x0B

在这里插入图片描述
本关使用了toUpperCase()函数,将我们输入的数据转换为大写。

这里需要注意一点,在html中语句是不区分大小写的,但在js中语句是严格区分大小写的。所以例如我们直接输入<SCRIPT>ALERT(1)</SCRIPT> ,标签语句可以正常生效,但是标签中的alert函数是js解析,所以导致不会弹窗,所以本关我们将alert函数进行编码就可以绕过了,payload如下:

<img src=1 onerror='&#97;&#108;&#101;&#114;&#116;(1)'>

在这里插入图片描述

0x0C

在这里插入图片描述
进入本关发现在上一关的基础上过滤了script字符,所以我们直接使用上一关的payload就能直接绕过了。
在这里插入图片描述

0x0D

在这里插入图片描述
进入本关发现使用正则表达式过滤<、/、"、'几个符号。又将我们输入的数据放在注释行中。

所以本关想要绕过就只能使用换行符,使用换行符将我们要输入的alert(1)与注释符不在同一行,再将后面的注释符进行注释,就能成功绕过了。

payload如下:

aaaa
alert(1)
-->

在这里插入图片描述

0x0E

在这里插入图片描述
进入本关发现将所有用<开头的字母都进行了替换,让我们无法正常输入标签。

这里需要使用一个xss特殊的绕过技巧,在html中ſ这个字符转换为s,所以我们通过使用这个字符绕过这里的过滤函数。

payload如下:

<ſvg/onload='&#97;&#108;&#101;&#114;&#116;(1)'>

在这里插入图片描述

0x0F

在这里插入图片描述
我们发现本关将特殊字符转换为html实体编码放入img标签中的onerror事件中。

但是在onerror事件中html实体编码是可以正常转换调用的,所以我们可以直接输入')将前面闭合再输入,或;或换行将alert(1)分隔开来,就可以正常执行了。

payload如下:

aaaa');alert(1)//

在这里插入图片描述

0x10

在这里插入图片描述
进入本关发现,将输入的数据直接放入在一个window.data

而这个就相当于windows中弹窗调用,所以直接输入alert(1)就可以成功弹窗了
payload为:
alert(1)
在这里插入图片描述

0x11

在这里插入图片描述
进入本关发现在过滤了许多字符的基础上还将,\n、\r等换行操作给过滤了。

所以我们可以先把前面函数闭合,虽然不能使用换行操作,但是我们可以使用或者将代码分隔开来,再把后面字符使用注释符注释就可以成功绕过了。

payload如下:
"),alert(1)//
在这里插入图片描述

0x12

在这里插入图片描述
本关本质其实和上一关一样,就是将"替换为\,防止闭合前面函数。
但是我们可以通过先输入\符号将\进行转义了,这样双引号就能成功闭合了。

payload为:

\"),alert(1)//

在这里插入图片描述
总结:本靶场主要是白盒测试,多用于拓展xss绕过思路和技巧。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

xss.haozi.me靶场详解 的相关文章

  • Gradle 构建错误:无法从 https://repo1.maven.org/maven2/io/fabric/tools/gradle/maven-metadata.xml 加载 Maven 元数据

    我在 Android studio 中遇到 gradle 构建错误 如下所示 Error A problem occurred configuring project MyApp Could not resolve all dependen
  • 如何让 BlazeDS 忽略属性?

    我有一个 java 类 它有一个带有 getter 和 setter 的字段 以及第二对 getter 和 setter 它们以另一种方式访问 该字段 public class NullAbleId private static final
  • Java 枚举与创建位掩码和检查权限的混淆

    我想将此 c 权限模块移植到 java 但是当我无法将数值保存在数据库中然后将其转换为枚举表示形式时 我很困惑如何执行此操作 在 C 中 我创建一个如下所示的枚举 public enum ArticlePermission CanRead
  • 使用 LinkedList 实现下一个和上一个按钮

    这可能是一个愚蠢的问题 但我很难思考清楚 我编写了一个使用 LinkedList 来移动加载的 MIDI 乐器的方法 我想制作一个下一个和一个上一个按钮 以便每次单击该按钮时都会遍历 LinkedList 如果我硬编码itr next or
  • .properties 中的通配符

    是否存在任何方法 我可以将通配符添加到属性文件中 并且具有所有含义 例如a b c d lalalala 或为所有以结尾的内容设置一个正则表达式a b c anything 普通的 Java 属性文件无法处理这个问题 不 请记住 它实际上是
  • 为 java 游戏创建交互式 GUI

    大家好 我正在创建一个类似于 java 中的 farmville 的游戏 我只是想知道如何实现用户通常单击以与游戏客户端交互的交互式对象 按钮 我不想使用 swing 库 通用 Windows 看起来像对象 我想为我的按钮导入自定义图像 并
  • 动态选择端口号?

    在 Java 中 我需要获取端口号以在同一程序的多个实例之间进行通信 现在 我可以简单地选择一些固定的数字并使用它 但我想知道是否有一种方法可以动态选择端口号 这样我就不必打扰我的用户设置端口号 这是我的一个想法 其工作原理如下 有一个固定
  • HSQL - 识别打开连接的数量

    我正在使用嵌入式 HSQL 数据库服务器 有什么方法可以识别活动打开连接的数量吗 Yes SELECT COUNT FROM INFORMATION SCHEMA SYSTEM SESSIONS
  • 无法创建请求的服务[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]-MySQL

    我是 Hibernate 的新手 我目前正在使用 Spring boot 框架并尝试通过 hibernate 创建数据库表 我知道以前也问过同样的问题 但我似乎无法根据我的环境找出如何修复错误 休眠配置文件
  • Hibernate 的 PersistentSet 不使用 hashCode/equals 的自定义实现

    所以我有一本实体书 public class Book private String id private String name private String description private Image coverImage pr
  • tomcat 中受密码保护的应用程序

    我正在使用 JSP Servlet 开发一个Web应用程序 并且我使用了Tomcat 7 0 33 as a web container 所以我的要求是tomcat中的每个应用程序都会password像受保护的manager applica
  • 为什么 Java 8 不允许非公共默认方法?

    让我们举个例子 public interface Testerface default public String example return Hello public class Tester implements Testerface
  • 最新的 Hibernate 和 Derby:无法建立 JDBC 连接

    我正在尝试创建一个使用 Hibernate 连接到 Derby 数据库的准系统项目 我正在使用 Hibernate 和 Derby 的最新版本 但我得到的是通用的Unable to make JDBC Connection error 这是
  • Android:无法使用 DbHelper 和 Contract 类将数据插入 SQLite

    public class Main2Activity extends AppCompatActivity private EditText editText1 editText2 editText3 editText4 private Bu
  • Opencv Java 灰度

    我编写了以下程序 尝试从彩色转换为灰度 Mat newImage Imgcodecs imread q1 jpg Mat image new Mat new Size newImage cols newImage rows CvType C
  • 找不到符号 NOTIFICATION_SERVICE?

    package com test app import android app Notification import android app NotificationManager import android app PendingIn
  • 在java中为组合框分配键

    我想添加一个JComboBox在 Swing 中这很简单 但我想为组合中的每个项目分配值 我有以下代码 JComboBox jc1 new JComboBox jc1 addItem a jc1 addItem b jc1 addItem
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • 双枢轴快速排序和快速排序有什么区别?

    我以前从未见过双枢轴快速排序 是快速排序的升级版吗 双枢轴快速排序和快速排序有什么区别 我在 Java 文档中找到了这个 排序算法是双枢轴快速排序 作者 弗拉基米尔 雅罗斯拉夫斯基 乔恩 本特利和约书亚 布洛赫 这个算法 在许多数据集上提供

随机推荐

  • 2022西山居seed游戏开发训练营笔试复盘

    1 c基础 char arr1 a b c b char arr2 abcd int arr3 10 0 arr1和arr2的区别 cout lt lt sizeof arr1 lt lt endl cout lt lt sizeof ar
  • gcc 选项

    1 c选项 gcc命令后直接跟源文件会对源文件进行预处理 编译 链接生成默认名为a out的可执行文件 而 c选项会处理到编译环节终止 生成一个目标文件 默认名为filename o 它必须再经过链接才最终生成可执行文件 2 g选项 创建符
  • scss、less

    SCSS 是 Sass 3 引入新的语法 是Sassy CSS的简写 是CSS3语法的超集 其语法完全兼容 CSS3 并且继承了 Sass 的强大功能 可以简单理解为scss是sass的一个升级版本 完全兼容sass之前的功能 又有了些新增
  • 吃鸡服务器维护7月5号,绝地求生7月5日更新到几点好?更新进不去怎么办?

    绝地求生7月5日更新内容 绝地求生7月5日更新到几点好 更新进不去怎么办 在绝地求生大逃杀中 为了让大家有个更好的游戏体验环境 绝地求生将于7月5日对游戏进行停机更新 本次更新到几点 很多玩家都不知道 下面就和小编一起去看看 绝地求生正式版
  • SpringBoot 用户登录(二)登录增加验证码

    一 需求分析 SpringBoot 用户登录 一 基础登录 在登录的基础上加上验证码验证 验证码过期时间为一分钟 二 解决思路 在后台生成UUID和验证码返回到前台 并将UUID作为key 验证码内容作为value存入redis 设置过期时
  • ajax获取后台图片数据流如何处理?

    当我们利用ajax从后台获取图片的时候 一般有两种方法 一种是获取后台传递过来的图片的url 一种是获取后台传递过来的图片数据流 当我们获取图片数据流的时候 应该这样处理这些数据流 让它在前台展示出图片 HTML img src alt J
  • 用apache james做简单的垃圾邮件过滤网关(转)

    网络环境如下 三台服务器 1 网关 公网IP 2 domino邮件服务器 3 另一台服务器 通过把网关的端口25 映射到domino服务器上 让domino服务器可以收发邮件 同时domino服务器还要把部分邮件转发到服务器3上 大家的发邮
  • 801冠号大全及桃花荧光

    第一 存量少是801升值的基本依据 801共158个冠号 天蓝 荧光 冠号去除一部分 桃花荧光油墨的占到801的总量的80 以上 有荧光满版网格的又分为 1 满版红桃花荧光 满版底纹网格荧光 2 满版金桃花荧光 满版底纹网格荧光 3 满版桃
  • JavaWeb——SSJDBC(struts2,spring,jdbc)框架,正向工程

    原文地址 http blog csdn net sapce fish article details 52900750 本文采用struts2 spring jdbc搭建web框架 使用正向工程 IDE用myeclipse 数据库用Mysq
  • 实时汇率转换小程序(c++爬虫)

    实时汇率转换小程序 c 爬虫 利用c 网络爬虫爬取网页的实时汇率进行汇率的转换 其中也利用了QT进行了页面设计 define SILENCE STDEXT HASH DEPRECATION WARNINGS include
  • Linux下安装过程中编译PHP时报错:configure: error: jpeglib.h not found.

    今天在搭建LNMP编译PHP时 报错 configure error jpeglib h not found root cac3 php 5 6 22 configure gt prefix usr local php5 gt enable
  • Java Thread Join

    join方法的作用 在A线程中调用了B线程的join 方法时 表示只有当B线程执行完毕时 A线程才能继续执行
  • Opencv之答题卡识别判卷

    项目要求 提供一张答题卡图像 通过图像处理识别出答题卡上每个题的选项 与正确答案对比 得出分数并写在答题卡上 代码实现过程 1 引入需要的库 import numpy as np import cv2 as cv 2 定义绘图函数 def
  • 下代码下代码下代码

    https modelzoo co
  • linux c语言编译成exe,C/C++程序从编译到最终生成可执行文件的过程分析

    C C 程序编译步骤 如何生成可执行文件 电子计算机所使用的是由 0 和 1 组成的二进制数 二进制是计算机的语言的 基础 计算机发明之初 人们只能降贵纡尊 用计算机的语言去命令计算机干这干那 一 句话 就是写出一串串由 0 和 1 组成的
  • QT事件--阐述的比较系统

    转载 http www qtcn org bbs simple t31383 html Another Look at Events 再谈Events 最近在学习Qt事件处理的时候发现一篇很不错的文章 是2004年季刊的一篇文章 网上有这篇
  • 迷宫 蓝桥杯 641

    题目描述 本题为填空题 只需要算出结果后 在代码中使用输出语句将所填结果输出即可 X 星球的一处迷宫游乐场建在某个小山坡上 它是由 10 1010 10 相互连通的小房间组成的 房间的地板上写着一个很大的字母 我们假设玩家是面朝上坡的方向站
  • 单链表的应用(多项式相加)

    目录 题目内容 算法分析 概要设计 流程图 代码块 运行结果 题目内容 完成两个多项式的相加操作 已知有两个多项式Pm x Qm x 设计算法实现Pm x Qm x 运算 而且对加法运算不重新开辟存储空间 要求用链式存储结构实现 例如 Pm
  • 进程的互斥与同步

    一 进程 线程的背景 引入进程 为了描述和实现多个程序的并发执行 以改善资源利用率即提高系统的吞吐量 引入线程 减少程序并发执行时系统所付出的额外开销 使操作系统具有更好的并发性 二 进程的互斥与同步 注意 同步即协调 采用多道程序技术的操
  • xss.haozi.me靶场详解

    xss haozi me靶场详解 前言 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F 0x10 0x11 0x12 前言 由于