SlideShare ist ein Scribd-Unternehmen logo
1 von 69
COMMENT PIRATER
PHP SANS SE FATIGUER



        Microsoft TechDays 2010,
        Paris, France, 10 février 2010
            1
MENU DU JOUR


Comment attaquer une application Web

  Découverte

  Code ouvert

  Cas réels



                         2
AFUP




http://www.afup.org/
         3
AYE’ CAPTAIN

Groupe Alter Way

Damien Seguy

   damien.seguy@alterway.fr

Expertise PHP MySQL

Livre blanc industrialisation



                                4
QUESTIONS?
   RÉPONSES?
LA SÉCURITÉ?

Protéger le compte root

Abus de ressources

Destruction de données

Modification de données

Lecture de données

Simple ridicule...
VOCABULAIRE
Découverte

   En apprendre plus sur l’application

Vulnérabilité

   Une faille qui permet de perturber le système

Attaque

   Une vulnérabilité avec un objectif


                           8
MONTJOIE SAINT DENIS!
Mettez-vous dans la peau
d’un pirate

Commencez par découvrir,
puis affinez

   Quels sont les points
   d’entrée accessibles?

   Comment les exploiter?

Comment puis-je détourner
cette application?
                            9
A L’ABORDAGE
INFORMATIONS EN VRAC

curl, wget, firefox

HTTP headers reader
ROBOTS.TXT




http://www.pcf.fr/robots.txt
ROBOTS.TXT


Empoisonnez les données

  Ne mettez pas seulement les dossiers à protéger

  Mettez des dossiers qui n’existent pas

  Notez les IP qui s’y connectent

Vérifiez en ligne les URLs de votre site
STEGANOGRAPHIE



L’art de cacher les
choses à la vue de tous

Trouvez la tour la plus
haute du monde dans
l’image suivante
STEGANOGRAPHIE



L’art de cacher les
choses à la vue de tous

Trouvez la tour la plus
haute du monde dans
l’image suivante
STEGANOGRAPHIE



L’art de cacher les
choses à la vue de tous

Trouvez la tour la plus
haute du monde dans
l’image suivante
PAR DÉFAUT


Signatures dans les
entêtes HTTP

Alias apache : /icons/

Le listage de dossiers est
mauvais
DONNÉES CACHÉES

La page 404

https

Dossiers communs

  includes, inc, lib, etc, ini, config,

  hidden, protected, archives, bills, factures

  admin, adm, admnistrateur, administrator, erreurs, classes

  pma, phpmyadmin,
ACCÈS CODE SOURCE

Tous les fichiers innocents

   .ini, .yaml, .xml, .log, INSTALL.txt, zip, doc, odt,

Dossiers assistants :

   .svn, CVS, .ssh, .git, .bazaar, .bash_history...

Fichiers :

   phpinfo.php, trace.axd
NE PAS FAIRE!
MÊME EN ASP
MÊME EN ASP
BONNES PRATIQUES



Utilisez un dossier hors Web

Utilisez de préférences des directives du serveur Web

Relisez régulièrement votre dossier Web
AFFICHAGE D’ERREURS
AFFICHAGE D’ERREURS
Erreurs PHP

  display_errors = off

  error_reporting = E_ALL & ~E_NOTICE

Erreurs de base de données

  print mssql_get_last_error()

  || die mssql_get_last_error() ou page blanche

Essayez les assertions

  beaucoup mieux que var_dump et echo
VICIEUX ?
TESTS
Listez tous les fichiers de votre application

Accédez directement aux fichiers (sans variables) et dossiers

Transformez les variables en tableaux

  url.php?x[]=0 ou url.php?x[][][]=0

Recherchez du code PHP, SQL dans la page de résultat

Ajoutez des variables courantes (debug, admin)

Combinez GET, POST et COOKIES
FUZZING

Ces tests sont longs et pénibles

  Automatisez les!

Construisez des dictionnaires de valeurs

Testez les combinaisons

Souvent

Automatiquement
COTÉ CODE SOURCE
MORT À REGISTER_GLOBALS




   register_globals = 0ff
MORT À REGISTER_GLOBALS


Il y a pas moins de




                      méthodes pour émuler register globals
MORT À REGISTER_GLOBALS




                      5
Il y a pas moins de




                      méthodes pour émuler register globals
MORT À REGISTER_GLOBALS
MORT À REGISTER_GLOBALS


import_request_vars('P')
MORT À REGISTER_GLOBALS


import_request_vars('P')

extract($_GET)
MORT À REGISTER_GLOBALS


import_request_vars('P')

extract($_GET)

