redis未授权访问漏洞学习

一、Redis常见用途
1. Redis介绍
  • 全称与起源: Redis全称Remote Dictionary Service(远程字典服务),最初由antirez在2009年开发,用于解决网站访问记录统计的性能问题。
  • 发展历程: 从最初仅支持列表功能的内存数据库,经过十余年发展已支持多种数据类型和丰富功能特性。
2. Redis常用数据类型
  • 基本结构: 所有数据都以键值对(key-value)形式存储,键名均为字符串类型。
  • 五种核心类型:
    • 字符串: 最基本类型,如set name wuya
    • 哈希表: 键值对中嵌套键值对,如hset hash 1 a 2 b
    • 列表: 有序元素集合
    • 集合: 无序不重复元素集合
    • 有序集合: 带排序功能的集合
3. 操作演示
  • 服务启动: 通过redis-server命令启动服务,需指定配置文件路径。
  • 客户端连接: 使用redis-cli连接本地6379端口服务。
  • 基本操作:
    • set key value: 设置键值对
    • get key: 获取键对应值
    • hset hash field value: 设置哈希字段值
    • hget hash field: 获取哈希字段值
    • flushall: 清空所有数据
4. Redis常见用途
  • 缓存系统: 最经典应用场景,提升数据访问速度
  • 分布式解决方案:
    • Session共享: 解决多服务器session同步问题
    • 分布式锁: 实现秒杀、抢购等并发控制
    • 全局ID生成: 保证分布式系统ID唯一性
  • 其他应用:
    • 计数器: 实现签到、阅读量统计
    • 限流控制: 限制并发访问量
    • 抽奖系统: 随机抽取不重复元素
    • 标签系统: 商品多维度分类过滤
    • 排行榜: 实现各类热度排序
5. Redis为什么这么流行
  • 数据类型丰富: 支持多种数据结构,适用场景广泛
  • 高性能: 纯内存操作,读写速度远超磁盘数据库
  • 功能完备:
    • 数据持久化防止丢失
    • 事务支持保证操作原子性
    • Pipeline提升批量操作效率
    • 多语言客户端支持
    • 集群部署保障高可用
二、知识小结

知识点

核心内容

考试重点/易混淆点

难度系数

Redis简介

远程字典服务(Remote Dictionary Service),2009年由antirez用C语言开发,最初用于网站统计系统

名称来源与开发背景

⭐⭐

基本数据类型

支持5种主要类型:字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)

键(key)始终为字符串,值(value)类型多样

⭐⭐⭐

基础命令操作

SET/GET(字符串)、HSET/HGET(哈希)等基础命令演示

哈希表嵌套结构语法

⭐⭐

分布式应用场景

缓存、分布式Session、分布式锁、全局ID生成、计数器、限流、排行榜、标签系统

分布式锁实现秒杀场景

⭐⭐⭐⭐

技术特性优势

纯内存操作、支持持久化、多语言接口、集群部署能力

内存vs磁盘数据库性能差异

⭐⭐⭐

安全漏洞风险

未授权访问漏洞(6379端口暴露风险),护网/CTF常见攻击面

运维人员安全意识薄弱问题

⭐⭐⭐⭐

发展历程

从MySQL替代方案演变为多功能数据库,支持数据类型持续扩展

原始需求与最终产品的差异

⭐⭐

企业级应用

百度/谷歌统计类系统、电商标签过滤、微博热搜榜实现

标签系统实现原理

⭐⭐⭐⭐

一、Redis环境安装
1. 环境准备
1)环境准备内容
  • 架构说明:需要准备两台虚拟机,分别安装Redis服务端(靶机IP66)和客户端(控制机IP44)
  • 版本选择:课程使用Redis 6.2.3版本,但6.2.6版本同样适用,漏洞复现与版本关系不大
  • 漏洞本质:该漏洞源于用户配置不当而非Redis官方漏洞,早期版本即可利用且未修复
