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