In che modo l'utilizzo di RCE nel file jpg funziona davvero?

0

Sto cercando di capire come utilizzare i file JPG e PNG per ottenere RCE. Di seguito è riportato il mio codice per il caricamento dei file. Verificherà se il tipo di contenuto del file è corretto.

<?php

   $test = array('image/jpeg', 'image/png', 'image/jpg');

   $test2     = @$_FILES['filename'];
   $test3     = array('png', 'jpg', 'jpeg');
   $ut  = pathinfo($test2['name'], PATHINFO_EXTENSION);

   $original_path="uploadedfiles/";

   //New path uploadfile/filename.extension

   $original_path1 = $original_path.basename($test2['name']);
   $original_path2 = "C:/xampp/htdocs/demo/$original_path1";
   $resultpath  = "F:/".basename($test2['name']);

   if (isset($test2))
   {
      if (in_array($test2['type'], $test))
      {
         if (in_array($ut, $test3))
         {
            if(move_uploaded_file($test2["tmp_name"], $original_path1))
            {
               echo "The file ".basename($test2['name'])." has been uploaded successfully. <br><br> <img src=/demo/$original_path1>";
            }
            else
            {
               echo "Error in file upload";
            }
         }
         else
         {
            echo "Invalid File Extension";
         }
      }
      else
      {
         echo "Invalid file Content-type     ";
      }
   }
   else
   {
      echo "Where is the filename parameter? Go and make another request with the filename parameter.";
   }

?>

Ho provato a cambiare la descrizione e l'intestazione Exif del commento utente attraverso questo sito web con questo payload:

<?if($_GET['r0ng']){echo"<pre>".shell_exec($_GET["r0ng"]);}?>

Ma fallito.

Quindi, in qualità di pentestore, quali altre cose posso provare? Sono sicuro che mi manca qualcosa di importante, ma cosa?

    
posta Utkarsh Agrawal 03.08.2018 - 09:15
fonte

1 risposta

3

Quello che ti manca è l'effettiva esecuzione del file caricato. Un file sarebbe innocuo a meno che non venga eseguito come script PHP. E il tuo server web tratterà un file in base alla sua estensione. Quindi un normale web server non eseguirà i file jpg come script php.

Tuttavia, ci sono due avvertimenti.

  • In alcune circostanze, il server Web Apache considera un file denominato image.php.jpg come un file PHP. Quindi potrebbe essere una buona idea rinominare i file caricati con alcuni nomi privi di significato (questa idea è comunque valida di per sé).
  • naturalmente, non c'è solo un'esecuzione diretta - anche un'immagine caricata può essere inclusa in uno script PHP. Ma questa sarebbe una vulnerabilità di per sé, uno non ha bisogno di una funzione di upload di file per sfruttarlo, quindi il tuo sito non dovrebbe consentire di includere file arbitrari di scelta dell'utente comunque.
risposta data 03.08.2018 - 09:34
fonte

Leggi altre domande sui tag