滲透測試重新打底(2.3)--論Enumeration(枚舉)之NFS & SMB


Posted by kahatrix on 2023-09-22

我們要講下一個是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。










Related Posts

人性較量Day03~框架思維

人性較量Day03~框架思維

Python 命名與Underscore

Python 命名與Underscore

CoderBridge 設定Disqus留言板

CoderBridge 設定Disqus留言板


Comments