0% encontró este documento útil (0 votos)
106 vistas33 páginas

Escaneo Nmap en Kali Linux

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
106 vistas33 páginas

Escaneo Nmap en Kali Linux

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

PRÁCTICA NMAP EN KALI LINUX

SEGURIDAD Y ALTA DISPONIBILIDAD


UD 6: SEGURIDAD EN REDES CORPORATIVAS
Prof.: Luisa Parra García

V.01.2023
V.02.2024

ÍNDICE DE CONTENIDOS

¿Qué es nmap?

¿Cómo instalar nmap? (Ubuntu/Debian)

NMAP: Especificación del objetivo

Descubrimiento de sistemas con Nmap


Sondeo simple
Sondeo simple red local
Sondeo de lista
Descubrimiento sin sondeo de puertos
Descubrimiento TCP SYN en el puerto X (80 por defecto)
Descubrimiento TCP ACK en el puerto X (80 por defecto)
Descubrimiento UDP en el puerto X (40125 por defecto)
Descubrimiento tipo PING
Descubrimiento ARP en una red local
Sólo sondeo de puertos (omite el descubrimiento)

Sondeo de puertos
Escaneo TCP SYN (por defecto)
Escaneo TCP connect()
Sondeo TCP ACK
Sondeo UDP
Sondeos TCP Null, FIN y Xmas

Especificación de puertos con NMAP


-p <rango de puertos> (Sólo sondea unos puertos específicos)
-F (Sondeo rápido)
-r (sondeo secuencial de menor a mayor)
Excluir puertos

Detección de servicios y versiones


Niveles de intensidad de versiones
Opciones adicionales avanzadas y agresivas -A

Detección de sistemas operativos con NMAP

Uso de scripts con NMAP

Control del tiempo y rendimiento con NMAP

Formato de salida de los ficheros

Más información sobre Scripts


Escanear vulnerabilidades con scripts por categoría
Actualización de script

1
V.02.2024

Traceroute Geolocalización
Extraer los datos EXIF ​de archivos
Detectar Huellas Digitales (fingerprint) y saber que Firewall se usa
Enumera los directorios utilizados por las aplicaciones y servidores web populares
Encontrar los subdominios
Detectando malware

Resumen de Opciones NMAP

2
V.02.2024

¿Qué es nmap?
Es una herramienta que nos permite las siguientes acciones:
- Descubrimiento de sistemas (equipos activos)
- Sondeo de puertos abiertos
- Detección de servicios y versiones
- Detección de sistema operativo
- Auditoría de servicios (descubrir vulnerabilidades y ataques de fuerza bruta)

¿Cómo instalar nmap? (Ubuntu/Debian)


sudo apt update
sudo apt install nmap -y

Como en esta práctica vamos a usar Kali Linux, esta herramienta viene preinstalada.

Aquí se listan todos las opciones disponibles agrupadas por funcionamiento:


- ESPECIFICAR EL OBJETIVO
- DESCUBRIMIENTO DE EQUIPOS
- TÉCNICAS DE ESCANEO
- …

NMAP: Especificación del objetivo


Disponemos de los siguientes comandos que nos pueden resultar útiles:
ip ad //saber la ip
ip route //saber puerta de enlace

Si queremos saber qué puertos tiene abierto el router simplemente ponemos nmap y la
dirección ip del mismo.

3
V.02.2024

Podemos poner como parámetro o una varias direcciones ip, por ejemplo:
nmap [Link] //analiza esa ip
nmap [Link]/24 //analiza la red
nmap [Link]-30 //analiza de la ip 1 a la 30 del rango de red
nmap [Link],19,30 //analiza las ips indicadas
nmap [Link] [Link] //analiza las direcciones indicadas
nmap -iL [Link] //analiza las direcciones indicadas en
el fichero
nmap [Link]/24 -exclude [Link] //excluimos direcciones de un
rango)
nmap [Link] //nombre de dominio

Este último dominio es una dirección ip que nos ofrece nmap para que podamos hacer las
pruebas sin que estemos cometiendo ningún delito.

Descubrimiento de sistemas con Nmap

Vamos a utilizar WireShark para ver cómo funciona esta herramienta. WireShark es un
sniffer que va almacenado todos los paquetes que entran y salen de una red.

Vamos a abrir WireShark y a elegir la interfaz por la que queremos detectar la entrada y
salida de paquetes. En mi caso cogeré donde tengo la red inalámbrica, ya que me asigna
una ip del rango de la clase. Haremos doble clic en el nombre de la interfaz para comenzar
a capturar.

4
V.02.2024

Ya podemos ver el flujo de paquetes que se detecta en la red. Vamos a añadir algunos
filtros para ver descartar algunos paquetes con ciertos protocolos que no nos interesan
como son: MDNS y SSDP.
Para ello introduciremos lo siguiente en la barra de filtros: not mdns && not ssdp

Sondeo simple

Vamos a parar el escaneo, sin guardar y lo vamos a reanudar, a continuación vamos a


ejecutar en la terminal:

nmap [Link]

Vamos a pararlo una vez tengamos el resultado del comando:

1. Intenta resolver la IP del dominio ( En la segunda fila se puede ver la respuesta del
DNS)

5
V.02.2024

2. Por defecto está empleado la técnica que intenta obtener respuesta del puerto 80 o
443 y cómo la obtiene, pues empieza a testear el resto de puertos en busca de
respuesta. Estos serán los puertos abiertos.

La técnica empleada anteriormente se usa para equipos que no pertenecen a mi red privada
y sería equivalente a la introducción de los siguientes parámetros (ya veremos su
significado):

nmap -PE -PP -PS443 -PA [Link]

Sondeo simple red local

Vamos a realizar el proceso anterior pero con equipos de nuestra red local, por ejemplo
ejecutaremos y capturaremos mediante WireShark el siguiente comando:

nmap [Link]-254

Vemos que tenemos dos host que han contestado, veamos ahora en WireShark que la
técnica es totalmente diferente. En este caso utiliza el protocolo ARP para el descubrimiento
de host. Y los equipos que responden al ARP son sondeados.

