Outils d'utilisateurs

Outils du Site


hackingweek_2014:web:web2

Différences

Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.

Lien vers cette vue

hackingweek_2014:web:web2 [2014/03/06 12:00]
telnes créée
hackingweek_2014:web:web2 [2017/04/09 15:33] (Version actuelle)
Ligne 1: Ligne 1:
 Moteur de recherche Taagle Moteur de recherche Taagle
  
-code index.php+Code source disponible pour cette épreuve : https://repo.zenk-security.com/hackingweek2014_ctf/web2.zip
  
 +
 +code index.php
 <code html> <code html>
 <?php session_start(); ?> <?php session_start(); ?>
Ligne 218: Ligne 220:
  
 </code> </code>
 +
 +
 +Pour accéder à la page success.php qui provoque le "**cataclysme**" il faut que la condition ($query == "taagle") soit validé dans la fonction search_query($query).
 +
 +
 +
 +Première analyse des filtres effectués en début de code sur $query ($_GET):
 +
 +$query = htmlspecialchars($_GET['query'], ENT_QUOTES, 'ISO-8859-1');
 +  * http://us3.php.net/manual/fr/function.htmlspecialchars.php fonction PHP qui permet de convertir les caractères &<>'" en leur équivalent HTML
 +$query = strtolower($query);
 +  * http://us3.php.net/manual/fr/function.strtolower.php fonction PHP qui permet de mettre une chaine en minuscule
 +$query = truncate_query($query);
 +  * fonction définie dans le code qui permet de tronquer une chaine à 50 caractères max.
 +$query = forbidden_query($query);
 +  * fonction définie dans le code qui permet d'obfusquer (masquer) une chaine si elle contient des mots clés (google,taagle,bing...)
 +$query = filter_query($query);
 +  * fonction définie dans le code qui permet de remplacer "\r", "\n", "\t", "\\" par "\n" et de conserver que la première partie 
 + 
 +
 +
 + 
 +  
 +La fonction search_query est appelé via "$results = search_query($query);" après l'appel des filtres.
 +
 +
 +
 +Si on entre le mot clé "taagle" dans le champs de recherche nous avons en résultat "$�=" ce qui est pas top :) (l'obfuscation fonctionne bien)
 +
 +il faut donc trouver quelle chaine de caractère entré pour avoir "taagle" en sortie !
 +
 +il faut regarder la fonction obfuscate_query de plus près.
 +<code php>
 +function obfuscate_query($query)
 +{
 + global $obf_seq; // clé pour le xor masqué dans le fichier require ../secret.php
 +
 + for($i = 0; $i < strlen($query); $i++) // boucle sur la longueur de la chaine query
 + {
 + $query[$i] = chr(ord($query[$i]) ^ $obf_seq[$i % count($obf_seq)]); // XOR entre les charactères de query et la clé
 + }
 +
 + $query = str_rot13($query); // appel à la fonction rot13 pour faire un décalage de 13 dans l'alphabet (26)
 +
 + return $query;
 +}
 +</code>
 +
 +Ensuite il faut exploiter la fonction filter_query pour forcer le passage dans la fonction d'obfuscation et conserver que notre chaine de caractère qui écrit "taagle"
 +
 +filter_query("test\t titi");
 +
 +va retourner test
 +
 +si l'on fait 
 +
 +filter_query("test\t taagle");# test taagle
 +
 +va retourné $�/eJ.�25 car la présence du mot clé "taagle" nous fait entrer dans la fonction d'obfuscation.
 +
 +il faut donc faire un script qui poste une chaine de caractère de la forme :
 +
 +<caractères> \t taagle
 +
 +ou l'on fait une itération sur chaque <caractère> (caractère ascii 00 caractère ascii 01 caractère ascii 02 ....) jusqu'a l'obtention d'un **t**
 +
 +puis on cherche le deuxième caractère qui donne un **a** ... et ainsi de suite.
 +
 +
 +voici un code qui permet de le faire (en php :) )
 +
 +le code se résume à "$start.$char.'taagle'"
 +  * $start = le début de la chaine (vide au début)
 +  * $char = itération pour chercher
 +  * 'taagle' = pour forcer l'obfuscation
 +
 +<code php>
 +<?php
 +# url du moteur taagle
 +$url = "http://91.121.9.92/web2/search.php?query=";
 +
 +# ce que l'on cherche à obtenir dans la réponse du moteur de recherche
 +$comps = str_split('taagle'."\t");
 +
 +$start="";
 +foreach($comps as $key=>$cmp){ #pour chaque char recherché
 + for($i=0;$i<256;$i++){ # on boucle sur la table ascii 256 # 128 n'a pas trouvé toute les lettres
 +
 + $char = chr($i); # on convertie l'int en caractère ascii # string chr ( int $ascii )   
 + $res = getQuery($url,urlencode($start.$char.'taagle')); # récupère le résultat de la page
 + if(!isset($res[1][0])){ # si pas de résultat
 + $http = file_get_contents($url.urlencode($start.$char.'taagle')); # on récupère la page avec notre mot ($start)
 + if (strpos($http,'cataclysme') !== false) { # si il y a cataclysme sur la page
 + echo "\n\n url $url".urlencode($start.$char.'taagle'); # on affiche l'url trouvé afin de la consulter
 + exit(); # fin
 + }
 + }
 + else{ # sinon (il y a une réponse)
 + $tmp = (string)$res[1][0];
 + $str = str_split($res[1][0]);
 + echo "."; # des petits points 
 + if(ord($str[$key]) == ord($cmp)){ # si le mot chercher est dans la page on concatène le caractère qui à permis de l'obtenir à $start 
 +
 + echo "\n".urlencode($char)." : ".urlencode($cmp)."\n"; # on affiche 
 + $start=$start."$char";
 + break;
 + }
 + }
 + }
 +}
 +
 +
 +function getQuery($url,$query){ #r écupère le résultat de la requete faite au moteur taagle
 + $res = file_get_contents($url.$query);
 +
 + $patern="@<span>(.*)</span>@";# <span>$query.net</span>
 + preg_match_all($patern,$res,$matches);
 +
 + return $matches;
 +}
 +?>
 +</code>
 +
 +http://img15.hostingpics.net/pics/981774web2.png
 +
 +
 +
 +la solution est 
 +
 +http://91.121.9.92/web2/search.php?query=7%9A2%19%02%06%3Btaagle
 +
 +
 +http://img15.hostingpics.net/pics/317320cataclysme.png
 +http://img15.hostingpics.net/pics/533569success.png
 +
 +
 +
 +
 +
 +
 +
 +
hackingweek_2014/web/web2.1394103659.txt.gz · Dernière modification: 2017/04/09 15:33 (modification externe)