Beispiel #1
0
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 : «&nbsp;<em>' . $str . '</em>&nbsp;».');
        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 : «&nbsp;{$string}&nbsp;».");
                return;
            }
            if (strpos($str, '/') === false || !crackme_file_allowed($str)) {
                crackme_error("<p>Pas le droit d'écrire dans le fichier «&nbsp;{$str}&nbsp;». 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;
}
Beispiel #2
0
    }
    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>