Redis未授权访问漏洞(一)先导篇

news2024/11/16 6:54:56

前言

Redis默认情况下,会绑定在0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源ip访问等,这样将会将Redis服务暴露到公网上。

如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis以及读取Redis的数据。

攻击者在未授权访问Redis的情况下,利用Redis自身的提供的config命令,可以进行写文件操作,攻击者可以成功将自己的ssh公钥写入目标服务器的/root/.ssh 文件夹的authotrized_keys文件中,进而可以使用对应私钥直接使用ssh服务登录目标服务器、添加计划任务、写入Webshell等操作。

Redis未授权访问是非常常见的一个漏洞,有很多的云服务器被挖矿就是因为安装了Redis。

1-Redis服务器被挖矿案例

在这里插入图片描述首先,在学习Redis漏洞之前先来看一个案列,当我们的redis服务器由于配置不当时是如何被黑客利用来进行挖矿的。

在这里插入图片描述
这是我们买下的一台阿里云服务器,它上面下载了redis服务,我们先来了解一下关于redis服务的外网配置。

redis的服务配置文件都在redis.conf文件里,我们通过下列代码打开编辑redis的服务配置
在这里插入图片描述
进入编辑界面后,我们先来了解一下三个选项
在这里插入图片描述
这是redis的远程保护模式,我们要将他由no改为yes,否者我们是没办法远程连接redis服务器的。

在这里插入图片描述在这里插入图片描述
这里是是否绑定IP可以访问,这里我们需要给他注释掉,否则只能本地主机进行访问。

在这里插入图片描述
第三个我们如果想要别人通过6379端口远程访问我们的redis服务,那我们必须在规则里设置6379端口开放。

在这里插入图片描述

回到我们的正文,在我们在公网的阿里云服务在配置了redis服务没多久之后,手机就收到了这么一条来信:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
没错我们的服务器被黑客攻击了。

在这里插入图片描述
我们通过数据分析,黑客通过对我们的键进行了篡改,远程下载了恶意的挖矿程序。

这是挖矿程序的一部分源码
在这里插入图片描述总体分析下来,恶意程序做了这么几件事:
在这里插入图片描述

1.2-Redis常见用途

因为大家有可能是小白,对于Redis不是很熟悉,所以这里还是先来跟大家介绍一下什么是Redis。如果你在一个互联网公司做运维或者做安全,那一定少不了跟Redis服务器打交道。Redis用来做缓存是非常知名的,但Redis除了做缓存之外可以做的事情是非常多的。

Redis是怎么来的呢?Redis的全称是Remote Dictionary Service(远程字典服务),在2007年的时候Redis的作者antirez做了一个用来统计访问网站记录的网站服务。他会记录每天网站有多少个页面被浏览了,有多少个IP浏览了当前的网站。最开始的时候,antirez是用MYSQL数据库存储这些数据信息的。但后来,慢慢的网站数据变得越来越多,数据库变得越来越卡,于是在2009年,antirez干脆自己用C语言写了一个内存版本的列表功能,那这个内存版本的列表功能就是Redis的前身。

在这里插入图片描述在这里插入图片描述Redis存储数据都是通过键值对的形式来实现的。Redis里我们用的最多的两个操作就是set和get,set就是给一个键赋值,get就是对一个键取值。下面我们通过实际案列来演示一下:

我们通过一下命令用redis.conf配置文件打开redis服务

在这里插入图片描述
再通过这条命令打开redis客户端:

在这里插入图片描述
如图,我们进入了redis的服务器的界面:

在这里插入图片描述

我们通过keys *来获取当前Redis服务里存储的值。如下图看到当前是没有存储任何值的:
在这里插入图片描述
我们可以通过set来给某个键赋值

在这里插入图片描述
看我们通过set 来给 x 赋值了123,x这个键就存储了123数据。

我们可以通过keys *来查看当前数据库有多少个键值对。

在这里插入图片描述
刚刚还是空的数据库,我们通过set给x赋值就出现了x这个键值对

如果我们要查看x这个键中的所存储的数据怎么办呢?这时我们就可以通过get来取值

在这里插入图片描述
如图我们取出了存储于x键值中的数据123

