枚举

https://tryhackme.com/room/enumerationpe

枚举

这个房间是在接近未知的企业环境时对枚举的介绍。

介绍

我们假设您可以访问目标上的命令行界面,例如bashLinux系统或cmd.exeMS Windows 系统。
从Linux系统上的一种 shell 开始,通常很容易切换到另一种。
同样,从 开始cmd.exe,您可以切换到PowerShell(如果可用)。
我们刚刚在下面的终端中发出了启动PowerShell交互式命令行的命令。powershell.exe

这个房间组织如下:

  • 枚举的目的
  • 带有常用安装工具的Linux枚举:系统、用户、网络和正在运行的服务
  • 带有内置工具的 MS Windows 枚举:系统、用户、网络和正在运行的服务
  • 附加工具示例:安全带

目的

当您获得目标系统的“shell”时,您通常对该系统有非常基本的了解。如果是服务器,你已经知道你利用了哪个服务;但是,您不一定知道其他详细信息,例如用户名或网络共享。因此,外壳看起来就像一个“暗室”,您对周围的事物只有不完整和模糊的了解。从这个意义上说,枚举可以帮助您构建更完整和准确的画面。

开发后枚举背后的目的是尽可能多地收集有关系统及其网络的信息。被利用的系统可能是公司台式机/笔记本电脑或服务器。我们的目标是收集信息,使我们能够转向网络上的其他系统或掠夺当前系统。我们有兴趣收集的一些信息包括:

  • 用户和组
  • 主机名
  • 路由表
  • 网络共享
  • 网络服务
  • 应用程序和横幅
  • 防火墙配置
  • 服务设置和审核配置
  • SNMP 和DNS详细信息
  • 搜索凭据(保存在网络浏览器或客户端应用程序中)

无法列出我们可能偶然发现的所有内容。例如,我们可能会找到 SSH 密钥,这些密钥可能会授予我们访问其他系统的权限。在基于 SSH 密钥的身份验证中,我们生成 SSH 密钥对(公钥和私钥);公钥安装在服务器上。因此,服务器将信任任何可以证明知道相关私钥的系统。

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

枚举

此任务的重点是在访问 shell 后枚举Linux机器,例如bash. 尽管有些命令提供了不止一个领域的信息,但我们尝试根据我们期望获取的信息将这些命令分为四类。

  • 系统
  • 用户
  • 联网
  • 运行服务

系统

