Bon nous y voilà... La nuit du hack 2013 s'est terminée dimanche au petit matin et c'est le coeur lourd mais plein d'émotions que j'écris ces quelques lignes après un repos bien mérité.

Pour ceux qui n'y étais pas la nuit du hack, c'est un événement annuel que je classe dans la catégorie ouferies annuelles et que je ne peux que vous conseiller! Un résumé de la soirée est d'ailleurs disponible ici.

Bref, cette année j'ai eu l'occasion de filer un coup de patte à la team HackerzVoice en proposant une épreuve pour le wargame. Comme elle n'a apparament pas était résolue pendant la soirée, je me suis dis qu'un petit write-up serait sympa pour les gens qui y étaient presque.

Épreuve

Pour commencer voici la description de l'épreuve avant d'y acceder:

Trouver le mot de passe de l'admin de ce site.

On y va pas par quatre chemins, l'objectif c'est de retrouver le mot de passe de l'admin. A première vue, notre premier point d'entrée est le site web du système téléphonique de sciteek (comprendra qui pourra). La page est un simple formulaire d'authentification doté d'un lien pouvant mener à une inscription au service.

Comme on est curieux, on crée un compte et on tente de s'authentifier sur la page. Jusque là rien d'étonnant, mais c'est à ce moment que les choses sérieuses commencent.

Cette page contient des infos de connexion SIP et un numero de boite vocale.

adminaccess webpage

Encore une fois, il fallait être curieux et se connecter avec un client SIP pour tester si les informations étaient vraies et si une vulnérabilité s'y cachait. Autant vous dire que si j'en parle ici, c'est certainement qu'une faille y était présente. En effet lorsque l'on appelait le numero 3030, nous tombions sur un SVI (service vocal interactif), nous demandant d'entrer notre mot de passe pour acceder au service.

Un mot de passe valide nous gratifiait d'un "Access Granted" tandis qu'un mauvais nous renvoyais un "Access Denied".

Voilà pour la description de l'épreuve maintenant voyons comment l'exploiter.

Exploitation

La première chose qui est venue à l'esprit de beaucoup de participant du wargame a été de tenter la recherche de vulnérabilités sur la partie web de l'épreuve. Malheureusement à part une XSS mal placée rien de bien probant. La solution se trouvait dans la génération du mot de passe pour la boite vocale. En effet la créations de plusieurs comptes nous permettait de faire une "cryptanalyse" de la génération de mot de passe pour essayer de la comprendre.

Voici plusieurs mot de passe générés pour différents comptes:

username    password    voicemail password

machin      test        116101115116
truc        test        116101115116
bidule      test2       11610111511650

Pas besoin de trente mille échantillons pour voir ce qui est fait. Le mot de passe de la boite vocale n'est pas généré en fonction du username, mais varie avec le password de l'interface web. On vois aussi que ce dernier est uniquement numérique et de longueur variable.

On voit aussi qu'entre le mot de passe 'test' et 'test2', seul le nombre 50 s'est ajouté en fin de chaine. C'est donc un chiffrement caractère par caractère. Je dirai même plus, il s'agit d'un chiffrement ascii vers décimal. Si vous avez compris ça, vous avez tout compris.

ascii table

La génération des comptes SIP étant dynamique, on peut supposer que les utilisateurs sont créés en base de données, et que l'accès à la boite vocale se fait en consultant cette même base de données. Partant de ce principe on peut donc tout de suite penser à une SQLi au travers asterisk (qui a dit tordu ?!).

On tente deux injections bêtes et on regarde ce qui est retourné:

Clair                   Chiffré                                 Résultat

' OR '1'='1             39 32 79 82 32 39 49 39 61 39 49        Access granted
' OR '1'='0             39 32 79 82 32 39 49 39 61 39 48        Access denied

On est donc en présence d'une belle SQLi bien sale comme il faut, ne demandant qu'à être exploitéee. Malheureusement, je n'ai pas encore eu le temps de coder un script digne de ce nom, mais n'hésitez pas à partager les votres (si il y en a)

Pour valider l'épreuve il suffisait ensuite de se loguer en tant qu'admin sur le site web et le flag était sur la page.

Sur ce bonne soirée et bonne récupération.