Vous êtes sur la page 1sur 15

SECURITY WEB CHALLENGE 22/01/13 SECTRACK http://www.sec-track.

com/
Solucionario por: @nonroot

Introduccin:
Security Web Hacking Challenge es un corto pero entretenido reto de seguridad en aplicaciones Web, que nos desafa a vulnerar un sistema hecho a la medida para el almacenamiento de imgenes. El objetivo del reto es analizar en detalle el sistema de hosting de imgenes, enumerar caractersticas y funcionalidades del mismo y por supuesto identificar vulnerabilidades que nos permitan leer archivos ocultos en el sistema. No quiere decir esto, que la vulnerabilidad se trate de un LFI o Source Disclosure (aunque pueden existir) sino que una vez logremos identificar la vulnerabilidad (que pueden ser varias) y explotarla debemos escalar privilegios (o simplemente interactuar con los existentes) para leer informacin confidencial almacenada en el servidor objetivo. La informacin precisa a identificar es un mensaje oculto entre dos personas. Precisamente la informacin sobre una cita entre ambas. http://www.sec-track.com/

Solucin:
La solucin se va escribiendo en el mismo orden en que se van encontrando las cosas, puede parecer que la ruta era obvia y me desvo en otros asuntos, pero as funcionaba la mente en ese momento. La solucin del reto me tom 3 horas aproximadamente porque estuve pensando en posibles rutas que no me llevaron a ningn lado. A. Lo primero como siempre es descargar la maquina del juego, chequear su integridad y buscar pistas en la descripcin del reto que se public en el sitio web. Link: http://www.sec-track.com/security-challenge-ctf-web-premio-libro-ethical-hacking-2-0 SecTracker>md5sum Web_Sec_Challenge_Img.rar 328ddbf34e00d662ea4c89672dac29d3 Web_Sec_Challenge_Img.rar (OK) SecTracker> Pistas: -Una maquina linux (boot) -Servicio web corriendo en el puerto 8880 posiblemente (imagen del post introductorio) -Uso de MySQL (boot de la maquina) -Nombre de la maquina drunkadm (boot)

B. Hay que encontrar la maquina corriendo en la red local, un barrido de ping NO muestra maquinas activas en la red, es posible que la VM este filtrando. SecTracker>fping -g 192.168.0.0/24 192.168.0.25 is alive ICMP Port Unreachable from 192.168.0.152 for ICMP Echo sent to 192.168.0.152 192.168.0.159 is alive 192.168.0.160 is alive ICMP Port Unreachable from 192.168.0.152 for ICMP Echo sent to 192.168.0.152 192.168.0.1 is unreachable 192.168.0.2 is unreachable Si se observan los 3 tipos de respuesta con la utilidad fping, se pueden tener las maquinas que posibles. Is alive la maquina esta activa y acepta los pings. is unreachable la maquina no esta disponible ICMP port Unreachable la maquina esta en otro estado (filtrada?), esta es nuestra candidata. En mi caso la maquina mas sospechosa es 192.168.0.152. Veamos si tiene el puerto web (8880) abierto: SecTracker>nmap -sS 192.168.0.152 -p 8880 Starting Nmap 5.61TEST4 ( http://nmap.org ) at 2013-01-22 13:15 EST Nmap scan report for 192.168.0.152 Host is up (0.00067s latency). PORT STATE SERVICE 8880/tcp open cddbp-alt MAC Address: 00:0C:29:26:4B:A8 (VMware) Nmap done: 1 IP address (1 host up) scanned in 11.36 seconds SecTracker> C. Entramos al sitio web y leemos el cdigo fuente en busca de scripts php.

Observamos varios scripts php desde el source: info.php, index.php, upload.php, myphp.php Empezamos a evaluarlos de forma bsica: index.php carga el sitio normal

El sitio permite subir imgenes que son desplegadas inmediatamente, las imgenes son almacenadas en el directorio /images/ sobre la raz del sistema, mas adelante volvemos a esto. upload.php requiere el envo de parmetros por POST

myphp.php requiere envo de datos

http://192.168.0.152:8880/myphp.php?id=101 Obtenemos informacin del sistema, al correrle SQLMap contra este script nos dice que id no es

una variable inyectable. 21:25:18] [WARNING] GET parameter 'id' is not injectable

