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; }
function login($pass) { if (!crackme_check_sql($pass)) { return; } $r = crackme_sql_query("SELECT MD5('{$pass}')"); if (!$r || !($row = @mysql_fetch_row($r))) { crackme_error('<p>Erreur SQL !?</p>'); return; } if ($row[0] == '913850b6724b8461bdf6ba268294a605') { echo '<div class="article"><p>Mot de passe valide !</p></div>'; // ... (normalement on fait plein de truc ici) } else { crackme_error('<p>Mot de passe incorrect.</p>'); } }
function ajout($note, $texte) { if (!crackme_check_sql($note, array('LOAD_FILE'))) { return; } if (!crackme_check_loadfile($note)) { return; } $sql = "INSERT INTO crackme6 (id, note, texte) "; $sql .= "SELECT MAX(id)+1, {$note}, "; $sql .= "'" . mysql_real_escape_string($texte) . "' FROM crackme6"; $r = crackme_sql_query($sql); if (!$r) { crackme_error("<p>Erreur à l'ajout du commentaire :-(</p>"); } else { echo '<div class="article"><p>Commentaire ajouté.</p></div>'; } }
function affiche_article($id) { if (!crackme_check_sql($id)) { crackme_error('<p>Hum, je n\'ai pas réussi à valider tes entrées ... (engueule Victor)</p>'); return -1; } $sql = 'SELECT titre, texte FROM ' . $GLOBALS['table'] . ' WHERE id=' . $id . ' AND secret=0'; $r = crackme_sql_query($sql); if (!$r) { return false; } if (mysql_num_rows($r) == 0) { return 0; } $row = mysql_fetch_array($r); if ($row === false) { return 0; } $titre = utf8_encode($row[0]); $texte = utf8_encode($row[1]); echo '<h2>' . $titre . '</h2>'; echo '<div class="article">' . $texte . '</div>' . "\n"; return 1; }