Azure Notebooks para Red Teams: Escaneo de Puertos

Una vez que tenemos identificado uno o varios servidores de nuestro objetivo, uno de los pasos más habituales es escanear el servidor buscando puertos que puedan estar abiertos para encontrar servicios que se están ejecutando en esa máquina.

En este caso vamos a usar un script muy básico que vamos a escribir nosotros mismos en nuestro Azure Notebook para que nos diga los puertos que están abiertos en un servidor. El script se puede descargar desde:

https://raw.githubusercontent.com/pacosepulveda/MeetupRedTeams/master/portscan.py

Tenemos una máquina virtual en Azure con WordPress instalado para hacer las pruebas:

En esta máquina tenemos algunos usuarios. En este post veremos cómo podemos escanear los puertos que están abiertos y en otro post veremos cómo enumerar los usuarios sin necesidad de tener las credenciales de acceso al panel de administración de WordPress.

Creamos nuestro Notebook en Azure con un kernel Python 3.6 y añadimos el siguiente código:

En este script tenemos 3 parámetros:

  • Host: indicamos la url o la IP de la máquina a escanear,
  • Puerto_inicial: Definimos un rango de puertos a escanear, este será el primer puerto del rango.
  • Pueto_final: Último puerto del rango a escanear.

Para este ejemplo usaremos el rango 20-80. Definir un rango muy grande puede hacer que superemos el límite de threads permitido (200) y que nos salga error. Los puertos que vamos a escanear son TCP:

Se definen los arrays “puertos_abiertos” y “puertos_cerrados”:

Donde se guardarán los puertos cerrados y abiertos que se vayan escaneando.

A continuación, creamos la función “scan” usando sockets y con un timeout de 3 segundos para que no tarde mucho el tiempo de escaneo. Si el puerto está abierto, nos mostrará un mensaje y se almacenará este puerto en “puertos_abiertos”. Si el puerto está cerrado, no mostrará ningún mensaje, aunque es sencillo mostrarlo, y se almacenará en “puertos_cerrados”.

Por último, abrimos hilos para comprobar el estado de los puertos y mostramos un mensaje al final resumiendo los puertos que ha encontrado abiertos:

Y aquí tenemos el resultado final:

Sabíamos que la máquina tenía WordPress, por lo que es normal que el puerto 80 estuviese abierto, pero también lo está el puerto 22 (SSH).