¿Qué personaje puede causar que escape la parte izquierda o derecha de STRING?

-1

Pregunta 1)

en PHP cuando verificamos:

  dir1/dir2/../file.txt  ====(this is same as)=====>   dir1/file.txt

es algo así como posible:

  file_get_contents('/home/path/' . $_GET['evil']. '/file.txt');

si el pirata informático configuró $evil como: ../ o evil_character (quiero saber si existen reales) que hacen que PHP escape la parte derecha de PATH (sé cómo escapar de la parte izquierda del camino ), entonces, hacker accedió de esta manera:

 '/home/path/'. 'eviltfile.php?
$evil = '../red apple
  dir1/dir2/../file.txt  ====(this is same as)=====>   dir1/file.txt
'; $message = 'green ' . $evil. ' banana'; print($message ) ==============> red apple
'. '/file.txt'' //and thus file.txt was ignored

Pregunta 2)

Tengo otra pregunta sobre las cadenas generales (no la ruta del archivo), por lo tanto, si hay algún %code% que haga que PHP se escape de la parte izquierda o derecha de la cadena STRING, como esto:

  file_get_contents('/home/path/' . $_GET['evil']. '/file.txt');

p.s. No necesitas respuestas para versiones antiguas de php.

    
pregunta T.Todua 09.04.2018 - 11:07
fuente

1 respuesta

0

En primer lugar, debe canonizar los datos de entrada antes de una validación y un procesamiento.

Pregunta 1)

Debe usar funciones canónicas para manejar archivos, PHP tiene algunas funciones para este propósito, por ejemplo: basename o realpath . Esas funciones canonizan las rutas de los archivos para evitar comportamientos como los que mencionó, por ejemplo, si un atacante escribe algo como esto ..?param=../../path/file , esas funciones convierten la cadena en algo como este /path/file .

Pregunta 2)

Debería usar funciones canónicas para los datos de entrada, PHP no tiene muchas opciones en mi opinión, por lo que creo que una buena opción es OWASP ESAPI para PHP . Las funciones de esta API convierten cada carácter en una expresión mínima, de modo que puede validar o procesar datos de entrada saneados y minimizar comportamientos extraños en su código.

Espero que esta información te ayude.

    
respondido por el hmrojas.p 09.04.2018 - 20:35
fuente

Lea otras preguntas en las etiquetas