在Linux系统上,我们可以通过搜索-release以/etc/. 运行ls /etc/*-release帮助我们找到这样的文件。让我们看看 CentOS Linux上的情况

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 系统上试试。

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

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

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

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/。

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 服务器获得的。

用户

/etc/passwd显示用户名等文件;但是,各种命令可以提供有关系统上其他用户及其行踪的更多信息和见解。

您可以使用显示谁登录who

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是直接登录系统的,而用户jane和peter是通过网络连接的,我们可以看到他们的IP地址。

请注意,who不要将whoami它与打印您的有效用户 ID 相混淆

user@TryHackMe$ whoami
jane

要使事情更上一层楼,您可以使用w,它显示谁登录了以及他们在做什么。根据下面的终端输出,peter正在编辑notes.txt并且jane是w本例中正在运行的。

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)。

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 在四分钟后注销了。

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列出了当前系统上调用用户的允许命令。

netstat是了解网络连接、路由表和接口统计信息的有用命令。我们在下表中解释了它的许多选项中的一些。

选项	描述
-a	    显示监听和非监听套接字
-l	    只显示监听套接字
-n	    显示数字输出而不是解析 IP 地址和端口号
-t	    TCP
-u	    UDP协议
-x	    UNIX
-p	    显示套接字所属程序的PID和名称
netstat -plt将返回在TCP套接字上侦听的程序

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

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

因为列表可能会很长,您可以通过指定您感兴趣的端口来进一步过滤输出,例如SMTP端口 25。
通过运行lsof -i :25

运行服务

您可以使用 列出系统上的每个进程ps -e,其中-e选择所有进程。有关该过程的更多信息,您可以添加-ffor full-format 和-lfor long format。试验ps -e、ps -ef和ps -el

您可以获得可比较的输出并查看所有使用 BSD 语法的进程:ps ax或ps aux. 请注意,在使用 BSD 语法时,a和是必需的,
因为它们解除了“只有你自己”和“必须有一个 tty”的限制;x换句话说,可以显示所有进程。用于u有关拥有该进程的用户的详细信息。

选项	描述
-e	    所有过程
-f	    全格式列表
-j	    职位格式
-u	    面向用户的格式
-l	    长格式

回答以下问题

VM 中使用的Linux发行版是什么? 
Ubuntu

它的版本号是多少?cat /etc/os-release
20.04.4

最后登录系统的用户名是什么? last
randa

最高监听的TCP端口号是多少? netstat -anopt
6667

侦听它的服务的程序名称是什么?sudo lsof -i:6667
inspircd

有一个脚本在后台运行。它的名字以THM. 脚本的名称是什么?ps -ef |grep -i thm
THM-24765.sh

Windows枚举

系统

可以为我们提供有关系统的详细信息(例如其内部版本号和已安装的补丁)的一个命令是systeminfo. 我们可以看到已安装了哪些修补程序。

您可以使用检查已安装的更新
wmic qfe get Caption, Description
此信息将使您了解系统修补和更新的速度有多快。

您可以使用检查已安装和启动的 Windows 服务net start
期望得到一长串清单;下面的输出已被截断。

如果您只对已安装的应用程序感兴趣,
您可以发布wmic product get name,version,vendor

whoami

要知道你是谁,你可以跑whoami;
此外,要了解您的能力,即您的特权,您可以使用whoami /priv

此外,您可以使用它whoami /groups来了解您属于哪个组

您可以通过运行查看用户net user

net group如果系统是 Windows 域控制器或其他,
您可以发现可用的组net localgroup

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

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

回答以下问题

完整的操作系统名称是什么?systeminfo
Microsoft Windows Server 2019 Datacenter

什么是操作系统版本?systeminfo
10.0.17763

此 MS Windows 服务器上安装了多少修补程序?
30

系统上侦听的最低TCP端口号是多少?netstat -abon
22

侦听该端口的程序的名称是什么?netstat -abon
sshd.exe

DNS、SMB 和 SNMP

在我们介绍枚举时,接触DNS、SMB 和 SNMP 是个好主意。

DNS

我们都熟悉域名系统 ( DNS ) 查询,我们可以在其中查找 A、AAAA、CName 和 TXT 记录等。
如果我们可以获得DNS服务器负责应答的所有记录的“副本”,我们可能会发现我们不知道存在的主机。

尝试DNS区域传输的一种简单方法是通过dig命令

dig -t AXFR DOMAIN_NAME @DNS_SERVER. 表示-t AXFR我们正在请求区域传输,而在@之前表示DNS_SERVER我们要查询与指定 相关的记录DOMAIN_NAME

SMB

服务器消息块 ( SMB ) 是一种提供对文件和打印机的共享访问的通信协议。
我们可以使用检查共享文件夹net share

SNMP

简单网络管理协议 (SNMP) 旨在帮助收集有关网络上不同设备的信息。它可以让您了解各种网络事件,从磁盘出现故障的服务器到打印机墨水用完。因此,SNMP 可以为攻击者保存大量信息。查询与 SNMP 相关的服务器的一种简单工具是snmpcheck.

回答以下问题

10.10.107.226 知道IP是 MS Windows Server上的域名 redteam.thm,用来 dig 进行域名转移。你在记录中得到的标志是什么?dig -t AXFR redteam.thm @10.10.107.226
THM{DNS_ZONE}

通过 SMB 协议可用的共享的名称是什么,以 开头THM? net share
THM{829738}

知道 SNMP 服务使用的社区字符串是 public,用于 snmpcheck 收集有关 IP 的 MS Windows Server 的信息 10.10.107.226。指定的位置是什么?
snmpcheck 10.10.107.226 -c public
snmpwalk -v1 -c public 10.10.107.226

THM{SNMP_SERVICE}

适用于windows的更多工具

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

此任务提到了三个不是内置命令行工具的选项:

  • Sysinternals Suite
  • Process Hacker
  • GhostPack Seatbelt

Sysinternals Suite

Sysinternals Suite是一组命令行和 GUI 实用程序和工具,提供与 Windows 系统相关的各个方面的信息。

实用程序名称	描述
进程浏览器      显示进程以及打开的文件和注册表项
进程监视器      监控文件系统、进程和注册表
列表            提供有关进程的信息
Ps登录          显示登录用户

Process Hacker

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

GhostPack Seatbelt

Seatbelt是 GhostPack 集合的一部分,是一个用 C# 编写的工具。它没有以二进制形式正式发布;因此,您需要使用 MS Visual Studio 自行编译。

总结

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 到物理地址转换表
posted @ 2023-05-29 22:31  gvpn  阅读(18)  评论(0编辑  收藏  举报