Creo que el mejor ejemplo para el secuestro de sesión TCP es el ataque de Kevin Mitnick, que se explica muy bien en esta página . La idea es que adivines el número de secuencia de un paquete. Sin embargo, hoy en día este ataque no es práctico porque la mayoría de los sistemas operativos asignan al azar este número, lo que dificulta la predicción.
Por otro lado, para los ataques Man-in-the-Middle, tienes una amplia gama de opciones. Primero necesitas meterte entre los dos nodos. Esto puede ser realmente simple cuando posee uno de los nodos que enrutan su tráfico, como un punto de acceso inalámbrico.
Pero también puedes usar ataques como la falsificación ARP que mencionaste. Otros protocolos de enrutamiento también permiten este tipo de comportamiento, como BGP. Luego hay más ataques indirectos como envenenamiento de caché de DNS.
Una vez que tenga el control del tráfico de datos, puede oler pasivamente el tráfico. Creo que encontrará a scapy un buen módulo de Python para cosas como esta. Es bastante potente y puede usarse para todo tipo de ataques de red.
Otro sniffing pasivo se puede hacer con libpcap . pcapy es un módulo de Python que interactúa con esta biblioteca. También puedes usar Wireshark si quieres echar un vistazo rápido al tráfico.
Modificar el tráfico entre nodos es más difícil. Una forma de hacer esto es enrutar todo el tráfico a un determinado puerto. Para el ejemplo de la aplicación de chat, supongamos que enruta el tráfico entrante desde el puerto 12221 al localhost: 1337 usando iptables. Ahora ejecuta un servidor en el puerto 1337 que captura todo este tráfico, busca los paquetes, los modifica y los envía al puerto 12221 al host correcto.
Si desea practicar cómo examinar el tráfico de otro dispositivo, puede instalar una herramienta como Burp y configurar un proxy en un dispositivo como su teléfono. Verás tu tráfico HTTP y podrás modificarlo. Pero con los sitios web TLS (HTTPS) obtendrá una advertencia de certificado, ya que estas herramientas generan un certificado TLS falso sobre la marcha. Si quieres profundizar en esto, te recomiendo mitmproxy , porque es de código abierto y tiene una buena API de Python. Además, puede consultar bettercap .