注意:下列漏洞复现是使用Ubuntu+docker实现的环境完成的,其中提到的IP通过Ubuntu虚拟机中的ifconfig命令查看,端口不变,需要环境的可通过docker相关环境下载
一、管理界面弱口令getshell
1、漏洞简述&影响版本
tomcat存在管理后台进行应用部署管理,且管理后台使用HTTP基础认证进行登录。若用户口令为弱口令,攻击者容易进行暴力破解登录后台并进行应用管理
影响版本:全版本
常见后台地址:http://1.1.1.1:2233/manager/html http://1.1.1.1:2233/host-manager/html
2、攻击步骤
2.1 访问http://192.168.137.128:8082,点击Manager App,可以使用Metasploit进 行账号密码的爆破(设置目标IP:set RHOSTS 192.168.137.128;设置端口:set RPORT 8082;实施攻击:exploit)
2.2 登录到tomcat后台,找到war上传的入口,上传包含webshell的war项目进行部署(这里上传了一个包含webshell的pass.war项目)
2.3 使用冰蝎连接,成功getshell
3、加固建议
- 在tomcat-users.xml目录下加强密码的复杂性,包含字母、数字和特殊字符 (如可将下图中的username和password改为tomcat123!@#)
- 创建运行tomcat的普通用户tomcat,不允许远程登录后台:useradd -s /sbin/nologin tomcat
- 禁用后台,在server.xml中修改配置如下: <Host name="localhost" appBase="webapps" unpackWARs="true" xmlValidation="false" xmlNamespaceAware="false"> 修改完成后重启tomcat
二、生产环境存在示例页面
1、漏洞简述&影响版本
Apache Tomcat默认安装包含"/examples"目录,该目录包含许多示例servlet和JSP,其中一些事例存在安全风险,不应当部署在生产服务器上。可导致敏感信息泄露、核心数据可能被窃取、攻击者利用样例漏洞直接攻击等危害
影响版本:全版本
2、攻击步骤
2.1 访问192.168.137.128:8081/examples页面
2.2 继续访问/examples/servlets/servlet/SessionExample
该页面可以对session直接进行查询与修改,绕过认证,可能会被黑客利用直接操作服务器
3、加固建议
- 在完成生产环境的搭建后,删除webapps目录下的自带项目:docs、examples、host-manager、manager、root
- 可删除 tomcat/conf/logging.properties配置文件下的: 3个manager.org.apache.juli.AsyncFileHandler 4个host-manager.org.apache.juli.AsyncFileHandler
三、远程代码执行漏洞(CVE-2017-12615)
1、漏洞简述&影响版本
当tomcat启用了HTTP PUT请求方法,如将readonly初始化参数设置为false时, 攻击者构造的请求数据包通过PUT方式向服务器上传包含恶意JSP代码的文件,使得恶意的JSP代码在服务器执行,导致服务器上的数据泄露或服务器被攻击者控制。可能导致:执行恶意代码、getshell等。
影响版本:全版本
2、攻击步骤
2.1 访问192.168.137.128:8081,并刷新页面使用burpsuite抓包
2.2 修改请求,将get方式改为PUT方式并添加任意的JSP代码,发出请求
可以看到状态码为201,表明文件上传成功
2.3 访问已经上传的文件
JSP代码在服务器上顺利执行
3、加固建议
- 将服务器下 conf/web.xml 文件的 readonly 值改为 Ture 或注释参数,重启tomcat
- 注释掉web.xml下<!--<http-method>PUT</http-method>-->
四、文件包含漏洞(CVE-2020-1938)
1、漏洞简述&影响版本
tomcat AJP协议(默认8009端口)由于存在实现缺陷导致相关参数可控,攻击者可以构造特定的参数,读取webapp下的任意文件。可能导致:读取任意文件、敏感信息泄露,若服务器还存在文件上传功能,还可能造成远程代码执行等危害。
影响版本:tomcat 6、7.0.0~7.0100、8.0.0~8.5.51、9.0.0~9.0.31
2、攻击步骤
2.1 使用Nmap扫描器对192.168.137.128进行端口扫描
发现8009端口开放且版本在受影响范围内可初步怀疑存在该漏洞
2.2 使用脚本(脚本链接) 输入命令python . \CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.137.128 -p 8009 -f WEB-INF/web.xml
成功读取了web.xml文件
3、加固建议
- 临时禁用AJP协议端口,在conf/server.xml配置文件中注释掉<!--<Connector port="8009" protocol="AJP/1.3"redirectPort="8443" />-->,配置完成后重启tomcat并检查8009端口是否关闭
- 如未使用 Tomcat AJP 协议,可以直接将 Tomcat 升级到 9.0.31、8.5.51 、 7.0.100 或更高的版本
- 如无法立即进行版本更新、或者是更老版本的用户,建议为 AJPConnector 配置 requiredSecret:<Connector port="8009"protocol="AJP/1.3" redirectPort="8443"address="YOUR_TOMCAT_IP_ADDRESS"requiredSecret="YOUR_TOMCAT_AJP_SECRET" />,配置完成后重启tomcat
五、反序列化漏洞
1、漏洞简述&影响版本
若使用了Tomcat的session持久化功能,不安全的配置将导致攻击者可以发送恶意请求执行任意代码,但攻击者能利用此漏洞的条件较为苛刻,需满足4个条件:1、攻击者能够控制服务器上文件的内容和文件名称;2、服务器PersistenceManager配置中使用了FileStore;3、PersistenceManager中的sessionAttributeValueClassNameFilter被配置为“null”,或者过滤器不够严格,导致允许攻击者提供反序列化数据的对象;4、攻击者知道使用的FileStore存储位置到攻击者可控文件的相对路径。可能导致:远程恶意代码执行等危害。
影响版本:tomcat 10.0.0-M1~10.0.0-M4、9.0.0.M1~9.0.34、8.5.0~8.5.54、7.0.0~7.0.103
2、攻击步骤
2.1 在burpsuite中将collaborator server设置成use the default collaborator server
2.2 打开collaborator客户端面板,点击copy to clipboard
这里复制的内容为hj4qo3c5zo3knmuoamcyrxc9g0mqaf.burpcollaborator.net
2.3 下载ysoserial,使用ysoserial在本地生成bbb.session文件,生成命令:java -jar ysoserial-0.0.6-SNAPSHOT-all.jar CommonsCollections2 "touch /tmp/tomcat-bug" > /home/eirc/a.session (注意,/home/eirc是主文件夹,在主文件夹下生成bbb.session文件)
2.4 访问存在文件上传漏洞的页面http://192.168.137.128:8083/index1.jsp,构造请求如下,发起请 求显示成功,放包
2.5 再次访问http://192.168.137.128:8083/刷新页面,使用burpsuite刷新抓包
2.6 修改请求 JSESSIONID=../../../../../../tmp/bbb并发送
2.7 查看burpsuite的collaborator中成功获取DNS请求
3、加固建议
- 关闭session持久化功能,在tomcat目录>conf>context.xml下取消注释: <!--<Manager pathname="" />-->,修改完成后重启tomcat
- 建议将tomcat更新到最新版本:https://tomcat.apache.org/download-10.cgi