GhostAcademy
GhostAcademy
Recon-ng — OSINT Framework
Manual Completo
Recon-ng
OSINT Framework Modular

Recon-ng es un framework de reconocimiento OSINT escrito en Python, con una interfaz inspirada en Metasploit. Organiza el reconocimiento en módulos intercambiables, almacena todos los resultados en una base de datos SQLite y permite automatizar flujos completos de recopilación de información mediante scripts. Es la herramienta de referencia para reconocimiento estructurado en pentests y auditorías.

★ OSINT pasivo y éticoRecon-ng recopila información de fuentes públicas: motores de búsqueda, Whois, Shodan, APIs públicas. No realiza ataques activos ni accede a sistemas sin permiso. Es una herramienta estándar en reconocimiento profesional para pentests, threat intelligence y due diligence corporativa.

¿Por qué Recon-ng?

A diferencia de herramientas como theHarvester (que hace una sola cosa) o SpiderFoot (que lo automatiza todo), Recon-ng ofrece un equilibrio perfecto: módulos especializados que puedes combinar en el orden que necesites, con una base de datos que correlaciona automáticamente los resultados entre módulos. Un subdominio encontrado con un módulo DNS puede ser el input de un módulo de resolución de IPs, que a su vez alimenta a un módulo de puertos.

Arquitectura
Framework modular
Interfaz tipo Metasploit. Más de 100 módulos intercambiables. Cada módulo hace una cosa y la hace bien.
similar a MSF
Datos
Base de datos SQLite
Todos los resultados se almacenan en tablas: hosts, ports, contacts, credentials, locations. Los módulos se alimentan entre sí automáticamente.
correlación automática
Organización
Workspaces
Cada proyecto tiene su propia base de datos aislada. Cambiar de cliente = cambiar de workspace. Nada se mezcla.
multi-proyecto
Automatización
Scripts .rc
Grabar y reproducir secuencias de comandos. Automatizar reconocimientos completos con un solo comando.
scriptable
Fuentes
50+ fuentes integradas
Shodan, VirusTotal, HaveIBeenPwned, Hunter.io, Whois, Bing, Google, GitHub, LinkedIn, Censys y más.
APIs externas
Reporting
Exportación flexible
HTML, CSV, JSON, XML. Módulos de reporting que generan informes profesionales directamente desde la DB.
informe listo
Fundamentos — 01
⚙️ Instalación y Primer Arranque

Recon-ng viene preinstalado en Kali Linux. En otras distribuciones se instala con pip. Requiere Python 3.6+ y conexión a Internet para descargar módulos del marketplace.

BASH — Instalación y arranque
# En Kali Linux (ya incluido)
recon-ng

# Instalar desde pip (cualquier Linux)
pip3 install recon-ng

# Desde fuente (última versión)
git clone https://github.com/lanmaster53/recon-ng.git
cd recon-ng && pip3 install -r REQUIREMENTS
./recon-ng

# Primer arranque
recon-ng

    _/_/_/    _/_/_/_/    _/_/_/    _/_/_/    _/      _/            _/      _/    _/_/_/
   _/    _/  _/        _/        _/      _/  _/_/    _/            _/_/    _/  _/
  _/_/_/    _/_/_/    _/        _/      _/  _/  _/  _/  _/_/_/_/  _/  _/  _/  _/  _/_/
 _/    _/  _/        _/        _/      _/  _/    _/_/            _/    _/_/  _/      _/
_/    _/  _/_/_/_/    _/_/_/    _/_/_/    _/      _/            _/      _/    _/_/_/

                                          /v5.1.2/

[78] Recon modules
[8]  Reporting modules
[2]  Import modules
[2]  Exploitation modules
[2]  Discovery modules

[recon-ng][default] >

# Instalar dependencias de módulos
[recon-ng][default] > marketplace install all
Fundamentos — 02
💻 La Consola — Navegación

La consola de Recon-ng imita la de Metasploit. Tiene autocompletado con Tab, comandos contextuales y un historial completo. El prompt muestra el workspace activo y el módulo cargado.

recon-ng — Comandos globales
[recon-ng][default] > help Commands (type [command] -h for usage help): back Exit the current context dashboard Display a summary of activity db Interact with the database exit Exit the framework help Display this menu index Create a module index keys Manage framework API keys marketplace Manage the marketplace modules Interact with installed modules options Manage the current context options pdb Start Python debugger script Record and replay commands shell Execute shell commands snapshots Manage workspace snapshots workspaces Manage workspaces
recon-ng — Comandos esenciales de navegación
## WORKSPACES
workspaces list                    # listar workspaces
workspaces create cliente_acme     # crear workspace
workspaces load cliente_acme       # cambiar al workspace
workspaces remove cliente_acme     # eliminar workspace

## MÓDULOS
modules search domain              # buscar módulos
modules load recon/domains-hosts/hackertarget  # cargar módulo
modules info                       # info del módulo activo
back                               # descargar módulo

