Nuit du Hack XV Qualifications - WhyUNoKnock - (WEB 250)

Description

ERPay is a new ERP management application. You can now steal money from your employees and add the money directly on your bank account !

Points

250

Category

Web

Url

http://whyunoknock.quals.nuitduhack.com/

Pour ce challenge, nous disposons seulement d'un formulaire de connexion.
alt

Après de nombreuses tentatives, nous arrivons à provoquer des erreurs de connexion (PDO). Nous décidons donc d'essayer de modifier la requête de connexion pour la faire arriver sur notre serveur. (Le titre donne un indice). Pour cela modifions la requête avec Burp.

alt

Dans le même temps, nous lancons un tcpdump sur notre serveur afin d'examiner les requêtes reçues.
Voici le résultat

alt

Voici les informations de connexion envoyées par l'applicaton web. Evidemment une réponse de type "connexion refusée" est renvoyée au client. Nous pouvons identifier l'utilisateur, la base de données, le mot de passe et le Plugin de sécurité activé (mysql ative password). Nous avons donc créé une database users.
En se renseignant sur ce plugin nous arrivons à la conclusion suivante :

Le serveur envoie un salt (chaine aléatoire) au client
Le client réalise l'opération suivante
SHA1( password ) XOR SHA1( salt SHA1( SHA1( password ) ) )
Le client renvoie le résultat de cette opération.

Notre première idée a été de bruteforcer le mot de passe via John qui dispose d'un format pour ce type de mot de passe. Cependant, le brute force n'a rien donné.

Nous changeons donc notre stratégie. L'objectif est maintenant d'accepter toutes les connexions sur toutes les databases.

Pour cela, nous allons démarrer le serveur mysql avec l'option --skip-grant-tables. Il suffit de rajouter cette ligne au fichier /etc/mysql/my.cnf et de redémarrer le serveur.

Ok, on va donc tester notre stratégie. Toujours le même mode opératoire : Envoi de la trame et capture réseau sur le serveur.

Voici le résultat
alt

Bonne nouvelle ! On a plus qu'a créer la table logins avec les champs id, login et password et de remplir la table avec les données.

On relance une connexion :
alt