Al cambiar valores del id, obtenemos diferentes respuestas, busquemos algunas mas: SecTracker>for i in {1..10000}; do wget http://192.168.0.152:8880/myphp.php?id=$i ; done

Obtenemos un resultado as: SecTracker>ls -l ... -rw-r--r-1 root -rw-r--r-1 root -rw-r--r-1 root -rw-r--r-1 root -rw-r--r-1 root -rw-r--r-1 root SecTracker>

staff staff staff staff staff staff

70 Jan 21 21:51 myphp.php?id=1671 70 Jan 21 21:51 myphp.php?id=1672 70 Jan 21 21:51 myphp.php?id=1673 70 Jan 21 21:51 myphp.php?id=1674 70 Jan 21 21:51 myphp.php?id=1675 70 Jan 21 21:51 myphp.php?id=1676

Las respuestas con 70 bytes son las del mensaje de error, busquemos respuestas diferentes: SecTracker>ls -la | grep -v "70 Jan" total 10976 drwxr-xr-x 1346 root staff 45764 Jan 21 21:47 . -rw-r--r-- 1 root staff 4598 Jan 21 21:47 myphp.php?id=101 -rw-r--r-- 1 root staff 1326 Jan 21 21:47 myphp.php?id=102 -rw-r--r-- 1 root staff 11012 Jan 21 21:47 myphp.php?id=104 -rw-r--r-- 1 root staff 49949 Jan 21 21:47 myphp.php?id=108 -rw-r--r-- 1 root staff 2031 Jan 21 21:47 myphp.php?id=116 -rw-r--r-- 1 root staff 3475 Jan 21 21:47 myphp.php?id=132 -rw-r--r-- 1 root staff 1867 Jan 21 21:47 myphp.php?id=164 -rw-r--r-- 1 root staff 57314 Jan 21 21:47 myphp.php?id=99 SecTracker> Segn esto, los id 101, 102, 104, 108, 116, 132, 164 y 99 darn mensajes diferentes.

Con el id=132 logro identificar que la aplicacin esta configurando cookies que pueden ser usadas para validar durante el proceso de upload de las imgenes Despues de las pruebas me di cuenta que no funcionaba en ninguna validacin, FAIL :)

D. Algo que intento en este punto es tratar de configurar una cookie trypios con diferentes valores. Ninguno de los valores configurados funcion. FAIL :) E. Lo que intento a continuacin es validar la integridad de las imgenes que subo al sistema, para eso subo una imagen y luego la descargo para verificarla. SecTracker>md5sum webchall*.png 9937c44d2c0f6a2f11240d8e2b1069a0 webchall.png (Imagen que subo al sistema) 9937c44d2c0f6a2f11240d8e2b1069a0 webchall2.png (Imagen que descargo del sistema) SecTracker> Con esto compruebo que el sistema conserva la integridad de las imgenes que se suben, pero lo que me llama la atencin es el nombre de la imagen cuando sube al sistema, tiene cara de MD5 :P Lo primero que intento es generar el hash MD5 de las imgenes que subo al sistema para compararlas con sus respectivos nombres cuando se almacenan, pero los valores no corresponden,

entonces empiezo un proceso manual para intentar identificar un patrn.

a.jpg 394659692a460258b45a99f1424ea357.jpg a.png 32d3ca5e23f4ccf1e4c8660c40e75f33.png a.gif a7200b4bac77e8804f9e48304a92b6d9.gif a.jpeg 14a53cac5a312f3d1ad4980fec051d42.jpeg b.jpg efaf98db2eac3a61946ca0282ae6ddd4.jpg
Los nombres que aparecen en el sistema corresponden a los valores MD5 de los nombres de las imgenes que se suben: SecTracker>echo -n "a.jpg" | md5sum 394659692a460258b45a99f1424ea357 SecTracker>echo -n "a.png" | md5sum 32d3ca5e23f4ccf1e4c8660c40e75f33 SecTracker>echo -n "a.gif" | md5sum a7200b4bac77e8804f9e48304a92b6d9 SecTracker> F. Descargo un shell en php con la intencin de hacerlo pasar por una imagen. El shell lo pueden descargar desde aqu:
http://xploitaday.komodin.org/tools/php-encoder/