## OPCIONES (dentro de un módulo)
options list                       # ver opciones del módulo
options set SOURCE example.com     # establecer opción
run                                # ejecutar el módulo

## BASE DE DATOS
db query SELECT * FROM hosts       # consulta SQL directa
db insert hosts (host) VALUES ('sub.example.com')
show hosts                         # ver tabla hosts
show contacts                      # ver tabla contacts

## MARKETPLACE
marketplace search                 # listar módulos disponibles
marketplace search shodan          # buscar en marketplace
marketplace install recon/domains-hosts/shodan_hostname
marketplace install all            # instalar todos

## API KEYS
keys list                          # ver APIs configuradas
keys add shodan_api TU_API_KEY     # añadir clave
keys remove shodan_api             # eliminar clave

## DASHBOARD
dashboard                          # resumen de actividad
[recon-ng][cliente_acme] > dashboard
  +------------------+---------+
  | Category         | Modules |
  +------------------+---------+
  | hosts            |      45 |
  | contacts         |      12 |
  | credentials      |       3 |
  | ports            |      28 |
  +------------------+---------+
Datos — 01
📁 Workspaces — Proyectos

Los workspaces son proyectos aislados. Cada workspace tiene su propia base de datos SQLite que almacena hosts, contactos, credenciales, puertos y ubicaciones. Cambiar de workspace no pierde los datos del anterior.

Gestión de workspaces
[recon-ng][default] > workspaces create pentest_example_com [*] Workspace 'pentest_example_com' created [*] Workspace 'pentest_example_com' loaded [recon-ng][pentest_example_com] > workspaces list +----------------------+---------------------+ | Workspaces | Modified | +----------------------+---------------------+ | default | 2024-01-10 09:00 | | pentest_example_com | 2024-01-15 14:32 | ← activo | cliente_acme | 2024-01-12 11:20 | +----------------------+---------------------+ [recon-ng][pentest_example_com] > snapshots take [*] Snapshot created: pentest_example_com_20240115
recon-ng — Gestión completa de workspaces
## CREAR Y USAR WORKSPACES
workspaces create nombre_proyecto
workspaces load nombre_proyecto
workspaces list
workspaces remove nombre_proyecto

## SNAPSHOTS (backup del workspace)
snapshots take          # crear snapshot
snapshots list          # listar snapshots
snapshots load nombre   # restaurar snapshot
snapshots remove nombre # eliminar snapshot

## UBICACIÓN FÍSICA DE LOS WORKSPACES
~/.recon-ng/workspaces/
├── default/
│   └── data.db          ← SQLite de cada workspace
├── pentest_example_com/
│   └── data.db
└── cliente_acme/
    └── data.db

## ACCEDER A LA DB DESDE SQLITE3
sqlite3 ~/.recon-ng/workspaces/pentest_example_com/data.db
sqlite> .tables
companies  contacts  credentials  hosts  leaks  locations  netblocks  ports  profiles  pushpins  repositories  vulnerabilities
sqlite> SELECT host, ip_address FROM hosts LIMIT 10;
Datos — 02
🗄 Base de Datos Interna

El corazón de Recon-ng es su base de datos SQLite. Cada módulo lee de ella y escribe en ella. Esto crea un flujo de datos en cadena: los hosts encontrados por DNS alimentan al módulo de puertos, que alimenta al de vulnerabilidades.

Tablas de la Base de Datos

TablaColumnas principalesSe llena con módulos de...
hostshost, ip_address, region, countryDNS brute, certificate CT, Bing, HackerTarget
contactsfirst_name, last_name, email, titleLinkedIn, Hunter.io, WHOIS, PGP keys
credentialsusername, password, hash, leakHaveIBeenPwned, breach databases
portshost, ip_address, port, protocolShodan, Censys, port scanners
vulnerabilitieshost, reference, exampleShodan vulns, CVE modules
locationslatitude, longitude, street_addrGeolocation modules, WHOIS
companiescompany, descriptionLinkedIn, WHOIS, APIs
netblocksnetblock, companyARIN, WHOIS, BGP modules
profilesusername, url, resourceSocial media modules
recon-ng — Interactuar con la base de datos
## VER TABLAS
show hosts
show contacts
show credentials
show ports
show vulnerabilities

## CONSULTAS SQL DIRECTAS
db query SELECT * FROM hosts WHERE ip_address IS NOT NULL
db query SELECT email FROM contacts ORDER BY last_name
db query SELECT host, port FROM ports WHERE port='443'
db query SELECT COUNT(*) FROM hosts

## INSERTAR DATOS MANUALMENTE (seeds)
# Añadir el dominio objetivo como punto de partida
db insert domains (domain) VALUES ('example.com')
db insert hosts (host) VALUES ('api.example.com')
db insert companies (company) VALUES ('Example Corp')

