Goufablog

Geek, nouvelles technologies, société et jeux vidéos!
2
sept.
2012
NewbieContest, le terrain de jeu du hacker
Technique - par Goufalite - 4092 hits

Vous avez toujours rêvé de pirater le site de la Nasa? De récuperer des documents secrets depuis les renseignements généraux? Mais hélas vous avez peur de vous faire attraper par la HADOPI (non, non, arrêtez de rigoler) et surtout vous n'avez pas les moyens techniques pour faire ces prouesses. Heureusement Internet a pensé à vous invite donc à vous échauffer sur un site prévu pour : NewbieContest.

Au programme

Ah oui, il faut recomposer l'image avant...
Ah oui, il faut recomposer l'image avant...

NewbieContest est un site regroupant des épreuves de programmation, de logique, de décryptage, de stéganographie et bien sûr de hacking et vous en aurez à toutes les sauces : injection SQL ou XSS, gestion des cookies, dialogue avec un bot sur IRC,... le tout dans un environnement isolé prévu pour avec le petit forum d'entraide quand on sèche ou qu'on veut trouver la réponse rapidement.

Voici ce qui est proposé :

  • Épreuves de "Crackme" : on vous fournit un éxecutable, à vous de le contourner pour trouver le mot de passe.
  • Épreuves de cryptographie : une phrase, des nombres avec ou sans clef qu'il faudra décoder avec tous les indices proposés.
  • Épreuves de hacking : on vous donne l'accès à un site sur lequel il faudra généralement vous octroyer vous-même les droits d'administration.
  • Épreuves Javascript/Java : il vous faudra analyser le code de la page de l'épreuve pour connaître la faille qu'elle cache.
  • Épreuves de logique : une suite de nombres ou de lettres, une énigme textuelle, à vous de trouver la suite ou de répondre correctement.
  • Épreuves de programmation : une page vous pose une question, cependant il faut moins d'une seconde pour y répondre. Impossible pour un humain, mais pas pour une machine! Il vous faudra faire un programme qui résolve le problème et qui renvoie la réponse à la page.
  • Épreuves de stéganographie : un code est caché dans une image, il vous faudra la décortiquer!
Le nombre de points et de validations vous donneront une idée de la difficulté de l'épreuve.
Le nombre de points et de validations vous donneront une idée de la difficulté de l'épreuve.

Un peu d'aide pour résoudre les énigmes

Les expressions régulières c'est très bon! Mangez-en!

J'en ai complètement abusé lors de ma migration en PHP5, les expressions régulières vont vous sauver la vie pour la récupération des paramètres des énigmes dans les pages ou par le bot IRC. Je vous donne quelques exemples :

Rechercher un nombre dans une phrase :

preg_match("#([0-9]+)#",$txt,$result); $nombre = $result[1];

Trouver une phrase commençant par un texte sans vérifier la casse :

$texte = "L'énigme est"; preg_match("#^($texte.*)#i",$txt,$result);

Faites juste attention au point . qui veut dire "n'importe quel caractère", il faudra l'échapper avec un backslash.

Injection SQL et XSS

On en entend beaucoup parler en ce moment où les grands sites se font pirater avec ces techniques. En gros on injecte du code SQL ou Javascript dans des requêtes pour faire se comporter le site d'une certaine façon ou pour récupérer des informations dans la base de données, et ce en passant par les données de formulaire ou les requêtes dans l'URL.

Pour le XSS, il suffit de mettre du Javascript dans un champ de formulaire, comme par exemple le très célèbre :

<script type="text/javascript"> alert("Vous avez été piraté!"); </script>

Si cette phrase est rentrée telle quelle dans la base de données, chaque internaute verra une popup s'afficher lors de l'affichage de l'information, de quoi le rebuter et le faire fuir de ce site!

Pour le SQL, il suffit de regarder le morceau de code suivant :

$query = "SELECT * FROM matable WHERE mon_texte LIKE '%".$texte."%'";

Et si $texte contenait du SQL? Genre

$texte = "' AND 0 UNION SELECT * FROM admin --'";

La requête devient :

$query = "SELECT * FROM matable WHERE mon_texte LIKE '%' AND 0 UNION SELECT * FROM admin --'";

