4月12日 | 【NDSS 2020】FUSE: Finding File Upload Bugs via Penetration Testing

FUSE: Finding File Upload Bugs via Penetration Testing

作者

作者 来自于 方向 link 备注
Taekjin Lee 曾经实验室的毕业生 李Taekjin Lee,硕士,现为韩国国家安全研究所研究员。
software and web security, program analysis, fuzz testing, and security education https://seongil-wi.github.io/ 比我大两岁,两篇定会在手
Suyoung Lee finding, analyzing, and patching software vulnerabilities https://leeswimming.com/ 好强呀~现在是硕士转博士
Sooel Son KAIST WSP Lab General topics in Web security/privacy;Static and dynamic program analysis in finding vulnerabilities;Side-channel attack;Web authentication https://sites.google.com/site/ssonkaist/home 这个老师毕业以后去谷歌呆了3年,又回来,中间没发论文,不过近几年发的论很好

实验室

实验室 https://wsp-lab.github.io/ 做web安全的,锁一下

Abstract

作者设计并实现了FUSE,是一个渗透检测软件,用于发现在服务器端PHPweb应用的UFU和UEFU漏洞。

introduction

没看懂 ,先跳过,回来再看也许就看懂了。

Background

File Upload in PHP Web Applications

上传文件的流程,上传到临时的path中,然后如果正确,就传递给真正的path
在这里插入图片描述

UFU and UEFU Vulnerabilities

UFU是一个漏洞,攻击者通过某种方式上传恶意的文件到服务器端,而这个文件可能是可执行的。在文本中,作者定义一个UEFU文件是UFU漏洞,当该文件允许任意可执行代码执通过URL执行任意可执行文件。在本篇论文中,我们关注了一下四类可执行文件。

  1. PHP
    a. 将PHP通过UFU漏洞提交并执行
    b. 攻击者可以通过URL执行提交的PHP文件
    在这里插入图片描述
    注意,.htaccess 是Apache的一个配置文件,它包含了对每个目录单位的配置指令。它对每个文件夹下的文件定义了访问控制权限,也定义了哪个文件可以被PHP编译器执行。PHP应用程序开发人员可以通过**.htaccess**文件来限制上传到服务器的文件的入口点。在这种情况下攻击者不能够再执行PHP文件。在本文中,还是将这种情况的PHP我呢见定义为UFU漏洞,因为可能是PCE。如,考虑到一种攻击:
    在这里插入图片描述
  2. (X)HTML
    HTML或XHTML也是很危险的,因为可能会注入JS代码。如下图所示。这将允许攻击者不受限制的访问受害者cookies中的敏感信息,以及有SOP保存的本地存储。这是一个存储型XSS攻击。任何基于域名的CSP提供了基本没有的保护,因为这个恶意的HTML是在目标WEB服务器内。
    在这里插入图片描述
  3. JS
    许多网络级防火墙或CSP使用域名通过黑名单或白名单来阻止内容资源请求获取JS文件。通过将恶意JS脚本上传到服务器,攻击者可以将可以将恶意JS脚本分发给受害者,或者绕过CSP策略。

MOTIVATION

A. Threat Model
攻击者只是一个普通的注册用户,仅能通过网站上传文件接口上传文件。攻击者的目标是上传一个文件,该文件可以再服务器端触发PHP编译器,或者在客户端浏览器,之后执行攻击脚本。攻击者可以利用现有的LFI漏洞来启动上传文件的执行。

B. Technical Challenges

  1. Application-specific checks
    不一样的应用程序执行他们自己的内容过滤检查策略。在由33个常见CMS组成的基准测试中,作者观察到没有应用程序实现相同的内容过滤逻辑。 识别漏洞和利用漏洞并执行是同样重要的。
  2. Executable uploaded files
    Our methodology 目标是,寻找U(E)FU漏洞,这个漏洞允许上传种子文件并被服务器端或者客户端的PHP编译器执行。

OVERVIEW

在这里插入图片描述

  1. CHAIN COORDINATOR
    它指定了如何生成一系列变异的上传请求
  2. UPLOAD AGENT
    该模块负责为给定的种子文件生成上载请求,并根据CHAIN COORDINATOR计算的给定链来更改原始请求。
  3. UPLOAD VALIDATOR
    UPLOAD VALIDATOR检查是否生成的请求成功上传文件并获得这些上传文件的公共URL。

DESIGN

Specifying a Testing Campaign 指定测试活动

FUSE的输入两个,一个是种子文件,一个是配置文件。
作者认为,指定此配置文件对于查找U(E)FU漏洞而言是可以接受的成本。下图为一个基本配置文件的示例。
在这里插入图片描述

Phase I: Chain Coordination 链协调

链协调步骤用于生成一个用于测试的策略,这个策略用于指定如何修改一个给定的种子请求。然后作者在这里讲述了他是如何通过组合变换以及筛选的过程(如下图所示),在此不作赘述。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Phase II: Mutating and Sending Upload Requests 修改和发送上传请求

作者首先使用了策略文件中的login_page和credential参数,进行目标网站的身份认证。然后UPLOAD AGENT通过修改种子请求和执行上传请求。下图描述了上传的过程。
注意:1. 第四行用于生成CSRF token;2.第5用于把CSRF放进种子请求中;3.第7行同2;4.第8行用于将文件标记为unique文件;5.第8行发送请求。
在这里插入图片描述

Phase III: Upload Validation 上传验证

