Audit Sécurité



vendredi 13 novembre 2009                    1
Ordre du jour

                            •   Présentation de l’atelier

                            •   Audit boîte noir...
Qui parle?

                            •   Philippe Gamache

                            •   Parler haut, interagir libre...
Qui parle?
                            •   Damien Seguy

                            •   Alter Way Consulting :
          ...
Livre sécurité
                            •   Nouvelle édition 2009

                            •   Bilan complet de la
...
Cligraph CRM
                                  •   CRM/GRC Open Source

                                  •   Version 0.99...
Cligraph CRM

                            •   Technologies PHP et MySQL, Javascript

                            •   Code ...
L’atelier sécurité

                            •   Réveillez-vous : vous avez du travail!

                            • ...
Tests boîte noire



                                                9
vendredi 13 novembre 2009                          ...
Tests boîte noire

                            •   Recherche d’informations

                                •   Trouver d...
Tests boîte noire
                            •   Trouver des vulnérabilités

                                •   Trouver ...
Tests boîte noire

                            •   Attaquer

                                •   Attaquer une
            ...
Recherche
                                    d’informations
                            •   Moteurs de recherches

      ...
Recherche
                                    d’informations
                            •   Moteurs de recherches (suite)...
Recherche
                                    d’informations
                            •   Moteurs de recherches (suite)...
Recherche
                                     d’informations
                            •   Google codesearch :

       ...
Recherche
                                     d’informations
                            •   Google codesearch :

       ...
Recherche
                                     d’informations
                            •   Google codesearch :

       ...
Recherche
                                    d’informations
                            •   Google codesearch :

        ...
Recherche
                                     d’informations
                            •   robots.txt

                ...
Recherche
                                     d’informations
                            •   https

                     ...
Recherche
                                    d’informations
                            •   Répertoires courants
        ...
Recherche
                                    d’informations
                            •   theHarvester
                ...
Recherche
                                    d’informations

                            •   Subdomainer
                ...
Recherche
                                   d’informations
                            •   http://www.cligraphcrm.com/


...
Recherche
                            d’informations




vendredi 13 novembre 2009                    26
Recherche
                                   d’informations

                            •   Google

                     ...
Trouver des
                                      vulnérabilités
                            •   Où trouver des vulnérabil...
Trouver des
                                     vulnérabilités

                            •   Comment exploiter cette f...
Outils manuels
                            •   Firefox
                                •   Access Me
                     ...
Outils manuels
                            •   Firefox
                                •   Poster
                        ...
Outils manuels


                            •   Rex Swain's HTTP Viewer
                                http://www.rexswa...
Scanneurs
                                       automatiques
                            •   Simple à mettre en oeuvre

 ...
Scanneurs
                                       automatiques
                            •   Acunetix Web Vulnerability S...
Scanneurs
                                automatiques
                •     Nikto
                      http://www.cirt.n...
Scanneurs
                                      automatiques

                            •   SCRT Webshag
               ...
Fuzzing

                            •   Test par valeur aléatoire

                            •   Stress des formulaires...
Fuzzing
                            •   Tous les caractères de 0 à x255

                            •   Tous les caractèr...
Fuzzing
                            •   Dictionnaires de valeurs

                                •   de vulnérabilités

 ...
Fuzzing
                            •   Excédents de variables

                                •   debug=1, task=view


 ...
Fuzzing
                            •   Burp Suite
                                http://portswigger.net/suite/

        ...
Scénarios
                            •   Des tests plus adaptés

                                •   fragiles

          ...
Scénarios
                            •   Burp Suite
                                http://portswigger.net/suite/

      ...
Scénarios
                            •   SCRT Webshag
                                http://www.scrt.ch/pages_en/outils....
Facilitez votre vie
                            •   Backtrack
                                http://www.remote-exploit.or...
Facilitez votre vie
                            •   Samurai Web Testing Framework
                                http://s...
Sécure ?
vendredi 13 novembre 2009              47
Les prolèmes

                            •   Faux sentiment
                                sécurité

                   ...
Notre cas

                            •   La sécurité par
                                l’insécurité

                 ...
Que faire?

                            •   Tests manuels

                            •   Les sources

                  ...
Les fichiers
                            total 592
                            drwxrwxrwx    25   user   group    850   23 ...
Les fichiers
                            total 592
                            drwxrwxrwx    25   user   group    850   23 ...
Les fichiers
                            total 592
                            drwxrwxrwx    25   user   group    850   23 ...
Les fichiers
                            total 592
                            drwxrwxrwx    25   user   group    850   23 ...
Les fichiers
                            total 592
                            drwxrwxrwx    25   user   group    850   23 ...
Les fichiers
                            cligraphcrm/include/fpdf:
                            total 376
                  ...