Et hop! On récupère tout plein de données! Pour se protéger de tout ça il y a quelques gestes simples et rapides à faire :

  • Échappez les variables passées dans une requête en utilisant la fonction htmlentities de PHP ou tout autre fonction de remplacement de caractères, surtout les " et les '.
  • Utilisez si possible des requêtes préparées, par exemple "WHERE texte = @mon_texte"
  • Évitez le "*" dans les requêtes, sélectionnez les colonnes qui vous intéressent vraiment.

La suite de Fibonacci

Cette suite, vous allez la manger à toutes les sauces, et pourtant c'est une suite de nombres que vous pourrez trouver en tournant un peu la tête dans tous les sens. La suite de Fibonacci se définit ainsi :

u1 = 1 u2 = 1 un+1 = un + un-1

En gros le nombre courant est la somme des deux précédents, ce qui donne :

1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,...

Et maintenant si on prend la division de deux nombres accolés en allant vers l'infini, le résultat va tendre vers un nombre : (√5+1) / 2, le nombre d'or! Ce nombre représente la proportion parfaite, le rapport entre tous les éléments d'une spirale, d'un écran 16/10, du "canon" grec,... et bien sûr on le retrouve dans la plupart des énigmes de NewbieContest.

Les écrans 16:10 sont donc une perfection naturelle!
Les écrans 16:10 sont donc une perfection naturelle!

N'hésitez pas à coder une librairie dans le langage de votre choix pour trouver tous ces nombres, en PHP par exemple :

function fibonacci($n) { $n0 = 1; $n1 = 1; $c = 0; if ($i<=2) { return 1; } for($k=3;$k<=$i;$k++) { $c = $n1; $n1 += $n0; $n0 = $c; } return $n1; }

Ou en Python :

def fibo(n): n0 = 0 n1 = 1 for i in range(n): n1,n0 = n1+n0,n1 return n1

Et pensez aussi à faire la fonction inverse, ça peut servir...

Les épreuves de programmation

Quand vous allez envoyer la réponse à l'épreuve de programmation, il faudra faire passer votre session à la page de réponse pour qu'elle puisse identifier à quelle question correspond la réponse. Pour cela il faudra faire un peu de CURL ou de Pyhton pour récupérer la page avec tous ces éléments

$curl_instance=curl_init(); curl_setopt($curl_instance, CURLOPT_URL, $url) ; curl_setopt($curl_instance, CURLOPT_COOKIE, "SMFCookie89=$session") ; curl_setopt($curl_instance, CURLOPT_RETURNTRANSFER, 1); $str = curl_exec ($curl_instance);

Une fois la réponse trouvée, il faut renvoyer la session en plus de la réponse avec la même fonction. Attention au type de transfert, GET ou POST...

Quelques astuces

  • Ne faites pas de bruteforce! Sinon vous allez vous faire jeter par le site.
  • Avancez à tâtons, persévérez et ne vous jetez pas directement sur le forum d'aide. Vous êtes là pour apprendre de vous-même.
  • Plus le nombre de validations est grand, plus l'exercice est facile.
  • La solution la plus évidente est souvent celle-là.
  • Si votre solution de programmation ne marche pas, relancez le programme quelques fois en attendant entre les essais pour ne pas déclencher le détecteur de bruteforce.
  • Bien entendu faites des pauses : si vous n'arrivez pas à résoudre une énigme, passez à un autre, elle contiendra peut-être une méthode qui vous permettra de résoudre la première.

Sur ce, éclatez-vous bien et tirez-vous bien les cheveux sur les énigmes proposées et pourquoi pas ne pas en proposer vous-même?

+ Sources des images


Vous pouvez aussi lire :

GoufaliteGoufalite - Site Web - Steam - Twitter
Rédacteur et programmeur principal du Goufablog. Ingénieur de profession et avide de connaissances technologiques et scientifiques il partage son savoir à travers ces différents articles. Plus de renseignements sur la page de contact.
RSS Voir ses articles...
CC-BY-SACet article est protégé par une licence CC-BY-SA.


Tags : fibonacci, hack, IRC, javascript, newbiecontest, piratage, XSS
Delicious   Facebook   Commentaires(0) | Permalink
Sans commentaires!
Votre avis?
(Obligatoire)

Site et style réalisé par Goufalite
Reproduction interdite sans l'accord de l'auteur.
Valid XHTML 1.0 Transitional Optimisé pour FireFox 2
avec une résolution 1024*768