xss
0x00
第一关,就是一个常规的payload
0x01
将textarea闭合即可
0x02
同理,将引号闭合,构造payload
0x03
过滤了中括号和小括号,用反引号代替即可
0x04
这里用到的时onerror,一旦有出错就会执行其中的js代码,所以这里让img中的图片地址为空,它找不到图片就出错,能够成功执行js代码可以看到这里`都被过滤了。于是只好将其Unicode一下
0x05
可以看到源码注释符的闭合–>被替换为笑哭的emoji,后面才知道原来–!>也是可以用来闭合的,那这就简单了
0x06
可以看到这三种类型均被过滤,中间的是以on开头,=结尾的字符,这不刚好把我onerror=给ban掉吗,那就只好这样了
0x07
1 | function render (input) { |
先分析源码,</,\是转义字符,所以这里表达的是</而且<包含在</中也会被匹配,而^代表取反,这里的用法是除了^字符,总的来说意思就是</>中除了^的所有字符都会被替换为空
这就离谱了,但是当我试着构造payload的时候发现最后根本就不用闭合也可以成功
0x08
这里很明显是过滤了防止我闭合它,这很简单,用空格绕开正则匹配即可
0x09
这题就是要求指定一个特定的URL,按照要求指定即可
这是一个白名单验证,我在网上看到一个有趣的思路
在网址后面随便加个东西让他错误,这样也算对
0x0A
这题是完全没思路了,看来大佬的wp,了解到,当两个url用@连接时,访问到的是后者,且网站目录下有题目作者自己写的js文件,
1 | https://www.segmentfault.com@xss.haozi.me/j.js |
0x0B
查看源码发现所有的字符都会被变成大写,HTML对大小写不敏感,但是js对大小写敏感,所以将js代码部分就行编码即可
0x0C
这关多过滤了一个script,但是我寻思着我上关也没用着script啊,它没防到onerror的方式,直接使用上关payload
1 | <img src="" onerror="alert(1)"> |
0x0D
这题给了个alert却给我注释了,那我直接换行,这样就没注释了hhh,直接输入一个alert(1),但是反现后面跟着多余的’),直接注释掉就行
0x0E
这题啥都过滤完了,直接给我整懵逼了,于是只好看大佬的wp,结果是一个奇怪的符号ſ的大写是s
1 | <ſcript src="https://xss.haozi.me/j.js"></script> |
0x0F
他这个将字符编码感觉没啥用啊,反正编码后的代码处于html标签中,一样的会被还原成正常的样子执行,所有直接进行常规的构造即可
0x10
比较简单,就正常构造
0x11
看起来是转义了很多字符,但是有个问题,就是//被转义过后变成了//但是其实也还是注释符号,于是
0x12
这里双引号被转义防止我们闭合,于是用转义字符加在了双引号前面吗,构造出paylaod
1 | \");alert(1);// |
还看到一种方法,直接用闭合标签
1 | </script><script>alert(1)</script>//<script> |
至此大功告成