File upload ZIP
Analyse du site
Nous avons un page d'upload.
Recherche
En réaliser quelques recherches, nous pouvons trouver une vulnérabilité via l'upload de fichier ZIP ayant des liens symbolic point vers un autre fichier ou dossier.
Compromission
Création d'un lien symbolic :
Ajout du symlink à une archive :
Importation du fichier sur le serveur :

On vois bien notre fichier zip, cliquons sur le fichier :

Une erreur 404 apparait, c'est normal. Le chemin vers l'index est incorrect. En se basant sur l'URL : http://challenge01.root-me.org/web-serveur/ch51/tmp/upload/62b82cd47770a9.69674086/evil
On comprend qu'il faut remonter trois dossier. Récréation d'un lien symbolic :
Ajout du symlink à une archive :

Importation du nouveau ZIP, le lien fonctionne et nous voyons bien l'index :

Nous avons enfin le flag : N3v3r_7rU5T_u5Er_1npU7
Code source
<?php
if(isset($_FILES['zipfile'])){
    if($_FILES['zipfile']['type']==="application/zip" || $_FILES['zipfile']['type']==="application/x-zip-compressed" || $_FILES['zipfile']['type']==="application/octet-stream"){
        $uploaddir = 'tmp/upload/'.uniqid("", true).'/';
        mkdir($uploaddir, 0750, true);
        $uploadfile = $uploaddir . md5(basename($_FILES['zipfile']['name'])).'.zip';
        if (move_uploaded_file($_FILES['zipfile']['tmp_name'], $uploadfile)) {
            $message = "<p>File uploaded</p> ";
        }
        else{
            $message = "<p>Error!</p>";
        }
        $zip = new ZipArchive;
        if ($zip->open($uploadfile)) {
            // Don't know if this is safe, but it works, someone told me the flag is N3v3r_7rU5T_u5Er_1npU7 , did not understand what it means
            exec("/usr/bin/timeout -k2 3 /usr/bin/unzip '$uploadfile' -d '$uploaddir'", $output, $ret);
            $message = "<p>File unzipped <a href='".$uploaddir."'>here</a>.</p>";
        $zip->close();
        }
    else{
        $message = "<p> Decompression Error </p>";
    }
    }
    else{
    $message = "<p> Error bad file type ! <p>";
    }
}
?>
<html>
    <body>
        <h1>ZIP upload</h1>
        <?php print $message; ?>
        <form enctype="multipart/form-data" method="post" action>
            <input name="zipfile" type="file">
            <button type="submit">Submit</button>
        </form>
    </body>
</html>