## IMPORTAR DESDE ARCHIVO
modules load import/list
options set FILENAME /tmp/hosts.txt
options set TABLE hosts
options set COLUMN host
run
[*] 45 records imported into 'hosts'

## EXPORTAR A CSV
db query SELECT * FROM hosts > /tmp/hosts_export.csv
Datos — 03
🔑 API Keys — Configuración

Muchos módulos de Recon-ng requieren API keys de servicios externos. Sin ellas, el módulo simplemente no funciona. La mayoría tienen planes gratuitos suficientes para reconocimiento individual.

recon-ng — Configurar APIs
## VER TODAS LAS APIS Y SU ESTADO
keys list
+-------------------+--------------------+
| Name              | Value              |
+-------------------+--------------------+
| bing_api          |                    | ← sin configurar
| censys_id         |                    |
| censys_secret     |                    |
| github_api        | ghp_xxxxxxxxxxxx   | ← configurada
| hunter_io         |                    |
| shodan_api        | 3D28xxxxxxxxxxxx   | ← configurada
| virustotal_api    |                    |
+-------------------+--------------------+

## AÑADIR API KEYS
keys add shodan_api TU_SHODAN_KEY
keys add github_api ghp_TU_GITHUB_TOKEN
keys add virustotal_api TU_VT_KEY
keys add hunter_io TU_HUNTER_KEY
keys add censys_id TU_CENSYS_ID
keys add censys_secret TU_CENSYS_SECRET
keys add bing_api TU_BING_KEY

## TABLA DE APIS — DÓNDE CONSEGUIRLAS (GRATUITAS)
shodan_api     → account.shodan.io        (1 clave gratuita, 100 queries/mes)
github_api     → github.com/settings/tokens  (gratuito — rate limit sin clave)
virustotal_api → virustotal.com            (500 queries/día gratuitas)
hunter_io      → hunter.io                (25 búsquedas/mes gratuitas)
censys_id/secret → search.censys.io       (250 queries/mes gratuitas)
bing_api       → portal.azure.com         (3000 queries/mes gratuitas)

## VER QUÉ KEY REQUIERE UN MÓDULO
modules load recon/domains-hosts/shodan_hostname
modules info
...
  Required Keys: shodan_api
...
Módulos — 01
🏪 Marketplace de Módulos

El marketplace de Recon-ng es el repositorio de módulos disponibles. Permite buscar, instalar, actualizar y eliminar módulos. Los módulos se descargan directamente desde GitHub al primer uso.

recon-ng — Gestión del marketplace
## BUSCAR MÓDULOS
marketplace search                 # todos los módulos
marketplace search domain           # por nombre
marketplace search shodan
marketplace search -c Path recon    # filtrar por categoría

## INSTALAR MÓDULOS
marketplace install recon/domains-hosts/hackertarget
marketplace install recon/domains-contacts/whois_pocs
marketplace install all             # instalar todos (puede tardar)

## VER INFO DE UN MÓDULO
marketplace info recon/domains-hosts/shodan_hostname
+----------------------+---------------------------------------------------+
| Path                 | recon/domains-hosts/shodan_hostname               |
| Name                 | Shodan - Hostname Search                          |
| Author(s)            | Tim Tomes (@LaNMaSteR53)                          |
| Version              | 1.0                                               |
| Last Updated         | 2021-05-13                                        |
| Status               | not installed                                     |
| Description          | Harvests hosts from Shodan.io using...            |
| Required Keys        | shodan_api                                        |
| Dependencies         | shodan                                            |
+----------------------+---------------------------------------------------+

## ACTUALIZAR Y ELIMINAR
marketplace update recon/domains-hosts/hackertarget
marketplace remove recon/domains-hosts/hackertarget

## VER MÓDULOS INSTALADOS
modules list
Recon
-----
  recon/domains-contacts/whois_pocs
  recon/domains-hosts/hackertarget
  recon/domains-hosts/shodan_hostname
  recon/hosts-ports/shodan_ip
  ...
Módulos — 02
🌐 Módulos de Reconocimiento

Los módulos de reconocimiento son el corazón de Recon-ng. Están organizados por tipo de input → tipo de output. Un módulo domains-hosts toma dominios como input y produce hosts como output.

Nomenclatura de Módulos

Los módulos siguen el patrón categoría/input-output/nombre. Por ejemplo: recon/domains-hosts/hackertarget es un módulo de reconocimiento que toma dominios y produce hosts usando HackerTarget.

Módulos Esenciales por Categoría