G. Como paso siguiente intento subir un shell en php al sistema, pero obtengo un error relacionado con la extensin que uso en el nombre del archivo.

H. Intento camuflar la extensin del shell usando una doble extensin y genero el MD5 en caso de que suba al sistema. SecTracker>cp shell.php shell.jpg.php SecTracker>echo -n "shell.jpg.php" | md5sum 809d9ef057f63c676e1d78dbb7a43826 SecTracker> I. Subo el archivo shell.jpg.php al sistema y no se visualiza ninguna imagen, pero tampoco se genera un error, entonces intento cargar el archivo .php en el directorio /images/.

Con esto tenemos el shell web dentro del sistema.

J. Una vez dentro del sistema empiezo a buscar informacin como por ejemplo identificar la versin del kernel, verificar si el sistema tiene netcat, gcc, etc.

Tambin busco los usuarios en /home y me encuentro con un usuario bob, como es el nico usuario pareciera que tiene algo que ver con el reto.

Los scripts que estn en el home del usuario bob requieren de una palabra secreta, cualquier palabra se puede usar pero no producen resultados coherentes (texto plano legible).

K. Sigo explorando buscando las posibilidades de comunicacin del usuario bob, por eso intento encontrar archivos que tengan la palabra bob y termino entrar al inbox de correo del usuario en /var/mail/, sin embargo no tengo los permisos para poder leer los archivos, pero sospecho que el usuario puede tener mensajes que ayudan a resolver el tema. FAIL :).

L. Al no encontrar mucha informacin por este lado intento abrir puertos en la maquina para conectarme desde la consola (netcat).

Los puertos siguen apareciendo filtrados, lo intento con varios puertos pero obtengo el mismo resultado, por lo que pienso que el sistema debe tener el iptables habilitado. Buscamos las reglas que deben cargar al inicio del sistema. En /etc/init.d/ encontramos que el archivo firewall.sh tiene permisos modificados y no puedo leerlos, pero eso me da indicios que seguramente si hay un firewall filtrando la salida y entrada de paquetes en puertos diferentes al 22/TCP y al 8880/TCP. FAIL :)

M. Ya un poco perdido con el asunto empiezo a probar exploits locales (exploits*.c) contra el kernel, exploits contra phpinfo(), contra apache, contra todo lo que se aparezca y nada, no logro escalar privilegios en el sistema, entonces pienso que quiz no sea necesario ya que el reto se trata de una aplicacin web. FAIL :)

N. Vuelvo a la raz del servidor web a leer detalladamente los archivos que se encuentran all y veo un archivo que no haba visto antes, el archivo /var/www/.proof.

En este archivo se menciona un cdigo secreto, as que supongo que es el cdigo del usuario bob. O. Pruebo el cdigo en el sistema y NO obtengo resultados correctos.

Ser que el cdigo est en base64?


SecTracker>echo -n "TGglMUxecjJDSDclN1Ej" | base64 -d Lh%1L^r2CH7%7Q# SecTracker>

WIN :)

P. El lugar donde se van a encontrar Alice y Bob es Akti Tompazi 4 , como se puede ver en la siguiente imagen de googlemaps donde se usaron las coordenadas encontradas.

Con esto se termina el reto, pero an quedan cosas pendientes por investigar:

TODO: COSAS POR HACER 1. 2. 3. 4. 5. 6. Escalar privilegios en el sistema (#). Encontrar las claves de los usuarios root y bob. Examinar si el servicio MySQL (127.0.0.1) tiene informacin. Examinar si el servicio EXIM (127.0.0.1) tiene informacin o es vulnerable. Buscar otra forma de explotar el sistema web (vulnerabilidad diferente). Verificar si las libreras de AES usadas para cifrar el mensaje de bob tienen algn bug introducido que permita romper el cifrado de forma diferente. 7. Identificar el motivo por el cual el archivo .php que se sube en el directorio /images/ del sistema se elimina cada cierto tiempo. Si tienen alguna duda sobre el solucionario pueden escribir a: fernando.a.quintero@gmail.com o contactarme por twitter en: @nonroot Gracias por el reto!

Vous aimerez peut-être aussi