miércoles, 10 de marzo de 2010

Hacking CambRED 2010

Aquí os dejo el relato de un grupo de participantes en el reto de la CambRED 2010. Como bien dicen al final del mismo "Moraleja.: Si realizas algo, por muy poco que sea, deja constancia de ello". Yo tengo una parecida, "lo que no esté por escrito y firmado, no existe". Aunque en este punto se podría incluir la firma digital como animal de compañía.

Con esta entrada queda constancia de las aventuras y desventuras de EIF, HGR y GRR en el "Masters of Universe ver 2.0". Por cierto, tiene premio vuestra participación y report.
-------------------------------------
En primer lugar, nos decían que entrásemos en la web interna "pestrucha.cambred". En ella nos contaban una historia adaptada de la serie "Masters of Universe". Nosotros teníamos que ponernos en la piel de He-man. Estábamos encarcelados en una celda en el castillo de el malvado Skeletor. Como pone en la web, disponíamos de un panel al cual accedíamos haciendo un telnet a la dirección 172.16.0.200:23.

En él aparecía un menú en el cual teníamos 3 opciones: cambiar la temperatura de la celda, comunicarnos con el carcelero, y salir de la aplicación.

Con la primera opción, poniendo cualquier temperatura aparecia un logo diciendo que nos habíamos quemado; con la segunda intentaba comunicarse, pero daba un error: "proxy failure" y nos decía que contactásemos con el "jailer". Detectamos que el programa daba un error cuando presionábamos enter sin introducir ninguna opción. Por el mensaje de error descubrimos que era código python y se encontraba en "/usr/sbin/skelepunishmentcell".

En este punto decidimos comprobar ante que sistema nos encontrábamos. Para ello utilizamos un software de fingerprinting como es “nmap” (integrado en Backtrack 4). Esto nos permitió comprobar que se trataba de un sistema Linux que tenia abiertos los puertos 23 (telnet), 22 (ssh), 80 (http) y 3128 (http-squid). En un instante se nos ocurrió aplicar una herramienta que intentaba explotar vulverabilidades del SSH pero lo único que conseguimos fue lanzar un DoS (sin querer) con la consecuente caída del servidor (la siguiente pista indicó que no era necesario tirar el servidor abajo). Más tarde lanzamos 2 herramientas de ataque automatizado (FastTrack e Inguma) que automáticamente buscaban y explotaban las vulnerabilidades de la máquina. No tuvo éxito. Como no conseguíamos obtener información de todo lo que hicimos, avanzamos por otro camino teniendo en cuenta la primera pista. Al conectarnos por ssh a cualquiera de estos puertos, nos pedía una contraseña para el usuario root, la cual era "root" y accedíamos a una máquina con algunas características sospechosas: el ls no mostraba ningún fichero, sólo con ls -lisa. Muchos comandos básicos no existían. Al hacer apt-get install , supuestamente llevaba a cabo la instalación, aunque siempre a la misma velocidad. Pero al intentar utilizarla, daba un fallo de segmentación. Además en "/usr/sbin" no se encontraba el archivo "skelepunichmentcell". Con toda esta información deducimos que nos encontrábamos ante un honey. Por lo tanto el SSH tenía que estar corriendo en otro puerto diferente. El puerto 3128 supuestamente era uno en el cual corría un proxy. Lo que ocurrió antes nos hizo pensar en este hecho e indagar un poco más.

Como sabíamos que root no tenía privilegios de root, anteriormente nos decían que teníamos que contactar con el jailer y en las pistas nos decían que "teníamos que cambiar de personaje", nos conectamos como jailer en el puerto 3128 (ssh jailer@172.16.0.200 -p 3128)
Nos pedía una contraseña y por analogía con la de root, era jailer. Cuando se realizó la conexión comenzó a ejecutarse un programa en el que decía “Torturing prisioner 1…”. En este momento pulsamos “Control+C” para cancelar la ejecución del programa y logramos acceder a una Shell.

Esta máquina ya era una totalmente operativa. Como queríamos llegar a ser el administrador, leímos el archivo group en el que había una lista de 5 usuarios del que "Skeletor" pertenecía al grupo "Grayskull" y junto con la historia supusimos que era el administrador.

Posteriormente accedimos a cada uno de los “home” de los usuarios. En uno de los “home” había 2 archivos con permisos 4755 (con s), los cuales solo mostraban un mensaje al ejecutarlos, por lo que pensamos que podíamos usar la credencial del creador para hacer algo; no conseguimos hacer lo que pretendíamos. En el home de Skeletor, había 2 archivos "how_to_release_heman.txt" y "hints.txt".

En el primero había un texto cifrado, y el segundo decía: "201 tiene algo que decir acerca de un doble 69". Con esta pista pensamos que quizá existía algún archivo relevante con inodo 6969, o algo similar, pero al hacer "ls -Ri / grep 6969" no obteníamos ningún archivo interesante.

Una de las pistas que nos dieron avanzado el concurso, fue un texto cifrado. Lo desciframos buscando un decoder en google y con la opción codificación "base 64" obtuvimos lo siguiente:

$whoami
jailer
$ EDITOR=vim sudo su /dev/release_heman :!bash

Al ejecutar estas instrucciones nos convertíamos en el usuario Skeletor. Una vez aquí, intentamos descifrar el archivo how_to_release_heman para el cual deducimos que teníamos que utilizar openssl, pero no lo conseguimos.

Así que hasta aquí llegamos nosotros. Posteriormente, sólo Jose (el ganador del año pasado) logró saber a qué se refería la pista "201 tiene algo que decir sobre un doble 69". 201 era otra máquina que tenía abierto el puerto 6969, al cual se podía acceder mediante SSH. Mediante esto nos dijo que accedía a algún tipo de certificado. Pero tampoco logró avanzar más.

Al final el ganador del concurso fue el que dio una charla de seguridad y él había descubierto todavía menos información que nosotros, ya que no sabía la existencia de la pista acerca de la 201:6969. Sólo que él envió un reporte de hasta donde había llegado y los demás como no llegaramos al final, no enviamos nada.

Moraleja: Si realizas algo, por muy poco que sea, deja constancia de ello.