三个任务:a. 检查Requests是否成功;b. 获取指向上传文件的URL;c. 确认获取的URL是否可以执行上传的文件。

  1. 是否成功,可以直接使用正则表达式对返回的结果进行判断。
  2. 获取URL(三个方法)
    1. Common prefix of URLs. URL+文件名
    2. Upload response and summary webpage. 从返回的结果中查看URL;而且有的页面还有摘要页面,可以直接查看其中我们上传文件名是否存在。
    3. File Monitor. 文件监视器是监视组件,安装在承载目标Web应用程序的Web服务器上。 它是一次性设置工具,可监视Web根目录下的任何文件创建事件。
      Common prefix of URLs.
  3. 是否可执行
    1. PHP—— 作者动态生成了FUSE_GEN,如果页面中可以检测到FUSE_GEN,则CE成功,否则为PCE风险。
    2. HTML/JS/XHTML——作者比较了上传上去的和下载下来的文件,若没有区别,则判定为上可执行文件。接下来,作者下载了这些文件,并检查浏览器Content-Type表头中是否包含在
      作者选择的10种MIME类型中。
  4. Uploading.htaccess
    FUSE进一步检查了上传一个.htaccess文件的可行性。因为前面提到了,如果攻击者可以上传htaccess文件,那么她就可以控制PHP编译器执行上传的文件。这是一个关键的安全威胁,它使具有PCE风险的UFU漏洞演变为导致CE的UEFU漏洞。

MUTATION OPERATIONS

这一部分是作者绕过上传文件检查的技术细节。

  1. 初步研究 作者研究了已知的CVE,从网络上探究了现有的变异技术,以及先前的文献。

  2. 脚本运行的环境

  3. 变异向量 在这里插入图片描述

  4. 变异目标

    1. 检查是否缺少内容检查机制
    2. 根据Content部分产生不正确的类型推断。这里有一个变色龙攻击,就是将一种类型的文件伪装成另一种,用以逃避服务器或者浏览器的检查。作者在这里扩展了这种想法,包括了可以运行恶意文件的浏览器和服务器对上传文件的“看法”。具体来说,我们的目标是从PHP内置函数(包括引用infoContent的finfo_file和mime_content_type)中导致错误的类型推断。
    3. 根据插件利用了不完成的白名单或者黑名单
    4. 根据Content部分绕过管检测过滤逻辑
    5. 根据Content-Type部分绕过管检测过滤逻辑
  5. 变异操作
    在这里插入图片描述

EVALUATION

Experimental Setup

对表II第一栏中列出的33个PHP Web应用程序进行了一系列实验。(覆盖了NAVEX,流行的CMS应用,和在github上超过500个星。
在这里插入图片描述

Discovering UFU and UEFU Vulnerabilities

如图所示是作者发现的漏洞。作者对每一列进行了解释,因为较为直观,这里就不再赘述。
UEFU漏洞(恶意文件只是上传成功了,而且可以被攻击者执行)
作者在本次实验中发现了176个不同的请求,并将其归类为30个可执行的UEFU漏洞,报告给网站,并获得15个CVE。在30个UEFU漏洞中,有14个漏洞需要管理员级别的特权才能利用。这种情况下需要限制恶意管理员上传恶意文件。
作者右检查了是否上传文件会导致远程CE。在176个上传请求有效负载中,一个针对MyBB应用程序的上传请求和两个针对XE的上传请求均为误报(1.7%)。

UFU 漏洞(恶意文件只是上传成功了,但可能执行不了的漏洞)
FUSE发现了在使用了630个不同的上传请求payload后来自30个应用的55个UFU漏洞。

作者进一步检查了是否上传的PHP文件和JS文件确实可执行。作者也发现了一些误报,误报的原因是因为上传的文件被隐藏起来了(比如换了URL或者只放在数据库中)这种情况下攻击者就没办法利用了。

因为可能没有办法利用这个漏洞,作者又进一步检查了是否可以修改.htaccess文件,因为前面说过,修改了这个文件,文件可能就是可执行的了。

Performance 这里说了下程序的执行时间。

Comparison against State-of-the-Art Penetration TestingTools

作者对比了知名的渗透软件fuxploider , and UploadScanner。作者分析了不同之处。
在这里插入图片描述

Effectiveness of Mutations

Operation significance 图七显示了每一种变异技术的频率。
在这里插入图片描述
Chain length 作者还测量了触发U(E)FU漏洞的每个链长的频率。 如图8所示,FUSE报告了45、419、314和28个上传请求,其链长分别为0,1,2和3。
在这里插入图片描述
Vulnerability causes 表IV列出了在应用具有各自突变目标的突变后,FUSE发现的漏洞数量。
在这里插入图片描述
Constraint consistency 约束一致性 然而,当目标执行环境(包括web浏览器和PHP解释器)由于软件更新而改变其执行约束时,这些变异操作应该反映出这些变化。作者主要是查看了不同版本的浏览器和PHP解释器之间保持执行约束的一致性。作者观察到,除一种情况外,所有可执行的JS和(X)HTML变体在不同版本的浏览器中都保持一致。

作者得出的结论是,浏览器更新对FUSE生成可执行上载文件的功能影响很小。 随着PHP解释器的更新,随着时间的推移,FUSE可能需要使用解释器更新来覆盖更多PHP样式的扩展。

Case Studies

作者对发现的问题进行了一些案例的分析

LIMITATION AND DISCUSSION

TO DO LIST

  • SOP
  • CSP
  • LFI漏洞
  • CMS
  • Arachni、Burp、 Zap
  • File Monitor
  • MIME类型
  • chameleonattacks
  • NAVEX W3Techs
展开阅读全文
©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值