Redis未授权访问漏洞详解与防护措施解析
创始人
2025-01-13 19:09:24
0 次浏览
0 评论
Redis未授权访问漏洞复现与利用
默认情况下,Redis会绑定到0.0.0.0:6379,如果不执行防火墙策略,直接暴露在公网且不配置密码认证(默认值为空),则任何用户都可以访问目标。服务器将无法访问目标服务器被授权访问Redis并读取其数据。
攻击者可以使用Redisconfig命令进行文件写入操作,例如将SSH公钥写入目标服务器/root/.ssh文件夹中的authorized_keys文件中,然后使用相应的私钥直接SSH到/root/目标服务器的.ssh文件夹。
目标服务器。
该漏洞产生的条件包括:Redis绑定了公网IP地址、未实施安全策略、未设置密码认证。
该漏洞的危害主要体现在攻击者无需身份验证即可访问内部数据,从而导致敏感信息泄露,甚至可以运行flushall命令清除所有数据,并使用EVAL执行Lua代码或保存。
函数将后门文件写入磁盘。
在最严重的情况下,如果Redis以root身份运行,攻击者可以写入SSH公钥文件并通过SSH直接连接到受害者服务器。
根据ZoomEye检测,无需验证即可直接使用的Redis全球分布如下:全球无需验证即可直接使用Redis的前10个国家和地区。
重现漏洞的方法:下载并安装Redis测试版(Ubuntu镜像),安装后启动服务,克隆虚拟机并创建攻击机和目标机(IP地址分别为192.168.0.105和192.168.0.104)。
攻击机使用redis-cli连接目标机的redis服务。
公网开放验证服务,不启用认证。
使用redis编写webshell的步骤如下:目标机器的redis连接不允许,攻击机器无需检查连接即可连接,打开web服务器,使用phpinfo或者路径错误暴露目录,以及确保有文件操作权限。
在/home/bmjoker目录中编写shell,确保使用换行符以确保文件的可执行性。
对于以root身份运行的Redis,可以利用漏洞获取root权限。
启动目标机上的Redis服务,创建SSH公钥存放目录,在攻击机上生成公钥和私钥(密码为空),连接目标机的Redis服务并写入公钥。
。
写入成功后验证公钥文件,攻击机使用私钥通过SSH连接Redis服务器。
使用crontab弹跳shell:攻击者的服务器监听端口,连接Redis并编写弹跳shell代码,设置计划任务目录和文件名,大约一分钟后获取shell。
要测试未经授权或弱密码条件,可以使用自动测试脚本。
解决方案包括:通过IP绑定限制访问(编辑redis.conf文件中的绑定配置)并设置密码以提供远程连接。
这具体步骤为:去掉redis.conf中对127.0.0.1的绑定注释,并指定允许访问的IP地址;更改requirepass配置中的密码。
这可以在一定程度上防止未经授权的访问,保证服务的安全运行。

Redis未授权访问漏洞(一)先导篇
Redis默认配置暴露问题在不进行安全配置的情况下,Redis将默认连接到0.0.0.0:6379此配置会将Redis服务暴露到公网,而无需添加防火墙规则。如果不设置密码认证,任何能够登录目标服务器的用户都可以非法访问Redis并读取Redis数据。
攻击者在获得对Redis的未授权访问权限后,可以使用configure命令写入文件。
攻击者可以将自己的ssh公钥写入到目标服务器/root/.ssh文件夹下的authorized_keys文件中,然后使用对应的私钥直接登录服务器、添加计划任务、在Webshell中写入等。
未经授权访问Redis是一种常见的漏洞,会导致大量云服务器被挖矿,例如在阿里云服务器上,当Redis服务配置不正确时,黑客可以攻击并下载篡改密钥的恶意挖矿程序。
Redis的常见用途和案例Redis不仅仅用于缓存,还有很多用途。
它的全称是RemoteDictionaryService(远程词典服务),由antirez于2007年创建,最初用于统计Web访问数据。
随着数据量的增长,Redis于2009年被开发为内存版本以提高性能。
Redis通过键值对以及常见的set和get操作来存储数据。
通过实例演示,设置redis.conf开启服务,通过redis客户端查看运行结果。
从设置键值对到清理数据库,直观地演示了Redis的使用。
安装并配置Redis环境安装Redis环境需要准备Centos7操作系统。
下载并解压Rediszip包,安装GCC依赖,编译安装,编辑配置文件以确保服务可以在本地机器上启动,并设置访问密码。
通过指定配置文件启动Redis,使用客户端,停止服务,配置别名。
Redis持久化机制Redis数据存储在内存中,并提供持久化机制来保证数据的可靠性。
数据通过save命令或自动启用的规则(例如每3600秒保存一次)定期保存到磁盘。
配置文件设置持久化规则以及文件存储的路径和名称。
Redis动态修改配置Redis提供了动态配置修改功能,允许通过配置修改配置,但只在当前会话中生效。
通过这种方式修改配置,保存数据并验证是否已正确保存到文件中。
相关文章

C语言for嵌套循环详解:操作规范与代码...
2025-03-02 09:00:08
Python列表比较大小:元素比较与内存...
2024-12-27 15:33:42
Java编程:1-100之间奇数求和实现...
2025-02-25 07:59:41
SQL删除重复数据:保留唯一记录的技巧与...
2025-03-30 16:53:31
轻松掌握:MySQL版本查询及常用命令解...
2025-01-13 00:06:53
C语言编程教程:模拟数字时钟实现与代码分...
2025-03-14 22:26:21
Oracle日期格式转换:to_date...
2025-01-26 20:27:49
mysql 查慢sql
2025-01-06 18:20:40
高效SQL操作技巧:批量更新数据、更改列...
2024-12-16 15:27:40
MySQL高效处理亿级数据策略全解析
2024-12-31 12:07:44最新文章
13
2025-04
13
2025-04
13
2025-04
13
2025-04
13
2025-04
13
2025-04
13
2025-04
13
2025-04
13
2025-04
13
2025-04
热门文章
1
高效掌握:CMD命令轻松启动、关闭及登录...
如何用cmd命令快速启动和关闭mysql数据库服务开发中经常使用MySQL数据库...
2
MySQL分区删除技巧与8.0版本新特性...
mysql删除分区在MySQL中,删除分区操作主要使用“可替代”的命令与“ dr...
3
Python代码实现:如何判断三角形的三...
python三角形三条边长,判断能否构成三角形Python三角形的三个长边如下:...
4
深度解析:MySQL查询语句执行顺序及优...
mysql查询语句执行顺序当这是由于执行SQL的过程时,了解其过程很重要。 ...
5
SQL教程:使用SUBSTRING和IN...
sql取特定字符的前面几位字符selectsubstr('L-0FCLDRBCT...
6
MySQL日期差异计算方法:轻松获取日期...
MySQL计算时间差两日期相减得月份mysql两时间相减得月MySQL计算时间之...
7
MySQL及SQL查询获取前10条数据方...
MySql查询前10条数据sql语句是从MySQL获取前1 0个数据的SQL查询...
8
MySQL启动问题排查与解决指南
Mysql为什么启动不了如果要配置MySQL,则遇到无法启动的问题,可能是由于配...
9
DbVisualizer添加MySQL数...
如何在DbVisualizer中添加本地mysql数据库由于DbVisualiz...
10
SQL字段默认值设置全攻略:轻松实现自动...
sql如何设置字段默认值设置SQL中某个字段的默认值;需要遵循几个步骤。首先您需...