Esta técnica equivaldría al los siguiente parámetros en el comando:


nmap [Link]-254 -PR

6
V.02.2024

Sondeo de lista
Es el menos agresivo, ya que no envía ningún paquete a ninguna de las máquinas. Intenta
resolverlo por el protocolo DNS. No hace escaneo de puertos, sólo comprueba que exista
una entrada en el servidor DNS.

Veamos el ejemplo siguiente ejemplo:


┌──(kali㉿kali)-[~]
└─$ nmap [Link]-15 -sL
Starting Nmap 7.93 ( [Link] ) at 2023-01-24 10:09 EST
Nmap scan report for [Link]
Nmap scan report for [Link] ([Link])
Nmap scan report for [Link] ([Link])
Nmap scan report for [Link]
Nmap scan report for [Link]
Nmap scan report for [Link]
Nmap done: 6 IP addresses (0 hosts up) scanned in 0.03 seconds

Descubrimiento sin sondeo de puertos

Con esta opción descubriremos los equipos, pero no haremos sondeo de puertos a estos
equipos.
Si lo ejecutamos en la red local, utilizará el protocolo ARP para localizar los equipos y ver si
responden a esa petición.

Veamos el siguiente ejemplo:

7
V.02.2024

┌──(kali㉿kali)-[~]
└─$ nmap [Link]-15 -sn
Starting Nmap 7.93 ( [Link] ) at 2023-01-24 10:17 EST
Nmap scan report for [Link] ([Link])
Host is up (0.0014s latency).
Nmap scan report for [Link] ([Link])
Host is up (0.041s latency).
Nmap done: 6 IP addresses (2 hosts up) scanned in 1.21 seconds

Descubrimiento TCP SYN en el puerto X (80 por defecto)

Intenta establecer una conexión TCP con la máquina objetivo a través del puerto 80 (por
defecto) y la bandera SYN a 1 (síncrona, recibe un ACK).

Veamos el siguiente ejemplo:

┌──(kali㉿kali)-[~]
└─$ nmap [Link] -PS
Starting Nmap 7.93 ( [Link] ) at 2023-01-24 10:36 EST
Nmap scan report for [Link] ([Link])
Host is up (0.17s latency).
Other addresses for [Link] (not scanned):
[Link]
Not shown: 996 closed tcp ports (conn-refused)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
9929/tcp open nping-echo
31337/tcp open Elite

Nmap done: 1 IP address (1 host up) scanned in 10.44 seconds

Salida WireShark:

Como vemos, primero intenta establecer la comunicación por el puerto 80 y cuando obiene
respuesta, resetea esa comunicación y comienza con el escaneo de puertos.

8
V.02.2024

Nota:
nmap [Link] -PS
nmap [Link] -PS80
Estas dos sentencias son equivalentes. Si cambio 80 por cualquier otro puerto, tratará de
iniciar la conexión por el puerto indicado.

Descubrimiento TCP ACK en el puerto X (80 por defecto)

Lo que hacemos es enviar un paquete ACK, como si ya tuviésemos una conexión


establecida y le estoy confirmando la recepción de unos datos. Como la máquina que
queremos descubrir no tiene noticias anteriores de esta conexión, manda un reset. Pero
para nosotros es suficiente para saber que está activo y comienza con el escaneo de
puertos.

┌──(kali㉿kali)-[~]
└─$ nmap [Link] -PA
Starting Nmap 7.93 ( [Link] ) at 2023-01-24 10:50 EST
Nmap scan report for [Link] ([Link])
Host is up (0.17s latency).
Other addresses for [Link] (not scanned):
[Link]
Not shown: 996 closed tcp ports (conn-refused)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
9929/tcp open nping-echo
31337/tcp open Elite

Nmap done: 1 IP address (1 host up) scanned in 17.09 seconds

Puedo mezclar varias opciones, por ejemplo:

nmap [Link] -PS -PA

Descubrimiento UDP en el puerto X (40125 por defecto)

Este tipo de descubrimiento se basa en el envío de un paquete UDP al equipo y éste


responde con un paquete ICMP de destino inalcanzable. Pero esta respuesta implica que
ese equipo ha hecho el envío y por lo tanto hay algo, así que empieza el sondeo de puertos.

9
V.02.2024

┌──(kali㉿kali)-[~]
└─$ sudo nmap [Link] -PU
Starting Nmap 7.93 ( [Link] ) at 2023-01-24 11:05 EST
Nmap scan report for [Link] ([Link])
Host is up (0.18s latency).
Other addresses for [Link] (not scanned):
[Link]
Not shown: 996 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
9929/tcp open nping-echo
31337/tcp open Elite

Nmap done: 1 IP address (1 host up) scanned in 3.79 seconds

Descubrimiento tipo PING

Este método es el más clásico, pero es el que menos se recomienda y menos se utiliza. Ya
que cualquier cortafuegos lo puede limitar. Nuestra máquina de pruebas, si tiene habilitada
la respuesta y por lo tanto el resultado es el mismo que en el resto de estrategias.

┌──(kali㉿kali)-[~]
└─$ nmap [Link] -PE
Warning: You are not root -- using TCP pingscan rather than ICMP
Starting Nmap 7.93 ( [Link] ) at 2023-01-24 11:16 EST
Nmap scan report for [Link] ([Link])
Host is up (0.17s latency).
Other addresses for [Link] (not scanned):
[Link]
Not shown: 996 closed tcp ports (conn-refused)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
9929/tcp open nping-echo
31337/tcp open Elite

Nmap done: 1 IP address (1 host up) scanned in 13.28 seconds

10
V.02.2024

Descubrimiento ARP en una red local


Ya lo vimos anteriormente en el apartado “Sondeo de una red local”

nmap [Link]-254 -PR

Sólo sondeo de puertos (omite el descubrimiento)