Les fichiers
                            cligraphcrm/include/fpdf:
                            total 376
                  ...
Les fichiers
                            cligraphcrm/install/sql/tables:
                            total 928
            ...
Installation




vendredi 13 novembre 2009                  59
Installation




vendredi 13 novembre 2009                  60
Installation




vendredi 13 novembre 2009                  61
Installation




vendredi 13 novembre 2009                  62
Installation




vendredi 13 novembre 2009                  63
Installation




vendredi 13 novembre 2009                  64
Installation




vendredi 13 novembre 2009                  65
Installation




vendredi 13 novembre 2009                  66
Audit de code



vendredi 13 novembre 2009                   67
Ordre du jour

                            •   Lire les logs et repérer les vulnérabilités

                            • ...
Approche
                            •   Un point d’entrée

                            •   Lecture du code

             ...
Outils existants
                   •        Rats
                            http://www.fortifysoftware.com/security-reso...
Trois moteurs

                            •   Grep

                            •   Les expressions rationnelles

       ...
Approches
                                                             Sémantique      Rapide

                           ...
Occurrences
                                     $_GET $_POST $_REQUEST

                            Grep     137    604  ...
Choix

                            •   One-liner contre temps de développement

                            •   Précision ...
Points d’intérêt
                            •   index.php

                            •   index_bis.php

               ...
Points d’intérêt

                               Entrée      Filtrage


                             Traitement     Suivi
...
Cheminement

                            $_GET   pdo_query




                                    pdo_fetch
             ...
Interfaces
                            •   Navigateur        •   Système

                            •   URL             ...
Navigateur
                            •   Entrées

                                •   $_GET, $_POST, $_REQUEST, $_SERVER...
URL
                            •   Entrées

                                •   parse_url, urldecode, rawurldecode

     ...
Cookies
                            •   Entrées

                                •   $_COOKIES, $HTTP_COOKIE_VARS,
       ...
JavaScript
                            •   Entrées

                                •   json_decode

                     ...
SQL
                            •   Entrées

                                •   pdo_query, mysqli_query, query,

        ...
Fichiers
                            •   Entrées

                                •   fopen, file_get_contents, passthru

 ...
PHP
                            •   Entrées

                                •   eval, include, require et _once, dl, preg...
Système
                            •   Entrées

                                •   ini_get, set_limit, getenv, getmypid,...
Trouvailles



vendredi 13 novembre 2009                 87
Register_globals

                            •   Register globals via fct_urldecode dans fonctions/
                     ...
Injections SQL

                            •   $query="select theme_nom from theme where
                                ...
err_nav.php XSS


                            •   init_chem_crm est injecté directement

                            •



...
Téléchargements

                            •   Via les fonctions header()

                            •   Téléchargemen...
