Las bases de datos en msfconsole se utilizan para hacer un seguimiento de los resultados. No es un misterio que durante evaluaciones de máquinas más complejas, o incluso de redes enteras, las cosas pueden volverse confusas y complicadas debido a la gran cantidad de resultados de búsqueda, puntos de entrada, problemas detectados, credenciales descubiertas, etc.
Aquí es donde entran en juego las bases de datos. Msfconsole tiene soporte incorporado para el sistema de bases de datos PostgreSQL. Con ello, tenemos acceso directo, rápido y fácil a los resultados de los escaneos, con la capacidad añadida de importar y exportar resultados en conjunto con herramientas de terceros. Las entradas de la base de datos también pueden utilizarse para configurar los parámetros de los módulos de explotación con los hallazgos ya existentes directamente.
Configuración de la Base de Datos
Primero, debemos asegurarnos de que el servidor PostgreSQL esté en funcionamiento en nuestra máquina host. Para ello, introduce el siguiente comando:
Estado de PostgreSQL
sherlock28@htb[/htb]$sudoservicepostgresqlstatus
Iniciar PostgreSQL
sherlock28@htb[/htb]$sudosystemctlstartpostgresql
Después de iniciar PostgreSQL, necesitamos crear e inicializar la base de datos de MSF con msfdb init.
MSF - Iniciar una Base de Datos
sherlock28@htb[/htb]$sudomsfdbinit
[i] Database already started
[+] Creating database user 'msf'
[+] Creating databases 'msf'
[+] Creating databases 'msf_test'
[+] Creating configuration file '/usr/share/metasploit-framework/config/database.yml'
[+] Creating initial database schema
rake aborted!
NoMethodError: undefined method `without' for #<Bundler::Settings:0x000055dddcf8cba8>
Did you mean? with_options
<SNIP>
A veces, puede ocurrir un error si Metasploit no está actualizado. Esta diferencia que causa el error puede suceder por varias razones. A menudo, ayuda actualizar Metasploit nuevamente (apt update) para resolver este problema. Luego, podemos intentar reinicializar la base de datos de MSF.
sherlock28@htb[/htb]$sudomsfdbinit
[i] Database already started
[i] The database appears to be already configured, skipping initialization
Si la inicialización se omite y Metasploit nos informa que la base de datos ya está configurada, podemos volver a verificar el estado de la base de datos.
sherlock28@htb[/htb]$sudomsfdbstatus
● postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; disabled; vendor preset: disabled)
Active: active (exited) since Mon 2022-05-09 15:19:57 BST; 35min ago
Process: 2476 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 2476 (code=exited, status=0/SUCCESS)
CPU: 1ms
May 09 15:19:57 pwnbox-base systemd[1]: Starting PostgreSQL RDBMS...
May 09 15:19:57 pwnbox-base systemd[1]: Finished PostgreSQL RDBMS.
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
postgres 2458 postgres 5u IPv6 34336 0t0 TCP localhost:5432 (LISTEN)
postgres 2458 postgres 6u IPv4 34337 0t0 TCP localhost:5432 (LISTEN)
UID PID PPID C STIME TTY STAT TIME CMD
postgres 2458 1 0 15:19 ? Ss 0:00 /usr/lib/postgresql/13/bin/postgres -D /var/lib/postgresql/13/main -c con
[+] Detected configuration file (/usr/share/metasploit-framework/config/database.yml)
Si este error no aparece, lo que a menudo sucede después de una instalación nueva de Metasploit, entonces veremos lo siguiente al inicializar la base de datos:
[*] Connected to msf. Connection type: PostgreSQL.
Ahora estamos listos para continuar. Msfconsole también ofrece ayuda integrada para la base de datos, lo que nos brinda una buena visión general de cómo interactuar y usar la base de datos.
MSF - Opciones de Base de Datos
msf6>helpdatabase
Database Backend Commands
=========================
Command Description
------- -----------
db_connect Connect to an existing database
db_disconnect Disconnect from the current database instance
db_export Export a file containing the contents of the database
db_import Import a scan result file (filetype will be auto-detected)
db_nmap Executes nmap and records the output automatically
db_rebuild_cache Rebuilds the database-stored module cache
db_status Show the current database status
hosts List all hosts in the database
loot List all loot in the database
notes List all notes in the database
services List all services in the database
vulns List all vulnerabilities in the database
workspace Switch between database workspaces
Comprobando el Estado de la Base de Datos
msf6>db_status
[*] Connected to msf. Connection type: postgresql.
Usando la Base de Datos
Con la ayuda de la base de datos, podemos gestionar muchas categorías diferentes y hosts que hemos analizado. Alternativamente, la información sobre ellos que hemos interactuado usando Metasploit. Estas bases de datos pueden ser exportadas e importadas. Esto es especialmente útil cuando tenemos listas extensas de hosts, loot, notas y vulnerabilidades almacenadas para estos hosts. Después de confirmar que la base de datos está conectada correctamente, podemos organizar nuestros Workspaces.
Workspaces
Podemos pensar en los Workspaces de la misma manera que pensamos en carpetas en un proyecto. Podemos segregar los diferentes resultados de escaneo, hosts e información extraída por IP, subred, red o dominio.
Para ver la lista actual de Workspaces, usa el comando workspace. Agregar un switch -a o -d después del comando, seguido del nombre del workspace, añadirá o eliminará ese workspace de la base de datos.
msf6>workspace
código* default
Nota que el Workspace predeterminado se llama default y está actualmente en uso según el símbolo *. Escribe el comando workspace [nombre] para cambiar al workspace actualmente usado. Mirando nuestro ejemplo, creemos un workspace para esta evaluación y seleccionémoslo.
Para ver qué más podemos hacer con los Workspaces, podemos usar el comando workspace -h para el menú de ayuda relacionado con los Workspaces.
msf6>workspace-h
Usage:
workspace List workspaces
workspace -v List workspaces verbosely
workspace [name] Switch workspace
workspace -a [name] ... Add workspace(s)
workspace -d [name] ... Delete workspace(s)
workspace -D Delete all workspaces
workspace -r Rename workspace
workspace -h Show this help information
Importando Resultados de Escaneo
A continuación, supongamos que queremos importar un escaneo de Nmap de un host a nuestro Workspace de la base de datos para comprender mejor el objetivo. Podemos usar el comando db_import para esto. Después de que la importación se complete, podemos comprobar la presencia de la información del host en nuestra base de datos utilizando los comandos hosts y services. Ten en cuenta que el tipo de archivo .xml es preferido para db_import.
Escaneo Nmap Almacenado
sherlock28@htb[/htb]$catTarget.nmap
Starting Nmap 7.80 ( https://nmap.org ) at 2020-08-17 20:54 UTC
Nmap scan report for 10.10.10.40
Host is up (0.017s latency).
Not shown: 991 closed ports
PORT STATE SERVICE VERSION
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds Microsoft Windows 7 - 10 microsoft-ds (workgroup: WORKGROUP)
49152/tcp open msrpc Microsoft Windows RPC
49153/tcp open msrpc Microsoft Windows RPC
49154/tcp open msrpc Microsoft Windows RPC
49155/tcp open msrpc Microsoft Windows RPC
49156/tcp open msrpc Microsoft Windows RPC
49157/tcp open msrpc Microsoft Windows RPC
Service Info: Host: HARIS-PC; OS: Windows; CPE: cpe:/o:microsoft:windows
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 60.81 seconds
Importando Resultados de Escaneo
msf6>db_importTarget.xml
[*] Importing 'Nmap XML' data
[*] Import: Parsing with 'Nokogiri v1.10.9'
[*] Importing host 10.10.10.40
[*] Successfully imported ~/Target.xml
msf6>hosts
Hosts
=====
address mac name os_name os_flavor os_sp purpose info comments
------- --- ---- ------- --------- ----- ------- ---- --------
10.10.10.40 Unknown device
msf6>services
Services
========
host port proto name state info
---- ---- ----- ---- ----- ----
10.10.10.40 135 tcp msrpc open Microsoft Windows RPC
10.10.10.40 139 tcp netbios-ssn open Microsoft Windows netbios-ssn
10.10.10.40 445 tcp microsoft-ds open Microsoft Windows 7 - 10 microsoft-ds workgroup: WORKGROUP
10.10.10.40 49152 tcp msrpc open Microsoft Windows RPC
10.10.10.40 49153 tcp msrpc open Microsoft Windows RPC
10.10.10.40 49154 tcp msrpc open Microsoft Windows RPC
10.10.10.40 49155 tcp msrpc open Microsoft Windows RPC
10.10.10.40 49156 tcp msrpc open Microsoft Windows RPC
10.10.10.40 49157 tcp msrpc open Microsoft Windows RPC
Usando Nmap Dentro de MSFconsole
Alternativamente, podemos usar Nmap directamente desde msfconsole. Para escanear directamente desde la consola sin tener que poner en segundo plano o salir del proceso, utiliza el comando db_nmap.
Comando de Nmap
msf6>db_nmap-sV-sS10.10.10.8
[*] Nmap: Starting Nmap 7.80 ( https://nmap.org ) at 2020-08-17 21:04 UTC[*] Nmap: Nmap scan report for 10.10.10.8[*] Nmap: Host is up (0.016s latency).[*] Nmap: Not shown: 999 filtered ports[*] Nmap: PORT STATE SERVICE VERSION[*] Nmap: 80/TCP open http HttpFileServer httpd 2.3[*] Nmap: Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows[*] Nmap: Service detection performed. Please report any incorrect results at https://nmap.org/submit/ [*] Nmap: Nmap done: 1 IP address (1 host up) scanned in 11.12 seconds
Después de realizar el escaneo, puedes listar los hosts y servicios descubiertos:
msf6>hosts
Hosts=====address mac name os_name os_flavor os_sp purpose info comments------- --- ---- ------- --------- ----- ------- ---- --------10.10.10.8 Unknown device 10.10.10.40 Unknown device
msf6>services
Services========host port proto name state info---- ---- ----- ---- ----- ----10.10.10.8 80 tcp http open HttpFileServer httpd 2.310.10.10.40 135 tcp msrpc open Microsoft Windows RPC10.10.10.40 139 tcp netbios-ssn open Microsoft Windows netbios-ssn10.10.10.40 445 tcp microsoft-ds open Microsoft Windows 7-10 microsoft-ds workgroup: WORKGROUP10.10.10.40 49152 tcp msrpc open Microsoft Windows RPC10.10.10.40 49153 tcp msrpc open Microsoft Windows RPC10.10.10.40 49154 tcp msrpc open Microsoft Windows RPC10.10.10.40 49155 tcp msrpc open Microsoft Windows RPC10.10.10.40 49156 tcp msrpc open Microsoft Windows RPC10.10.10.40 49157 tcp msrpc open Microsoft Windows RPC
Copia de Seguridad de Datos
Después de finalizar la sesión, asegúrate de hacer una copia de seguridad de nuestros datos en caso de que ocurra algo con el servicio PostgreSQL. Para hacerlo, utiliza el comando db_export.
msf6>db_export-h
Usage:db_export -f <format> [filename]Format can be one of:xml, pwdump[-] No output file was specified
msf6>db_export-fxmlbackup.xml
[*] Starting export of workspace default to backup.xml [ xml ]...[*] Finished export of workspace default to backup.xml [ xml ]...
Esta información puede ser importada nuevamente en msfconsole cuando sea necesario.
Hosts
El comando hosts muestra una tabla de base de datos que se llena automáticamente con las direcciones de los hosts, nombres de host y otra información que encontramos durante nuestros escaneos e interacciones.
msf6>hosts-h
hosts [ options ] [addr1 addr2 ...]
Servicios
El comando services funciona de manera similar al anterior y contiene una tabla con descripciones e información sobre los servicios descubiertos durante escaneos o interacciones.
El comando creds permite visualizar las credenciales recopiladas durante nuestras interacciones con el host objetivo.
msf6>creds-h
creds [filter options] [address range]
Loot
El comando loot trabaja en conjunto con el comando anterior para ofrecer una lista de servicios y usuarios comprometidos. Loot se refiere a volcado de hashes de diferentes tipos de sistema, incluidos hashes, passwd, shadow, entre otros.