Insomni’hack 2010 : HZV won

25 janvier 2010 – 22:42

Ce week-end, c’est avec trois membres de HZV (Crashfr, Virtualabs, et Fluxius) que je me suis rendu à Insomni’hack, un challenge de hacking se déroulant à Genève. Le challenge était au départ individuel, mais nombreux étaient ceux qui, comme nous, s’entre-aidaient. Le but était simple : valider un maximum d’épreuves avant 1h du matin. Au final, c’est notre équipe qui a remporté le challenge. Voici un petit résumé de quelques épreuves intéressantes dont je me rappelle.

Le challenge était composé de 9 séries d’épreuves, chacune étant d’un type différent. Décidés à en valider un maximum, nous nous sommes répartis le travail entre tous les membres de l’équipe, en centralisant les solutions. Et c’est moi qui me suis retrouvé désigné comme étant la personne en charge de tout valider :) . Enfin, deux difficultés notables étaient à souligner : les prises électriques étaient suisses (merci à la personne nous ayant prêté un adaptateur)  et aucune connexion internet n’était fournie.

L'équipe HZV

L'équipe HZV

One Time Pad

J’ai commencé par la première épreuve de la série intitulée « One Time Pad », portant sur la crypto. Il s’agissait de décrypter un fichier chiffré avec l’algorithme One Time Pad, sachant que l’on nous donnait un couple plaintext – ciphertext chiffré avec la même clé… Un simple XOR entre les deux permettait donc de révéler cette dernière, et donc de déchiffrer le message.

RSA

Après cet échauffement, on enchaîne avec du RSA. La deuxième épreuve OTP consiste à casser un message chiffré avec une implémentation de RSA vraisemblablement pas terrible niveau sécurité. Le message en question était composé d’un header qui n’était autre que la concaténation de l’exposant public (e) et du module (N) utilisé pour chiffrer le message, le tout encodé en base 64. Étant donné que N avait une taille ridiculement faible (une trentaine de bits), il était très facile de le factoriser. Personnellement, je me suis servi de l’outil RSA Tool 2, permettant non seulement de factoriser N mais aussi de retrouver l’exposant privé (d). Une fois d obtenu, il suffisait d’utiliser l’outil fourni pour déchiffrer le message.

Follow the white rabbit

La 3ème épreuve de la série consistait à lire un message dans une image représentant un lapin, elle faisait donc appel à de la stéganographie. Notre intuition nous disait qu’il y avait du LSB dans l’air, mais nous n’avons pas eu le temps de coder un outil sur place (nous avions la flemme de lire les specs du BMP). Plusieurs membres de notre équipe ont fait une fixation sur ce lapin, espérant y voir un « message subliminal » (private joke)… Suite à  la fin de ce billet.

F|UxIuS, dont le pseudo a donné mal à la tête au staff

F|UxIuS, dont le pseudo a donné mal à la tête au staff

Shoot the caribou

Dans cette épreuve flash faisant partie de la série « les soirées de Kévin », il fallait tirer sur un caribou pour obtenir un score le plus élevé possible. Ce score était alors envoyé au serveur, qui affichait le code de validation si le score était suffisamment élevé. Sauf qu’il était physiquement impossible d’atteindre un tel score, à moins d’être un maniaque de la souris…

Virtualabs et Fluxius se sont alors mis à décompiler le flash, et on trouvé que le score était d’abord chiffré en RC4 puis envoyé au serveur. Bien entendu, la clé RC4 étaient hardcodée dans le flash. Apres extraction de la clé, il leur a donc été possible de forger un score de plusieurs millions de points, de le chiffrer correctement et de l’envoyer au serveur pour que celui-ci accepte de révéler le code de validation.

La team soutenue par son sponsor...

La team soutenue par son sponsor...

300 captchas

Épreuve « kikoo » n°2. Il fallait résoudre 300 captchas sur une page Web dans un laps de temps très bref. Même si dans l’absolu c’est théoriquement envisageable, cela reste quand même assez incertain. Il fallait donc remarquer que l’URL de validation du captcha contenait en réalité le texte de celui-ci encodé en base64… Il a donc été assez facile de coder un bot en Python récupérant les pages et effectuant la chaîne de validation pour valider l’épreuve.

