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执行任意可执行文件。在本篇论文中,我们关注了一下四类可执行文件。
- PHP
a. 将PHP通过UFU漏洞提交并执行
b. 攻击者可以通过URL执行提交的PHP文件
注意,.htaccess 是Apache的一个配置文件,它包含了对每个目录单位的配置指令。它对每个文件夹下的文件定义了访问控制权限,也定义了哪个文件可以被PHP编译器执行。PHP应用程序开发人员可以通过**.htaccess**文件来限制上传到服务器的文件的入口点。在这种情况下攻击者不能够再执行PHP文件。在本文中,还是将这种情况的PHP我呢见定义为UFU漏洞,因为可能是PCE。如,考虑到一种攻击:
- (X)HTML
HTML或XHTML也是很危险的,因为可能会注入JS代码。如下图所示。这将允许攻击者不受限制的访问受害者cookies中的敏感信息,以及有SOP保存的本地存储。这是一个存储型XSS攻击。任何基于域名的CSP提供了基本没有的保护,因为这个恶意的HTML是在目标WEB服务器内。
- JS
许多网络级防火墙或CSP使用域名通过黑名单或白名单来阻止内容资源请求获取JS文件。通过将恶意JS脚本上传到服务器,攻击者可以将可以将恶意JS脚本分发给受害者,或者绕过CSP策略。
MOTIVATION
A. Threat Model
攻击者只是一个普通的注册用户,仅能通过网站上传文件接口上传文件。攻击者的目标是上传一个文件,该文件可以再服务器端触发PHP编译器,或者在客户端浏览器,之后执行攻击脚本。攻击者可以利用现有的LFI漏洞来启动上传文件的执行。
B. Technical Challenges
- Application-specific checks
不一样的应用程序执行他们自己的内容过滤检查策略。在由33个常见CMS组成的基准测试中,作者观察到没有应用程序实现相同的内容过滤逻辑。 识别漏洞和利用漏洞并执行是同样重要的。 - Executable uploaded files
Our methodology 目标是,寻找U(E)FU漏洞,这个漏洞允许上传种子文件并被服务器端或者客户端的PHP编译器执行。
OVERVIEW
- CHAIN COORDINATOR
它指定了如何生成一系列变异的上传请求 - UPLOAD AGENT
该模块负责为给定的种子文件生成上载请求,并根据CHAIN COORDINATOR计算的给定链来更改原始请求。 - 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是否可以执行上传的文件。
- 是否成功,可以直接使用正则表达式对返回的结果进行判断。
- 获取URL(三个方法)
- Common prefix of URLs. URL+文件名
- Upload response and summary webpage. 从返回的结果中查看URL;而且有的页面还有摘要页面,可以直接查看其中我们上传文件名是否存在。
- File Monitor. 文件监视器是监视组件,安装在承载目标Web应用程序的Web服务器上。 它是一次性设置工具,可监视Web根目录下的任何文件创建事件。
Common prefix of URLs.
- 是否可执行
- PHP—— 作者动态生成了FUSE_GEN,如果页面中可以检测到FUSE_GEN,则CE成功,否则为PCE风险。
- HTML/JS/XHTML——作者比较了上传上去的和下载下来的文件,若没有区别,则判定为上可执行文件。接下来,作者下载了这些文件,并检查浏览器Content-Type表头中是否包含在
作者选择的10种MIME类型中。
- Uploading.htaccess
FUSE进一步检查了上传一个.htaccess文件的可行性。因为前面提到了,如果攻击者可以上传htaccess文件,那么她就可以控制PHP编译器执行上传的文件。这是一个关键的安全威胁,它使具有PCE风险的UFU漏洞演变为导致CE的UEFU漏洞。
MUTATION OPERATIONS
这一部分是作者绕过上传文件检查的技术细节。
-
初步研究 作者研究了已知的CVE,从网络上探究了现有的变异技术,以及先前的文献。
-
脚本运行的环境
-
变异向量
-
变异目标
- 检查是否缺少内容检查机制
- 根据Content部分产生不正确的类型推断。这里有一个变色龙攻击,就是将一种类型的文件伪装成另一种,用以逃避服务器或者浏览器的检查。作者在这里扩展了这种想法,包括了可以运行恶意文件的浏览器和服务器对上传文件的“看法”。具体来说,我们的目标是从PHP内置函数(包括引用infoContent的finfo_file和mime_content_type)中导致错误的类型推断。
- 根据插件利用了不完成的白名单或者黑名单
- 根据Content部分绕过管检测过滤逻辑
- 根据Content-Type部分绕过管检测过滤逻辑
-
变异操作
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