Vous n'êtes pas identifié(e).
Hello,
ça fait un bail que je suis pas passé par ici, mais étant plus ou moins de retour,j'annonce un retour avec un petit thread :
Bon je tiens à dire que c'est un sujet plus ou moins long donc je vais l'éditer au fur et à mesure, le rendre plus joli, bref faire ce que je peux pour le rendre le plus accessible à nos chers cybertrackxiens (ouaip ça fait alien j'aime bien)
pré-requis:
-une connaissance de base du langage python
-connaissances en réseaux basiques ( vous pouvez même lire sans ça hein )
-être curieux
About scapy :
Premièrement c'est une librairie python que l'on peut considérer comme un tool à part entière.
Elle est très prisée par les personnes s'intéressant de près au Pentest car il permet de manipuler des paquets, créer, envoyer diverses requêtes etc...
On peut aussi s'en servir dans une optique d'audit de son propre système bien évidemment, ou juste pour faire joujou.
A vérifier : il me semble qu'il est compatible avec les versions < 2.5 ( mais pas les 3.x , reste à vérifier)
Pour l'installation vous êtes des grands, vous savez faire hein ?
Comment ça non?
bon:
[== Indéfini ==]
sudo apt-get install python-scapy
et yumi pour les fans de redhat
Comme le python, vous pouvez vous en servir en ligne de commande, ou dans un script, par contre petite subtilité :
[== Indéfini ==]
sudo scapy
En effet, scapy manipule les paquets et pour certaines manipulations aura donc besoin des droits administrateur.
De plus vous pouvez par exemple faire un ifconfig en ligne de commande une fois scapy lancé. ( ouais c'est sympas :rolleyes: )
Ou si vous voulez l'utiliser dans un script:
from scapy.all import *
Commencons !
Il faut savoir que sous scapy, les protocoles sont des objets : IP(),ICMP(),UDP() ...
La création et l'assignation de variables se fait de la même manière qu'en python :
-ip=IP() <-- On déclare notre variable ip comme un objet IP()
-ip.src=”1.2.3.4” <-- notre Objet IP peut prendre une source (qui a envoyer le paquet)
-ip.dst=”google.com” <-- de la même manière il peut prendre une destination(qui va le recevoir)
Mais comme on aime tout faire en même temps :
-ip=IP(src=”1.2.3.4”, dst=”google.com”) <-- oui,ça marche :rolleyes:
Vous avez remarqué ? ]:D
Et oui on peut même mettre ce que l'on veut dans la source et donc faire croire qu'on est un petit enfant méchant du bangladesh
Les commandes pour envoyer et recevoir les paquets :
(Layer 2)
-sendp() - layer 2 sending
-srp() - send and receive on Layer 2
-srp1() - send and receive a single response
(Layer 3)
-send() - layer 3 sending
-sr() - layer 3 send and receive
-sr1() - send and receive a single response
Oui je sors ça de la documentation anglophone (lire la doc est toujours essentiel avant de poser une question soit dit en passant pour les newbies j'en suis un je sais de quoi je parle )
Si vous ne savez pas à quoi correspondent les layers :
(physique c'est le layer 1, applicatif le 7)
Passons à un aspect un peu plus pratique
Nous pouvons créer un paquet ethernet et afficher avec :
[== Indéfini ==]
trame = Ether()
trame.show()
La commande show va vous montrer votre objetc avec plein d'informations ! (non j'exagère )
quelque chose ressemblant à :
dst= ff:ff:ff:ff:ff:ff
src= 00:00:00:00:00:00
type= 0x0
Si vous ne savez pas ce que cela représente une trame ethernet est constituer de la manière suivante :
L'adresse de destination MAC | L'adresse de source MAC | Ethertype | DATA | CRC (checksum)
Les deux premiers sont assez explicite, le troisième correspond au type du protocole qui dépends de ce qui est dans la partie DATA.
Et le checksum permet de contrôler l'intégrité de notre trame. Bref celle là on y touche pas.
Ici nous affichons les valeurs par défaut.
Vous pouvez les modifier par exemple en faisant ' trame.dst = machin ' ou 'trame.src=machin'
Pour envoyer la trame et bien ... j'ai mis les commandes plus haut, nous sommes au layer 2 donc
[== Indéfini ==]
sendp(trame)
Si vous le faites vous aurez une réponse de type '.' puis 'sent 1 packets'
Le point en scapy signifie l’envoi.
Cette trame était vide et donc, inintéressante, mais on le fait d'un point de vue pédagogique !
Maintenant nous allons encapsuler des données, c'est à dire que l'on va mettre des informations dans la partie DATA (youppiiii )
En gros, on commence les choses intéressantes!
Un peu plus de pratique avec l'encapsulation !
Je vous propose de créer votre premier "paquet" avec scapy !
Pour cela nous allons faire quelque chose appelé de l'encapsulation, qui consiste à inclure un protocole dans un autre protocole.
Pour ce faire, je vais, non ON va créer (oui faites le c'est plus intéressant)
un paquet basé sur le protocole ICMP -> donc en gros on va faire un ping !
Pour ceux ne connaissant pas la commande ping, honte à vous !
En pratique, un ping consiste à savoir si un hôte existe, c'est à dire si il y a une machine à l'adresse x.x.x.x !
En version technique, le ping va envoyer un paquet ICMP echo-request à un hôte et nous informer si un paquet echo-reply à était reçu .
Bref, créons notre objet de la même manière que précédemment :
[== Indéfini ==]
mon_ping = ICMP()
mon_ping.show()
Là on voit que notre type est à echo-request, car c'est le type de base du protocole ICMP.
On va désormais créer un vrai paquet !
[== Indéfini ==]
mon_ping = Ether() / IP(dst='192.168.1.3') / ICMP()
mon_ping.show()
Pour les questions 192.168.1.3 là c'est l'ip de ma coloc
c'est son ip privé, donc inutile d'essayer de lui dire bonjour sur cet ip (pour les ip privées/ip publiques je vous invite à chercher ça sur google)
Remarque que le type est 0x800, scapy mets les informations de source et de type comme un grand mais on peut les modifier nous même !
à partir de là vous pouvez envoyer le paquet avec sendp(mon_ping), mais vous n'allez pas recevoir de réponses, car ?
...
Si vous avez bien suivis oui sendp() envoit SEULEMENT .
Pour recevoir il faut utiliser srp()
Essayer :
[== Indéfini ==]
rep,non_rep = srp(mon_ping)
Là, on a une réponse ! (une petite '*' s'affiche, cela signifie "ouaip j'ai reçu un truc")
et vous pouvez consulter rep et non_rep voir ce qu'ils contiennent !
Ensuite vous pouvez consulter la réponse avec rep.show() !
rep est une liste de couple de paquets vous pouvez donc le regarde comme une liste classique :
rep[0][0].show()
Je vous laisse analyser ces informations comme des grands, ça vous fera réfléchir un peu
Si vous voulez analyser une seul réponse n'oubliez pas srp1() !
Si on approfondis un peu, on va oubliez la partie ethernet parce que bon, scapy s'en charge très bien et elle ne nous intéresse pas tant que ça !
On peut donc faire :
[== Indéfini ==]
rep = sr1(IP(dst='192.168.1.3') / ICMP())
Voila les bases, à partir de là laissez votre imagination travailler.
Faite du scan sur des plages d'ip, générez des paquets, manipuler !
C'est en forgeant qu'on devient forgeron !
D'ailleurs dans le jargon on dit que l'on forge un paquet ! Cela rend l'expression encore plus adapté
Ce que je peux faire ensuite :
-Vous écrire un petit script pour faire un scan de plage ip.
-Un petit script qui appel nmap sur une ip pour faire du scan de port (on peut mixer avec le scan d'ip)
-Je pense le faire c'est décrire la fonction sniff() de scapy, c'est surtout pour cela que je l'utilise, c'est vraiment mais alors vraiment bien foutu !
Mais je ferais peut être un autre thread dessus?
En espérant que ça aide. c'est un des premiers articles que je fais donc si vous avez des remarques faites les.
Orthographe, présentation tout ça.
Mon but est aussi d'apprendre à faire des cours, des tutoriels, etc ...
Donc un maximum de retour serait génial !
Au passage niveau balise, ya ni console ni python :S
Sources :
http://hackmiami.org/wp-content/uploads … pypres.pdf
http://www.secdev.org/projects/scapy/doc/
en pdf :
http://www.secdev.org/projects/scapy/files/scapydoc.pdf
Et le cours du site du zéro, qui a la même structure en fait *_*
Mais avec des images et tout,et tout ... (mais euh )
http://openclassrooms.com/courses/manip … avec-scapy
-L'anonymat complet n'existe pas , il faudra vous y faire .
-La plus grande faille informatique ? l'homme sans aucun doute .
Hors ligne
Bonjour,
Merci pour cette belle présentation. C'est une chouette api très intéressante à découvrir.
Hors ligne
Pour le moment le mode blackhat n'est pas disponible dans mes neurones, mais je garde ce thread dans mes marque-pages
>> Good things come to those who, Wait.. <<
>> sip:yzeew@ekiga.net << and >> #Pouni3 <<
Hors ligne
Merci pas encore le niveau .. mais j'atend la suite notament la description de la fonction sniff() ]:D
Hors ligne