No hay ningún intento previo de conexión, simplemente averigua la IP del equipo mediante
DNS si es necesario y se pone directamente con el escaneo de puertos, esté el equipo
disponible o no. Esto nos puede ser útil si sospechamos que los equipos pueden tener
bloqueados los puertos de descubrimiento.

nmap [Link] -Pn

Sondeo de puertos
Nmap divide los puertos en 6 estados:
● Abierto: Si recibe conexiones
● Cerrado: Responde a nmap pero no hay ninguna aplicación detrás de él.
● Filtrado: Cuando no puede determinar si el puerto se encuentra abierto porque hay
un filtrado de paquetes.
● No filtrado: Cuando puede determinar si el puerto está cerrado.
● Abierto|Filtrado: Cuando no puede determinar si está abierto o filtrado
● Cerrado|Filtrado: Cuando no puede determinar si está cerrado o filtrado

Escaneo TCP SYN (por defecto)

La mayoría de las veces, para el sondeo de puertos se usa TCP SYN y espera recibir
respuesta:
● Si recibe un reset (RST), significa que el equipo está activo pero que ese puerto no
responde.
● Si recibe un SYN ACK, significa que está preparado para realizar la conexión y
nosotros respondemos con un reset.

Ejemplo:

┌──(kali㉿kali)-[~]
└─$ sudo nmap [Link] -sS

11
V.02.2024

Vamos a hacer un filtrado por el puerto 80:

Escaneo TCP connect()

Este es el que se usa cuando hay un escaneo de puertos pero no somos administradores.
Por eso es importante siempre ponernos como root.
┌──(root㉿kali)-[~]
└─# nmap [Link] -sT

Y obtendremos lo siguiente:

Enviamos un SYN, recibimos un ACK, enviamos un ACK y luego un RST. Así que sí
llegamos a conectarnos al enviar el ACK en este caso.

Sondeo TCP ACK

Este sondeo es distinto de otros que se han discutido hasta ahora en que no puede
determinar puertos abiertos (o incluso abiertos|filtrados). Se utiliza para mapear reglas de
cortafuegos, y para determinar si son cortafuegos con inspección de estados y qué puertos
están filtrados.

La sonda de un sondeo ACK sólo tiene fijada la bandera ACK. Cuando se sondean
sistemas no filtrados los puertos abiertos y cerrados devolverán un paquete RST. Nmap
marca el puerto como no filtrado, lo que significa que son alcanzables por el paquete ACK,
pero no se puede determinar si están abiertos o cerrados. Los puertos que no responden o
que envían mensajes de error ICMP en respuesta (tipo 3, código 1, 2, 3, 9, 10, o 13), se
marcan como filtrados.

12
V.02.2024

Sondeo UDP

Tres de los más comunes son los servicios DNS, SNMP, y DHCP (puertos registrados 53,
161/162, y 67/68 respectivamente). Dado que el sondeo UDP es generalmente más lento y
más difícil que TCP, algunos auditores de seguridad ignoran estos puertos. Esto es un error,
porque es muy frecuente encontrarse servicios UDP vulnerables y los atacantes no ignoran
estos protocolos. Afortunadamente, Nmap puede utilizarse para hacer un inventario de
puertos UDP.

El sondeo UDP se activa con la opción -sU. Puede combinarse con un tipo de sondeo TCP
como el sondeo SYN (-sS) para comprobar ambos protocolos al mismo tiempo.

Los sondeos UDP funcionan mediante el envío (sin datos) de una cabecera UDP para cada
puerto objetivo.
● Si se obtiene un error ICMP que indica que el puerto no es alcanzable (tipo 3, código
3) entonces se marca el puerto como cerrado.
● Si se recibe cualquier error ICMP no alcanzable (tipo 3, códigos 1, 2, 9, 10, o 13) se
marca el puerto como filtrado.
● En algunas ocasiones se recibirá una respuesta al paquete UDP, lo que prueba que
el puerto está abierto.
● Si no se ha recibido ninguna respuesta después de algunas retransmisiones
entonces se clasifica el puerto como abierto|filtrado. Esto significa que el puerto
podría estar abierto o que hay un filtro de paquetes bloqueando la comunicación.
Puede utilizarse el sondeo de versión (-sV) para diferenciar de verdad los puertos
abiertos de los filtrados.

13
V.02.2024

┌──(root㉿kali)-[~]
└─# nmap -sU [Link]
Starting Nmap 7.93 ( [Link] ) at 2023-01-25 11:38 EST
Nmap scan report for [Link] ([Link])
Host is up (0.17s latency).
Other addresses for [Link] (not scanned):
[Link]
Not shown: 986 closed udp ports (port-unreach)
PORT STATE SERVICE
68/udp open|filtered dhcpc
123/udp open ntp
1008/udp open|filtered ufsd
1100/udp open|filtered mctp
3456/udp open|filtered IISrpc-or-vat
16674/udp open|filtered unknown
17321/udp open|filtered unknown
20120/udp open|filtered unknown
21364/udp open|filtered unknown
21576/udp open|filtered unknown
29256/udp open|filtered unknown
37393/udp open|filtered unknown
44190/udp open|filtered unknown
49188/udp open|filtered unknown

Sondeos TCP Null, FIN y Xmas


Sondeo Null(-sN): No fija ningún bit (la cabecera de banderas TCP es 0)
Sondeo FIN (-sF): Solo fija el bit TCP FIN.
Sondeo Xmas (-sX): Fija los bits de FIN, PSH, y URG flags, iluminando el paquete como si
fuera un árbol de Navidad.

Estos tres tipos de sondeos son exactamente los mismos en comportamiento salvo por las
banderas TCP que se fijen en los paquetes sonda:

● Si se recibe un paquete RST entonces se considera que el puerto está cerrado.


● Si no se recibe ninguna respuesta el puerto se marca como abierto|filtrado.
● El puerto se marca filtrado si se recibe un error ICMP no alcanzable (tipo 3, código
1, 2, 3, 9, 10, o 13).

Especificación de puertos con NMAP


