jueves, 8 de julio de 2010

Wargame en CampusParty 2010


Era un sábado en la tarde cuando se puso en marcha la creación de un par de nuevos retos informáticos en Campus Party, uno que fuera fácil y el otro un poco fácil. Pero que como siempre entretuviera a los concursantes y no los dejara dormir durante las últimas noches del Campus.

Uno de los retos (el fácil) consistía en una maquina Windows 2000 Server con solo algunos parches de seguridad expuesta para todo el mundo, como todos sabrán penetrar una maquina en este estado no es para nada complicado, entonces en que consistía el reto?. El reto consistía en mantener el control de la maquina (0wned) hasta que el reto finalizara. Obviamente los RET mal calculados y los D.o.S tuvieron a fixxxer y p@d@w@n mas ocupados de lo normal.

El segundo reto (el un poco fácil) consistía en ..., uhmmm, mejor pongo aquí la solución al reto y así se darán cuenta de lo que había que hacer.

Un saludo para todos los participantes del wargame (cerca de 30 personas) y gracias por participar. En próximas oportunidades tendremos mucho más.

INICIO

El reto empezó publicando las pistas en un servidor X prestado por el gordo, el porque del dominio no tiene ninguna explicación, pero quizás se divirtieron mas de lo normal tratando de explotar sus CGIs. :P


Sitio inicial con las pistas del reto

Las pistas concretas, solo dos pistas iniciales, CGI no era una pista XD

Una vez se obtuviera esta información y con las indicaciones dadas por los organizadores, la idea era empezar a resolver el archivo .pcap que se entregaba y tratar de encontrar la bandera.

Lo primero es abrir el archivo .pcap y estudiarlo


Abrir el archivo con wireshark

Seguir las conexiones

Analizar el contenido de las descargas

Una vez pasabamos las pistas falsas intentamos reconstruir la información transmitida, esto lo podemos hacer a mano, exportarlo con el wireshark o usar una herramienta que nos facilite el trabajo.


Con foremost encontramos una imagen jpg

La imagen es un código QR

Con esta herramienta podíamos sacar una imagen de la que se habló en algunas charlas de Campus Party, la imagen en cuestión es un código QR.


