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 Masno 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ñAbaSolo eL SabíA coN CerTezA
En qUe pArtE DE La cUEVa OscURa
AQueL suJetO SiN CORDura
eSCoNDiA Su caBezaMis 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.
hecky
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 😉
C4Fdez
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!
C4Fdez
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 😉
Phicar
Puta Pamela Chu 🙁
Phicar
xDDDDDDD BtW, dos horas acordandonos de bash pa el while true do;./cuentameMax;done; y no lo ponen…Gilipollas
UrbaN77
Un detalle del que no me acordé escribir xDDDD
hecky
Mijo y mas facil aun.
$while :;do ./cuentameMax ;done
Sin poner el true xD
Saludos visajosos.
Phicar
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
hecky
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!!
killr00t
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
d555
Resolución brillante! sin duda un reto de mucho trabajo en equipo. Graciosas esas lineas en java indudablemente de phicar xD.
Phicar
xDDDDDDDD que bah! Eso lo debio hacer monje xDDDDDDDDDDD
D14M4NT3
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 😀 😀
😀 😀
shellfity
Bueno por lo que veo se divirtieron realizando el rético que era el objetivo saludos para todos los que participaron XD
Leo
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
Pingback: InterCEPTeam » Soluciones Reto Navideño