domains → hosts
recon/domains-hosts/hackertarget
Enumera subdominios usando la API de HackerTarget. Sin API key requerida. Muy rápido.
HackerTarget — gratis
domains → hosts
recon/domains-hosts/shodan_hostname
Busca en Shodan por nombre de host. Encuentra IPs, puertos y banners de todos los subdominios.
Shodan API
domains → hosts
recon/domains-hosts/certificate_transparency
Busca subdominios en logs de Certificate Transparency (crt.sh). Sin API key. Muy efectivo.
crt.sh — gratis
domains → hosts
recon/domains-hosts/brute_hosts
Fuerza bruta de subdominios con wordlist. Intenta resoluciones DNS de combinaciones comunes.
DNS brute
domains → contacts
recon/domains-contacts/whois_pocs
Extrae contactos del registro WHOIS del dominio: admin, técnico, registrante.
WHOIS — gratis
domains → contacts
recon/domains-contacts/hunter_io
Busca emails del dominio en Hunter.io. Devuelve nombres, emails y cargos.
Hunter.io API
hosts → hosts
recon/hosts-hosts/resolve
Resuelve nombres de host a IPs. Transforma registros DNS en IPs concretas en la tabla hosts.
DNS — gratis
hosts → ports
recon/hosts-ports/shodan_ip
Consulta Shodan por cada IP en la tabla hosts. Obtiene puertos abiertos, banners y CVEs.
Shodan API
contacts → credentials
recon/contacts-credentials/hibp_breach
Verifica cada email de la tabla contacts en HaveIBeenPwned. Devuelve las brechas asociadas.
HIBP API
domains → hosts
recon/domains-hosts/bing_domain_web
Dorking en Bing: site:example.com para encontrar subdominios y páginas indexadas.
Bing API
profiles → contacts
recon/profiles-contacts/github_users
Busca usuarios de GitHub asociados a la organización. Extrae emails de commits públicos.
GitHub API
netblocks → hosts
recon/netblocks-hosts/shodan_net
Escanea un rango de IPs en Shodan. Devuelve todos los hosts con puertos abiertos del rango.
Shodan API
Módulos — 03
🔍 Discovery — Hosts y Puertos

Los módulos de discovery realizan acciones más activas: resolución DNS, verificación de disponibilidad de hosts e integración con datos de Shodan para enriquecer los hosts encontrados.

recon-ng — Módulos de discovery
## RESOLUCIÓN DNS — hosts sin IP → hosts con IP
modules load recon/hosts-hosts/resolve
options list
  Name       Current Value  Required  Description
  ------     -------------  --------  -----------
  SOURCE     default        yes       Source of input (table, or query)
run
[*] [1/45] api.example.com => 93.184.216.34
[*] [2/45] mail.example.com => 93.184.216.35
[*] [3/45] dev.example.com => (no resolution)
[+] 43 new records added to hosts

## ENRIQUECER HOSTS CON SHODAN (puertos y banners)
modules load recon/hosts-ports/shodan_ip
run
[*] [1/43] 93.184.216.34
[*]     Port: 80/tcp
[*]     Port: 443/tcp
[*]     Port: 22/tcp
[+] 28 new records added to ports

## DISCOVERY DE REDES (módulos de discovery)
modules load discovery/info_disclosure/interesting_files
options set SOURCE example.com
run
[+] http://example.com/.git/HEAD - 200 OK!
[+] http://example.com/phpinfo.php - 200 OK!
[+] http://example.com/robots.txt - 200 OK!

## VERIFICAR EXISTENCIA DE HOSTS
modules load recon/hosts-hosts/ipinfodb
run
[*] Fetching geolocation for 93.184.216.34
[+] Country: United States
[+] City: Norwood
[+] Latitude: 42.1949
[+] Longitude: -71.2012
Módulos — 04
📊 Reporting — Exportar Resultados

Los módulos de reporting generan informes desde la base de datos del workspace. Desde un simple CSV hasta un informe HTML completo con todos los hallazgos organizados por categoría.

recon-ng — Generar informes
## INFORME HTML (el más completo)
modules load reporting/html
options set FILENAME /tmp/informe_recon.html
options set CREATOR "GhostAcademy"
options set CUSTOMER "Cliente ACME"
run
[*] Report generated: /tmp/informe_recon.html

## CSV (para análisis en Excel/Python)
modules load reporting/csv
options set FILENAME /tmp/hosts.csv
options set TABLE hosts
run

## JSON
modules load reporting/json
options set FILENAME /tmp/recon_data.json
run

## XML
modules load reporting/xml
options set FILENAME /tmp/recon_data.xml
run

## EXPORTAR A MALTEGO (para visualización de grafos)
modules load reporting/maltego_table
options set TABLE hosts
run

## VER RESUMEN RÁPIDO EN CONSOLA
dashboard
show hosts
show contacts
db query SELECT email FROM contacts WHERE email IS NOT NULL
Flujos — 01
🌐 Reconocimiento de Dominio

El flujo más común en Recon-ng: a partir de un dominio, obtener subdominios, resolverlos a IPs, enriquecer con datos de Shodan y extraer contactos. Encadenando módulos se construye un perfil completo.

