Exploitation des failles upload

Documents pareils
Stockage du fichier dans une table mysql:

TP JAVASCRIPT OMI4 TP5 SRC

Mise en place d un serveur Proxy sous Ubuntu / Debian

Manuel d'utilisation de l'administration du site Japo.ch - 1

L envoi d un formulaire par courriel. Configuration requise Mail Texte Mail HTML Check-list

TP Service HTTP Serveur Apache Linux Debian

Programmation Web. Madalina Croitoru IUT Montpellier

Impact des robots d indexation sur le cache de second niveau de SPIP IMBERTI Christophe - SG/SPSSI/CP2I/DO Ouest 06/06/2012 mis à jour le 05/07/2012

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

FORMATION / CREATION DE SITE WEB / 4 JOURNEES Sessions Octobre 2006

Titre: Version: Dernière modification: Auteur: Statut: Licence:

GUIDE D INSTALLATION. Portaneo Enterprise Portal version 4.0

Technologies du Web. Créer et héberger un site Web. Pierre Senellart. Page 1 / 26 Licence de droits d usage

Introduction. PHP = Personal Home Pages ou PHP Hypertext Preprocessor. Langage de script interprété (non compilé)

Programmation Web TP1 - HTML

Failles des applications Web. Ce document est extrait du travail de diplôme de M. DIZON dans l état.

Catégories de format d'optimisation

CREATION WEB DYNAMIQUE

