Apache Tomcat 默认示例目录不安全配置漏洞
2026/6/2 6:36:18 网站建设 项目流程

Apache Tomcat 默认示例目录不安全配置漏洞

  • 1. 漏洞基础信息
  • 2. 漏洞影响范围
  • 3. 漏洞攻击手法
    • 3.1 examples 目录操纵 Session
    • 3.2 XSS 风险
    • 3.3 CookieExample 信息泄露
  • 4. 漏洞修复
    • 4.1 在生产环境中,移除可能造成信息泄漏的目录(推荐)
    • 4.2 通过配置禁止访问

1. 漏洞基础信息

  • 组件简介: Apache Tomcat 是由 Apache 软件基金会开源的 Servlet 容器与 Web 服务器,是目前 Java Web 领域使用最广泛的中间件之一。Tomcat 在默认安装包中自带了 examples(示例应用)、docs(在线文档)、manager(应用管理后台)、host-manager(虚拟主机管理)等 Web 应用,方便开发者学习和运维使用
  • 漏洞类型:不安全配置 / 信息泄露 / 越权访问(CWE-16、CWE-200、CWE-552)
  • 漏洞危害等级:中危 ~ 高危(取决于业务系统是否依赖共享 Session)
  • 漏洞本质: Tomcat 默认部署后,源码包 Web 根目录下包含 servlets-examples(示例 Servlet)与 tomcat-docs(在线文档)目录,可通过 /examples/ 与 /docs/ 路径在公网直接访问。examples 中包含的 Session、Cookie 操纵示例代码允许任意访问者通过 HTTP 参数读写服务端 Session 与 Cookie

2. 漏洞影响范围

受影响版本:默认安装且未清理示例目录的全版本 Tomcat(5.x ~ 10.x)

示例目录暴露的高危端点:

3. 漏洞攻击手法

3.1 examples 目录操纵 Session

在现实生产环境中,我们很难知道服务器后端的 Session 中是通过什么参数(Name)和值(Value)来判断用户登录状态的。所以就是我们根本很难利用该页面来进行任意用户伪造,只是说理论上是可行的

session样例(/examples/servlets/servlet/SessionExample)允许用户对session进行操纵。因为session可能是全局通用的,所以用户可能可以通过操纵session获取管理员权限

SessionExample代码实现本质上是:

StringdataName=request.getParameter("dataname");StringdataValue=request.getParameter("datavalue");if(dataName!=null&&dataValue!=null){session.setAttribute(dataName,dataValue);}

只要访问 SessionExample 并传入datanamedatavalue,Tomcat 就会把它写入到 Session。

此时,如果另一个 Web 应用使用 Session 并依赖某个字段判定用户身份:

session.setAttribute("login","admin")

则攻击者绕过登录校验。

3.2 XSS 风险

很多 Tomcat Examples 示例页面会存在XSS漏洞,需要进一步测试验证

GET /examples/servlets/servlet/RequestParamExample?firstname=<script>alert(document.cookie)</script>&lastname=test

可借助 XSS 实现钓鱼跳板等攻击行为

3.3 CookieExample 信息泄露

路径:/examples/servlets/servlet/CookieExample

有时候会有意想不到的收获


4. 漏洞修复

4.1 在生产环境中,移除可能造成信息泄漏的目录(推荐)

1、找到Tomcat的安装目录,如 /usr/local/tomcat,以这个目录为例

2、进入 webapps 目录

3、删除以下目录和文件:

  • ROOT/ - 此文件夹是 Tomcat 的默认根应用目录,如果存在测试页面,可能会泄露 Tomcat 版本、服务器信息,默认页包含 “Apache Tomcat” 标识
    • 未部署自定义业务:ROOT 目录里只有 Tomcat 自带的测试页,此时删除整个 ROOT 目录无影响
    • 已部署自定义业务:若已经将自己的业务服务部署到 ROOT 目录,ROOT 目录中包含业务代码 + Tomcat 默认测试页,此时仅需删除测试页文件,常见测试文件如下:
      (1)index.jsp Tomcat 默认欢迎页(访问 http://ip:8080 看到的测试页)
      (2)index.html 备用欢迎页(部分 Tomcat 版本自带)
      (3)tomcat.png/tomcat.svg 测试页上的 Tomcat 图标
      (4)tomcat.css 测试页的样式文件
      (5)RELEASE-NOTES.txt Tomcat 版本更新记录(可能会泄露 Tomcat 版本信息)
      (6)NOTICE/LICENSE Tomcat 版权 / 许可声明(可能会泄露版本相关信息)
  • docs/ - Tomcat 文档,泄露 Tomcat 版本、配置说明(生产环境也应考虑移除)
  • examples/ - 包含 JSP/Servlet/websocket 示例代码,攻击者可通过示例分析漏洞、构造攻击
  • manager/ - 管理后台,若弱密码 / 未授权访问,可部署恶意应用、操控服务器
  • host-manager/(如有)- 主机管理后台,风险同 manager 目录

4、重启Tomcat服务后,尝试访问以下URL,应返回 404(未找到) 状态码或 302 跳转到默认页面:

  • http://your-server:port/examples/
  • http://your-server:port/docs/
  • http://your-server:port/manager/html/
  • http://your-server:port(没有默认的 tomcat 测试页面)

4.2 通过配置禁止访问

如果由于某些原因无法删除文件,可以通过配置来禁止外部访问。

例如,使用Tomcat的 Context 配置:

在 conf/server.xml 或 conf/context.xml 中,为应用配置一个无法访问的规则

<?xml version="1.0" encoding="UTF-8"?><Context><!-- 禁止外部访问 examples 应用 --><ValveclassName="org.apache.catalina.valves.RemoteAddrValve"path="/examples"allow="127.0.0.1|::1"deny="*"denyStatus="403"/><!-- 禁止外部访问 docs 应用 --><ValveclassName="org.apache.catalina.valves.RemoteAddrValve"path="/docs"allow="127.0.0.1|::1"deny="*"denyStatus="403"/><!-- 禁止外部访问 manager/host-manager 应用 --><ValveclassName="org.apache.catalina.valves.RemoteAddrValve"path="/manager"allow="127.0.0.1|::1"deny="*"denyStatus="403"/><ValveclassName="org.apache.catalina.valves.RemoteAddrValve"path="/host-manager"allow="127.0.0.1|::1"deny="*"denyStatus="403"/><WatchedResource>WEB-INF/web.xml</WatchedResource><WatchedResource>${catalina.base}/conf/web.xml</WatchedResource></Context>

只允许来自本机 (127.0.0.1) 的请求,其他所有外部IP的请求都会被拒绝

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询