最后我们可以通过FLSHALL命令来清空存储于redis的服务数据

在这里插入图片描述
当我们用keys *命令查看时,刚刚还存在的x键就被清空了

在这里插入图片描述
在这里插入图片描述

1.3-Redis环境安装

讲了这么多,我们先来安装一下Redis环境吧,在这之前我们先要自己准备好一台Centos7操作系统用来安装Redis服务。
1、下载 redis
在这里插入图片描述
如果从官网下载慢,可以把链接贴到迅雷下载,再传到虚拟机:

cd /usr/local/soft/
wget https://download.redis.io/releases/redis-6.0.9.tar.gz

2、解压压缩包

tar -zxvf redis-6.0.9.tar.gz

3、安装 gcc 依赖

Redis 是 C 语言编写的,编译需要 GCC。
Redis6.x.x 版本支持了多线程,需要 gcc 的版本大于 4.9,但是 CentOS7 的默认版本是 4.8.5。
查看 gcc 的版本:

gcc -v

升级 gcc 版本:

yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++
devtoolset-9-binutils
scl enable devtoolset-9 bash
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile

确认 gcc 的版本(在同一个窗口中!):

gcc -v

4、编译安装

cd redis-6.0.9/src
make install

安装成功的结果是 src 目录下面出现服务端和客户端的脚本
redis-server
redis-cli
redis-sentine

5、修改配置文件

默认的配置文件是/usr/local/soft/redis-6.0.9/redis.conf
后台启动,不然窗口一关服务就挂了

daemonize no

改成

daemonize yes

下面一行必须改成 bind 0.0.0.0 或注释,否则只能在本机访问

bind 127.0.0.1

如果需要密码访问,取消 requirepass 的注释,在外网(比如阿里云)这个必须要配置!

requirepass yourpassword

6、使用指定配置文件启动 Redis

/usr/local/soft/redis-6.0.9/src/redis-server
/usr/local/soft/redis-6.0.9/redis.conf

查看端口是否启动成功:

netstat -an|grep 6379

7、进入客户端

/usr/local/soft/redis-6.0.9/src/redis-cli

8、停止 redis(在客户端中)

redis> shutdown

ps -aux | grep redis
kill -9 xxxx

9、配置别名的步骤

vim ~/.bashrc

添加两行:

alias redis='/usr/local/soft/redis-6.0.9/src/redis-server
/usr/local/soft/redis-6.0.9/redis.conf'
alias rcli='/usr/local/soft/redis-6.0.9/src/redis-cli'

编译生效:

source ~/.bashrc

这样就可以用 redis 启动服务,rcli 进入客户端了

1.4-Redis持久化机制

这一节我们来学习一下Redis的持久化机制,首先我们要知道Redis的数据是如何存储的

在这里插入图片描述
我们之前提到的Redis是一个纯内存的数据库,这是Redis访问那么快的根本原因,但是你的数据如果只保存在内存中,一旦服务器断电或重启,内存一清空,你的数据不就也跟着清空了吗?那这样可靠性也太低了吧,所以Redis的作者就想了一个办法,通过Redis持久化机制来保证内存数据不定期的保存到磁盘之中。

Redis持久化机制一共提供了两种方式:
在这里插入图片描述
在这里插入图片描述
我们来看一下自动触发规则的设置,这里有三个选项,save 3600 1表示假如每3600秒有一个键值被添加就保存数据到磁盘一次,剩下的两个以此类推。

那么他刷盘的时候文件会保存到哪个地方呢?保存为什么文件名呢?

我们可以通过dir ./ 来指定保存的路劲,当前这条命令就是保存在根目录下。dbfilename来指定保存数据的文件名,dbfilename redis.php当前这条命令就是指定当前保存数据的文件名为redis.php。

我们还有种方式就是手动触发保存,命令就是save。

1.5-Redis动态修改配置

什么叫做Redis动态修改配置呢?本来我们修改Redis配置文件都要在redis.conf这个文件中去修改的,但是redis我们提供了一种动态修改配置的方式:
在这里插入图片描述
我们可以通过config set 去修改配置文件,但是修改后的配置文件只在当前会话中生效,也就是说当你重启服务后动态修改的配置都会失效的。

