Redis未授权访问一个配置错误就能丢服务器
原创
围巢安全笔记
围巢安全笔记
围巢安全笔记
2026年10月23日 09:00
北京
去阅读
渗透测试实战 · 第 20 篇
我见过最离谱的一次服务器被黑,起因就是Redis的一个配置错误——开发者为了方便,把Redis绑定到了0.0.0.0,而且没设密码。攻击者扫到这个6379端口之后,用了不到5分钟就拿到了服务器的root权限,还留了个挖矿木马。这篇把Redis未授权访问漏洞讲透,从原理到利用到防御,每一个都是实战中用得上的。
本文仅限授权安全测试教学,请勿对未授权系统进行测试。约 2400 字,附 2 个实战干货。
01|Redis未授权访问到底是什么
Redis是一个开源的高性能键值数据库,因为速度快、功能丰富,被广泛用于缓存、会话存储、消息队列等场景。几乎每个Web应用背后都有一个Redis在跑。
Redis未授权访问漏洞,简单来说就是——Redis没有设置密码,而且绑定在了公网IP上,任何人都可以直接连接,不需要任何认证。
Redis的默认配置是绑定127.0.0.1(只能本地访问),而且没有密码。很多开发者在部署的时候,为了让其他服务器能连接Redis,就把bind改成了0.0.0.0(所有网卡都能访问),但是忘记设置密码。这样一来,Redis就直接暴露在公网上了,任何人用redis-cli连上去就能执行所有命令。
Redis未授权访问:配置不当导致的高危漏洞,攻击者无需密码即可远程连接
这个漏洞的危害非常大,因为Redis的功能太强了——它不只是一个数据库,还能写文件、能执行Lua脚本、能做主从复制。攻击者连接上Redis之后,可以通过各种方式获取服务器的控制权。
根据网络空间搜索引擎的统计,公网上常年有几十万台未授权访问的Redis服务器。这些服务器大部分是开发者图方便没配密码,结果被攻击者扫到之后植入挖矿木马、留后门、甚至删除数据。
02|Redis未授权访问的四种利用方式
- 写SSH公钥,免密登录服务器
这是最经典、最常用的利用方式。原理是:Redis有一个CONFIG SET命令,可以修改Redis的配置,包括数据文件的保存路径(dir)和文件名(dbfilename)。攻击者可以把Redis的数据文件保存路径改成/root/.ssh/,文件名改成authorized\_keys,然后把自己的SSH公钥作为一个键值存到Redis里,再执行SAVE命令,Redis就会把数据(包括攻击者的公钥)写入到/root/.ssh/authorized\_keys文件里。这样攻击者就能用自己的私钥免密登录服务器了。
这种利用方式需要Redis以root身份运行(这样才能写/root/.ssh/目录),而且服务器开启了SSH公钥登录。很多生产环境的Redis都是以root运行的,所以这种方式成功率很高。
- 写WebShell,控制网站
如果服务器上跑着Web服务(比如Nginx+PHP),攻击者可以用同样的方法,把Redis的数据文件写到Web根目录下,文件名改成shell.php,内容是一个PHP一句话木马。这样攻击者就能通过浏览器访问这个shell.php,执行任意PHP命令,控制整个网站。
这种方式需要知道Web根目录的路径(常见的有/var/www/html/、/usr/share/nginx/html/、/www/wwwroot/等),而且Redis对Web根目录有写权限。很多情况下Redis是以www-data或nginx用户运行的,对Web根目录有写权限,所以这种方式也很常用。
- 写计划任务,反弹Shell
攻击者可以把Redis的数据文件写到/etc/cron.d/目录下,创建一个计划任务文件,让系统每分钟执行一个命令,这个命令就是反弹Shell到攻击者的服务器。等一分钟之后,计划任务执行,攻击者就能拿到服务器的Shell了。
这种方式需要Redis以root运行(才能写/etc/cron.d/目录),而且系统运行了cron服务。大部分Linux服务器都运行了cron,所以这种方式也很有效。
- 主从复制RCE,执行任意命令
这是Redis 4.x/5.x版本的一个高级利用方式。原理是:Redis支持主从复制,攻击者可以搭建一个恶意的Redis主服务器,然后让目标Redis作为从服务器连接过来。在主从复制的过程中,攻击者可以发送恶意的模块文件(.so文件),让目标Redis加载这个模块。这个模块里可以包含任意代码,加载之后就能在目标服务器上执行任意命令。
这种方式比前面三种更强大——前面三种需要写文件,依赖特定的目录和权限,而主从复制RCE可以直接执行任意命令,不需要依赖任何外部条件。只要Redis版本是4.x或5.x,而且开启了主从复制(默认开启),就可以利用。
Redis主从复制架构:主节点负责写,从节点负责读,数据单向同步
03|怎么检测Redis未授权访问
检测Redis未授权访问很简单,用redis-cli连一下试试就行。如果不需要密码就能连上,而且能执行INFO命令,那就是存在未授权访问漏洞。
# 检测方法(仅限授权测试)
# 方法1:用redis-cli连接
redis-cli -h 目标IP -p 6379
# 如果直接进入命令行,没有提示输入密码,
# 说明没有设置密码
# 然后执行INFO命令:
192.168.1.100:6379> INFO
# 如果能看到Redis的版本、操作系统、内存等信息,
# 说明存在未授权访问漏洞
# 方法2:用Nmap检测
nmap --script redis-info -p 6379 目标IP
# Nmap的redis-info脚本会自动连接Redis并获取信息,
# 如果能获取到信息,说明存在未授权访问
# 方法3:用网络空间搜索引擎
# FOFA、Shodan、ZoomEye等搜索引擎,
# 搜索\"port:6379\"就能找到公网上的Redis服务器,
# 很多都是未授权访问的
# 注意:
# 检测他人的Redis服务器需要获得授权,
# 未经授权连接他人服务器属于违法行为。
# 只能检测自己管理的服务器,或者在授权测试环境中检测。
干货Redis安全加固检查清单
按照这个清单逐项检查,能防住99%的Redis未授权访问攻击:
# 1. 网络层防护
# [ ] Redis只绑定127.0.0.1,不要绑定0.0.0.0
# 配置:bind 127.0.0.1
# [ ] 如果必须远程访问,用SSH隧道或VPN,不要直接暴露公网
# [ ] 防火墙只允许特定IP访问6379端口
# iptables -A INPUT -s 允许的IP -p tcp --dport 6379 -j ACCEPT
# iptables -A INPUT -p tcp --dport 6379 -j DROP
# 2. 认证层防护
# [ ] 设置强密码(至少16位,包含大小写字母+数字+特殊符号)
# 配置:requirepass 你的强密码
# [ ] 不要用弱密码(123456、redis、admin等)
# [ ] 密码不要写在代码里,用环境变量或配置中心管理
# 3. 权限层防护
# [ ] 不要用root运行Redis,创建专门的redis用户
# useradd -r -s /sbin/nologin redis
# chown -R redis:redis /var/lib/redis
# [ ] Redis的数据目录权限设置为700,只有redis用户能访问
# [ ] 禁用危险命令(防止被利用写文件、改配置)
# 配置:
# rename-command FLUSHALL \"\"
# rename-command FLUSHDB \"\"
# rename-command CONFIG \"\"
# rename-command EVAL \"\"
# rename-command SAVE \"\"
# rename-command SHUTDOWN \"\"
# rename-command DEBUG \"\"
# 4. 配置层防护
# [ ] 关闭主从复制(如果不需要的话)
# 配置:replica-read-only yes(从节点只读)
# [ ] 限制Redis的最大内存,防止OOM
# 配置:maxmemory 2gb
# maxmemory-policy allkeys-lru
# [ ] 开启持久化(AOF或RDB),防止数据丢失
# [ ] 定期备份Redis数据
# 5. 监控层防护
# [ ] 监控Redis的连接数,异常连接告警
# [ ] 监控Redis的命令执行,异常命令告警
# [ ] 定期检查Redis的配置,防止被篡改
# [ ] 定期检查服务器的登录日志,发现异常登录及时处理
# 6. 版本管理
# [ ] 及时升级Redis到最新稳定版,修复已知漏洞
# [ ] 关注Redis的安全公告,有新漏洞及时处理
# [ ] 不要用太老的版本(Redis 2.x、3.x已经停止维护)
# 记住:
# Redis未授权访问是配置不当导致的漏洞,
# 只要按照上面的清单做好配置,
# 就能完全避免这个漏洞。
# 不要图方便把Redis暴露在公网上还不设密码,
# 被黑了之后后悔就来不及了。
Redis安全加固的核心是\"最小权限原则\"——只给Redis完成任务所必需的权限,能本地访问就不要远程访问,能设密码就一定要设密码。
04|不止Redis:这些数据库也有未授权访问漏洞
Redis未授权访问不是个例,很多数据库和服务都有类似的问题——默认没有密码,绑定在0.0.0.0,开发者图方便不配置,结果就暴露在公网上了。下面是常见的未授权访问漏洞:
- MongoDB(27017端口)
:早期版本默认没有认证,绑定0.0.0.0,未授权访问可以直接读写所有数据库。很多网站的MongoDB被攻击者拖库、勒索、删除数据。
* Elasticsearch(9200端口)
:默认没有认证,绑定0.0.0.0,未授权访问可以读写所有索引,还能执行任意查询。大量企业的Elasticsearch被拖库,泄露了海量用户数据。
* Memcached(11211端口)
:默认没有认证,绑定0.0.0.0,未授权访问可以读写缓存数据。还被用于DDoS放大攻击——攻击者伪造源IP向Memcached发送请求,Memcached返回大量数据,把流量放大几十倍。
* CouchDB(5984端口)
:默认没有认证,绑定0.0.0.0,未授权访问可以读写所有数据库,还能通过API执行任意命令。
* Hadoop(50070/8088端口)
:HDFS和YARN的Web UI默认没有认证,未授权访问可以查看集群状态、上传下载文件、提交任务。很多企业的Hadoop集群被攻击者植入挖矿木马。
* Docker(2375端口)
:Docker Remote API默认没有认证,如果暴露在公网上,攻击者可以直接创建容器、挂载宿主机目录、获取宿主机的root权限。
这些未授权访问漏洞的本质都是一样的——开发者为了方便,把服务暴露在公网上,但是没有做认证和权限控制。防御方法也都一样:绑定本地地址、设置强密码、防火墙限制访问来源、最小权限运行。
干货服务器被黑了怎么办?应急响应三步法
如果你的Redis(或其他服务)未授权访问被黑了,按照下面的步骤处理:
# 第一步:断网隔离(立即执行)
# 1. 立即断开服务器的网络连接(拔网线或在云控制台断网)
# 防止攻击者继续操作、删除数据、横向移动
# 2. 不要直接重启服务器(会丢失内存中的证据和进程信息)
# 3. 不要直接删除可疑文件(会破坏证据)
# 第二步:取证分析(在隔离环境中进行)
# 1. 保存系统日志:/var/log/auth.log、/var/log/syslog、
# /var/log/secure、/root/.bash_history
# 2. 查看可疑进程:ps aux、top、htop
# 重点看有没有挖矿程序(xmrig、kdevtmpfsi等)、
# 可疑的Python/Shell进程、反弹Shell进程
# 3. 查看可疑网络连接:netstat -antp、ss -antp
# 重点看有没有连接到陌生IP的连接、
# 有没有监听陌生端口的进程
# 4. 查看定时任务:crontab -l、ls /etc/cron.d/、
# ls /var/spool/cron/
# 攻击者经常留定时任务做权限维持
# 5. 查看SSH公钥:cat /root/.ssh/authorized_keys、
# cat /home/*/.ssh/authorized_keys
# 看有没有陌生的公钥
# 6. 查看Redis数据:如果是Redis被黑,
# 用redis-cli连接,执行KEYS *看有没有可疑的键,
# 执行CONFIG GET dir看数据目录被改成了什么
# 第三步:清理恢复(确认攻击路径后)
# 1. 杀掉所有可疑进程
# 2. 删除所有可疑文件(挖矿程序、后门、WebShell等)
# 3. 删除可疑的定时任务和SSH公钥
# 4. 修改所有密码(Redis密码、系统密码、数据库密码等)
# 5. 修复漏洞(按照安全加固清单重新配置)
# 6. 恢复数据(从备份恢复被删除或篡改的数据)
# 7. 重新联网,持续监控,确认没有残留的后门
# 8. 如果服务器被黑得太彻底,建议直接重装系统,
# 从备份恢复数据,这样最干净最安全
# 重要提醒:
# 1. 如果你不确定怎么处理,找专业的安全人员帮忙,
# 不要自己瞎操作,可能会破坏证据或者让情况更糟
# 2. 如果涉及数据泄露,要及时通知受影响的用户,
# 并按照法律法规的要求上报监管部门
# 3. 事后要做复盘,找出被黑的根本原因,
# 完善安全防护,避免再次被黑
应急响应的核心是\"先隔离,再取证,后清理\"。不要一上来就删文件、杀进程,那样会破坏证据,而且可能清理不干净,留下后门。
Redis未授权访问是一个非常经典的漏洞,从Redis诞生到现在,二十多年了,依然有大量服务器因为这个漏洞被黑。不是因为漏洞多复杂,而是因为开发者的安全意识不够——总觉得\"我的服务器没人会扫到\"、\"设密码太麻烦\"、\"先这么跑着,以后再改\"。结果就是被攻击者扫到,几分钟就丢了服务器。
安全这件事,没有\"以后再说\",只有\"现在就做\"。花十分钟把Redis的密码设上、把bind改成127.0.0.1、把防火墙配上,就能避免99%的风险。不要等被黑了才后悔。
最后再次提醒:本文所有内容仅限授权安全测试教学,请勿对未授权系统进行测试。未经授权测试他人系统属于违法行为,将承担法律责任。
下一篇我们聊验证码绕过——那些看起来很安全的验证码,是怎么被轻松绕过的。我们下篇见。
围巢安全笔记
不生产焦虑,只分享踩过的坑和挖过的洞
你遇到过Redis未授权访问吗?评论区聊聊 👇
有想聊的话题,后台留言告诉我
往期回顾
- 密码破解:你的密码在黑客眼里能撑多久
- Nmap:用了三年才搞懂的端口扫描神器
- 渗透测试思路:怎么找未授权接口和隐藏参数
- AI安全的六大漏洞:从训练数据到供应链
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论