1 - Hacker une page Web par KoP

 

            De nombreuses personnes se ventent sur internet de pouvoir hacker des pages Web

            hébergées par des servers comme Multimania.com, Chez.com,..... Ils ajoutent aussi

            que n'importe qui peut le faire. Mais celà est beaucoup plus difficile que ce que vous

            pourriez imaginer. Je vais donc vous fournir une technique que vous pourrez utiliser

            après avoir compris quelques principes élémentaires. Pour cela, nous allons utiliser

            la méthode que j'utilise pour rechercher les failles d'un serveur.

            -------------------------------------------------------------------------------------------

            But(s):   Avoir accès aux données FTP d'une page web.

 

            Victime(s): Les hébergeurs de pages Web utilisant les servers HTTPd

                  pour l'identification et le changement de Pass de l'accès FTP.

            Hypothèse(s) 1: Nous pouvons, en spoofant la dernière IP du connecté,

                  changer le pass du compte sans avoir besoin de s'identifier.

 

            Donnée(s): l'IP du connecté est enregistré par le Server.

                  Le port local utilisé pour la connection varie et le port

                  de connection sur le server est le 80 pour le HTTPd

                  et le 21 pour le FTP.

 

            Problème(s) possible(s): L'IP du dernier connecté est remise à zéro

                  après un time out.

 

            Hypothèse (2): Y a t'il un Time Out comme quoi personne ne peut plus se connecter ?

                  Si oui, est-ce que l'IP est remise à 127.0.0.1ou est-ce qu'il y a une variable

                  comme quoi plus personne ne peut se connecter ?

 

            Procédure:

                  - Créer un compte sur l'hébergeur victime.

                  - S'identifier par le server HTTPd

                  - Tester si on est toujours identifié comme propriétaire de la page

                     pendant un certain temps en ayant la même IP(jusqu'à 30 mins).

                  - Si au bout de 30 minutes nous sommes toujours propriétaire

                    cela signifie que l'hypothèse du Time Out est fausse et que donc

                    il nous suffit d'avoir l'IP du dernier connecté pour nous logguer

                    sur le server.

                    Cf -> Démarche("du dernier user connecté","n'importe quand")

                  - Sinon nous devons tester si l'IP de connection est remise à 127.0.0.1

                     Pour cela nous enregistrons les données envoyées par notre client

                     HTTPd pour changer une option dans notre page. Ensuite, en utilisant

                     les Raw Sockets, nous envoyons les mêmes données logguées

                     au server HTTPd en prenant l'IP 127.0.0.1 après avoir dépassé le timeout.

                     Nous allons ensuite voir si le changement d'option s'est effectué.

                     Si oui, Cf  -> Démarche("127.0.0.1","plus du temps du Time Out")

                     Si non, Cf -> Démarche("du dernier user connecté","moins du temps du Time Out")

 

            Démarche :

                  Avec l'IP *1* datant de *2*, envoyez sur le port 80 du server HTTPd

                  votre log de changement de pass. Ainsi, le compte aura pour pass

                  le même que celui que vous avez changé lors de l'enregistrement du log.

                  Vous pourrez ainsi vous connecter sur le server FTP avec l'account et

                  votre pass et ainsi vous aurez hacké la page web.

 

            Application:

 

                  Voici les datas envoyées par le client sous windows au server Multimania.com

                  pour la lecture de la page principale :

                  ------------------------------------------------------------------------------------

                  Envoyé par le client

                  ------------------------------------------------------------------------------------

                        GET / HTTP/1.1

                        Accept: application/vnd.ms-excel, application/msword, image/gif, image/x-xbitmap, image/jpeg,

                              image/pjpeg, */*

                        Accept-Language: fr

                        Accept-Encoding: gzip, deflate

                        User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)

                        Host: 200.12.34.56

                        Connection: Keep-Alive

                  ------------------------------------------------------------------------------------

                  Envoyé par le server après la demande d'une page valide

                  ------------------------------------------------------------------------------------

                        HTTP/1.1 200 OK

                        Date: Fri, 3 Nov 2000 16:30:00 GMT

                        Server: Apache/1.3.12 (Unix) PHP/3.0.15

                        Set-Cookie: Apache=213.36.130.69.84032973874838970; path=/

                        X-Powered-By: PHP/3.0.15

                        Pragma: no-cache

                        Cache-Control: no-cache

                        Expires: Mon, 06 May 1996 04:57:00 GMT

                        Content-Language: fr

                        Upgrade: HTTP/1.1

                        Connection: close

                        Content-Type: text/html

 

                        + SOURCE DE LA PAGE (ON S'EN FOU DANS CE TUT)

                  ------------------------------------------------------------------------------------

 

                  Les données intéressantes sont soulignées.

                  Après avoir trier ces données d'entêtes, nous savons qu'il s'agit

                  d'un server d'HTML version 1.1 utilisant Apache/1.3.12  qui tourne sous Unix

                  et qui accèpte l'utilisation du PHP version 3.0.15

                  Il fourni des pahes Html et Text.

                 

                  ------------------------------------------------------------------------------------

                  Envoyé par le server après la demande d'une page non valide

                  ------------------------------------------------------------------------------------

                        HTTP/1.1 302 Found

                        Date: Sat, 30 Sep 2000 11:57:15 GMT

                        Server: Apache/1.3.12 (Unix) mod_fastcgi/2.2.2

                        Location: http://www.multimania.fr/

                        Keep-Alive: timeout=15, max=1000

                        Connection: Keep-Alive

                        Transfer-Encoding: chunked

                        Content-Type: text/html; charset=iso-8859-1

 

                        118

                        <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">

                        <HTML><HEAD>

                        <TITLE>302 Found</TITLE>

                        </HEAD><BODY>

                        <H1>Found</H1>

                        The document has moved <A HREF="http://www.multimania.fr/">here</A>.<P>

                        <HR>

                        <ADDRESS>Apache/1.3.12 Server at www.multimania.com Port 80</ADDRESS>

                        </BODY></HTML>

 

                        0

                  ------------------------------------------------------------------------------------------------

                 

                  Nous remarquons la présence d'un timeout de 15 secondes à la connection

                  grâce à la ligne "Keep-Alive: timeout=15, max=1000". De plus, nous voyons

                  qu'il s'agit d'un server "Apache/1.3.12 (Unix) mod_fastcgi/2.2.2".

                  Pour trouver une faille, il vous sera plus facile de posséder le server

                  sur votre ordinateur. Allez donc essayer de le télécharger en vérifiant

                  bien qu'il s'agisse du même server.

 

                  Sur le server de Multimania, le changement de pass se fait par la page

                  http://www.multimania.fr/general/login/login.phtml

                  Les données intéressantes que nous pouvons y trouver sont :

                  ------------------------------------------------------------------------------------------------

                        ..............................

                        <SCRIPT LANGUAGE=JavaScript>                   

                        function isFinished() {

                        /*    Désactivé - fout la zone avec la checkbox cookie persistant            

                              var login, password, n1, n2;

                              login = document.LOGINFORM._login_nm.value;

                              password = document.LOGINFORM._login_pw.value;

                              n1 = login.length;

                              n2 = password.length;

                              if ((n1 > 2) && (n2 > 5))

                                    document.LOGINFORM.submit();

                              return true;

                              */

                        }

                        </SCRIPT>

                            <FORM NAME=LOGINFORM METHOD=POST ACTION="/general/login/login.phtml">

                        <INPUT TYPE="HIDDEN" NAME="_login" VALUE="">

                        ..............................

                        <input name="_login_nm" size="12" maxlength="16" value="">

                        ..............................

                        <input onChange="return isFinished()" type="password" name="_login_pw" size="12" maxlength="16"></td>

                        ..............................

                  ------------------------------------------------------------------------------------------------

                  L'identification se fait grâce au fichier "general/login/login.phtml" après

                  avoir cliqué sur le bouton submit. Les variables envoyées sont  :

                        - _login_nm pour le login

                        - _login_pw pour le password

                  Pour vous logguer depuis votre browser, il vous suffit d'entrer l'url :

                  http://www.multimania.fr/general/login/login.phtml?_login_nm=login&_login_pw=pass

                  en changeant login par votre login et pass par votre pass.

 

                  Vous pouvez créer un programme qui test les password mais trouver

                  le password de la page de cette manière risquerait de mettre pas mal

                  de temps en fonction du nombre le caractère que le créateur du compte à mis.

                  Toutefois si vous voulez créer un programme de ce type, il faut que vous sachiez

                  que vous avez 15 secondes pour envoyer du texte après quoi vous tomberez en

                  Timeout. De plus, il faut savoir que après la ligne de commande qui Post les variables

                  il faut envoyer 3 CrLf de suite pour que le server comprenne que se qui précède

                  est la commande qu'il doit executer.

 

                  Depuis peu, multimania à mis en place un système d'identification automatique par cookie.

                  Ceci peut être très interessant. Il suffirait de récupérer ou de lire les informations du cookie

                  de la personne à qui appartient la page pour connaitre les informations nécessaires et vous logguer

                  sur son compte.

 

                  La dernière méthode est de créer un programme qui envoi la requète de changement de password

                  en spoofant l'IP que le server à enregistré comme identifié avec succès(Pour savoir quelle IP spoofer

                  veuillez vous référer à Procédure qui a été vu plus haut). Pour cela vous avez la possibilité d'utiliser

                  les Raw sockets pour changer l'IP source.

 

            Conclusion(s) après avoir fait l'application:

                        Nous pouvons conclure que nous avons 15 secondes maximums pour envoyer

                        la requête de changement de pass se qui est largement suffisant.

                        De plus, nous voyons après quelques testes qu'il n'y a pas de Time Out de fin

                        d'identification c'est à dire que nous pouvons rester connecté indéfiniment

                        sur le server en étant identifié propriétaire de la page avex la même IP.

                        La démarche à suivre pour ce server est donc:

                        Cf -> Démarche("du dernier user connecté","n'importe quand")

     

            -------------------------------------------------------------------------------------------

 

            Voilà, je vous conseille d'utiliser cette démarche pour rechercher vos exploits.

            J'utilise cette technique depuis un certain temps. Pour cela j'ai créé un programme

            en C/C++ Linux qui permet d'envoyer des datas en prenant l'IP que je désire grâce

            aux Raw Sockets. Malheureusement pour vous, je ne vous le fournirai pas. Pourquoi ?

            Tout simplement car un débutant n'est pas responsable et n'a donc pas à hacker un site Web.

            Pour les personnes plus responsables, je pense qu'elles pourront se débrouiller à

            programmer ça car ce n'est vraiment pas difficile avec les exemples qui sont fournis

            dans ce mag(vous pouvez aussi voir coment fonctionne Cips ;) ).

            Voilà, ben je pense que vous avez dû comprendre le système pour le hacking

            des pages Web et que vous comprenez  pourquoi un simple débutant ne peut pas

            accéder à une page web comme ça. J'espère quand même que vous n'en abuserez

            pas car il se pourrait qu'après  trop d'attaques de ce type les administrateurs

            trouvent une parade. Ah oui,  n'oubliez pas que les connections FTP sont loguées

            et qu'il est donc indispensable de prendre un shell, une gate ou un proxy pour ne pas avoir

            de problèmes duênt à la plainte déposée par le propriétaire après une modification de la page.

 

                                                      By KoP