因為電腦壞掉了,所以暫時沒有截圖 QQ
SMB 針對網路傳輸檔案的協定,提供給網路芳鄰與印表機使用。
可透過未經身分驗證的 inter-process communication (IPC) 機制,處理共享的資料。
最新的版本為 SMB 3.1.1 (Windows 10 與 Windows Server 2016)
以下為版本與作業系統:
SMB Version | Windows version |
---|---|
CIFS | Microsoft Windows NT 4.0 |
SMB 1.0 | Windows 2000, Windows XP, Windows Server 2003 & Windows Server 2003 R2 |
SMB 2.0 | Windows Vista & Windows Server 2008 |
SMB 2.1 | Windows 7 & Windows Server 2008 R2 |
SMB 3.0 | Windows 8 & Windows Server 2012 |
SMB 3.0.2 | Windows 8.1 & Windows Server 2012 R2 |
SMB 3.1.1 | Windows 10 & Windows Server 2016 |
假設使用端和伺服器端使用不同的作業系統與 SMB 版本,則會以最高可支援的版本進行連線,如 Windwos 8 與 Widnow Server 2016 則會以 SMB 3.0 進行連線。
現今有許多 SMB 相關的已知漏洞,如 CVE-2017-0143,影響大量的設備與系統。
使用的 TCP 與 UDP 的 port
名稱 | port | 說明 |
---|---|---|
netbios-ns | 137/tcp | NETBIOS Name Service |
netbios-ns | 137/udp | NETBIOS Name Service |
netbios-dgm | 138/tcp | NETBIOS Datagram Service |
netbios-dgm | 138/udp | NETBIOS Datagram Service |
netbios-ssn | 139/tcp | NETBIOS session service |
netbios-ssn | 139/udp | NETBIOS session service |
microsoft-ds | 445/tcp | 用於 AD |
於 Linux 中有一個工具名 Rpcclient,可執行使用者端的 MS-RPC 的函式。
null session
null session 用於 Samba 或 SMB 伺服器的連接使用,不需要密碼進行身分驗證,預設情況下較舊的系統為開啟的,而 Windows XP SP2 和 Windows Server 2003 禁止使用。
利用空的帳號名稱rpcclient -U "" [target]
輸入以上的指令,會要求輸入密碼,可以將密碼留空。
會看到rpcclient $>
可輸入指令
取得幫助清單help
查看功能變數名稱與使用者數量rpcclient $> querydominfo
該指令可看到 Domain、Server、Comment、Total Users、Total Group、Total Aliases 等資訊
查看使用者清單rpcclient $> enumdomusers
可看到目前使用者的清單,其中 RID 以十六進位表示(0x3E8 = 1000)user:[fei] rid:[0x3e8]
指定使用者帳號取得資訊rpcclient $> queryuser [username]
指定使用者 RID(binary) 取得資訊rpcclient $> queryuser 1000
指定使用者 RID(Hex) 取得資訊rpcclient $> queryuser 0x3e8
以上的指令可以針對該使用者,查詢使用者路徑、home drive、密碼相關資訊。
利用 TAB 取得可用的指令
rpcclient $> enum <TAB><TAB>
enumalsgroups enumdomgroups enumjobs enumprinters enumtrust
enumdata enumdomusers enumkey enumprivs
enumdataex enumdrivers enummonitors enumprocdatatypes
enumdomains enumforms enumports enumprocs
如果出現 NT_STATUS_CONNECTION_DISCONNECTED
表示可能因為 smbclient 版本太低,可以在 /etc/samba/smb.conf
編輯 client min protocol = CORE
並不是每一個系統都可以使用 enumdomusers
列出所有使用者,有一些系統沒有支援,沒有支援的系統,若使用 querydominfo
中的使用者數量為 0。
我們需要使用 RID cycling 來取得使用者列表。
lookupnames
查詢 up namerpcclient $> lookupnames pbx
查詢 SID,會輸出使用者帳號rpcclient $> lookupsids [domain]
查詢以中使用者群組rpcclient $> lookupnames administrators
窮舉 System RIDrpcclient $> lookupsids S-1-5-32-[501-1000]
利用 Perl 撰寫而成的 Linux 版本 enum.exe
可以列舉 Windows 主機的 Samba 資訊,
./enum4linux.pl [options] [ip]
參數 | 說明 |
---|---|
-U | 取得使用者的清單 |
-M | 取得機器的清單 |
-S | 取得共享的清單 |
-P | 取得密碼策略資訊 |
-G | 取得群組和成員列表 |
-d | 詳細資訊,使用於參數 -U 與 -S |
-u user | 特別指定帳號,預設為"" |
-p pass | 特別指定密碼,預設為"" |
-a | 執行所有的獵取包含 -U -S -G -P -r -o -n -i |
-o | 取得作業系統資訊 |
-i | 取得印表機資訊 |
基本列舉enum4linux [target]
Nmap 中的 NSE 包含許多與 SMB 相關的掃描腳本,路徑於 /usr/share/nmap/scripts/smb*
ls -ls /usr/share/nmap/scripts/smb*
若找到想要使用的掃描腳本,可利用以下的指令,指定腳本:
nmap --script=[scriptname] [target ip]
確認 SMB 版本與作業系統版本nmap -p 139,445 --script=smb-os-discovery [target]
利用所有與 SMB 相關的腳本進行掃描
nmap -p 139,445 --script=smb-vuln* [target]
掃描結果可能有 false 或是詳細的掃描資訊(State:VULNERABLE)。
確認目標是否存在 MS08-067 漏洞nmap -p 139,445 --script=smb-vuln-ms08-067 [target]
Eternalblue 是 2017 年 04 月利用 SMBv1 協定的漏洞,影響以下版本:
該漏洞將造成遠端伺服器任意執行指令,屬高風險漏洞。
確認目標是否存在 MS17-010 漏洞nmap -p 445 [target] --script=smb-vuln-ms17-010
可下載 NSE 到系統內部wget https://svn.nmap.org/nmap/scripts/smb-vuln-ms17-010.nse -O /usr/share/nmap/scripts/smb-vuln-ms17-010.nse
更新 NSE 資料庫nmap --script-updatedb