Primero, revisemos la estructura de Metasploit.
Metasploit está diseñado con un concepto modular para mejorar la eficiencia de reutilización de código. El marco (framework) está desarrollado en Ruby e incluye componentes escritos en Perl, C, Assembly y Python. Está diseñado principalmente para sistemas operativos Linux, por lo que su estructura de comandos es muy similar a la de una shell de comandos Linux. Sin embargo, ahora es compatible con todos los principales sistemas operativos, como Windows, Solaris y Mac.
+---------------+------------------+----------------------------------------------+
| Nombre en inglés | Nombre del módulo | Descripción |
+---------------+------------------+----------------------------------------------+
| `Aux` | Módulo Auxiliar | Proporciona una gran cantidad de módulos auxiliares para |
| | | la recopilación de información durante la penetración, |
| | | incluyendo el escaneo y la huella digital (fingerprinting) |
| | | de varios servicios de red, la creación de servicios falsos |
| | | para recopilar credenciales de inicio de sesión, |
| | | la adivinación de contraseñas, etc. |
+---------------+------------------+----------------------------------------------+
| `Exploits` | Módulo de Explotación | Componentes de código que explotan las |
| | | vulnerabilidades de seguridad descubiertas o |
| | | debilidades de configuración para atacar sistemas |
| | | remotos objetivos, implantar y ejecutar cargas útiles (payloads), |
| | | y obtener control de acceso sobre los sistemas objetivos. |
+---------------+------------------+----------------------------------------------+
| `Post` | Módulo de Post-Explotación | Admite varias acciones de post-explotación |
| | | en el sistema controlado después de obtener |
| | | control de acceso remoto a través de la explotación, |
| | | como obtener información sensible, realizar |
| | | pivoteo adicional y lanzar ataques de pivote. |
+---------------+------------------+----------------------------------------------+
| `Payloads` | Módulo de Carga Útil | Las cargas útiles son segmentos de código |
| | | que se ejecutan en el sistema objetivo después |
| | | de una explotación exitosa, generalmente para |
| | | abrir una conexión de sesión de control para |
| | | el atacante. |
+---------------+------------------+----------------------------------------------+
| `Encoders` | Módulo de Codificación | Después de ensamblar la carga útil y las |
| | | instrucciones NOP en una secuencia de instrucciones, |
| | | Metasploit necesita realizar un paso importante |
| | | de codificación antes de que el módulo de explotación |
| | | inyecte el búfer de datos malicioso en el |
| | | sistema objetivo para su ejecución. |
+---------------+------------------+----------------------------------------------+
| `Nops` | Módulo NOP | Las instrucciones NOP (No Operation) son |
| | | operaciones o instrucciones que no tienen |
| | | un efecto sustancial en el estado de ejecución |
| | | del programa. |
+---------------+------------------+----------------------------------------------+
Metasploit también integra varios componentes de escaneo de vulnerabilidades, como:
-
Escáner Nmap: Adecuado para Windows, Linux y Mac OS. Se utiliza para la detección de hosts, el escaneo o enumeración de puertos, la detección de servicios y la detección de sistemas operativos, direcciones de hardware, versiones de software y vulnerabilidades.
-
Escáner NeXpose: Escanea la red para encontrar dispositivos en funcionamiento, identificar sus sistemas operativos y vulnerabilidades de aplicaciones, analizar los datos escaneados y generar informes de escaneo de vulnerabilidades.
-
Escáner Nessus: Una de las herramientas de escaneo de vulnerabilidades más utilizadas. Adopta un modelo cliente/servidor, donde el servidor realiza las comprobaciones de seguridad y el cliente configura y gestiona el servidor. El servidor también utiliza un sistema de complementos (plugins), lo que permite a los usuarios agregar complementos para funciones específicas y comprobaciones de seguridad más complejas.
Ahora, crearemos un nuevo módulo de escáner de Metasploit llamado simple_tcp.rb.
- Abra una terminal xfce en la máquina host de LabEx y inicie la máquina objetivo Metasploitable2 ejecutando el siguiente comando:
sudo virsh start Metasploitable2
Espere a que la máquina objetivo se inicie, puede tardar de 1 a 3 minutos.
- Pruebe la conectividad a la máquina objetivo realizando un ping:
ping 192.168.122.102
Presione Ctrl+C para detener el ping.
- Inicie el contenedor de Kali Linux y entre en el entorno bash ejecutando:
docker run -ti --network host b5b709a49cd5 bash
- Dentro del contenedor de Kali, pruebe la conexión de red a la máquina objetivo:
ping 192.168.122.102
Presione Ctrl+C para detener el ping.
- Luego, navegue al directorio del módulo
scanner:
cd /usr/share/metasploit-framework/modules/auxiliary/scanner
- Cree un nuevo archivo llamado
simple_tcp.rb:
sudo vi simple_tcp.rb
- Copie y pegue el siguiente código en el archivo:
require 'msf/core'
class MetasploitModule < Msf::Auxiliary
include Msf::Exploit::Remote::Tcp
include Msf::Auxiliary::Scanner
def initialize
super(
'Name' => 'Mr_Zhou Scanner',
'Version' => '$Revision$',
'Description' => 'Shiyanlou TCP Scanner',
'Author' => 'lucat',
'License' => MSF_LICENSE
)
register_options(
[
Opt::RPORT(12345)
], self.class)
end
def run_host(ip)
connect()
sock.puts('HELLO SERVER')
data = sock.recv(1024)
print_status("Received: #{data} from #{ip}")
disconnect()
end
end
- Este código define un nuevo módulo de Metasploit llamado "Mr_Zhou Scanner" que escanea puertos TCP y muestra cualquier dato recibido del servidor. Analicemos el código:
def initialize
super(
'Name' => 'Mr_Zhou Scanner',
'Version' => '$Revision$',
'Description' => 'Shiyanlou TCP Scanner',
'Author' => 'lucat',
'License' => MSF_LICENSE
)
Esta sección establece los metadatos del módulo, como su nombre, descripción, autor y licencia.
register_options(
[
Opt::RPORT(12345)
], self.class)
Esta línea registra la opción de escanear el puerto 12345.
def run_host(ip)
connect()
sock.puts('HELLO SERVER')
data = sock.recv(1024)
print_status("Received: #{data} from #{ip}")
disconnect()
end
Este método se ejecuta para cada dirección IP objetivo. Se conecta al puerto especificado, envía la cadena "HELLO SERVER", recibe e imprime cualquier dato del servidor y luego se desconecta.
Guarde el archivo y salga del editor.