viernes, 3 de febrero de 2012

HackIM 2012 Goa

Hace unos días fue el HackIM 2012, un wargame de seguridad informatica en linea, que sirvió como clasificatorio para el JailBreak 2.0, otro wargame, pero presencial, que se jugara durante la nullcon 2012 Goa, una de las conferencias de seguridad mas grandes de Asia.

El juego tenia 7 categorías (Trivia, Crypto, Prog, Web, RE, Log, Forensics) y 5 problemas por categoría.

Solo tres personas terminaron todos los niveles (danny, n2n, y jaimito), y una cuarta (vos) aprovecho una característica secreta del scoreboard, que permitia "robarse" el puntaje de cualquier otro jugador. Pero la atención se la robo Eindbazen que exploto el scoreboard vía SQLi: "31337 Greets to Eindbazen http://www.eindbazen.net for responsibly disclosing a bug; which has been patched now".

El primero en completar todos los niveles fue n2n (que tambien fue el primero en pasar RE#2 y RE#3 cuando los demas aun seguiamos en RE#1), pero el ganador del juego fue danny pues fue el primero en entregar un writeup del juego. Esta es una condicion de finalizacion comun, y aun asi no nos acostrumbramos todavia a lleva notas organizadas :P

Los colombianos la hicimos bien esta vez, terminamos con 4 representantes en el Top 13: Null Life (#06), InterCEPTeam (#07), Ruben Molina (#10), y CTF Colombia (#12).

HackIM 2012 Toppers

Yo logre terminar 32 de 35, y me faltaron RE4, RE5, y Forensics5... y no es que haya perdido el interes por los RE... la verdad es que estuvieron bastante duros...

Como los niveles que me interesan generalmente son los RE y los Crypto, voy a ir actualizando este post para agregar las soluciones de esos.

Crypto Level 1: Ulta Pulta

Oexjwok -333 lauiljt bwxylexk hilyruik krbf lk yfi frzlx jekbeqaexi bwzqwxixy. ofiui yfi QB blx kixj lx iaibyueb kfwbs yfuwrgf yfi sitcwluj eh yfi frzlx jwik kwziyfexg yfly jwik xwy qailki Oexjwok, 2 Ceaa Glyik

El wiktionay nos dice sobre "ulta-pulta" que en India, significa "upside-down"… y al leer las fuentes html, aparece un enlace a una imagen de un teclado de computador y un espejo.  Parece entonces que el alfabeto ha sido modificado por reflexión, pero no ayuda mucho mas por ahora…

Via analisis de frecuencias, lo primero fue suponer que ese "yfi" que resalto en el texto con rojo, y que tanto se repite es un "the" (porque es una palabra de tres muy letras común en ingles), y desde ahi que ese "yfly" (que resalto en naranja) es un "that"... y listo ya con la "e" y la "a" la cosa era trivial…

En proceso, se entendía también la pista…cada carácter era el "espejo" de otro por pares… así, sabiendo que "y" significaba "t" (desde "yfi" ), aprendiamos también el inverso, que "t" significaba "y"… De hecho, parece que la codificación consistía en esto: si quiero escribir la primera letra de la primera linea de mi teclado, la codifico escribiendo la ultima letra de la primera linea, si quiero escribir la segunda letra de la tercera linea, la codifico como la penúltima letra de la ultima fila… y asi… aunque en ocasiones no funciona, puede ser porque los teclados latinoamericanos e indios tienen distribuciones de teclas diferentes…

En fin, continuando con el análisis, la flag resultaba ser esta: "Windows 2000 already contains features such as the human discipline component, where the PC can send an electric shock through the keyboard if the human does something that does not please Windows. - Bill Gates"... aunque me pegue un momento para intercambiar la coma por punto (y viceversa), era, en resumen, una flag facilita...

Crypto Level 2: White noise

nos daban este enlace: shhhkoinahihai, y en caso de que lo borren, el contenido era el siguiente:



Eso era todo.  Y si, no se ve nada en principio, porque el texto esta compuesto de espacios y tabs... Para verlo mejor se me ocurrio reemplazarlos por unos y ceros...

010001010111001001110010011011110111001000100000010011010110010101110011011100110110000101100111011001010011101000100000010110010110111101110101011100100010000001010000011000010111001101110011011101110110111101110010011001000010000001001101011101010111001101110100001000000100001001100101001000000110000101110100001000000100110001100101011000010111001101110100001000000011000100111000001101110011011100110000001000000100001101101000011000010111001001100001011000110111010001100101011100100111001100100000011000010110111001100100001000000100001101100001011011100110111001101111011101000010000001010010011001010111000001100101011000010111010000100000010000010110111001111001001000000110111101100110001000000101100101101111011101010111001000100000010100000111001001100101011101100110100101101111011101010111001100100000001100110011000000110110001110000011100100100000010100000110000101110011011100110111011101101111011100100110010001110011001000000010110100100000010011010101001100100000010010110100001000100000001100100011011100110110001100110011000000110100

(en este caso 1 es un espacio, y 0 una tabulación,  pero probe de las dos formas)

Finalmente, la cadena binaria la converti a ascii usando este conversor y de una me salio la flag: "Error Message: Your Password Must Be at Least 18770 Characters and Cannot Repeat Any of Your Previous 30689 Passwords - MS KB 276304"... la demora fue pensar en el bin2asc() pero igual... facilito...

Crypto Level 3: The Base Test

En este no nos decían nada mas, solo aparecía el campo para ingresar la flag una vez que la tuvieramos… pero el nombre del reto ya era suficiente pista…

Al revisar las fuentes html, aprecía este texto en un comentario:

====5JP2T6UH5JR4UKRJSZTOEEJKN2TYUMFLXKUMFHJJTJVWULRIGSTGFCZKWZVEDJVJ====

Desde el titulo, asumimos que es algun base encoder.... como los caracteres de relleno ("==") van al final, elimine los primeros cuatro, y jugue a probar base64, base32, base16... como ninguna parecia funcionar, se me ocurrio decodificar el inverso de la cadena (ya lo habia visto en un ctf de la defcon hace unos años, y aqui bien podia ser por eso que habia rellenos al principio), asi que elimino los rellenos finales e invierto la cadena, lo que  efectivamente decodifica en base32 como "MR2W6VDSNFDWKU3JNVQWYYLOMRHGO2LUNE======" que a su vez decodifica como "duoTriGeSimalandNgiti" ... uhmm... otra flag facil :)

Crypto #4: PHP

nos dan un php ofuscado... como lo veo, uno de los mas directos... despues de todo en los demas crypto toca ir probando cosas que puedan servir, mientras que en este, ya sabemos que hacer... es cosa de remover la ofuscacion... y reemplazando los eval() por print() se va recuperando el codigo... decodificar valores en hex() y en oct(), decodificar base64(), unzip()... aburrido pero no muy duro... al final llegamos a una variable que no es usada en ningun lado y que esconde la flag:

"onlybyobservingthisconditionwouldtheresultsofourworkberegardedasfullyconclusiveandashavingelucidatedthenormalcourseofthephenomena"

Crypto #5: Llun Saving Bank
Llun Saving Bank is fed up with known encryption standards to store the data. They
decided to reinvent the wheel. Can you decode the data?

"Hs Foe vhmmhng un!qrdvdot!Ewhl!btu!nou!@ble> Thdn!id!hr NOU Omoipouenu/!Hs!Id!@bl
e- cuu!NNU vhllhof>!Thdn!Id!hr!Lamdvoldnu/ Hs Id Cnth @bme and!Vimliog> Tidn Vhdob
e Bnldui Ewhl>!Ir hd!Neitidr!@cmd!Oor Villhnf>!Tidn!WHY!ball!him FOE? -!Dqhbtruson
gnd"
En este reto estuve perdido por horas… pero eventualmente se publicó una pista confirmando que se trataba de esteganografía… ya con este enfoque, el nombre del banco era la clave: Llun Saving Bank = LSB, least-significant bit… uhmm… lo había visto con imágenes, nunca con textos… pero bueno, convertir a binario cada carácter, extrdar el ultimo dígito de cada binario, concatenar, agrupar cada 8 bits, y convertir a carácter cada grupo…
c = 'Hs Foe vhmmhng un!qrdvdot!Ewhl!btu!nou!@ble> Thdn!id!hr NOU Omoipouenu/!Hs!Id
!@ble- cuu!NNU vhllhof>!Thdn!Id!hr!Lamdvoldnu/ Hs Id Cnth @bme and!Vimliog> Tidn V
hdobe Bnldui Ewhl>!Ir hd!Neitidr!@cmd!Oor Villhnf>!Tidn!WHY!ball!him FOE? -!Dqhbtr
usongnd'

b = m = ''

for i in c:
    b += bin(ord(i))[-1]
    m += chr(int(b[-8:],2)) if len(b) % 8 == 0 else ''

print m
Flag: Learn howto Hide in Plain Sight

No hay comentarios:

Publicar un comentario