Flujo dominio → subdominios → IPs → puertos
# PASO 1: Crear workspace y seed [recon-ng][default] > workspaces create example_com [recon-ng][example_com] > db insert domains (domain) VALUES ('example.com') [*] 1 record added to domains # PASO 2: Subdominios vía Certificate Transparency [recon-ng][example_com] > modules load recon/domains-hosts/certificate_transparency [recon-ng][example_com][certificate_transparency] > run [*] Searching crt.sh for example.com [+] api.example.com [+] mail.example.com [+] dev.example.com [+] staging.example.com [+] 12 new records added to hosts # PASO 3: Resolver a IPs [recon-ng][example_com] > modules load recon/hosts-hosts/resolve [recon-ng][example_com][resolve] > run [+] 10 hosts resolved to IP # PASO 4: Puertos con Shodan [recon-ng][example_com] > modules load recon/hosts-ports/shodan_ip [recon-ng][example_com][shodan_ip] > run [+] 28 new records added to ports
recon-ng — Flujo completo de dominio
## MÓDULOS EN ORDEN — de dominio a perfil completo

# 1. Subdominios via Certificate Transparency (sin API key)
modules load recon/domains-hosts/certificate_transparency && run && back

# 2. Subdominios via HackerTarget (sin API key)
modules load recon/domains-hosts/hackertarget && run && back

# 3. Subdominios via Shodan (requiere shodan_api)
modules load recon/domains-hosts/shodan_hostname && run && back

# 4. Subdominios via Bing dorking (requiere bing_api)
modules load recon/domains-hosts/bing_domain_web && run && back

# 5. Resolución DNS (hosts → IPs)
modules load recon/hosts-hosts/resolve && run && back

# 6. Información de puertos por IP (requiere shodan_api)
modules load recon/hosts-ports/shodan_ip && run && back

# 7. Contactos WHOIS
modules load recon/domains-contacts/whois_pocs && run && back

# 8. Ver resultados
show hosts
+----------------------+----------------+
| host                 | ip_address     |
+----------------------+----------------+
| api.example.com      | 93.184.216.34  |
| mail.example.com     | 93.184.216.35  |
| dev.example.com      | 93.184.216.36  |
| staging.example.com  | 93.184.216.37  |
+----------------------+----------------+

show ports
+----------------+------+----------+
| ip_address     | port | protocol |
+----------------+------+----------+
| 93.184.216.34  | 80   | tcp      |
| 93.184.216.34  | 443  | tcp      |
| 93.184.216.34  | 22   | tcp      |
+----------------+------+----------+
Flujos — 02
📧 Harvesting de Emails

Recon-ng puede extraer emails de múltiples fuentes y luego verificarlos en bases de datos de brechas. El flujo domains → contacts → credentials es uno de los más útiles en pentests.

recon-ng — Flujo completo de email harvesting
## FUENTES DE EMAILS

# 1. Emails desde WHOIS
modules load recon/domains-contacts/whois_pocs
run
[+] admin@example.com (Administrative)
[+] tech@example.com (Technical)

# 2. Emails desde Hunter.io (requiere hunter_io key)
modules load recon/domains-contacts/hunter_io
run
[+] john.doe@example.com (CTO)
[+] jane.smith@example.com (CEO)
[+] support@example.com

# 3. Emails desde PGP keyservers
modules load recon/domains-contacts/pgp_search
run

# 4. Emails desde GitHub (requiere github_api)
modules load recon/profiles-contacts/github_users
options set SOURCE example
run
[+] devuser: dev.user@example.com (GitHub profile)

## VERIFICAR EMAILS EN BRECHAS

# HaveIBeenPwned — verificar cada email
modules load recon/contacts-credentials/hibp_breach
run
[*] Checking john.doe@example.com...
[+] john.doe@example.com found in: LinkedIn, Collection#1, Adobe
[*] Checking admin@example.com...
[+] admin@example.com found in: RockYou2021

## VER CREDENCIALES COMPROMETIDAS
show credentials
+------------------------+---------+------------------+
| username               | password| leak             |
+------------------------+---------+------------------+
| john.doe@example.com   |         | LinkedIn 2021    |
| admin@example.com      |         | RockYou2021      |
+------------------------+---------+------------------+

## EXPORTAR SOLO LOS EMAILS
db query SELECT email FROM contacts WHERE email IS NOT NULL
Flujos — 03
🏢 Reconocimiento de Empresa

Partir del nombre de una empresa para descubrir su infraestructura: rangos IP (ARIN/WHOIS), dominios registrados, empleados en LinkedIn y repositorios en GitHub.

recon-ng — Reconocimiento de empresa
## PASO 1: Insertar la empresa como punto de partida
db insert companies (company) VALUES ('Example Corp')

## PASO 2: Encontrar rangos IP de la empresa (ARIN)
modules load recon/companies-hosts/censys_org
run
[+] 203.0.113.0/24 (Example Corp)
[+] 198.51.100.0/24 (Example Corp Cloud)

