利用redis未授权访问漏洞获取主机权限

目录

    • 一、漏洞描述
    • 二、漏洞影响版本
    • 三、漏洞危害
    • 四、漏洞利用
  • 五、修复建议

一、漏洞描述

Redis默认情况下,会绑定在0.0.0.0:6379(在redis3.2之后,redis增加了protected-mode,在这个模式下,非绑定IP或者没有配置密码访问时都会报错),如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源ip访问等等,这样将会将Redis服务暴露在公网上,如果在没有设置密码认证(默认为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问Redis以及读取Redis的数据。攻击者在未授权访问Redis的情况下,利用Redis自身的提供的config命令,可以进行写文件操作,攻击者还可以成功将自己的ssh公钥写入目标服务器的/root/.ssh文件的authotrized_keys 文件中,进而可以使用对应私钥直接使用ssh服务器登录目标服务器。

漏洞的产生条件有以下两点:

(1) Redis绑定在0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略,直接暴露在公网

(2) 没有设置密码认证(默认为空)或者弱密码,可以免密码登录redis服务

二、漏洞影响版本

Redis 2.x,3.x,4.x,5.x

三、漏洞危害

(1) 攻击者无需认证访问到内部数据,可能导致敏感信息泄露,黑客也可以恶意执行flushall来清空所有数据

(2) 攻击者可通过eval执行lua代码,或通过数据备份功能往磁盘写入后门文件

(3) 如果redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录目标服务器

四、漏洞利用

靶机:192.168.40.86 (已安装redis且未授权)
攻击机:192.168.29.131

利用方式一:通过写入ssh公钥实现ssh登录

原理:在数据库中插入一条数据,将本机的公钥作为value,key值随意,然后通过修改数据库的默认路径为/root/.ssh和默认的缓冲文件authorized.keys,把缓冲的数据保存在文件里,这样就可以在服务器端的/root/.ssh下生一个授权的key。

1、攻击机上生成ssh公钥和私钥,密码设置为空

ssh-keygen -t rsa
利用redis未授权访问漏洞获取主机权限_第1张图片

2、进入/root/.ssh,将公钥写入key.txt文件(前后用\n换行,避免和redis里其他缓存数据混合)
(echo -e "\n";cat id_rsa.pub;echo -e "\n")>key.txt
利用redis未授权访问漏洞获取主机权限_第2张图片

3、再把key.txt文件内容写入redis缓冲(靶机)
cat key.txt| redis-cli -h 192.168.40.86 -x set pub
在这里插入图片描述

4、设置redis的默认文件路径为/root/.ssh且文件名为authorized_keys,然后save保存。
利用redis未授权访问漏洞获取主机权限_第3张图片

5、在攻击机中使用ssh免密登陆靶机
利用redis未授权访问漏洞获取主机权限_第4张图片

利用方式二:通过写入webshell

利用条件:目标开启了web服务器,并且知道web路径(可以利用phpinfo或者错误暴路径等),还需要具有读写增删改查权限

1、把shell写入到网站根目录下(/var/www/html/)
利用redis未授权访问漏洞获取主机权限_第5张图片

2、靶机上查看是否写入了test.php文件
在这里插入图片描述

3、查看test.php内容,写入成功(其他内容是上一步的缓存,不用管)
利用redis未授权访问漏洞获取主机权限_第6张图片

4、通过蚁剑连接(靶机未装web和php环境),故不在这里演示。

利用方式三:linux计划任务反弹shell

原理:利用了redis数据库的备份功能,在我们不知道网站绝对路径的时候,可以利用linux的定时任务特性:Linux会监测/etc/crontab的内容,当我们将反弹shell的命令使用redis备份到/etc/crontab中,就可以获得反弹shell。

在不同系统中,root的位置是不一样的 在kali和ubantu中,其文件位置为/var/spool/cron/crontabs/root,在centos系列中位置为/var/spool/cron/root,通常情况下没有root文件,需要自己创建。

1、将反弹shell命令写入到定时任务中

利用redis未授权访问漏洞获取主机权限_第7张图片
2、kali上使用nc开启监听,等到1分钟,建立连接

利用redis未授权访问漏洞获取主机权限_第8张图片

五、修复建议

1、禁止外部访问Redis服务端口

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

3、配置安全组,限制可连接Redis服务器的IP

4、redis设置用户名和密码访问

你可能感兴趣的:(渗透测试,redis)