La documentación de nmap indica lo siguiente para las exploraciones NULL
, FIN
y Xmas
:
Cuando los sistemas de escaneo cumplen con este texto RFC, cualquier paquete que no contenga bits SYN, RST o ACK dará como resultado un RST devuelto si el puerto está cerrado y no responde en absoluto si está abierto. Mientras no se incluya ninguno de esos tres bits, cualquier combinación de los otros tres (FIN, PSH y URG) estarán bien. Nmap explota esto con tres tipos de escaneo
Como puede ver, si el puerto está abierto, no se devolverá ninguna respuesta. Esto puede funcionar en escenarios ideales, pero puede estar escaneando a través de un firewall que puede estar bloqueando el acceso a ciertos servicios.
Por ejemplo, tienes una aplicación web en el puerto 80 que debería ser accesible para todos, pero no quieres que todos puedan acceder a tu puerto ssh, así que configura el firewall para eliminar los paquetes con el indicador SYN
para puerto 22 si no es de una IP autorizada y responde RST
En este ejemplo, el uso de una exploración con el indicador SYN
devolverá un RST
, lo que significa que el puerto está cerrado. En cambio, si usamos un escaneo de NULL
, por ejemplo, que no tiene el indicador SYN
, el firewall no lo eliminará y devolverá RST
si el puerto está cerrado o nada si está abierto.
¿Cómo decido cuándo usar los análisis XMAS o FIN cuando ambos tienen la misma respuesta y las mismas limitaciones?
En la mayoría de los casos, esos escaneos deberían funcionar de la misma manera, la única razón que se me ocurre para elegir uno sobre otro es eludir ciertos filtros de firewall. En el ejemplo anterior, el firewall también puede eliminar paquetes de un escaneo de NULL
ya que no hay marcas en él, por lo tanto, interpretarlo como un paquete corrupto. En este caso, debe usar un escaneo que tenga algunos indicadores pero que no contenga el indicador SYN
, como FIN
o Xmas
scans
Tenga en cuenta que no podrá saber si el puerto está realmente abierto si no recibe respuesta, ya que también es posible que el firewall descarte la respuesta RST
cuando un puerto está cerrado, por lo tanto, lo malinterpreta como abierto cuando está no. Para que este tipo de análisis funcione correctamente, debe tener un conocimiento previo de cómo el servidor responde a ese tipo de análisis utilizando un puerto para el que conoce el estado exacto (en nuestro ejemplo podría ser el puerto 80) y analizar las diferentes respuestas para cada tipo de escaneo