<– Entrada incluida por DefCon.org en su colección oficial de Resolucionarios para este CTF =) –>
Ahora es el turno de Binary100 para la resolucion del CTF Quals DefCon 19. Este reto en especial es el primero de este tipo que hago en toda mi vida y aunque llegue a la ultima parte, no lo valide por que con tanta confusion no vi que la respuesta estaba enfrente de mi :/ Seguro ya sera para la proxima =) Pero por ahora lo importante esque con mis metodos arcaicos lo pude resolver y ahora aqui les muestro mi manera LARGA y DIFICIL de Resolverlo.
Nos proveen del archivo b100_6817e51fa3b60f176b56 Primeramente Lo identificamos y vemos que es un ELF 32-bit (osea tenemos un ejecutable de linux) Al ejecutarlo vemos que nos devuelve algo extraño ( ./b100_6817e51fa3b60f176b56 [1-11|all] )

Obviamente como todos se dieron cuenta el programa nos esta sugiriendo que le pasemos argumentos [1-11] del 1 al 11. Al pasarle un argumento nos imprimia unas caras en arte ascii
Dos cosas a notar aqui son: 1) Los caracteres que se usan aqui son los que curiosamente comprende BASE64 (excepto los “@” y ” ” que eran los caracteres basura que pusieron en el reto) y 2)Para cada argumento cambian
Asi que ya sabemos que hacer no? Hay que obtener esas cadenas de Base64 de los 11 argumentos y decodificarlos. Asi que yo lo hice de esta manera:
1 2 3 | ./b100_6817e51fa3b60f176b56 for((i=1;i<=11;i++));do !! $i | sed 's/@//g;s/ //g' > $i.hex; done |
Primeramente ejecuto el programa, luego recursivamente hago 11 veces la ejecucion del ultimo comando y de una vez elimino los caracteres “@” y “\x20” (espacios)
Y como veremos tenemos de una, los 11 archivos y vean que si son diferentes
Pero se me paso eliminar los saltos de linea, asi que los eliminare con “tr” y de una vez decodifico y doy salida a los archivos nuevos y vemos que son
1 2 | for i in $(ls *.hex);do cat $i | tr -d "\n" | base64 -d > $i.b64 ;done file *.b64 |
Vemos que son 11 .gz con un bin2-[a-k] primero renombramos todo a extension .gz y despues descomprimimos todo y vemos que son
1 2 3 4 5 | for ((i=1;i<=11;i++));do mv $i.hex.b64 $i.gz;done ls gunzip *.gz ls file {1,2,3,4,5,6,7,8,9,10,11} |
Bonito!!! Tenemos un 7zip y 10 archivos de pura “data”, yo al intentar descomprimir el 7zip me dio error. Entonces recorde que cuando vi los gzip decia algo como bin2[a-k] Asi que era claro no?? Habia que juntarlos para formar el 7zip y descomprimir =) y tendriamos un binario2 de seguro…
1 2 3 | cat 1 2 3 4 5 6 7 8 9 10 11 > bin2.7z 7z e bin2.7z file bin2 |
PERFECTO!!! ya tenemos bin2….y Adivinen que?? APENAS COMIENZA LA PESADILLA
Si ejecutabamos ./bin2 nos da nada mas arte ascii con base64, asi que limpiabamos y todo:
1 | ./bin2 | sed 's/ //g;s/@//g'|tr -d "\n"|base64 -d |
Solo nos lleva a un callejon sin salida que dice “S0 S0RRY 41NT NUTH1N BUT 4 P34NUT” multiples veces
En esta parte entra mi querido parce @Phicardo que me ayudo, aconsejo, guio y enseño pacientemente a iniciarme al “debugging” (recuerden que es la primera vez que hago esto :/ )
Asi que despues de que me explicara, y me quedara pensando mucho, esto fue lo que hice..
Hice uso de “objdump -s” y encontre una cadena curiosa “h3rr0m3y3n4m31zbr0br0gan”
Y como me enseño Phicar, estuve viendo el dump en asm y despues de mucho tiempo y explicaciones vi que esa cadena se debia pasar como argumento por los cmp que habian y que comparaban con el argumento 2, y veia comparaban una cadena (strcmp) y un condicional (jne) si pasaba algo imprimia “3 Face”
Despues de esto se me ocurrio que la cadena h3rr0m3y3n4m31zbr0br0gan estaba bien involucrada…Asi que le pase a bin2 el argumento h3rr0m3y3n4m31zbr0br0gan. Pero nada, recuerdan la comparacion? Contra que cadena va a comparar…Entonces la solucion fue renombrar bin2 a h3rr0m3y3n4m31zbr0br0gan y pasarle de argumento h3rr0m3y3n4m31zbr0br0gan y VOILA!!! Ya salia algo diferente…MAS base64 en arte ascii…
1 2 3 | mv bin2 h3rr0m3y3n4m31zbr0br0gan ./h3rr0m3y3n4m31zbr0br0gan h3rr0m3y3n4m31zbr0br0gan |
Limpiamos como anteriormente lo hemos hecho y damos salida para obtener “file” y vemos que es.
1 2 3 | ./h3rr0m3y3n4m31zbr0br0gan h3rr0m3y3n4m31zbr0br0gan | sed 's/@//g; s/ //g'|tr -d "\n"|base64 -d > file file file |
<—A partir de esta parte todo va en texto porque es Mucho comando como para ir ilustrando—>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | mv file file.gz gunzip file.gz file file >lzop compressed data - version 1.030, LZO1X-999, os: Unix sudo aptitude install lzop lzop -x file >bin3 file bin3 >bin3: compressd data 16 bits mv bin3 bin3.z uncompress bin3.z file bin3 >gzip compressed data mv bin3 bin3.gz gunzip bin3.gz file bin3 >ARC archive data sudo aptitude install arc mv bin3 bin3.arc arc x bin3.arc file bin3 >xz compressed data mv bin3 bin3.xz xz -d bin3.xz file bin3 >rzip compressed data mv bin3 bin3.rz rzip -d bin3.rz file bin3 >gzip compressed data mv bin3 bin3.gz gunzip bin3.gz file bin3 >POSIX tar archive (GNU) tar -xf bin3 file bin3 >lzop compressed data mv bin3 bin3.lzop lzop -x bin3.lzop file bin3 >bzip2 compressed data mv bin3 bin3.bz bunzip2 bin3.bz file bin3 >7-zip archive data mv bin3 bin3.7z 7z e bin3.7z file bin3 >ARJ archive data sudo aptitude install arj mv bin3 bin3.arj arj x bin3.arj >Extracting bin3-a OK >Extracting bin3-b OK >Extracting bin3-c OK file bin3-* >bin3-a: ELF 32-bit >bin3-b: data >bin3-b: data cat bin3-a bin3-b bin3-c > bin3 chmod +x bin3 |
Despues de esto, YA TENEMOS bin3…Lo ejecutamos y….¿TENEMOS LA CLAVE? Nooo, parece que si lo volvemos a ejecutar vemos que tiene un random en strings :’(
Entonces me decido a sacar todas esas cadenas…y por alguna razon me decido hacerlo con “objdump” (la razon esque phicar apenas un dia anterior me enseño este programa, y lo use en vez de hacerle primero lo que yo haria….strings)
1 | objdump -s bin3 > out.txt |
Todas esas cadenas las pueden ver aqui en pastebin
Ninguna de Estas era la clave y aqui me quede atorado y no pude validar el reto…Sin darme cuenta que ya lo tenia todo…Me faltaba nada mas hacer un string y ver al final.
Y ahi nos salia la clave.
FLAG: Where we’re going we don’t need… roads.
Bueno esto es todo pero antes dos Agradecimentos. Primero para Phicar, muchas gracias por su guia en la parte de debugging que me atore y por su paciencia =) Y Segundo para HaDeS por hacerme notar al final que era tan facil como con un strings =P
Perdonen la longitud del post para algo tan sencillo, simplemente soy un mexicano de 18 años emocionado por su primer CTF DefCon y haber resuelto 2 retos =)
Cualquier comentario Bienvenido =)
Saludos ![]()
Atte. hecky
hecky@neobits.org
Sigueme en twitter: http://twitter.com/hecky





















Pingback: More Speakers Posted! | How To Become The Worlds No. 1 Hacker
Pingback: DC19 CTF Quals Update! | How To Become The Worlds No. 1 Hacker
Pingback: DC19 CTF Quals Update! | National Cyber Security
Pingback: So Many Speakers! | National Cyber Security
Pingback: Huge Speaker Update! | How To Become The Worlds No. 1 Hacker
Pingback: Huge Speaker Update! | LocatePC | Locate your stolen computer or stolen laptop - Works for both Mac and PC