Tag Archives: nmap

Ejecutando nmap con Python

nmapNmap es probablemente una de las herramientas más conocidas y utilizadas en el mundo del pentesting y no es para menos, ya que se trata de un escaner que no solamente permite encontrar puertos abiertos en un máquina o segmento de red, sino que también permite ejecutar scripts NSE (Nmap Scripting Engine) para filtrar información o detectar vulnerabilidades sobre el objetivo.

Algunas de las características avanzadas que incluye Nmap y que son igualmente útiles para pentesters, administradores de sistemas y atacantes, se listan a continuación:

  • Implementación de técnicas de evasión de IDS/IPS y Firewalls
  • Permite ejecutar varias técnicas de escaneo, entre las que se incluyen escaneos del tipo XMAS, Null, Fin, Stealth, entre muchos otros.
  • Permite la fragmentación de paquetes a la hora de realizar el escaneo. La finalidad de esta técnica es la de dificultar la identificación del escaneo por parte de mecanismos como IDS o IPS
  • Generación aleatoria de hosts y señuelos como origen de los paquetes
  • Ejecución de scripts NSE, así como la posibilidad de crear scripts personalizados utilizando lenguaje LUA.
  • Capacidad de ejecutar “Idle scans” que permiten utilizar un host cuyo manejo del numero de secuencia de los paquetes IP es predecible. (ver: TCP Idle Scan)
  • Capacidad de controlar la frecuencia en la que se envían los paquetes de datos al sistema objetivo. De esta forma es posible controlar cada cuanto se envían paquetes para la detección del estado de un puerto.

Estas son tan solo algunas de las características que convierten a Nmap en una herramienta que se debe de encontrar en el arsenal de cualquier pentester. Sin embargo, en ocasiones es muy útil poder automatizar su uso por medio de scripts o rutinas externas. En el caso de Python, es posible hacerlo como con cualquier otro ejecutable, se puede crear un proceso utilizando la utilidad subprocess de Python y ejecutar Nmap con los argumentos adecuados. No obstante, hacerlo de esta forma puede resultar ineficiente, ya que seria necesario parsear los contenidos del canal estándar de salida (stdout) para que la información retornada por Nmap pueda ser útil desde un script. Una solución mucho más adecuada para este propósito y desde luego mucho más elegante, es utilizando una librería que se encargue de estos detalles y devuelva una estructura de datos consistente con los resultados devueltos por Nmap. Una de las mejores alternativas es python-nmap.

Utilizando Python-nmap

Python-nmap es una librería que se encuentra en desarrollo continuo y que a la fecha de escribir este documento, soporta todas las características disponibles en la ultima versión de Nmap. Existen dos versiones que permiten operar con Python 3.x y Python 2.x, lo cual es importante tenerlo en cuenta a la hora de instalar dicha librería. Por otro lado, con esta librería es posible ejecutar escaneos de forma síncrona o asíncrona. Un escaneo síncrono, consiste simplemente en que python-nmap bloqueará el hilo de ejecución principal hasta que el escaneo finalice su ejecución. Un escaneo asíncrono ejecuta el escaneo Nmap en un nuevo hilo de ejecución y permite que el hilo principal siga ejecutándose. En un escaneo asíncrono, se permite la definición de una función de callback que será invocada de forma automática cuando se obtenga un resultado sobre alguno de los puertos analizados.

Para instalar la librería, se sigue el mismo procedimiento que muchas de las librerías disponibles para Python, consiste simplemente en ejecutar el script setup.py con el argumento install el cual se encuentra ubicado en el directorio raíz del paquete descargado.

El uso básico de la librería es por medio de la clase PortScanner. Dicha clase implementa todas las funciones necesarias para ejecutar un escaneo y recuperar la información retornada por Nmap.

Desde el interprete de Python, se ha creado un objeto del tipo PortScanner y luego se ha ejecutado un escaneo contra la máquina local en los puertos 22, 25, 80 y 443. Las funciones scaninfo, command_line y all_host devuelven información general sobre el escaneo ejecutado, el comando Nmap ejecutado y todos los hosts que han sido analizados en el escaneo.

Como se puede apreciar, es posible recorrer el diccionario que contiene los resultados utilizando como claves, el host analizado, el protocolo y el puerto analizado. Se trata de un diccionario anidado y como tal, puede ser recorrido utilizando instrucciones y funciones estándar del lenguaje.
Por otro lado, se trata de una librería que permite ejecutar Nmap de forma personalizada, del mismo modo que lo haría un pentester o administrador de sistemas desde linea de comandos, especificando los argumentos necesarios para la ejecución del escaneo.

