Il y a des jours, ou, on se fait un peu plus chier que d’autres.. En bon geek j’ai occupé mon temps en surf sur le net et je suis tombé sur ça: http://www.hackthissite.com. Il ne sagit pas là d’une provocation pure et simple mais d’un site qui propose des défis de h4×0r. Je n’ai eu – pour l’instant – que l’occasion de réaliser la partie « Basic Missons » (les 10 épreuves) et je vais essayer de toutes vous les expliquer ici. Sans plus attendre voici les solutions.
Avant tout, il vous faudra le navigateur au renard a la queue flamboyante avec quelques une des extensions disponibles: « Firefox« , « Firebug » et « FireCookies« .
Basic 1: « Basic test of your skills to see if you can do any of these missions. Requirements: HTML. »
La première mission est vraiment très très simple, il suffit d’aller plonger dans le code source pour y trouver le mot de passe: faites un clic droit et « View page source » (ou « Inspect element » avec firebug) cherchez un code de la forme:
<!-- the first few levels are extremely easy: password is abcd1234 -->
Entrez le mot de passe dans le champ puis cliquez: « submit ». Bravo vous êtes un 3l1t3 h4×00r :)
Basic 2: « A slightly more difficult challenge, involving an incomplete password script. Requirements: Common sense. »
Deuxième mission qui on s’en doute ne va pas être vraiment plus difficile que la première. Il suffira d’être un petit peu logique.. il est dit que l’admin n’as pas uploadé le fichier contenant le mot de passe, donc: le mot de passe est… vide, quel étourdi ce sam ! Cliquez simplement sur « submit » :)
Basic 3: « Some intuition is needed to find the location of the hidden password file. Requirements: Basic HTML knowledge. »
Très bien, ici, Sam n’as pas oublié d’uploader le fichier contenant le mot de passe (en clair..). Comme d’habitude, avant tout, rendons nous dans la source:
<form action="/missions/basic/3/index.php" method="post">
<input type="hidden" name="file" value="password.php">
<input type="password" name="password"><br /><br />
<input type="submit" value="submit">
Tiens, Sam a encore commis une boulette ! Pointez vôtre navigateur sur « http://www.hackthissite.org/missions/basic/3/password.php », récupérez le mot de passe et next !
Basic 4: « An email script has been set up, which sends the password to the administrator. Requirements: HTML knowledge, an email address. »
Dans la mission 4, Sam a encore commis de belles erreurs ! Regardons directement la source:
<form action="/missions/basic/4/level4.php" method="post">
<input type="hidden" name="to" value="webmaster@hulla-balloo.com">
<input type="submit" value="Send password to Sam">
</form>
<form action="/missions/basic/5/index.php" method="post">
<input type="password" name="password">
<br /><br />
<input type="submit" value="submit">
</form>
Comme vous pouvez le voir, il y a deux « forms »: Le premier permet d’envoyer le mot de passe sur l’adresse mail de Sam alors que le second permet l’accès quand on connais le mot de passe.
Ici encore, nous allons exploiter ce code pas très sécure pour nous faire envoyer le mot de passe en forgeant notre propre form. Pour ça, ouvrez firebug en cliquant droit sur le form, puis « Inspect element ». Maintenant changez directement l’adresse mail par la vôtre – ou changez le type du champ de type="hidden" à type="text". Validez.. copiez le mot de passe, revenez en arrière et passons au challenge suivant :)
Basic 5: « Similar to the previous challenge, but with some extra security measures in place. Requirements: HTML knowledge, JS or FF, an email address. »
A priori, rien de différent, on procède comme la Basic 4..
EDIT: il semble que la seule chose qui change c’est un script qui vérifie nôtre provenance avant de valider l’envoi du mail… en effet une autre solution pour le défi précédent aurais été de modifier la source de la page directement depuis une copie sur notre disque dur.
Basic 6: « An encryption system has been set up, which uses an unknown algorithm to change the text given. Requirements: Persistence, some general cryptography knowledge. »
J’avoue avoir un peu plus galéré sur ce défi ! C’est un sacré bond en avant que Sam nous a fait là.. En fait il ne sagit pas là d’exploit mais de cryptographie pure et simple.
Qu’avons nous ? deux formulaires et le mot de passe chiffré: Le premier permet de chiffrer un mot de passe et le deuxième d’accéder au défi suivant. Le mot de passe étant sous sa forme chiffrée, il nous faudra donc utiliser le premier script pour comprendre ou essayer d’en déduire la technique utilisée.
Essayons de chiffrer un caratère:
1 nous donne: 1
1 donne 1. Hùùùm.. tentons quelque chose de plus long..
11111111 -> 12345678
22222222 -> 23456789
Nous pouvons voir ici qu’il y a incrémentation de 1 pour le second chiffre, 2 pour le troisième.. etc. Que se passe t’il quand nous allons quitter les décimaux simples ? Essayons.
99999999 -> 9:;<=>?@
C’est la qu’il m’a fallu un peu de temps pour réaliser qu’il sagissait en fait de la table ASCII… en effet, sur cette table après le « 9″ nous avons »: » puis « ; » puis »< », etc… Vérifiez ici par vous même :)
J’ai, comme mot de passe chiffré: ef6d4818
e - 0 = e
f - 1 = e
6 - 2 = 4
d - 3 = a
4 - 4 = 0
8 - 5 = 3
l - 6 = f
8 - 7 = 1
Le mot de passe déchiffré est donc: ee4a03f1 dans mon cas :)
Basic 7: « The password is hidden in an unknown file, and Sam has set up a script to display a calendar. Requirements: Basic UNIX command knowledge. »
Celui ci est vraiment très facile aussi ! Nous apprenons que Sam a crée un script qui retourne la sortie de la commande cal de linux (une aubaine pour nous!). Testons la chose.. Si nous entrons une année dans le champ il nous retourne le résultat classique de la commande cal, rien d’exceptionnel. Comment cela peut il fonctionner ? Je suppose que le contenu doit être de la forme:
print `cal $input`;
Une simple injection de la forme:
&& ls
Nous permet donc de lister le répertoire courant:
. .. level7.php cal.pl index.php k1kh31b1n55h.php perl5.8.9.core
Il semblerais que le fichier k1kh31b1n55h.php contienne notre mot de passe. Bravo étape suivante :)
Basic 8: « The password is yet again hidden in an unknown file. Sam’s daughter has begun learning PHP, and has a small script to demonstrate her knowledge. Requirements: Knowledge of SSI (dynamic html executed by the server, rather than the browser). »
Sam commence a sécuriser un peu plus ses formulaire, heureusement sa petite soeur a crée un petit script qui va nous ouvrir les portes ! Essayons donc maintenant le script de Stéphanie: Ce script enregistre ce que vous avez entré dans le champ texte avec quelques informations supplémentaires (Longueur du texte.. etc). C’est a ce moment la que nous allons utiliser une injection par formulaire en utilisant, cette fois ci les SSI. (Du html dynamique, du code exécuté par le serveur.. un peu comme le php). Les SSI sont utilisée – par exemple – par apache pour inclure les headers/footers des pages qu’il génère avec l’option « Indexes« .
Nous allons donc essayer d’insérer le code suivant (exec de la commande linux ls) dans le fichier généré par le script de Stéphanie:
<!--#exec cmd="ls .."-->
Et voilà le travail:
Hi, au12ha39vc.php index.php level8.php tmp! Your name contains 39 characters.
Il ne vous reste plus qu’a consulter au12ha39vc.php pour passer au niveau suivant :)
Basic 9: « The password is again hidden in an unknown file. However, the script that was previously used to find it has some limitations. Requirements: Knowledge of SSI, Unix directory structure. »
Liée a la mission précédente, celle ci s’avère très simple si on prend un peu de recul… Tout d’abord nous n’avons ici que le champ texte d’entrée du mot de passe, il va donc falloir chercher ailleurs. Si nous lisons les instructions de notre ami Sam nous aprenons qu’il sagit ici encore de SSI – nous avions utilisé:
<!--#exec cmd="ls .."-->
Donc il suffit de se rendre une mission plus tôt – retourner sur la 8, oui – et changer le path du ls pour lister ce répertoire ci.. rien de plus simple. Nous étions ici: /missions/basic/8/tmp/ et nous voulons aller là: /missions/basic/9/, il suffira donc d’executer cette intruction ci:
<!--#exec cmd="ls ../../9"-->
Encore une victoire pour nous.. plus que deux missions, voyons ce que Sam va nous servir.
Basic 10: « This time Sam used a more temporary and « hidden » approach to authenticating users, but he didn’t think about whether or not those users knew their way around javascript… »
Comme dans les missions précédentes nous sommes relativement bien guidés, il nous est dit que Sam a utilisé une méthode d’authentification cachée: de quoi penser « Cookies » ! En étudiant le code nous nous rendons compte que cette fois ci le mot de passe a été codé en dur et n’est pas accessible.
Nous allons donc analyser les cookies pour voir ce qu’il en est. Nous allons avoir besoin de « FireCookies » une extension pour Firefox qui permet de gérer les cookies (ajout/suppression/edition). Pour être le plus clair possible voici une capture d’ecran:
Vous pouvez voir une ligne “level11_authorized” changez sa valeur de “no” a “yes”, validez. BRAVO.
Possibly Related Posts:
- Du load-balancing avec vyatta
- Crashdump.fr passe en AES-256.
- Effacer définitivement les données d’un disque dur sous *nux (dd, zero, random)
- ARP Spoofing (ARP Cache poisoning)
- Serveur HTTP Python en une ligne..













Slim says:
Qu’en est il de la 11ème étape, et dernière, des « basic » ( http://www.hackthissite.org/missions/basic/11/ )?
Après 1h de recherche, j’ai trouvé le password. Il faut avoir un minimum de connaissance dans les fichiers de configuration d’Apache, se rappeler de l’alphabet et savoir lire (surtout pour la fin).
avr 10, 2009, 23:24Adri says:
En effet, une mission 12 est apparue récemment. Je mettrais a jour le tuto bientôt.
j’insiste sur ta remarque: « savoir lire (surtout pour la fin) ».. j’ai bien tourné en rond 10 minutes a la fin.
a bientôt !
avr 10, 2009, 23:54