xss

img

0x00

第一关,就是一个常规的payload

0x01

将textarea闭合即可

image-20220323003708041

0x02

同理,将引号闭合,构造payload

image-20220323004008131

0x03

过滤了中括号和小括号,用反引号代替即可

image-20220323004428110

0x04

这里用到的时onerror,一旦有出错就会执行其中的js代码,所以这里让img中的图片地址为空,它找不到图片就出错,能够成功执行js代码可以看到这里`都被过滤了。于是只好将其Unicode一下

image-20220323005547618

0x05

可以看到源码注释符的闭合–>被替换为笑哭的emoji,后面才知道原来–!>也是可以用来闭合的,那这就简单了

image-20220323010045253

0x06

image-20220323010521425

可以看到这三种类型均被过滤,中间的是以on开头,=结尾的字符,这不刚好把我onerror=给ban掉吗,那就只好这样了

image-20220323010725357

0x07

1
2
3
4
5
6
function render (input) {
const stripTagsRe = /<\/?[^>]+>/gi

input = input.replace(stripTagsRe, '')
return `<article>${input}</article>`
}

先分析源码,</,\是转义字符,所以这里表达的是</而且<包含在</中也会被匹配,而^代表取反,这里的用法是除了^字符,总的来说意思就是</>中除了^的所有字符都会被替换为空

这就离谱了,但是当我试着构造payload的时候发现最后根本就不用闭合也可以成功image-20220323011516535

0x08

这里很明显是过滤了防止我闭合它,这很简单,用空格绕开正则匹配即可image-20220323011747590

0x09

这题就是要求指定一个特定的URL,按照要求指定即可

image-20220323012050543

这是一个白名单验证,我在网上看到一个有趣的思路

image-20220323012530320

在网址后面随便加个东西让他错误,这样也算对

0x0A

这题是完全没思路了,看来大佬的wp,了解到,当两个url用@连接时,访问到的是后者,且网站目录下有题目作者自己写的js文件,

1
https://www.segmentfault.com@xss.haozi.me/j.js

0x0B

查看源码发现所有的字符都会被变成大写,HTML对大小写不敏感,但是js对大小写敏感,所以将js代码部分就行编码即可

image-20220323013310025

image-20220323013329308

0x0C

这关多过滤了一个script,但是我寻思着我上关也没用着script啊,它没防到onerror的方式,直接使用上关payload

1
<img src="" onerror="&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;">

0x0D

这题给了个alert却给我注释了,那我直接换行,这样就没注释了hhh,直接输入一个alert(1),但是反现后面跟着多余的’),直接注释掉就行image-20220323014743740

0x0E

这题啥都过滤完了,直接给我整懵逼了,于是只好看大佬的wp,结果是一个奇怪的符号ſ的大写是s

1
<ſcript src="https://xss.haozi.me/j.js"></script>

0x0F

他这个将字符编码感觉没啥用啊,反正编码后的代码处于html标签中,一样的会被还原成正常的样子执行,所有直接进行常规的构造即可image-20220323015538671

0x10

比较简单,就正常构造

image-20220323015710395

0x11

看起来是转义了很多字符,但是有个问题,就是//被转义过后变成了//但是其实也还是注释符号,于是image-20220323020031247

0x12

这里双引号被转义防止我们闭合,于是用转义字符加在了双引号前面吗,构造出paylaod

1
\");alert(1);//

还看到一种方法,直接用闭合标签

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

至此大功告成