¿Se puede explotar esto en este código?

-4

¿Hay alguna posibilidad de pasar esta comparación débil? ¿Puede el usuario ingresar un archivo con una extensión no contenida en $ permitido y pasar la verificación de seguridad?

$allowed = array('txt','docx');
if (isset($_REQUEST['file'])) {
    $file = $_REQUEST['file'];
    if (preg_match('#\.(.+)$#', $file, $matched) && isset($matched[1]) && !in_array($matched[1], $allowed)) 
        echo 'You can not pass beacause extension is bad';   
    }
}

Si el código anterior devuelve que es la extensión correcta. Hay siguiente validación:

if (strrpos($file, '.') !== false)
    $ext = substr($file, strrpos($file, '.'));
else
    $ext = '';

Me pregunté si puedo ingresar algo que omita todo cheque y en variable $ ext = ''; Tengo algo como 'jpg' o 'bmp' lo que está fuera de la tabla permitida. Es un ejemplo de verificación extraña que encontré en el servidor hasta la penetración.

    
pregunta sebastianpszczolka 22.01.2016 - 11:33
fuente

2 respuestas

0

Técnicamente..

No, el código proporcionado para filtrar una extensión dada funciona bien y no debería haber una manera de engañarla. Sin embargo, debes habilitar la strict - flag .

Entonces otra vez ...

Los formatos de archivo que proporcionó no tienen que ser seguros. DOCX: los archivos pueden incrustar macros maliciosas.

Aunque tu código puede ser mejorado. Su expresión regular se activa demasiado pronto cuando se tienen varias extensiones, la condición if aprueba un script si no tiene ninguna extensión, algunas partes son necesarias y parece que falta para cancelar el script después de mostrar el error. Ver mis ediciones a continuación.

$allowed = array('txt','docx');
if (isset($_REQUEST['file'])) {
    $file = $_REQUEST['file'];
    $match = preg_match('#\.(\w+)$#', $file, $matched);
    if (!$match || ($match && !in_array($matched[1], $allowed, true))) 
        echo 'Invalid file extension';
        return; // Stop script right here
    }
}
    
respondido por el James Cameron 22.01.2016 - 12:00
fuente
0

Recuerde que realmente no vale la pena confiar en las extensiones de archivo. Las GUIs de escritorio pueden usar extensiones como una sugerencia sobre cómo abrir o mostrar archivos en función de sus extensiones (y otra vez puede que no debido a una acción redefinida por el usuario en una extensión específica) pero el sistema operativo no No tome nota de la extensión al determinar qué tipo de contenido es un archivo.

Los diferentes sistemas operativos tratan esto de manera ligeramente diferente, pero generalmente son los permisos de un archivo lo que lo hace peligroso, no la extensión. Muchos compiladores e intérpretes, por ejemplo, no se preocupan por las extensiones, ni tampoco hacen varios shells, etc. que intentarán ejecutar un archivo llamado 'fred.gif' muy a gusto si usted, o un programa, se lo dice porque los permisos son correctos. .

Los diferentes sistemas operativos y servicios tratan las extensiones de manera diferente de esta manera, pero tenga en cuenta.

    
respondido por el David Scholefield 22.01.2016 - 14:16
fuente

Lea otras preguntas en las etiquetas