2)CentOS7安装Redis 6单实例
  • 解压压缩包
    
    • 下载命令:wget https://download.redis.io/releases/redis-6.0.9.tar.gz
    • 解压命令:tar -zxvf redis-6.0.9.tar.gz
  • 安装gcc依赖
    
    • 版本要求:Redis 6.x需要gcc版本大于4.9
    • 升级步骤:
  • 编译安装
    
    • 编译命令:
    • 生成文件:编译后会生成redis-server(服务端)、redis-cli(客户端)、redis-sentinel(哨兵)三个关键脚本
  • 修改配置文件
    
    • 后台运行:将daemonize no改为daemonize yes
    • 远程访问:注释或修改bind 127.0.0.1为bind 0.0.0.0
    • 密码设置:建议生产环境取消requirepass注释设置密码,但漏洞复现需保持注释
  • 使用指定配置文件启动Redis
    
    • 启动命令:/usr/local/soft/redis-6.0.9/src/redis-server /usr/local/soft/redis-6.0.9/redis.conf
    • 验证命令:netstat -an|grep 6379检查端口是否监听
  • 进入客户端
    
    • 连接命令:/usr/local/soft/redis-6.0.9/src/redis-cli
  • 配置别名
    
    • 配置文件:编辑~/.bashrc文件
    • 别名示例:
    • 生效命令:source ~/.bashrc后需打开新终端窗口
3)Redis服务端配置
  • 保护模式:设置protected-mode no允许远程连接
  • IP绑定:注释bind配置或设为0.0.0.0
  • 防火墙:关闭防火墙或开放6379端口
  • 密码认证:保持requirepass注释状态(漏洞复现要求)
2. 环境配置示例
  • 连接验证:通过redis-cli -h 靶机IP -p 6379命令测试远程连接
  • 命令测试:可执行set/get等基本操作验证环境正常
  • 克隆建议:可先安装好一台虚拟机后克隆,客户端机器只需保留redis-cli脚本
3. 可以执行任意Redis命令的危害
  • 数据清除:攻击者可执行flushall清空所有数据
  • 数据篡改:可任意修改缓存、排行榜等关键业务数据
  • 权限提升:结合后续漏洞利用可实现从数据库操作到系统提权
二、知识小结

知识点

核心内容

考试重点/易混淆点

难度系数

Redis环境安装

需在虚拟机安装客户端和服务端,版本差异影响小(6.2.3与6.2.6均可复现漏洞)

版本选择:官方未修复漏洞,旧版本(如4.x/5.x)同样适用

⭐⭐

Redis漏洞本质

配置不当漏洞:无需密码、开放远程访问、关闭保护模式(protected-mode no)

关键配置项:bind注释、requirepass注释、防火墙关闭

⭐⭐⭐

服务端安装步骤

1. 下载源码包并解压; 2. 更新GCC版本(≥4.9); 3. make install编译安装; 4. 修改配置文件(daemonize yes、protected-mode no等)

易错点:GCC版本未升级导致编译失败

⭐⭐⭐

客户端连接验证

通过别名配置简化命令(如redis-cli -h 目标IP),无需密码即可执行任意命令(如SET/GET)

危害场景:数据清空或服务器控制(通过写入恶意命令)

⭐⭐⭐⭐

环境配置技巧

1. 使用alias简化启动命令; 2. 克隆虚拟机快速搭建多节点; 3. 防火墙关闭(systemctl stop firewalld)

效率优化:配置文件路径管理与别名生效(source ~/.bashrc)

⭐⭐

漏洞复现关键点

1. 服务端允许远程无密码访问; 2. 客户端可执行任意Redis命令(如写入SSH公钥)

对比维度:版本兼容性 vs 配置安全性

⭐⭐⭐⭐

一、Redis持久化机制
1. Redis持久化
  • 必要性: Redis作为纯内存数据库,断电或重启会导致内存数据全部丢失,需要通过持久化机制将数据保存到磁盘
  • 两种机制: RDB(Redis Database)和AOF(Append Only File),两种方式可以同时使用
