您当前位置: 首页 » 漏洞预警 » 关于RFD漏洞利用的一些思路

关于RFD漏洞利用的一些思路

2014年11月6日 |

Black Hat Europe 2014会议上公布了一种新型的web攻击方式,即RFD(Reflected-File-Download)。Wooyun Drops也发布了关于此攻击方式的介绍。作者提到的利用方式要求攻击者可控文件名和内容,且非浏览器正常解析的content-type。我们对此漏洞利用做了分析跟进,发现结合部分浏览器html5的特性实现的BUG后,扩大了漏洞的利用场景。

还是先来看下Oren Hafif在google利用的例子。在facebook中插入的一个google链接

facebook

超链接为如下形式内容:

https://www.google.com/s;/ChromeSetup.bat;/ChromeSetup.bat?gs_ri=psy-ab&q=%22%7c%7c%74….

点击后会下载一个bat文件到本地,下载后直接运行效果如下

执行2

成功执行了一个shutdown命令,作者先用了一个双引号闭合掉前面的不可控的双引号,然后利用||符号(命令行中||表示逻辑“或”)保证命令成功执行。

html5中A标签存在一个新的属性download,能够控制下载文件的文件名,结合此漏洞可以扩大利用场景。

比如在html页面中写入

<a href=”test.jpg” download=”abc.jpg”>download test</a>

点击链接时会直接下载文件并且以download属性的值命名

down

经测试chrome/opera/firefox目前均已限制download属性只有在同源时才可以对下载文件重命名(可结合xss或同域下的富文本编辑器绕过)。但测试发现国内的部分浏览器仍然可以在不同域的情况下利用download属性值对文件命名

在这些浏览器下,利用download属性,只需要找到内容可控的链接即可构造RFD攻击场景。通过搜索引擎搜索site:xxx.com inurl:callback,找到大量存在用户可控内容的页面。在找到的地址中更改callback参数为aa||calc提交。

callback点

可以看到我们插入的内容被原样输出

接着在我们可控站点写入如下内容的html

<a href=”http://data.test.com/survey/getcount?id=173&callback=aa||calc” download=”update.bat”>update</a>

访问点击后下载发现可正常保存为update.bat

下载

运行文件效果如下

执行

此外,win7中运行来自于外部计算机的bat等文件默认会弹警告框

warn2

Oren Hafif在ppt中提到当文件名中包含setup、install、update时会绕过警告,测试发现已失效,但是对国内部分浏览器利用中发现即使下载文件保存为123.bat依然可以直接运行

修复建议:

  1. 建议浏览器厂商增加对download属性的同源限制,如果非同源则继承源文件名
  2. 尽量通过白名单限制Callback内容,如不能限制使用正则精确匹配,如仅允许a-zA-Z
  3. 带有可控内容页面的返回头设置浏览器可正常解析的content-type(不解析的情况下会直接弹出下载)
  4. 如果使用Content-Disposition: attachment,请不要让用户自定义文件名

参考文档:

  1. https://www.blackhat.com/docs/eu-14/materials/eu-14-Hafif-Reflected-File-Download-A-New-Web-Attack-Vector.pdf
  2. http://www.w3schools.com/tags/att_a_download.asp
分类:

漏洞预警

| 标签:

4 条评论。

  1. 我想说的是。。你在可控网站上用下载标签写一个下载链接,也就是说你在你的网站上放一个下载恶意文件的链接为什么还要用如此复杂的手段?已经失去了反射下载的意义,既然是可控网站,我为什么不直接放一个恶意文件的链接,还要用反射下载这种蛋疼的方式呢。这不能算是扩大吧。欢迎交流

    • 这位同学你好,反射文件下载的本身含义是指无需在可信网站上传恶意程序而实现下载恶意程序,可能我这里的例子中的超链接换成了test.com,所以看起来容易被误解,但是实际中这个test.com就是一个可信网站,本例中的截图本身也确实是一个可信站点的,原作者在paper中有提到这点,当时做了个调查,referer可信与host可信,%81的人会选择host可信,所以这里我换一种方式解释,你可以理解成我在自己可控的网站a.com上插入了一个可信host,如google.com的连接,当用户看到点击内容是google上的连接,一样会认为是可信的

      • ok,还是那个问题,你有一个可控的、可以写标签的、可信网站了,既然可信,为什么不直接加下载链接:http://test.com/1.bat,还要如此麻烦的使用反射下载?目测失去了意义。

  2. 跟贵站求个友情链接