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