7
votes

Connexion TCP Highjacking

J'ai un petit projet sur lequel je travaille dans C ++ et que je suis dû à la nature de ce que cela fait, je dois insérer des paquets dans un flux TCP en direct. (Le but est assez innocent, http://ee.forumify.com/viewtopic.php? id = 3299 si vous devez savoir) Je crée un éditeur de niveau pour un jeu et, en raison de la nature des poignées de main, je ne peux pas simplement établir une nouvelle connexion avec une bibliothèque de haut niveau telle que Winsock. Jusqu'à présent, il s'est appuyé sur Winsock Packet Editor pour faire le sale boulot, mais si je devais laisser la demande de la demande, cela rendrait tout le monde heureux.

Donc, ma question est la suivante: y a-t-il une API quelque part qui me permettra de prendre le contrôle d'un flux TCP en direct et de préférence celui qui le garde valable après sa fin? Et je préférerais ne pas avoir à injecter des DLL. De plus, détours est un non-non comme j'utilise GCC / Mingw.

J'ai joué avec WinPCap et j'ai du code de travail (je peux recueillir un paquet et, à partir de celui-ci, générer un paquet approprié à envoyer) mais depuis qu'il fonctionne à un niveau aussi bas, je ne peux pas anticiper tout le potentiel protocoles que l'utilisateur final pourrait utiliser. Oui, il y a de fortes chances qu'ils utilisent IPv4 sur Ethernet, mais qu'en est-il de ces personnes qui utilisent toujours PPP ou un autre protocole obscurs? En outre, la connexion est supprimée par l'application cliente après la fin du mien, car les valeurs d'identification les plus récentes dans les paquets ont changé et que le client suppose qu'il a déconnecté.

Donc, si quelqu'un pouvait fournir un manipulateur de flux TCP de haut niveau, je serais très heureux. Sinon, je vais continuer à bricoler avec WinPCAP et à dire à tous les utilisateurs d'accès à distance d'aller obtenir un meilleur Internet.

Plate-forme cible: Microsoft Windows XP via Windows 7


5 commentaires

Vous devriez lire Hackish C ++: farces et astuces par Michael Flenov. Cela ressemble à un livre de plaisanter parfaitement axé sur ordinateur, mais il a beaucoup d'excellents exemples de réseautage qui s'appliquerait à ce projet.


Y a-t-il lieu où je peux lire cela en ligne gratuitement? Mon système de bibliothèque locale n'a pas de copie de cela, tristement.


Je ne sais pas ... Peut-être que vous pourriez trouver quelque chose avec Google. J'ai tapé une partie de ce code quelque part, si je trouve le fichier pertinent, je posterai du code


Eh bien, je ne semble pas avoir tapé de l'entrée en pensant. Désolé, je ne peux pas être plus d'aide, mais je vous suggérerais de regarder la bibliothèque Winsock2. Je suis à peu près sûr que cela permettra cela. Je sais certainement qu'il supporte les prises brutes


J'ai regardé Winsock2, mais la compatibilité de la prise brute est affreuse grâce aux raisons de sécurité. Cela limiterait ma base d'utilisateur à XP Professional Edition ou plus âgée.


3 Réponses :


0
votes

Je ne pense pas qu'il y ait une API sensible qui vous permettra de détourner un flux TCP. Une telle chose serait intrinsèquement un problème de sécurité.

Pouvez-vous insérer votre programme en tant que proxy pour la connexion en question? Autrement dit, obtenez le programme qui ouvre la connexion pour l'ouvrir à votre programme, puis votre programme ouvre la connexion à la cible réelle.

L'idée est que si tous les paquets transmettent de toute façon votre programme, la modification du flux TCP devient relativement triviale.


2 commentaires

Oui, je peux utiliser WinPCap comme un renifleur qui me permet de modifier directement le flux de bits vers et depuis la carte réseau, mais comme je suis plutôt inexpérimenté à de telles choses, il ne sera pas presque aussi compatible que je l'aimerais être.


@ASLAI - Ce que je dis, c'est qu'il n'y a pas d'API «plus compatible» pour intercepter et manipuler des flux TCP. Ce n'est pas une chose «normale» de vouloir faire. Le moyen «normal» de faire est d'être un proxy explicite, de sorte qu'il n'y a pas de question quant à ce qui se passe, et pas besoin d'étrangeté de bas niveau.



1
votes

Vous devez regarder le code source d'Ettercap http://ettercap.sourceforge.net/ ou Hunt, TCP Hijacker http://packetStormsecurity.org/files/view/21967/ Hunt-1.5.tgz

Ces 2 softs font ce que vous êtes après.


0 commentaires

2
votes

Créez un processus séparé pour se lier à un port local. Lorsque le flux TCP initial est créé, procédez-le de ce processus, ce qui peut ensuite l'envoyer sur le réseau. Lorsque vous devez «injecter» dans le flux, vous pouvez le faire ce processus de proxy. Juste une pensée.


1 commentaires

Un moyen simple de faire est d'utiliser un proxy de chaussettes, ce qui a essentiellement un préambule pour indiquer au processus de serveur que le port de destination de se connecter et attend le proxy de faire la connexion, puis "se copie simplement des paquets du serveur au client et client au serveur ". Cependant, il n'y a aucune raison que le proxy doit simplement copier des paquets. Il peut simplement suivre la voie de la négociation de protocole et commencer à modifier les données lorsque la poignée de main de niveau du protocole initial est terminée. Sous Windows, un outil tel que proxycap est utile pour rediriger les connexions TCP. Owasp Proxy sur le côté serveur.