Tomcat文件上传漏洞的三种绕过姿势:从CVE-2017-12615看Windows特性利用

张开发
2026/4/6 21:59:19 15 分钟阅读

分享文章

Tomcat文件上传漏洞的三种绕过姿势:从CVE-2017-12615看Windows特性利用
Tomcat文件上传漏洞的三种Windows特性绕过技术解析在Web安全领域中间件的安全配置往往成为攻防双方关注的焦点。作为广泛使用的Java应用服务器Tomcat在特定配置下可能暴露文件上传漏洞尤其是当系统运行于Windows环境时利用操作系统特性可实现多种绕过防护的手段。本文将深入剖析CVE-2017-12615漏洞背景下三种经典的Windows特性绕过技术从原理分析到实战演示为安全研究人员提供全面而深入的技术视角。漏洞背景与核心原理Tomcat作为Apache软件基金会的核心项目是支持Servlet和JSP规范的轻量级应用服务器。2017年曝光的CVE-2017-12615漏洞源于DefaultServlet的配置缺陷——当web.xml中readonly参数被显式设置为false时攻击者可通过HTTP PUT方法上传任意文件。关键限制与突破点默认情况下Tomcat会阻止.jsp/.jspx文件的上传JspServlet仅处理动态请求不处理PUT/DELETE操作Windows文件系统特性为绕过提供了可能性影响范围主要涵盖Tomcat 7.0.0至7.0.81版本该漏洞CVSS评分为8.1属于高危漏洞。成功利用可导致服务器被完全控制危害包括但不限于Web应用数据泄露服务器权限沦陷内网横向渗透跳板Windows环境下的三种绕过技术1. 空格截断技术%20绕过技术原理 Windows系统在保存文件时会自动去除文件名末尾的空格字符而Tomcat在验证文件后缀时却会检查包含空格的完整文件名。这种处理差异形成了安全校验的时间差。操作步骤构造PUT请求PUT /malicious.jsp%20 HTTP/1.1服务器接收到的文件名包含%20空格URL编码Windows存储时自动去除末尾空格保存为malicious.jsp实战演示PUT /cmd.jsp%20 HTTP/1.1 Host: target.com:8080 Content-Type: text/plain Content-Length: 32 % Runtime.getRuntime().exec(calc); %响应码201表示上传成功访问/cmd.jsp即可触发命令执行。2. NTFS数据流特性::$DATA绕过技术原理 NTFS文件系统支持备用数据流(ADS)::$DATA是Windows NTFS文件系统的保留关键字表示文件的主数据流。Tomcat在验证文件名时未正确处理此特殊标识。关键特征对比特性常规文件NTFS数据流文件存储方式主数据流多数据流结构访问方式直接访问需指定流名称大小计算实际大小仅统计主数据流操作流程# 上传包含恶意代码的JSP文件 PUT /shell.jsp::$DATA HTTP/1.1 ...防御视角在web.xml中添加disallowed::$DATA/disallowed使用文件系统审计工具监控异常文件创建3. 非法字符截断/绕过跨平台差异 Windows和Linux系统对文件名中的斜杠处理存在根本差异系统斜杠处理结果文件Windows自动去除shell.jspLinux保留为合法字符shell.jsp/漏洞利用链攻击者上传/evil.jsp/Windows系统存储为evil.jspTomcat校验时看到evil.jsp/认为非jsp文件实际访问evil.jsp触发代码执行防护建议!-- 在web.xml中添加过滤规则 -- filter filter-nameslashFilter/filter-name filter-classcom.example.SlashFilter/filter-class /filter漏洞复现环境搭建为完整演示绕过技术建议搭建以下实验环境基础组件VMware Workstation 16Windows 10/Server 2016JDK 8u201Apache Tomcat 7.0.81配置步骤修改conf/web.xmlinit-param param-namereadonly/param-name param-valuefalse/param-value /init-param调整conf/context.xmlContext privilegedtrue ... /Context启动服务验证配置catalina.bat configtest # 检查配置 startup.bat # 启动服务检测工具准备Burp Suite Community抓包改包冰蝎/BehinderWebshell管理Wireshark网络流量分析深度防御方案配置加固强制开启只读模式init-param param-namereadonly/param-name param-valuetrue/param-value /init-param文件后缀白名单multipart-config allowed-suffixes.jpg,.png,.pdf/allowed-suffixes /multipart-configAJP连接器防护Connector port8009 protocolAJP/1.3 secretRequiredtrue secretComplexPassword123!/架构级防护网络分层设计客户端 → Web防火墙 → 反向代理 → Tomcat集群文件上传安全规范存储路径与Web根目录分离强制重命名上传文件内容校验魔数检测病毒扫描集成监控与响应# 监控webapps目录变化 watch -n 5 find /usr/local/tomcat/webapps -type f -mmin -5漏洞修复与版本升级官方已在新版本中修复此漏洞建议升级路径当前版本安全版本7.0.x≥7.0.828.5.x≥8.5.239.0.x≥9.0.1升级注意事项备份conf/server.xml等配置文件测试环境验证兼容性使用并行部署确保平滑过渡更新后验证漏洞是否修复curl -X PUT http://localhost:8080/test.txt -d test攻击痕迹排查指南当怀疑系统遭受此类攻击时应按以下流程排查日志分析重点SELECT * FROM access_log WHERE request_method PUT AND request_uri LIKE %.jsp%;文件系统异常检查最近修改的.jsp文件webapps/ROOT目录下的异常文件文件大小异常的Web资源后门特征检测Runtime.getRuntime().exec调用可疑的Java反射代码异常的网络连接行为在实战中发现攻击者常结合多种技术增强隐蔽性例如使用JPEG头伪装Webshell通过定时任务维持权限利用DNS隧道进行数据传输延伸思考与最佳实践从防御方视角看真正的安全需要多层次防护开发阶段实施安全的SDLC流程定期安全代码审计自动化漏洞扫描部署阶段最小权限原则运行Tomcat定期进行安全配置核查关键目录设置文件完整性监控运维阶段实时入侵检测系统(IDS)完善的备份恢复机制安全事件响应预案对于安全研究人员建议在合法授权的前提下进行漏洞验证同时关注Tomcat其他历史漏洞如CVE-2020-1938AJP文件包含CVE-2019-0232CGI RCECVE-2016-8735反序列化理解这些漏洞的底层原理才能构建更完善的防御体系。正如安全界常说的防御者需要覆盖所有可能的入口而攻击者只需要找到一个漏洞。这种不对称性正是安全工作者持续面临的挑战。

更多文章