我們要講下一個是Network File System,中文就是網路檔案系統,能夠讓兩台主機之間透過TCP來傳送或者是讀取檔案。在Nmap掃描的時候可能會看到Port 111還有2049,這兩個Port如果有打開的話可能就是Network File System。
那在這個部分我們會帶一個Lab,是Hack the Box的Remote,那過先不會做太多的Enumeration,就是簡單介紹一下說這一個工具要怎麼使用。
因為我們的Enumeration是第一次講到跟File Server有關的Port以及服務,所以它的思路其實跟FTP或者是等一下要講的SMB有點像,都是File Server,都是讓你可以去遠端存取目標的檔案。如果說有這個Port開啟的話,那它的思路其實是有點像是尋找Config,或者是你可以用比如說像Grep這樣的工具去尋找它有沒有像是Password這種敏感的字串。那另外一個思路可能是要去尋找有沒有備份的檔案,因為常常會出現說有IT把備份的檔案直接也放在裡面,那這個備份的檔案可能是密碼或者Shadow檔案。如果是Shadow檔案的話,它有可能就直接給你Permission,不需要Root也可以查看。如果說看到這種密碼或者是Hash的話,就可以去做暴力破解。或者是如果說有密碼,可以做更深的比如說Web Login登入或者是SSH的部分。
針對Network File System,Kali Linux有提供一個工具叫ShowMount,目的是尋找出能夠Mount的Folder。指令很簡單,一個ShowMount,然後-e你的IP Address:
┌──(root㉿kali)-[~]
└─# showmount -e 10.10.10.180
Export list for 10.10.10.180:
/site_backups (everyone)
就是它這邊有個Site Backups,這邊有括號告訴你它的權限是所有人都可以讀取,這個時候我們可以用Mount的這個指令把Site Backups的這個資料夾掛載到我們本地Kali的MNT資料夾。
┌──(root㉿kali)-[~]
└─# mount -t nfs 10.10.10.180:site_backups /mnt
┌──(root㉿kali)-[~]
└─# ls /mnt
App_Browsers App_Plugins bin css Global.asax scripts Umbraco_Client Web.config
App_Data aspnet_client Config default.aspx Media Umbraco Views
其實就可以看到說它遠端的Site Backup資料夾成功被我們Mount起來,並且我們也可以做遠端的存取。比如說我看到這樣的一個Folder,我通常會先看一下像這種Web Config,我們通常可以從Config檔案來下手。雖然這一題要做的其實不是這個Web Config,但是通常的思路是這樣,就是你可以一點一點的去查看比如說Config或者是找Password,或者是說在這一題,它其實要做的是它裡面有已知的帳號以及Hash,這樣的話我們可以透過grep的這個指令來尋找有沒有常用的帳號或者是Password的字串比如說Admin、Administrator或是User Name Password之類的。
這邊給大家一個小小的思路。考試或者是Lab的時候,有的時候它的目標為了故意考你,你在ls -la
的時候你可以看到,舉個例子好了,假設這個WebConfig,它有的時候它的權限可能不是像這樣子Nobody然後這邊帶一個數字:
┌──(root㉿kali)-[~]
└─# cd /mnt
┌──(root㉿kali)-[/mnt]
└─# ls -la
total 123
drwx------ 2 nobody nogroup 4096 Feb 23 2020 .
drwxr-xr-x 18 root root 4096 Jun 1 21:50 ..
drwx------ 2 nobody nogroup 64 Feb 20 2020 App_Browsers
drwx------ 2 nobody nogroup 4096 Feb 20 2020 App_Data
drwx------ 2 nobody nogroup 4096 Feb 20 2020 App_Plugins
drwx------ 2 nobody nogroup 64 Feb 20 2020 aspnet_client
drwx------ 2 nobody nogroup 49152 Feb 20 2020 bin
drwx------ 2 nobody nogroup 8192 Feb 20 2020 Config
drwx------ 2 nobody nogroup 64 Feb 20 2020 css
-rwx------ 1 nobody nogroup 152 Nov 1 2018 default.aspx
-rwx------ 1 nobody nogroup 89 Nov 1 2018 Global.asax
drwx------ 2 nobody nogroup 4096 Feb 20 2020 Media
drwx------ 2 nobody nogroup 64 Feb 20 2020 scripts
drwx------ 2 nobody nogroup 8192 Feb 20 2020 Umbraco
drwx------ 2 nobody nogroup 4096 Feb 20 2020 Umbraco_Client
drwx------ 2 nobody nogroup 4096 Feb 20 2020 Views
-rwx------ 1 nobody nogroup 28539 Feb 20 2020 Web.config
它可能會做的是限定只有某一個User,比如說它是Test User才能去查看這個檔案,所以這個時候我們的解法其實很簡單,我們可以在我們的kali端有一個一模一樣名稱的User或者是Group。假設說這邊有一個Test ABC的User只能讀取Config這個檔案,那我們也可以在kali端新增一個Test ABC這個User(就是說User Name、Group要跟它一樣)就可以繞過這樣的限制。
Grep稍微看一下,基本上應該可以看到有一個檔案是會出現Admin,然後一些後面有Password的部分。
┌──(root㉿kali)-[/mnt]
└─# grep -r admin
App_Data/Logs/UmbracoTraceLog.intranet.txt: 2020-02-20 00:12:13,455 [P4408/D19/T40] INFO Umbraco.Core.Security.BackOfficeSignInManager - Event Id: 0, state: Login attempt succeeded for username admin@htb.local from IP address 192.168.195.1
App_Data/Logs/UmbracoTraceLog.intranet.txt: 2020-02-20 00:12:13,455 [P4408/D19/T40] INFO Umbraco.Core.Security.BackOfficeSignInManager - Event Id: 0, state: User: admin@htb.local logged in from IP address 192.168.195.1
App_Data/Logs/UmbracoTraceLog.intranet.txt: 2020-02-20 00:14:42,175 [P4408/D20/T42] INFO Umbraco.Web.Editors.AuthenticationController - User admin@htb.local from IP address 192.168.195.1 has logged out
App_Data/Logs/UmbracoTraceLog.intranet.txt: 2020-02-20 00:15:24,558 [P4408/D20/T16] INFO Umbraco.Core.Security.BackOfficeSignInManager - Event Id: 0, state: Login attempt succeeded for username admin@htb.local from IP address 192.168.195.1
App_Data/Logs/UmbracoTraceLog.intranet.txt: 2020-02-20 00:15:24,558 [P4408/D20/T16] INFO Umbraco.Core.Security.BackOfficeSignInManager - Event Id: 0, state: User: admin@htb.local logged in from IP address 192.168.195.1
App_Data/Logs/UmbracoTraceLog.intranet.txt: 2020-02-20 00:16:45,736 [P4408/D20/T41] INFO Umbraco.Web.Editors.AuthenticationController - User admin@htb.local from IP address 192.168.195.1 has logged out
App_Data/Logs/UmbracoTraceLog.intranet.txt: 2020-02-20 00:16:55,036 [P4408/D20/T41] INFO Umbraco.Core.Security.BackOfficeSignInManager - Event Id: 0, state: Login attempt succeeded for username admin@htb.local from IP address 192.168.195.1
那就繼續我們最後一個Enumeration常見的protocol,那這個protocol是SMB,它的名字叫Server Message Block,它會在TCP的139,445,那這兩個Port如果有掃到,基本上都是SMB。
那它常見的使用情境,通常你可以在Windows的網路芳鄰可以看到,網路芳鄰可以透過這個SMB來做到。那對於攻擊者來說,SMB可以算是相當大的寶庫,比如說在之前很流行的Eternal Blue,那這一個攻擊也是在17年很出名的WannaCry這個熱索軟體,它第一個Initial Access就是使用Eternal Blue,所以SMB的攻擊其實真的是層出不窮,像一開始的MS-08-067 Buffer Overflow,也是打SMB。
MS-08067可以說是Buffer Overflow的研究的一個最出名的一個起點,那講這麼多,其實就是跟大家說SMB其實漏洞百出,如果看到SMB其實大家可以很開心,因為通常SMB都會有漏洞。那我們這一節目的就是要教大家一些SMB enumeration的思路。
我們會使用兩個Machine,第一個是HackTheBox的Blue,還有第二個是HackTheBox的Sharp。SMB它其實也是一個File Server,跟剛剛的NFS其實是一樣的。所以如果說你是正常的存取SMB,你要走這一個這樣的File Enumeration,思路的話跟剛剛提到的NFS其實是一樣的。我們也可以去尋找它的像是Password或者是檔案,或者是有什麼關鍵敏感的字串,我們都可以把檔案下載下來,在Kali上面做尋找。
我們先看一下HackTheBox的Blue它Nmap的結果大概長什麼樣子。
┌──(root㉿kali)-[~]
└─# nmap -p135,139,445,49152-49157 -A 10.10.10.40
Starting Nmap 7.93 ( https://nmap.org ) at 2023-07-01 06:54 EDT
Nmap scan report for 10.10.10.40
Host is up (0.47s latency).
PORT STATE SERVICE VERSION
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds Windows 7 Professional 7601 Service Pack 1 microsoft-ds (workgroup: WORKGROUP)
49152/tcp open msrpc Microsoft Windows RPC
49153/tcp open msrpc Microsoft Windows RPC
49154/tcp open msrpc Microsoft Windows RPC
49155/tcp open msrpc Microsoft Windows RPC
49156/tcp open msrpc Microsoft Windows RPC
49157/tcp open msrpc Microsoft Windows RPC
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Aggressive OS guesses: Microsoft Windows 7 or Windows Server 2008 R2 (97%), Microsoft Windows Server 2008 R2 SP1 (96%), Microsoft Windows Server 2008 SP1 (96%), Microsoft Windows 7 (96%), Microsoft Windows 7 SP0 - SP1, Windows Server 2008 SP1, Windows Server 2008 R2, Windows 8, or Windows 8.1 Update 1 (96%), Microsoft Windows 7 SP1 (96%), Microsoft Windows Vista or Windows 7 SP1 (96%), Microsoft Windows Vista SP1 - SP2, Windows Server 2008 SP2, or Windows 7 (96%), Microsoft Windows Vista SP2, Windows 7, or Windows 7 SP1 (96%), Microsoft Windows Vista SP0 or SP1 (96%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 2 hops
Service Info: Host: HARIS-PC; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| smb2-security-mode:
| 210:
|_ Message signing enabled but not required
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
| smb2-time:
| date: 2023-07-01T10:56:08
|_ start_date: 2023-07-01T09:13:34
| smb-os-discovery:
| OS: Windows 7 Professional 7601 Service Pack 1 (Windows 7 Professional 6.1)
| OS CPE: cpe:/o:microsoft:windows_7::sp1:professional
| Computer name: haris-PC
| NetBIOS computer name: HARIS-PC\x00
| Workgroup: WORKGROUP\x00
|_ System time: 2023-07-01T11:56:04+01:00
|_clock-skew: mean: -19m58s, deviation: 34m37s, median: 0s
TRACEROUTE (using port 139/tcp)
HOP RTT ADDRESS
1 307.89 ms 10.10.16.1
2 515.89 ms 10.10.10.40
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 89.73 seconds
其實- A
涵蓋了蠻多常見的Port掃描所以大家可以看到說139,445這邊它其實都有開,Nmap也幫我們抓出它系統的版本是Windows 7,那重點是在下面,這個NSE Script它會跑一些常見的Script,比如說像是這個OS Discovery,它可以看到比如說像是這個Computer Name它是HARIS-PC,還有它的Workgroup。
接下來要做的,就是使用NSE Script去掃描。因為我們已知要掃的只有針對SMB,所以我們可以用- P
,這個Option我們指定要掃的Port是139跟445這兩個Port,然後配上我們的Script。那上次有提到NSE Script非常多,但是今天我們的重點是在SMB的部分,所以如果大家以後在考試或者是做Lab的時候看到了這種SMB的Port,建議可以使用SMB的NSE Script都給它掃一下。那我的做法通常就是SMB ENUM然後Wildcard。那在這個地方可以看到NMAP的ENUM Share這一個NSE Script,幫我們看了一下有沒有什麼Anonymous Access的部分,比如說像這邊就有Anonymous Access可以做讀取。
┌──(root㉿kali)-[~]
└─# nmap -p139,445 --script=smb-enum-* 10.10.10.40
Starting Nmap 7.93 ( https://nmap.org ) at 2023-07-01 07:42 EDT
Nmap scan report for 10.10.10.40
Host is up (0.24s latency).
PORT STATE SERVICE
139/tcp open netbios-ssn
445/tcp open microsoft-ds
Host script results:
| smb-enum-shares:
| account_used: guest
| \\10.10.10.40\ADMIN$:
| Type: STYPE_DISKTREE_HIDDEN
| Comment: Remote Admin
| Anonymous access: <none>
| Current user access: <none>
| \\10.10.10.40\C$:
| Type: STYPE_DISKTREE_HIDDEN
| Comment: Default share
| Anonymous access: <none>
| Current user access: <none>
| \\10.10.10.40\IPC$:
| Type: STYPE_IPC_HIDDEN
| Comment: Remote IPC
| Anonymous access: READ
| Current user access: READ/WRITE
| \\10.10.10.40\Share:
| Type: STYPE_DISKTREE
| Comment:
| Anonymous access: <none>
| Current user access: READ
| \\10.10.10.40\Users:
| Type: STYPE_DISKTREE
| Comment:
| Anonymous access: <none>
|_ Current user access: READ
Nmap done: 1 IP address (1 host up) scanned in 102.72 seconds
除了ENUM之外,也會建議用SMB Vulnerability的掃描,通常如果運氣好的話是可以掃出一些資料的。
┌──(root㉿kali)-[~]
└─# nmap -p139,445 --script=smb-vuln-* 10.10.10.40
Starting Nmap 7.93 ( https://nmap.org ) at 2023-07-01 07:31 EDT
Nmap scan report for 10.10.10.40
Host is up (0.29s latency).
PORT STATE SERVICE
139/tcp open netbios-ssn
445/tcp open microsoft-ds
Host script results:
|_smb-vuln-ms10-054: false
|_smb-vuln-ms10-061: NT_STATUS_OBJECT_NAME_NOT_FOUND
| 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://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/
|_ https://technet.microsoft.com/en-us/library/security/ms17-010.aspx
Nmap done: 1 IP address (1 host up) scanned in 19.40 seconds
可以看到這邊掃描出來ms17-010,就是剛剛提到的Eternal Blue,透過NSE Script就可以掃描出來了。這一個部分其實是要告訴大家,NMAP非常強大,它的掃描當然不止於SMB這一個Protocol,其實針對Web或者是其他Protocol有很多對應的Script,或者是像上次有提到最近很夯的這個漏洞Log4j,在Github上面也有釋出一些NMAP Script的POC。所以在未來考試或者是做Lab的時候,當NMAP掃完看到有Port打開,不要直接的說: 我要直接去打Web、直接去做GoBuster或是什麼樣的爆破,其實可以先看一看這個NSE Script,因為它的功能比想像中強大。
所以接下來我們會講的是用正常的工具去做enumeration,我們會講正常的工具。那這邊我們會用的是Hack the Box的Sharp這台機器。
剛剛有提到SMB的用途非常廣泛,除了文件分享之外,還會有一個叫Printer。比如說是在企業內網裡面,可能會有一些印表機要跟主機做溝通,它所使用的protocol就是SMB。
那這邊我們來提供一些工具。首先第一個要講的是SMB Map,這個SMB Map的功能可以幫你列出目標有哪些folder,是有提供比如說匿名登入或者會提供permission。
┌──(root㉿kali)-[~]
└─# smbmap -H 10.10.10.219
[+] IP: 10.10.10.219:445 Name: 10.10.10.219
Disk Permissions Comment
---- ----------- -------
ADMIN$ NO ACCESS Remote Admin
C$ NO ACCESS Default share
dev NO ACCESS
IPC$ NO ACCESS Remote IPC
kanban READ ONLY
這邊用SMB Map可以看到我們有kanban這一個SMB的folder的read only的權限,
大家可能會問,我知道了它有folder,我們可以access之後,要怎麼去登入它? 那這邊記得,我們要用的是匿名登入,使用的工具是SMB Client。
SMB Client也有類似list share的功能,但用SMB Map來list share可以看到permission,SMB Client沒有,我們來試一下:
┌──(root㉿kali)-[~]
└─# smbclient -N -L //10.10.10.219
Anonymous login successful
Sharename Type Comment
--------- ---- -------
ADMIN$ Disk Remote Admin
C$ Disk Default share
dev Disk
IPC$ IPC Remote IPC
kanban Disk
Reconnecting with SMB1 for workgroup listing.
do_connect: Connection to 10.10.10.219 failed (Error NT_STATUS_RESOURCE_NAME_NOT_FOUND)
Unable to connect with SMB1 -- no workgroup available
那這邊簡單說一下,這個-N就是no password也就是匿名登入的意思,就是我不需要密碼也可以登入SMB的server。那這個-L是說要list share的意思。那我們知道了這個kanban可以讓我們登入,那我們就可以用SMB Client搭配-N來登入。
┌──(root㉿kali)-[~]
└─# smbclient -N //10.10.10.219/kanban
Anonymous login successful
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Sat Nov 14 13:56:03 2020
.. D 0 Sat Nov 14 13:56:03 2020
CommandLine.dll A 58368 Wed Feb 27 03:06:14 2013
CsvHelper.dll A 141312 Wed Nov 8 08:52:18 2017
DotNetZip.dll A 456704 Wed Jun 22 16:31:52 2016
Files D 0 Sat Nov 14 13:57:59 2020
Itenso.Rtf.Converter.Html.dll A 23040 Thu Nov 23 11:29:32 2017
Itenso.Rtf.Interpreter.dll A 75776 Thu Nov 23 11:29:32 2017
Itenso.Rtf.Parser.dll A 32768 Thu Nov 23 11:29:32 2017
Itenso.Sys.dll A 19968 Thu Nov 23 11:29:32 2017
MsgReader.dll A 376832 Thu Nov 23 11:29:32 2017
Ookii.Dialogs.dll A 133296 Thu Jul 3 17:20:12 2014
pkb.zip A 2558011 Thu Nov 12 15:04:59 2020
Plugins D 0 Thu Nov 12 15:05:11 2020
PortableKanban.cfg A 5819 Sat Nov 14 13:56:01 2020
PortableKanban.Data.dll A 118184 Thu Jan 4 16:12:46 2018
PortableKanban.exe A 1878440 Thu Jan 4 16:12:44 2018
PortableKanban.Extensions.dll A 31144 Thu Jan 4 16:12:50 2018
PortableKanban.pk3 A 2080 Sat Nov 14 13:56:01 2020
PortableKanban.pk3.bak A 2080 Sat Nov 14 13:55:54 2020
PortableKanban.pk3.md5 A 34 Sat Nov 14 13:56:03 2020
ServiceStack.Common.dll A 413184 Wed Sep 6 07:18:22 2017
ServiceStack.Interfaces.dll A 137216 Wed Sep 6 07:17:30 2017
ServiceStack.Redis.dll A 292352 Wed Sep 6 07:02:24 2017
ServiceStack.Text.dll A 411648 Tue Sep 5 23:38:18 2017
User Guide.pdf A 1050092 Thu Jan 4 16:14:28 2018
3803903 blocks of size 4096. 1461351 blocks available
如果沒有意外的話,應該會看到anonymous login successful,告訴你說匿名登入成功。那SMB的功能其實蠻多的,就像是一個terminal一樣,常見的功能像是ls這種常見的指令。如果要去get檔案的話,可以用像這種get的指令或者是也有像是put這樣指令,可以讓你把你kali端的檔案放到目標,搭配像是local file inclusion這種web攻擊,有機會去做reverse shell。
那這個當然我們可以嘗試一下做這個get的,比如說這邊有個pkb.zip:
smb: \> get pkb.zip
getting file \pkb.zip of size 2558011 as pkb.zip (657.0 KiloBytes/sec) (average 657.0 KiloBytes/sec)
smb: \> exit
┌──(root㉿kali)-[~]
└─# ls -al
total 4568
drwx------ 15 root root 4096 Jul 2 01:19 .
drwxr-xr-x 18 root root 4096 Jun 1 21:50 ..
-rw-r--r-- 1 root root 1458 Mar 11 03:47 47799.txt
-rw-r--r-- 1 root root 7675 May 7 13:52 .bashrc
-rw-r--r-- 1 root root 571 Aug 8 2022 .bashrc.original
drwx------ 17 root root 4096 May 19 12:49 .cache
drwxr-xr-x 8 root root 4096 Apr 20 12:05 .cme
drwxr-xr-x 10 root root 4096 May 19 03:40 .config
-rw-r--r-- 1 root root 649060 Jun 2 04:57 crowbar.log
-rw-r--r-- 1 root root 5060 Jun 2 04:57 crowbar.out
drwx------ 3 root root 4096 Mar 12 03:17 .dbus
-rw-r--r-- 1 root root 11656 Aug 8 2022 .face
lrwxrwxrwx 1 root root 11 Jun 1 21:52 .face.icon -> /root/.face
-rw-r--r-- 1 root root 44 Apr 15 03:11 .gdbinit
-rw-r--r-- 1 root root 52 Apr 15 03:09 .inputrc
drwx------ 2 root root 4096 May 8 06:01 .john
-rw------- 1 root root 20 Nov 13 2022 .lesshst
-rw-r--r-- 1 root root 828172 Mar 4 23:25 linpeas.sh
drwxr-xr-x 3 root root 4096 Mar 12 03:17 .local
drwxr-xr-x 2 root root 4096 Mar 26 03:34 LPT_day1
drwxr-xr-x 11 root root 4096 Jun 2 03:33 .msf4
drwxr-xr-x 7 root root 4096 May 1 02:51 patator
drwxr-xr-x 5 root root 4096 Apr 15 03:09 peda
-rw-r--r-- 1 root root 2558011 Jul 2 01:19 pkb.zip
成功下載後exit離開,回到登入smb之前的目錄看一下,可以發現的確有pkg.zip(上圖最下面)。
這邊注意一下,在get檔案的時候,要注意一下你在開啟smb client,你目前的資料夾是什麼。可能我的kali這個user沒有permission的話可能會get失敗。所以我們可以回到我們的比如說desktop,就是自己有自己有權限的folder然後再做一次這個get。