Failles web : Les bases

publicité
Failles web : Les bases
Failles web : Les bases
●
Failles utilisant les sites web comme support
●
Ciblant soit les serveurs soit les visiteurs
●
Dangereuses car simples à assimiler
●
Objectifs :
Vol de données
● Défaçage
● Rendre indisponible un site
● Utiliser le serveur pour en attaquer d'autres
● Héberger des sites web de contrefaçon
● Exécuter du code sur le serveur/visiteurs
●
Failles web : Les bases
Le vol de données
Failles web : Les bases
Failles web : Les bases
Failles web : Les bases
Source : zataz.com
Failles web : Les bases
Nombre d'informations personnelles
piratées
Source : informationisbeautiful.net
Failles web : Les bases
Le defaçage
Failles web : Les bases
Failles web : Les bases
Le site de la ville de Beziers défaçé
mi-novembre
Failles web : Les bases
Failles web : Les bases
Nombre de sites web "defaçés"
Source : http://www.zone-h.org/
Failles web : Les bases
Le DDOS
Distributed Denial Of Service
Failles web : Les bases
Principe :
●
Surcharger un site web en
réalisant de multiples connexions
simultanées sur celui ci.
Failles web : Les bases
Failles web : Les bases
Principe d'un DDOS
Failles web : Les bases
Conséquence d'un DDOS
Failles web : Les bases
Même elysee.fr n'y résiste pas
Failles web : Les bases
L’hébergement de sites frauduleux
Failles web : Les bases
Pourquoi ?
●
Hébergement gratuit
●
Hébergement anonyme
●
Référencement gratuit
●
Permet d'éviter le filtrage
Failles web : Les bases
Source Zataz.com
Failles web : Les bases
Exécution de code
Failles web : Les bases
Exemple d’exécution de code sur le
poste du visiteur
Source : zataz.com
Failles web : Les bases
Exemple d’exécution de code sur le
serveur
Failles web : Les bases
Pourquoi ? :
●
Site web mal conçu
erreur de développement/configuration
●
Site web pas à jour
●
Design / Plug-in vérolés
●
Mot de passe faibles
Failles web : Les bases
Comment se protéger ? ●
●
S'informer
Effectuer les mises à jour
Ordinateur, serveur, site web
●
Ne pas cliquer sur les liens inconnus
●
Limiter les informations mises sur Internet
Failles web : Les bases
En pratique :
Cross Site Scripting (XSS) / Contre l'utilisateur
Injection SQL / Contre le serveur
Failles web : Les bases
RAPPEL
Article L.323-1 du Nouveau code pénal :
" le fait d’accéder ou de se maintenir,
frauduleusement, dans tout ou partie
d’un
système
de
traitement
automatisé de données est puni d’un
an d’emprisonnement et de 15 000
euros d’amende ".
Failles web : Les bases
Pour vous connecter
Nom du réseau : FormationEH-FBDD2E
Mot de passe : ethical-hacking/14
Failles web : Les bases
Obtention d'une page simple
Donne moi la page d'accueil
D'accord, la voilà
Failles web : Les bases
Failles web : Les bases
Obtention d'une page avec envoi
d'informations
Affiche moi les résultats pour la
recherche "brocante"
D'accord, les voilà
Failles web : Les bases
Failles web : Les bases
Failles web : Les bases
Les cookies
Petit fichier texte contenant des informations sur
l’utilisateur.
Permet à l'utilisateur de rester identifié sur un
site et de voir ses paramètres sauvegardés par
exemple.
Exemple :
prenom=Nicolas;ville=Jeumont Failles web : Les bases
Obtention d'une page utilisant des
cookies
Donne moi la page d'accueil, voici mes cookies
Bonjour Nicolas, voilà la météo de Jeumont
Failles web : Les bases
Exemple d'utilisation des cookies
Failles web : Les bases
Exemple d'utilisation des cookies
Failles web : Les bases
Exemple d'utilisation des cookies
Failles web : Les bases
Avant de pratiquer il faut comprendre
comment est écrit le code d'une
page :
Ouvrez un navigateur
● Entrez dans la barre d'adresse :
http://192.168.1.169
● Cliquez sur gare-numerique
● Puis sur failles-web
● Et enfin DecouverteHTML
●
Failles web : Les bases
Ouvrez un navigateur
● Entrez dans la barre d'adresse :
http://192.168.1.169
● Cliquez sur gare-numerique
● Puis sur failles-web
● Et enfin TP
Failles web : Les bases
Les grandes étapes
●
●
●
explorer le site
comprendre les fonctionnalités qu'il
propose
repérer les interactions qu'il
possible d'avoir avec celui ci
est
Failles web : Les bases
Cross Site Scripting (XSS)
Principe :
●
Ajouter du code dans le corps d'une page
Comment :
●
Trouver un paramètre dont la valeur est
utilisé dans le cadre de la génération de la
page
Failles web : Les bases
Le site
3 parties :
●
●
●
Accueil, affichage des derniers articles.
Pas d'interaction possible.
Recherche, permet de rechercher un article selon un
mot clé. Recherche d'utilisateur possible également.
Interaction possible via le formulaire de recherche.
Administration, permet de se connecter à
l'interface d'administration.
Interaction possible via le formulaire d’identification
Failles web : Les bases
La page de recherche
●
●
●
Présence d'un formulaire.
Le mot clé recherché est rappelé dans la page
contenant les articles correspondant à la recherche.
Potentiellement un point d'entrée.
Failles web : Les bases
Failles web : Les bases
Ne JAMAIS faire confiance à
l'utilisateur
Remplacez le terme hacking par
<h1>test</h1>
Failles web : Les bases
Le mot test apparaît sous la forme d'un gros titre
Failles web : Les bases
Afficher du texte ne servira à rien à un pirate.
Il préférera :
●
●
●
●
Obtenir vos cookies
Vous rediriger sur d'autre sites
(concurrents/vérolés)
Rediriger la page appelée par un formulaire
Exécuter des actions en utilisant vos droits sur le
site
Failles web : Les bases
Comment ?
En utilisant un langage "complémentaire" de
l'HTML : le javascript
Syntaxe :
<script>code javascript</script>
Le javascript permet d’interagir entièrement avec le
contenu de la page : Ajouter / Supprimer / Modifier
un élément.
Failles web : Les bases
Quelques exemples de code javascript :
alert("Bonjour") ;
Affichera une boite de dialogue contenant Bonjour
alert(document.cookie) ;
Affichera vos cookie
window.location="http://perdu.com"
Vous redirigera sur le site perdu.com
Ces codes sont à placer entre <script>et</script>
Failles web : Les bases
Comment se protéger ?
Les visiteurs :
Utiliser un navigateur à jour
● Ne pas cliquer sur les liens inconnus
● Attention aux adresses raccourcies (twitter)
●
Le serveur :
● Mettre en place un filtre "liste-blanche"
● Utiliser des fonctions dites d'échappement
htmlspecialchars() en php
escapeXml() en J2EE
Failles web : Les bases
SQL Injection (SQLi)
Principe :
●
Modifier une requête adressée à une base de
données pour ajouter/modifier/extraire des
informations
Comment :
●
Trouver un paramètre dont la valeur est
utilisée dans une requête pour la BDD.
Failles web : Les bases
Une base de données
●
●
Sert à stocker des
informations
L'armoire représente
une base de données
Failles web : Les bases
Une base de données
●
●
●
●
Un tiroir sert à stocker
un type d'information
défini.
Un tiroir pour les
factures
Un autre pour les
employés
Appelé table dans une
BDD informatique
Failles web : Les bases
Une base de données
●
●
Chaque table à une
structure définie.
La table employés
peut contenir par
exemple :
Numéro de Sécu
● Nom
● Prénom
● Date de naissance
● Numéro de téléphone
●
Failles web : Les bases
Une base de données
●
●
●
Chaque élément situé
dans une base de
données est appelé :
enregistrement.
Un enregistrement doit
pouvoir être distingué
des autres de façon
unique.
Pour la table employés
c'est via le n° de sécu.
Failles web : Les bases
Dialoguer avec une base de données
●
●
Un langage compatible avec tous les logiciels
de base de données : Le SQL
( Structured Query Language )
Abstraction totale du fonctionnement interne
du logiciel de base de données
Failles web : Les bases
Lire dans une base de données
Syntaxe :
SELECT <champs> FROM <table>;
<champs> et une liste de champs séparés par des
virgules par exemple : nom,prenom,adresse.
Il est possible d'utiliser le caractère * pour
sélectionner tous les champs
<table> est le nom de la table.
Failles web : Les bases
Lire dans une base de données
Exemple :
SELECT nom,prenom FROM employes;
Renverra le nom et prénom de tous les employés
SELECT * FROM employes;
Renverra toutes les infos de tous les employés
Failles web : Les bases
Lire dans une base de données
Il est possible de filtrer les résultats :
SELECT <champs> FROM <table> WHERE
<condition> ;
<condition> est un test retournant soit vrai soit faux
Par exemple : prenom="Jean"
Il est possible de réaliser plusieurs tests en utilisant
des opérateurs booléens (ET, OU)
Failles web : Les bases
Lire dans une base de données
Exemple :
SELECT nom,adresse FROM employes WHERE
prenom="Paul";
Renverra le nom et l'adresse de tous les Paul
SELECT * FROM employes WHERE
prenom="Jean" OR prenom="Paul";
Renverra toutes les infos des personnes s'appelant soit
Jean soit Paul
Failles web : Les bases
Obtention d'une page avec requête
en BDD
SE
LE
C
Ré
sul
tat
s
Affiche moi les résultats pour la
recherche "brocante"
D'accord, les voila
T*
FR
OM
….
Failles web : Les bases
Base de données du site
2 tables
utilisateurs
id
● login
● mail
● password
●
articles
id
● auteur
● titre
● contenu
●
Failles web : Les bases
Requête générée
SELECT * FROM utilisateurs WHERE login = '<terme>'
Si le login est nico la requête devient :
SELECT * FROM utilisateurs WHERE login ='nico'
La requête renverra tous les utilisateurs dont le login est
nico.
Le login est encadré par des apostrophes
Que se passe t il si le login contient un guillemet ?
Failles web : Les bases
You have an error in your SQL syntax
Si on recherche le login nico' la requête devient :
SELECT * FROM utilisateurs WHERE login ='nico''
La présence du guillemet à la fin de la requête fausse la
syntaxe de celle ci et provoque une erreur.
Pour réparer la requête on peut demander au serveur SQL
d'ignorer la fin de la requête en utilisant les commentaires.
Sur le serveur SQL en place, un commentaire commence par
le signe dièse (#)
Failles web : Les bases
Plus d'erreur
Si on recherche le login nico'# la requête devient :
SELECT * FROM utilisateurs WHERE login ='nico'#'
La partie située après le # n'est pas interprétée, la requête
est valide.
Failles web : Les bases
Toute la vérité, rien que la vérité
Il est possible de modifier un filtre afin de le rendre
inopérant.
Pour cela il suffit de rajouter une seconde condition qui
renverra toujours vrai.
L'opérateur booléen devra être un OU (OR en anglais).
SELECT * FROM utilisateurs WHERE login ='nico' OR 1=1 ;
Pour chaque élément de la table utilisateurs la base de
données va retourner l'élément si le login est nico ou si 1 est
égal à 1 ce qui est toujours vrai.
Tous les éléments seront donc renvoyés.
Failles web : Les bases
Toute la vérité, rien que la vérité
Sur la page de recherche d'utilisateur, rentrez ceci dans le
formulaire : inconnu' OR 1=1 #
Le filtre est contourné, pire, il nous donne la liste des
utilisateurs.
Failles web : Les bases
Formulaire de connexion
Le formulaire de connexion accorde l’accès à l'interface
d'administration que s'il existe dans la table utilisateurs un
enregistrement dont le login ET le mot de passe
correspondent aux données fournies par l'utilisateur.
SELECT * FROM utilisateurs where login='<terme1>' and
password ='<terme2>' ;
terme1 => Le login rentré dans le formulaire
terme2 => Le mot de passe rentré dans le formulaire
Failles web : Les bases
La loi c'est moi
L'astuce utilisée pour contourner le filtre lors de la recherche
d'un utilisateur est valable dans ce cas de figure également.
Si on rentre un login au hasard et que le mot de passe
(choisi lui aussi au hasard) se termine par ' OR 1=1 #
Alors le serveur de base de donnée renverra un résultat et
l’accès sera autorisé .
Failles web : Les bases
L'union fait la force
Obtenir l’accès à l'interface d'administration est une chose,
obtenir le mot de passe des utilisateurs en est une autre.
Beaucoup de personnes utilisent le même mot de passe pour
tous les sites sur lesquels ils sont inscrits. C'est donc une
données très convoitées.
Il est possible de demander à la base de données de
renvoyer le résultat de plusieurs requêtes dans un seul
tableau de résultats.
Failles web : Les bases
L'union fait la force
Il est possible de demander une liste de noms et prénoms
provenant d'une table à laquelle on ajoutera une liste de
codes postaux et villes provenant d'une autre table.
Les données renvoyées pourraient être celles ci :
Kevin
Jean
59600
59460
Durand
Paul
Maubeuge
Jeumont
Failles web : Les bases
Syntaxe
SELECT nom,prenom FROM employés UNION SELECT
code,ville FROM localités
Attention : Le nombre de champs retournés par les 2
requêtes doit être identique. La requête suivante est
invalide :
SELECT nom,prenom,age FROM employés UNION SELECT
code,ville FROM localités
Failles web : Les bases
Obtenir les mots de passe
La page de recherche des utilisateurs peut servir à lister les
mots de passe. En contournant le filtre et en injectant du
code qui va réaliser une UNION il va être possible de voir
s'afficher des données normalement inaccessibles
Essayez le login george' UNION SELECT 1,2,3,4 #
Les chiffres 2 et 3 apparaissent car il n'y a pas d'utilisateur
dont le login est george mais l'union à renvoyer des
résultats
Failles web : Les bases
Obtenir les mots de passe
On sait maintenant qu'on peut utiliser le champ 2 et le
champ 3 afin d'afficher les informations (les champs 1 et 4
n'étant pas affichés).
Essayez le login george' UNION SELECT
1,login,password,4 FROM utilisateurs #
La liste des utilisateurs et leurs mots de passe respectifs
s'affiche.
Failles web : Les bases
Comment se protéger ?
Les visiteurs :
Aucun moyen véritable
● Ne pas utiliser le même mot de passe
partout
●
Le serveur :
● Utiliser des requêtes préparées.
● Utiliser des fonctions d’échappement
● Mettre en place un filtre "liste-blanche"
Failles web : Les bases
Pour expérimenter :
De nombreuses plate formes de challenge
sont disponibles sur Internet :
http://www.newbiecontest.org
● http://www.root-me.org
● http://www.wechall.net
●
Mais aussi des challenges non virtuels tels
que le Hacknowledge-contest :
●
www.hacknowledge-contest.org
Téléchargement