- Insomni'Hack 12
- Insomni'Hack 11
- Insomni'Hack 10
- Insomni'Hack 09
- Présentation
- Photos & Vidéos
- Epreuves
- Insomni'Hack 08
Présentation
Le 6 février 2009, SCRT a organisé la deuxième édition du concours de Ethical Hacking de Suisse romande. Le concours est maintenant terminé.
Plus d'une centaine de participants se sont affrontés sur différentes épreuves touchant à divers domaines de la sécurité des systèmes d'information.
Les épreuves
Les solutions de plusieurs épreuves du concours sont présentées ci-dessous.
1.2 / Porte 1
1.3 / Porte 2
3.3 / Trinity est la clé
En utilisant la même technique qu' à l'épreuve 3.2 (accès direct à un fichier contenu dans le répertoire include), il était aisément possible d'accéder au compte de l'agent xt739kn. Sur ce compte il était alors possible de récupérer trois fichiers: vsc.py, cipher.txt et key.txt.
Le premier de ces fichiers est un script (python) implémentant un algorithme de chiffrement, le deuxième est un message chiffré à l'aide de ce script et le troisième dissimule (stéganographie) la clé de chiffrement utilisée pour chiffrer le précédent.
C'est ce troisième fichier (key.txt) qui nous intéresse. En prenant les caractères qu'il contient par blocs de trois, sans chevauchement - trinity est la clé - on note que tous les trigrammes observés apparaissent une seule fois, à l'exception du trigramme sBl qui apparaît 22 fois.
En comptant le nombre de trigrammes (c'est à dire, le nombre de caractères, divisé par trois) entre les occurences de sBl on observe alors des valeurs qui correspondent à des charactères ASCII imprimables. La concaténation de ces caractères révèle la clé de chiffrement: /*pr3veren9esR0x0rz*/.
Le procédé est illustré ci-dessous, pour les deux premiers caractères de cette clé:
...
OQosBlmvtYEVNFiXjnJLfJqmWtFCQljmLpvlSQJXSxJjBDbmLSrEpBdKzQFfHivRdYX
ehtFyYkRKThuyWsjhAhvaJiypXpMQkYFpXHlwGMtuqDlisOjLRhexrxyFmmrBmJQJzmDoyXMA
sMdUPedsBlZhieeCxksdjarYRvZwbtjZwfIQQeWCIrLaTrbadgtManwfPIZXjKnJSOyqkepix
ayBbVfiMCKtipnlnVbMthVynEJXaXCYmLkyilLrINKXwjSbYsstZOCwAHFXarCXsBlhEAapfeZrxoH
...
[*] len("mvtYEVNFiXjnJLfJqmWtFCQljmLpvlSQJXSxJjBDbmLSrEpBdKzQFfHivRdYXehtFyYkRKTh
uyWsjhAhvaJiypXpMQkYFpXHlwGMtuqDlisOjLRhexrxyFmmrBmJQJzmDoyXMAsMdUPed") = 141
[*] (141 / 3) = 47
[*] ASCII(47) = "/"
[*] len("ZhieeCxksdjarYRvZwbtjZwfIQQeWCIrLaTrbadgtManwfPIZXjKnJSOyqkepi
xayBbVfiMCKtipnlnVbMthVynEJXaXCYmLkyilLrINKXwjSbYsstZOCwAHFXarCX") = 126
[*] (126 / 3) = 42
[*] ASCII(42) = '*'
Cette clé peut ensuite simplement êl;tre utilisée pour déchiffrer le fichier cipher.txt, à l'aide de vsc.py, révélant ainsi la clé de l'épreuve: Y3T4N0TH3RKEY1028.
4.1 / A l'aide!
En visualisant les logs Apache, il est possible de retrouver la trace d'une exploitation d'une faille include qui a permis à l'attaquant de tout d'abord créer un shell php (fichier pwn3d.php).
Suite à cela, en utilisant ce shell, l'attaquant rajoute une ligne à la fin du fichier .bashrc qui redéfinit la commande "sudo".
La nouvelle commande ressemble fortement à l'ancienne, mais au lieu d'effectuer un vrai sudo, le mot de passe est rajouté dans un des fichiers du site web. Lorsque l'utilisateur légitime se connecte ensuite et effectue la commande sudo, il copie sans le savoir son mot de passe dans le fichier que l'attaquant peut ensuite consulter quand bon lui semble.
4.2 / Webmail
En arrivant sur le webmail du hacker, on se rend compte qu'il y a peu de possibilités. La seule fonctionnalité du site, mis à part la connexion en utilisant un mot de passe inconnu, est la récupération d'un mot de passe perdu. Ceci est fait en répondant à la question secrète "Quel est mon surnom?".
Pour trouver la réponse à cette question, il fallait trouver "Alain Mowat" dans la salle et la lui poser. Suite à cela, le mot de passe est révélé et on a accès aux mails du hacker.
4.3 / Qu'est-ce?
L'un des messages trouvés dans les emails est encrypté. Il s'agit de l'encryption de vigènère avec une clé relativement courte qui était récupérable via une analyse statistique. En déchiffrant le message avec cette clé, on trouve le lieu de rencontre des hackers.
4.4 / l33tforum
Le forum est protégé par un "IPS" qui apparament n'est pas très bien configuré. On remarque rapidement qu'il bloque les tentatives d'injections SQL par le biais des paramètres GET et POST. Par contre, les paramètres envoyés par COOKIE ne sont pas filtrés et permettent une attaque à travers le formulaire d'authentification qui est vulnérable à une attaque par injection SQL en aveugle.
Grâce à cela on peut retrouver le mot de passe de l'admin et se connecter à son compte pour découvrir les quelques posts de la section privée oûl; l'on découvre son nom.
4.5 / C'en est trop
En analysant rapidement le binaire fourni, on se rend compte que lorsqu'il est lancé, il s'attend à recevoir une connection sur le port 58623. Lorsque la connexion est établie, il faut entrer un nom d'utilisateur et mot de passe.
Le nom d'utilisateur se trouve en clair dans le fichier et est "h4x0r". Pour ce qui est du mot de passe, il faut retrouver la routine d'encryption du mot de passe et comprendre qu'il va incrémenter et décrémenter successivent les caractères entrés et ensuite comparer cela avec le mot de passe encrypté. Si on refait la manipulation inverse, on trouve que le mot de passe à entrer est "roxxyfoxy".
Une fois connecté à l'application, il n'y a qu'une seule commande disponible qui prend un seul paramètre. Ce paramètre est vulnérable à un "Buffer Overflow".
Le port 58623 n'est pas choisi au hasard, car ce chiffre correspons au byte code d'un "JMP ESP". Il suffit alors de remplacer EIP par l'adresse de cette fonction et avoir son shellcode à l'adresse suivante sur la stack.
5.3 / Javanoscript
En analysant le comportement de l'applet on se rend compte qu'il envoie les données à la page http://192.168.1.12/javaSocool/pass.php.
Cependant cette page n'existe pas, par contre la page /javanoscript/pass.php elle existe et renvoie tout le temps false. A partir de là il faut deviner que si cette page renvoie true, l'applet authentifiera l'utilisateur. Pour faire cela, il faut soit modifier la réponse du serveur, soit substituer le serveur par un autre renvoyant tout le temps true.
5.4 / Wannabe hacker
Mis à part le livre d'or, il n'y a pas grand chose à attaquer sur ce site. C'est donc sur cette fonctionnalité que l'on s'attarde.
Le champ nom et message sont correctement traités et ne permettent aucune injection. On remarque par contre un troisième champ "ip". Il n'est affiché que pour sa propre ip. On se doute par contre que l'administrateur a accès à ces informations également. De plus, il est possible de modifier la valeur affichée en rajoutant le champ HTTP X-FORWARDED-FOR et en y insérant un code quelconque.
On sait que l'administrateur du site visite réguliérement la page et il suffit alors d'insérer un petit code javascript qui va envoyer son cookie à l'attaquant. En récupérant le sessionid qui est dans le cookie il est alors possible de se connecter à la partie administration du site.
6.1 / Zero Absolu
La solution de cette épreuve se trouve ici.
Suisse (HQ)
SCRT Information Security
Le Trési 6C
1028 Préverenges (Lausanne)
Plan d'accès
T +41 21 802 64 01
F +41 21 802 64 02
France
SCRT Information Security
20 bis, rue Louis Philippe
92200 Neuilly-sur-Seine
T +33 1 77 69 64 40
© 2011 SCRT. Tous droits réservés.