声明:
由于笔者能力有限,难免出现各种错误和漏洞。全文仅作为个人笔记,仅供参考。
笔记内容来源于各类网课。
环境:
XSS 挑战 Level5, Firefox浏览器,BurpSuite(XSS Challenges Stage #11打不开)
一、概述
绕过替换script和on事件的XSS。
二、XSS探测
1. 正常的数据提交
提交123abc,数据显示在input的value属性中。
数据回显在input的value属性中。
2. 代码审查和Payload
通过代码审计,我们尝试闭合标签映入脚本。
"> 123abc
数据可闭合input标签,我们继续尝试使用JS。
"> <script>alert(1);</script>
这里的script被过滤成了sc_ript,无法正常引入脚本。
我们再尝试,使用img标签引入事件。
"> <img src=x onerror=alert(1)>
on事件也被过滤成on_,无法正常触发。
目前后台过滤了script(script->sc_ript)和on(on->on_)。
那我们可以考试使用javascript伪协议,将javascript中的任意字母大写,或者在中间加入空格。
我们尝试如下Payload。
"> <a href="javascript:alert(1);">
"> <a href="javasCrIpt:alert(1);">
"> <a href="javascript:alert(1);">
都可以被嵌入成功并执行。第三个是使用编码,将s改写为编码形式。
为什么第一个payload可以执行,我们进一步分析。
"> <a href="<script:alert(1);">
发现过滤的是<script,没有过滤script。所以使用javascript可以绕过。