xss.haozi.me靶场详解

前言

由于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绕过思路和技巧。

  • 8
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值