Por defecto se sondean los 1000 puertos más conocidos de forma aleatoria

14
V.02.2024

-p <rango de puertos> (Sólo sondea unos puertos específicos)

nmap [Link] -p 21
nmap [Link] -p 21-100
nmap [Link] -p U:53, T:21-25,80 //Rango de puertos TCP y UDP
nmap [Link] -p http,https // Nombres de servicio
nmap [Link] -p- // Todos los puertos 1-65535

-F (Sondeo rápido)

nmap [Link] -F // Sondeo de los 100 puertos más comunes


nmap [Link] –-top-ports 2000 // Los 2000 puertos más populares

Los puertos ordenados se encuentran en /usr/share/nmap/nmap-services

-r (sondeo secuencial de menor a mayor)

nmap [Link] -r // Sondeo de puertos de mayor a menor

Excluir puertos

nmap [Link] -p 21-100 --exclude-ports 85

Detección de servicios y versiones

Si se indica a Nmap que mire un sistema remoto podrá decir que tiene abiertos los puertos
25/tcp, 80/tcp y 53/udp. Informará que esos puertos se corresponden habitualmente con un
servidor de correo (SMTP), servidor de web (HTTP) o servidor de nombres (DNS),
respectivamente, si utilizas su base de datos nmap-services con más de 2.200 puertos
conocidos. Pero no debemos confiar 100% en esto, a veces se ejecutan servicios distintos
en puertos inesperados.

head /usr/share/nmap/nmap-services -n176

15
V.02.2024

El archivo /usr/share/nmap/nmap-services es una base de datos que Nmap utiliza


para asociar puertos comunes con sus servicios correspondientes y para priorizar los
puertos que escanea por defecto.

Contenido del archivo nmap-services


Este archivo contiene una lista de puertos conocidos junto con el servicio asociado y un
valor de "frecuencia". Cada línea del archivo generalmente tiene el siguiente formato:

<nombre_del_servicio> <puerto/protocolo> <frecuencia> # <comentario>

Por ejemplo:

http 80/tcp 0.7854 # World Wide Web HTTP

https 443/tcp 0.6745 # HTTP protocol over TLS/SSL

ssh 22/tcp 0.4963 # Secure Shell

- Nombre del servicio: nombre del servicio conocido que normalmente usa el puerto
(por ejemplo, http).
- Puerto/Protocolo: el número del puerto seguido del protocolo (tcp o udp).
- Frecuencia: un valor decimal entre 0 y 1 que indica la probabilidad de que este
puerto esté abierto en la red. Nmap utiliza este valor para priorizar los puertos con
mayor probabilidad de estar activos en sus escaneos por defecto.
- Comentario: información adicional que describe el servicio.

¿Para qué sirve el archivo nmap-services?


1. Asociación de puertos y servicios: Cuando Nmap detecta un puerto abierto, utiliza
este archivo para identificar y mostrar el nombre del servicio comúnmente asociado
con ese puerto.

16
V.02.2024

2. Priorización de escaneos: Nmap escanea por defecto los 1,000 puertos más
"populares", según la frecuencia indicada en este archivo. Esta prioridad mejora la
eficiencia del escaneo al concentrarse en los puertos más probables de estar
activos.

3. Personalización: Si deseas que Nmap asocie un puerto específico con un servicio


no estándar o priorizar otros puertos en el escaneo, puedes editar este archivo
(aunque es recomendable crear una copia antes de modificarlo).

Este archivo, por tanto, es esencial para que Nmap pueda realizar escaneos eficientes y
proporcionar resultados claros sobre los servicios en los puertos encontrados abiertos.

Si queremos saber qué se está ejecutando realmente en ese puerto tendremos que fijarnos
en otro fichero:

head /usr/share/nmap/nmap-service-probes -n40

Cuando hacemos un análisis de vulnerabilidades (o tan sólo un inventario de red) también


es necesario saber la versión que se está utilizando del servidor de correcto y de DNS.
Puede ayudar mucho a la hora de determinar qué ataques pueden afectar a un servidor el
saber el número de versión exacto de éste. La detección de versiones ayuda a obtener esta
información.
El archivo /usr/share/nmap/nmap-service-probes contiene una base de datos de
patrones que Nmap usa para identificar servicios y aplicaciones específicas en los puertos
abiertos mediante la técnica de detección de servicios o service version detection (nmap
-sV). A diferencia de nmap-services, que solo asocia puertos conocidos con servicios
estándar, nmap-service-probes ayuda a determinar la versión exacta de una aplicación
o servicio que se ejecuta en un puerto.

Contenido del archivo nmap-service-probes


El archivo incluye una serie de "probes" o "sondas", que son paquetes de datos que Nmap
envía a los puertos para provocar una respuesta. Cada entrada en el archivo describe una
sonda que Nmap puede enviar y las respuestas esperadas para identificar servicios
específicos. Cada sonda tiene una estructura similar:

Probe <type> <protocol> q|<probe data>|

match <service> m|<regex>| p/<product version>/

- Probe: define el tipo de sonda, el protocolo (TCP, UDP, etc.) y los datos que se
envían.

17
V.02.2024

- Match: contiene expresiones regulares que Nmap usa para identificar la respuesta.
Si la respuesta de un servicio coincide con una de estas expresiones regulares,
Nmap puede identificar el servicio y la versión.
- Service y Product version: en el campo match, Nmap especifica el nombre del
servicio y, si es posible, el producto y versión específicos detectados.

Ejemplo simplificado de una entrada


Una entrada de ejemplo para el servicio HTTP podría verse así:

Probe TCP GetRequest q|GET / HTTP/1.0\r\n\r\n|

match http m|^HTTP/1\.[01] \d\d\d| p/Apache httpd/ v/2.2.15/

- Sonda TCP GetRequest: Nmap envía una solicitud HTTP simple (GET /
HTTP/1.0) a los puertos TCP.
- Match http: Si recibe una respuesta que coincide con el encabezado HTTP
(^HTTP/1\.[01] \d\d\d), Nmap intenta identificar el servicio como HTTP.
- Producto y versión: La respuesta podría indicar que el servidor es Apache httpd
en la versión 2.2.15.

