lunes, 16 de marzo de 2015

CTF InfosecInstitute (III)

Ultimo post sobre el CTF de InfosecInstitute, esta vez con retos mas complicados...

Level 11:
Level 11: Level 10 ?
Al entrar en el reto nos encontramos con una imagen que nos indica que hay otro sonido de nuevo, pero mas abajo podemos ver que no hay ningun sonido sino una imagen del logo de php.
Debido a que en el reto anterior estaba esa imagen lol.gif, descargo php-logo-virus.jpg ya que me parece sospechosa y ejecutando...

strings php-logo-virus.jpg

Me encuentro con ....

infosec_flagis_aHR0cDovL3d3dy5yb2xsZXJza2kuY28udWsvaW1hZ2VzYi9wb3dlcnNsaWRlX2xvZ29fbGFyZ2UuZ2lm

Parece ser el flag, pero en realidad la ultima parte esta codificada en base 64, el no tener el "=" o "==" no significa que no sea base 64 ya que el mismo se utiliza como padding y no siempre es necesario.

http://www.rollerski.co.uk/imagesb/powerslide_logo_large.gif

Si vemos la imagen podemos encontrar la palabra powerslide que es la ultima parte de nuestro flag!

Flag: infosec_flagis_powerslide

Level 12:
Leve 12: Css
Misma imagen que el reto 1 por lo que no encontraremos nada ahi, asi que hay que buscar en el codigo fuente de la web. Luego de un poco de busqueda nos encontramos con ...

<link rel="stylesheet" href="css/custom.css">

Si miramos su contenido vemos ...
.thisloveis{
 color: #696e666f7365635f666c616769735f686579696d6e6f7461636f6c6f72;
}

Eso no es un color me parece, pero si es hexadecimal!

Flag: infosec_flagis_heyimnotacolor

Level 13:
Level 13: Reto perdido!!
Parece que el admin perdio el reto :p, nuestro objetivo es buscarlo asi que luego de probar algunas combinaciones comunes de nombres, la buena es...

http://ctf.infosecinstitute.com/levelthirteen.php.old

Si miramos el codigo fuente de esta nueva pagina veremos...

 <p>Do you want to download this mysterious file?</p>

    <a href="misc/imadecoy">
      <button class="btn">Yes</button>
    </a>

Por lo que descargamos ese archivo imadecoy y mirandolo con un editor hexadecimal podemos ver que sus primeros tres bytes son d4 c3 b2, los cuales son los bytes iniciales de un pcap ( Otra captura de red si).
Utilizando Wireshark para abrirlo se puede ver que hay varias conexiones HTTP, por lo que directamente vamos a "Export Objects -> HTTP" y vemos todo lo que Wireshark pudo identificar en la captura.
Al parecer utilizaron "Simple Vulnerable App" desarrollado por "Jay Turla, @shipcod3" para realizar este reto, entre todos los objetos vemos uno llamado HoneyPY.PNG que contiene nuestro flag!

Flag: infosec_flagis_morepackets

Level 14:
Level 14: SQL Dump
Tenemos otro archivo para descargar y en la primera linea ya nos damos cuenta de que va este reto, tenemos una base de datos SQL que fue dumpeada.
Al parecer esa base de datos contenia una instalacion de Wordpress por lo que en principio uno piensa que el flag puede llegar a estar en algun hash de alguna contraseña, pero eso requeriria de bastante tiempo para crackearlo..
Descartado los hashes nos ponemos a buscar informacion que resulte sospechosa y buscando un poco nos encontramos con ...

--
-- Dumping data for table `friends`
--

INSERT INTO `friends` (`id`, `name`, `address`, `status`) VALUES
(102, 'Sasha Grey', 'Vatican City', 'Active'),
(101, 'Andres Bonifacio', 'Tondo, Manila', 'Active'),
(103, 'lol', 'what the???', 'Inactive'),
(104, '\\u0069\\u006e\\u0066\\u006f\\u0073\\u0065\\u0063\\u005f\\u0066\\u006c\\u0061\\u0067\\u0069\\u0073\\u005f\\u0077\\u0068\\u0061\\u0074\\u0073\\u006f\\u0072\\u0063\\u0065\\u0072\\u0079\\u0069\\u0073\\u0074\\u0068\\u0069\\u0073', 'annoying', '0x0a');

En el registro con id 104 podemos ver que su "nombre" es un string en unicode ( \u te permite identificar unicode claramente), decodificandolo nos encontramos con el flag!

Flag: infosec_flagis_whatsorceryisthis

Level 15:

Ultimo y mas complicado reto.
Level 15: Code Execution!
Como podemos ver lo que tenemos es un campo que nos permite ingresar texto sin restricciones y que luego es procesado por el servidor usando php para ejecutar en el sistema el comando dig mas lo que nosotros hayamos ingresado en ese campo, claro ejemplo de php code execution.
Para explotar este fallo simplemente en el campo escribimos ...

google.com;ls -lah

Con esto la salida que nos va a devolver va a ser la de "dig google.com" y ademas la salida del comando "ls -lah" ya que el ";" en sistemas GNU/Linux funciona como indicador de que viene otro comando que debera ser ejecutado.
Salida del exploit
Como se puede ver en la imagen en el mismo directorio hay un archivo .hey el cual contiene...

Miux+mT6Kkcx+IhyMjTFnxT6KjAa+i6ZLibC

Al parecer tenemos un texto codificado, pero hasta aca llege por el momento. Apenas tenga la solucion la publico!

Bonus:

En el reto 15 como vemos hay un php code execution que permite ejecutar comandos en el sistema operativo directamente, en competencias CTFs como esta normalmente estos retos estan muy controlados y limitados los comandos que uno puede ejecutar pero esto no es asi en este CTF.
He reportado este fallo con 2 emails a los organizadores pero hasta este momento no he tenido respuesta, asi que decidi publicarlo aca.
El fallo consiste en que no se limitan los comandos posibles a ejecutar por lo que uno puede hacer...

google.com;uname -a

Y obtener...

Linux ip-1XX-3X-3X-XX 3.13.0-44-generic #73-Ubuntu SMP Tue Dec 16 XX:XX:XX UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

Y asi con otros comandos como cat /etc/passwd, id y cualquiera que pueda ser ejecutado con los privilegios de "www-data".
Espero que los organizadores arreglen esto lo mas rapido posible.

Editado: He recibido respuesta por parte del organizador Ryan Fahey, indicando que aprecia mi nota sobre el nivel 15. Aun asi el fallo sigue sin ser arreglado hasta el dia de la fecha (16/ 03/2015).

Este es el fin de mi Write Up del CTF de InfosecInstitute, espero que haya resultado interesante.
Saludos! 

1 comentario: