6 redis 编译失败_Redis未授权访问漏洞分析

a9edde8aa427219882ef46914fea49d1.png

漏洞成因

redis默认绑定在 0.0.0.0:6379,且防火墙未配置不信任IP禁止访问策略,redis直接暴露在公网

redis没有设置密码认证(一般为空),可以免密码远程登录redis服务。

漏洞危害

攻击者可远程登录redis,导致敏感信息泄露。

攻击者登录redis后,可更改redis设置,也可使用flushall命令,删除所有数据。

攻击者可通过EVAL执行lua代码,或通过数据备份功能往磁盘写入后门文件。

如果redis以root身份运行,攻击者可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器

漏洞复现

环境搭建

攻击机kali192.168.25.128受害机ubuntu192.168.25.130

1、在ubuntu上安装redis:

wget http://download.redis.io/releases/redis-2.8.17.tar.gz #下载redis
tar -xzf redis-2.8.17.tar.gz #解压包

进入解压目录,执行如下命令:

make

如果make命令执行失败,且报错:

jemalloc/jemalloc.h: No such file or directory

这是由于没有安装gcc,可以用如下命令安装:

sudo apt-get install gcc

运行redis时可能还会报错,运行失败,提示运行当前redis需要更高版本的tcl,运行如下命令安装tcl:

sudo apt-get install tcl

以上都安装成功之后,运行如下命令,重新编译redis

make distclean  && make

出现如下界面,redis安装成功:

29701fb4b46d52fd7a9b0bf9b83667df.png

2、redis基本配置

进入redis解压目录下的src目录,执行如下命令:

# 执行下面两条命令的目的是,每次可以直接在终端启动服务,而不必每次都进入安装目录
cp redis-server /usr/bin 
cp redis-cli /usr/bin

返回redis解压目录,执行如下命令:

cp redis.conf /etc/

0b88439a2ae7bdcb2eeea20cff9e7fcc.png

使用如下命令启动redis服务

redis-server /etc/redis.conf

出现如下界面,启动成功:

3f1f98a82da9997a471dc4ed59f87a91.png

之后,查看redis配置文件

vim ../../etc/redis.conf

确保bind 127.0.0.1没有启用,如下图:

a10509bbd483b23af0a0c6ccbec76328.png

自此,环境部署完成,下面开始攻击。

漏洞利用

未授权访问的漏洞一共有3种利用方式,分别开始介绍。

第一种,利用redis写入shell

要能成功写入shell,需要满足如下条件:

可以通过redis-cli远程登录受害机

知道web发布绝对路径,且路径有读写权限

web服务器运行中

ubuntu中的web目录信息如下:

eff3ea167c6fe2234d36e5e722da76d1.png

下面开始攻击。

通过redis-cli连接到ubuntu

09f26112251014d1c362d5a6ff6a3c04.png

如下图,写入成功:

5a8d2d28ceb7411fba25085d5616a6fa.png

直接在kali中访问写入的脚本,执行成功:

bccc87745c77eb3b28249e3204fe7b15.png

第二种,利用密钥登录,获取root权限

在kali中生成ssh登录需要的公钥和私钥,将公钥保存到test.txt文件中,方便一会儿写入ubuntu:

18508f0e37c856a3b4fb43d84a3a2d37.png

将tes.txt文件中的公钥写入到ubuntu:

1a5ef21b47728bbad1df2eae3a4321db.png

redis-cli中的-x参数表示:从标准输入读取数据作为该命令的最后一个参数。

之后,还需要一步,就是设置redis的默认备份目录和备份文件。因为要通过ssh免密登录, 所以这里设置目录和备份文件,基本上是固定的。

默认的,ssh的免密登录公钥存默认放在目录/root/.ssh下,且密钥存放文件为:authorized_keys。如果ubuntu中没有/root/.ssh目录,自己可以手动创建一个。

e0074a37a36ec88977a28a5ef8e33293.png

至此,kali的公钥已经写入到ubuntu中。然后,在kali中用密钥登录ubuntu:

158d94f39fc525a77623068bd306e6ff.png

这里说明一点,要确保ubuntu是安装了ssh的,否则无法成功入侵。以上为成功通过root登录ubuntu。

第三种,

这种方式想获取shell,前提是权限要允许,可以设置定时任务,且任务设置完毕是可执行的。

先启用nc监听端口:

a1ac075337aa20c8eb8811abbb9a02c5.png

之后设置定时任务,将shell写入到ubuntu的定时任务中:

94bd88f4e3a1bc30033132077e534a2c.png

之后等待,很快就会连接到ubuntu:

99600ee0d63f1ab475df74c13431f9cf.png

解决方案

1. 在redis.conf文件中,绑定redis访问IP地址,指定固定的IP地址才能访问redis;

bind 127.0.0.1

2. 在redis.conf文件中,为redis添加密码验证

requirepass mypassword

3. 为redis配置单独的运行账户,以最低权限运行,且禁止redis账户远程登录

groupadd -r redis && useradd -r -g redis redis
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值