¿Para qué sirve el archivo nmap-service-probes?


1. Detección precisa de versiones: Al comparar las respuestas con expresiones
regulares en el archivo, Nmap puede identificar la versión específica de un servicio
en un puerto.

2. Detección de servicios desconocidos en puertos no estándar: Ayuda a


identificar servicios ejecutándose en puertos inusuales (por ejemplo, HTTP en un
puerto distinto al 80).

3. Ampliable y personalizable: Puedes agregar tus propias sondas y patrones para


detectar servicios específicos en tu red o incluir servicios internos que no aparezcan
en la versión oficial.

Este archivo es fundamental para la opción -sV de Nmap, y con su ayuda, Nmap realiza
una identificación profunda de servicios en puertos abiertos.

Ejecutamos el comando nmap con la opción -sV, para obtener el servicio y la versión

nmap [Link] -sV

18
V.02.2024

Niveles de intensidad de versiones

nmap [Link] -sV --version-intensity 4

┌──(root㉿kali)-[~]
└─# nmap [Link] -sV --version-intensity 4
Starting Nmap 7.93 ( [Link] ) at 2023-02-07 16:38 EST
Nmap scan report for [Link] ([Link])
Host is up (0.17s latency).
Other addresses for [Link] (not scanned): [Link]
Not shown: 996 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.13 (Ubuntu Linux; protocol
2.0)
80/tcp open http Apache httpd 2.4.7 ((Ubuntu))
9929/tcp open nping-echo Nping echo
31337/tcp open tcpwrapped
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at


[Link] .
Nmap done: 1 IP address (1 host up) scanned in 15.64 seconds

Nmap envía una serie de sondas cuando se activa la detección de versiones (-sV) con un
nivel de rareza preasignado y variable de 1 a 9. Las sondas con un número bajo son
efectivas contra un amplio número de servicios comunes, mientras que las de números más
altos se utilizan rara vez. El nivel de intensidad indica que sondas deberían utilizarse.
Cuanto más alto sea el número, mayor las probabilidades de identificar el servicio. Sin
embargo, los sondeos de alta intensidad tardan más tiempo. El valor por defecto es 7.

Opciones adicionales avanzadas y agresivas -A

- Detección de SO [-O]
- Escaneo de versiones [-sV]
- Escaneo de scripts [-sC]
- traceroute [--traceroute]

Detección de sistemas operativos con NMAP

nmap [Link] -sO // detección de SO


nmap [Link] -sO -osscan-guess // detección más agresiva
nmap [Link] -sO -max-os-tries x // número máximo de intentos

19
V.02.2024

usualmente entre 2/5

Uso de scripts con NMAP

Nmap Scripting Engines, es una de las características más avanzadas de nmap, le añade
flexibilidad y potencia; las funcionalidades que añade, permiten que nmap pueda ejecutar
tareas adicionales al escaneo de puertos, identificación de servicios, sistemas operativos y
versiones. Los scripts NSE son programados utilizando el lenguaje de programación LUA.
El comando nmap [Link] -sC realiza un escaneo en el host
[Link] usando la opción -sC, que habilita un conjunto de scripts de Nmap
Scripting Engine (NSE) predeterminados.

nmap [Link] -sC // scripts NSE predeterminados

┌──(root㉿kali)-[~]
└─# nmap [Link] -sC
Starting Nmap 7.93 ( [Link] ) at 2023-02-08 07:41 EST
Nmap scan report for [Link] ([Link])
Host is up (0.61s latency).
Other addresses for [Link] (not scanned):
[Link]
Not shown: 996 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
| ssh-hostkey:
| 1024 ac00a01a82ffcc5599dc672b34976b75 (DSA)
| 2048 203d2d44622ab05a9db5b30514c2a6b2 (RSA)
| 256 9602bb5e57541c4e452f564c4a24b257 (ECDSA)
|_ 256 33fa910fe0e17b1f6d05a2b0f1544156 (ED25519)
80/tcp open http
|_http-favicon: Nmap Project
|_http-title: Go ahead and ScanMe!
9929/tcp open nping-echo
31337/tcp open Elite

Nmap done: 1 IP address (1 host up) scanned in 11.37 seconds

20
V.02.2024

¿Por qué usar -sC?


Usar -sC permite que Nmap realice una detección más detallada sin requerir scripts
manuales. La combinación de estos scripts permite obtener detalles específicos sobre los
servicios, como el sistema operativo subyacente, versiones de aplicaciones y cualquier
banner de servicio expuesto, todo lo cual puede ser útil para análisis de red o de seguridad.

Para listar los script:


ls /usr/share/nmap/scripts

Sus nombres normalmente nos indican características del los script:

ls /usr/share/nmap/scripts | greep ssh

Ejecutamos un script en concreto de la siguiente manera:

nmap -p22 --script [Link] [Link]

Utiliza un diccionario bastante pequeño. Podríamos usar nuestro propio diccionario, pero
para saber más concretamente qué argumentos podemos pasarle al script:

nmap -script-help [Link]

nmap -p 22 --script ssh-brute --script-args


userdb=[Link],passdb=[Link] [Link]

Control del tiempo y rendimiento con NMAP

A medida que vamos añadiendo número de equipos, puertos, servicios el tiempo empieza
aumentar. Nmap nos facilita un parámetro para el control de tiempo -T

0 → Paranóico
1 → Sigiloso para evadir IDS
2 → Amable: reduce el sondeo (Ancho de Banda y recursos del sistema)
3 → Normal: valor por defecto
4 → Agresivo - sondeos más rápidos para usar en redes más rápidas y fiables.
5 → Loco: Sacrifica la fiabilidad por la velocidad para usar en redes muy rápidas.

Vamos a comprobar la diferencia que hay en tiempo entre estos dos comandos:
nmap [Link] -T4
nmap [Link] -T2