## PASO 3: Escanear los rangos en Shodan
modules load recon/netblocks-hosts/shodan_net
run
[+] 203.0.113.1 (Apache/2.4.52, ports: 80,443)
[+] 203.0.113.5 (nginx, ports: 80,443,8080)
[+] 203.0.113.10 (OpenSSH, ports: 22)
[+] 18 new records added to hosts

## PASO 4: Buscar empleados en LinkedIn
modules load recon/companies-contacts/linkedin_auth
options set SOURCE "Example Corp"
run
[+] John Doe - CTO
[+] Jane Smith - CISO
[+] Bob Johnson - DevOps Engineer

## PASO 5: Buscar repos en GitHub de la organización
modules load recon/companies-multi/github_miner
options set SOURCE example-corp
run
[+] Repository: example-corp/api-backend
    [!] Possible secret in commit: 'Add DB connection string'
[+] Repository: example-corp/infrastructure
    [!] Found .env file in history

## PASO 6: Resumen de todo lo encontrado
dashboard
  +------------------+---------+
  | Category         | Records |
  +------------------+---------+
  | companies        |       1 |
  | netblocks        |       2 |
  | hosts            |      18 |
  | ports            |      42 |
  | contacts         |       8 |
  +------------------+---------+
Automatización — 01
⚡ Scripts y Automatización

Recon-ng permite grabar secuencias de comandos y reproducirlas automáticamente. Los scripts .rc permiten ejecutar reconocimientos completos con un solo comando desde la terminal.

BASH + recon-ng — Scripts de automatización
## GRABAR COMANDOS EN TIEMPO REAL
script start /tmp/mi_recon.rc    # iniciar grabación
# ... hacer comandos normalmente ...
script stop                      # detener grabación
script replay /tmp/mi_recon.rc   # reproducir

## CREAR SCRIPT .rc MANUALMENTE
cat > /tmp/recon_dominio.rc << 'EOF'
workspaces create TARGET_WORKSPACE
db insert domains (domain) VALUES ('TARGET_DOMAIN')
modules load recon/domains-hosts/certificate_transparency
run
back
modules load recon/domains-hosts/hackertarget
run
back
modules load recon/hosts-hosts/resolve
run
back
modules load recon/domains-contacts/whois_pocs
run
back
modules load recon/contacts-credentials/hibp_breach
run
back
modules load reporting/html
options set FILENAME /tmp/recon_TARGET_DOMAIN.html
options set CREATOR "GhostAcademy"
run
exit
EOF

## EJECUTAR SCRIPT DESDE LA TERMINAL
recon-ng -w pentest_example_com --script /tmp/recon_dominio.rc
[*] Loading workspace: pentest_example_com
[*] Running script: /tmp/recon_dominio.rc
[*] Executing: workspaces create...
...
[*] Report generated: /tmp/recon_example.com.html

## SCRIPT BASH PARAMETRIZABLE
cat > recon_target.sh << 'BASH'
#!/bin/bash
DOMAIN=$1
WORKSPACE=$(echo $DOMAIN | tr '.' '_')
OUTFILE="/tmp/recon_${DOMAIN}.html"

echo "[*] Iniciando reconocimiento de: $DOMAIN"

cat > /tmp/recon_script.rc << EOF
workspaces create ${WORKSPACE}
db insert domains (domain) VALUES ('${DOMAIN}')
modules load recon/domains-hosts/certificate_transparency
run
back
modules load recon/domains-hosts/hackertarget
run
back
modules load recon/hosts-hosts/resolve
run
back
modules load recon/domains-contacts/whois_pocs
run
back
modules load reporting/html
options set FILENAME ${OUTFILE}
run
exit
EOF

recon-ng --script /tmp/recon_script.rc
echo "[+] Informe generado: ${OUTFILE}"
BASH
chmod +x recon_target.sh
./recon_target.sh example.com
Automatización — 02
🔗 Integración con APIs

Recon-ng puede complementarse con herramientas externas pasando datos entre ellas. Los resultados de theHarvester pueden importarse, y los de Recon-ng pueden exportarse a SpiderFoot o Maltego.

BASH — Integración con otras herramientas OSINT
## IMPORTAR RESULTADOS DE THEHARVESTER
theHarvester -d example.com -l 500 -b all -f /tmp/harvester_out
cat /tmp/harvester_out.json | python3 -c "
import json,sys
data=json.load(sys.stdin)
for host in data.get('hosts', []):
    print(host)
" > /tmp/hosts_harvester.txt

# Importar en Recon-ng
modules load import/list
options set FILENAME /tmp/hosts_harvester.txt
options set TABLE hosts
options set COLUMN host
run

## EXPORTAR PARA MALTEGO
modules load reporting/maltego_table
options set TABLE hosts
run

