Ping SYN (-PS)

Con este ping hacemos uso de la negociación en tres pasos del establecimiento de conexión TCP, recordemos que estamos en la fase de descubrimiento y no necesitamos que Nmap nos realice un reporte de los puertos, no nos interesa saber si el puerto en cuestión está abierto o no, lo que buscamos es cualquier tipo de respuesta por parte del objetivo ya sea con un paquete TCP SYN/ACK (puerto abierto) o TCP RST/ACK(puerto cerrado) para verificar que está activo en la red:

$ nmap -sn -PS25 --send-ip -n 192.168.1.254
  • -sn Desactivamos el escaneo de puertos
  • -PS25 Hacemos uso del Ping SYN y le indicamos que intente realizar una conexión TCP la puerto 25 del objetivo, se pueden indicar más puertos separados por comas, ejemplo: -PS21,23,25,80,443
  • –send-ip Como Nmap detecta que se está realizando un escaneo en la red local, por defecto intenta usar el Ping ARP, con esta opción obligamos a que se haga la operación mediante Ping SYN
  • -n Desactivamos las peticiones inversas DNS para que no se realice ningún tipo de Scan List

Con las opciones anteriores garantizamos el uso de Ping SYN para cualquier objetivo en nuestro segmento de red, cabe aclarar que si el objetivo estuviera fuera de nuestra red local, no necesitaríamos la opción –send-ip ya que obviamente no se podría llegar a el mediante el Ping ARP y Nmap no intentaría usarlo por defecto en ese hipotético caso. Veamos la salida del ejemplo anterior:

1 0.000000  192.168.1.6   192.168.1.254  TCP  74  59602 > smtp [SYN] Seq=0 ...
2 0.021097  192.168.1.254 192.168.1.6    TCP  60  smtp > 59602 [RST, ACK] Seq=1 ...

Primero Nmap envía al objetivo un paquete TCP SYN (primer paso de toda conexión TCP) al puerto 25, como en este caso se encuentra cerrado recibimos un paquete TCP RST negando cualquier intento de conexión al objetivo por este puerto, con este último paquete es suficiente para comprobar que el objetivo está activo en la red. veamos una captura haciendo lo mismo al puerto 80 (que se encuentra abierto):

$ nmap -sn -PS --send-ip -n 192.168.1.254
1 0.000000  192.168.1.6     192.168.1.254   TCP  74  60717 > http [SYN] Seq=0 ...
2 0.015076  192.168.1.254   192.168.1.6     TCP  60  http > 60717 [SYN, ACK] ..
3 0.015100  192.168.1.6     192.168.1.254   TCP  54  60717 > http [ACK] ...
4 0.015168  192.168.1.6     192.168.1.254   TCP  54  60717 > http [RST, ACK]

Como el puerto 80 es la opción por defecto de Ping SYN no hay necesidad de indicárselo. Se puede apreciar en la captura que se realiza una conexión TCP completa (SYN-SYN/ACK-ACK) y luego es terminada de nuestro lado con un paquete TCP RST. Si se hubiera hecho lo mismo pero con el usuario root el comportamiento sería diferente:

# nmap -sn -PS --send-ip -n 192.168.1.254
1 0.000000  192.168.1.6    192.168.1.254  TCP  58  37852 > http [SYN] ...
2 0.051149  192.168.1.254  192.168.1.6    TCP  60  http > 37852 [SYN, ACK] ...
3 0.051190  192.168.1.6    192.168.1.254  TCP  54  37852 > http [RST] ...

Cuando ejecutamos Nmap como el usuario root, la herramienta tiene control total sobre los paquetes que puede generar, es así como se realiza media conexión TCP terminando la negociación (paquete 3) luego de recibir respuesta del objetivo (paquete 2) con el paquete TCP SYN/ACK, siendo de esta manera un poco más sigilosa nuestra actividad en la red.