作为我最近对混淆XSS有效负载以绕过WAF进行研究的一部分,我正在研究SVG元素集,animate,animateTransform和animateMotion。 我使用这些标记将了一些已知的XSS向量添加到备忘单。然后专注于动画标签,我使用values属性找到了一个有趣的XSS向量。 values属性可让您为以分号分隔的SVG动画指定许多值:
<svg><animate values="1;2;3" /></svg>
我想知道是否可以在values属性的中间包含一个JavaScript URL-这可能会使许多寻求JavaScript协议的WAF感到困惑。 问题是,如果我没有设置持续时间,那么将始终显示第一个值,如果我设置了持续时间,则URL将循环显示这些值,因此并不总是显示JavaScript URL。 在查看SVG规范时,我注意到有一个keyTimes属性,该属性可让您控制每个值的动画步调。 将此属性与repeatCount属性一起使用将使动画始终显示JavaScript URL。 这是最终的XSS向量:
<svg><animate xlink:href=#xss attributeName=href dur=5s repeatCount=indefinite keytimes=0;0;1 values="https://portswigger.net?;javascript:alert(1);0" /><a id=xss><text x=20 y=20>XSS</text></a>
我们已经在网络安全学会中发布了基于此技术构建的交互式XSS实验室,因此您可以自己尝试一下:
该向量还将很快集成到我们的XSS备忘单中。 请享用!