滲透測試中SMB服務漏洞檢查checklist
- 2019 年 10 月 8 日
- 筆記

來源: https://0xdf.gitlab.io/2018/12/02/pwk-notes-smb-enumeration-checklist-update1.html#list-shares 由於我上個月一直在使用PWK / OSCP,在這個過程中,我注意到滲透SMB服務是一件很棘手的事情,不同的工具在不同的主機上有的失敗有的成功。通過參考NetSecFocus發布的一些內容,我整理了一份在滲透測試中掃描SMB服務漏洞的檢查列表。我將在每個部分中包含示例,但在我使用PWK實驗室的地方,我會按照規則對數據進行脫敏展示。
- 清單
- 工具
- 細節
- 枚舉主機名 – nmblookup
- 掃描共享 – smbmap – smbclient – NMAP
- 檢查空會話 – smbmap – rpcclient – smbclient
- 檢查漏洞 – NMAP
- 整體掃描 – enum4linux
- 手動檢查
- Samba服務 – Windows
檢查清單
- 枚舉主機名 – nmblookup -A [ip]
- 列出共享文件
smbmap -H [ip/hostname] echo exit | smbclient -L \\[ip] nmap --script smb-enum-shares -p 139,445 [ip]
檢查空會話
smbmap -H [ip/hostname] rpcclient -U "" -N [ip] smbclient \\[ip]\[share name]
檢查漏洞
nmap --script smb-vuln* -p 139,445 [ip]
整體掃描
enum4linux -a [ip]
手動檢查
smbver.sh [IP] (port) [samba] - 檢查pcap
工具
- nmblookup – 收集用於查找NetBIOS名稱的TCP / IP客戶端上的NetBIOS資訊
- smbclient – 一個類似於ftp的客戶端,用於訪問SMB共享
- nmap – 通用的掃描工具,自帶檢查腳本
- rpcclient – 執行客戶端MS-RPC功能的工具
- enum4linux – 枚舉各種smb功能
- wireshark
操作細節
枚舉主機名
- nmblookup
nmblookup -A [IP] -A - 按IP地址查找 使用示例: root@kali:~# nmblookup -A [ip] Looking up status of [ip] [hostname] <00> - M <ACTIVE> [hostname] <20> - M <ACTIVE> WORKGROUP <00> - <GROUP> M <ACTIVE> WORKGROUP <1e> - <GROUP> M <ACTIVE> <03> - M <ACTIVE> INet~Services <1c> - <GROUP> M <ACTIVE> IS~[hostname] <00> - M <ACTIVE> MAC Address = 00-50-56-XX-XX-XX
掃描共享
- smbmap
smbmap -H [ip/hostname]
此命令將顯示主機上的共享以及你擁有的訪問許可權。 使用示例:
root@kali:/# smbmap -H [ip] [+] Finding open SMB ports.... [+] User SMB session establishd on [ip]... [+] IP: [ip]:445 Name: [ip] Disk Permissions ---- ----------- ADMIN$ NO ACCESS C$ NO ACCESS IPC$ NO ACCESS NETLOGON NO ACCESS Replication READ ONLY SYSVOL NO ACCESS
如果你獲得了登錄憑據,則可以重新運行來顯示新訪問許可權:
root@kali:/# smbmap -H [ip] -d [domain] -u [user] -p [password] [+] Finding open SMB ports.... [+] User SMB session establishd on [ip]... [+] IP: [ip]:445 Name: [ip] Disk Permissions ---- ----------- ADMIN$ NO ACCESS C$ NO ACCESS IPC$ NO ACCESS NETLOGON READ ONLY Replication READ ONLY SYSVOL READ ONLY
- smbclient
echo exit | smbclient -L \\[ip]
exit會處理可能彈出的任何密碼請求,因為我們正在檢查null登錄
-L - 獲取給定主機的共享列表
使用示例:
root@kali:~# smbclient -L \[ip] Enter WORKGROUProot's password: Sharename Type Comment --------- ---- ------- IPC$ IPC Remote IPC share Disk wwwroot Disk ADMIN$ Disk Remote Admin C$ Disk Default share Reconnecting with SMB1 for workgroup listing. Server Comment --------- ------- Workgroup Master --------- -------
- NMAP
nmap --script smb-enum-shares -p 139,445 [ip] --script smb-enum-shares - 指定smb枚舉腳本 -p 139,445 - 指定smb埠
使用示例:
root@kali:~# nmap --script smb-enum-shares -p 139,445 [ip] Starting Nmap 7.70 ( https://nmap.org ) at 2018-09-27 16:25 EDT Nmap scan report for [ip] Host is up (0.037s latency). PORT STATE SERVICE 139/tcp open netbios-ssn 445/tcp open microsoft-ds MAC Address: 00:50:56:XX:XX:XX (VMware) Host script results: | smb-enum-shares: | account_used: guest | \[ip]ADMIN$: | Type: STYPE_DISKTREE_HIDDEN | Comment: Remote Admin | Anonymous access: <none> | Current user access: <none> | \[ip]C$: | Type: STYPE_DISKTREE_HIDDEN | Comment: Default share | Anonymous access: <none> | Current user access: <none> | \[ip]IPC$: | Type: STYPE_IPC_HIDDEN | Comment: Remote IPC | Anonymous access: READ | Current user access: READ/WRITE | \[ip]share: | Type: STYPE_DISKTREE | Comment: | Anonymous access: <none> | Current user access: READ/WRITE | \[ip]wwwroot: | Type: STYPE_DISKTREE | Comment: | Anonymous access: <none> |_ Current user access: READ Nmap done: 1 IP address (1 host up) scanned in 10.93 seconds
檢查空會話
- smbmap
smbmap -H [ip/hostname]
將顯示你可以使用給定憑據執行的操作(如果沒有憑據,則顯示空會話)。請參閱上一節中的示例。
- rpcclient
rpcclient -U "" -N [ip] -U "" -空會話 -N -沒有密碼
使用示例:
root@kali:~# rpcclient -U "" -N [ip] rpcclient $>
之後,你可以運行rpc命令。
smbclient smbclient \\[ip]\[share name]
此命令會嘗試連接到共享。包括嘗試無密碼(或發送空密碼),這仍然有可能連接成功。 使用示例:
root@kali:~/pwk/lab/public# smbclient \\[ip]\share Enter WORKGROUProot's password: Try "help" to get a list of possible commands. smb: > ls . D 0 Thu Sep 27 16:26:00 2018 .. D 0 Thu Sep 27 16:26:00 2018 New Folder (9) D 0 Sun Dec 13 05:26:59 2015 New Folder - 6 D 0 Sun Dec 13 06:55:42 2015 Shortcut to New Folder (2).lnk A 420 Sun Dec 13 05:24:51 2015 1690825 blocks of size 2048. 794699 blocks available
檢查漏洞
- NMAP
nmap --script smb-vuln* -p 139,445 [ip]
–script smb-vuln* – 將運行所有smb漏洞掃描腳本 -p 139,445 – smb埠使用示例:
root@kali:~# nmap --script smb-vuln* -p 139,445 [ip] Starting Nmap 7.70 ( https://nmap.org ) at 2018-09-27 16:37 EDT Nmap scan report for [ip] Host is up (0.030s latency). PORT STATE SERVICE 139/tcp open netbios-ssn 445/tcp open microsoft-ds MAC Address: 00:50:56:XX:XX:XX (VMware) Host script results: | smb-vuln-ms06-025: | VULNERABLE: | RRAS Memory Corruption vulnerability (MS06-025) | State: VULNERABLE | IDs: CVE:CVE-2006-2370 | A buffer overflow vulnerability in the Routing and Remote Access service (RRAS) in Microsoft Windows 2000 SP4, XP SP1 | and SP2, and Server 2003 SP1 and earlier allows remote unauthenticated or authenticated attackers to | execute arbitrary code via certain crafted "RPC related requests" aka the "RRAS Memory Corruption Vulnerability." | | Disclosure date: 2006-6-27 | References: | https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2006-2370 |_ https://technet.microsoft.com/en-us/library/security/ms06-025.aspx |_smb-vuln-ms10-054: false |_smb-vuln-ms10-061: false | smb-vuln-ms17-010: | VULNERABLE: | Remote Code Execution vulnerability in Microsoft SMBv1 servers (ms17-010) | State: VULNERABLE | IDs: CVE:CVE-2017-0143 | Risk factor: HIGH | A critical remote code execution vulnerability exists in Microsoft SMBv1 | servers (ms17-010). | | Disclosure date: 2017-03-14 | References: | https://technet.microsoft.com/en-us/library/security/ms17-010.aspx | https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-0143 |_ https://blogs.technet.microsoft.com/msrc/2017/05/12/customer-guidance-for-wannacrypt-attacks/ |_smb-vuln-regsvc-dos: ERROR: Script execution failed (use -d to debug) Nmap done: 1 IP address (1 host up) scanned in 5.58 seconds
整體掃描
- enum4linux
enum4linux -a [ip]
-a – 枚舉所有 使用示例的輸出很長,但要查找一些要點:
- 輸出類似於nmblookup
- 檢查空會話
- 共享文件
- 密碼策略
- RID循環輸出
- 域名資訊
手動檢查
- samba ngrep是一個很好用的網路數據工具。在一個終端中運行
ngrep -i -d tap0 's.?a.?m.?b.?a.*[[:digit:]]' port 139
然後在另一個終端中運行
echo exit | smbclient -L [IP]
將丟棄包括版本在內的大量資訊。 在PWK論壇上的rewardone發布了一個簡潔的腳本來輕鬆獲得Samba版本:
#!/bin/sh #Author: rewardone #Description: # Requires root or enough permissions to use tcpdump # Will listen for the first 7 packets of a null login # and grab the SMB Version #Notes: # Will sometimes not capture or will print multiple # lines. May need to run a second time for success. if [ -z $1 ]; then echo "Usage: ./smbver.sh RHOST {RPORT}" && exit; else rhost=$1; fi if [ ! -z $2 ]; then rport=$2; else rport=139; fi tcpdump -s0 -n -i tap0 src $rhost and port $rport -A -c 7 2>/dev/null | grep -i "samba|s.a.m" | tr -d '.' | grep -oP 'UnixSamba.*[0-9a-z]' | tr -d 'n' & echo -n "$rhost: " & echo "exit" | smbclient -L $rhost 1>/dev/null 2>/dev/null sleep 0.5 && echo "" 當您在運行Samba的盒子上運行它時,您會得到結果: root@kali:~/pwk/lab/public# ./smbver.sh [IP] [IP]: UnixSamba 227a
如有疑問,我們可以在PCAP中檢查smb版本。下面是Unix Samba 2.2.3a的一個例子:

Window環境的滲透——Windows SMB版本比較複雜,但通過查看wireshark的抓取的數據包,會提供有關連接的大量資訊。例如,我們可以過濾ntlmssp.ntlmv2_response來查看NTLMv2流量,就可以獲取很多關於目標主機的系統資訊。