Hola a tod@s.
Ya con los hosts escaneados, el siguiente paso es saber qué puertos tienen abiertos y sus características. ¡Vamos a ello!
![]() |
Imagen 1. TFG II. Nmap-scan. Escaneo de puertos |
Introducción
En esta demo-explicación, escanearé la Raspbery Pi 2 que me ayudó en mi presentación de las Morteruelo CON2016.
Primero se estudian los hosts en red para saber la dirección IP de la Raspbery.
![]() |
Imagen 2. Resultados estudio de hosts para saber dirección IP de la Raspberry Pi 2 |
Su IP es la 192.168.1.39, estudiemos sus puertos.
Versions (opción 5)
Con esta opción se obtienen los puertos abiertos de los hosts indicados y de cada puerto información como el nombre de la aplicación que corre en él, versión, protocolo del servicio e información extra.
Respecto a la actualización de las tablas 'hosts' y 'puertos', se explica en un apartado más adelante de esta entrada.
![]() |
Imagen 3. Terminal, opción Versions |
![]() |
Imagen 4. Resultados opción Versions |
Con la información obtenida, entre otros datos, se sabe que en la Raspberry Pi está montado un servidor Web en el puerto 80 y un servidor SSH en el 22.
Con la siguiente opción se obtendrán más detalles.
Script (opción 6)
En esta opción se lanzan una serie de scripts por defecto (opción -sC de Nmap), que tal como se indica en la página de Nmap se preocupan de ser rápidos, no causar mucho "ruido", etc.
![]() |
Imagen 5. Terminal, opción Script |
![]() |
Imagen 6. Resultados opción Script |
Se ha conseguido información más detallada de los servicios en los puertos.
Se observa que se ha copiado de nuevo la información de los puertos ya obtenida; como se dijo en la anterior opción, más adelante en esta entrada se explica la actualización de las tablas 'hosts' y 'puertos'.
Vamos a analizar la información obtenida explicando brevemente la teoría detrás de ella.
http-title
Se trata del título de la página mostrada en primer lugar en el servidor web.
En este caso no se ha dado ningún título a la página.
ssh-hostkey
Secure Shell host keys. Se utilizan para verificar la identidad de un servidor ssh (autenticación). Es decir, que el host al que estemos conectados por ssh sea realmente el deseado, nadie suplante su identidad.
En este caso, el servidor es la Raspberry Pi 2.
De este modo se evitan ataques Man-in-the-middle. En estos ataques alguien se sitúa entre nosotros y el servidor al que queramos conectarnos, de modo que puede leer toda la información transmitida.
Los hosts keys están formados por:
- Clave pública: enviada al cliente que se conecta al servidor. Sirve para que todos podamos desencriptar información encriptada por el servidor con su clave privada. Utilizada para leer el mensaje de autenticación enviado por el servidor.
- Clave privada: conocida solo por el servidor y su administrador ya que al utilizarse cifrado de clave pública, quien conozca la clave privada puede cifrar los mensajes de manera que se haga pasar por el servidor.
Indicar también que para verificar que los host keys pertenecen realmente a un servidor se utilizan diferentes técnicas. Una de ellas emplea un hash de fingerprinting único de dicho servidor ssh para cada host key creado.
Las claves son creadas al instalarse y configurarse el servidor, aunque el administrador puede cambiarlas posteriormente.
En los resultados obtenidos en esta demostración, el servidor utiliza los algoritmos de encriptación DSA, RSA y ECDSA de longitud 1024, 2048 y 256 bits respectivamente.
Ports (opción 8)
Hasta ahora las opciones de escaneo de puertos estudiaban todos los que se encontraran abiertos para las direcciones IP indicadas.
Con la siguiente opción se estudia el estado de los puertos indicados para las direcciones IP deseadas.
La actualización de las tablas 'hosts' y 'puertos' se explica en el siguiente apartado.
![]() |
Imagen 7. Terminal, opción Ports |
![]() |
Imagen 8. Resultados opción Ports |
Se ha mandado estudiar 7 puertos, de los cuales solo 2 están abiertos; el resto cerrados. En esta opción se añade a la base de datos todos los puertos estudiados sea cual sea su estado.
Aunque para este ejemplo se ha analizado una sola dirección IP; un caso muy útil es saber en cuántos ordenadores hay abiertos unos puertos determinados, para lo que se analizaría todo el rango de red.
![]() |
Imagen 9. Terminal, opción Ports. Qué hosts poseen ciertos puertos abiertos |
![]() |
Imagen 10. Resultados, opción Ports. Qué hosts poseen ciertos puertos abiertos |
En este ejemplo se observa que ningún host posee el puerto 20 abierto y que dos hosts tienen el puerto 80 abierto.
Actualización tabla hosts y puertos
Tabla hosts
Siempre que se lleva acabo una de las opciones anteriores para el escaneo de puertos, en la tabla 'hosts' se añaden a 'up' los hosts conectados en la red.
Pero no se
actualizan como 'down' ya que si todos los puertos están cerrados, Nmap
no devuelve información del host, pero esto no significa que no esté en
red; para verificar esto hay que usar las opciones de escaneo de hosts.
![]() |
Imagen 11. Hosts up se añaden a la base de datos al escanear los puertos |
Tabla puertos
Respecto a los puertos, se actualiza su estado a 'open', 'closed', 'filtered', etc. según Nmap detecte que admite conexiones, no lo haga o según responda a las peticiones realizadas para saber su estado.
Una definición de cada estado puede consultarse en el enlace del final de esta entrada.
Como se ha podido ver en los ejemplos mostrados; en cada escaneo de puertos, en la tabla 'puertos' de la base de datos la información del escaneo anterior para cada hosts vuelve a copiarse.
Esto se debe a que cada host escaneado con estado 'up' se añade con un nuevo id a la tabla 'hosts' por lo que para recordar la información de los puertos asociados a dicho host, esta se copia pero ahora asociada al nuevo id, al que por supuesto también se añade la nueva información que se escanee.
Generate file ports (opción 9)
Tras realizar el escaneado de la red, de la información almacenada en la base de datos seguramente se quiera conocer aquellas direcciones IP con ciertos puertos abiertos para realizar otras pruebas.
Esta opción generará un archivo .txt por cada puerto que se le indique de modo que en cada archivo se guardarán las direcciones IP con el puerto abierto. Recordar que en todas las opciones anteriores que estudian los puertos, el estado de estos es actualizado, así como añadidos los hosts up.
Los archivos se generan en carpeta 'ports' que se encuentra en la siguiente ruta:
/pentesting-core-master/modules/nmap-scan/model/ports.
El nombre del archivo generado está formado por:
nombreAuditoría_nombreRevisión_númeroDePuerto.txt
![]() |
Imagen 12. Terminal, opción Generate file ports |
![]() |
Imagen 13. Archivos creados |
Podemos ver cómo de estar el puerto cerrado en la base de datos, se nos avisa que el archivo creado estará vacío. Y de ya existir el archivo, se nos pregunta si queremos generar uno nuevo o sobreescribir el ya existente.
Otras opciones
Con esta entrada y la anterior podemos escanear hosts y sus puertos con las opciones del módulo nmap-scan.
Aun así, el modulo ofrece otras, como 'Custom Parameters' en la que el usuario indica las órdenes a Nmap a ejecutar, o la opción 'Get all information for a host' donde se exportará o mostrará por pantalla la información del host deseado.
Estas opciones están en desarrollo por lo que cuando estén disponibles se realizará una entrada sobre ellas.
Conclusión
Como se acaba de comentar, aún no se han explicado todas las opciones que ofrece el módulo nmap-scan; y no olvidar que será ampliado junto con otro módulo para poder buscar exploits de manera cómoda a partir de la información obtenida con el módulo que ha ocupado estas entradas.
Por ahora, ha quedado claro el objetivo y funcionamiento de este módulo y lo que permite llevar acabo.
Por tanto, simplemente terminar agradeciéndoos vuestro interés y ojalá os ayude en vuestros descubrimientos de la red.
¡Un saludo!
Carlos A. Molina
Recursos
Entradas sobre nmap-scan
http://cmoli.blogspot.com.es/2016/03/tfg-i-nmap-scan-instalacion.html
http://cmoli.blogspot.com.es/2016/03/tfg-i-nmap-scan-instalacion.html
Grupo SecuryPi
Github. Módulos
https://github.com/securipy/pentesting-core
https://github.com/securipy/nmap-scan
https://github.com/securipy/exploit-finder
https://github.com/securipy/pentesting-core
https://github.com/securipy/nmap-scan
https://github.com/securipy/exploit-finder
Python y Nmap. Utilización
MorterueloCON 2016
http://cmoli.blogspot.com.es/2016/02/morteruelocon-2016.html
Nmap
- Version
- Script
- http-title
Ssh hosts-keys
Clave pública
(2014), Seguridad perimetral, monitorización y ataques en redes, Ra-Ma
Estado de cada puerto
Letras título
No hay comentarios:
Publicar un comentario