## PIPELINE COMPLETO: Recon-ng → SpiderFoot
# Exportar subdominios de Recon-ng
db query SELECT host FROM hosts > /tmp/reconng_hosts.txt
# Usar esos hosts como targets en SpiderFoot
python3 /opt/spiderfoot/sf.py -s "$(head -1 /tmp/reconng_hosts.txt)" -t DOMAIN_NAME -u Footprint -o json > spiderfoot_out.json

## COMPARAR RESULTADOS DE RECONNG Y NMAP
# Exportar IPs de Recon-ng
db query SELECT DISTINCT ip_address FROM hosts WHERE ip_address IS NOT NULL > /tmp/ips.txt
# Pasar a nmap
nmap -sV -p 80,443,22,3306 -iL /tmp/ips.txt -oX /tmp/nmap_results.xml
# Importar resultados nmap de vuelta
modules load import/nmap
options set FILENAME /tmp/nmap_results.xml
run
Laboratorio — 01
🧪 Lab: Dominio Completo

Reconocimiento completo de un dominio usando Recon-ng: subdominios, resolución de IPs, puertos via Shodan y contactos WHOIS. Usando objetivos legales de práctica.

🧪LAB-RECON-01 — Dominio: de nada a perfil completoFÁCIL

Objetivo: obtener subdominios, IPs, puertos y contactos de un dominio usando módulos sin API key. Usar hackthebox.com o tryhackme.com como objetivo de práctica (OSINT pasivo legal).

recon-ng — Lab dominio paso a paso
## INSTALAR MÓDULOS NECESARIOS (si no están instalados)
marketplace install recon/domains-hosts/certificate_transparency
marketplace install recon/domains-hosts/hackertarget
marketplace install recon/hosts-hosts/resolve
marketplace install recon/domains-contacts/whois_pocs
marketplace install reporting/html

## PASO 1: Crear workspace y seed
workspaces create lab_hackthebox
db insert domains (domain) VALUES ('hackthebox.com')
[*] 1 record added to domains

## PASO 2: Certificate Transparency (sin API)
modules load recon/domains-hosts/certificate_transparency
run
[*] Searching crt.sh for hackthebox.com
[+] app.hackthebox.com
[+] api.hackthebox.com
[+] forum.hackthebox.com
[+] labs.hackthebox.com
[+] 18 new records added to hosts
back

## PASO 3: HackerTarget (sin API)
modules load recon/domains-hosts/hackertarget
run
[+] 5 new records added to hosts
back

## PASO 4: Resolver IPs
modules load recon/hosts-hosts/resolve
run
[*] 21 hosts resolved
back

## PASO 5: Contactos WHOIS
modules load recon/domains-contacts/whois_pocs
run
back

## PASO 6: Ver resultados
show hosts
show contacts
dashboard

## PASO 7: Generar informe HTML
modules load reporting/html
options set FILENAME /tmp/lab_hackthebox.html
options set CREATOR "GhostAcademy"
options set CUSTOMER "Lab Práctica"
run
[*] Report generated: /tmp/lab_hackthebox.html
Laboratorio — 02
🧪 Lab: Empresa Objetivo

Reconocimiento orientado a empresa: partir del nombre y llegar a infraestructura, emails de empleados y verificación de credenciales comprometidas. Encadenar 6 módulos en secuencia.

recon-ng — Lab empresa en script .rc
## CREAR EL SCRIPT DE RECONOCIMIENTO
cat > /tmp/empresa_recon.rc << 'EOF'
workspaces create empresa_lab

db insert domains (domain) VALUES ('ejemplo-empresa.com')
db insert companies (company) VALUES ('Ejemplo Empresa SL')

modules load recon/domains-hosts/certificate_transparency
run
back

modules load recon/domains-hosts/hackertarget
run
back

modules load recon/hosts-hosts/resolve
run
back

modules load recon/domains-contacts/whois_pocs
run
back

modules load recon/domains-contacts/pgp_search
run
back

modules load reporting/html
options set FILENAME /tmp/informe_empresa.html
options set CREATOR "GhostAcademy"
run

exit
EOF

## EJECUTAR EL SCRIPT
recon-ng --script /tmp/empresa_recon.rc

## ANÁLISIS MANUAL POST-SCRIPT
recon-ng -w empresa_lab

# Ver todos los emails encontrados
db query SELECT email, first_name, last_name FROM contacts WHERE email IS NOT NULL ORDER BY last_name

# Exportar solo emails para usar con otras herramientas
db query SELECT email FROM contacts WHERE email IS NOT NULL > /tmp/emails_empresa.txt
wc -l /tmp/emails_empresa.txt

# Ver hosts con IP asignada
db query SELECT host, ip_address FROM hosts WHERE ip_address IS NOT NULL ORDER BY host

