Metasploit es un framework de pentesting, engloba desde la fase de reconocimiento de objetivos/servicios al desarrollo de exploits completos. En este artÃculo explicaré como programar un módulo básico, este se conectará a un puerto, leerá un string y escribirá otro en ese mismo socket.
Creamos la estructura de directorios necesarios:
NOTA: Los módulos que no tienen payload(scanners), son auxiliares
Esribimos un escaneador de puertos básicos que enviará un string y leerá otro al realizar la conexión:
require 'msf/core'
class MetasploitModule < Msf::Auxiliary
include Msf::Exploit::Remote::Tcp
include Msf::Auxiliary::Scanner
def initialize(info = {})
super(update_info(info,
'Name' => 'TCP Scanner',
'Description' => %q{
Simple TCP Scanner coded by kr0m
},
'Author' => [ 'Kr0m' ],
'Version' => '$Revision: 0.1 $',
))
register_options(
[
Opt::RPORT(12345)
], self.class)
end
def run_host(ip)
connect()
greeting = "HELLO SERVER"
sock.puts(greeting)
data = sock.recv(1024)
print_status("Received: #{data} from #{ip}")
disconnect()
end
end
Metemos la string en un fichero y ponemos a la escucha un netcat con dicho fichero:
nc -lnvp 12345 < response.txt
Lanzamos nuestro escaner desde metasploit:
msf > search simple_tcp
Matching Modules
================
Name Disclosure Date Rank Description
---- --------------- ---- -----------
auxiliary/dos/tcp/synflood normal TCP SYN Flooder
auxiliary/scanner/simple_tcp normal TCP Scanner
msf > use auxiliary/scanner/simple_tcp
msf auxiliary(simple_tcp) > set RHOSTS 192.168.20.27
RHOSTS => 192.168.20.27
msf auxiliary(simple_tcp) > run
[*] 192.168.20.27:12345 - Received: 123
from 192.168.20.27
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
Podemos ver que se ha recibido 123 en metasploit y netcat ha recibido HELLO SERVER:
listening on [any] 12345 ...
connect to [192.168.20.27] from (UNKNOWN) [192.168.20.27] 34155
HELLO SERVER
Se trata de un ejemplo muy básico pero a modo de introducción es muy útil tener un módulo base desde el que partir para módulos mas complejos.