CREATION D UNE EVALUATION AVEC JADE par Patrick RUER (

Formulaire pour envoyer un mail

Attaques applicatives

Sécurité des sites Web Pas un cours un recueil du net. INF340 Jean-François Berdjugin

Adobe Photoshop. Bonnes pratiques pour une utilisation professionelle CHAPITRE 7

1. La plate-forme LAMP

LAB-Multimedia CMS. Guide d'auto-formation. Copyright by LAB-Multimedia 1/22

Installation d OwnCloud 8.0 sous Debian Avec connexion des utilisateurs active directory et mise en place de HTTPS

Bernard Lecomte. Débuter avec HTML

Command Execution: File Inclusion : SQL injection :... 10

Comment créer un site web Proxy gratuitement!

Logiciel : GLPI Version : SYNCRHONISATION DE GLPI AVEC ACTIVE DIRECTORY. Auteur : Claude SANTERO Config. : Windows 2003.

La photo numérique et les logiciels libres. Asie Photos

PLUGINS Guide du Développeur STEPHANE FERRARI. P l u X m l 5.4

Démonstration de la mise en cache via HTML 5 sur iphone

Remote Cookies Stealing SIWAR JENHANI (RT4) SOUHIR FARES (RT4)

Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des Bases de Données avec PHP

Industrialiser la gestion des fichiers multimédia. Aurélien Navarre

CMS Made Simple Version 1.4 Jamaica. Tutoriel utilisateur Récapitulatif Administration

Rapport de projet Site web pour une association

Détail des spécificités techniques formats de publicité Web Régie publicitaire internet FIGAROMEDIAS - Contact : traffic-web@figaromedias.

Editer un script de configuration automatique du proxy

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

Présentation. Référenciel : textes officiels

MANUEL D INSTALLATION D UN PROXY

GUIDE PRATIQUE déplacements professionnels temporaires en France et à l étranger

PRO CED U RE D I N STALLATI O N

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Créer un site Web : mode d emploi Sous SPIP, avec le squelette «établissement» de l académie de Versailles

Attaques de type. Brandon Petty

webmestre : conception de sites et administration de serveurs web 42 crédits Certificat professionnel CP09

Création de formulaires interactifs

INSTALLATION ET CONFIGURATION D'UN SERVEUR WEB SUR MAC OS X

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

LANGAGUE JAVA. Public Développeurs souhaitant étendre leur panel de langages de programmation

Sauvegarder la base de données de Drupal avec le module Backup and Migrate

SQUID Configuration et administration d un proxy

Installation sur un serveur personnel

Votre site Internet avec FrontPage Express en 1 heure chrono

PHP 5.4 Développez un site web dynamique et interactif

Installation locale de JOOMLA SEPIA

TP réseaux 4 : Installation et configuration d'un serveur Web Apache

Eyes Of Network 4.0. Documentation d installation et de configuration

Joomla! Création et administration d'un site web - Version numérique

Création de maquette web

Présentation du relais HTTP Open Source Vulture. Arnaud Desmons Jérémie Jourdin

Comparatif CMS. Laurent BAUREN S Bérenger VIDAL Julie NOVI Tautu IENFA

Pack Fifty+ Normes Techniques 2013

Failles XSS : Principes, Catégories Démonstrations, Contre mesures

Rendre un plan de cours interactif avec Médiator

PLAN. Qui peut faire quoi? Présentation. L'internaute Consulte le site public

Le serveur web Apache

Procédure d'installation

Spécifications Techniques - Tablettes

BTS S.I.O PHP OBJET. Module SLAM4. Nom du fichier : PHPRévisionObjetV2.odt Auteur : Pierre Barais

Les serveurs WEBUne introduction

COMMENT PUBLIER SUR ARIANE?

Manuel. Nero MediaHome. Nero AG

Faire fonctionner symfony sous wamp et windows avec des vhost. Installation de wamp

Serveur proxy Squid3 et SquidGuard

Cours Microfer Chartres

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Google Adresses. Validez la fiche de votre entreprise ou organisation sur Google Maps

Installation du serveur WEB Apache ( MySQL, PHP) sous Debian 7.

But de cette présentation. Proxy filtrant avec Squid et SquidGuard. Serveur proxy. Serveur proxy. Hainaut P

Aide à la clé pédagogique «Former à la première intervention et à l évacuation»» 2 e édition

FinImportExport Documentation Utilisateur Gestion d'environnement dans Fininfo Market

ADF Reverse Proxy. Thierry DOSTES

WEBINAIRES - DÉTAILS Marchés Clientèles Prix de présence Horaire Nombre de présentateurs Titre

Proposition année universitaire-informatique ( )

Initiation à linfographie

Dans l'article précédent, vous avez appris

Intro: WordPress SEO Version Française

Techniques de Programmation pour Internet

Table des matières. 1 À propos de ce manuel Icônes utilisées dans ce manuel Public visé Commentaires...

Drupal Développeur. Theming et développement pour Drupal. Une formation Formateur : Fabien Crépin. Drupal Développeur.

SpeechiTablet Notice d utilisation

Principales failles de sécurité des applications Web Principes, parades et bonnes pratiques de développement

Transcription:

Exploitation des failles upload Version Date Révision Auteur 1.0 29/12/2014 Initiation du document Shura

Description Toutes les fonctions web d'upload de fichiers sont potentiellement vulnérables. L'expérience nous montre que régulièrement ces fonctions ne sont pas correctement sécurisées. Dans cet article nous aborderons plusieurs exemples de protections et vulnérabilités afin de mieux les comprendre et savoir comment les contourner. Sécurité cotée client Les restrictions cotées client sont les plus faciles à contourner, on peut les trouver en JavaScript, on ne s'attardera pas dessus. Ci-dessous un exemple de formulaire qui fera appel à une fonction JavaScript qui pourrait par exemple être chargée de surveiller l'extension des fichiers. <h1>upload image</h1> <form enctype="multipart/form-data" method="post" action=""> <p> <label>image</label> <input type="file" name="image" /> <br /><br /> <a href="javascript: checksecurity()">envoyer</a> </p> </form> Pour contourner ces protections il y a plusieurs méthodes possibles. Par exemple nous pouvons enregistrer le formulaire sur notre machine, supprimer les protections, mettre l'adresse du site et le chemin de la page PHP dans les champs «action» de «form» créant ainsi notre formulaire sans les restrictions. Sécurité cotée serveur Etudions quelques protections PHP afin de voir leurs faiblesses. Dans notre démonstration l'objectif étant d'envoyer le fichier PHP suivant. Protection par type de contenu Le code suivant prend en considération le type de contenu du fichier et n'autorise que le contenu de type image/png. if ($_FILES['image']['type']!= 'image/png') print "Erreur! seul les png sont autorisés."; if (file_exists($file) == true) 2

print "Erreur! Fichier existant."; Si l'on envoie un fichier PHP nous verrons un message d'erreur. Si l'on envoie un fichier PNG il sera correctement uploadé. La faille dans cette protection est que le type de contenu est envoyé depuis le client. Par conséquent si nous modifions le type de contenu de notre fichier PHP celui-ci sera uploadé. Prenez notre proxy préféré (ou plugin de navigateur) et modifiez la valeur postée «Content-Type : application/octect-stream» par «Content-Type : image/png». Ainsi votre fichier PHP sera uploadé. Protection par extension Imaginons un code PHP qui vérifie que l'extension du fichier uploadé soit parmi les extensions valides (exemple :.jpg,.gif,.png). $whitelist = array (".jpg", ".gif", ".png"); $key = false; foreach ($whitelist as $item) if (preg_match("/$item$/i", $_FILES['image']['name'])) $key = true; break; if ($key == false) print "Erreur! seul les images sont autorisés."; if (file_exists($file) == true) print "Erreur! Fichier existant."; 3

La faille cette fois ne vient pas que de notre script, celui se contente de vérifier les extensions et si elles correspondent avec celles de la white list, le fichier est autorisé. Il arrive que la configuration d'apache avec l'utilisation d'un code comme celui ci-dessus provoque une faille de sécurité. Quand Apache est configuré pour exécuter un script il y a deux façons de le configurer : en utilisant AddHandler ou AddType. Dans les deux cas si la configuration suivante est utilisée l'image sera interprétée. AddHandler application/x-httpd-php.gif # Ou AddType application/x-httpd-php.gif Ce genre de configuration d'apache est utilisé plus fréquemment que l'on pourrait le penser, on peut les trouver par exemple dans le cas de figure où un code PHP génère dynamiquement un graphique. Il ne reste plus qu'à modifier l'extension de notre fichier test.php en test.gif et le tour est joué. Dans la même catégorie, si le serveur Apache utilise la configuration ci-dessous nous sommes en présence d'une autre faille. AddHandlerapplication/x-httpd-php.php Le problème est que tous les fichiers ayant dans leurs noms «.php» seront interprétés par PHP, aussi bien test.php que test.php.gif. Cette fois en renommant notre test.php en test.php.gif notre fichier passera le script de restriction des extensions et sera interprété avec succès. Protection avec getimagesize() Ce n'est pas une protection, mais est régulièrement utilisé comme tel (ou pas), la fonction getimagesize() détermine la taille de l'image fournie et en retourner les dimensions, elle peut également retourner plus d'informations comme le type de fichier. Utilisons un script qui vérifie le type de l'image avec cette fonction et n'autorise que les JPG. $imageinfo = getimagesize($_files['image']['tmp_name']); if ($imageinfo["mime"]!= "image/jpeg") print "Erreur! seul les JPG sont autorisés."; if (file_exists($file) == true) print "Erreur! Fichier existant."; 4

Il ne suffira pas de changer le content-type comme on l'a vu précédemment, car cette fonction travaille directement sur le fichier uploadé dans le dossier temporaire. Il va falloir ruser un peu et lui fournir une vraie image pour qu'il passe le filtre, cette image aura l'extension «.php» pour qu Apache demande à PHP de l'interpréter et qu'il y ait du code PHP dedans. Prenez une image quelconque JPG, puis utilisez GIMP pour lui insérer du code PHP (Image > Propriétés de l'image > Commentaire). Enregistrez l'image et changez son extension en «.php». Le fichier va passer le filtre et une fois sur le serveur il pourra être interprété. echo phpinfo(); // on stop l'interprétation pour éviter que les caractères suivants du contenu de l'image génèrent des erreurs. halt_compiler(); Protection avec.htaccess Une autre façon de sécuriser l'envoi de fichiers et de mettre un.htaccess dans le répertoire d'upload qui interdit les extensions de fichiers black listés et n'autorise que les extensions de fichiers images white listés. Ci-dessous, un exemple. Options -Indexes deny from all <FilesMatch "\.(jpeg jpg png gif)$"> Order allow,deny allow from all </FilesMatch> Nous remarquons qu'il n'y a plus la vérification qui permet de déterminer si un fichier du même nom que celui à uploader existe déjà. La faille réside dans ce manque de vérification. Il devient alors possible d'envoyer un fichier.htaccess qui va écraser celui déjà présent. 5

En créant un.htaccess vierges et en l'uploadant celui écrasera l'ancien, supprimant les restrictions. Il est maintenant possible d'appeler notre script du PHP dans le répertoire images 6