# Contar hallazgos totales
db query SELECT 'hosts' as tabla, COUNT(*) as total FROM hosts
UNION SELECT 'contacts', COUNT(*) FROM contacts
UNION SELECT 'ports', COUNT(*) FROM ports
UNION SELECT 'credentials', COUNT(*) FROM credentials
Laboratorio — 03
🧪 Lab: Informe HTML Profesional

Generar un informe ejecutivo de OSINT completo directamente desde Recon-ng, combinando múltiples tablas de datos en un documento HTML listo para el cliente.

recon-ng + Python — Informe completo
## OPCIÓN 1: Módulo reporting/html (integrado)
modules load reporting/html
options list
  Name      Value                 Required  Description
  ----      -----                 --------  -----------
  CREATOR   GhostAcademy          yes       Report creator
  CUSTOMER  Ejemplo Empresa SL    yes       Report customer
  FILENAME  /tmp/informe.html     yes       Output file
run
[*] Generating report...
[*] 23 hosts processed
[*] 8 contacts processed
[*] 42 ports processed
[*] Report generated: /tmp/informe.html

## OPCIÓN 2: Informe personalizado desde Python
python3 << 'EOF'
import sqlite3
from datetime import datetime

# Conectar a la DB del workspace
DB = f"{__import__('os').path.expanduser('~')}/.recon-ng/workspaces/empresa_lab/data.db"
conn = sqlite3.connect(DB)
c = conn.cursor()

print(f"INFORME OSINT — {datetime.now().strftime('%Y-%m-%d')}")
print("=" * 60)

print(f"\n[HOSTS] ({c.execute('SELECT COUNT(*) FROM hosts').fetchone()[0]} encontrados):")
for row in c.execute("SELECT host, ip_address FROM hosts WHERE ip_address IS NOT NULL LIMIT 10"):
    print(f"  {row[0]:<35} {row[1]}")

print(f"\n[CONTACTOS] ({c.execute('SELECT COUNT(*) FROM contacts').fetchone()[0]} encontrados):")
for row in c.execute("SELECT first_name, last_name, email FROM contacts WHERE email IS NOT NULL LIMIT 10"):
    print(f"  {row[0]} {row[1]:<20} {row[2]}")

print(f"\n[PUERTOS] ({c.execute('SELECT COUNT(*) FROM ports').fetchone()[0]} registros):")
for row in c.execute("SELECT ip_address, port, protocol FROM ports ORDER BY ip_address, port LIMIT 15"):
    print(f"  {row[0]}:{row[1]}/{row[2]}")

conn.close()
EOF
Referencia
✅ Referencia Rápida

Cheatsheet de Recon-ng para reconocimiento OSINT estructurado.

Comandos Globales

  • Crear workspace: workspaces create nombre
  • Cargar workspace: workspaces load nombre
  • Insertar dominio seed: db insert domains (domain) VALUES ('example.com')
  • Buscar módulos: modules search dominio
  • Instalar módulo: marketplace install recon/dominios-hosts/hackertarget
  • Cargar y ejecutar: modules load RUTA && run && back
  • Ver resultados: show hosts / show contacts / show ports
  • Resumen: dashboard
  • Consulta SQL: db query SELECT * FROM hosts
  • Informe HTML: modules load reporting/html && run
  • Ejecutar script: recon-ng -w workspace --script script.rc

Módulos Clave sin API Key

  • recon/domains-hosts/certificate_transparency — subdominios vía crt.sh
  • recon/domains-hosts/hackertarget — subdominios vía HackerTarget
  • recon/domains-hosts/brute_hosts — fuerza bruta DNS
  • recon/hosts-hosts/resolve — resolución DNS host → IP
  • recon/domains-contacts/whois_pocs — contactos WHOIS
  • recon/domains-contacts/pgp_search — emails en PGP keyservers
  • reporting/html / reporting/csv / reporting/json

Módulos con API Key

MóduloAPI KeyQué aporta
recon/domains-hosts/shodan_hostnameshodan_apiSubdominios + banners + CVEs
recon/hosts-ports/shodan_ipshodan_apiPuertos y servicios por IP
recon/domains-contacts/hunter_iohunter_ioEmails corporativos verificados
recon/contacts-credentials/hibp_breachhibp_apiEmails en brechas de datos
recon/domains-hosts/bing_domain_webbing_apiSubdominios vía Bing dorking
recon/profiles-contacts/github_usersgithub_apiEmails de commits de GitHub
recon/netblocks-hosts/shodan_netshodan_apiHosts en rangos IP

Flujo Mínimo (sin API keys)

  • 1. workspaces create proyecto && db insert domains (domain) VALUES ('target.com')
  • 2. modules load recon/domains-hosts/certificate_transparency && run && back
  • 3. modules load recon/domains-hosts/hackertarget && run && back
  • 4. modules load recon/hosts-hosts/resolve && run && back
  • 5. modules load recon/domains-contacts/whois_pocs && run && back
  • 6. modules load reporting/html && options set FILENAME /tmp/r.html && run