Con el parámetro “arguments” es posible especificar las opciones que recibirá Nmap para ejecutar el escaneo contra los objetivos definidos. Con esto, es posible controlar mucho mejor el proceso de escaneo.

Finalmente, tal y como se comentaba anteriormente, es posible ejecutar un escaneo asíncrono utilizando python-nmap tal y como se detalla a continuación.

Para implementar un escaneo asíncrono, se debe utilizar la clase PortScannerAsync la cual es exactamente igual a la clase PortScanner con la diferencia de que incluye un argumento adicional que permite definir una función de callback y cuenta con algunas funciones adicionales para controlar el proceso de escaneo en el caso de ser necesario.

Python-nmap es una muy buena solución que permite implementar las funcionalidades completas de Nmap desde cualquier script en python. Se trata desde luego, de una utilidad que viene muy bien a cualquier proyecto relacionado con la seguridad informática o para el uso de un pentester profesional.

Escaneo de Puertos – Tutorial Nmap

Este es uno de tantos artículos que publicaré que trataran el tema de ethical hacking/pruebas de penetración, uno de los aspectos importantes de estas actividades es el escaneo de puertos.

En este articulo hablaremos sobre los aspectos prácticos de Nmap, la forma de realizar un escaneo  rápido para saber que puertos están abiertos y que servicios corriendo en la maquina objetivo.

Nmap fue originalmente una herramienta de linea de comandos que fue desarrollada únicamente para sistemas operativos basados en UNIX/Linux pero actualmente cuenta con una versión disponible para Windows y es muy fácil de utilizar.

Podemos descargar el instalador de Nmap para Windows o desde una terminal de Linux (Linux basados en Debian) simplemente tipear:

skywalker@skywalker:~$ sudo apt-get install nmap

Ok!, ahora vamos a empezar con un escaneo simple, para obtener ayuda sobre nmap

skywalker@skywalker:~$ nmap –help

Para un escaneo  rápido y simple

skywalker@skywalker:~$ nmap 192.168.1.1

Starting Nmap 4.53 ( http://insecure.org ) at 2011-12-21 15:36 ART

Interesting ports on 192.168.1.1:

Not shown: 1710 closed ports

PORT STATE SERVICE

23/tcp open telnet

53/tcp open domain

80/tcp open http

443/tcp open https

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

Es este un escaneo simple? Si, es un simple escaneo que le permitirá saber sobre los puertos abiertos en cualquier maquina, ahora si quiere escanear una red completa lo que tiene que tipear esto con la subred:

skywalker@skywalker:~$ nmap 192.168.1./24

o

skywalker@skywalker:~$ nmap 192.168.1.*

 

Nmap – Opciones Interesantes

  • -f fragmenta los paquetes
  • -D lanza un señuelo para ocultar los escaneos
  • -I IDENT Scan – encuentra los propietarios de los procesos (en Sistemas Unix)
  • -b FTP Bounce

Tipos de Escaneo de Puertos

  • TCP Connect scan
  • TCP SYN scan
  • TCP FIN scan
  • TCP Xmas Tree scan (FIN, URG, and PUSH)
  • TCP Null scan
  • TCP ACK scan
  • UDP scan

Nmap trabaja en los tipos de escaneos  básicos como ser:

  • TCP connect() scanning
  • TCP SYN scanning
  • TCP FIN scanning
  • Fragmentation scanning
  • TCP reverse ident scanning
  • FTP bounce attack
  • UDP ICMP port unreachable scanning
  • UDP recvfrom() and write() scanning
  • ICMP echo scanning

 

La detección del Sistema Operativo o OS fingerprinting es una parte importante de un test de penetración ya que nos permite saber sobre que sistema operativo esta corriendo el equipo objetivo, para poder lanzar un exploit apropiado para este sistema. Nmap ofrece una opción que nos permite saber que sistema operativo esta corriendo, aunque también se puede averiguar mediante el uso de la técnica de “banner grabbing”. Utilizamos -O para identificar el sistema operativo:

skywalker@skywalker:~$ nmap -O 192.168.1.5

Nota: Para utilizar OS fingerprinting se requieren privilegios “root”

Para finalizar les dejo un Cheatsheet de Nmap en Español: Descargar

Continuara….

 

 

.