Les failles des scripts PHP peuvent causer de grands dommage a un site voire a un serveur. On craint souvent ,les failles aux variables GET aisement modifiables via l'URL, mais on connait moins souvent des failles semblables, dues aux POST. Il s'agit de modifier des variables POST d'un formulaire pour accéder a des informations ou des actions cachés, ou faire diverse injections de code.
Avant d'exposer en détails la marche a suivre , il faut tout d'abord installer l'extension Firefox web Developper (http://addons.mozilla.org/fr/firefox/addon/60), après l'avoir installer cliquer sur formulaires ,puis sur Afficher les infos de formulaires , ce qui vous fait apparaître tous les champs hidden du formulaire, et également la possibilité de les modifier ...
Exemple 1
Soit un script mail.php chargée d'envoyer des emails et le formulaire HTML suivant :
Ensuite sur ce formulaire html ,avec web developer , en cliquant sur la fonctionnalité Formulaires - Afficher les infos de formulaires on decouvre
Code:
ce champ "to" étant devenu modifiable ,il devient alors possible de le transformer en
il ne reste plus a l'attaquant qu'a cliquer sur "envoyer" et si mail.php ne vérifie pas le champ to, c'est fait le mail est envoyer a [email protected]
exemple 2 :
formulaire html:
On remarque bien que c'est la méthode POST qui est utilisé, ensuite comme vous pouvez le remarquer pour l'adresse mail, ce n'est pas une zone de texte monoligne avec la balise <input> mais bien une balise <select> qui est utilisé:
Donc comment faire pour modifier le select et le rendre éditable ??? rien de plus simple, il faut convertir le select en input type=text toujours avec l'extension web developper, vous sélectionnez (formulaires - convertir les éléments select en input type=text ) et c'est terminé
Dans cet exemple imaginons que le fichier contact.php vérifie que l'adresse mail correspond bien à une des adresses mail disponible dans le select et la redirection sera donc impossible, mais ce n'est pas toujours le cas sur les formulaires disponible sur le web...
Le but ici est bien évidement d'expliquer le principe et non pas de l'utiliser a des fins malveillantes, on est bien d'accord.
Quel est l'interet de cette manipulation ? social engineering...
Example 3 :
Et si le script mail.php contient par exemple la ligne de code suivante :
alors des injections xss deviennent possibles
toujours avec l'extension web developer et la fonctionnalité formulaires ,puis Afficher les infos de formulaires on découvre
devenue modifiable, mais cette fois , on va pouvoir y injecter du javascript
Je pense que ce n'est pas nécessaire d'aller plus loin, vous avez compris le principe
voila c'est aussi simple que ça.
@+
Avant d'exposer en détails la marche a suivre , il faut tout d'abord installer l'extension Firefox web Developper (http://addons.mozilla.org/fr/firefox/addon/60), après l'avoir installer cliquer sur formulaires ,puis sur Afficher les infos de formulaires , ce qui vous fait apparaître tous les champs hidden du formulaire, et également la possibilité de les modifier ...
Exemple 1
Soit un script mail.php chargée d'envoyer des emails et le formulaire HTML suivant :
Code:
<?php // ... code d'envoi de l'email ... ?> <form action="mail.php" method="post"> <input name="to" type="hidden" value="[email protected]" /> Votre adresse email: <input name="from" type="text" value="" /><br /> Votre message: <textarea name="message"></textarea><br /> <input type="submit" value="Envoyer" /> </form>
Code:
Code:
<input name="to"> |[email protected]|
ce champ "to" étant devenu modifiable ,il devient alors possible de le transformer en
Code:
<input name="to"> |[email protected]|
il ne reste plus a l'attaquant qu'a cliquer sur "envoyer" et si mail.php ne vérifie pas le champ to, c'est fait le mail est envoyer a [email protected]
exemple 2 :
formulaire html:
Code:
<form name="my_form" id="my_form" method="post" action="contact.php" onsubmit="return valid_form();"> <table border='0' cellspacing="0" cellpadding="0" style="background-color:#F0F0F0;width:100%; border:none;"> <tr> <td style="width:15; height:8; vertical-align:top;" align="left"><img height="8" width="8" alt="bloc_hg_F0F0F0.gif" src="../../images/bloc_hg_F0F0F0.gif" /></td> <td style="height:8;"> </td> <td style="width:15; height:8; vertical-align:top;" align="right"><img height="8" width="8" alt="bloc_hd_F0F0F0.gif" src="../../images/bloc_hd_F0F0F0.gif" /></td> </tr> <tr> <td colspan="3"> <table style="width:100%; text-align:left"> <tr> <td colspan="2"><input type="hidden" name="fok" id="fok" value="0" /> </td> </tr> <tr> <td style="width:25%;" align="right"><p><b>Votre nom: </b></p></td> <td> <input type="text" size="30" name="cont_nom" value=" " /> </td> </tr> <tr> <td style="width:25%;" align="right"><p><b>Votre email: </b></p></td> <td> <input type="text" size="30" name="cont_email" value=" " onchange="check_Mail(this.value);" /></td> </tr> <tr> <td align="right"><p><b> Pays: </b></p></td> <td> <select name="cont_pays" id="cont_pays"> <option id='sub_country57' value="57" selected="selected" > France</option> </select> </td> </tr> <tr> <td style="width:25%;" align="right"><p>Votre téléphone: </p></td> <td> <input type="text" size="30" maxlength="19" name="cont_phone" value="" onchange="this.value=format_Tel(this.value);check_Tel(this.value);" /> </td> </tr> <tr> <td align="right"><p><b>Sujet: </b></p></td> <td> <select name="cont_subject"> <option value='[email protected]'>Information</option> <option value='[email protected]'>Badge</option> <option value='[email protected]'>Support technique</option> <option value='[email protected]'>Paie & Contrat</option> <option value='[email protected]'>Problème de Compte</option> </select> </td> </tr> <tr> <td style="width:25%; vertical-align:top" align="right"> <p><b>Message: </b></p> </td> <td> <textarea name='cont_msg' rows="7" id="cont_msg" cols="50"></textarea> </td> </tr> <tr> <td colspan="2"> <p align="center"><button class="bouton_vert" type="submit" alt="Valider">Valider</button></p> </td> </tr> </table> </td> </tr> <tr style="background-color:#F0F0F0;"> <td style="width:15; height:8; vertical-align:top;" align="left"><img height="8" alt="bloc_bg_F0F0F0.gif" width="8" src="../../images/bloc_bg_F0F0F0.gif" /></td> <td style="height:8;"></td> <td style="width:15; height:8; vertical-align:top;" align="right"><img height="8" alt="bloc_bd_F0F0F0.gif" width="8" src="../../images/bloc_bd_F0F0F0.gif" /></td> </tr> </table> </form>
Code:
<select name="cont_subject"> <option value='[email protected]'>Information</option> <option value='[email protected]'>Badge</option> <option value='[email protected]'>Support technique</option> <option value='[email protected]'>Paie & Contrat</option> <option value='[email protected]'>Problème de Compte</option> </select>
Dans cet exemple imaginons que le fichier contact.php vérifie que l'adresse mail correspond bien à une des adresses mail disponible dans le select et la redirection sera donc impossible, mais ce n'est pas toujours le cas sur les formulaires disponible sur le web...
Le but ici est bien évidement d'expliquer le principe et non pas de l'utiliser a des fins malveillantes, on est bien d'accord.
Quel est l'interet de cette manipulation ? social engineering...
Example 3 :
Et si le script mail.php contient par exemple la ligne de code suivante :
Code:
<?php echo "Mail envoyé à : ".stripslashes($_POST['to']); ?>
toujours avec l'extension web developer et la fonctionnalité formulaires ,puis Afficher les infos de formulaires on découvre
Code:
<input name="to"> |[email protected]|
Code:
<input name="to"> |<script>alert('pl3x')</script>|
voila c'est aussi simple que ça.
@+