0

WriteUp Binary 100 – CTF 19 Quals DefCon (Step by Step)

Ahora es el turno de Binary100 para la resolución 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 confusión no vi que la respuesta estaba enfrente de mi :/ Seguro ya sera para la próxima =)

Pero por ahora lo importante es que con mis métodos arcaicos lo pude resolver y ahora aquí les muestro mi manera LARGA y DIFÍCIL 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 imprimía unas caras en arte ascii


Dos cosas a notar aquí son:

  1. Los caracteres que se usan aquí son los que curiosamente comprende BASE64 (excepto los “@” y ” ” que eran los caracteres basura que pusieron en el reto)
  2. Para cada argumento cambian


Así que ya sabemos que hacer ¿no? Hay que obtener esas cadenas de Base64 de los 11 argumentos y decodificarlos. Así que yo lo hice de esta manera:

./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 ejecución 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, así que los eliminare con “tr” y de una vez decodifico  y doy salida a los archivos nuevos y vemos que son :)

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 renombrados todo a extensión .gz y después descomprimimos todo y vemos que son 😉

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 recordé que cuando vi los gzip decía algo como bin2[a-k] Así que era claro ¿no?.

Había que juntarlos para formar el 7zip y descomprimir =) y tendriamos un binario2 de seguro…

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 ejecutábamos ./bin2 nos da nada mas arte ascii con base64, así que limpiábamos y todo:

./bin2 | sed ‘s/ //g;s/@//g’|tr -d “\n”|base64 -d

Solo nos lleva a un callejón sin salida que dice “S0 S0RRY 41NT NUTH1N BUT 4 P34NUT” múltiples veces   En esta parte entra mi querido parce @Phicardo que me ayudo, aconsejo, guió y enseño pacientemente a iniciarme al “debugging” (recuerden que es la primera vez que hago esto :/ ) Así que después de que me explicara, y me quedara pensando mucho, esto fue lo que hice.. Hice uso de “objdump -s” y encontré una cadena curiosa “h3rr0m3y3n4m31zbr0br0gan


Y como me enseño Phicar, estuve viendo el dump en asm y después de mucho tiempo y explicaciones vi que esa cadena se debia pasar como argumento por los cmp que habían y que comparaban con el argumento 2, y veía comparaban una cadena (strcmp) y un condicional (jne) si pasaba algo imprimía “3 Face”.
Después de esto se me ocurrió que la cadena h3rr0m3y3n4m31zbr0br0gan estaba bien involucrada…Así que le pase a bin2 el argumento h3rr0m3y3n4m31zbr0br0gan. Pero nada, recuerdan la comparacion? Contra que cadena va a comparar…Entonces la solución fue renombrar bin2 a h3rr0m3y3n4m31zbr0br0gan y pasarle de argumento h3rr0m3y3n4m31zbr0br0gan y VOILA!!! Ya salia algo diferente…MAS base64 en arte ascii…

mv bin2 h3rr0m3y3n4m31zbr0br0gan ./h3rr0m3y3n4m31zbr0br0gan h3rr0m3y3n4m31zbr0br0gan


Limpiamos como anteriormente lo hemos hecho y damos salida para obtener “file” y vemos que es.

./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—>

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

Ejemplo de esta ODISEA:


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)

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 unstring 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

Uncategorized

hecky

Leave a Reply

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