Ya hemos visto en los cinco artículos dedicados a Scapy. Manipulación avanzada e interactiva de paquetes. casi todo lo relacionado con esta herramienta. En esta ocasión vamos a ir aplicando los conocimientos adquiridos a casos prácticos como el escaneo de puertos y, además, veremos los resultados en gráficas proporcionadas por las herramientas ya estudiadas como, en este caso, Afterglow.

Usaremos algunos métodos ya estudiados para el formateo de salida de datos con Scapy y añadiremos métodos nuevos como haslayer() y getlayer().
Índice de artículos dedicados a Scapy: https://seguridadyredes.wordpress.com/post/2010/07/02/scapy-manipulacion-avanzada-e-interactiva-de-paquetes
NOTA: Veremos como usar en la práctica algunos conceptos aprendidos con Scapy. No se trata de un artículo exahustivo sobre port scanning. Veremos algunas técnicas solo para ilustrar los ejemplos prácticos.
.
Sobre los Flags o banderas TCP. Usaremos términos tales como SYN, ACK, RST, etc. Todo esto lo vimos en Análisis capturas tráfico de Red. Interpretacion segmento TCP (II). Establecimento conexión TCP. Concretamente:
URG. El campo Puntero de urgencia contiene información válida.
ACK. El campo Número de acuse de recibo contiene información válida, es decir, el segmento actual lleva un ACK. Hay que observar que un mismo segmento puede transportar los datos de un sentido y las confirmaciones del otro sentido de la comunicación.
PSH. La aplicación ha solicitado una operación push(enviar los datos existentes en la memoria temporal sin esperar a completar el segmento).
RST. Interrupción de la conexión actual.
SYN. Sincronización de los números de secuencia. Se utiliza al crear una conexión para indicar al otro extremo cual va a ser el primer número de secuencia con el que va a comenzar a transmitir (veremos que no tiene porqué ser el cero).
FIN. Indica al otro extremo que la aplicación ya no tiene más datos para enviar. Se utiliza para solicitar el cierre de la conexión actual.
.
Scapy. Escaneo de puertos.
Es escaneo de puerto o port scanning es una técnica para la obtención activa de información de una red. Puede ser indicio de un ataque posterior, pero también, una técnica para la obtención lícita de información y auditoría.
ACK Scan.
No es exactamente una comprobación de puertos abiertos. Vamos a enviar un paquete con el flag ACK activado al host 192.168.1.233.
NOTA: Podemos usar también la notación para un scan de red 192.168.1.0/24 .
ans,unans = sr(IP(dst=192.168.1.233)/TCP(dport=[80,23],flags=»A»))
Como veis hemos enviado dos paquetes ACK a los puertos 80 y 23. En ambos casos la respuesta es un RST (restet). Esto significa que estos puertos no están filtrados.Tanto si lo puertos están abiertos como si están cerrados recibiremos el RST ya que se intepreta como paquete erróneo, no hubo establecimiento de conexión previo. Ahora bien, de no haber recibido respuesta, podemos preveer que el puerto está filtrado:
ans,unans = sr(IP(dst=192.168.x.xxx)/TCP(dport=[143,80],flags=»A»))
Seguimos aplicando lo aprendido con Scapy. Vamos a mostrar los resultados obtenidos:
el resultado:
En el primer caso y con Afterglow:
.
TCP SYN Scan.
En este caso, enviamos un paquete o varios con el flag SYN activado. Sería como simular un establecimiento de conexión. El host remoto puede responder con un paquete con SYN+ACK activado con lo que el puerto está abierto o con RST+ACK con lo que el puerto estára cerrado.
Lo vemos:
Aquí podemos observar que:
- Usamos la función RandonShort() en puerto de origen para generar puertos aleatorios.
- Formateamos para ver los flags de los paquetes de respuesta. Tenemos dos puertos (80 y 143) abiertos y los otros dos cerrados (RST+ACK).

- 192.168.1.100 envia tres paquetes SYN a los puertos 80,143,69 y 1234.
- de los puertos abiertos 80,143 se reciben SYN-ACK
- 192.168.1.100 responde con un RST para terminar
- de los puertos cerrados se recibem RST-SCK

- ip.scr IP origen
- ip.dst IP destino
- ip.proto protocolo involucrado (0x06 que es TCP)
- tcp.port puertos TCP
- -T fields y -E separators para formatear los datos y obtener linformación los campos que necesitemos. (los vimos aquí: https://seguridadyredes.wordpress.com/post/2008/05/02/tshark-wireshark-en-linea-de-comandos-ii-parte)

Vamos a usar dos métodos nuevos haslayer() y getlayer(). La mejor manera de explicar restos métodos e usando un ejemplo. Vamos a contruir un paquete, como ya hemos visto en otros capítulos:
>>> ip=IP(dst=»192.168.1.5″,src=»192.168.1.45″,flags=1)
>>> udp=UDP(sport=2048,dport=445)
>>> payload=«Estoy construyendo un paquete»
>>> paquete=ip/udp/payload
>>> paquete.display()
###[ IP ]###
version= 4
ihl= None
tos= 0x0
len= None
id= 1paquete
flags= MF
frag= 0
ttl= 64
proto= udp
chksum= None
src= 192.168.1.45
dst= 192.168.1.5
\options\
###[ UDP ]###
sport= 2048
dport= microsoft_ds
len= None
chksum= None
###[ Raw ]###
load= ‘Estoy construyendo un paquete’


0079 IP / TCP 192.168.1.100:ftp_data > 192.168.1.250:www S ==> IP / TCP 192.168. 1.250:www > 192.168.1.100:ftp_data SA / Padding
0134 IP / TCP 192.168.1.100:ftp_data > 192.168.1.250:loc_srv S ==> IP / TCP 192. 168.1.250:loc_srv > 192.168.1.100:ftp_data SA / Padding
0138 IP / TCP 192.168.1.100:ftp_data > 192.168.1.250:netbios_ssn S ==> IP / TCP 192.168.1.250:netbios_ssn > 192.168.1.100:ftp_data SA / Padding
0442 IP / TCP 192.168.1.100:ftp_data > 192.168.1.250:https S ==> IP / TCP 192.16 8.1.250:https > 192.168.1.100:ftp_data SA / Padding
0444 IP / TCP 192.168.1.100:ftp_data > 192.168.1.250:microsoft_ds S ==> IP / TCP 192.168.1.250:microsoft_ds > 192.168.1.100:ftp_data SA / Padding
- si el puerto está cerrado, el host recepetor del scan responde con un segmento con los flag RST-ACK activados, indicando que se resetee la conexión en cliente.
- si el puerto está abierto, ignora el paquete recibido y el host receptor no responde nada.

Que bonito portal, mil gracias..
Les solicito orientación, como puedo crear una sesión pop3 con scapy , por ejemplo con gmail??
gracias!!