21
V.02.2024

Formato de salida de los ficheros

Podemos almacenar los resultados en ficheros:

nmap [Link] -oN salida_nomal.nmap // Salida normal


nmap [Link] -oX salida_nomal.xml // Salida XML
nmap [Link] -v // Muestra más información
nmap [Link] -packet-trace // muestra los paquetes que se envían
en cada momento

Más información sobre Scripts

Escanear vulnerabilidades con scripts por categoría

nmap -Pn --script vuln IP

Los scripts en NSE se dividen en las siguientes categorías:

Aquí tienes la información completa sobre cada categoría de scripts NSE de Nmap, con la
descripción de la categoría, el propósito de su uso, un ejemplo de comando y la explicación
de qué hace ese comando:

1. Auth
- Descripción: Scripts que prueban métodos de autenticación en servicios para
detectar accesos no autorizados.
- Uso: Verificar configuraciones de autenticación de los servicios en la red,
comprobando accesos anónimos o credenciales predeterminadas.
- Ejemplo: ftp-anon
- Comando:

nmap -p 21 --script ftp-anon TARGET_IP

22
V.02.2024

- Qué hace: Este comando verifica si el servidor FTP permite acceso anónimo sin
necesidad de credenciales en el puerto 21 del objetivo (TARGET_IP).

2. Broadcast
- Descripción: Scripts que envían paquetes de broadcast o multidifusión en la red
local para descubrir información de dispositivos sin escanear todas las direcciones
IP.
- Uso: Detectar dispositivos y servicios de la red local que responden a solicitudes de
broadcast, como impresoras, cámaras de seguridad o servidores.
- Ejemplo: dhcp-discover
- Comando:

sudo nmap --script broadcast-dhcp-discover

- Qué hace: Este comando envía una solicitud de DHCP de broadcast para identificar
el servidor DHCP en la red y obtener información de configuración de red.

3. Brute
- Descripción: Scripts de fuerza bruta que prueban diferentes combinaciones de
usuario y contraseña para acceder a un servicio.
- Uso: Detectar servicios con contraseñas débiles o comunes, especialmente en
redes inseguras o poco protegidas.
- Ejemplo: ftp-brute
- Comando:

nmap -p 21 --script ftp-brute TARGET_IP

- Qué hace: Este comando realiza un ataque de fuerza bruta en el puerto FTP (21)
para intentar acceder al servicio FTP del objetivo (TARGET_IP) mediante múltiples
combinaciones de credenciales.

4. Default
- Descripción: Scripts que ejecutan pruebas básicas y seguras en los servicios
disponibles sin ser intrusivos.
- Uso: Recoger información general sobre los servicios del objetivo de manera segura
y rápida.
- Ejemplo: ssl-cert

23
V.02.2024

- Comando:

nmap -p 443 --script ssl-cert TARGET_IP

- Qué hace: Este comando extrae el certificado SSL del servicio HTTPS en el puerto
443 del objetivo (TARGET_IP), mostrando detalles como fechas de expiración y
emisor.

5. Discovery
- Descripción: Scripts que ayudan a descubrir información sobre el sistema y la red,
como hosts y servicios activos.
- Uso: Identificar servicios y configuraciones de red de manera eficiente, útil en la
etapa de reconocimiento de un escaneo.
- Ejemplo: dns-brute
- Comando:

nmap --script dns-brute TARGET_IP

- Qué hace: Este comando realiza un escaneo de fuerza bruta para descubrir
subdominios asociados al dominio del objetivo (TARGET_IP).

6. DoS
- Descripción: Scripts que prueban vulnerabilidades que podrían causar denegación
de servicio (DoS) en un sistema.
- Uso: Verificar si un servicio es vulnerable a ataques DoS, lo cual puede
deshabilitarlo o agotar sus recursos.
- Ejemplo: http-slowloris
- Comando:

nmap -p 80 --script http-slowloris TARGET_IP

- Qué hace: Este comando comprueba si el servidor HTTP en el puerto 80 del


objetivo (TARGET_IP) es vulnerable al ataque Slowloris, que podría causar una
denegación de servicio al abrir conexiones HTTP lentas.

24
V.02.2024

7. Exploit
- Descripción: Scripts que buscan explotar vulnerabilidades conocidas en sistemas o
servicios.
- Uso: Detectar posibles vulnerabilidades explotables en el sistema o los servicios del
objetivo.
- Ejemplo: smb-vuln-ms17-010
- Comando:

nmap -p 445 --script smb-vuln-ms17-010 TARGET_IP

- Qué hace: Este comando verifica si el servicio SMB en el puerto 445 del objetivo
(TARGET_IP) es vulnerable a la vulnerabilidad EternalBlue, explotada en ataques
como WannaCry.

8. External
- Descripción: Scripts que realizan consultas en servicios externos para recopilar
información adicional.
- Uso: Obtener información externa, como geolocalización o detalles de registro
WHOIS, sobre el objetivo.
- Ejemplo: ip-geolocation-geoplugin
- Comando:

nmap --script ip-geolocation-geoplugin TARGET_IP

- Qué hace: Este comando utiliza un servicio externo para determinar la ubicación
geográfica de la dirección IP del objetivo (TARGET_IP).

9. Fuzzer
- Descripción: Scripts que envían datos aleatorios a servicios para detectar fallos de
seguridad o de estabilidad.
- Uso: Probar la robustez de los servicios y detectar posibles errores de
procesamiento de datos.
- Ejemplo: ftp-fuzz
- Comando:

nmap -p 21 --script ftp-fuzz TARGET_IP

- Qué hace: Este comando envía datos aleatorios al puerto FTP (21) del objetivo
(TARGET_IP) para verificar si el servidor FTP responde con fallos.

25
V.02.2024

10. Intrusive
- Descripción: Scripts que son más agresivos y podrían afectar el rendimiento o
estabilidad de los servicios.
- Uso: Recopilar información en detalle sobre los servicios, útil en entornos de
pruebas controladas.
- Ejemplo: smtp-enum-users
- Comando:

