前 言
很多白帽子在挖掘XSS漏洞的时候,往往会遇到一个问题,就是明明发现这里的过滤有缺陷,但是就是没法成功的进行构造利用。可能会由于自身对XSS绕过的局限性思维,往往只会反复的去尝试各种不同 payload代码,寄希望于其中某一个可以绕过过滤。但是在遇到强有力的XSS防御措施下,往往只能是竹篮打水一场空。
鉴于这种情况,这里主要分3个章节来简单的分享一些XSS绕过思路。
【第一节】 白名单限制绕过
【第二节】 黑名单限制绕过
【第三节】 长度限制绕过
本次主要说的是【第一节】白名单限制绕过的情况
所谓的白名单,就是指允许某些字符输入,其他一概拒绝,相对黑名单策略,白名单更加安全。
这里直入正题,说说以下几种可能存在XSS的情况。
一、输出在html标签之间这种只要以白名单的方式,过滤了>< 直接无解,这里就直接略过了。
二、输出在html属性里这种情况的主要有两种利用方法。
>>>> 2.1 第一种,是利用引号和>闭合前面的标签,或者利用html的解析优先级,来逃出引号的限制,实现XSS的构造。
比如 这种情况,可以用下面的代码形成xss
">
">
这种方法比较简单,也比较常见,先用引号和>闭合掉标签,然后再构造。如果这时候,引号被白名单过滤掉了,那么在某种情况下,也可以利用html解析的优先级进行绕过,比如:
可以用下面的代码形成xss
在浏览器里,会优先解析title标签,这样就成功跳出了引号的限制,形成XSS。
>>>> 2.2第二种,就是利用闭合属性,跳出引号,再构造新的属性,形成xss
比如 这种情况,src内容可控,可以用下面的代码形成xss
如果说这里白名单过滤掉了引号,其实某种情况下,还可以利用html实体编码进行绕过。比如 然后onerror属性可控,但是白名单又将所有字母括号给直接过滤掉,这时候不能直接写alert(1),但是由于在html标签的属性里,就可以用下面的编码进行绕过。