> 技术文档 > Tomcat后台爆破,部署WAR包详解

Tomcat后台爆破,部署WAR包详解


Tomcat后台爆破,部署WAR包详解

一、Tomcat管理后台介绍

Apache Tomcat提供了一个基于Web的管理界面,允许管理员通过图形化界面部署、管理Web应用程序。这个功能主要通过两个Web应用实现:

  • Manager App:用于部署、启动、停止、重新加载和删除Web应用程序
  • Host Manager:用于管理虚拟主机

我们将重点讲解如何通过Manager App部署WAR包。

二、环境准备

1. Tomcat版本要求

  • 建议使用Tomcat 8.5.x、9.x或10.x版本
  • 本文以Tomcat 9.0.85为例进行演示
  • 下载地址:https://tomcat.apache.org/download-90.cgi

2. 系统环境

  • 操作系统:Windows/Linux/macOS
  • Java版本:JDK 8或更高版本
  • 内存:建议至少1GB可用内存

三、配置Tomcat管理权限

1. 配置manager-gui角色和用户

编辑conf/tomcat-users.xml文件,添加以下内容:

<tomcat-users xmlns=\"http://tomcat.apache.org/xml\"  xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"  xsi:schemaLocation=\"http://tomcat.apache.org/xml tomcat-users.xsd\"  version=\"1.0\">  <role rolename=\"manager-gui\"/> <role rolename=\"manager-script\"/> <role rolename=\"manager-jmx\"/> <role rolename=\"manager-status\"/>  <user username=\"admin\" password=\"StrongPassw0rd!\" roles=\"manager-gui,manager-script,manager-jmx,manager-status\"/> </tomcat-users>

XML

安全提示:生产环境中应使用强密码,并定期更换。

2. 配置访问限制(可选但推荐)

编辑webapps/manager/META-INF/context.xml文件,配置IP访问限制:

<Context antiResourceLocking=\"false\" privileged=\"true\" > <Valve className=\"org.apache.catalina.valves.RemoteAddrValve\" allow=\"127\\.0\\.0\\.1|::1|YOUR_IP_ADDRESS\" /> <Manager sessionAttributeValueClassNameFilter=\"java\\.lang\\.(?:Boolean|Integer|Long|Number|String)|org\\.apache\\.catalina\\.filters\\.CsrfPreventionFilter\\$LruCache(?:\\$1)?|java\\.util\\.(?:Linked)?HashMap\"/></Context>

XML

YOUR_IP_ADDRESS替换为允许访问的IP地址。

四、准备WAR包

1. 创建测试WAR包

创建一个简单的Web应用示例:

# 创建目录结构mkdir -p myapp/WEB-INF/classesmkdir myapp/images# 创建web.xmlcat > myapp/WEB-INF/web.xml << \'EOF\' My Test Application  index.html EOF# 创建index.htmlcat > myapp/index.html << \'EOF\' My Test Application  

Hello from My Test Application!

Deployed successfully at:

document.getElementById(\"time\").innerHTML = new Date().toString(); EOF
# 打包成WAR文件cd myappjar -cvf ../myapp.war *cd ..

Bash

2. 验证WAR包结构

# 查看WAR包内容jar -tf myapp.war

Bash

预期输出:

index.htmlWEB-INF/WEB-INF/web.xmlWEB-INF/classes/

Plain text

五、部署WAR包的三种方式

方式一:通过Web界面部署(推荐用于学习)

  1. 启动Tomcat服务器
# Linux/Macbin/startup.sh# Windowsbin\\startup.bat

Bash

  1. 访问管理界面
  • 打开浏览器访问:http://localhost:8080/manager/html
  • 使用前面配置的用户名和密码登录
  1. 部署WAR包
  • 在\"Deploy\"部分,选择\"WAR file to deploy\"
  • 点击\"Choose File\"选择你的WAR文件
  • 点击\"Deploy\"按钮

方式二:通过Manager API部署(推荐用于自动化)

使用curl命令通过REST API部署:

# 部署WAR包curl -u admin:StrongPassw0rd! \\ -T myapp.war \\ \"http://localhost:8080/manager/text/deploy?path=/myapp&update=true\"# 检查部署状态curl -u admin:StrongPassw0rd! \\ \"http://localhost:8080/manager/text/list\"# 重新加载应用(如果已存在)curl -u admin:StrongPassw0rd! \\ \"http://localhost:8080/manager/text/reload?path=/myapp\"# 停止应用curl -u admin:StrongPassw0rd! \\ \"http://localhost:8080/manager/text/stop?path=/myapp\"# 启动应用curl -u admin:StrongPassw0rd! \\ \"http://localhost:8080/manager/text/start?path=/myapp\"# 卸载应用curl -u admin:StrongPassw0rd! \\ \"http://localhost:8080/manager/text/undeploy?path=/myapp\"

Bash

方式三:直接放置到webapps目录(最简单)

# 复制WAR文件到webapps目录cp myapp.war $CATALINA_HOME/webapps/# Tomcat会自动解压并部署# 或者创建自动部署目录mkdir $CATALINA_HOME/webapps/myappcp myapp.war $CATALINA_HOME/webapps/myapp/myapp.war

Bash

六、验证部署结果

1. 检查应用状态

# 通过Manager API检查curl -u admin:StrongPassw0rd! \"http://localhost:8080/manager/text/list\"

Bash

输出示例:

OK - Listed applications for virtual host localhost/myapp:running:0:myapp/manager:running:0:manager/host-manager:running:0:host-manager/ROOT:running:0:ROOT

Plain text

2. 访问应用

打开浏览器访问:http://localhost:8080/myapp/

应该能看到\"Hello from My Test Application!\"页面。

3. 检查日志

查看Tomcat日志确认部署过程:

# Linux/Mactail -f $CATALINA_HOME/logs/catalina.out# Windowstype %CATALINA_HOME%\\logs\\catalina.out

Bash

七、常见问题排查

1. 403 Access Denied错误

原因:IP地址不在允许列表中

解决方案

<Valve className=\"org.apache.catalina.valves.RemoteAddrValve\" allow=\"127\\.0\\.0\\.1|::1|YOUR_IP|ANOTHER_IP\" />

XML

2. 401 Unauthorized错误

原因:用户名或密码错误

解决方案

  • 检查conf/tomcat-users.xml中的用户名和密码
  • 确认角色manager-gui已分配给用户

3. 部署失败:内存不足

解决方案

# 增加JVM内存export CATALINA_OPTS=\"-Xms512m -Xmx1024m -XX:MaxPermSize=256m\"# 然后启动Tomcat

Bash

4. WAR包无法自动部署

检查项

  • 确认WAR包格式正确
  • 检查web.xml是否符合规范
  • 查看catalina.out日志中的具体错误信息

八、安全最佳实践

1. 生产环境安全配置

<tomcat-users> <role rolename=\"manager-gui\"/> <role rolename=\"manager-script\"/> <user username=\"deploy-user\"  password=\"$2a$10$hashedpassword\"  roles=\"manager-script\"/> <user username=\"admin-user\"  password=\"$2a$10$anotherhashed\"  roles=\"manager-gui\"/></tomcat-users>

XML

原则

  • 部署使用专用用户(仅manager-script权限)
  • GUI管理使用另一用户(manager-gui权限)
  • 使用强密码并定期更换

2. 禁用不必要的管理应用

如果不需要Host Manager,可以删除或重命名:

mv webapps/host-manager webapps/host-manager.bak

Bash

3. 配置HTTPS

<Connector port=\"8443\" protocol=\"org.apache.coyote.http11.Http11NioProtocol\"  maxThreads=\"150\" SSLEnabled=\"true\"> <SSLHostConfig> <Certificate certificateKeystoreFile=\"conf/localhost-rsa.jks\"  type=\"RSA\" /> </SSLHostConfig></Connector>

XML

生成证书:

keytool -genkeypair -alias localhost -keyalg RSA -keysize 2048 \\ -keystore conf/localhost-rsa.jks -validity 3650

Bash

九、自动化部署脚本

创建一个自动化部署脚本deploy.sh

#!/bin/bash# 配置变量TOMCAT_URL=\"http://localhost:8080\"USERNAME=\"admin\"PASSWORD=\"StrongPassw0rd!\"WAR_FILE=\"myapp.war\"CONTEXT_PATH=\"/myapp\"# 函数:检查应用是否存在check_app_exists() { local status=$(curl -s -u \"$USERNAME:$PASSWORD\" \\  \"$TOMCAT_URL/manager/text/list\" | \\  grep \"$CONTEXT_PATH\" || echo \"not_found\") if [[ \"$status\" != \"not_found\" ]]; then echo \"exists\" else echo \"not_exists\" fi}# 函数:部署应用deploy_app() { echo \"Deploying $WAR_FILE to $CONTEXT_PATH...\" local response=$(curl -s -u \"$USERNAME:$PASSWORD\" \\-T \"$WAR_FILE\" \\\"$TOMCAT_URL/manager/text/deploy?path=$CONTEXT_PATH&update=true\") if [[ \"$response\" == *\"OK\"* ]]; then echo \"Deployment successful!\" return 0 else echo \"Deployment failed: $response\" return 1 fi}# 函数:检查部署状态check_status() { echo \"Checking deployment status...\" curl -u \"$USERNAME:$PASSWORD\" \"$TOMCAT_URL/manager/text/list\" | \\ grep \"$CONTEXT_PATH\"}# 主程序main() { if [ ! -f \"$WAR_FILE\" ]; then echo \"Error: WAR file \'$WAR_FILE\' not found!\" exit 1 fi local app_status=$(check_app_exists) if [ \"$app_status\" == \"exists\" ]; then echo \"Application already exists. Will update...\" else echo \"Application does not exist. Will create new deployment...\" fi if deploy_app; then echo \"Verifying deployment...\" sleep 2 check_status echo \"Deployment completed successfully!\" else echo \"Deployment failed!\" exit 1 fi}# 执行主程序main \"$@\"

Bash

使用方法:

chmod +x deploy.sh./deploy.sh

Bash

十、高级部署技巧

1. 灰度发布

通过不同的上下文路径实现灰度发布:

# 部署新版本到新路径curl -u admin:StrongPassw0rd! \\ -T myapp-v2.war \\ \"http://localhost:8080/manager/text/deploy?path=/myapp-new&update=true\"# 测试新版本curl http://localhost:8080/myapp-new# 如果测试通过,替换旧版本curl -u admin:StrongPassw0rd! \\ \"http://localhost:8080/manager/text/undeploy?path=/myapp\" curl -u admin:StrongPassw0rd! \\ -T myapp-v2.war \\ \"http://localhost:8080/manager/text/deploy?path=/myapp&update=true\"

Bash

2. 集群环境部署

对于Tomcat集群,可以使用以下策略:

# 定义集群节点NODES=(\"node1:8080\" \"node2:8080\" \"node3:8080\")# 并行部署到所有节点for node in \"${NODES[@]}\"; do curl -u admin:StrongPassw0rd! \\ -T myapp.war \\ \"http://$node/manager/text/deploy?path=/myapp&update=true\" &done# 等待所有部署完成waitecho \"Deployed to all cluster nodes\"

Bash

十一、监控与维护

1. 监控脚本

创建监控脚本monitor.sh

#!/bin/bashTOMCAT_URL=\"http://localhost:8080\"APP_PATH=\"/myapp\"CHECK_INTERVAL=60 # 检查间隔(秒)while true; do # 检查应用健康状态 HTTP_CODE=$(curl -s -o /dev/null -w \"%{http_code}\" \"$TOMCAT_URL$APP_PATH\") if [ \"$HTTP_CODE\" != \"200\" ]; then echo \"$(date): Application is DOWN! HTTP Code: $HTTP_CODE\" # 可以添加告警通知,如发送邮件或短信 # send_alert \"Application is down\" else echo \"$(date): Application is UP\" fi sleep $CHECK_INTERVALdone

Bash

2. 自动化备份

#!/bin/bash# 备份已部署的应用BACKUP_DIR=\"/opt/tomcat/backups\"DATE=$(date +%Y%m%d_%H%M%S)mkdir -p \"$BACKUP_DIR\"# 备份特定应用cp \"$CATALINA_HOME/webapps/myapp.war\" \"$BACKUP_DIR/myapp_$DATE.war\"cp -r \"$CATALINA_HOME/webapps/myapp\" \"$BACKUP_DIR/myapp_$DATE\"# 保留最近7天的备份find \"$BACKUP_DIR\" -name \"myapp_*\" -mtime +7 -delete

Bash

十二、总结

通过以上详细步骤,您已经掌握了Tomcat后台部署WAR包的完整流程:

  1. 基础部署:通过Web界面或API部署WAR包
  2. 安全配置:合理配置用户权限和访问控制
  3. 自动化:使用脚本实现一键部署和监控
  4. 生产实践:遵循安全最佳实践,确保系统稳定

法律风险提示:本文内容仅用于合法的安全研究和系统管理目的。未经授权对他人系统进行渗透测试或攻击是违法行为,请确保您拥有目标系统的合法授权。