我们动态修改配置:
在这里插入图片描述然后随便添加一些键值对:
在这里插入图片描述再通过save命令保存:
在这里插入图片描述
然后我们去 /www/admin/localhost_80/wwwroot目录下查看有没有redis.php这个文件:
在这里插入图片描述
如图看到确实出现了我们保存数据的文件
我们再通过cat命令去查看这个文件的内容:
在这里插入图片描述

仔细看确实可以在文件中看到被保存着的aaa,bbb字符。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/150895.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

InceptionNet与ResNet

以下代码图片思路来源: 北京大学Tensor flow笔记 嗯,最近学了一下神经网络,并没有很难,主要是把代码背下来,然后掌握Tensorflow是怎么搭建网络的,Tensorflow是比pytorch好用的,我直接抄的代码里面&#xff…

UDS诊断系列介绍05-27服务

本文框架1. 系列介绍27服务概述2. 27服务请求与应答2.1 27服务请求2.2 27服务肯定应答2.3 27服务否定应答1. 系列介绍 UDS(Unified Diagnostic Services)协议,即统一的诊断服务,是面向整车所有ECU的一种诊断通信方式,…

java-操作excel

文章目录java操作Excel数据使用场景excel 03 和 07的区别POIeasyExcel解析excel表中的对象POI使用步骤POI 写数据POI 读数据计算公式easyExcel读写数据写数据读数据java操作Excel数据 在 平时 可以使用IO流对Excle进行操作 但是现在使用更加方便的第三方组件来实现 使用场景 1、…

在rhel7系统使用Mariadb

文章目录一 联系和区别二 需求三 部署安装3.1 环境准备3.2 安装软件包3.3 启动服务3.4 设置防火墙策略四 创建用户和库表4.1 登录数据库4.2 创建用户4.3 创建数据库和表五 备份和恢复5.1 备份 com 数据库5.2 模拟误删除操作5.3 恢复表一 联系和区别 Mariadb是由社区开发的一个…

4.4 集成运放的性能指标及低频等效电路

一、集成运放的性能指标 在考察集成运放的性能时,常用下列参数来描述: 1、开环差模增益 AodA_{od}Aod​ 在集成运放无外加反馈时的差模放大倍数称为差模开环增益,记作 AodA_{od}Aod​。AodΔuO/(uP−uN)A_{od}\Delta u_O/(u_P-u_N)Aod​Δ…

【Spring Cloud GateWay】ServerHttpResponseDecorator不生效

文章目录1. BUG描述2. BUG解决3. BUG分析1. BUG描述 在Spring Cloud Gateway使用编码的方式实现一个全局拦截器,在全局拦截器中想要打印响应日志。 于是自己装饰了一个具有打印日志功能的ServerHttpResponseDecorator,但是在转发后的服务返回响应的时候…

在线浏览PDF:Grapecity Documents for PDF Viewer 6.0.2

Grapecity Documents for PDF Viewer跨平台 JavaScript PDF 查看器---备注:必须配合.NET版本才能编辑PDF 使用我们的 JavaScript PDF 查看器在网络上阅读和编辑 PDF。跨浏览器和框架打开和打印。 Grapecity Documents for PDF Viewer全功能的 JavaScript PDF 查看器和 PDF 编辑…

move语言之基础学习(基本类型+表达式+变量)例子

