Fuzzing avec Scapy

La fonction fuzz() est capable de changer n’importe quelle valeur par défaut, telle que le checksum par un objet dont la valeur est aléatoire et le type adapté au champ. Ce qui va nous permettre de créer rapidement un fuzzer et de l’envoyer dans une boucle

Dans l’exemple suivant, la couche IP est normale et les couches UDP et NTP sont fuzzées. Le checksum UDP sera correct, le port UDP de destination sera surchargé, NTP aura la valeur 123 et la version sera forcée à 4. Tous les autres ports seront rendus aléatoires.

images/04EP06.png

Nous pouvons bien entendu, comme nous l’avons vu au chapitre Réseau : la bibliothèque Scapy, configurer comme nous le voulons la fonction fuzz().

images/04EP07.png

Nous pouvons maintenant lancer le fuzzing et observer avec un "renifleur de paquet", tel que Wireshark ou tcpdump, l’échange entre le client et le serveur.

La capture d’écran suivante montre le résultat sous Wireshark. Wireshark est un logiciel gratuit, disponible en téléchargement et les tutoriels sont multiples. Son utilisation est simple et instinctive.

images/04EP08.png
images/04EP09.png

Nous voyons bien ici les paquets envoyés à la machine 10.0.0.2.

Tentons maintenant un fuzzing sur notre serveur Ability Server en lançant la commande suivante :


 send(IP(dst="10.0.0.2")/fuzz(TCP(dport=21)),loop=1)
 

Nous pouvons constater que de multiples paquets sont envoyés à la cible (10.0.0.2). En examinant les paquets séparément...

couv_EP2HAFO.png

Découvrez 

le livre :

Aussi inclus dans nos :

Précédent
Fuzzing FTP
Suivant
Fuzzing avec PyDbg : format string