Redis作为一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,由于性能高效,使用的人越来越多,但是很多人不考虑Redis的安全,导致服务器被入侵。
废话不多说,直接上干货!
Redis默认情况下,会绑定0.0.0.0:6379,这样的配置结果是,Redis服务会暴露在公网上,如果在没有开启认证的情况下,可以导致任意用户在未授权的情况下访问Redis以及读取或任意修改Redis数据,下面演示如果操作。
准备一台安装有Redis服务的服务器,默认配置,并确保服务已启动
通过telnet(或redis-cli)连接到目标服务器redis服务
首先查看配置数据存储目录
可以看到,默认保存目录是/var/lib/redis,我们可以通过config命令修改dir都我们想要的位置
如图,我通过config命令将dir和dbfilename修改,熟悉CentOS的都知道,/var/spool/cron/是保存所有用户定时任务的目录,该目录下,以用户名为文件保存了各个用户的定时任务,我这里直接修改dbfilename为root,这样我可以写任意命令到root用户的计划任务
如图,写入一条反弹shell的定时任务到redis数据库,并执行save命令,将该数据保存到root计划任务中
如图查看计划任务,已经被写入,开始用nc连接
等待1分钟,定时任务执行之后,直接连入目标服务器,并且是root权限,而且发现在目标服务器中,都无法看到有其余用户登陆。
这里只是举个最简单的例子,通过redis,可以写入任意shell,获取任意权限,可以将公钥直接写入root/.ssh/authorized_keys。
修复建议:
禁止一些高危命令
rename-command FLUSHALL "" //防止清库
rename-command CONFIG "" //防止直接改配置
rename-command EVAL
以低权限允许Redis服务
为Redis服务创建单独的用户和家目录,并配置禁止登陆
为Redis添加密码验证
修改redis.conf,添加requirepass mypasswd
禁止外网访问Redis
修改redis.conf,bind 127.0.0.1,这里如果需要内网访问,可以通过bind 192.168.0.1/24内网网段来使用。
欢迎分享和关注,运维实谈,不定期分享纯干货!
领取专属 10元无门槛券
私享最新 技术干货