OVH Cloud OVH Cloud

Couper une connexion TCP qui ne m'appartient pas

13 réponses
Avatar
nospam
Bonjour,

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 ?


détail ascii :
15:16:03.029155 192.168.1.3.33264 > xx.xx.xx.xx.imaps: F [tcp sum ok]
0:0(0) win 0 (DF) (ttl 253, id 0, len 40)
0x0000 4510 0028 0000 4000 fd06 3f8f c0a8 0103
E..(..@...?.....
0x0010 xxxx xxxx 81f0 03e1 0000 0000 0000 0000
QP+E............
0x0020 5001 0000 ebd1 0000 P.......
15:16:03.032450 xx.xx.xx.xx.imaps > 192.168.1.3.33264: . [tcp sum ok]
1547:1547(0) ack 432 win 6432 <nop,nop,timestamp 163434791 1428906>
(DF) (ttl 62, id 47958, len 52)
0x0000 4500 0034 bb56 4000 3e06 432d xxxx xxxx
E..4.V@.>.C-QP+E
0x0010 c0a8 0103 03e1 81f0 04bb 7c74 a601 53be
..........|t..S.
0x0020 8010 1920 75f7 0000 0101 080a 09bd d127
....u..........'
0x0030 0015 cdaa ....
15:16:03.032751 192.168.1.3.33264 > xx.xx.xx.xx.imaps: R [tcp sum ok]
2785104830:2785104830(0) win 0 (DF) (ttl 253, id 0, len 40)
0x0000 4510 0028 0000 4000 fd06 3f8f c0a8 0103
E..(..@...?.....
0x0010 xxxx xxxx 81f0 03e1 a601 53be 0000 0000
QP+E......S.....
0x0020 5004 0000 f20e 0000 P.......
15:16:03.032760 xx.xx.xx.xx.imaps > 192.168.1.3.33264: R [tcp sum ok]
79395956:79395956(0) win 0 (DF) (ttl 253, id 0, len 40)
0x0000 4510 0028 0000 4000 fd06 3f8f xxxx xxxx
E..(..@...?.QP+E
0x0010 c0a8 0103 03e1 81f0 04bb 7c74 0000 0000
..........|t....
0x0020 5004 0000 6a9f 0000 P...j...
15:16:06.658510 192.168.1.3.33264 > xx.xx.xx.xx.imaps: P [tcp sum ok]
432:461(29) ack 1547 win 8870 <nop,nop,timestamp 1430262 163434791>
(DF) (ttl 64, id 40850, len 81)
0x0000 4500 0051 9f92 4000 4006 5cd4 c0a8 0103
E..Q..@.@.\.....
0x0010 xxxx xxxx 81f0 03e1 a601 53be 04bb 7c74
QP+E......S...|t
0x0020 8018 22a6 9384 0000 0101 080a 0015 d2f6
..".............
0x0030 09bd d127 1703 0100 1890 5710 c450 b838
...'......W..P.8
0x0040 697e b447 cbaa 576b 5725 6f31 267d 2e9e
i~.G..WkW%o1&}..
0x0050 73 s
15:16:06.661649 xx.xx.xx.xx.imaps > 192.168.1.3.33264: R [tcp sum ok]
79395956:79395956(0) win 0 (DF) (ttl 253, id 0, len 40)
0x0000 4500 0028 0000 4000 fd06 3f8f xxxx xxxx
E..(..@...?.QP+E
0x0010 c0a8 0103 03e1 81f0 04bb 7c74 0000 0000
..........|t....
0x0020 5004 0000 6a9f 0000 0000 0000 0000 P...j.........

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 ?

Merci
Florent

3 réponses

1 2
Avatar
nospam
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 !
Avatar
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

Avatar
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).

1 2