WriteUp: Reto navideño

WriteUp: Reto navideño

El reto navideño es una propuesta desarrollada por el grupo InterCEPTeam (Interdisciplinary Cooperative Enforcement Penetration Team) en el que buscan evocar el espíritu navideño y así mismo poner a prueba las habilidades de los participantes. El reto consta de varios niveles de diferentes temáticas como esteganografía, programación y sobre todo mucho análisis de los mínimos detalles.

El reto se basa en la historia del Grinch, teniendo como principal objetivo salvar la navidad ¡Afortunadamente el RICteam pudo rescatar la navidad siendo el primer grupo en resolver el reto!

Solución al reto

En primera instancia a los participantes se les dio a conocer una URL donde se encontraba el reto: http://retonavideno.intercepteam.org/. Al acceder se podía apreciar lo siguiente:

En el texto indican que se debe ir a VillaQuien, por lo que instantáneamente se relaciona como un directorio. Accediendo al directorio se encontraba una imagen de bienvenida.

Al buscar un indicio en la página y no encontrarlo, el paso a seguir fue descargar la imagen de bienvenida para comprobar si tenía algún tipo de información relevante. Al inspeccionar la imagen con un editor hexadecimal se encontró la cabecera de un archivo RAR, es una conocida técnica en esteganografía para ocultar archivos en una imagen.

Se copió el bloque correspondiente al RAR en un nuevo archivo, al abrir éste nos encontramos con un archivo  de texto plano llamado directorio.txt, que contenía la siguiente información.

Después de pensarlo un momento se llega a la conclusión de que son directorios dentro de VillaQuien, así que se toma una por una de las líneas para comprar cual es la que conteniente el nombre del directorio que se busca. En varios de los intentos se encontraba una imagen de una casa.

Y en el HTML de dichos directorios se encontraba un comentario con información importante:

Después de varios intentos se llega al directorio 411fa99540fb9b370f71da9c1cd40d4a que es la biblioteca de VillaQuien.

En la biblioteca nos piden registrarnos, así que inspeccionando el HTML de la página encontramos lo siguiente.

El “botón” de registro invoca una función llamada REGISTRARSE, así que pasamos a buscar que contenía dicha función dentro del archivo funciones.js, nos encontramos con varias validaciones para el registro hasta llegar a una de las líneas con información relevante.

Posteriormente con la ayuda de Firebug se inserta el código HTML anterior dentro de la página de la biblioteca, consiguiendo como resultado un enlace que al hacer click invocaba una función llamada decryptText que mostraba una ventana para escribir un texto.

Posteriormente se busca en la función decryptText cualquier forma para encontrar el texto que debía ser usado para pasar esta parte del reto pero no se consiguió resultado alguno. Así que buscando en el código fuente de la página de la biblioteca se encontró un comentario que decía:

Quien escribio el documento que necesitas?

Luego de probar erróneamente diferentes autores, recordamos el comentario que aparecía en los otros directorios:

(Toc Toc)

Hola, ¿Donde encuentro el diario de Cindy Lou?

-Busque la biblioteca!

Al enviar el texto Cindy Lou, el resultado fue positivo.

Al acceder al archivo RecuperandoLaNavidad.php nos encontramos con un texto escrito de una forma poco agradable para la vista:

Unico fragmento del Diario de Cindy Lou

YA lo DicE el GRAN manual
eL aLeGRE MaeStRE dE La NaVIdaD
es El meRecedoR dE un brIndIS y UnA PaLMAda DetrAs
y SeRá AQUeL almA Que lO neCESITE Mas

no Hay Otro maS falTO de FelIciDAd
QUe quIeN vive aL noRte De esTe lUGAR
y pARA aVisARlE De sU opOrtUNiDAD
AL mONte CruMpit Debo vIAjaR…

a lA ciMa del moNTe HE lLEgadO
LA EScaLADa Fue FáCiL AunQue TuvE CuIDADO
y en aQueL lugar Me esPEraBa
eL amIGo QUE al GriNch sIemprE AcoMpañAba

Solo eL SabíA coN CerTezA
En qUe pArtE DE La cUEVa OscURa
AQueL suJetO SiN CORDura
eSCoNDiA Su caBeza

Mis IntentOs fuERon En vAno
Y CoMO renDIrmE No LO tenIA a MANO
SiendO inSisteNTe y tozUDA
cONvENcERía A mAx, nO Me CAbía DUda

Por la forma en que está escrito el texto se dedujo que había sido generado con la herramienta Horrografía hecha por Hecky. Se procede entonces a probar convertir el texto:

Como resultado se obtiene una dirección IP de un SSH con un nombre de usuario y contraseña. Al conectarnos, el Grinch nos recibe con un mensaje de bienvenida, seguidamente se ejecuta el comando ls para ver que archivo u carpetas encontrábamos:

Se encuentra el archivo cuentameMax, al ser ejecutado devolvía la palabra Guau repetida un numero aleatorio de veces. Dicho archivo solo tenía permisos de lectura, por lo que no se podía descargar para ver que contenido tenía así que por un momento se descartó que fuera relevante para el reto. Se prueba entonces a leer varios archivos como /etc/passwd para ver los usuarios, curiosamente existían usuarios llamados porfin, final, yeison y otros más. Se intentó acceder al servidor con alguno de los usuarios pero no se obtuvo ningún resultado positivo, así que volvimos a probar con el archivo cuentameMax enviándole como parámetro el número de veces en el que decía Guau, obteniendo así el resultado esperado.

Al leer “tras la puerta 21” se piensa inmediatamente en un servidor FTP. Intentamos conectarnos como un usuario anónimo pero no se obtenía ningún resultado satisfactorio. Después de analizar el texto unos minutos, nos dimos cuenta que el usuario y contraseña eran att:max, un “mínimo” detalle que estábamos dejando pasar.

Al acceder al servidor FTP con los datos obtenidos y la misma IP que se tenía anteriormente, nos encontrábamos con un archivo llamado “Llamado.py” que tenía el siguiente código:

#!/usr/bin/python
import socket

def recvmsg():
data = (s.recv(1024))
while data!="?:":
if data=="fin":
s.close
return False
print (str(data, encoding='utf-8'))
data = (s.recv(1024))
print (str(data, encoding='utf-8'))
return True

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('monteCrumpit', 9999))
llamado="-¿Sr. Grinch? ... ¿Sr. Grinch?"
print(llamado)
s.send(bytes(llamado, encoding='utf-8'))

while recvmsg():
s.send(bytes(input(), encoding='utf-8'))

El código lo que hacía era conectarse a una IP con el puerto 9999, para posteriormente enviar el texto -¿Sr. Grinch? … ¿Sr. Grinch?. El problema es que el script no funcionaba porque el texto tenía caracteres especiales que no permitían su correcto funcionamiento. Se intenta entonces hacer una conexión usando Netcat, pero no se obtuvo ningún resultado. Rápidamente se intenta corregir el error del script, pero siempre había algún problema. Para acelerar el proceso entonces se programó un script que hiciera lo mismo en PHP y en Java (cuestión de gustos).

<?php
$host = "204.236.196.151";
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$puerto = 9999;
$conexion = socket_connect($socket, $host, $puerto);
if($conexion)
{
$llamado = utf8_encode("-¿Sr. Grinch? ... ¿Sr. Grinch?");
$salida = '';
socket_write($socket, $llamado);
while ($salida = socket_read($socket, 1024))
{
echo $salida;
}
}
else
{
die("Pailas hijo");
}
?>

De esta forma se obtenía una respuesta del Grinch, sin embargo nos dimos cuenta que había que enviarle unas palabras después de obtener dicha respuesta que no sabíamos cuáles eran, se probó al azar varias pero el resultado siempre fue negativo. Sin encontrar ninguna salida después de probar varias opciones, la única alternativa fue buscar el pedazo en concreto de la película y ver las palabras correctas. Así que con el script hecho en Java se enviaron las palabras (el script en PHP no funcionó para enviar las palabras):

//palabras dichoso,cavilaba,penso
import java.util.*;
import java.io.*;
import java.net.*;
public class grinch{
public static void main(String args[]) throws IOException{
while(true){
Socket s = new Socket("204.236.196.151",9999);
InputStream in = s.getInputStream();
BufferedReader lector = new BufferedReader(new InputStreamReader(System.in));
OutputStream out = s.getOutputStream();
byte t[] =
{(byte)0x2D,(byte)0xC2,(byte)0xBF,(byte)0x53,(byte)0x72,(byte)0x2E,(byte)0x20,(byte)0x47,(byte)0x72,(byte)0x69,(byte)0x6E,(byte)0x63,(byte)0x68,(byte)0x3F,(byte)0x20,(byte)0x2E,(byte)0x2E,(byte)0x2E,(byte)0x20,(byte)0xC2,(byte)0xBF,(byte)0x53,(byte)0x72,(byte)0x2E,(byte)0x20,(byte)0x47,(byte)0x72,(byte)0x69,(byte)0x6E,(byte)0x63,(byte)0x68,(byte)0x3F};
out.write(t);
try{
boolean muaks = true,mu = true;
do{
do{
//out.write(t);
if(!muaks)mu = false;
byte entra[] = new byte[1000];
int len = in.read(entra);
System.out.println(new String(entra,0,len,"UTF-8"));
if(new String(entra,0,len,"UTF-8").equals("?:"))muaks = false;
t = new byte[len];
for(int n = 0;n<len;n++)
t[n]=entra[n];

}while(muaks);
out.write((lector.readLine()).getBytes("UTF-8"));
}while(true);
}catch(Exception muak){}
}
}
}