foreach ($_POST as $k => $v)
  { $$k = $v; }
MORT À REGISTER_GLOBALS


import_request_vars('P')

extract($_GET)

foreach ($_POST as $k => $v)
  { $$k = $v; }

$GLOBALS[]
MORT À REGISTER_GLOBALS


import_request_vars('P')

extract($_GET)

foreach ($_POST as $k => $v)
  { $$k = $v; }

$GLOBALS[]

parse_str()
MORT À REGISTER_GLOBALS



Pire que l’original

Toujours impossible de savoir
si une variable est propre ou pas!

Transférez les données dans un tableau $_CLEAN
Fichiers   4073   2086   4543

  Lignes

  $_GET     149    17     318

 $_POST     252    20     481

$_REQUEST   46      3     8098
DOS PAR $_REQUEST

$_REQUEST : $_GET, $_POST et COOKIES!

Si l’état peut être modifié via $_REQUEST,
il peut être figé par COOKIE!

Exemple : déconnexion par logoff = ON :

  Les utilisateurs sont bloqués hors de l’application

  Même les administrateurs

  Il faut retirer les cookies du navigateur pour retrouver
  l’accès
MANTRA DE SÉCURITÉ



Validez en entrée
Protégez en sortie
PREG_DANGERS()
PREG_DANGERS()

Les REGEX ne vérifie que des chaînes de caractères

  Aucune sémantique

/^d+$/ n’est pas un nombre!

  C’est une chaîne de chiffres, sur une ligne

  Attentions aux cas particuliers $

     "100nEt encore autre chose!"
TESTEZ VOS FILTRES


Isolez-les

Ajoutez une série de tests unitaires pour voir leur réaction

   Un peu de fuzzing, aléatoire

   Un gros dictionnaire de données maison

Vérifiez-les souvent
ATTAQUE PAR PHP_SELF



PHP_SELF est produit par le navigateur

Apache le traite

PHP le traite autrement
NE PAS FAIRE CONFIANCE


http://site.com/chemin/fichier.php/<XSS>?yo

  Apache : /chemin/fichier.php

  PHP : /chemin/fichier.php/<XSS>

Valable pour PHP_SELF, HTTP_*, HTTP_REFERER, etc.

Toujours valider et protéger
les données $_SERVER avant de les utiliser
INJECTION PAR GIF

Prenez une image GIF, ajoutez phpinfo()

Envoyez la sur le site

Si tous les fichiers sont traités par PHP...
ATTENTION AUX UPLOADS


Stockez les fichiers hors Web, avec VOS noms et extensions

  Stockez les noms de fichiers en base

  Protégez-les noms de fichiers

Attention à la modération!

Double attention aux fichiers PHP
DAMIEN.SEGUY@ALTERWAY.FR

HTTP://WWW.MICROSOFT.COM/FRANCE/MSTECHDAYS/
PROGRAMMES/DEFAULT.ASPX

HTTP://WWW.SLIDESHARE.NET/DSEGUY

Weitere ähnliche Inhalte

Andere mochten auch

Briet Suzanne
Briet SuzanneBriet Suzanne
Briet Suzanne
Lyrae
 
Pourquoi les blogs ne sont pas morts ?
Pourquoi les blogs ne sont pas morts ?Pourquoi les blogs ne sont pas morts ?
Pourquoi les blogs ne sont pas morts ?
Vanina Delobelle
 
Réseaux sociaux et business par ETO
Réseaux sociaux et business  par ETORéseaux sociaux et business  par ETO
Réseaux sociaux et business par ETO
L'Atelier BNP Paribas
 

Andere mochten auch (20)

Informativo aciuaa enero 2014
Informativo aciuaa  enero 2014Informativo aciuaa  enero 2014
Informativo aciuaa enero 2014
 
Ciudadania digital en salud
Ciudadania digital en saludCiudadania digital en salud
Ciudadania digital en salud
 
Quién soy 9 b
Quién soy 9 bQuién soy 9 b
Quién soy 9 b
 
Treli, opciones en fibra de vidrio
Treli, opciones en fibra de vidrioTreli, opciones en fibra de vidrio
Treli, opciones en fibra de vidrio
 
www.schreibman.de
www.schreibman.dewww.schreibman.de
www.schreibman.de
 
La Plus Grande Historie Qu On Ait Jamais Contee
La Plus Grande Historie Qu On Ait Jamais ConteeLa Plus Grande Historie Qu On Ait Jamais Contee
La Plus Grande Historie Qu On Ait Jamais Contee
 
Statuts de l'association France Insomnie
Statuts de l'association France InsomnieStatuts de l'association France Insomnie
Statuts de l'association France Insomnie
 