一、基本类型 Move 的基本数据类型包括: 整型 (u8, u64, u128)、布尔型 boolean 和地址 address。 Move 不支持字符串和浮点数。 整型 整型包括 u8、u64 和 u128,我们通过下面的例子来理解整型: script { fun main() { // define empty variable, set…

python(0)计算机基础知识

文章目录计算机是什么计算机的组成计算机的使用方式windows的命令行文本文件和字符集乱码计算机是什么 在现实生活中,越来越无法离开计算机了 电脑、笔记本、手机、游戏机、汽车导航、智能电视。。。 计算机就是一个用来计算的机器 目前来讲,计算机只…

C++模板进阶+继承详解

耕耘和收获不是连贯的&#xff0c;中间还隔着很长一段时间&#xff0c;那就是坚持&#xff01;一&#xff1a;模板进阶1.1&#xff1a;非类型模板参数template<class T,size_t N> class arr { private:T _a[N]; };这里的N就跟define一样&#xff0c;属于非类型模板参数。…

MongoDB常用操作

官网地址&#xff1a;https://www.mongodb.com/docs/manual/reference/method/Date/ 实例&#xff1a;系统上运行的进程及节点集&#xff0c;一个实例可以有多个库&#xff0c;默认端口 27017。如果要在一台机器上启动多个实例&#xff0c;需要设置不同端口和不同的dbpath。库&…

第四章web服务器之httpd

文章目录第四章 web服务器1.1 www简介1.1.1 网址及HTTP简介1.1.2 HTTP协议请求的工作流程1.2 www服务器的类型1.2.1 仅提供用户浏览的单向静态网页1.2.2 提供用户互动接口的动态网站1.3 www服务器的基本配置1.4 实验1.4.1 搭建静态网站——基于http协议的静态网站1.4.2 搭建静态…

Acwing---1211.蚂蚁感冒

蚂蚁感冒1.题目2.基本思想3.代码实现1.题目 长 100 厘米的细长直杆子上有 nnn 只蚂蚁。 它们的头有的朝左&#xff0c;有的朝右。 每只蚂蚁都只能沿着杆子向前爬&#xff0c;速度是 1 厘米/秒。 当两只蚂蚁碰面时&#xff0c;它们会同时掉头往相反的方向爬行。 这些蚂蚁中…

C语言基本数据类型(一)

文章目录 前言 一、int类型 二、八进制和十六进制 三、其他整数类型 四、char 类型 五、_Bool 类型 六、 可移植类型&#xff1a;stdint.h和unttypes.h 前言 C语言基本数据类型包括声明变量、如何表示字面值常量&#xff0c;以及经典的用法。 一、int类型 C语言中包括许…

【openGauss】在openEuler(ARM架构)上安装openGauss(一主一备)

一、系统版本介绍 当前案例中的openGauss安装&#xff0c;底层操作系统为openEuler-20.03-LTS版本&#xff0c;当前openGauss对Python版本兼容性最好的是Python 3.6版本与Python 3.7版本&#xff0c;该实验使用的openEuler版本自带Python 3.7.4&#xff0c;不需要再自行安装 二…

零基础如何入门网络安全?2023年最新,建议收藏!

前言 最近收到不少关注朋友的私信和留言&#xff0c;大多数都是零基础小友入门网络安全&#xff0c;需要相关资源学习。其实看过的铁粉都知道&#xff0c;之前的文里是有过推荐过的。新来的小友可能不太清楚&#xff0c;这里就系统地叙述一遍。 01.简单了解一下网络安全 说白…

前端必会手写面试题合集

实现Event(event bus) event bus既是node中各个模块的基石&#xff0c;又是前端组件通信的依赖手段之一&#xff0c;同时涉及了订阅-发布设计模式&#xff0c;是非常重要的基础。 简单版&#xff1a; class EventEmeitter {constructor() {this._events this._events || ne…

电力系统IEEE33节点Simulink仿真研究(Matlab实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f389;作者研究&#xff1a;&#x1f3c5;&#x1f3c5;&#x1f3c5;主要研究方向是电力系统和智能算法、机器学…

arduino基本知识认识和学习资源

个人对ardunio的感觉 **像是一个模块化功能的单片机&#xff0c;编程时在单片机中就像python在计算机语言的感觉。**硬件方面的功能比较单一依赖于传感器和硬件电路&#xff1b;编程比较简单&#xff0c;所有执行的函数都已经被封装&#xff0c;所以想要成为第一个用这个库吃瓜…

【C语言刷题】猜名次、猜凶手、杨辉三角、杨氏矩阵、字符串左旋、判断是否为左旋子串

目录 一、猜名次 二、猜凶手 三、杨辉三角 解法一&#xff1a; 解法二 四、杨氏矩阵 解法一 解法二 五、字符串左旋 解法一 解法二 六、判断是否为字符串左旋字串 解法一 解法二 总结 一、猜名次 5位运动员参加了10米台跳水比赛&#xff0c;有人让他们预测比赛结果…