No puedo descubrir cómo omitir esta función para lfi

1

Actualmente estoy haciendo algo de práctica sobre la seguridad y los desafíos que se presentan en un sitio web. Uno de ellos habla sobre LFI y yo descubrí qué hacer, pero no tengo idea de cómo hacerlo, así que vamos a mostrarte el problema:

Aquí está la url para hackear:

http://example.com/challenge27/?page=contact

Se me pide que obtenga la contraseña en /etc/passwd , por lo que la primera idea que surge es probar un directorio transversal:

http://example.com/challenge27/?page=.

Esto lanza una excepción:

Warning: assert(): Assertion "strpos('includes/..php', '..') === false" failed

Lo que es obvio es que strpos detecta cada aparición de '..' en la ruta y la afirmación comprueba que esta función devuelve un valor falso

Luego lo intento agregando un byte nulo al final de la misma url

http://example.com/challenge27/?page=.%00

que me da otra pista:

Warning: file_exists() expects parameter 1 to be a valid path

Pero aquí estoy bloqueado, mi objetivo es inyectar la ruta a /etc/passwd de esta manera:

http://example.com/challenge27/?page=../../../../etc/passwd

Siento que puedo explotar la solución de byte nulo, pero después de probar muchas URL diferentes obtuve la advertencia file_exists () o la de assert (), me estoy quedando sin ideas. ¿Alguien tiene una pista más para dar?

    
pregunta onizukaek 29.12.2016 - 23:49
fuente

1 respuesta

3

Normalmente será la ruta, seguida de un byte nulo para terminar la cadena cuando Se ejecuta el código C que realmente recupera el archivo :

http://example.com/challenge27/?page=../../../../etc/passwd%00

Tenga en cuenta que los caracteres de bytes nulos no funcionan en las versiones actualizadas de PHP.

El otro desafío es obtener .. más allá del filtro.

Pruebe estos para ver si pueden omitir esta comprobación:

  • Intente usar la codificación Unicode de 16 bits ( . = %u002e ).
  • Prueba la codificación de doble URL ( . =% 252e).
  • Intente la codificación UTF-8 Unicode demasiado larga ( . puede ser %c0%2e , %e0%40%ae , %c0ae )
respondido por el SilverlightFox 30.12.2016 - 10:10
fuente

Lea otras preguntas en las etiquetas