不求甚解

此博客为个人学习之用,如与其他作品雷同,纯属巧合。

导航

漏洞描述

“Apache Tomcat servlet / JSP容器默认文件” 是一个常见的安全风险点。虽然这些默认文件(如示例应用、管理界面、测试页面)在学习和开发阶段非常有用,但在生产环境中必须删除或禁用,否则可能被攻击者利用进行信息泄露、漏洞探测甚至远程代码执行。

 

解决方案:

一、Tomcat 默认安装后常见的“危险”默认文件和目录

目录/文件说明风险等级
/examples JSP 和 Servlet 示例代码(含源码) ⚠️ 高
/manager 应用部署管理界面(可上传 WAR 包) ⚠️ 高
/host-manager 虚拟主机管理界面 ⚠️ 高
/docs Tomcat 官方文档 ❗ 中(信息泄露)
/ROOT 默认首页(index.jsp ✅ 可保留但建议自定义
web.xml 中的默认配置 启用了某些调试功能 ⚠️ 需检查

 

二、临时解决方案:删除默认文件和示例应用(详细步骤)

步骤 1:定位 Tomcat 安装目录

假设你的 Tomcat 安装路径为:

/usr/local/tomcat # Linux
C:\apache-tomcat-9.0.98\ # Windows

进入 `webapps` 目录:

cd /usr/local/tomcat/webapps

步骤 2:备份(可选但推荐)

tar -czf tomcat-webapps-backup.tar.gz examples manager host-manager docs

步骤 3:删除默认示例和管理应用

方法一:直接删除目录(推荐用于生产环境)

rm -rf examples/ # 删除所有 JSP/Servlet 示例
rm -rf manager/ # 删除应用管理器
rm -rf host-manager/ # 删除主机管理器
rm -rf docs/ # 删除文档(可选)

注意:
如果你**需要使用 `manager` 功能**(如热部署),不要删除,但必须**加强安全配置**(见后文)。
`ROOT` 目录可以保留,但建议替换为自定义首页。

步骤 4:验证是否删除成功

重启 Tomcat:
/bin/shutdown.sh
/bin/startup.sh

访问以下 URL,确认返回 **404 Not Found**:

- `http://your-server:8080/examples` → 应无法访问
- `http://your-server:8080/manager` → 应无法访问
- `http://your-server:8080/host-manager` → 应无法访问
- `http://your-server:8080/docs` → 应无法访问

步骤 5:额外安全加固(建议同步执行)

1. 删除 `webapps` 下的默认 `jsp` 和 `servlet` 示例残留

检查是否有以下文件:

find /usr/local/tomcat/webapps -name "*.jsp" -o -name "*.java"

删除不必要的测试文件。

2. 检查并清理 `conf/web.xml`

确保没有启用不必要的功能,例如:

<servlet>
<servlet-name>invoker</servlet-name>
<servlet-class>org.apache.catalina.servlets.InvokerServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>

`InvokerServlet` 允许动态调用任意 Servlet,**极易被利用**,建议注释或删除。

3. 清理 `work` 和 `temp` 目录(可选)

rm -rf /usr/local/tomcat/work/Catalina/*
rm -rf /usr/local/tomcat/temp/*

这些是运行时生成的临时文件,删除后重启会重建。

 

三、如果你必须保留 `manager` 或 `host-manager`

请务必执行以下安全措施:

1. 修改 `conf/tomcat-users.xml`,设置强密码

<tomcat-users>
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="admin" password="StrongP@ssw0rd!2025" roles="manager-gui,admin-gui"/>
</tomcat-users>

2. 限制访问 IP(推荐)

编辑 `webapps/manager/META-INF/context.xml`:

<Context>
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.0\.0\.1|192\.168\.1\.\d+|你的运维IP" />
</Context>

这样只有指定 IP 可以访问管理界面。

 

 四、总结:临时解决方案清单

 

操作是否必须
✅ 删除 /examples 目录 是(高风险)
✅ 删除 /manager(如非必要) 是或加强认证
✅ 删除 /host-manager(如非必要)
✅ 删除 /docs(可选) 推荐
✅ 替换 /ROOT 首页 推荐
✅ 注释 InvokerServlet
✅ 重启 Tomcat

 

后续建议(长期方案)

1. **使用最小化部署**:只部署你的应用 WAR 包,不要保留 `webapps` 下其他内容。
2. **前置反向代理**(Nginx/Apache):隐藏 Tomcat 版本和路径。
3. **定期更新 Tomcat 版本**:避免已知漏洞。
4. **启用访问日志审计**:监控异常请求。