Failles applicatives

La série d’épreuve nommée  « Exploitation » consistait à télécharger une VM Linux et à exploiter les différentes failles qui s’y trouvaient. Il s’agissait d’une série de binaires SUID comportant différentes failles applicatives. La première n’était autre qu’un buffer overflow. Le temps de sortir Python, un shellcode Linux, ainsi que GDB, et l’épreuve a été validée sans trop de soucis.  La deuxième faille de la série était une format string, un peu plus galère à exploiter. Enfin la dernière était une faille maison qui s’exploitait en forgeant le paramètre d’entrée de telle sorte à ce qu’il soit accepté et que le programme finisse par lire le fichier contenant le code de validation.

Grub FAIL!

Pour exploiter ces 3 failles applicatives, il fallait donc être quand même motivé… Mais il y avait moyen de faire plus simple. Beaucoup plus simple. En effet, les membres du staff avaient oublié un détail crucial : sécuriser le Grub de la VM… Il était par conséquent possible de rooter la VM juste en ajoutant la chaîne ultra-connue « init=/bin/sh » comme paramètre du noyau pour se retrouver automatiquement logué en root. Et paf le shell !

Owned by Grub

Owned by Grub

Voila ce qui arrive lorsqu’on oublie ce genre de détail :) . Le staff a d’ailleurs fait une drôle de tête quand nous les avons informé de ce léger oubli. Enfin, ils auraient pu jouer le jeu et accorder un bonus supplémentaire…

Remise des prix

A 1h du mat, le challenge se termine et le vainqueur est annoncé. Même s’il s’agit de moi, je tiens vraiment à rappeler que le véritable vainqueur du challenge n’est pas moi, mais bien l’ensemble de la team qui représentait HZV ! Le 2ème est Samsa (un Espagnol fort sympathique), suivi de Nagual (de Backtrack-fr) et de l’équipe de Maubeuge (merci à Shatter pour le screenshot des scores !).

Résultats Insomni'hack 2010

Résultats Insomni'hack 2010

Nous recevons alors une panoplie de t-shirts Kaspersky et Insomni’hack, ainsi qu’un sympathique routeur firewall Fortinet. Bref, de quoi s’amuser un peu à Sysdream :)

Nous terminons la soirée tranquillement à notre hôtel, accompagné comme il se doit d’une bouteille de Vodka, de chips et de saucisson. Bah oui, il faut bien fêter tout ça !

Annexe : Le poutrage du lapin masqué

Le lendemain du challenge, après avoir été hanté toute la nuit par l’image du lapin (One Time Pad n°3) resté incomprise, je me suis mis en tête de trouver la solution à cette épreuve. Avec GIMP, je me suis aperçu que l’outil pot de peinture appliqué (réglé avec un seuil nul) sur des zones aléatoires de l’image faisait apparaître clairement des bandes verticales, qui en plus étaient toutes espacées de 7 pixels. Autrement dit, ces bandes avaient beaucoup de chance de représenter les pixels dont le bit de poids fort était à zéro, comme c’est toujours le cas en ASCII (non étendu). Le LSB se confirmait de plus en plus… Ayant Python sous la main, j’ai codé un petit tool permettant de parser l’image, extraire tous ses bits de poid faible, et ainsi reconstituer le message. A un décalage près, voici le résultat :

W3LCOME_2_H4CK3R'S_WOND3RL4ND

On notera la référence au lapin blanc d’Alice au Pays des Merveilles… Maintenant, Crashfr et Fluxius peuvent dormir tranquille sans être hantés :) . Seul regret : ne pas avoir eu le temps de valider cette épreuve sur place…

Les geeks aussi ont le droit de faire du tourisme

Les geeks aussi ont le droit de faire du tourisme

Conclusion et remarques

Au final, toute l’équipe ainsi que moi-même avons passé un très bon moment lors de cette soirée, riche en ambiance chaleureuse, rencontre, boissons (enfin, nous étions la seule équipe à boire), et prise de tête sur les différents challenges :) . C’était la première fois que je me rendais à un événement de ce genre à l’étranger.

