Introduction

本房间专注于后漏洞利用枚举。换句话说,我们假设我们已经成功获得了某种形式的系统访问权限。此外,我们可能已经进行了权限提升;换句话说,我们可能在目标系统上拥有管理员或 root 权限。即使使用非特权帐户(即非 root 或管理员),本房间讨论的一些技术和工具仍然可以提供有用的输出。

如果您对权限提升感兴趣,可以查看 Windows 权限提升 房间和 Linux 权限提升 房间。此外,还有两个方便的脚本:WinPEASLinPEAS,分别用于 MS Windows 和 Linux 权限提升。

我们的目的是收集更多信息,以帮助我们获得更多目标网络访问权限。例如,我们可能会找到授予其他系统访问权限的登录凭据。我们专注于标准系统上常用的工具,以收集有关目标的更多信息。作为系统的一部分,这些工具看起来无害,并且产生的“噪音”最少。

我们假设您可以访问目标上的命令行界面,例如 Linux 系统上的“bash”或 MS Windows 系统上的“cmd.exe”。在 Linux 系统上,从一种 Shell 开始,通常可以轻松切换到另一种。同样,从“cmd.exe”开始,如果可以,您可以切换到 PowerShell。我们刚刚在下面的终端中运行了命令“powershell.exe”来启动 PowerShell 交互式命令行。

终端

user@TryHackMe$ Microsoft Windows [版本 10.0.17763.2928]
(c) 2018 Microsoft Corporation。保留所有权利。

strategos@RED-WIN-ENUM C:\Users\strategos>powershell.exe
Windows PowerShell
版权所有 (C) Microsoft Corporation。保留所有权利。

PS C:\Users\strategos>

本房间结构如下:

  • 枚举目的
  • 使用常用工具枚举 Linux 系统:系统、用户、网络和正在运行的服务
  • 使用内置工具枚举 MS Windows 系统:系统、用户、网络和正在运行的服务
  • 其他工具示例:Seatbelt

虽然并非绝对必要,但我们建议您在进入本房间之前先完成 The Lay of the Land

Purpose

当你在目标系统上获得“shell”时,你通常对该系统只有非常基础的了解。如果是服务器,你已经知道你利用了哪些服务;然而,你不一定知道其他细节,例如用户名或网络共享。因此,shell 就像一个“暗室”,你对周围的环境只有不完整且模糊的了解。从这个意义上讲,枚举可以帮助你构建更完整、更准确的图景。

后漏洞利用枚举的目的是收集尽可能多的有关系统及其网络的信息。被利用的系统可能是公司台式机/笔记本电脑或服务器。我们的目标是收集这些信息,以便我们能够转向网络上的其他系统或窃取当前系统的信息。我们感兴趣的信息包括:

  • 用户和组
  • 主机名
  • 路由表
  • 网络共享
  • 网络服务
  • 应用程序和banners
  • 防火墙配置
  • 服务设置和审核配置
  • SNMP 和 DNS 详情
  • 查找凭证(保存在 Web 浏览器或客户端应用程序中)

我们无法列出所有可能偶然发现的信息。例如,我们可能会找到允许我们访问其他系统的 SSH 密钥。在基于 SSH 密钥的身份验证中,我们会生成一个 SSH 密钥对(公钥和私钥);公钥安装在服务器上。因此,服务器会信任任何能够证明拥有相关私钥的系统。

此外,我们可能会偶然发现保存在用户文档或桌面目录中的敏感数据。想象一下,有人可能保存了“passwords.txt”或“passwords.xlsx”而不是合适的密码管理器。源代码中也可能包含隐藏的密钥和密码,尤其是在源代码不打算公开的情况下。

Linux Enumeration

此任务重点是在访问 shell(例如 bash)后枚举 Linux 计算机。虽然某些命令会提供多个区域的信息,但我们尝试根据预期获取的信息将命令分为四类。

  • 系统
  • 用户
  • 网络
  • 正在运行的服务

系统

