rsync 未授权访问漏洞复现
Rsync是Linux下一款数据备份工具,支持通过rsync协议、ssh协议进行远程文件传输。常被用于在内网进行源代码的分发及同步更新,因此使用人群多为开发人员。其中rsync协议默认监听873端口,而一般开发人员安全意识薄弱的情况下,如果目标开启了rsync服务,并且没有配置ACL或访问密码,我们将可以读写目标服务器文件。
启动了docker环境之后,我在另外一台vps上用rsync查看了当前的容器里的路径。
我们可以下载任意文件:
rsync -av rsync://ip:873/src/etc/passwd ./
我们将容器中的/etc/passwd拷贝到了当前目录下。
写入反弹shell的脚本并赋于执行权限,将其拷贝到漏洞环境中。
另一边进入我们的容器中,可以看到shell.sh已经成功写入。
另外用nc监听的端口也成功反弹得到了shell。
这种未授权访问漏洞,一般都是在配置的时候,未能实现安全配置或权限认证而导致的,所以我们先来看看rsync
的文件配置与认证方式。rsync
的默认配置文件为/etc/rsyncd.conf
,常驻模式启动命令的rsync -daemon
,启动成功后默认监听于TCP端口873,可通过rsync
的守护及SSH两种方式进行认证。
rsync
默认允许匿名访问,也可在其配置文件中为同步目录添加用户认证相关项,包括认证文件及授权账号,若未包含授权账号行(auth users
),则为匿名访问。所以问题就出在这。
配置文件位置:/etc/rsync.conf,常见配置项 motd file -> motd文件位置 log file -> 日志文件位置 path -> 默认路径位置 use chroot -> 是否限定在该目录下,默认为true,当有软连接时,需要改为fasle,如果为true就限定为模块默认目录 read only -> 只读配置(yes or no) list=true -> 是否可以列出模块名 uid = root -> 传输使用的用户名 gid = root -> 传输使用的用户组 auth users -> 认证用户名 secrets file=/etc/rsyncd.passwd -> 指定密码文件,如果设定验证用户,这一项必须设置,设定密码权限为400,密码文件/etc/rsyncd.passwd的内容格式为:username:password hosts allow=192.168.0.101 -> 设置可以允许访问的主机,可以是网段,多个Ip地址用空格隔开 hosts deny 禁止的主机,host的两项可以使用*表任意。
漏洞修复:
- 正确配置认证用户名或者密码
- 使用足够但最小权限
host allow/deny
来控制接入源IP- 可以配置只读
- 非必要应该仅限制配置路径下可访问
微信赞赏支付宝赞赏
发表评论