Para sacar la información del código QR podíamos usar una herramienta instalada en el sistema, una herramienta online o una herramienta en el celular que decodificara rápidamente el código y nos entregará el texto: Pista(#3): Capture The Flag.

La pista era bastante obvia y no ayudaba mucho, entonces como seguíamos?

El próximo paso era volver a la captura y tratar de sacar mas información, después de perder el tiempo ahí el paso siguiente era tratar de sacarle mas información a la imagen que contenía el código QR. Quizás esteganografía?

Extracción de archivos que estan dentro de la imagen

Con una herramienta para extraer datos de imágenes pudimos sacar un fichero comprimido y luego encontrar un texto plano bastante extraño (criptografía clásica?), por lo tanto el siguiente paso era encontrar una rotación para encontrar el texto real.


rotando el texto de diferentes formas hasta encontrar algo coherente

Al decodificarlo encontrábamos un texto con la siguiente pista(#4):

"En esta maquina que no es un Linux y no es un Windows tenemos 10 usuarios creados, accede con uno de ellos."

Muchos de los participantes huyeron en este punto, pues la maquina objetivo no era ni un Windows, ni un Linux, entonces que podría ser?. Para los que han trabajado con otros sistemas operativos saben que existen otros cientos de sistemas diferentes, pero que las posibilidades podrían apuntar a un sistema solaris, opensolaris, MacOSX, sistemas BSD o haiku. Menciono estos porque son los que yo conozco, pero puede ser que alguien quiera montar un plan9 o un AS400 como parte del reto.

En este punto los participantes tuvieron que tener en cuenta la pista #2, un rango de direcciones públicas que pertenecía a una de las mesas de la arena.

Lo que se suponía que debían de hacer era escanear ese rango e intentar detectar los sistemas operativos, otros en cambio buscaron la VLAN de la mesa y realizaron un ataque físico. La verdad no se como lo lograron, la maquina del reto estaba bien camuflada y no era fácilmente identificable :P

Maquina objetivo bien camuflada

Si eran juiciosos y hacían el escaneo podían encontrar lo siguiente:

@hacker#nmap -O 186.113.24x.0/24 -oN nmap.txt
@hacker#grep -i openbsd nmap.txt
Running: OpenBSD 4.X
OS details: OpenBSD 4.0 - 4.2
@hacker#

Una maquina de ese segmento tenia instalado el sistema OpenBSD. Inicialmente quisimos montar el juego con un opensolaris, pero lastimosamente no detectaba las tarjetas de red, así que cambiamos de opción y en 6.3 minutos teníamos un OpenBSD 4.7 funcionando como parte del reto ;)

Una vez identificada la maquina en la red, podíamos escanearla, buscar puertos vulnerables e intentar hacerle D.o.S (aunque descalificara), pero lo mejor era seguir las pistas:

" ... tenemos 10 usuarios creados, accede con uno de ellos."

Cuales podrían ser los usuarios validos del sistema?, guest?, invitado?, root?, usuario?, usuario10?, usuario1?

! BINGO !

Los usuarios tenían la secuencia usuario1, usuario2, usuarioX y las claves eran sus respectivos nombres, mas fácil no podía ser.

En este punto del concurso muchos de los jugadores estaban agotados y decidieron cambiar el premio del reto por una buena dormida.

-3


-4

Cuando los participantes hacían login por SSH a la maquina objetivo encontraban una nueva pista (#5):

"Solo Uno De nosotrOs sabe leer."

Al principio la pista estaba muy confusa, pero después de leerla varias veces se veía claramente la palabra SUDO. Así que este comando era otra pista (#6) mas.

Accediendo con usuario1

Accediendo con usuario 2 y 3

El paso siguiente era intentar cosas con el comando sudo, como acceder con privilegios de root, intentar crear archivos, intentar visualizar archivos, etc.

Vamos por el root!

El truco para pasar este punto es que el error de sudo algunas veces era que el usuario no estaba en el archivo /etc/sudoers (lectura solo para el root) y otras veces decía que el usuario no podía ejecutar ese comando, así que podíamos deducir cual usuario si podia ejecutar comandos y luego tendríamos que investigar que comando era el que podía ejecutar.

El usuario que estaba en el /etc/sudoers era el usuario4 y el comando que se podia usar era el cat. ¿Que harias tu con esto?

Vamos por el shadow, UPS!, OpenBSD tiene es un master.passwd

Y luego que haríamos con unos hashes en Blowfish?

Siii!!! ya tenemos la clave del root.

Alguien intento un ataque de fuerza bruta con todos los usuarios enumerados del sistema?, porque no funcionó la combinación root/usuario4 ?

La respuesta es que en la configuración del SSH se especificaba que solo el root podía entrar desde la maquina local.

@hacker#ssh -l root 186.113.242.209
root@186.113.242.209's password:
Permission denied, please try again.
root@186.113.242.209's password:
...

En el archivo /etc/ssh/sshd_config, incluimos:

AllowUsers root@127.0.0.1 usuario*

Eso significa que el root solo se puede loguear desde la maquina local (thx duma).

Cuando los participantes alcanzaron el r00t de la maquina solo bastaba aprender a usar OpenBSD ...

jajaja

Mentiras, el siguiente paso era encontrar la flag, donde estaba la flag?.


Quien soy yooooo?

I Got the flag!

Una vez descubierta la flag solo era cuestión de modificar el archivo /etc/rc.conf para hacer que el servicio subiera de forma permanente, cambiar permisos y editar la página de inicio del servidor web apache.

Bandera a modificar (httpd_flags) y ruta sin permisos a cambiar

Con esto se concluia este entretenido reto habilitado cerca de media noche y con una duración de 15 horas.

Felicitaciones al ganador del reto y todos los organizadores del mismo. Y gracias a Campus Party por permitirnos crear este tipo de actividades para que todos los que somos curiosos en estos temas, nos divirtamos.

p@d@w@n, Alberto Gil (organizador del área de seguridad y redes), rmolina (ganador), fixxxer, nonroot

FIN

Update: Una nueva foto del team ganador ;)

NeoEcoS, Rmolina, Sparkid

Update 2: Si alguien hizo algo diferente (legal o ilegal) jugando en el reto por favor comente este post.

Update 3: Interesados en jugar en los CTF futuros, se esta conformando un equipo Colombia: http://groups.google.com/group/ctf-colombian-team

4 comentarios:

NeoEcoS dijo...

Falta algo de créditos, Rmolina, Sparkid y yo (NeoEcoS) eramos el team y no sólo dormimos.

xD

Ruben Molina dijo...

@nonr00t: Tu writeup esta mejor, claro, pero aqui esta el mio

@NeoEcoS: no solo dormias, tambien tratabas de embriagar a una menor… pero bueno, te reivindicaste con lo del sshd…

@nonr00t: ¿Se valia borrar la bandera despues de leerla?… ¿Se valia cambiar los passwords?… ¿Se valia desconectar la maquina de la red y pegarse por cable cruzado?

Ruben Molina dijo...

@nonr00t: frente al update 2, mencionar el laboratorio 66, al que (como mínimo) un 20% de los jugadores le saco provecho…

Bl4ck_D4wn dijo...

ufff la verdad estuvo muy bueno y bien organizado gracias @nonr00t..

Eso parecia un Capture de n00b en ves de un CTF a las 5am no quedaba nadie despierto excepto unos pocos.... :)

luego se cayo la makina y a esperar :P
pero bien supuestamente era un CTF rapido pero 12h es rapidito jajaj

Entradas populares