在 Linux 系统上,我们可以通过在 /etc/ 中搜索以 -release 结尾的文件或链接来获取有关 Linux 发行版和发行版本的更多信息。运行 ls /etc/*-release 可以帮助我们找到此类文件。让我们看看在 CentOS Linux 上的情况。

Terminal

user@TryHackMe$ ls /etc/*-release
/etc/centos-release /etc/os-release /etc/redhat-release /etc/system-release
$ cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
[...]

让我们在 Fedora 系统上尝试一下。

Terminal

user@TryHackMe$ ls /etc/*-release
/etc/fedora-release@ /etc/os-release@ /etc/redhat-release@ /etc/system-release@
$ cat /etc/os-release
NAME="Fedora Linux"
VERSION="36 (Workstation Edition)"
[...]

我们可以使用命令“hostname”找到系统的名称。

Terminal

user@TryHackMe$ hostname
rpm-red-enum.thm

系统上的各种文件可以提供大量有用的信息。特别考虑以下文件 /etc/passwd/etc/group/etc/shadow。任何用户都可以读取 passwdgroup 文件。但是,shadow 密码文件需要 root 权限,因为它包含哈希密码。如果您设法破解哈希值,您将知道用户的原始密码。

Terminal

user@TryHackMe$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
[...]
michael:x:1001:1001::/home/michael:/bin/bash
peter:x:1002:1002::/home/peter:/bin/bash
jane:x:1003:1003::/home/jane:/bin/bash
randa:x:1004:1004::/home/randa:/bin/bash

$ cat /etc/group
root:x:0:
[...]
michael:x:1001:
peter:x:1002:
jane:x:1003:
randa:x:1004:

$ sudo cat /etc/shadow
root:$6$pZlRFi09$qqgNBS.00qtcUF9x0yHetjJbXsw0PAwQabpCilmAB47ye3OzmmJVfV6DxBYyUoWBHtTXPU0kQEVUQfPtZPO3C.:19131:0:99999:7:::
[...]
michael:$6$GADCGz6m$g.ROJGcSX/910DEipiPjU6clo6Z6/uBZ9Fvg3IaqsVnMA.UZtebTgGHpRU4NZFXTffjKPvOAgPKbtb2nQrVU70:19130:0:99999:7:::
peter:$6$RN4fdNxf$wvgzdlrIVYBJjKe3s2eqlIQhvMrtwAWBsjuxL5xMVaIw4nL9pCshJlrMu2iyj/NAryBmItFbhYAVznqRcFWIz1:19130:0:99999:7:::
jane:$6$Ees6f7QM$TL8D8yFXVXtIOY9sKjMqJ7BoHK1EHEeqM5dojTaqO52V6CPiGq2W6XjljOGx/08rSo4QXsBtLUC3PmewpeZ/Q0:19130:0:99999:7:::
randa:$6$dYsVoPyy$WR43vaETwoWooZvR03AZGPPKxjrGQ4jTb0uAHDy2GqGEOZyXvrQNH10tGlLIHac7EZGV8hSIfuXP0SnwVmnZn0:19130:0:99999:7:::

类似地,各种目录可以泄露有关用户的信息,并且可能包含敏感文件;其中一个是在“/var/mail/”找到的邮件目录。

Terminal

user@TryHackMe$ ls -lh /var/mail/
total 4.0K
-rw-rw----. 1 jane mail 0 May 18 14:15 jane
-rw-rw----. 1 michael mail 0 May 18 14:13 michael
-rw-rw----. 1 peter mail 0 May 18 14:14 peter
-rw-rw----. 1 randa mail 0 May 18 14:15 randa
-rw-------. 1 root mail 639 May 19 07:37 root

要查找已安装的应用程序,您可以考虑列出 /usr/bin//sbin/ 下的文件:

  • ls -lh /usr/bin/
  • ls -lh /sbin/

在基于 RPM 的 Linux 系统上,您可以使用 rpm -qa 获取所有已安装软件包的列表。-qa 表示我们要查询所有软件包。

在基于 Debian 的 Linux 系统上,您可以使用 dpkg -l 获取已安装软件包的列表。以下输出来自 Ubuntu 服务器。

Terminal

user@TryHackMe$ dpkg -l
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-=====================================-==================================-============-===============================================================================
ii accountsservice 0.6.55-0ubuntu12~20.04.5 amd64 query and manipulate user account information
ii adduser 3.118ubuntu2 all add and remove users and groups
ii alsa-topology-conf 1.2.2-1 all ALSA topology configuration files
ii alsa-ucm-conf 1.2.2-1ubuntu0.13 all ALSA Use Case Manager configuration files
ii amd64-microcode 3.20191218.1ubuntu1 amd64 Processor microcode firmware for AMD CPUs
[... ]
ii zlib1g-dev:amd64 1:1.2.11.dfsg-2ubuntu1.3 amd64 compression library - development

用户

诸如“/etc/passwd”之类的文件会显示用户名;然而,各种命令可以提供更多关于系统中其他用户及其行踪的信息和洞察。

您可以使用“who”显示哪些用户已登录。

Terminal

user@TryHackMe$ who
root tty1 2022-05-18 13:24
jane pts/0 2022-05-19 07:17 (10.20.30.105)
peter pts/1 2022-05-19 07:13 (10.20.30.113)

我们可以看到用户 root 直接登录系统,而用户 janepeter 通过网络连接,我们可以看到他们的 IP 地址。

请注意,不要将 whowhoami 混淆,后者会打印您的有效用户 ID。

Terminal

user@TryHackMe$ whoami
jane

更进一步,您可以使用 w 命令,它会显示哪些用户已登录以及他们正在执行的操作。根据下面的终端输出,在本例中,peter 正在编辑 notes.txt,而 jane 正在运行 w 命令。

Terminal

user@TryHackMe$ w
07:18:43 up 18:05, 3 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 Wed13 17:52m 0.00s 0.00s less -s
jane pts/0 10.20.30.105 07:17 3.00s 0.01s 0.00s w
peter pts/1 10.20.30.113 07:13 5:23 0.00s 0.00s vi notes.txt

要打印真实有效的用户和组 IDS,您可以发出命令“id”(表示 ID)。

Terminal

user@TryHackMe$ id
uid=1003(jane) gid=1003(jane) groups=1003(jane) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

想知道最近谁在使用系统吗?“last”会显示最近登录的用户列表;此外,我们还可以查看哪些用户退出了系统以及他们保持连接的时间。在下面的输出中,用户“randa”保持登录状态近 17 个小时,而用户“michael”在 4 分钟后退出系统。

Terminal

user@TryHackMe$ last
jane pts/0 10.20.30.105 Thu May 19 07:17 still logged in
peter pts/1 10.20.30.113 Thu May 19 07:13 still logged in
michael pts/0 10.20.30.1 Thu May 19 05:12 - 05:17 (00:04)
randa pts/1 10.20.30.107 Wed May 18 14:18 - 07:08 (16:49)
root tty1 Wed May 18 13:24 still logged in
[...]

最后,值得一提的是,“sudo -l”命令会列出当前系统上调用用户允许执行的命令。

网络

IP 地址可以使用“ip address show”(可缩写为“ip a s”)或旧命令“ifconfig -a”(该软件包已不再维护)显示。下面的终端输出显示了网络接口“ens33”,其 IP 地址为“10.20.30.129”,子网掩码为“255.255.255.0”,实际值为“24”。

Terminal

user@TryHackMe$ ip a s
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:a2:0e:7e brd ff:ff:ff:ff:ff:ff
inet 10.20.30.129/24 brd 10.20.30.255 scope global noprefixroute dynamic ens33
valid_lft 1580sec preferred_lft 1580sec
inet6 fe80::761a:b360:78:26cd/64 scope link noprefixroute
valid_lft forever preferred_lft forever

DNS 服务器可以在 /etc/resolv.conf 中找到。请考虑以下使用 DHCP 进行网络配置的系统的终端输出。DNS(即名称服务器)设置为 10.20.30.2

Terminal

user@TryHackMe$ cat /etc/resolv.conf
# Generated by NetworkManager
search localdomain thm
nameserver 10.20.30.2

netstat 是一个很有用的命令,可以用来了解网络连接、路由表和接口统计信息。下表解释了它的一些选项。

Option Description
-a 显示监听和非监听套接字
-l 仅显示监听套接字
-n 显示数字输出而不是解析 IP 地址和端口号
-t TCP
-u UDP
-x UNIX
-p 显示套接字所属程序的 PID 和名称

您可以根据需要使用任何组合。例如,netstat -plt 将返回“正在 TCP 套接字上监听的程序”。正如我们在下面的终端输出中看到的那样,sshd 正在监听 SSH 端口,而 master 正在监听 IPv4 和 IPv6 地址上的 SMTP 端口。请注意,要获取所有 PID(进程 ID)和程序名称,您需要以 root 身份运行 netstat 或使用 sudo netstat

Terminal

user@TryHackMe$ sudo netstat -plt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN 978/sshd
tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN 1141/master
tcp6 0 0 [::]:ssh [::]:* LISTEN 978/sshd
tcp6 0 0 localhost:smtp [::]:* LISTEN 1141/master

netstat -atupn 将显示 所有 TCP 和 UDP 正在监听和已建立的连接以及带有地址和端口的 程序 名称(以 数字 格式)。

Terminal

user@TryHackMe$ sudo netstat -atupn
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 978/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1141/master
tcp 0 0 10.20.30.129:22 10.20.30.113:38822 ESTABLISHED 5665/sshd: peter [p
tcp 0 0 10.20.30.129:22 10.20.30.105:38826 ESTABLISHED 5723/sshd: jane [pr
tcp6 0 0 :::22 :::* LISTEN 978/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1141/master
udp 0 0 127.0.0.1:323 0.0.0.0:* 640/chronyd
udp 0 0 0.0.0.0:68 0.0.0.0:* 5638/dhclient
udp6 0 0 ::1:323 :::* 640/chronyd

有人可能会认为,在获得目标机器的访问权限之前使用“nmap”也能获得类似的结果。然而,这并不完全正确。Nmap 需要生成相对大量的数据包来检查开放端口,这可能会触发入侵检测和防御系统。此外,路由上的防火墙可能会丢弃某些数据包并阻碍扫描,导致 Nmap 结果不完整。

“lsof”代表列出打开的文件。如果我们只想显示互联网和网络连接,可以使用“lsof -i”。下面的终端输出显示了 IPv4 和 IPv6 的监听服务以及正在进行的连接。用户“peter”通过“ssh”端口连接到服务器“rpm-red-enum.thm”。请注意,要获取匹配程序的完整列表,您需要以 root 身份运行“lsof”或使用“sudo lsof”。

Terminal

user@TryHackMe$ sudo lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
chronyd 640 chrony 5u IPv4 16945 0t0 UDP localhost:323
chronyd 640 chrony 6u IPv6 16946 0t0 UDP localhost:323
sshd 978 root 3u IPv4 20035 0t0 TCP *:ssh (LISTEN)
sshd 978 root 4u IPv6 20058 0t0 TCP *:ssh (LISTEN)
master 1141 root 13u IPv4 20665 0t0 TCP localhost:smtp (LISTEN)
master 1141 root 14u IPv6 20666 0t0 TCP localhost:smtp (LISTEN)
dhclient 5638 root 6u IPv4 47458 0t0 UDP *:bootpc
sshd 5693 peter 3u IPv4 47594 0t0 TCP rpm-red-enum.thm:ssh->10.20.30.113:38822 (ESTABLISHED)
[...]

由于列表可能很长,您可以通过指定感兴趣的端口(例如 SMTP 端口 25)来进一步过滤输出。通过运行 lsof -i :25,我们将输出限制为与端口 25 相关的输出,如下面的终端输出所示。该服务器在 IPv4 和 IPv6 地址上都监听端口 25。

Terminal

user@TryHackMe$ sudo lsof -i :25
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
master 1141 root 13u IPv4 20665 0t0 TCP localhost:smtp (LISTEN)
master 1141 root 14u IPv6 20666 0t0 TCP localhost:smtp (LISTEN)

正在运行的服务

获取正在运行的进程的快照可以提供很多见解。“ps”命令可以让你发现正在运行的进程以及有关它们的大量信息。

你可以使用“ps -e”命令列出系统上的所有进程,其中“-e”命令表示选择所有进程。要获取有关进程的更多信息,你可以添加“-f”命令以显示完整格式,或添加“-l”命令以显示长格式。你可以尝试使用“ps -e”、“ps -ef”和“ps -el”命令。

你可以使用 BSD 语法“ps ax”或“ps aux”命令获得类似的输出并查看所有进程。请注意,使用 BSD 语法时,“a”和“x”命令是必需的,因为它们可以解除“仅限你自己”和“必须拥有 tty”的限制;换句话说,这样就可以显示所有进程。“u”命令用于显示拥有该进程的用户的详细信息。

Option Description
-e 所有进程
-f 完整格式列表
-j 工作格式
-l 长格式
-u 面向用户的格式

为了获得更“直观”的输出,你可以使用 ps axjf 命令来打印进程树。f 代表“森林”,它会创建一个 ASCII 艺术形式的进程层次结构,如下面的终端输出所示。

Terminal

user@TryHackMe$ ps axf
PID TTY STAT TIME COMMAND
2 ? S 0:00 [kthreadd]
4 ? S< 0:00 \_ [kworker/0:0H]
5 ? S 0:01 \_ [kworker/u256:0]
[...]
978 ? Ss 0:00 /usr/sbin/sshd -D
5665 ? Ss 0:00 \_ sshd: peter [priv]
5693 ? S 0:00 | \_ sshd: peter@pts/1
5694 pts/1 Ss 0:00 | \_ -bash
5713 pts/1 S+ 0:00 | \_ vi notes.txt
5723 ? Ss 0:00 \_ sshd: jane [priv]
5727 ? S 0:00 \_ sshd: jane@pts/0
5728 pts/0 Ss 0:00 \_ -bash
7080 pts/0 R+ 0:00 \_ ps axf
979 ? Ssl 0:12 /usr/bin/python2 -Es /usr/sbin/tuned -l -P
981 ? Ssl 0:07 /usr/sbin/rsyslogd -n
1141 ? Ss 0:00 /usr/libexec/postfix/master -w
1147 ? S 0:00 \_ qmgr -l -t unix -u
6991 ? S 0:00 \_ pickup -l -t unix -u
1371 ? Ss 0:00 login -- root
1376 tty1 Ss 0:00 \_ -bash
1411 tty1 S+ 0:00 \_ man man
1420 tty1 S+ 0:00 \_ less -s
[...]

总而言之,记得使用 ps -efps aux 来获取所有正在运行的进程列表。考虑使用 grep 管道输出,以显示包含特定单词的输出行。下面的终端输出显示了包含 peter 的行。

Terminal

user@TryHackMe$ ps -ef | grep peter
root 5665 978 0 07:11 ? 00:00:00 sshd: peter [priv]
peter 5693 5665 0 07:13 ? 00:00:00 sshd: peter@pts/1
peter 5694 5693 0 07:13 pts/1 00:00:00 -bash
peter 5713 5694 0 07:13 pts/1 00:00:00 vi notes.txt

Windows Enumeration

在此任务中,我们假设您有权访问 Microsoft Windows 主机上的 cmd。您可能通过利用漏洞获取 shell 或反向 shell 获得了此访问权限。您也可能在被利用的系统上安装了后门或设置了 SSH 服务器。在所有情况下,以下命令都需要 cmd 才能运行。

在此任务中,我们专注于枚举 MS Windows 主机。要枚举 MS Active Directory,建议您查看 枚举 Active Directory 房间。如果您对 MS Windows 主机上的权限提升感兴趣,我们推荐 Windows Privesc 2.0 房间。

系统

“systeminfo”命令可以提供有关系统的详细信息,例如其版本号和已安装的补丁程序。在下面的示例中,我们可以看到已安装哪些修补程序。

Terminal

C:\>systeminfo

Host Name: WIN-SERVER-CLI
OS Name: Microsoft Windows Server 2022 Standard
OS Version: 10.0.20348 N/A Build 20348
OS Manufacturer: Microsoft Corporation
[...]
Hotfix(s): 3 Hotfix(s) Installed.
[01]: KB5013630
[02]: KB5013944
[03]: KB5012673
Network Card(s): 1 NIC(s) Installed.
[01]: Intel(R) 82574L Gigabit Network Connection
[...]

您可以使用“wmic qfe get Caption,Description”检查已安装的更新。这些信息将帮助您了解系统修补和更新的速度。

Terminal

C:\>wmic qfe get Caption,Description
Caption Description
http://support.microsoft.com/?kbid=5013630 Update
https://support.microsoft.com/help/5013944 Security Update
Update

您可以使用“net start”检查已安装和已启动的 Windows 服务。预计会得到一个较长的列表;以下输出已被截取。

Terminal

C:\>net start
These Windows services are started:

Base Filtering Engine
Certificate Propagation
Client License Service (ClipSVC)
COM+ Event System
Connected User Experiences and Telemetry
CoreMessaging
Cryptographic Services
DCOM Server Process Launcher
DHCP Client
DNS Client
[...]
Windows Time
Windows Update
WinHTTP Web Proxy Auto-Discovery Service
Workstation

The command completed successfully.

如果您只对已安装的应用程序感兴趣,可以执行“wmic product get name,version,vendor”。如果您在连接的虚拟机上运行此命令,您将获得类似于以下输出的内容。

Terminal

C:\>wmic product get name,version,vendor
Name Vendor Version
Microsoft Visual C++ 2019 X64 Minimum Runtime - 14.28.29910 Microsoft Corporation 14.28.29910
[...]
Microsoft Visual C++ 2019 X64 Additional Runtime - 14.28.29910 Microsoft Corporation 14.28.29910

用户

要了解您的身份,您可以运行“whoami”;此外,要了解您的权限,即您的权限,您可以使用“whoami /priv”。以下终端输出显示了一个示例。

Terminal

C:\>whoami
win-server-cli\strategos

> whoami /priv

PRIVILEGES INFORMATION
----------------------

Privilege Name Description State
========================================= ================================================================== =======
SeIncreaseQuotaPrivilege Adjust memory quotas for a process Enabled
SeSecurityPrivilege Manage auditing and security log Enabled
SeTakeOwnershipPrivilege Take ownership of files or other objects Enabled
[...]

此外,您可以使用 whoami /groups 来了解您属于哪些组。下面的终端输出显示,该用户属于 NT AUTHORITY\Local account and members of Administrators group 以及其他组。

Terminal

C:\>whoami /groups

GROUP INFORMATION
-----------------

Group Name Type SID Attributes
============================================================= ================ ============ ===============================================================
Everyone Well-known group S-1-1-0 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\Local account and member of Administrators group Well-known group S-1-5-114 Mandatory group, Enabled by default, Enabled group
BUILTIN\Administrators Alias S-1-5-32-544 Mandatory group, Enabled by default, Enabled group, Group owner
[...]

您可以通过运行“net user”来查看用户。

Terminal

C:\>net user

User accounts for \\WIN-SERVER-CLI

-------------------------------------------------------------------------------
Administrator DefaultAccount Guest
michael peter strategos
WDAGUtilityAccount
The command completed successfully.

如果系统是 Windows 域控制器,则可以使用“net group”发现可用的组,否则使用“net localgroup”,如下面的终端所示。

Terminal

C:\>net localgroup

Aliases for \\WIN-SERVER-CLI

-------------------------------------------------------------------------------
*Access Control Assistance Operators
*Administrators
*Backup Operators
*Certificate Service DCOM Access
*Cryptographic Operators
*Device Owners
[...]

您可以使用命令“net localgroup administrators”列出属于本地管理员组的用户。

Terminal

C:\>net localgroup administrators
Alias name administrators
Comment Administrators have complete and unrestricted access to the computer/domain

Members

-------------------------------------------------------------------------------
Administrator
michael
peter
strategos
The command completed successfully.

使用 net accounts 查看计算机的本地设置;此外,如果计算机属于域,则可以使用 net accounts /domain。此命令有助于了解密码策略,例如最小密码长度、最长密码使用期限和锁定时长。

网络

您可以使用 ipconfig 命令了解系统的网络配置。如果您想了解所有与网络相关的设置,可以使用 ipconfig /all。下面的终端输出显示了使用 ipconfig 时的输出。例如,如果我们想了解 DNS 服务器,可以使用 ipconfig /all

Terminal

C:\>ipconfig

Windows IP Configuration


Ethernet adapter Ethernet0:

Connection-specific DNS Suffix . : localdomain
Link-local IPv6 Address . . . . . : fe80::3dc5:78ef:1274:a740%5
IPv4 Address. . . . . . . . . . . : 10.20.30.130
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 10.20.30.2

在 MS Windows 上,我们可以使用 netstat 获取各种信息,例如系统正在监听哪些端口、哪些连接处于活动状态以及谁正在使用这些连接。在本例中,我们使用选项 -a 显示所有监听端口和活动连接。-b 可以让我们找到参与连接的二进制文件,而 -n 用于避免解析 IP 地址和端口号。最后,-o 显示进程 ID (PID)。

在下面显示的部分输出中,我们可以看到 netstat -abno 显示服务器正在监听 TCP 端口 22、135、445 和 3389。进程 sshd.exeRpcSsTermService 分别位于端口 221353389 上。此外,我们可以看到两个已建立的与 SSH 服务器的连接,状态为 ESTABLISHED

Terminal

C:\>netstat -abno

Active Connections

Proto Local Address Foreign Address State PID
TCP 0.0.0.0:22 0.0.0.0:0 LISTENING 2016
[sshd.exe]
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 924
RpcSs
[svchost.exe]
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING 4
Can not obtain ownership information
TCP 0.0.0.0:3389 0.0.0.0:0 LISTENING 416
TermService
[svchost.exe]
[...]
TCP 10.20.30.130:22 10.20.30.1:39956 ESTABLISHED 2016
[sshd.exe]
TCP 10.20.30.130:22 10.20.30.1:39964 ESTABLISHED 2016
[sshd.exe]
[...]

您可能认为通过端口扫描目标系统可以获得相同的结果;然而,这不准确,原因有二。防火墙可能阻止扫描主机访问特定的网络端口。此外,端口扫描系统会产生大量流量,而不像 netstat 那样产生任何噪音。

最后,值得一提的是,使用 arp -a 可以帮助您发现同一局域网内最近与您的系统通信的其他系统。ARP 代表地址解析协议;arp -a 显示当前的 ARP 条目,即同一局域网内与您的系统通信的系统的物理地址。示例输出如下所示。这表明这些 IP 地址已经以某种方式与我们的系统进行了通信;该通信可以是尝试连接,也可以是简单的 ping。请注意,10.10.255.255 并不代表一个系统,因为它是子网广播地址。

Terminal

C:\>arp -a

Interface: 10.10.204.175 --- 0x4
Internet Address Physical Address Type
10.10.0.1 02-c8-85-b5-5a-aa dynamic
10.10.16.117 02-f2-42-76-fc-ef dynamic
10.10.122.196 02-48-58-7b-92-e5 dynamic
10.10.146.13 02-36-c1-4d-05-f9 dynamic
10.10.161.4 02-a8-58-98-1a-d3 dynamic
10.10.217.222 02-68-10-dd-be-8d dynamic
10.10.255.255 ff-ff-ff-ff-ff-ff static

DNS, SMB, and SNMP

在我们讨论枚举时,最好先了解一下 DNS、SMB 和 SNMP。

DNS

我们都熟悉域名系统 (DNS) 查询,例如 A、AAAA、CName 和 TXT 记录等。如果您想复习一下 DNS 知识,建议您访问 DNS 详解 聊天室。如果我们能获得 DNS 服务器负责应答的所有记录的“副本”,我们或许就能发现一些我们之前并不知道存在的主机。

尝试 DNS 区域传输的一个简单方法是使用 dig 命令。如果您想了解更多关于 dig 和类似命令的信息,建议您访问 被动侦察 聊天室。根据 DNS 服务器的配置,DNS 区域传输可能会受到限制。如果没有限制,可以使用“dig -t AXFR DOMAIN_NAME @DNS_SERVER”命令。“-t AXFR”表示我们正在请求区域传输,而“@”位于“DNS_SERVER”之前,表示我们要查询与指定“DOMAIN_NAME”相关的记录。

SMB

服务器消息块 (SMB) 是一种提供文件和打印机共享访问的通信协议。我们可以使用“net share”命令检查共享文件夹。以下是输出示例。我们可以看到“C:\Internal Files”以名称“Internal”共享。

Terminal

user@TryHackMe$ net share

Share name Resource Remark

-------------------------------------------------------------------------------
C$ C:\ Default share
IPC$ Remote IPC
ADMIN$ C:\Windows Remote Admin
Internal C:\Internal Files Internal Documents
Users C:\Users
The command completed successfully.

SNMP

简单网络管理协议 (SNMP) 旨在帮助收集网络上不同设备的信息。它可以让您了解各种网络事件,从服务器磁盘故障到打印机缺墨。因此,SNMP 可以为攻击者提供大量信息。“snmpcheck” 是一个查询与 SNMP 相关的服务器的简单工具。您可以在 AttackBox 的“/opt/snmpcheck/”目录中找到它;其语法非常简单:/opt/snmpcheck/snmpcheck.rb MACHINE_IP -c COMMUNITY_STRING”。

如果您想在本地 Linux 系统上安装“snmpcheck”,请考虑以下命令。

Terminal

git clone https://gitlab.com/kalilinux/packages/snmpcheck.git
cd snmpcheck/
gem install snmp
chmod +x snmpcheck-1.9.rb

More Tools for Windows

在本课程中,我们重点介绍了任何现代 MS Windows 系统上均可使用的命令行内置工具。我们没有介绍图形用户界面 (GUI) 工具;此外,我们也没有介绍任何需要额外下载和安装步骤的程序。

此任务提到了三个非内置命令行工具:

  • Sysinternals Suite
  • Process Hacker
  • GhostPack Seatbelt

Sysinternals Suite

Sysinternals Suite 是一组命令行和 GUI 实用程序及工具,提供与 Windows 系统相关的各个方面的信息。为了方便您参考,我们在下表中列出了一些示例。

实用程序名称 描述
Process Explorer 显示进程以及打开的文件和注册表项
Process Monitor 监控文件系统、进程和注册表
PsList 提供进程信息
PsLoggedOn 显示已登录用户

查看 Sysinternals 实用程序索引 获取完整的实用程序列表。如果您想了解更多信息并试用这些不同的实用程序,我们建议您访问 Sysinternals 聊天室。

Process Hacker

Process Hacker 是另一个高效可靠的 MS Windows GUI 工具,可让您收集有关正在运行的进程的信息。Process Hacker 可为您提供有关正在运行的进程和相关活动网络连接的详细信息;此外,它还能让您深入了解从 CPU、内存到磁盘和网络的系统资源利用率。

GhostPack Seatbelt

Seatbelt 是 GhostPack 套件的一部分,是一款用 C# 编写的工具。它尚未正式发布二进制版本;因此,您需要使用 MS Visual Studio 自行编译。

Conclusion

本次会议的重点是 Linux 和 MS Windows 系统中内置的命令行工具。这两个系统中都包含许多命令,尽管命令参数和输出结果有所不同。下表列出了我们用来获取更多系统信息的主要 Linux 和 MS Windows 命令。

Linux 命令 说明
hostname 显示系统的主机名
who 显示已登录用户
whoami 显示有效用户名
w 显示已登录用户及其当前操作
last 显示最近登录用户的列表
ip address show 显示网络接口和地址
arp 显示 ARP 缓存
netstat 打印网络连接
ps 显示当前进程的快照
Windows 命令 说明
systeminfo 显示操作系统配置信息,包括服务包级别
whoami 显示用户名和组信息以及相应的安全标识符
netstat 显示协议统计信息和当前 TCP/IP 网络连接
net user 显示计算机上的用户帐户
net localgroup 显示计算机上的本地组
arp 显示 IP 地址到物理地址的转换表

本聊天室重点介绍 Linux 或 MS Windows 计算机的后漏洞利用枚举。有关与 Active Directory 相关的枚举,我们建议您加入 枚举 AD 聊天室。