Miscellaneous

sábado, 26 de diciembre de 2015

Mejorando un script php para mitigar ataques directory transversal

Muchas veces los desarrolladores web optan por brindar la funcionalidad de descarga o visualización de ficheros desde sus aplicaciones web, olvidando por desconocimiento o mero descuido que el no añadir medidas de seguridad a esta característica puede desembocar en una falla muy fácil de explotar pero a su vez muy seria, ya que como se vera a continuación la mala programación de esta funcionalidad puede permitir que un atacante se mueva por directorios y ficheros que se encuentra fuera del directorio web raíz, ficheros y directorios que a su vez pueden contener datos importantes de la aplicación y del servidor en general, es por ello que he decidido brindar una sencilla forma de mitigar esta problemática, que si bien no es la única ni mucho menos mejor manera de hacerlo, si que dará una idea a los iniciados en el desarrollo web, para empezar a mejorar la seguridad de sus aplicaciones.

Sin mas bla,bla,bla, empecemos diciendo que a un directory transversal también se le conoce con los nombres "dot-dot-slash" o "punto punto barra", escalada de directorios y backtracking , dicho esto, ahora sí, miremos el código vulnerable:

Código vulnerable a directory transversal
Dicho código no hace otra cosa mas que mostrar el contenido del fichero (Con sintaxis remarcada) que tiene como nombre el que le pasamos vía get usando el parámetro file, en nuestro caso el archivo que visualizamos se llama 0.txt y esto es lo que nos muestra:

Contenido del archivo 0.txt


Pero bueno, si son de los que creen que ese código no tiene riesgo alguno, pues abrir bien los ojos que enseguida les muestro lo que un curioso puede conseguir si juega un poco con ese jugoso parámetro file:


Contenido del fichero /etc/passwd
Información del uso de memoria que contiene el
fichero /proc/meminfo
Y bueno el limite lo pone el grado de conocimiento que tengas acerca del sistema de ficheros del S.O sobre el que esta montado el servidor web, y claro esta también de la aplicación web, ya que el contenido de ficheros con extensión .php seria visualizado de igual manera.

Pero bueno para evitar esta problemática y orientar un poco a quienes han sido victimas de este tipo de ataques , aquí les dejo el código fuente que mitiga hasta cierto grado esta vulnerabilidad, y algunos resultados al intentar obtener ficheros fuera del directorio desde donde se ejecuta este código:

Código mejorado
Respuesta al intentar acceder a /etc/passwd
Resultado al acceder a un fichero con extensión .asm (Esta permitida)
Resultado al intentar visualizar index.php (La extensión .php no esta permitida)
Como dije no es la única forma de lograr mitigar este tipo de ataques y mucho menos la mejor, ya que el script presenta algunas deficiencias en cuanto funcionalidad, pero bueno, para fines prácticos creo que cumple con el objetivo, así que son libres de usarlo, mejorarlo, intentar hacer bypass, compartirlo y ¡happy hacking! :) ...

No hay comentarios.:

Publicar un comentario