function telecharge($fichier) { // Interdit des exploits trop vilains $allow = array('INTO', 'LOAD_FILE', 'OUTFILE'); if (!crackme_check_sql($fichier, $allow)) { crackme_error('<p>Nom de fichier incorrect : « <em>' . $str . '</em> ».'); return; } // Vérifie les LOAD_FILE if (!crackme_check_loadfile($fichier)) { return; } // Vérifie les OUTFILE if (preg_match_all('/OUTFILE +([^ ]+)/i', $fichier, $match)) { foreach ($match[1] as $string) { $str = mysql2str($string); if (!$str) { crackme_error("<p>Chaîne non reconnue : « {$string} »."); return; } if (strpos($str, '/') === false || !crackme_file_allowed($str)) { crackme_error("<p>Pas le droit d'écrire dans le fichier « {$str} ». Utilisez le répertoire couran(" . realpath('.') . ") ..."); return; } } } // Lit le compteur crackme_init_sql(); $compteur = crackme_sql_query("SELECT compteur FROM crackme4 WHERE fichier='{$fichier}';"); if (!$compteur) { crackme_error("<p>Erreur du compteur ...</p>"); return; } // Interdit les fichiers autres que truc.txt if (!ereg("^[a-zA-Z0-9]+\\.txt\$", $fichier)) { crackme_error("<p>Seul les fichiers textes (.txt) du répertoire courant sont autorisés.</p>"); return; } // Mise à jour du compteur if (mysql_num_rows($compteur) == 1) { crackme_sql_query("UPDATE crackme4 SET compteur=compteur+1 WHERE fichier='{$fichier}';"); } else { crackme_sql_query("INSERT INTO crackme4 (fichier, compteur) VALUES('" . mysql_real_escape_string($fichier) . "',1);"); } // Lit la taille du fichier $size = filesize($fichier); if ($size === false || $size == 0) { crackme_error("<p>Impossible de lire la taille du fichier \"<em>{$fichier}</em>\", ou alors il est vide.</p>"); return; } header("Content-Type: application/octet-stream"); header("Content-Length: " . $size); header("Content-Disposition: attachment; filename=\"" . basename($fichier) . "\";"); readfile($fichier); die; }
} echo "</ul>\n"; } function main() { $id = crackme_html_request('id'); if ($id != '') { if (affiche_article($id) == 0) { crackme_error("<p>Article inexistant (ou secret !).</p>"); } echo '<p><a href="' . $GLOBALS['page'] . '">Retour à la liste des articles</a></p>'; } else { liste_articles(); } } $ok = crackme_init_sql(); if ($ok) { main(); } ?> <h2>Aide :</h2> <?php crackme_help(); ?> <div id="aide" style="display: none;" class="article"> <p>La table SQL est <em>article1</em> avec comme clé <em>id</em> et les champs : <em>titre</em> (chaîne), <em>texte</em> (chaîne) et <em>secret</em> (entier)</p>