一、什么是 Rsync?
- Rsync 是一种广泛使用的文件传输工具,它允许系统管理员和用户通过局域网(LAN)或广域网(WAN)在计算机之间同步文件和目录。
- Rsync 支持通过本地或远程 shell 访问,也可以作为守护进程运行,监听特定端口(默认为 873)上的连接。
- Rsync 使用一种高效的算法来同步文件,只传输文件的变更部分,而不是整个文件,可以保持文件属性、权限、时间戳和符号链接等,这使得它非常适合于大型文件和频繁更新的场景。
二、Rsync未授权访问漏洞复现
1、首先,可以通过以下命令直接访问,并查看各个Rsync配置好的文件
Shell
rsync rsync://192.168.118.3:873
如下
2、未认证的话,还可直接访问到模块内的目录
三、漏洞修复措施
1、先别急,看看配置文件/etc/rsync.conf,详细解析
bash
motd file = /path -> motd文件位置
log file = /path -> 日志文件位置
path = /path -> 默认路径位置
use chroot = yes -> 是否限定在该目录下,默认为true,当有软连接时,需要改为fasle,如果为true就限定为模块默认目录
read only = no -> 只读配置(yes or no)
list = true -> 是否可以列出模块名
uid = root -> 传输使用的用户名
gid = root -> 传输使用的用户组
auth users = username -> 认证用户名
secrets file = /etc/rsyncd.passwd -> 指定密码文件,如果设定验证用户,这一项必须设置,设定密码权限为400,密码文件/etc/rsyncd.passwd的内容格式为:username:password
hosts allow = 192.168.0.101 -> 设置可以允许访问的主机,可以是网段,多个Ip地址用空格隔开
hosts deny = 192.168.118.0/24 -> 禁止的主机,host的两项可以使用*表任意。
2、好了,大概了解,可以用hosts allow和hosts deny,来允许和禁止访问的主机IP,例如
bash
[Confi]
path = /etc
hosts allow = 192.168.0.101
hosts deny = 192.168.118.0/24
设置192.168.118.0/24网段,Confi访问不了了,效果如下
3、或者添加账号密码认证,给Priva添加,例如
bash
[Priva]
path = /tmp
auth users = username
secrets file = /etc/rsyncd.passwd
接下来访问Priva模块,要输入密码啦,效果如下
4、还有个问题,一开始访问的目录,该怎么隐藏呢
哈哈,细心的小伙伴肯定发现了,从rsync.conf解析看,可以将list默认的true,设置为false
bash
list = false
就啥模块也找不到啦,不过后面添加模块路径,依旧可以访问的,效果如下
5、简单粗暴的,直接在系统iptables防火墙设置,只允许指定的主机IP访问873端口
bash
iptables -A INPUT -p tcp -s 192.168.0.101 --dport 873 -j DROP
iptables -A INPUT -p tcp --dport 873 -j DROP
嘿嘿,结果显示是,一直超时,效果如下
iptables重启后,规则会自动失效 ,记得保存,iptables-save保存到一个路径,重启后输入iptables-restore命令还原,即可
bash
iptables-save > /tmp/iptables.save
iptables-restore < /tmp/iptables.save
6、完美解决,Over~~