1)RDB
  • 自动触发规则
    
    • 触发方式: 分为手动触发(管理员执行命令)和自动触发(满足条件时)
    • 默认规则:
      • 3600秒(1小时)内至少1个key改变
      • 300秒(5分钟)内至少100个key改变
      • 60秒内至少10000个key改变
    • 规则特点: 多个规则会同时生效,满足任一条件即触发保存
  • 配置文件名
    
    • 默认文件名: 通过dbfilename配置项指定,默认为dump.rdb
    • 文件内容: 采用特殊编码格式存储,不可直接阅读
  • 文件存储位置
    • 默认路径: 通过dir配置项指定,默认为Redis安装根目录(./)
    • 路径修改: 可配置到存储空间更充足或更安全的位置
  • RDB配置总结
    
    • 三要素配置:
      • 自动触发规则(save配置项)
      • 保存文件名(dbfilename配置项)
      • 存储路径(dir配置项)
    • 手动触发命令: save(前台保存)和bgsave(后台保存)
  • 应用案例
    
    • 例题:查看dump文件内容
2)题目解析
  • 操作步骤: 使用cat命令查看dump.rdb文件内容
  • 结果特点: 文件内容为特殊编码格式,显示为乱码
  • 验证方法: 可通过设置新值后手动保存,观察文件变化
二、知识小结

知识点

核心内容

考试重点/易混淆点

难度系数

Redis持久化机制

纯内存数据库特性导致断电数据丢失,通过持久化解决

内存vs磁盘存储特性差异

⭐⭐

RDB持久化方式

默认机制,定时/定量触发内存数据快照保存到磁盘

save规则配置(时间+键数量阈值)

⭐⭐⭐

RDB触发规则

三重自动触发条件: 1. 3600秒+1个key修改; 2. 300秒+100个key修改; 3. 60秒+10000个key修改

多条件并行生效逻辑

⭐⭐⭐⭐

RDB存储配置

文件名:dump.rdb; 路径:安装根目录(可通过directory修改)

配置文件中的dbfilename和dir参数

⭐⭐

手动持久化命令

支持SAVE(前台阻塞)和BGSAVE(后台异步)

强制刷盘与自动触发的区别

⭐⭐⭐

AOF持久化方式

Append Only File机制(与RDB可共存)

两种机制优劣对比未展开

⭐⭐⭐⭐

数据恢复原理

依赖磁盘文件的断电不丢失特性

内存数据易失性 vs 磁盘持久性

⭐⭐

一、动态修改配置
1. 配置文件修改
  • 持久化配置项:
    • save 3600 1:自动触发规则
    • dbfilename dump.rdb:持久化文件名
    • dir ./:存储路径
  • 手动触发命令:
    • save:同步保存
    • bgsave:后台保存
  • 修改方式:通过vim redis.conf直接修改配置文件中的存储目录、文件名或自动保存规则
2. 动态修改配置
  • 特点:
    • 使用config set命令实时修改配置
    • 修改仅在当前连接会话有效
    • 重启后失效,不会修改配置文件本身
  • 应用场景:需要临时调整配置而不影响持久化配置时使用
1)示例操作



  • 操作步骤:
    • config set dir /www/admin/localhost_80/wwwroot:修改存储路径
    • config set dbfilename redis.php:修改持久化文件名
    • 执行set命令写入数据
    • 执行save命令保存数据
  • 验证方法:检查指定目录下是否生成新文件
2)配置项动态修改示例



  • 关键点:
    • 动态修改后,数据会保存到新指定的路径和文件名
    • 原dump.rdb文件不再更新
    • 可通过删除原文件验证修改是否生效
  • 安全风险:
    • 可能被利用来向服务器任意路径写入任意内容
    • 写入PHP代码可能导致webshell漏洞
  • 注意事项:
    • 动态修改是临时性的
    • 重要配置变更仍需修改配置文件
    • 生产环境应严格控制config set命令权限
二、知识小结

知识点

核心内容

考试重点/易混淆点

难度系数

Redis动态修改配置

通过config set命令临时修改配置(如持久化路径/文件名)

修改仅在当前连接有效,不会写入配置文件

⭐⭐

Redis持久化机制

内存数据保存到指定路径的RDB文件

触发保存的规则配置

⭐⭐⭐

动态配置验证方法

1. 删除旧RDB文件; 2. 修改配置; 3. 写入数据后执行SAVE; 4. 检查新路径是否生成文件

文件内容验证需注意二进制格式

⭐⭐⭐⭐

安全风险演示

通过动态配置+持久化实现任意文件写入: - 修改路径/文件名; - 将恶意代码作为value写入

PHP代码注入示例展示

⭐⭐⭐⭐⭐

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值