Redis未授权访问漏洞引出的漏洞利用方式
redis未授权访问漏洞的成因和危害
漏洞定义
redis未授权访问漏洞是一个由于redis服务版本较低其未设置登录密码导致的漏洞,攻击者可直接利用redis服务器的ip地址和端口完成redis服务器的远程登录,对目标服务器完成后续的控制和利用。
漏洞成因
- redis版本为4.x/5.0.5或以前的版本;
- redis绑定在0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略,直接暴露在公网;
- 没有设置密码认证,可以免密码远程登录redis服务
漏洞危害
- 攻击者可通过redis命令向网站目录写入webshell,完成对目标网站服务器的初步控制;(/var/ww/html)
- 攻击者可以通过redis命令向目标服务器写入计划任务来反弹shell,完成服务器的控制;(/var/spool/cron/)
任务计划反弹shell方法仅适用于Centos
Ubuntu 不能用的原因如下:
因为默认 redis 写文件后是 644 权限,但是 Ubuntu 要求执行定时任务文件 /var/spool/cron/crontabs/<username>
权限必须是 600 才会执行,否则会报错 (root) INSECURE MODE (mode 0600 expected),而 Centos 的定时任务文件 /var/spool/cron/<username>
权限 644 也可以执行 - 最严重的情况,如果redis以root身份运行,攻击者可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器。(/root/.ssh)
操作演示
由于我的系统是Ubuntu,并且环境是用docker搭建的,下面我只演示写webshell的部分。
环境搭建
靶机:Ubuntu + LAMP + redis-5.0.4(172.16.70.129)
攻击机:kali(172.16.70.140)
# 搭建redis5.0.4,同时设置挂载卷和端口映射,如果不做定时任务和公钥的实验则不需要(-v /var/spool/cron:/var/spool/cron -v /root/.ssh:/root/.ssh)
docker run --name=redis-5 -dit -v /var/www/html:/