Escaneo de puertos

recon & enum

La enumeración de puertos es una tarea crucial en las pruebas de penetración y seguridad de redes ya que nos permite enumerar los servicios expuestos de una maquina para poder vulnerar la misma, vamos a ver varios métodos para enumerar puertos abiertos en una maquina

Nmap

Nmap, o Network Mapper, es una herramienta de código abierto que permite escanear redes y detectar vulnerabilidades. Es una de las herramientas más usadas en ciberseguridad.

Haz click aquí para ver la guia completa de nmap

si queremos enumerar los puertos abiertos de una maquina podemos usar las siguiente metodología :

nmap -p- -sS -vvv --open --min-rate 5000 introduce.direccion.ip.aqui

# -p- : escanear todos los puertos
# -sS : Stealth Scan (silencioso)
# -vvv : verbose
# --open : solo mostrar los puertos abiertos
# --min-rate : minimo de X paquetes por segundos
# luego del primer escaneo, con los puertos abiertos hacemos el siguiente comando :

nmap -sCV -p 12,23 
# en este ejemplo el 12 y 23
# este sera un escaneo mas avanzado y te dara mas información 

Enumeración de puertos abiertos con /dev/tcp

Para realizar la enumeración de puertos utilizando /dev/tcp en Bash, es posible crear un script que realice una conexión a cada puerto de interés y compruebe si el puerto está abierto o cerrado en función de si se puede enviar o recibir datos. Una forma de hacer esto es mediante el uso de comandos como “echo” o “cat“, aplicando redireccionamientos al /dev/tcp. El código de estado devuelto por el comando se puede utilizar para determinar si el puerto está abierto o cerrado.

Aunque esta alternativa puede ser menos precisa y más lenta que el uso de herramientas especializadas como Nmap, es una opción interesante y viable para aquellos que buscan una solución rápida y sencilla para la enumeración de puertos en sistemas Unix. Además, este enfoque puede proporcionar una mejor comprensión de cómo funcionan los descriptores de archivo en los sistemas Unix y cómo se pueden utilizar para realizar tareas de red.

También es gracias a los descriptores de archivo en Linux, que es como se hace la "petición"

#!/bin/bash

function ctrl_c(){
	echo -e "\n\n[!] Saliendo...\n\n"
	tpu cnorm; exit 1
}

#Ctrl_C
trap ctrl_c SIGINT

declare -a ports=( $(seq 1 65535) )

function checkPort(){
	exec 3<> /dev/tcp/$1/$2 2>/dev/null

	if [ $? -eq 0 ]; then
		echo "[+] Host : $1 - Port $2 (OPEN)"
	fi 

	exec 3<&-
	exec 3<&-
}

tput civis

if [ $1 ]; then

	for port in ${ports[@]}; do
	
		checkPort $1 $port &
	done 

else
echo -e "\n\n[!] Uso : $0 <ip-address>\n"

fi

wait
tput cnorm

Enumeración de puertos abiertos internamente

Hay que veces cuando lanzamos escaneos por ejemplo, de nmap no nos va a listar todos los puertos abiertos de la maquina y es muy común, esto pasa gracias a firewalls y reglas que estén configuradas en la red, dificultando un poco el reconocimiento preciso de los puertos de la maquina. Si ya hemos accedido a la maquina podremos enumerar de otras maneras los puertos que estén abiertos internamente con varios comandos y herramientas.

El uso de estas técnicas puede ayudarnos a explotar vulnerabilidades preferiblemente para escalar privilegios y completar el reconocimiento a la maquina.

Técnicas que usaremos :

  • netstat

  • ss

  • /proc/net/tcp

  • nmap

Enumeración


# Todos estos comandos nos ayudaran a enumerar la informacion que queremos

netstat -nat
ss -nltp
cat /proc/net/tcp
# este archivo los tendra en hexadecimal por lo que tendremos que hacer un decode
nmap -p- --open 127.0.0.1
echo '' > /dev/tcp/127.0.0.1/puerto_a_revisar # mejor hacer este automatico con un script en bash

# podemos utilizar tambien las demas tecnicas de reconocimiento convencinales pero ya dentro de la maquina

Masscan

esta herramienta se considera la mas rápida para la enumeracion de puertos abiertos

github

la guia de uso esta en el repositorio.

Last updated