J’aurais toutefois quelques remarques / critiques concernant l’événement :

  • Nous avons trouvé assez peu réglo le fait que certaines équipes disposaient d’Internet via une connexion 3G, car cela avantage considérablement.
  • Nous regrettons le manque de réalisme des épreuves, un peu trop axées sur la kikoolol attitude et pas assez sur ce qui se trouve réellement en pentest.
  • Dommage que l’événement se termine si tôt (1h du mat), surtout avec un nom comme « Insomni’hack »…

J’espère que le staff, s’il lit ce billet, ne les prendra pas mal ; il s’agit au contraire de conseils pour l’année prochaine.

En tout cas, félicitations à eux pour avoir organisé cet événement ! Nous espérons les voir le 19 juin à la Nuit du Hack ;)

Plus de photos sur le blog de Fluxius

  1. 14 réponses à “Insomni’hack 2010 : HZV won”

  2. Salut :)

    Bien joué les mecs :) Je suis aussi resté collé sur ce foutu lapin, tu pourrais me montrer ton petit tool?

    Merci!

    Par Dad le 25 janvier 2010

  3. En ASCII, ce sont seulement les caractères non-étendus qui sont codés sur 7 bits (le 8ème est donc nul). Sinon bah c’était bien fun, et ca me dit bien de remettre ça ;) Peut-être à la prochaine édition en 2011 ?

    Par virtualabs le 25 janvier 2010

  4. @virtualabs: oui effectivement, quand je disais ASCII c’était un abus de langage, dans le sens ASCII non-étendu uniquement.
    @Dad: Je vais peut-être rédiger un article avec les solutions plus détaillées, je te tiens au courant.

    Par Emilien Girault le 26 janvier 2010

  5. Y’avais aussi le postit à la con qu’on va résoudre si on arrive le re-choper.

    Le concours était génial et la prochaine fois on fera 1 seul compte, car il fallait bouger notre cul 1 par 1 pour aller valider et poursuivre sur les niveaux au-dessus =P

    Par FlUxIuS le 26 janvier 2010

  6. Et bien bravo pour ce succès ! C’était super, dommage que je n’ai pas pu y rester ;(

    A bientôt,

    Bruno.

    PS, si vous êtes sur Paris ces prochains jours, j’organise une petite soirée qui pourrait vous intéresser : http://wp.me/p5zZf-jn

    Par Bruno Kerouanton le 26 janvier 2010

  7. Merci pour l’invitation ! J’y serais !

    Par Emilien Girault le 26 janvier 2010

  8. A propos de la VM d’exploitation : il était aussi possible, hors Grub, de booter directement sur un Live CD pour accéder le système de fichiers. Ce qui permettait non seulement d’obtenir les différents tokens (comme montré ici) mais aussi de consulter le swap qui contenait une tonne de choses intéressantes, dont un exploit (pour le level 3) et les sources (de mémoire) des levels 2 et 3.

    Là encore, l’orga a fait la tête quand j’ai ramené l’info ;-) )

    Par Nicob le 27 janvier 2010

  9. Effectivement :)
    Je pense que donner la VM était vraiment une mauvaise idée, de toutes façon. Ils auraient du mettre cette épreuve sur un serveur et donner juste un accès SSH.

    Par Emilien Girault le 27 janvier 2010

  10. Je me demande combien de personnes ont utilisé les infos du swap pour remplir les challenges, sans toutefois en parler lors de la validation des tokens …

    Par Nicob le 27 janvier 2010

  11. Pareil. N’empêche, ils auraient quand même plus accorder des bonus :)

    Par Emilien Girault le 27 janvier 2010

  12. Soluces pour les challenges autour de PDF : http://nicob.net/insomnihack_2010/epreuves_pdf.html

    Par Nicob le 28 janvier 2010

  13. Lol Nicob, obligé ils auraient fait une crise cardiaque si on leur avait annoncé cela en même temps.

    N’empêche maintenant on sait, avec la SCRT vaut mieux rien dire et Walider xD

    Par FlUxIuS le 28 janvier 2010

  1. 2 Trackback(s)

  2. 26 janvier 2010: Insomni'hack 2010 - Remote Exploit Forums
  3. 8 mars 2011: Insomni’hack 2011 | Segmentation fault

Désolé, les commentaires sont fermés pour le moment.