Briet Suzanne
Briet SuzanneBriet Suzanne
Briet Suzanne
 
Hotel Saint Bleu Saint Martin
Hotel Saint Bleu  Saint MartinHotel Saint Bleu  Saint Martin
Hotel Saint Bleu Saint Martin
 
Pourquoi les blogs ne sont pas morts ?
Pourquoi les blogs ne sont pas morts ?Pourquoi les blogs ne sont pas morts ?
Pourquoi les blogs ne sont pas morts ?
 
Cecrl
CecrlCecrl
Cecrl
 
Proyecto raee
Proyecto raeeProyecto raee
Proyecto raee
 
Manuscrit thèse - Benoit LANGARD
Manuscrit thèse - Benoit LANGARDManuscrit thèse - Benoit LANGARD
Manuscrit thèse - Benoit LANGARD
 
wicr
wicrwicr
wicr
 
Réseaux sociaux et business par ETO
Réseaux sociaux et business  par ETORéseaux sociaux et business  par ETO
Réseaux sociaux et business par ETO
 
Hyde Park Portaldarte
Hyde Park PortaldarteHyde Park Portaldarte
Hyde Park Portaldarte
 
test
testtest
test
 
Aunaturel.
Aunaturel.Aunaturel.
Aunaturel.
 
Galanterie
GalanterieGalanterie
Galanterie
 
Valider Savaria
Valider  SavariaValider  Savaria
Valider Savaria
 

Ähnlich wie Techdays 2010 : comment hacker PHP sans se fatiguer

Securitedesapplications 091011120426-phpapp02
Securitedesapplications 091011120426-phpapp02Securitedesapplications 091011120426-phpapp02
Securitedesapplications 091011120426-phpapp02
Asma Messaoudi
 
Api - mix it 2013
Api - mix it 2013Api - mix it 2013
Api - mix it 2013
Eric D.
 

Ähnlich wie Techdays 2010 : comment hacker PHP sans se fatiguer (20)

Wordpress et la sécurité des plugins
Wordpress et la sécurité des pluginsWordpress et la sécurité des plugins
Wordpress et la sécurité des plugins
 
Enrichir vos contenus Wordpress avec les API - WPTech 2015
Enrichir vos contenus Wordpress avec les API - WPTech 2015Enrichir vos contenus Wordpress avec les API - WPTech 2015
Enrichir vos contenus Wordpress avec les API - WPTech 2015
 
La sécurite pour les developpeurs - OWF
La sécurite pour les developpeurs - OWFLa sécurite pour les developpeurs - OWF
La sécurite pour les developpeurs - OWF
 
Pots de Miel, Honeypot informatique - Sécurité informatique
Pots de Miel, Honeypot informatique - Sécurité informatiquePots de Miel, Honeypot informatique - Sécurité informatique
Pots de Miel, Honeypot informatique - Sécurité informatique
 
Securitedesapplications 091011120426-phpapp02
Securitedesapplications 091011120426-phpapp02Securitedesapplications 091011120426-phpapp02
Securitedesapplications 091011120426-phpapp02
 
Webinaire : sécurité informatique sur le web - Jérôme Thémée
Webinaire : sécurité informatique sur le web - Jérôme ThéméeWebinaire : sécurité informatique sur le web - Jérôme Thémée
Webinaire : sécurité informatique sur le web - Jérôme Thémée
 
Comprendre la securite web
Comprendre la securite webComprendre la securite web
Comprendre la securite web
 
Prévention et traitement du hack de serveurs
Prévention et traitement du hack de serveursPrévention et traitement du hack de serveurs
Prévention et traitement du hack de serveurs
 
PSES - La securite pour les développeurs
PSES - La securite pour les développeursPSES - La securite pour les développeurs
PSES - La securite pour les développeurs
 
OWASP Top Ten 2007 - Sommaire executif - French version
OWASP Top Ten 2007 - Sommaire executif - French versionOWASP Top Ten 2007 - Sommaire executif - French version
OWASP Top Ten 2007 - Sommaire executif - French version
 
La securite pour les développeurs au RMLL 2015
La securite pour les développeurs au RMLL 2015La securite pour les développeurs au RMLL 2015
La securite pour les développeurs au RMLL 2015
 
Mots de passe : Protégez-les, gérez-les, oubliez-les !
Mots de passe : Protégez-les, gérez-les, oubliez-les !Mots de passe : Protégez-les, gérez-les, oubliez-les !
Mots de passe : Protégez-les, gérez-les, oubliez-les !
 
