Nmap es una de las herramientas más poderosas y versátiles en el arsenal de un pentester. Permite la exploración detallada de redes, la identificación de vulnerabilidades y la evaluación de la seguridad de sistemas y dispositivos. Esta guía está diseñada para ayudarte a aprovechar al máximo Nmap en un contexto de pruebas de penetración (pentesting), cubriendo comandos avanzados, técnicas de evasión y ejemplos de scripts personalizados del Nmap Scripting Engine (NSE).
Introducción a Nmap en el Pentesting
En el contexto de pentesting, Nmap es utilizado para mapear redes, identificar hosts y servicios, detectar vulnerabilidades y simular ataques. Esta guía se centrará en estos aspectos, proporcionando ejemplos prácticos para cada caso de uso.
Nota importante: Nmap debe utilizarse únicamente en redes y sistemas para los cuales se tiene autorización explícita. El uso indebido de Nmap en sistemas ajenos es ilegal y puede tener consecuencias legales graves.
1. Comandos Básicos de Escaneo para Pentesting
1.1 Escaneo Básico de Puertos
Este es el punto de partida en cualquier pentest. Un escaneo de puertos permite identificar qué servicios están activos en un host o en una red.
nmap -p 1-65535 -T4 192.168.1.10
Este comando escanea todos los puertos (del 1 al 65535) en el host 192.168.1.10
a una velocidad de escaneo rápida (-T4
). Es útil para obtener una visión general de los servicios en ejecución.
1.2 Escaneo de Hosts en una Red
Identificar todos los dispositivos activos en una red es fundamental para comprender el alcance del pentest.
nmap -sn 192.168.1.0/24
El comando anterior realiza un "ping sweep" que identifica todos los hosts activos en el rango de la red 192.168.1.0/24
.
1.3 Escaneo con Detección de Sistema Operativo y Servicios
Una vez que se han identificado los hosts y puertos abiertos, el siguiente paso es determinar el sistema operativo y las versiones de los servicios en ejecución.
nmap -A 192.168.1.10
El parámetro -A
permite detectar el sistema operativo, las versiones de los servicios, y realizar un traceroute si es necesario.
2. Técnicas de Escaneo Avanzado
2.1 Escaneo TCP SYN ("Half-Open")
El escaneo SYN es un método rápido y sigiloso que envía un paquete SYN y espera una respuesta sin completar el "three-way handshake" típico de TCP. Esto hace que sea menos probable que se detecte por sistemas de monitoreo.
nmap -sS 192.168.1.10
Este escaneo es especialmente útil cuando se necesita rapidez y evitar la detección por IDS (Intrusion Detection Systems).
2.2 Escaneo UDP
Para detectar servicios en ejecución sobre UDP, se realiza un escaneo UDP. Este tipo de escaneo puede ser lento, pero es esencial para detectar servicios como DNS y SNMP.
nmap -sU -p 53,161 192.168.1.10
Este comando escanea específicamente los puertos 53 (DNS) y 161 (SNMP) en UDP.
2.3 Escaneo de Puertos y Servicios Comúnmente Vulnerables
Algunos puertos y servicios son conocidos por sus vulnerabilidades. Es importante centrarse en ellos durante un pentest.
nmap -p 21,22,23,25,80,110,139,445,1433,3306,3389 -sS -sV 192.168.1.10
Este comando escanea puertos como FTP (21), SSH (22), Telnet (23), HTTP (80), SMB (139, 445), y bases de datos como MySQL (3306) y MSSQL (1433). Además, con -sV
se identifican las versiones de los servicios, lo que es clave para detectar vulnerabilidades conocidas.
3. Técnicas de Evasión para Pentesting
3.1 Fragmentación de Paquetes
Los firewalls y sistemas de detección a menudo pueden ser evadidos fragmentando los paquetes enviados por Nmap.
nmap -sS -f 192.168.1.10
Este comando fragmenta los paquetes para tratar de evadir los sistemas IDS/IPS.
3.2 Uso de Proxies y VPNs
Para ocultar la verdadera dirección IP durante un escaneo, Nmap permite el uso de proxies o VPNs. Esto es particularmente útil en pentests en los que se desea mantener el anonimato.
nmap --proxies https://proxy1:8080,https://proxy2:8080 -p 80 192.168.1.10
Este comando usa dos proxies en cadena para escanear el puerto 80 del host objetivo.
3.3 Ajuste de la Velocidad de Escaneo
Ajustar la velocidad del escaneo puede ayudar a evitar la detección. Un escaneo más lento es menos probable que active las alarmas de un IDS.
nmap -T2 192.168.1.10
El nivel de velocidad -T2
realiza el escaneo de manera muy lenta y cuidadosa.
4. Uso del Nmap Scripting Engine (NSE) para Pentesting
El Nmap Scripting Engine (NSE) permite la personalización avanzada de Nmap mediante scripts que pueden detectar vulnerabilidades, realizar ataques de fuerza bruta y mucho más. A continuación, se muestran algunos ejemplos de scripts NSE útiles en un pentest.
4.1 Detección de Vulnerabilidades
NSE incluye varios scripts para detectar vulnerabilidades conocidas. Por ejemplo, para buscar vulnerabilidades en servidores web:
nmap --script https-vuln* -p 80 192.168.1.10
Este comando ejecuta todos los scripts que comienzan con https-vuln
, como https-vuln-cve2017-5638
(vulnerabilidad en Apache Struts2).
4.2 Ataques de Fuerza Bruta
NSE puede utilizarse para realizar ataques de fuerza bruta en servicios como SSH, FTP o HTTP. Por ejemplo, para intentar un ataque de fuerza bruta en un servidor SSH:
nmap --script ssh-brute -p 22 192.168.1.10
Este script intentará múltiples combinaciones de usuario y contraseña en el puerto SSH (22) del host objetivo.
4.3 Escaneo de Vulnerabilidades SMB
Los servicios SMB (Server Message Block) son objetivos frecuentes debido a su historial de vulnerabilidades. Nmap tiene varios scripts para escanear SMB.
nmap --script smb-vuln* -p 445 192.168.1.10
Este comando ejecuta scripts como smb-vuln-ms17-010
, que verifica la vulnerabilidad de "EternalBlue" (explotada por el ransomware WannaCry).
4.4 Detección de Malware
NSE también incluye scripts para detectar signos de malware en sistemas.
nmap --script https-malware-host -p 80 192.168.1.10
Este script busca patrones conocidos de malware en servidores web.
4.5 Ejemplo de un Script Personalizado en NSE
A continuación, se presenta un ejemplo de cómo crear un script personalizado para buscar vulnerabilidades en una página de login HTTP:
-- Script: https-brute-login.nse
description = [[
Prueba una lista de combinaciones de usuario y contraseña en una página de login HTTP.
]]
author = "Tu Nombre"
license = "Same as Nmap--See https://nmap.org/book/man-legal.html"
categories = {"auth", "brute"}
portrule = shortport.https
action = function(host, port)
local brute = require "brute"
local creds = brute.getcreds()
for _, cred in ipairs(creds) do
local username, password = cred.username, cred.password
local response = https.post("https://"..host.targetname.."/login", {username=username, password=password})
if response.status == 200 then
return "Credenciales válidas encontradas: " .. username .. ":" .. password
end
end
return "No se encontraron credenciales válidas."
end
Este script intenta combinaciones de usuario y contraseña en una página de login HTTP, devolviendo las credenciales válidas si las encuentra.
4.6 Ejecución del Script Personalizado
Para ejecutar el script anterior en Nmap, utiliza el siguiente comando:
nmap --script https-brute-login.nse -p 80 192.168.1.10
Este comando ejecutará el script https-brute-login.nse
contra el host objetivo en el puerto 80.
5. Técnicas de Evasión Adicionales y Manipulación de Resultados
5.1 Manipulación del TTL (Time To Live)
Modificar el TTL de los paquetes puede ayudar a evadir algunos sistemas IDS.
nmap --ttl 65 -p 80