Al final el resultado era el esperado:

ve a f6da8f8c63a34ff6c92cb4615a05e8c0 en VillaQuien
y cuenta que tu me llegaste al corazón

Al acceder a la dirección indicada anteriormente el resultado fue:

De esta manera concluye el reto navideño, hemos salvado la navidad.

Muchas felicitaciones y gracias a InterCEPTeam por el gran trabajo al realizar este reto, esperamos con ansias el del próximo año.

Estudiante de Psicología, interesado por el desarrollo web y las nuevas tecnologías. Editor y co-fundador de RedInfoCol.

16 Comentarios

  1. Responder

    Parceros, son todos unos tesos!!

    Bien ahi…felicidades…Yo solo lo intente unos minutos y fui a dar a otros lugares completamente xD

    Al llegar aqui retonavideno.intercepteam.org/Status/47559a64990f88fc897aadd1f3ec985e.jpg Se veia la imagen del grinch…Pero al quitar la extensión «.jpg» (No se por que coños hice eso xD) daba un fichero de texto con IP’s (Tal vez de los que accedian a la imagen)

    Y también si se intentaba ingresar a intercepteam pero por ip en vez del nombre de dominio se accedia al servidor xD Y se podia ver dos archivos de wordpress comprimidos en .zip y una carpeta wordpress/ donde estaba el reto jeje

    Pense que el reto iba por ahi, pero ahora veo que no =P

    Saludos mijos 😉

    • Responder

      Me gusta que hayas probado otras cosas, y no fuiste el único que le quitó la extensión a la imagen xD
      El resultado eran las IPs de quienes habían llegado a ese «nivel» (el que pones corresponde al Corazón Talla 3).
      Notaste que el texto horrografiado que publican no corresponde con el que aparece en la imagen justo abajo? Un error humano (no quiero decir quien fue porque de pronto kilr00t se enoja) obligó a cambiar la IP, y por ende el texto oculto. De nuevo te digo #QueGracias Hecky, parcero!

  2. Responder

    Felicitaciones!
    Me alegra que hayan omitido las mentadas de madre que recibí cuando se estancaron en la idea feliz XD

    Ya tenemos el Write Up de Activalink, lo publicaremos junto con una solución oficial que incluye más detalles 😉

  3. Responder

    Puta Pamela Chu 🙁

  4. Responder

    xDDDDDDD BtW, dos horas acordandonos de bash pa el while true do;./cuentameMax;done; y no lo ponen…Gilipollas

    • Responder

      Un detalle del que no me acordé escribir xDDDD

    • Responder

      Mijo y mas facil aun.

      $while :;do ./cuentameMax ;done

      Sin poner el true xD

      Saludos visajosos.

      • Responder

        xDDDDD viejo Hecky, saludos mijo tiempo sin escribiros. Eso del twitter mama.

        Un abrazo. y tienes razon, a mi el bash no se me da xDDDDDD

        • Responder

          Mi amigo, pss ud que se «esteganografia» y no se deja ver ya xD

          Pff ami todos esos truquillos de Bash ME ENCANTA…pero no me hable de JAVA que ahi si lloro y vomito que no entiendo nada =P

          Le mando un Saludo mi buen!!

  5. Responder

    Bueno me demore en saludarlos 😀 … saludos rics jajaja

    Gracias por participar y sacarlo adelante………

    bueno hum solo un comentario… a la proxima vez vean la pelicula :p

    bytez

  6. Responder

    Resolución brillante! sin duda un reto de mucho trabajo en equipo. Graciosas esas lineas en java indudablemente de phicar xD.

    • Responder

      xDDDDDDDD que bah! Eso lo debio hacer monje xDDDDDDDDDDD

  7. Responder

    Buen día..

    Hahahahahah!!!.. si me han hecho reir 😀 😀 bueno, bueno, excelente WriteUp, excelente manera de terminar el año 😀 😀 Bueno, creo que al final lo que más exigia el wargame era creatividad y meterse en el cuento de la pelicula hahaha 😛 😛 pero uff muy bueno 😀 😀 ..

    Bueno, pa’ adelante ps 😀 😀
    😀 😀

  8. Responder

    Bueno por lo que veo se divirtieron realizando el rético que era el objetivo saludos para todos los que participaron XD

  9. Responder

    Hay alguna posibilidad de hacer el reto en modo offline, o sea si lo pueden comprimir en un zip y despues poder armarlo.

    Seria bueno, para poder realizar practicas.

    Gracias

Deja un comentario

Your email address will not be published. Required fields are marked *

You may use these <abbr title="HyperText Markup Language">HTML</abbr> tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>