nmap -p 25 --script smtp-enum-users TARGET_IP

- Qué hace: Este comando enumera usuarios en un servidor SMTP en el puerto 25


del objetivo (TARGET_IP) utilizando comandos VRFY y EXPN, para identificar
cuentas de correo activas.

11. Malware
- Descripción: Scripts diseñados para detectar infecciones de malware o puertas
traseras en sistemas.
- Uso: Identificar posibles infecciones o vulnerabilidades relacionadas con malware.
- Ejemplo: smb-vuln-conficker
- Comando:

nmap -p 445 --script smb-vuln-conficker TARGET_IP

- Qué hace: Este comando detecta si el sistema Windows en el puerto SMB (445) del
objetivo (TARGET_IP) está infectado o es vulnerable al gusano Conficker.

12. Safe
- Descripción: Scripts que realizan escaneos seguros y no intrusivos, considerados
de bajo riesgo.
- Uso: Recoger información sin afectar los servicios, ideal para auditorías iniciales.
- Ejemplo: http-headers
- Comando:

nmap -p 80 --script http-headers TARGET_IP

26
V.02.2024

- Qué hace: Este comando obtiene y muestra los encabezados HTTP del servidor
web en el puerto 80 del objetivo (TARGET_IP), proporcionando información del
servidor sin alterar su estado.

13. Version
- Descripción: Scripts que identifican versiones exactas de servicios, muy útiles para
detección de vulnerabilidades específicas.
- Uso: Determinar versiones de software y sistemas para análisis de seguridad y
administración de parches.
- Ejemplo: mysql-info
- Comando:

nmap -p 3306 --script mysql-info TARGET_IP

- Qué hace: Este comando extrae información sobre la versión del servidor MySQL en
el puerto 3306 del objetivo (TARGET_IP), útil para detectar vulnerabilidades
específicas.

14. Vuln
- Descripción: Scripts que verifican si el sistema es vulnerable a vulnerabilidades
conocidas, aprovechando bases de datos como CVE.
- Uso: Identificar posibles vulnerabilidades conocidas en los servicios expuestos de un
objetivo.
- Ejemplo: http-vuln-cve2017-5638
- Comando:

nmap -p 80 --script http-vuln-cve2017-5638 TARGET_IP

- Qué hace: Este comando comprueba si el servidor HTTP en el puerto 80 del


objetivo (TARGET_IP) es vulnerable a la falla Apache Struts (CVE-2017-5638), que
permite la ejecución remota de código.

nmap --script categoria1,categoria2,categoria3 IP

nmap --script version,broadcast IP_victima

27
V.02.2024

Actualización de script
Para actualizar la base de datos de scripts podemos lanzar el comando updatedb

nmap --script-updatedb

Traceroute Geolocalización
El argumento --traceroute en Nmap permite a los usuarios realizar un rastreo de la ruta (o
traceroute) hacia el objetivo. Esto muestra la ruta que siguen los paquetes desde el sistema
que ejecuta Nmap hasta el destino, incluyendo los saltos a través de diferentes dispositivos
de red (como enrutadores y switches) intermedios. Este análisis puede ayudar a entender
mejor la topología de la red y detectar posibles puntos de control o cuellos de botella.

Realicemos un traceroute a un dominio o dirección IP de destino y además trazar los datos


de geolocalización para cada salto en el camino. Hace mucho más fácil la correlación de los
nombres de enrutadores en su ruta con las direcciones inversas de DNS .

nmap --traceroute --script [Link] -p 80 [Link]

Extraer los datos EXIF ​de archivos


Los archivos EXIF (archivo de imagen intercambiable), contienen información almacenada
en los que son tipo JPEG, PNG, PDF y muchos más tipos de archivos. Estos datos nos
pueden brindar información interesante tales como marcas de tiempo, información del
dispositivo y coordenadas de GPS.

Vamos combinar nmap con un script http-exif-spider que se puede usar para extraer datos
EXIF ​de los archivos que encontremos en la víctima. Lamentablemente este script no es útil
contra sitios como Instagram, Twitter y Facebook dado que eliminan la metadata.

nmap -p80,443 --script http-exif-spider IP_VICTIMA

Al intentar extraer datos EXIF ​de los archivos, Nmap puede generar un mensaje de error
«Current http cache size exceeds max size». Esto se debe a que Nmap no puede procesar
el archivo porque es demasiado grande y excede el valor máximo de tamaño de archivo
predeterminado. Para arreglar esto usaremos un parámetro adicional [Link]-cache-size y
aumentaremos el valor según sea necesario de la manera:

nmap -p80,443 --script http-exif-spider


--script-args="[Link]-cache-size=99999999" IP_victima

28
V.02.2024

Detectar Huellas Digitales (fingerprint) y saber que Firewall se usa


El script Nmap http-waf-fingerprint está diseñado para ayudarnos a conocer el firewall de la
aplicación web exacta en uso en un servidor web objetivo. También intentará identificar su
tipo y número de versión exacta.

nmap -p80,443 --script http-waf-fingerprint IP_victima

Enumera los directorios utilizados por las aplicaciones y servidores web


populares
Realizar un ataque de fuerza bruta para descubrir aplicaciones web en uso. Prueba más de
2000 rutas en el servidor. El funcionamiento de este script es similar a la herramienta
NIKTO.

nmap ---script http-enum IP_victima

Encontrar los subdominios


nmap ---script dns-brute IP_victima

Detectando malware
Veamos cómo detectar si un host remoto posee algún tipo de malware instalado

nmap -sV --script=http-malware-host IP_victima


O también podemos usar un script de google

nmap -p80 --script http-google-malware IP_victima

29
V.02.2024

Resumen de Opciones NMAP


