基于公私钥认证对Redis未授权漏洞利用及防护措施

Posted xian_wwq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于公私钥认证对Redis未授权漏洞利用及防护措施相关的知识,希望对你有一定的参考价值。

漏洞说明:Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下,利用 Redis 自身的提供的config 命令,可以进行写文件操作,攻击者成功将自己的ssh公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys 文件中,可以使用对应私钥直接使用ssh服务登录目标服务器。

1. 在攻击机使用nmap发现6379端口

2.尝试用公钥替换利用未授权漏洞

(1)攻击机生成密钥  

ssh-keygen -t rsa

 (2)查看并复制公钥

cat ~/.ssh/id_rsa.pub
(3)连接靶机redis
nc 172.16.250.128 6379

  其中,info :查看服务器、客户端、CPU、内存等信息

 config set dir: 设定redis目录    config get dir: 获取默认redis目录

 config set dbfilename “***keys”  设定rdb名称,获取使用 config get dbfilename

在靶机上保存公钥

 

 3.利用公钥登录靶机ssh,访问成功

  4.漏洞防护措施

(1)限制redis访问:修改redis.conf文件
        把# bind 127.0.0.1前面的 注释#号去掉,然后把127.0.0.1改成允许访问你的redis服务器的ip地址,表示只允许该ip进行访问。这种情况下,我们在启动redis服务器的时候不能再用:redis-server而改为:redis-server path/redis.conf 即在启动的时候指定需要加载的配置文件。

(2)增加redis访问密码
       在redis.conf配置文件中找到requirepass 配置项,取消#注释符,在requirepass 后面添加设置的密码。设置密码以后发现可以登陆,但是无法执行命令。

      1)启动redis客户端,并连接服务器:redis-cli -h IP地址 -p 端口号

       输出服务器中的所有key:keys *

      报错:(error) ERR operation not permitted

      使用授权命令进行授权,就不报错了:auth youpassword

     2)在连接服务器的时候就可以指定登录密码,避免单独输入上面授权命令:redis-cli -h  IP地址 -p 端口号  -a  密码

     3)在配置文件redis.conf中配置验证密码以外,也可以在已经启动的redis服务器通过命令行设置密码,但这种方式是临时的,当服务器重启了后,密码必须重设。命令行设置密码方式:config set requirepass 你的密码

     4)不知道当前redis服务器是否有设置验证密码,或者忘记密码,可以通过命令行输入命令查看密码:config get requirepass

     5)如果redis服务端没有配置密码,会得到nil,而如果配置了密码,但是redis客户端连接redis服务端时,没有用密码登录验证,会提示:operation not permitted,这时候可以用命令:auth yourpassword 进行验证密码,再执行 config set requirepass,就会显示yourpassword

(3)修改默认端口:

修改redis.conf文件中默认端口 port 6379 
 

以上是关于基于公私钥认证对Redis未授权漏洞利用及防护措施的主要内容,如果未能解决你的问题,请参考以下文章

redis未授权漏洞介绍和复现

redis未授权漏洞介绍和复现

Redis未授权漏洞复现及利用(window,linux)

Redis未授权访问漏洞复现与利用

Redis未授权访问漏洞复现与利用

web安全未授权访问&身份验证&访问控制