1. 项目概述与背景
最近在整理内部安全审计的案例库,翻到了一个老熟人——万户OA的ezOFFICE系统。这个系统在国内不少企事业单位里都有部署,算是OA领域的一个“经典款”。这次要聊的,就是它里面一个名为 fileUpload.controller 的组件存在的任意文件上传漏洞。这个漏洞本身并不复杂,但它的危害性却一点也不小,攻击者利用它可以轻松上传WebShell,进而控制整个服务器。我之所以想把这个复现过程详细写下来,一方面是给安全从业者,特别是刚入行的兄弟们提供一个清晰、可操作的复现参考,避免在搭建环境、构造请求这些基础环节上踩坑;另一方面,也是想通过这个具体的案例,深入聊聊任意文件上传漏洞的通用挖掘思路、利用技巧以及,更重要的是,在真实环境中我们该如何去防御它。毕竟,知其然更要知其所以然,复现漏洞不是目的,理解漏洞产生的根源并构建有效的防御体系才是关键。
这个漏洞的核心在于 fileUpload.controller 这个接口(或者说Servlet)对上传文件的类型、内容缺乏有效的校验和过滤。攻击者可以构造一个特殊的HTTP请求,将一个包含恶意代码(比如JSP的WebShell)的文件伪装成普通文件(如图片)上传到服务器。由于服务器端没有检查文件扩展名与文件内容的真实性,或者检查机制可以被绕过,这个恶意文件就会被成功保存到Web目录下。接下来,攻击者只需要访问这个文件的URL,就能在服务器上执行任意命令,相当于拿到了服务器的“后门钥匙”。整个过程对于有一定经验的安全测试人员来说可能几分钟就能完成,但对于一个缺乏防护的系统而言,后果是灾难性的。
2. 漏洞环境搭建与核心原理剖析
2.1 实验环境准备
工欲善其事,必先利其器。复现漏洞的第一步,就是搭建一个与目标尽可能相似的环境。对于这个万户OA ezOFFICE的漏洞,我们需要准备以下组件:
- 漏洞靶机 :我们需要一个安装了存在漏洞版本万户OA ezOFFICE的服务器。最省事的方法是在本地虚拟机(如VMware或VirtualBox)中部署一个。网络上可以找到一些安全研究者制作好的漏洞环境镜像(例如基于Windows Server 2008/2012 + 特定版本ezOFFICE的虚拟机文件),直接导入启动即可。如果找不到现成的,也可以尝试寻找特定版本的ezOFFICE安装包进行手动安装,但这过程会比较繁琐,涉及数据库配置、中间件部署等。
- 攻击机 :我通常使用Kali Linux作为攻击机,它集成了我们需要的所有工具。当然,任何安装了必要工具的Linux或Windows系统都可以。
- 网络配置 :确保攻击机和靶机在同一个网络内,能够互相ping通。最简单的办法是将虚拟机的网络模式设置为“桥接”或“NAT”(并做好端口转发)。
- 必要工具 :
- Burp Suite :HTTP代理和抓包重放神器,用于拦截、分析和修改我们浏览器与靶机之间的流量,是构造攻击请求的核心工具。
- 浏览器 :任何现代浏览器均可,配合Burp Suite使用。
- 中国蚁剑/AntSword 或 冰蝎/Behinder :WebShell管理工具。当我们的恶意文件(WebShell)成功上传后,需要用这些工具去连接和管理。
- 文本编辑器 :用于编写我们的WebShell代码。
注意 :所有实验务必在授权的、隔离的虚拟环境中进行!严禁对任何未授权的真实系统进行测试,这是法律和职业道德的底线。
2.2 漏洞接口定位与原理深究
为什么是 fileUpload.controller ?这需要我们对Java Web应用,特别是基于Struts、Spring MVC等框架的应用有一定了解。在很多OA、CMS系统中,文件上传功能是一个刚需。开发者为了实现这个功能,往往会编写一个专门的控制器(Controller)或Servlet来处理HTTP的 multipart/form-data 请求。
fileUpload.controller 这个名字非常直白,很可能就是一个处理文件上传的控制器。漏洞的产生,通常源于以下一个或多个环节的缺失或缺陷:
- 前端校验形同虚设 :很多应用只在网页前端用JavaScript检查了文件扩展名(如只允许.jpg, .png)。这种校验可以被轻易绕过,比如直接抓包修改请求,或者禁用浏览器JavaScript。
- 后端校验不严谨 :这是漏洞的重灾区。后端代码可能只检查了文件名后缀,使用了不安全的黑名单(例如禁止上传.php, .jsp),但攻击者可以尝试
.jspx,.jspf,.jsp.(利用解析特性)等变种。更关键的是,它可能没有检查文件的 真实内容 (Magic Number,即文件头字节)。攻击者可以将一个JSP WebShell的内容,前面加上GIF的文件头(GIF89a),然后保存为.gif后缀上传。如果服务器只认后缀,这个“图片”就会被放行。 - 路径可控或可预测 :上传后的文件存储路径,如果可以由攻击者通过请求参数(如
path,folder)部分控制,或者路径是固定的、可预测的,那么攻击者就能知道WebShell的访问地址。 - 解析漏洞耦合 :有时文件本身虽然被保存了,但无法直接执行。如果服务器存在解析漏洞(例如Apache的
xxx.php.jpg被解析为php执行;IIS的


4938

被折叠的 条评论
为什么被折叠?