Uso: nmap [Tipo(s) de Análisis] [Opciones] {especificación de objetivos}
ESPECIFICACIÓN DE OBJETIVO:
Se pueden indicar nombres de sistema, direcciones IP, redes, etc.
Ej: [Link], [Link]/24, [Link]; 10.0.0-255.1-254
-iL <archivo_entrada>: Lee una lista de sistemas/redes del archivo.
-iR <número de sistemas>: Selecciona objetivos al azar
--exclude <sist1[,sist2][,sist3],...>: Excluye ciertos sistemas o redes
--excludefile <fichero_exclusión>: Excluye los sistemas indicados en el fichero
DESCUBRIMIENTO DE HOSTS:
-sL: Sondeo de lista - Simplemente lista los objetivos a analizar
-sP: Sondeo Ping - Sólo determina si el objetivo está vivo
-P0: Asume que todos los objetivos están vivos
-PS/PA/PU [listadepuertos]: Análisis TCP SYN, ACK o UDP de los puertos indicados
-PE/PP/PM: Solicita un análisis ICMP del tipo echo, marca de fecha y máscara de red
-n/-R: No hacer resolución DNS / Siempre resolver [por omisión: a veces]
--dns-servers <serv1[,serv2],...>: Especificar servidores DNS específicos
--system-dns: Utilizar la resolución del sistema operativo
TÉCNICAS DE ANÁLISIS:
-sS/sT/sA/sW/sM: Análisis TCP SYN/Connect()/ACK/Window/Maimon
-sN/sF/sX: Análisis TCP Null, FIN, y Xmas
--scanflags <indicador>: Personalizar los indicadores TCP a utilizar
-sI <sistema zombi[:puerto_sonda]>: Análisis pasivo («Idle», N. del T.)
-sO: Análisis de protocolo IP
-b <servidor ftp rebote>: Análisis por rebote FTP
ESPECIFICACIÓN DE PUERTOS Y ORDEN DE ANÁLISIS:
-p <rango de puertos>: Sólo sondear los puertos indicados
Ej: -p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080
-F: Rápido - Analizar sólo los puertos listados en el archivo nmap-services
-r: Analizar los puertos secuencialmente, no al azar.
DETECCIÓN DE SERVICIO/VERSIÓN:

30
V.02.2024

-sV: Sondear puertos abiertos, para obtener información de servicio/versión


--version-intensity <nivel>: Fijar de 0 (ligero) a 9 (probar todas las sondas)
--version-light: Limitar a las sondas más probables (intensidad 2)
--version-all: Utilizar todas las sondas (intensidad 9)
--version-trace: Presentar actividad detallada del análisis (para depurar)
DETECCIÓN DE SISTEMA OPERATIVO
-O: Activar la detección de sistema operativo (SO)
--osscan-limit: Limitar la detección de SO a objetivos prometedores
--osscan-guess: Adivinar el SO de la forma más agresiva
TEMPORIZADO Y RENDIMIENTO:
-T[0-5]: Seleccionar plantilla de temporizado (los números altos son más rápidos)
--min-hostgroup/max-hostgroup <tamaño>: Paralelizar los sondeos
--min-parallelism/max-parallelism <numsondas>: Paralelización de sondeos
--min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout <msegs>: Indica
el tiempo de ida y vuelta de la sonda
--max-retries <reintentos>: Limita el número máximo de retransmisiones de las
sondas de análisis de puertos
--host-timeout <msegs>: Abandonar un objetivo pasado este tiempo
--scan-delay/--max-scan-delay <msegs>: Ajusta el retraso entre sondas
EVASIÓN Y FALSIFICACIÓN PARA CORTAFUEGOS/IDS:
-f; --mtu <valor>: fragmentar paquetes (opc. con el MTU indicado)
-D <señuelo1,señuelo2[,ME],...>: Disimular el análisis con señuelos
N. del T.: «ME» es «YO» mismo.
-S <Dirección_IP>: Falsificar la dirección IP origen
-e <interfaz>: Utilizar la interfaz indicada
-g/--source-port <numpuerto>: Utilizar el número de puerto dado
--data-length <num>: Agregar datos al azar a los paquetes enviados
--ttl <val>: Fijar el valor del campo time-to-live (TTL) de IP
--spoof-mac <dirección mac/prefijo/nombre de fabricante>: Falsificar la dirección MAC
--badsum: Enviar paquetes con una suma de comprobación TCP/UDP falsa
SALIDA:
-oN/-oX/-oS/-oG <file>: Guardar el sondeo en formato normal, XML,
s|<rIpt kIddi3 (n3n3b4n4n4), y Grepeable (para usar con grep(1), N. del T.),
respectivamente, al archivo indicado.

31
V.02.2024

-oA <nombre_base>: Guardar en los tres formatos principales al mismo tiempo


-v: Aumentar el nivel de mensajes detallados (-vv para aumentar el efecto)
-d[nivel]: Fijar o incrementar el nivel de depuración (Tiene sentido hasta 9)
--packet-trace: Mostrar todos los paquetes enviados y recibidos
--iflist: Mostrar interfaces y rutas (para depurar)
--append-output: Agregar, en vez de sobreescribir, a los archivos indicados con -o.
--resume <archivo>: Retomar un análisis abortado/detenido
--stylesheet <ruta/URL>: Convertir la salida XML a HTML según la hoja de estilo
XSL indicada
--webxml: Referenciar a la hoja de estilo de [Link] para tener un XML más portable
--no-stylesheet: No asociar la salida XML con ninguna hoja de estilos XSL
MISCELÁNEO:
-6: Habilitar análisis IPv6
-A: Habilita la detección de SO y de versión
--datadir <nombreDir>: Indicar la ubicación de los archivos de datos Nmap
personalizados.
--send-eth/--send-ip: Enviar paquetes utilizando tramas Ethernet o paquetes IP
"crudos"
--privileged: Asumir que el usuario tiene todos los privilegios
-V: Muestra el número de versión
-h: Muestra esta página resumen de la ayuda.
EJEMPLOS:
nmap -v -A [Link]
nmap -v -sP [Link]/16 [Link]/8
nmap -v -iR 10000 -P0 -p 80

32

También podría gustarte