现在我们要更进一步,开始探索一台机器!首先需要做的是识别操作系统以及任何可能正在运行的服务。服务是运行在计算机上、为其他用户或计算机执行某些有用功能的应用程序。我们将这些托管有用服务的专用机器称为”服务器”,而不是工作站,用户可以通过工作站与这些各种服务进行交互和使用。我们感兴趣的是那些配置错误或存在漏洞的服务。我们不是要执行服务预期应有的操作,而是想看看是否能迫使服务执行某些非预期的、支持我们目标的操作,例如执行我们选择的命令。
计算机会被分配一个IP地址,这使它们能够在网络上被唯一标识和访问。这些计算机上运行的服务可能会被分配一个端口号,以便访问该服务。如前所述,端口号范围从1到65,535,其中1到1,023的知名端口范围是为特权服务保留的。端口0在TCP/IP网络中是一个保留端口,不用于TCP或UDP消息。如果有任何尝试绑定到端口0(例如某个服务),它将会绑定到端口1,024以上的下一个可用端口,因为端口0被视为”通配符”端口。
要远程访问一个服务,我们需要使用正确的IP地址和端口号进行连接,并使用该服务能理解的语言。手动检查所有65,535个端口以寻找任何可用服务将非常繁琐,因此人们创建了工具来自动化这个过程并为我们扫描端口范围。最常用的扫描工具之一是Nmap(网络映射器)。
Nmap
让我们从最基本的扫描开始。假设我们想要对位于10.129.42.253的目标执行基本扫描。为此,我们应该输入nmap 10.129.42.253并按回车。我们看到Nmap扫描完成得非常快。这是因为如果我们不指定任何额外选项,Nmap默认只会扫描最常见的1,000个端口。扫描输出显示端口21、22、80、139和445是可用的。
Service Scanning
guhusf@htb[/htb]$ nmap 10.129.42.253
Starting Nmap 7.80 ( https://nmap.org ) at 2021-02-25 16:07 EST
Nmap scan report for 10.129.42.253
Host is up (0.11s latency).
Not shown: 995 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
80/tcp open http
139/tcp open netbios-ssn
445/tcp open microsoft-ds
Nmap done: 1 IP address (1 host up) scanned in 2.19 seconds
在PORT标题下,它还告诉我们这些是TCP端口。默认情况下,除非特别要求执行UDP扫描,否则Nmap将进行TCP扫描。
STATE标题确认这些端口是开放的。有时我们会看到列出其他状态不同的端口,例如filtered(被过滤)。如果防火墙只允许从特定地址访问这些端口,就会发生这种情况。
SERVICE标题告诉我们通常映射到特定端口号的服务名称。但是,默认扫描不会告诉我们该端口上具体监听的是什么服务。在我们指示Nmap与服务交互并尝试获取识别信息之前,它完全可能是另一个服务。
随着我们逐渐熟悉,我们会注意到一些端口通常与Windows或Linux相关联。例如,端口3389是远程桌面服务的默认端口,这强烈表明目标是Windows机器。在我们当前的场景中,端口22(SSH)可用表明目标运行的是Linux/Unix,但该服务也可以在Windows上配置。让我们运行一次更高级的Nmap扫描,以收集有关目标设备的更多信息。
我们可以使用-sC参数指定应使用Nmap脚本来尝试获取更详细的信息。-sV参数指示Nmap执行版本扫描。在此扫描中,Nmap将对目标系统上的服务进行指纹识别,并识别服务协议、应用程序名称和版本。版本扫描基于一个包含1,000多个服务签名的综合数据库。最后,-p-告诉Nmap我们想要扫描所有65,535个TCP端口。
Service Scanning
guhusf@htb[/htb]$ nmap -sV -sC -p- 10.129.42.253
Starting Nmap 7.80 ( https://nmap.org ) at 2021-02-25 16:18 EST
Nmap scan report for 10.129.42.253
Host is up (0.11s latency).
Not shown: 65530 closed ports
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_drwxr-xr-x 2 ftp ftp 4096 Feb 25 19:25 pub
| ftp-syst:
| STAT:
| FTP server status:
| Connected to ::ffff:10.10.14.2
| Logged in as ftp
| TYPE: ASCII
| No session bandwidth limit
| Session timeout in seconds is 300
| Control connection is plain text
| Data connections will be plain text
| At session startup, client count was 2
| vsFTPd 3.0.3 - secure, fast, stable
|_End of status
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.1 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
|_http-server-header: Apache/2.4.41 (Ubuntu)
|_http-title: PHP 7.4.3 - phpinfo()
139/tcp open netbios-ssn Samba smbd 4.6.2
445/tcp open netbios-ssn Samba smbd 4.6.2
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel
Host script results:
|_nbstat: NetBIOS name: GS-SVCSCAN, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
| smb2-security-mode:
| 2.02:
|_ Message signing enabled but not required
| smb2-time:
| date: 2021-02-25T21:21:51
|_ start_date: N/A
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 233.68 seconds
这次返回的信息要多得多。我们看到扫描65,535个端口比扫描1,000个端口花费的时间要长得多。-sC和-sV选项也会增加扫描持续时间,因为它们不是执行简单的TCP握手,而是执行更多检查。我们注意到这次有一个VERSION标题,报告了服务版本,如果可能的话,还会报告操作系统。
到目前为止,我们知道操作系统是Ubuntu Linux。应用程序版本也有助于揭示目标操作系统版本。以OpenSSH为例。我们看到报告的版本是OpenSSH 8.2p1 Ubuntu 4ubuntu0.1。通过检查其他Ubuntu SSH软件包的更新日志,我们看到发布版本采用1:7.3p1-1ubuntu0.1这样的格式。将我们的版本更新为符合此格式,得到1:8.2p1-4ubuntu0.1。在线快速搜索此版本显示它包含在Ubuntu Linux Focal Fossa 20.04中。

另一个快速搜索显示该操作系统的发布日期是2020年4月23日。

然而,值得注意的是,这种交叉引用技术并不完全可靠,因为有可能在旧版操作系统上安装更新的应用程序包。脚本扫描标志-sC导致Nmap报告Web服务器上托管的任何网页的服务器头信息(http-server-header)和页面标题(http-title)。网页标题PHP 7.4.3 - phpinfo()表明这是一个PHPInfo文件,通常是为了确认PHP已成功安装而手动创建的。该标题(以及PHPInfo页面)也揭示了PHP版本,如果存在漏洞,值得注意。

Nmap脚本
指定-sC将对目标运行许多有用的默认脚本,但在某些情况下需要运行特定脚本。例如,在评估范围内,我们可能被要求审计一个大型的Citrix安装。我们可以使用此Nmap脚本来审计严重的Citrix NetScaler漏洞(CVE-2019–19781),同时Nmap还有其他脚本来审计Citrix安装。
Service Scanning
guhusf@htb[/htb]$ locate scripts/citrix
/usr/share/nmap/scripts/citrix-brute-xml.nse
/usr/share/nmap/scripts/citrix-enum-apps-xml.nse
/usr/share/nmap/scripts/citrix-enum-apps.nse
/usr/share/nmap/scripts/citrix-enum-servers-xml.nse
/usr/share/nmap/scripts/citrix-enum-servers.nse
运行Nmap脚本的语法是nmap --script <脚本名称> -p<端口> <主机>。
Nmap脚本是增强我们扫描功能的好方法,仔细研究可用选项将会带来回报。请查看”使用Nmap进行网络枚举“模块以更详细地研究Nmap工具。
攻击网络服务
横幅抓取
如前所述,横幅抓取是一种快速指纹识别服务的有用技术。通常,服务会在连接启动后显示一个横幅来标识自己。如果指定了语法nmap -sV --script=banner <目标>,Nmap将尝试抓取横幅。我们也可以尝试使用Netcat手动完成此操作。让我们再举一个例子,使用nc版本的Netcat:
Service Scanning
guhusf@htb[/htb]$ nc -nv 10.129.42.253 21
(UNKNOWN) [10.129.42.253] 21 (ftp) open
220 (vsFTPd 3.0.3)
这表明服务器上的vsFTPd版本是3.0.3。我们也可以使用Nmap强大的脚本引擎自动化此过程:nmap -sV --script=banner -p21 10.10.10.0/24。
FTP
值得熟悉FTP,因为它是一个标准协议,而且该服务通常可能包含有趣的数据。对FTP默认端口(21)的Nmap扫描揭示了我们之前识别的vsftpd 3.0.3安装。此外,它还报告允许匿名身份验证,并且有一个pub目录可用。
Service Scanning
guhusf@htb[/htb]$ nmap -sC -sV -p21 10.129.42.253
Starting Nmap 7.80 ( https://nmap.org ) at 2020-12-20 00:54 GMT
Nmap scan report for 10.129.42.253
Host is up (0.081s latency).
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_drwxr-xr-x 2 ftp ftp 4096 Dec 19 23:50 pub
| ftp-syst:
| STAT:
| FTP server status:
| Connected to ::ffff:10.10.14.2
| Logged in as ftp
| TYPE: ASCII
| No session bandwidth limit
| Session timeout in seconds is 300
| Control connection is plain text
| Data connections will be plain text
| At session startup, client count was 3
| vsFTPd 3.0.3 - secure, fast, stable
|_End of status
Service Info: OS: Unix
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 1.78 seconds
让我们使用ftp命令行实用程序连接到该服务。
Service Scanning
guhusf@htb[/htb]$ ftp -p 10.129.42.253
Connected to 10.129.42.253.
220 (vsFTPd 3.0.3)
Name (10.129.42.253:user): anonymous
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (10,129,42,253,158,60).
150 Here comes the directory listing.
drwxr-xr-x 2 ftp ftp 4096 Feb 25 19:25 pub
226 Directory send OK.
ftp> cd pub
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (10,129,42,253,182,129).
150 Here comes the directory listing.
-rw-r--r-- 1 ftp ftp 18 Feb 25 19:25 login.txt
226 Directory send OK.
ftp> get login.txt
local: login.txt remote: login.txt
227 Entering Passive Mode (10,129,42,253,181,53).
150 Opening BINARY mode data connection for login.txt (18 bytes).
226 Transfer complete.
18 bytes received in 0.00 secs (165.8314 kB/s)
ftp> exit
221 Goodbye.
在上面的shell中,我们看到FTP支持常见的命令,如cd和ls,并允许我们使用get命令下载文件。检查下载的login.txt发现了我们可以用来进一步访问系统的凭据。
Service Scanning
guhusf@htb[/htb]$ cat login.txt
admin:ftp@dmin123
SMB
SMB(服务器消息块)是Windows机器上普遍存在的协议,它为纵向和横向移动提供了许多途径。敏感数据(包括凭据)可能存在于网络文件共享中,并且某些SMB版本可能容易受到诸如EternalBlue之类的RCE漏洞攻击。仔细枚举这个巨大的潜在攻击面至关重要。Nmap有许多用于枚举SMB的脚本,例如smb-os-discovery.nse,它将与SMB服务交互以提取报告的操作系统版本。
Service Scanning
guhusf@htb[/htb]$ nmap --script smb-os-discovery.nse -p445 10.10.10.40
Starting Nmap 7.91 ( https://nmap.org ) at 2020-12-27 00:59 GMT
Nmap scan report for doctors.htb (10.10.10.40)
Host is up (0.022s latency).
PORT STATE SERVICE
445/tcp open microsoft-ds
Host script results:
| 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: CEO-PC
| NetBIOS computer name: CEO-PC\x00
| Workgroup: WORKGROUP\x00
|_ System time: 2020-12-27T00:59:46+00:00
Nmap done: 1 IP address (1 host up) scanned in 2.71 seconds
在这种情况下,主机运行的是旧版的Windows 7操作系统,我们可以进行进一步的枚举以确认它是否容易受到EternalBlue的攻击。Metasploit Framework有几个用于EternalBlue的模块,可以用来验证漏洞并利用它,正如我们将在后续章节中看到的那样。我们可以针对本模块部分的目标运行扫描,以从SMB服务收集信息。我们可以确定主机运行的是Linux内核,Samba版本4.6.2,主机名是GS-SVCSCAN。
Service Scanning
guhusf@htb[/htb]$ nmap -A -p445 10.129.42.253
Starting Nmap 7.80 ( https://nmap.org ) at 2021-02-25 16:29 EST
Nmap scan report for 10.129.42.253
Host is up (0.11s latency).
PORT STATE SERVICE VERSION
445/tcp open netbios-ssn Samba smbd 4.6.2
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Aggressive OS guesses: Linux 2.6.32 (95%), Linux 3.1 (95%), Linux 3.2 (95%), AXIS 210A or 211 Network Camera (Linux 2.6.17) (94%), ASUS RT-N56U WAP (Linux 3.4) (93%), Linux 3.16 (93%), Adtran 424RG FTTH gateway (92%), Linux 2.6.39 - 3.2 (92%), Linux 3.1 - 3.2 (92%), Linux 3.2 - 4.9 (92%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 2 hops
Host script results:
|_nbstat: NetBIOS name: GS-SVCSCAN, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
| smb2-security-mode:
| 2.02:
|_ Message signing enabled but not required
| smb2-time:
| date: 2021-02-25T21:30:06
|_ start_date: N/A
TRACEROUTE (using port 445/tcp)
HOP RTT ADDRESS
1 111.62 ms 10.10.14.1
2 111.89 ms 10.129.42.253
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 12.72 seconds
共享
SMB允许用户和管理员共享文件夹,并使其他用户能够远程访问它们。通常这些共享中包含的文件含有敏感信息,如密码。一个可以枚举并与SMB共享交互的工具是smbclient。-L标志指定我们要检索远程主机上可用共享的列表,而-N则抑制密码提示。
Service Scanning
guhusf@htb[/htb]$ smbclient -N -L \\\\10.129.42.253
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
users Disk
IPC$ IPC IPC Service (gs-svcscan server (Samba, Ubuntu))
SMB1 disabled -- no workgroup available
这揭示了非默认共享users。让我们尝试以guest用户身份连接。
Service Scanning
guhusf@htb[/htb]$ smbclient \\\\10.129.42.253\\users
Enter WORKGROUP\users's password:
Try "help" to get a list of possible commands.
smb: \> ls
NT_STATUS_ACCESS_DENIED listing \*
smb: \> exit
ls命令导致访问被拒绝消息,表明不允许guest访问。让我们使用用户bob(bob:Welcome1)的凭据再试一次。
Service Scanning
guhusf@htb[/htb]$ smbclient -U bob \\\\10.129.42.253\\users
Enter WORKGROUP\bob's password:
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Thu Feb 25 16:42:23 2021
.. D 0 Thu Feb 25 15:05:31 2021
bob D 0 Thu Feb 25 16:42:23 2021
4062912 blocks of size 1024. 1332480 blocks available
smb: \> cd bob
smb: \bob\> ls
. D 0 Thu Feb 25 16:42:23 2021
.. D 0 Thu Feb 25 16:42:23 2021
passwords.txt N 156 Thu Feb 25 16:42:23 2021
4062912 blocks of size 1024. 1332480 blocks available
smb: \bob\> get passwords.txt
getting file \bob\passwords.txt of size 156 as passwords.txt (0.3 KiloBytes/sec) (average 0.3 KiloBytes/sec)
我们使用凭据成功访问了users共享,并获得了对有趣文件passwords.txt的访问权限,该文件可以使用get命令下载。
SNMP
SNMP社区字符串提供有关路由器或设备的信息和统计信息,帮助我们获得对它的访问权限。制造商默认的社区字符串public和private通常保持不变。在SNMP版本1和2c中,访问是使用明文社区字符串控制的,如果我们知道名称,就可以获得访问权限。加密和身份验证仅在SNMP版本3中添加。可以从SNMP获取大量信息。检查进程参数可能会显示在命令行上传递的凭据,鉴于企业环境中密码重用普遍存在,这些凭据可能被重用于其他外部可访问的服务。还可以揭示路由信息、绑定到其他接口的服务以及已安装软件的版本。
Service Scanning
guhusf@htb[/htb]$ snmpwalk -v 2c -c public 10.129.42.253 1.3.6.1.2.1.1.5.0
iso.3.6.1.2.1.1.5.0 = STRING: "gs-svcscan"
Service Scanning
guhusf@htb[/htb]$ snmpwalk -v 2c -c private 10.129.42.253
Timeout: No Response from 10.129.42.253
可以使用诸如onesixtyone之类的工具,使用常见社区字符串的字典文件(例如该工具GitHub存储库中包含的dict.txt文件)来暴力破解社区字符串名称。
Service Scanning
guhusf@htb[/htb]$ onesixtyone -c dict.txt 10.129.42.254
Scanning 1 hosts, 51 communities
10.129.42.254 [public] Linux gs-svcscan 5.4.0-66-generic #74-Ubuntu SMP Wed Jan 27 22:54:38 UTC 2021 x86_64
结论
服务扫描和枚举是一个广阔的主题,随着我们逐步深入,我们将学习更多相关内容。此处涵盖的方面适用于许多网络,包括 HTB 机。
问题
1.对目标执行 Nmap 扫描。Nmap 显示端口 8080 上运行的服务版本是什么?
2.对目标执行 Nmap 扫描,识别出运行 telnet 服务的非默认端口。
3.列出目标主机上可用的 SMB 共享。以 bob 用户身份连接到可用的共享。连接后,访问名为’flag’的文件夹,并提交 flag.txt 文件的内容。