Api - mix it 2013
Api - mix it 2013Api - mix it 2013
Api - mix it 2013
 
Présentation de CakePHP, 22/04/2010
Présentation de CakePHP, 22/04/2010Présentation de CakePHP, 22/04/2010
Présentation de CakePHP, 22/04/2010
 
De Legacy à Symfony
De Legacy à SymfonyDe Legacy à Symfony
De Legacy à Symfony
 
De legacy à symfony
De legacy à symfonyDe legacy à symfony
De legacy à symfony
 
Démo Gatling au Performance User Group de Casablanca - 25 sept 2014
Démo Gatling au Performance User Group de Casablanca - 25 sept 2014Démo Gatling au Performance User Group de Casablanca - 25 sept 2014
Démo Gatling au Performance User Group de Casablanca - 25 sept 2014
 
Ecrire et déployer une appli PHP maintenable
Ecrire et déployer une appli PHP maintenableEcrire et déployer une appli PHP maintenable
Ecrire et déployer une appli PHP maintenable
 
Securité web
Securité webSecurité web
Securité web
 
Administration de plusieurs sites TYPO3
Administration de plusieurs sites TYPO3Administration de plusieurs sites TYPO3
Administration de plusieurs sites TYPO3
 

Mehr von Damien Seguy

Mehr von Damien Seguy (20)

Strong typing @ php leeds
Strong typing  @ php leedsStrong typing  @ php leeds
Strong typing @ php leeds
 
Strong typing : adoption, adaptation and organisation
Strong typing : adoption, adaptation and organisationStrong typing : adoption, adaptation and organisation
Strong typing : adoption, adaptation and organisation
 
Qui a laissé son mot de passe dans le code
Qui a laissé son mot de passe dans le codeQui a laissé son mot de passe dans le code
Qui a laissé son mot de passe dans le code
 
Analyse statique et applications
Analyse statique et applicationsAnalyse statique et applications
Analyse statique et applications
 
Top 10 pieges php afup limoges
Top 10 pieges php   afup limogesTop 10 pieges php   afup limoges
Top 10 pieges php afup limoges
 
Top 10 php classic traps DPC 2020
Top 10 php classic traps DPC 2020Top 10 php classic traps DPC 2020
Top 10 php classic traps DPC 2020
 
Meilleur du typage fort (AFUP Day, 2020)
Meilleur du typage fort (AFUP Day, 2020)Meilleur du typage fort (AFUP Day, 2020)
Meilleur du typage fort (AFUP Day, 2020)
 
Top 10 php classic traps confoo
Top 10 php classic traps confooTop 10 php classic traps confoo
Top 10 php classic traps confoo
 
Tout pour se préparer à PHP 7.4
Tout pour se préparer à PHP 7.4Tout pour se préparer à PHP 7.4
Tout pour se préparer à PHP 7.4
 
Top 10 php classic traps php serbia
Top 10 php classic traps php serbiaTop 10 php classic traps php serbia
Top 10 php classic traps php serbia
 
Top 10 php classic traps
Top 10 php classic trapsTop 10 php classic traps
Top 10 php classic traps
 
Top 10 chausse trappes
Top 10 chausse trappesTop 10 chausse trappes
Top 10 chausse trappes
 
Code review workshop
Code review workshopCode review workshop
Code review workshop
 
Understanding static analysis php amsterdam 2018
Understanding static analysis   php amsterdam 2018Understanding static analysis   php amsterdam 2018
Understanding static analysis php amsterdam 2018
 
Review unknown code with static analysis php ce 2018
Review unknown code with static analysis   php ce 2018Review unknown code with static analysis   php ce 2018
Review unknown code with static analysis php ce 2018
 
Everything new with PHP 7.3
Everything new with PHP 7.3Everything new with PHP 7.3
Everything new with PHP 7.3
 
Php 7.3 et ses RFC (AFUP Toulouse)
Php 7.3 et ses RFC  (AFUP Toulouse)Php 7.3 et ses RFC  (AFUP Toulouse)
Php 7.3 et ses RFC (AFUP Toulouse)
 
Tout sur PHP 7.3 et ses RFC
Tout sur PHP 7.3 et ses RFCTout sur PHP 7.3 et ses RFC
Tout sur PHP 7.3 et ses RFC
 
Review unknown code with static analysis php ipc 2018
Review unknown code with static analysis   php ipc 2018Review unknown code with static analysis   php ipc 2018
Review unknown code with static analysis php ipc 2018
 
Code review for busy people
Code review for busy peopleCode review for busy people
Code review for busy people
 

Techdays 2010 : comment hacker PHP sans se fatiguer