$_REQUEST DOS

                            •   $_REQUEST est utilisé pour le logout

                            •   if(is...
include
                            •   $format=$_REQUEST['exp_formdoc'];

                            •   include(fct_lie...
eval

                            •   $nom=addslashes($_REQUEST['nom']);

                            •    eval('insert_ac...
die

                            •   $result2=$_SESSION['cligraph']->request($query2)
                                or d...
Code OK


                            •   Opérateur @

                            •




vendredi 13 novembre 2009        ...
vendredi 13 novembre 2009   97
Prochain SlideShare
Chargement dans…5
×

Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

3 257 vues

Publié le

Durant ce laboratoire, nous allons réaliser un audit sécurité d'une application Web Open Source. L'objectif technique est de dresser un rapport complet, et d'assimiler toutes les phases du travail d'enquête : analyse boîte noire, analyse à code ouvert, recensement des vulnérabilités (XSS, injections, dévoilement, etc), recommandations de renforcement, priorisation des tâches. Toutes les compétences seront mises à l'épreuve dans cet excercice complexe.

Nous travaillerons sur une application réelle : (Nom de l'application à venir ultérieurement). Le laboratoire se terminera avec la remise du rapport aux auteurs de l'application pour qu'ils puissent avoir un regard extérieur sur le niveau de sécurité de l'application.

Publié dans : Technologie
0 commentaire
2 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
3 257
Sur SlideShare
0
Issues des intégrations
0
Intégrations
14
Actions
Partages
0
Téléchargements
197
Commentaires
0
J’aime
2
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

  1. 1. Audit Sécurité vendredi 13 novembre 2009 1
  2. 2. Ordre du jour • Présentation de l’atelier • Audit boîte noire • Audit à code ouvert vendredi 13 novembre 2009 2
  3. 3. Qui parle? • Philippe Gamache • Parler haut, interagir librement : audit de sécurité, formations • Caviste de cidres de glace • info@ph-il.ca vendredi 13 novembre 2009 3
  4. 4. Qui parle? • Damien Seguy • Alter Way Consulting : services experts en logiciels libres • Editeur de calendriers • damien.seguy@alterway.fr vendredi 13 novembre 2009 4
  5. 5. Livre sécurité • Nouvelle édition 2009 • Bilan complet de la sécurité : système, MySQL, PHP, etc • Edité chez Eyrolles • Dédicaces sur demande vendredi 13 novembre 2009 5
  6. 6. Cligraph CRM • CRM/GRC Open Source • Version 0.991 • Activement développé • Soutenu par Cogivea http://www.cogivea.com/ • Léger, rapide et puissant • http://www.cligraphcrm.com/ vendredi 13 novembre 2009 6
  7. 7. Cligraph CRM • Technologies PHP et MySQL, Javascript • Code développé depuis 5 ans • 4970 fichiers • 1200 fichiers PHP • 320 000 lignes de code vendredi 13 novembre 2009 7
  8. 8. L’atelier sécurité • Réveillez-vous : vous avez du travail! • Analyse des logs et identification des problèmes • Discussion des stratégies de protection et contextes • http://192.168.3.73/ de démonstration vendredi 13 novembre 2009 8
  9. 9. Tests boîte noire 9 vendredi 13 novembre 2009 9
  10. 10. Tests boîte noire • Recherche d’informations • Trouver de l’information sur l’application • Que puis-je faire sur cette application? • Où sont les points d'entrée les plus populaires? 10 vendredi 13 novembre 2009 10
  11. 11. Tests boîte noire • Trouver des vulnérabilités • Trouver les trous dans l’application • Scanneurs automatiques • À la main • Fuzzing • Scénarios • Comment puis-je l'utiliser à mon avantage? 11 vendredi 13 novembre 2009 11
  12. 12. Tests boîte noire • Attaquer • Attaquer une vulnérabilité avec un but précis 12 vendredi 13 novembre 2009 12
  13. 13. Recherche d’informations • Moteurs de recherches • Facebook, LinkedIn, Joboom, Monster • Langage de programmation • Logiciels utilisés 13 vendredi 13 novembre 2009 13
  14. 14. Recherche d’informations • Moteurs de recherches (suite) • Google : phpinfo, "Zend engine”, site:nomsite.com • Divulgation de renseignements <b>Notice</b>: undefined </b> on line <b> <b>Warning</b>: </b> on line <b> 14 vendredi 13 novembre 2009 14
  15. 15. Recherche d’informations • Moteurs de recherches (suite) • Krugle : echo $_GET • Bases de données de vulnérabilités • BUGTRAQ • CERT • CVE • Milw0rm 15 vendredi 13 novembre 2009 15
  16. 16. Recherche d’informations • Google codesearch : • XSS lang:php (echo|print).*$_(GET|POST|COOKIE| REQUEST) • Injection SQL lang:php query(.*$_(GET|POST|COOKIE| REQUEST).*) • Injection de code lang:php (include|include_once| require| require_once).*$_(GET| POST|COOKIE|REQUEST) 16 vendredi 13 novembre 2009 16
  17. 17. Recherche d’informations • Google codesearch : • Injection d'en-tête HTTP lang:php headers*(.*$_(SERVER| GET|POST| COOKIE|REQUEST).*) • Fixation de session lang:php session_start() lang:php session_regenerate_id() 17 vendredi 13 novembre 2009 17
  18. 18. Recherche d’informations • Google codesearch : • Affichage arbitraire de fichiers lang:php (fopen|readfile|file_get_contents)s* (.*$(_GET|_POST|HTTP_GET_VARS| HTTP_POST_VARS).*) 18 vendredi 13 novembre 2009 18
  19. 19. Recherche d’informations • Google codesearch : • Mots de passes filetype:sql INSERT intitle:"phpinfo()" +".default_password" ! +"Zend Scripting Language Engine" lang:php _connects*(.*,.*,("|').*("|').*) lang:php "VBULLETIN IS NOT FREE SOFTWARE" lang:php "XCART_SESSION_START" lang:php $passw+s*=s*('|")w+('|"); 19 vendredi 13 novembre 2009 19
  20. 20. Recherche d’informations • robots.txt • Alias Apache • /icons/ • Signatures dans les en têtes • curl, wget, Firefox, Rex Swain's HTTP Viewer • .phps 20 vendredi 13 novembre 2009 20
  21. 21. Recherche d’informations • https • Page 404 • Page blanche • arrêt de code sans affichage d'erreur 21 vendredi 13 novembre 2009 21
  22. 22. Recherche d’informations • Répertoires courants • includes • admin • tmp • data • db • uploads 22 vendredi 13 novembre 2009 22
  23. 23. Recherche d’informations • theHarvester http://www.edge-security.com/theHarvester.php • MetaGoofil http://www.edge-security.com/metagoofil.php • Nikto http://www.cirt.net/ • SEAT (Search Engine Assessment Tool) http://midnightresearch.com/projects/search- engine-assessment-tool/ 23 vendredi 13 novembre 2009 23
  24. 24. Recherche d’informations • Subdomainer http://www.edge-security.com/subdomainer.php 24 vendredi 13 novembre 2009 24
  25. 25. Recherche d’informations • http://www.cligraphcrm.com/ vendredi 13 novembre 2009 25
  26. 26. Recherche d’informations vendredi 13 novembre 2009 26
  27. 27. Recherche d’informations • Google • Google codesearch • Milm0rm vendredi 13 novembre 2009 27
  28. 28. Trouver des vulnérabilités • Où trouver des vulnérabilités? • XSS • CSRF • Injections • Remplacement de fichiers • etc. 28 vendredi 13 novembre 2009 28
  29. 29. Trouver des vulnérabilités • Comment exploiter cette faiblesse? • Que faire avec cette faille? 29 vendredi 13 novembre 2009 29
  30. 30. Outils manuels • Firefox • Access Me • Firebug • Firecookie • FirePHP • HackBar • Header Spy • JavaScript Debugger 30 vendredi 13 novembre 2009 30
  31. 31. Outils manuels • Firefox • Poster • SQL Inject Me • SQL Injection! • User Agent Switcher • Web Developer • X-Forwarded-For Spoofer • XSS Me Data 31 vendredi 13 novembre 2009 31
  32. 32. Outils manuels • Rex Swain's HTTP Viewer http://www.rexswain.com/httpview.html 32 vendredi 13 novembre 2009 32
  33. 33. Scanneurs automatiques • Simple à mettre en oeuvre • Permets de trouver les attaques les plus courantes • Doivent être adaptés • Mis à jour régulièrement • Personnalisables 33 vendredi 13 novembre 2009 33
  34. 34. Scanneurs automatiques • Acunetix Web Vulnerability Scanner http://www.acunetix.com/vulnerability-scanner/ • BeEF http://www.bindshell.net/tools/beef/ • Burp Suite http://portswigger.net/suite/ • Metasploit http://www.metasploit.com/ 34 vendredi 13 novembre 2009 34
  35. 35. Scanneurs automatiques • Nikto http://www.cirt.net/ • PBlind http://www.edge-security.com/pblind.php • Scrawlr https://download.spidynamics.com/Products/scrawlr/ • SCRT Mini MySqlat0r http://www.scrt.ch/pages_en/minimysqlator.html 35 vendredi 13 novembre 2009 35
  36. 36. Scanneurs automatiques • SCRT Webshag http://www.scrt.ch/pages_en/outils.html • XSSploit http://www.scrt.ch/pages_en/xssploit.html 36 vendredi 13 novembre 2009 36
  37. 37. Fuzzing • Test par valeur aléatoire • Stress des formulaires • Bases de données • Test décomplexé 37 vendredi 13 novembre 2009 37
  38. 38. Fuzzing • Tous les caractères de 0 à x255 • Tous les caractères Unicode • Les nombres 1, 0, -1, 0.99, extrêmes, infinis • Chaînes • Longues • courtes 38 vendredi 13 novembre 2009 38
  39. 39. Fuzzing • Dictionnaires de valeurs • de vulnérabilités • GET, POST, COOKIE • Des variables tableaux • c[]=1 39 vendredi 13 novembre 2009 39
  40. 40. Fuzzing • Excédents de variables • debug=1, task=view • Manque de variables • Encodages variés • UTF-8, Latin1, HTML, hexa 40 vendredi 13 novembre 2009 40
  41. 41. Fuzzing • Burp Suite http://portswigger.net/suite/ • SCRT Webshag http://www.scrt.ch/pages_en/outils.html • WebSlayer http://www.edge-security.com/webslayer.php • Wfuzz http://www.edge-security.com/wfuzz.php 41 vendredi 13 novembre 2009 41
  42. 42. Scénarios • Des tests plus adaptés • fragiles • Automatiser les tests • À utiliser avec le fuzzing • À utiliser avec des serveurs mandataires 42 vendredi 13 novembre 2009 42
  43. 43. Scénarios • Burp Suite http://portswigger.net/suite/ • Firefox • Selenium IDE • Funkload http://funkload.nuxeo.org/ • ProxyStrike http://www.edge-security.com/proxystrike.php 43 vendredi 13 novembre 2009 43
  44. 44. Scénarios • SCRT Webshag http://www.scrt.ch/pages_en/outils.html • WebScarab http://www.owasp.org/index.php/ Category:OWASP_WebScarab_Project 44 vendredi 13 novembre 2009 44
  45. 45. Facilitez votre vie • Backtrack http://www.remote-exploit.org/backtrack.html vendredi 13 novembre 2009 45
  46. 46. Facilitez votre vie • Samurai Web Testing Framework http://samurai.inguardians.com/ vendredi 13 novembre 2009 46
  47. 47. Sécure ? vendredi 13 novembre 2009 47
  48. 48. Les prolèmes • Faux sentiment sécurité • Ne marche pas toujours vendredi 13 novembre 2009 48
  49. 49. Notre cas • La sécurité par l’insécurité • La sécurité par l’instabilité vendredi 13 novembre 2009 49
  50. 50. Que faire? • Tests manuels • Les sources • Installer l’application vendredi 13 novembre 2009 50
  51. 51. Les fichiers total 592 drwxrwxrwx 25 user group 850 23 Feb 12:03 accueil drwxrwxrwx 67 user group 2278 23 Feb 12:03 action drwxrwxrwx 39 user group 1326 23 Feb 12:03 agent drwxrwxrwx 13 user group 442 23 Feb 12:03 biblio drwxrwxrwx 39 user group 1326 23 Feb 12:03 compte -rwxrwxrwx 1 user group 7692 11 Sep 02:44 connect.php -rwxrwxrwx 1 user group 3856 11 Sep 02:44 err_navig.php -rwxrwxrwx 1 user group 3165 11 Sep 02:44 erreur404.php drwxrwxrwx 76 user group 2584 23 Feb 12:03 etat drwxrwxrwx 171 user group 5814 23 Feb 12:03 fonctions drwxrwxrwx 8 user group 272 23 Feb 12:03 images drwxrwxrwx 13 user group 442 23 Feb 12:03 include -rwxrwxrwx 1 user group 2784 11 Sep 02:44 index.php drwxrwxrwx 27 user group 918 23 Feb 12:03 install drwxrwxrwx 80 user group 2720 23 Feb 12:03 inter_pages drwxrwxrwx 6 user group 204 23 Feb 12:03 langue … drwxrwxrwx 7 user group 238 2 Mar 18:15 log drwxrwxrwx 36 user group 1224 23 Feb 12:03 mail vendredi 13 novembre 2009 51
  52. 52. Les fichiers total 592 drwxrwxrwx 25 user group 850 23 Feb 12:03 accueil drwxrwxrwx 67 user group 2278 23 Feb 12:03 action drwxrwxrwx 39 user group 1326 23 Feb 12:03 agent drwxrwxrwx 13 user group 442 23 Feb 12:03 biblio drwxrwxrwx 39 user group 1326 23 Feb 12:03 compte -rwxrwxrwx 1 user group 7692 11 Sep 02:44 connect.php -rwxrwxrwx 1 user group 3856 11 Sep 02:44 err_navig.php -rwxrwxrwx 1 user group 3165 11 Sep 02:44 erreur404.php drwxrwxrwx 76 user group 2584 23 Feb 12:03 etat drwxrwxrwx 171 user group 5814 23 Feb 12:03 fonctions drwxrwxrwx 8 user group 272 23 Feb 12:03 images drwxrwxrwx 13 user group 442 23 Feb 12:03 include -rwxrwxrwx 1 user group 2784 11 Sep 02:44 index.php drwxrwxrwx 27 user group 918 23 Feb 12:03 install drwxrwxrwx 80 user group 2720 23 Feb 12:03 inter_pages drwxrwxrwx 6 user group 204 23 Feb 12:03 langue … drwxrwxrwx 7 user group 238 2 Mar 18:15 log drwxrwxrwx 36 user group 1224 23 Feb 12:03 mail vendredi 13 novembre 2009 52
  53. 53. Les fichiers total 592 drwxrwxrwx 25 user group 850 23 Feb 12:03 accueil drwxrwxrwx 67 user group 2278 23 Feb 12:03 action drwxrwxrwx 39 user group 1326 23 Feb 12:03 agent drwxrwxrwx 13 user group 442 23 Feb 12:03 biblio drwxrwxrwx 39 user group 1326 23 Feb 12:03 compte -rwxrwxrwx 1 user group 7692 11 Sep 02:44 connect.php -rwxrwxrwx 1 user group 3856 11 Sep 02:44 err_navig.php -rwxrwxrwx 1 user group 3165 11 Sep 02:44 erreur404.php drwxrwxrwx 76 user group 2584 23 Feb 12:03 etat drwxrwxrwx 171 user group 5814 23 Feb 12:03 fonctions drwxrwxrwx 8 user group 272 23 Feb 12:03 images drwxrwxrwx 13 user group 442 23 Feb 12:03 include -rwxrwxrwx 1 user group 2784 11 Sep 02:44 index.php drwxrwxrwx 27 user group 918 23 Feb 12:03 install drwxrwxrwx 80 user group 2720 23 Feb 12:03 inter_pages drwxrwxrwx 6 user group 204 23 Feb 12:03 langue … drwxrwxrwx 7 user group 238 2 Mar 18:15 log drwxrwxrwx 36 user group 1224 23 Feb 12:03 mail vendredi 13 novembre 2009 53
  54. 54. Les fichiers total 592 drwxrwxrwx 25 user group 850 23 Feb 12:03 accueil drwxrwxrwx 67 user group 2278 23 Feb 12:03 action drwxrwxrwx 39 user group 1326 23 Feb 12:03 agent drwxrwxrwx 13 user group 442 23 Feb 12:03 biblio drwxrwxrwx 39 user group 1326 23 Feb 12:03 compte -rwxrwxrwx 1 user group 7692 11 Sep 02:44 connect.php -rwxrwxrwx 1 user group 3856 11 Sep 02:44 err_navig.php -rwxrwxrwx 1 user group 3165 11 Sep 02:44 erreur404.php drwxrwxrwx 76 user group 2584 23 Feb 12:03 etat drwxrwxrwx 171 user group 5814 23 Feb 12:03 fonctions drwxrwxrwx 8 user group 272 23 Feb 12:03 images drwxrwxrwx 13 user group 442 23 Feb 12:03 include -rwxrwxrwx 1 user group 2784 11 Sep 02:44 index.php drwxrwxrwx 27 user group 918 23 Feb 12:03 install drwxrwxrwx 80 user group 2720 23 Feb 12:03 inter_pages drwxrwxrwx 6 user group 204 23 Feb 12:03 langue … drwxrwxrwx 7 user group 238 2 Mar 18:15 log drwxrwxrwx 36 user group 1224 23 Feb 12:03 mail vendredi 13 novembre 2009 54
  55. 55. Les fichiers total 592 drwxrwxrwx 25 user group 850 23 Feb 12:03 accueil drwxrwxrwx 67 user group 2278 23 Feb 12:03 action drwxrwxrwx 39 user group 1326 23 Feb 12:03 agent drwxrwxrwx 13 user group 442 23 Feb 12:03 biblio drwxrwxrwx 39 user group 1326 23 Feb 12:03 compte -rwxrwxrwx 1 user group 7692 11 Sep 02:44 connect.php -rwxrwxrwx 1 user group 3856 11 Sep 02:44 err_navig.php -rwxrwxrwx 1 user group 3165 11 Sep 02:44 erreur404.php drwxrwxrwx 76 user group 2584 23 Feb 12:03 etat drwxrwxrwx 171 user group 5814 23 Feb 12:03 fonctions drwxrwxrwx 8 user group 272 23 Feb 12:03 images drwxrwxrwx 13 user group 442 23 Feb 12:03 include -rwxrwxrwx 1 user group 2784 11 Sep 02:44 index.php drwxrwxrwx 27 user group 918 23 Feb 12:03 install drwxrwxrwx 80 user group 2720 23 Feb 12:03 inter_pages drwxrwxrwx 6 user group 204 23 Feb 12:03 langue … drwxrwxrwx 7 user group 238 2 Mar 18:15 log drwxrwxrwx 36 user group 1224 23 Feb 12:03 mail vendredi 13 novembre 2009 55
  56. 56. Les fichiers cligraphcrm/include/fpdf: total 376 -rwxrwxrwx 1 user group 46002 26 Jan 02:41 fpdf.php -rwxrwxrwx 1 user group 705 11 Sep 02:44 fpdf_entete.php -rwxrwxrwx 1 user group 47404 26 Jan 18:07 fpdf_facture.php -rwxrwxrwx 1 user group 14922 26 Jan 14:50 fpdf_html2pdf.php -rwxrwxrwx 1 user group 5238 11 Sep 02:44 fpdf_mem_image.php -rwxrwxrwx 1 user group 7629 11 Sep 02:44 fpdf_memoire.php -rwxrwxrwx 1 user group 1243 11 Sep 02:44 fpdf_table_def.inc -rwxrwxrwx 1 user group 27075 11 Sep 02:44 fpdf_tableau.php -rwxrwxrwx 1 user group 4317 11 Sep 02:44 fpdf_texte.php -rwxrwxrwx 1 user group 12852 11 Sep 02:44 fpdf_writetag.php vendredi 13 novembre 2009 56
  57. 57. Les fichiers cligraphcrm/include/fpdf: total 376 -rwxrwxrwx 1 user group 46002 26 Jan 02:41 fpdf.php -rwxrwxrwx 1 user group 705 11 Sep 02:44 fpdf_entete.php -rwxrwxrwx 1 user group 47404 26 Jan 18:07 fpdf_facture.php -rwxrwxrwx 1 user group 14922 26 Jan 14:50 fpdf_html2pdf.php -rwxrwxrwx 1 user group 5238 11 Sep 02:44 fpdf_mem_image.php -rwxrwxrwx 1 user group 7629 11 Sep 02:44 fpdf_memoire.php -rwxrwxrwx 1 user group 1243 11 Sep 02:44 fpdf_table_def.inc -rwxrwxrwx 1 user group 27075 11 Sep 02:44 fpdf_tableau.php -rwxrwxrwx 1 user group 4317 11 Sep 02:44 fpdf_texte.php -rwxrwxrwx 1 user group 12852 11 Sep 02:44 fpdf_writetag.php vendredi 13 novembre 2009 57
  58. 58. Les fichiers cligraphcrm/install/sql/tables: total 928 -rwxrwxrwx 1 user group 4750 29 Jan 10:44 acces.sql -rwxrwxrwx 1 user group 4802 29 Jan 10:44 acces_type.sql -rwxrwxrwx 1 user group 190 23 Nov 20:12 admin_crm.sql -rwxrwxrwx 1 user group 1111 3 Feb 14:45 adresse.sql -rwxrwxrwx 1 user group 1637 15 Jan 11:24 affaire.sql -rwxrwxrwx 1 user group 578 17 Jan 19:27 affaire_intvt.sql -rwxrwxrwx 1 user group 1544 22 Oct 17:49 affaire_pdt.sql -rwxrwxrwx 1 user group 3231 3 Dec 19:15 agent.sql -rwxrwxrwx 1 user group 581 22 Oct 17:49 argument.sql -rwxrwxrwx 1 user group 3062 25 Jan 09:45 avoir.sql -rwxrwxrwx 1 user group 1605 21 Jan 06:30 avoir_detail.sql -rwxrwxrwx 1 user group 741 22 Oct 17:49 campagne.sql -rwxrwxrwx 1 user group 701 22 Oct 17:49 campagne_promo.sql -rwxrwxrwx 1 user group 537 22 Oct 17:49 categorie_pdt.sql -rwxrwxrwx 1 user group 527 27 Jan 11:36 cgv.sql -rwxrwxrwx 1 user group 547 11 Sep 02:44 civilite.sql -rwxrwxrwx 1 user group 4871 22 Oct 17:49 client.sql vendredi 13 novembre 2009 58
  59. 59. Installation vendredi 13 novembre 2009 59
  60. 60. Installation vendredi 13 novembre 2009 60
  61. 61. Installation vendredi 13 novembre 2009 61
  62. 62. Installation vendredi 13 novembre 2009 62
  63. 63. Installation vendredi 13 novembre 2009 63
  64. 64. Installation vendredi 13 novembre 2009 64
  65. 65. Installation vendredi 13 novembre 2009 65
  66. 66. Installation vendredi 13 novembre 2009 66
  67. 67. Audit de code vendredi 13 novembre 2009 67
  68. 68. Ordre du jour • Lire les logs et repérer les vulnérabilités • Caractériser et supprimer les failles • Evaluation du volume de correction vendredi 13 novembre 2009 68
  69. 69. Approche • Un point d’entrée • Lecture du code • Ouverture d’esprit et découverte • Identifier la faille • Comment l’exploiter vendredi 13 novembre 2009 69
  70. 70. Outils existants • Rats http://www.fortifysoftware.com/security-resources/rats.jsp • Yasca http://www.yasca.org /accueil/accueil.php:478: High: fopen /action/facture_trt.php:170: High: eval /include/pear/File_Archive/Archive/Reader/Bzip2.php:80: High: bzopen /mail/mess_suppr_trt.php:193: High: mail /include/pear/PEAR/RunTest.php:449: High: system /fonctions/gallery.func.php:95: Medium: is_dir /include/pear/PEAR/Remote.php:296: Medium: fsockopen vendredi 13 novembre 2009 70
  71. 71. Trois moteurs • Grep • Les expressions rationnelles • Le tokenizer vendredi 13 novembre 2009 71
  72. 72. Approches Sémantique Rapide 700 • Sémantique : proche des concepts PHP et 525 de programmation 350 • Rapide à mettre en place et exécuter 175 0 Grep Regex Tokenizer vendredi 13 novembre 2009 72
  73. 73. Occurrences $_GET $_POST $_REQUEST Grep 137 604 2650 Regex 139 667 3279 Token 11 617 1518 vendredi 13 novembre 2009 73
  74. 74. Choix • One-liner contre temps de développement • Précision sémantique face à recherche brute • Rejouable ou jetable vendredi 13 novembre 2009 74
  75. 75. Points d’intérêt • index.php • index_bis.php • err_nav.php • out.php • erreur404.php • verif.php vendredi 13 novembre 2009 75
  76. 76. Points d’intérêt Entrée Filtrage Traitement Suivi Sortie Protection vendredi 13 novembre 2009 76
  77. 77. Cheminement $_GET pdo_query pdo_fetch echo vendredi 13 novembre 2009 77
  78. 78. Interfaces • Navigateur • Système • URL • Processus • Cookies • PHP • JavaScript • XML • SQL • LDAP ... vendredi 13 novembre 2009 78
  79. 79. Navigateur • Entrées • $_GET, $_POST, $_REQUEST, $_SERVER, $_COOKIE • Sorties • echo, print, var_dump • Protections • htmlentities, htmlspecialchars, strip_tags ext/xmlwriter vendredi 13 novembre 2009 79
  80. 80. URL • Entrées • parse_url, urldecode, rawurldecode • Sorties • echo, print, http_build_url, http_build_query, http_build_str • Protections • url_encode, rawurlencode vendredi 13 novembre 2009 80
  81. 81. Cookies • Entrées • $_COOKIES, $HTTP_COOKIE_VARS, http_parse_cookies, session_name • Sorties • setcookies, setrawcookie, stream_context_create, httpRequest::setcookies, http_build_cookie • Protections vendredi 13 novembre 2009 81
  82. 82. JavaScript • Entrées • json_decode • Sorties • json_encode, echo, print • Protections • Rien vraiment vendredi 13 novembre 2009 82
  83. 83. SQL • Entrées • pdo_query, mysqli_query, query, • Sorties • *fetch*, mysqli_error • Protections • pdo_quote, mysqli_real_escape_string, etc. vendredi 13 novembre 2009 83
  84. 84. Fichiers • Entrées • fopen, file_get_contents, passthru • Sorties • fwrite, fread, mkdir, • Protections • pathinfo, realpath vendredi 13 novembre 2009 84
  85. 85. PHP • Entrées • eval, include, require et _once, dl, preg_replace, assert • Sorties • var_export • Protections • Aucune pour le code, fichiers pour les autres. vendredi 13 novembre 2009 85
  86. 86. Système • Entrées • ini_get, set_limit, getenv, getmypid, phpversion, phpinfo, • Sorties • ini_set, setenv • Protections • Aucune prévue vendredi 13 novembre 2009 86
  87. 87. Trouvailles vendredi 13 novembre 2009 87
  88. 88. Register_globals • Register globals via fct_urldecode dans fonctions/ fonctions_gen.php • Utilisation des superglobales, puis intuition sur le nom de la fonction • $GLOBALS[$k] et affectation vendredi 13 novembre 2009 88
  89. 89. Injections SQL • $query="select theme_nom from theme where theme_id="".$_REQUEST['theme_id']."""; • Passer par les requêtes SQL, et chercher les variables globales • Lire le contexte et repérer les variables sans filtrage vendredi 13 novembre 2009 89
  90. 90. err_nav.php XSS • init_chem_crm est injecté directement • vendredi 13 novembre 2009 90
  91. 91. Téléchargements • Via les fonctions header() • Téléchargement de fichiers dans lanceur_dl.php • Pas de protection des variables, ni par session vendredi 13 novembre 2009 91
  92. 92. $_REQUEST DOS • $_REQUEST est utilisé pour le logout • if(isset($_REQUEST['opt']) && $_REQUEST['opt']==1) • $_REQUEST == $_GET && $_POST && $_COOKIE • Que se passe-t-il quand on pose un cookie ‘opt’ de 1? vendredi 13 novembre 2009 92
  93. 93. include • $format=$_REQUEST['exp_formdoc']; • include(fct_lien_page_custom("action/facture_". $format.".php","abs")); • Maitrise du chemin d’inclusion • $exp_formdoc = "/../action/facture_fiche"; <- auto-inclusion! • ou bien, tentative d’inclusion d’un phpinfo qui traine vendredi 13 novembre 2009 93
  94. 94. eval • $nom=addslashes($_REQUEST['nom']); • eval('insert_action_agent("'.$LANG_AGENT ['cgv_mod'].'",66,'.$param_id.',"","'.$date_du_jour.'", 2);'); • PHP injection! vendredi 13 novembre 2009 94
  95. 95. die • $result2=$_SESSION['cligraph']->request($query2) or die($_SESSION['cligraph']->errormsg) • Interruption de script en cas de problème de requêtes • errormsg ne contient pas de message intéressant vendredi 13 novembre 2009 95
  96. 96. Code OK • Opérateur @ • vendredi 13 novembre 2009 96
  97. 97. vendredi 13 novembre 2009 97

×