XSS Thousand Knocks XSS挑战 WP

地址, twitter上看到的 challenge ,质量比之前的先知挑战赛低很多, 更多考察常见的利用方法和一些 trick , 一些较简单的关就略了, payload都进行了url解码以便看得清楚

level 1-6

常规的xss, 只过滤了一点东西

level 7

<input>标签内属性xss

" onfocus="alert(1)" autofocus="

level 8-9

同上

level 10-11

输出在src里, 用伪协议

level 12

同上, 但是过滤了引号, 用反引号代替

level 13

DOM XSS

level 14

引入一个前面关卡的xss, 然后设置document.domain

level 15

level 16

level 17

level 18

level 19

这道题可以讲一下, 输出点在XSS的位置, 无法逃逸onload的双引号, 并且bot不会点击alert窗口, 导致alert后面的语句不会执行, 但是alert可以设置回调函数, alert(1,0,window.open()) 可以在弹出窗口后直接调用window.open, 至于 javascript 是不是所有函数都可以回调, 目前还不清楚

level 20

双写绕过

level 21

这道题设置了

但是因为他会将script过滤, 所以可以破坏浏览器 xss filter 的检测, 同时大小写可以绕过对script的过滤

level 22-25

四道限制了payload长度的xss, 分别是65, 55, 45, 35个字符

每道题我用的方法都不一样

65个字符:

ip2long就可以小于65

55个字符:

用的短域名, 并且要用<svg/onload=alert(1)来触发xss

一共53个字符, 最后的 > 可以省略

45个字符:

在location.hash处放上payload即可, 41个字符

35个字符:

一个比较有趣的方法, 在自己的vps上布置:

这样传给目标的payload是

只有23个字符

level 26

会自动将payload转换为大写字母, 因为js对大小写敏感, 所以函数基本都无法使用, 但是可以用html实体编码解决:

level 27

不允许.出现的xss

用window[‘location’], document[‘cookie’]可以绕过

level 28

比上一关多过滤了引号, 用反引号绕过

level 29-30

输出在script内, 不允许括号, 引号

level 31-34

输出在xss处, 转义了>没有转义<但是估计是出题人疏忽, <svg/onload=alert(1) 不需要闭合也可以执行

所以这四关都可以用同样的方法解决