Exploitation d'une faille Apache pour contourner les htaccess.

Bypasser la majorité des htaccess du web grâce aux mauvaises pratiques de certains développeurs.

15 novembre 2010

Bon alors chers gaulois, sachez que la faille que je vais développé a déjà été corrigée dans les dernières versions de apache mais que beaucoup de personnes ne mettant pas régulièrement à jour leur serveur HTTP, elle reste bien présente sur le net. Elle permet de bypasser des protections par htaccess lorsque celui-ci contient des trucs du style :

CODE

<Limit GET POST>
require valid-user
</Limit>

Le serveur comprend la chose suivante : si la requête que je reçois est un GET ou un POST alors il me faut un utilisateur valide pour que je le laisse passer.
Autre façon de raisonner : si la requête n'est ni un GET ni un POST, je laisse l'accès libre..... vous voyez ou je veux en venir ?

Pour commencer il vous faudra au minimum 4 choses pour bien suivre ce tutoriel :

  • Firefox
  • En-têtes HTTP en direct : c'est un plugin de firefox.
  • Netcat : de base sur la plupart des distributions Linux, BSD et MacOsX, également disponible pour Windows.
  • Une cible qui a mal sécurisé son espace web. , dans ma démonstration je serai moi même la cible mais ne rêvez pas le fichier en question a été supprimé.
Pour commencer, lancez votre Firefox puis lancez le module "En-têtes HTTP en direct", un nouvel onglet devrait s'ouvrir.
Sur le premier onglet, rendez vous sur la page avec la protection par htaccess et saisissez un mot de passe au hasard. Ensuite vous pourrez visualiser la requête (GET ...) ainsi que la réponse renvoyée par le serveur (HTTP/1.1 Authorization Required ...) dans l'onglet du plugin.

En-têtes HTTP en direct

Ouvrez ensuite un terminal (je n'ai aucune idée de ceux à quoi ressemble Netcat pour Windows).
Tapez la commande : nc <serveur> <port>, puis coller la requête HTTP

CODE

nc informatix.fr 80
GET /faille_htaccess HTTP/1.1
Host: www.informatix.fr
User-Agent: **************************
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive

Et là SURPRIIIISE, rien n'a changé.....

En fait c'est normal..., maintenant relancez la même requête en remplaçant le GET par INFORMATIXLEGAULOIS, si vous obtenez encore une erreur 401 c'est que vous avez choisi la mauvaise cible , sinon vous devriez voir apparaître le code source de la page demandée.

Un autre truc drôle concernant les htaccess (mais là il faut déjà avoir réussi à y entrer une fois), c'est le mode de transmission des autorisations d'accès (la majorité du temps en Basic). Une fois que l'accès a été autorisé une fois, à chaque requête est ensuite transmise une ligne supplémentaire qui contient le code d'autorisation.

CODE

Authorization: Basic *************************

Placez la chaine de caractère après le mot Basic dans un décodeur de Base64 et vous devriez voir apparaître une chaine ressemblant à login : password.
Et non vous ne rêvez pas, vos mots de passe sont transmit sur le réseau en clair (en tout cas dans un codage très facilement réversible). Un petit coup de sniffing et boum, avouez que ça craint un peu non ?

Par
Créateur et administrateur.

Dans la même catégorie

SSH : Comment interdire l'authentification par mot de passe ?
SSH : les principes et l'authentification par cryptographie asymétrique
Yes : la commande qui vous veut du mal
Fork bomb : la réplication infinie des processus au service du DoS

Commentaire(s)