====== NMAP ======
===== Escaneos básicos =====
**Escaneos básicos con nmap**
Si queremos hacer un escaneo básico de los puertos de una máquina podemos
hacerlo de esta forma:
{{pasted_image_20230131125255.png|}}
**Escanear 2 máquinas a la vez**
También podemos hacer un escaneo de dos máquinas a la vez con nmap:
{{pasted_image_20230131125457.png|}}
**Escanear todo el rango de red**
O también podemos hacer un escaneo completo de nuestra red privada, por lo que
detectaremos todos los equipos conectados:
{{pasted_image_20230131125710.png|}}
**Descubrir hosts con nmap**
Para descubrir hosts con nmap lo haremos así:
nmap -sn 192.168.0.0/24
{{pasted_image_20230726112635.png|}}
**Enumerar rango de puertos**
También podría enumerar todos los puertos de una máquina o sólo un rango de
ellos. Por ejemplo podría enumerar todos de esta forma:
{{pasted_image_20230412010427.png|}}
Aunque si ponemos simplemente -p- también estaríamos enumerando todo el rango de
puertos:
{{pasted_image_20230412010648.png|}}
O también podría analizar sólo un rango de ellos, por ejemplo analizar sólo los
100 primeros:
{{pasted_image_20230412010610.png|}}
También podemos enumerar los 500, 100 o el número que queramos del top de los
puertos más comunes, por tanto lo haríamos de esta forma:
{{pasted_image_20230412010958.png|}}
**Escaneos de nmap por udp (Cuando por TCP no nos encuentra lo que queremos)**
Lo haríamos con el parámetro sU de esta manera escaneando los 100 puertos más
comunes:
{{pasted_image_20221217112712.png|}}
Y este sería el resultado:
{{pasted_image_20221217112719.png|}}
**Escaneos de nmap a una dirección ipv6**
Para hacer un escaneo de puertos a una dirección IPv6 con nmap lo hacemos usando
el parámetro -6 de la siguiente forma:
nmap -p- -sS -sC -sV --min-rate 5000 -n -vvv -Pn -6 fe80::da3a:ddff:fe80:f61c%eth0
{{pasted_image_20240107202428.png|}}
===== Parámetros de nmap =====
**Opción sP** (Sondeo de Ping)
Esto sirve para detectar equipos conectados a mi red utilizando un ping:
{{pasted_image_20230131130123.png|}}
**Opción -sn**
Este parámetro sirve para detectar equipos encendidos dentro de nuestra web, es
algo similar al arp-scan:
{{pasted_image_20230412014503.png|}}
**Opción -sS** (TCP Syn)
Con esta opción podremos hacer un escaneo más sigiloso sin dejar rastro en la
máquina objetivo:
{{pasted_image_20230131130250.png|}}
**Opción -T (Plantillas de temporizado)**
El parámetro -T de nmap sirve para aplicar una plantilla para hacer más rápidos
o no los escaneos; y tenemos hasta 5 posibles plantillas, siendo la 5 la más
rápida.
{{pasted_image_20230412011733.png|}}
**Opción -vvv (Triple verbose)**
Esto sirve para que a medida que encuentre algo, nos lo vaya reportando al mismo
tiempo:
{{pasted_image_20230412011332.png|}}
**Sondeo UDP**
Para hacer escaneos por UDP utilizamos la opción -sU:
{{pasted_image_20230131130410.png|}}
**Sondeo TCP ACK** (Detectar tipo de Firewall con nmap)
Con estas opciones podemos detectar el tipo de firewall:
{{pasted_image_20230131130546.png|}}
**SCRIPTS DE NMAP**
Con el script Default ejecutamos los scripts de nmap por defecto para obtener
información de las máquinas objetivo:
{{pasted_image_20230131170117.png|}}
Por otra parte, tenemos el script vuln podemos brindar información sobre las
vulnerabilidades de la víctima:
{{pasted_image_20230131170305.png|}}
{{pasted_image_20230131170322.png|}}
También podemos ejecutar el script all para ejecutar todos los scripts de nmap:
{{pasted_image_20230131170537.png|}}
Y con el script Auth podemos comprobar si existen contraseñas vacías o por
defecto en el sistema:
{{pasted_image_20230131170621.png|}}
También podemos tener un fuzzer web en nmap con el script HTTP-Enum:
{{pasted_image_20230131170649.png|}}
Otro script interesante es para hacer fuerza bruta FTP con nmap de esta forma:
{{pasted_image_20230131170758.png|}}
{{pasted_image_20230131170823.png|}}
También podemos hacer ataques de fuerza bruta con SSH-Brute:
{{pasted_image_20230131170857.png|}}
{{pasted_image_20230131170914.png|}}
Para detectar vulnerabilidades en el firewall podemos utilizar este parámetro:
{{pasted_image_20230131171105.png|}}
===== Guardar tráfico de nmap en fichero .cap con tcpdump =====
Podemos utilizar tcpdump para guardar un determinado tráfico que corre por una
interfaz dentro de un fichero con extensión .cap
Lo haríamos de la siguiente forma, donde primero nos ponemos en escucha con
tcpdump guardando el tráfico en un fichero y por la interfaz correspondiente:
{{pasted_image_20230412012426.png|}}
Y ahora mientras se queda en escucha, vamos a probar por ejemplo en lanzarnos a
nosotros mismos un escaneo por el puerto 22 por ejemplo:
{{pasted_image_20230412012708.png|}}
Se hace el reporte:
{{pasted_image_20230412012729.png|}}
Y ya tenemos el fichero .cap con el tráfico interceptado:
{{pasted_image_20230412012801.png|}}
Ahora lanzamos wireshark con la captura:
{{pasted_image_20230412012839.png|}}
{{pasted_image_20230412012855.png|}}
===== Escaneos silenciosos con nmap =====
Para hacer un escaneo de nmap lo más silencioso posible, puede usar la opción
"-sS" para realizar un escaneo de "SYN Stealth" en lugar del escaneo de TCP
completo. Además, puede utilizar la opción "-T2" para establecer la velocidad de
escaneo en un nivel bajo y reducir así el ruido generado por el escaneo en la
red.
El siguiente comando de ejemplo utiliza estas opciones para realizar un escaneo
de nmap lo más silencioso posible:
nmap -sS -T2 -Pn
Donde:
* "-sS" indica que se realizará un escaneo de "SYN Stealth".
* "-T2" establece la velocidad de escaneo en un nivel bajo.
* "-Pn" indica que no se realice detección de hosts, lo que reduce aún más el ruido generado por el escaneo.
===== Nmap en windows (con zenmap) =====
Así sería el asistente de nmap para Windows, el cual se llama zenmap y tiene
interfaz gráfica:
{{pasted_image_20230217135652.png|}}
También podemos crear un perfil para tener guardado una máquina objetivo con los
mismos parámetros de siempre:
{{pasted_image_20230218081525.png|}}
{{pasted_image_20230218081748.png|}}
Y ya tengo este nuevo perfil con el objetivo y parámetros previamente definidos:
{{pasted_image_20230218081832.png|}}
===== Evasión de firewall con nmap =====
Un firewall es un sistema que se encarga de controlar las conexiones entrantes y
salientes de una red determinada. Incluso también es posible que un puerto se
encuentre como filtrado, lo que significa que hay algo que no está impidiendo
conocer con exactitud ese puerto, tal y como nos explican en la páginas man de
nmap:
{{pasted_image_20230412193057.png|}}
Incluso también, dentro de las páginas man de nmap, tenemos instrucciones para
hacer escaneos más silenciosos para evadir los firewall:
{{pasted_image_20230412193242.png|}}
**PARÁMETRO -f**
Con el parámetro -f podemos fragmentar los paquetes a la hora de hacer el
escaneo, por lo que de esta forma es posible que los puertos que se encuentren
filtrados podamos llegar a verlos:
{{pasted_image_20230412193727.png|}}
**Parámetro --script-mpu**
El parámetro mpu sirve para ajustar el tamaño máximo de paquete sin fragmentar
(MPU) para los paquetes enviados durante las pruebas de detección de firewall.
De esta forma podemos evadir firewalls que tengan algún tipo de tope para la
detección de este tipo de paquetes. Es importante recalcar que se debe poner
siempre un número que sea múltiplo de 8, por ejemplo el 8, 16, etc...
{{pasted_image_20230412194004.png|}}
**Parámetro -D (decoy)**
Esto sirve para confundir el firewall. Es decir, sirve para indicar otra
dirección IP y hacerle creer al firewall que ademas de lanzar nosotros los
paquetes, también lo haga otra dirección IP; y por eso en las instrucciones nos
pone que esto sirve para disimular el análisis con señuelos:
{{pasted_image_20230412194342.png|}}
Si guardamos esto en un fichero .cap para analizarlo con wireshark, veremos que
en este escaneo además de nuestra IP también se habrá enviado otros paquetes
desde la IP 192.168.0.232 que hemos proporcionado como señuelo:
{{pasted_image_20230412194600.png|}}
{{pasted_image_20230412194623.png|}}
[[:computing:hacking:generico:0_Consideraciones_Previas|0 - Consideraciones Previas]]
(TCPDUMP PARA INTERCEPTAR PAQUETES DENTRO DE LA CONEXIÓN)
**Source port (Regular el origen de los paquetes)**
Cuando hacemos un escaneo con nmap se emplea un puerto aleatorio de origen para
hacer el escaneo y la respuesta vuelve a entrar por otro puerto aleatorio, tal y
como podemos ver en el ejemplo de antes, que se utilizó el puerto 55043:
{{pasted_image_20230413074240.png|}}
Es posible que los firewalls tengan una lista blanca de los paquetes que
procedan de los puertos más frecuentes en lugar de este tipo de puertos más
aleatorios. Lo haríamos de esta forma por ejemplo para indicar que nuestro
escaneo procede del puerto 53:
{{pasted_image_20230413074738.png|}}
Ahora si examinamos esto con ''wireshark'' como antes, veremos que el origen del
tráfico ya no procede de un puerto random, sino del puerto 53:
{{pasted_image_20230413074849.png|}}
**Data length (Modificar la longitud del paquete enviado)**
Es posible que un firewall cuente con restricciones dependiendo del tamaño de
paquete. Por lo que podemos modificar este tamaño para engañar al firewall:
{{pasted_image_20230413075148.png|}}
Este va a ser el tamaño mínimo que va a tener el paquete, pero le podemos sumar
cantidades adicionales de tamaño para estos paquetes con el parámetro --data-length:
{{pasted_image_20230413075434.png|}}
Y en wireshark si analizamos este fichero .cap vemos que el tamaño de los
paquetes es mayor en un 20:
{{pasted_image_20230413075730.png|}}
**Cambiar dirección mac en nmap**
Con la opción --spoof-mac podremos cambiar la MAC:
{{pasted_image_20230131165550.png|}}
===== Scripts de nmap =====
El parámetro "--script" de Nmap se utiliza para especificar un conjunto de
scripts que se ejecutarán durante un escaneo.
El parámetro "--script" puede tomar un solo script como argumento, o puede
especificar varios scripts separados por comas. También se pueden utilizar
comodines para seleccionar múltiples scripts a la vez. Por ejemplo,
''--script=http-*'' ejecutará todos los scripts relacionados con el protocolo HTTP.
El uso de scripts puede aumentar significativamente la eficacia de un escaneo de
Nmap, ya que permite a los usuarios detectar vulnerabilidades y recopilar
información que de otra manera sería difícil de obtener.
Nmap cuenta con scripts para automatizar ciertas partes del reconocimiento; y
para ello podemos utilizar el parámetro -sC para lanzar ciertos scripts de nmap.
Por lo que si además lo juntamos con el parámetro -sV obtendremos la versión de
los servicios del puerto:
{{pasted_image_20230413081220.png|}}
También podemos lanzar un script en concreto, por ejemplo el script vuln para
detectar vulnerabilidades de un puerto en concreto:
{{pasted_image_20230413081456.png|}}
Aunque por sí solo el script vuln es muy intrusivo, por lo que podemos lanzar el
script safe junto con el vuln:
{{pasted_image_20230413081949.png|}}
También tenemos otro script para hacer fuzzing web muy sencillo con el script
llamado http-enum:
{{pasted_image_20230413082307.png|}}
===== Como hacer un escaneo de nmap mucho más rápido y eficiente =====
* Ponemos triple verbose para que se nos vaya mostrando los resultados mientras analiza.
* Con -n evitamos la resolución DNS
* Con min rate también aceleramos.
* Con el comando -Pn indicamos que no realice una comprobación de ping antes de realizar el escaneo de puertos.
* Con -oG lo podemos exportar.
nmap -p- --open -sS -sC -sV --min-rate 5000 -vvv -n -Pn 10.10.11.191 -oN escaneo
===== Script para hacer fuzzing =====
Podemos hacer fuzzing con un script de nmap, donde vamos a hacerlo sobre el
puerto 80 de la [[MAQUINA OVERPASS (Obtener id_rsa modificando cookies en web,
ssh2john para cracking de ir_rsa y escalada privilegios permisos suid con
exploit de pkexec)]] de tryhackme para detectar directorios web:
nmap --script http-enum -p80 10.10.186.249 -vvv
{{pasted_image_20230501191549.png|}}
===== Script vuln para detectar vulnerabilidades =====
Podemos mirar si esta máquina [[:computing:hacking:CTF:HackTheBox:MAQUINA_BLUE|Máquina blue]]
de tryhackme es vulnerable a alguna vulnerabilidad; y vemos que sí lo es a
eternalblue:
{{pasted_image_20230427115145.png|}}
Por tanto vamos a usar metasploit para ganar acceso al sistema explotando esta
vulnerabilidad utilizando el siguiente exploit:
{{pasted_image_20230427120812.png|}}
Realizamos las configuraciones básicas:
{{pasted_image_20230427120834.png|}}
Configuramos el payload correspondiente, ya que el que viene por defecto da error:
{{pasted_image_20230427120914.png|}}
Y si ejecutamos el comando run ya estaríamos dentro:
{{pasted_image_20230427120933.png|}}
===== Script de nmap para ataques de fuerza bruta ssh =====
Para hacer un ataque de fuerza bruta al puerto ssh, podemos hacerlo con el
siguiente parámetro de nmap:
nmap --script ssh-brute 192.168.0.25
Y nos realiza el ataque probando usuarios y contraseñas:
{{pasted_image_20230501193242.png|}}
Pero en caso de conocer el nombre de usuario, que por ejemplo es mario, y querer
encontrar sólo la contraseña, lo haríamos de la siguiente forma:
nmap -p 22 --script ssh-brute --script-args userdb='usuario.txt',passdb='rockyou.txt' 192.168.0.25
Y vemos que ahora comprueba las distintas contraseñas para el usuario mario:
{{pasted_image_20230501194124.png|}}
===== Script enumerar smb =====
Podemos usar este script para ver vulnerabilidades de smb:
nmap -p445 --script smb-protocols 192.168.0.48
{{pasted_image_20230727142007.png|}}
También podemos saber la seguridad si permite iniciar sesión como invitado o no
con este otro script, de tal forma que podríamos entrar sin proporcionar
contraseña:
nmap -p445 --script smb-security-mode 192.168.0.48
{{pasted_image_20230727142202.png|}}
===== Listar recursos compartidos smb =====
Podemos también listar recursos compartidos con nmap usando el siguiente script:
nmap -p445 --script smb-enum-shares 192.168.0.48
{{pasted_image_20230727150238.png|}}