Question

Je travaille actuellement sur un programme qui renifle les paquets TCP envoyés et reçus vers et à partir d'une adresse particulière. Ce que je suis en train d'accomplir est de répondre avec des paquets personnalisés sur mesure à certains paquets reçus. J'ai déjà fait l'analyse syntaxique. Je peux déjà généré Ethernet valide, IP, et - pour la plupart -. Paquets TCP

La seule chose que je ne peux pas comprendre comment les chiffres suivants / ack sont déterminées.

Bien que cela puisse être sans rapport avec le problème, le programme est écrit en C ++ en utilisant WinPCap. Je demande des conseils, des articles ou d'autres ressources qui peuvent me aider.

Était-ce utile?

La solution

Lorsqu'une connexion TCP est établie, chaque côté génère un nombre aléatoire comme numéro de séquence initial. Il est un nombre fortement aléatoire. Il y a des problèmes de sécurité si quelqu'un sur Internet peut deviner le numéro de séquence, car ils peuvent facilement établir des paquets à injecter dans le flux TCP

Ensuite, pour chaque octet transmis le numéro de séquence est incrémenté de 1. Le champ d'accusé de réception est le numéro de séquence de l'autre côté, renvoyé à accuser réception.

RFC 793 , la spécification du protocole TCP d'origine, peut être d'une grande aide.

Autres conseils

J'ai le même travail à faire. Tout d'abord le # initial suivants seront générés au hasard (0-4294967297). Ensuite, le récepteur comptera la longueur des données qu'il a reçues et envoyer l'accusé de réception de seq# + length = x à l'expéditeur. La séquence sera alors x et l'expéditeur envoie les données. De même, le récepteur comptera le x + length = y de longueur et envoyer l'ACK comme y et ainsi de suite ... Sa façon dont le seq / ack est généré ...

Si vous voulez montrer essayer pratiquement renifler un paquet dans Wireshark et suivez le flux TCP et voir le scénario ...

Si je vous comprends bien - vous essayez de monter un TCP SEQ attaque de prédiction . Si tel est le cas, vous aurez envie d'étudier les spécificités de votre cible OS le numéro de séquence initiale .

Il y avait largement rendues publiques dans vulnerabilties assez bien tous les principaux systèmes d'exploitation leurs générateurs de WRT ISN étant prévisible . Je ne l'ai pas suivi les retombées de près, mais je crois comprendre que la plupart des fournisseurs a publié des correctifs à randomisent leurs incréments de ISN .

Il semble que le reste des réponses a expliqué à peu près tout sur l'endroit où trouver des informations détaillées et officielles sur ACK, à savoir Analyse TCP - Section 2: numéros de séquence et acquittement

section RFC 793 3.3 applique aux numéros de séquence. La dernière fois que je l'ai écrit le code à ce niveau, je pense que nous gardions un contre un pour les numéros de séquence qui persistaient.

Ces valeurs font référence les décalages attendus du début de la charge utile du paquet par rapport au numéro de séquence initial pour la connexion.

Référence

  

Numéro de séquence (32 bits) - a une double   rôle Si le drapeau SYN est, cette   est le numéro de séquence initial. le   Numéro de séquence de la première réelle   octet de données sera alors cette séquence   nombre plus 1. Si le drapeau SYN est pas   ensemble, alors ceci est le numéro de séquence   du premier octet de données

     

Acquittement   nombre (32 bits) - si le drapeau ACK est   Réglez ensuite la valeur de ce champ est   l'octet suivant prévu que le   récepteur attend.

Les nombres sont générés au hasard des deux côtés, puis a augmenté de nombre d'octets envoyés (octets).

Le numéro de séquence incrément après que la connexion est établie. Le numéro de séquence initiale sur une nouvelle connexion est idéalement choisie au hasard mais beaucoup de systèmes d'exploitation ont un algorithme semi-aléatoire. Les RFC sont le meilleur endroit pour en savoir plus TCP RFC .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top