0
Fuzz

Voter

Dew’s Quiz Hacking


En parcourant le Web ces derniers temps, vous êtes peut-être tombé sur l'un des quiz de Dew, le créateur du très sympa DewPlayer.

La première chose que voit l'informaticien de base en tapant les réponses est que celles-ci sont vérifiées en live, sympa, et que donc il y a sûrement du Javascript.

Après s'être énervé sur certaines réponses qu'on est pourtant persuadé de connaître, on se dit "tiens, si c'est du Javascript, on doit voir le code dans la source de la page". OK, OK...
Donc on vend son âme au diable et on regarde le code source : il y a effectivement du code Javascript et notamment ceci :

<input id="q10" onkeyup="javascript:checkQ(this);" class="quizz" name="q10" type="text"></td></tr>

et ça :

<script type="text/javascript">

q['q1']  = '459ffda7916bc58aa2086578ae6626c6023f78fc';
q['q2']  = '78bf1e60ca518e6a14d45da8665a3ff2571e53f1';
q['q3']  = 'f2bcf7604b82811a2b475b427da01fbfc69d1212';
q['q4']  = 'ab641c0d019af9166305dfef010bff299ab6bdff';
q['q5']  = '52b61c08efa3dad65da340213ed1c0364a25be66';
q['q6']  = 'e00f9368d06ab2fda0e57cc00605009dea2a3fe8';
q['q7']  = 'c0c6be456decf89f3161bf3686c6f25164ef07d7';
q['q8']  = '6cc19a9280e9b4ab7860443eb8b770572cad8833';
q['q9']  = 'f4938bfa3d57047a821a7ad19624cad973be34d4';
q['q10'] = 'c4753cc0fb22a881bbb9e80210390bf874190572';

</script>

Bon, clairement la fonction appelée pour vérifier le champ est checkQ et il y a tout un tas de hash qui doivent correspondre à nos réponses. Et oui, mince! Les réponses ne sont pas en clair!

Pas grave, on cherche le code Javascript correspondant à checkQ et on voit en gros que le hash est généré en passant la chaine en majuscule et en applicant du sha1 :

function checkQ(obj) {
        if(sha1Hash(obj.value.toUpperCase()) == q[obj.id]) {
                validate1(obj);
        }       else {
                validate2(obj);
        }
       
}

Bon, comment s'y prendre maintenant ?
Il faut retrouver le texte qui a généré les 10 hashs vu plus haut. On pourrait bêtement utiliser un programme calculant tous les hashs possibles avec des combinaisons de lettres et de chiffres sur une dizaine de caractères... mais on risque d'y passer sa semaine. Il existe au passage des programmes possédant des tables de hashs précalculés, mais c'est assez rare, et on en trouve même des payantes sur le net!
On peut penser par exemple à Rainbowcrack.

Ici, on va s'y prendre différemment. En effet, il ne s'agit pas de retrouver un mot de passe complexe mais des données bien ciblées (titres de films, de jeux...). On va donc pouvoir générer soit même une table de hash et la comparer aux hash du quizz.

Première chose : il faut créer un fichier avec une liste de films (Google ou les sites spécialisés peuvent fortement vous aider dans cette étape, qui est ici très importante pour obtenir de bons résultats!).

Ensuite par exemple en PHP, on crée une fonction qui va calculer notre sha1 correctement :

function calcSHA1(&$item) {
        $item = sha1(utf8_decode(mb_strtoupper(ltrim(rtrim($item)),"utf-8")));
}

Ici, je travaille en UTF-8 ce qui nécessite quelques manipulations, mais en gros les choses importantes sont de nettoyer la ligne des éventuels caractères inutiles au début ou à la fin et de passer la chaîne en majuscule.

Ensuite, on génère notre fichier de hash à partir de notre fichier texte :

$lines = file ('<chemin>/liste.txt');
array_walk ($lines, 'calcSHA1');
                       
file_put_contents('<chemin>/liste.hash', join("n",$lines));

Ici, on lit tout le contenu du fichier que l'on place dans un tableau, sur lequel on applique notre fonction de hash. On écrit ensuite ce tableau dans un nouveau fichier, en prenant soin de rajouter des "retours-chariots".

Finalement, on cherche les égalités entre les hashs, en ayant pris soin de les renseigner :

$q = $r = array();
$q[1]  = '459ffda7916bc58aa2086578ae6626c6023f78fc';
$q[2]  = '78bf1e60ca518e6a14d45da8665a3ff2571e53f1';
$q[3]  = 'f2bcf7604b82811a2b475b427da01fbfc69d1212';
$q[4]  = 'ab641c0d019af9166305dfef010bff299ab6bdff';
$q[5]  = '52b61c08efa3dad65da340213ed1c0364a25be66';
$q[6]  = 'e00f9368d06ab2fda0e57cc00605009dea2a3fe8';
$q[7]  = 'c0c6be456decf89f3161bf3686c6f25164ef07d7';
$q[8]  = '6cc19a9280e9b4ab7860443eb8b770572cad8833';
$q[9]  = 'f4938bfa3d57047a821a7ad19624cad973be34d4';
$q[10] = 'c4753cc0fb22a881bbb9e80210390bf874190572';

$linestxt = file ('<chemin>/liste_jeux.txt');
$pointeur=0;
foreach ($lines as $line) {     
        for ( $j=1 ; $j<=count($q) ; $j++ ) {
                if( $line == $q[$j] ) {
                        $r[$j]=$linestxt[$pointeur];
                }
        }
        $pointeur++;
}

Au passage je parcours aussi le fichier texte d'origine pour pouvoir ressortir la solution, et le tour est joué, il ne reste plus qu'à afficher les réponses!

for ( $k=1; $k<=count($q); $k++ ) {
                        echo "<em>La reponse a la question ".$k." est ".$r[$k]."</em><br />n";
                }

Pour voir ça en action maintenant, ça se passe ici :

hack

Films Quiz - Source : Quiz OST blindtest
Quiz Thèmes TV - Source : Blindtest 2 - Thèmes TV
Quiz Séries TV - Source : BlindTest - Les séries TV
Quiz Films - Source : BlindTest OST
Quiz Jeux - Source : Blind Test Jeux Video
Quiz Jeux - Source : Blind Test Jeux Video
Quizz Compositeurs - Source : BlindTest 3


2 commentaires »

  1. Gravatar

    Mkl :

    Surfe avec Internet Explorer Internet Explorer 6.0 sur Windows Windows XP
    Ecrit le 29 mars 2006 @ 22:57

    héhé trop fort )

  2. Gravatar

    depanneur informatique nantes :

    Surfe avec Mozilla Firefox Mozilla Firefox 2.0.0.4 sur Windows Windows Vista
    Ecrit le 15 juillet 2007 @ 19:31

    -


Flux RSS des commentaires · Faire un TrackBack de cet article.

Laisser un commentaire

Nom : (Required)

E-mail : (Required)

Site web :

Commentaire :

neutral arrow idea ? ! -) roll twisted evil cry oops -P -x ahah 8-) ??? shock -o -( ) -D wub wink whistle wassat w00t unsure tongue smile sleeping silly sideways sick shocked sad pouty pinch ninja lol kissing heart happy biggrin getlost face ermm dizzy devil cwy cool cheerful blush blink angry angel alien