J'essaye de faire un programme qui coupe la connexion tcp entre ma
machine et n'importe quelle autre, en me basant sur l'idée du "double
RST" du créateur de "TCP cutter" (http://www.lowth.com/cutter)
Le problème de base etant que n'etant pas "au milieu" de la session,
il faut s'envoyer un RST à soi même en usurpant l'identité de la
machine distante.
Mon problème est le suivant :
2 machines : Un EXPEDITEUR (qui veut mettre fin à la connection TCP
qu'il a avec la CIBLE) et la CIBLE
EXPEDITEUR : 192.168.1.3
CIBLE : xx.xx.xx.xx.
et voila le pb :
15:11:59.369482 192.168.1.3.33254 > xx.xx.xx.xx.imaps: F [tcp sum ok]
0:0(0) win 0 (DF) (ttl 253, id 0, len 40)
15:11:59.372507 xx.xx.xx.xx.imaps > 192.168.1.3.33254: . [tcp sum ok]
1589:1589(0) ack 461 win 6432 <nop,nop,timestamp 163410425 1403391>
(DF) (ttl 62, id 40208, len 52)
15:11:59.373290 192.168.1.3.33254 > xx.xx.xx.xx.imaps: R [tcp sum ok]
2365895080:2365895080(0) win 0 (DF) (ttl 253, id 0, len 40)
15:11:59.373699 xx.xx.xx.xx.imaps > 192.168.1.3.33254: R [tcp sum ok]
3960647341:3960647341(0) win 0 (DF) (ttl 253, id 0, len 40)
15:12:06.073374 192.168.1.3.33254 > xx.xx.xx.xx.imaps: P [tcp sum ok]
461:490(29) ack 1589 win 8870 <nop,nop,timestamp 1406204 163410425>
(DF) (ttl 64, id 39495, len 81)
15:12:06.076633 xx.xx.xx.xx.imaps > 192.168.1.3.33254: R [tcp sum ok]
3960647341:3960647341(0) win 0 (DF) (ttl 253, id 0, len 40)
decryptage ;)
1) envoi FIN pour trouver numéro de sequence :
15:11:59.369482 192.168.1.3.33254 > xx.xx.xx.xx.imaps: F [tcp sum ok]
0:0(0) win 0 (DF) (ttl 253, id 0, len 40)
2) reponse de la cible : ACK avec bon numéro de sequence :
15:11:59.372507 xx.xx.xx.xx.imaps > 192.168.1.3.33254: . [tcp sum ok]
1589:1589(0) ack 461 win 6432 <nop,nop,timestamp 163410425 1403391>
(DF) (ttl 62, id 40208, len 52)
3) envoi Reset à la cible (avec le bon numéro de sequence)
conséquence, la cible ferme le socket de son coté:
15:11:59.373290 192.168.1.3.33254 > xx.xx.xx.xx.imaps: R [tcp sum ok]
2365895080:2365895080(0) win 0 (DF) (ttl 253, id 0, len 40)
4) envoi FAUX reset à l'expéditeur (c'est l'expéditeur qui a forgé ce
packet et se l'est envoyé, grace aux Raw Sockets) ... (devrait fermer
le socket du coté de l'expéditeur, mais ca ne marche pas) :
15:11:59.373699 xx.xx.xx.xx.imaps > 192.168.1.3.33254: R [tcp sum ok]
3960647341:3960647341(0) win 0 (DF) (ttl 253, id 0, len 40)
5) tentative du logiciel d'ecrire dans le socket (alors que le paquet
precedent aurait du lui faire comprendre que le socket etait mort):
15:12:06.073374 192.168.1.3.33254 > xx.xx.xx.xx.imaps: P [tcp sum ok]
461:490(29) ack 1589 win 8870 <nop,nop,timestamp 1406204 163410425>
(DF) (ttl 64, id 39495, len 81)
6) Cible répond que socket fermé et ferme donc le socket du coté
expéditeur:
15:12:06.076633 xx.xx.xx.xx.imaps > 192.168.1.3.33254: R [tcp sum ok]
3960647341:3960647341(0) win 0 (DF) (ttl 253, id 0, len 40)
packet 4 = packet 6 non ? alors pourquoi le quatre ne ferme pas le
socket auprès du logiciel, alors que le 6 oui ?
la seule différence que je vois c'est le nombre de 0 à la fin ... mais
bon ca a pas géné la cible, elle s'est bien fermée, pourquoi ca
generait l'expediteur ?
Est ce que j'interprète mal qq chose ? une erreur de base ? qq'un a
une idée ?
En me pinguant moi-même (ping votre_ip_mais_pas_127.0.0.1) j'ai remarqué que les paquets passaient qd meme par l'interface "lo". Alors j'ai envoyé mon 2e RST à 'interface lo et non à eth0 comme avant... --> pas de différence, paquet toujours ignoré! alors sniff ethereal, et là je remarque que sur un ping en local, les @mac src et dest sont à 00-00-00-00-00-00... ok me dis-je, et hop, avec ma trame dans "buffer", me voila a faire un petit memset (buffer,0,12); Successs ! ca kille mes connections en local !
Moralité : pour vous envoyé des paquets a vous meme, utilisez les raw_socket, mettez les 12 premiers octets de votre trame à 0, et balancez ca sur l'interface locale !
Problème réglé !
En me pinguant moi-même (ping votre_ip_mais_pas_127.0.0.1) j'ai
remarqué que les paquets passaient qd meme par l'interface "lo".
Alors j'ai envoyé mon 2e RST à 'interface lo et non à eth0 comme
avant...
--> pas de différence, paquet toujours ignoré!
alors sniff ethereal, et là je remarque que sur un ping en local, les
@mac src et dest sont à 00-00-00-00-00-00...
ok me dis-je, et hop, avec ma trame dans "buffer", me voila a faire un
petit memset (buffer,0,12);
Successs !
ca kille mes connections en local !
Moralité : pour vous envoyé des paquets a vous meme, utilisez les
raw_socket, mettez les 12 premiers octets de votre trame à 0, et
balancez ca sur l'interface locale !
En me pinguant moi-même (ping votre_ip_mais_pas_127.0.0.1) j'ai remarqué que les paquets passaient qd meme par l'interface "lo". Alors j'ai envoyé mon 2e RST à 'interface lo et non à eth0 comme avant... --> pas de différence, paquet toujours ignoré! alors sniff ethereal, et là je remarque que sur un ping en local, les @mac src et dest sont à 00-00-00-00-00-00... ok me dis-je, et hop, avec ma trame dans "buffer", me voila a faire un petit memset (buffer,0,12); Successs ! ca kille mes connections en local !
Moralité : pour vous envoyé des paquets a vous meme, utilisez les raw_socket, mettez les 12 premiers octets de votre trame à 0, et balancez ca sur l'interface locale !
T0t0
"Florent Carli" wrote in message news:
Problème réglé ! Moralité : pour vous envoyé des paquets a vous meme, utilisez les raw_socket, mettez les 12 premiers octets de votre trame à 0, et balancez ca sur l'interface locale !
Well done. C'est toujours bon à savoir. Tiens nous au courant de l'avancée du projet :-)
-- Posted via Mailgate.ORG Server - http://www.Mailgate.ORG
"Florent Carli" <nospam@tomcat.ca.tc> wrote in message
news:6d12cccb.0311250345.56e061a@posting.google.com
Problème réglé !
Moralité : pour vous envoyé des paquets a vous meme, utilisez les
raw_socket, mettez les 12 premiers octets de votre trame à 0, et
balancez ca sur l'interface locale !
Well done. C'est toujours bon à savoir.
Tiens nous au courant de l'avancée du projet :-)
--
Posted via Mailgate.ORG Server - http://www.Mailgate.ORG
Problème réglé ! Moralité : pour vous envoyé des paquets a vous meme, utilisez les raw_socket, mettez les 12 premiers octets de votre trame à 0, et balancez ca sur l'interface locale !
Well done. C'est toujours bon à savoir. Tiens nous au courant de l'avancée du projet :-)
-- Posted via Mailgate.ORG Server - http://www.Mailgate.ORG
Florent
Well done. C'est toujours bon à savoir. Tiens nous au courant de l'avancée du projet :-)
Bah depuis que je sais comment m'envoyer des RST, j'ai un petit bout de programme en C qui kille normalement les connections TCP avec un bout d'interface graphique en ncurses ... (je suis comme toi j'ai repris le C ya 2 semaines :) ) Ya pas une ligne de commentaire, c sur de tourner seulement sur ma machine et ca gère surement pas les connections TCP faites en local (mais ca peut s'arranger).... on peut peut etre appeler ca une version 0.1 ;) Si ca t'interesse, envoie moi un mail (l'adresse est valide malgré ce que l'on peut penser).
Well done. C'est toujours bon à savoir.
Tiens nous au courant de l'avancée du projet :-)
Bah depuis que je sais comment m'envoyer des RST, j'ai un petit bout de
programme en C qui kille normalement les connections TCP avec un bout
d'interface graphique en ncurses ... (je suis comme toi j'ai repris le C
ya 2 semaines :) )
Ya pas une ligne de commentaire, c sur de tourner seulement sur ma
machine et ca gère surement pas les connections TCP faites en local
(mais ca peut s'arranger).... on peut peut etre appeler ca une version
0.1 ;)
Si ca t'interesse, envoie moi un mail (l'adresse est valide malgré ce
que l'on peut penser).
Well done. C'est toujours bon à savoir. Tiens nous au courant de l'avancée du projet :-)
Bah depuis que je sais comment m'envoyer des RST, j'ai un petit bout de programme en C qui kille normalement les connections TCP avec un bout d'interface graphique en ncurses ... (je suis comme toi j'ai repris le C ya 2 semaines :) ) Ya pas une ligne de commentaire, c sur de tourner seulement sur ma machine et ca gère surement pas les connections TCP faites en local (mais ca peut s'arranger).... on peut peut etre appeler ca une version 0.1 ;) Si ca t'interesse, envoie moi un mail (l'adresse est valide malgré ce que l'on peut penser).