fastjson漏洞#不出网#原理#流量特征

原理

本质是java的反序列化漏洞,由于引进了自动检测类型的(autotype)功能,fastjson在对json字符串反序列化的时候,会读取@type内容,会试图将json内容反序列化成这个对象,并调用这个类的setter方法,那么攻击者就可以构造特定的json内容和通过@type来指定自己想要的内部库,从而导致远程命令的执行漏洞

流量特征

  • 采用post方法

  • 发送数据包和返回包的数据类型为json类型

  • 还有就是他的请求报文的花括号没闭合,请求包就会出现fastjson字段

    • image
  • 响应包中有fastjson关键字

  • 对于无回显的fastjson漏洞,其返回包中存在@type和dnslog平台网址

  • 请求体可能含有攻击者c2服务器地址或者ladp协议,rmi协议的地址,还有就是,

  • 返回包状态码一般为400,也可能为500

  • 请求体中可能存在type,bytecodes,java.lang,返回包中含有commit = true

Fastjson不出网的利用与防护

利用

  1. 利用 TemplatesImpl

    • TemplatesImpl 是最常见的利用类,因为它自带 bytecodes 字段,攻击者可以植入恶意字节码。
    • 攻击无需额外依赖,只需要服务器环境支持 JDK。
  2. 利用 BasicDataSource

    • 针对 Tomcat 环境下的应用,攻击者可以利用 org.apache.tomcat.dbcp.dbcp.BasicDataSourceorg.apache.tomcat.dbcp.dbcp2.BasicDataSource 类。

    • 攻击者构造恶意 JSON,指向 BasicDataSource 类,通过某些触发条件实现远程代码执行。

    • 触发条件

      • 需要目标应用运行在Tomcat环境中
      • 必须在 JSON 解析时启用 Feature.SupportNonPublicField 特性。
    • Tomcat 版本要求

      • Tomcat 8.0 之前:org.apache.tomcat.dbcp.dbcp.BasicDataSource
      • Tomcat 8.0 之后:org.apache.tomcat.dbcp.dbcp2.BasicDataSource

防护

使用Fastjson的黑名单功能:Fastjson提供了一个黑名单功能,可以用于禁止某些Java类的序列化和反序列化。通过设置一些敏感类的黑名单,禁止序列化和反序列化这些类,从而避免一些恶意攻击。

对Fastjson进行安全加固:对Fastjson进行安全加固可以避免恶意攻击。可以通过开启自动类型识别检查、限制反序列化对象的深度、限制反序列化对象的大小等措施,提高Fastjson的安全性。

使用其他JSON处理器: 如果对Fastjson存在疑虑或者担心其安全性问题,也可以考虑使用其他JSON处理器,比如Jackson、Gson等。这些处理器同样具有高性能和易用性,并且也可以进行安全加固。

漏洞产生的原因

由于@type字段的可控性,攻击者可以将@type字段设置为特定且服务端可以使用的类,从而执行恶意代码。具体原理如下:

  1. @type字段的利用:在反序列化过程中,Fastjson会根据@type字段的值来确定反序列化后的Java对象的类型。
  2. 恶意类加载:攻击者可以指定一个特定的Java类,该类可以被利用来执行恶意代码。
  3. JNDI注入:利用一些常见的Java类(如com.sun.rowset.JdbcRowSetImpl)来进行JNDI注入攻击,通过访问远程RMI或LDAP服务器来执行恶意代码。

漏洞修复

几种修复和防护措施包括:

  1. 升级Fastjson版本:官方建议升级到最新版本,例如1.2.83版本。
  2. 禁用危险类
  3. 关闭AutoType功能:如果无法升级,可以暂时关闭AutoType功能降低风险。
  4. 配置WAF防护:使用Web应用防火墙(WAF)防护。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CongSec

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值