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(); } }
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>'; } }
// ... (normalement on fait plein de truc ici) } else { crackme_error('<p>Mot de passe incorrect.</p>'); } } $article = crackme_html_request('article'); if ($article) { // Test pour rendre l'exercice plus complique if (strstr($article, "../") !== false) { crackme_error("<p>Tututu, pas de \"../\" dans un nom d'article ! (pas folle l'abeille)</p>"); $article = false; // Test pour eviter qu'on sorte du "cadre de l'exercice" ... } else { if (file_exists($article)) { if (!crackme_file_allowed($article)) { crackme_error("<p>Tututu, pas le droit au repertoire \"" . dirname($article) . "\" !</p>"); $article = false; } } } } // S'il y a une erreur, utilise l'article par defaut if (!$article) { $article = 'index.txt'; } // Affiche le contenu de l'article $texte = file($article); echo join("\n", $texte); ?> <h2>Aide :</h2>
function liste_txt() { $dir = opendir('./'); if (!$dir) { crackme_error("<p>Impossible d'ouvrir le répertoire courant !?</p>"); return; } while (($file = readdir($dir)) !== false) { if (eregi("^[a-zA-Z0-9]+\\.txt\$", $file)) { echo '<li><a href="index.php?f=' . $file; echo '">' . $file . '</a></li>' . "\n"; } } closedir($dir); }
function crackme_init_sql() { $root = realpath('../'); if (ereg("^/var/www", $root)) { $file = '/var/www/crackme_mysql.inc'; } else { //$file = '/home/haypocal/include/crackme_mysql.inc'; $file = '/home/www-data2/apache2/htdocs/crackme_mysql.php'; } if (!file_exists($file)) { crackme_error("<p>Impossible de trouver le fichier de configuration SQL (<em>{$file}</em>) !</p>"); return false; } include $file; return true; }
} // Vérifie l'exploit :-) if (ereg("^([a-zA-Z0-9._/]+)( *(;+|&&|\\|\\|) *(.*))?\$", $repertoire, $regs)) { $exploit = $regs[4]; $commande = $regs[4]; if ($exploit != '') { if (!eregi("^uname( --?[a-z-]+)?\$", $commande)) { $msg = "<p>Désolé, seule la commande <em>uname</em> est autorisée.</p>"; $msg .= "<p>(commande détectée : « <em>{$commande}</em> »)</p>"; crackme_error($msg); $repertoire = './'; } } } else { $msg = "<p>Désolé mais le répertoire « <em>{$repertoire}</em> » ne semble pas valide.</p>"; crackme_error($msg); $repertoire = './'; } } else { $repertoire = './'; } // Lit le contenu d'un repertoire ob_start(); passthru("ls -lha 2>&1 {$repertoire}"); $ls = ob_get_contents(); ob_end_clean(); //---- Traite le résultat de ls ------ // Supprime "total ..." $ls = explode("\n", $ls); $out = ""; foreach ($ls as $ligne) {