1

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

<– Entrada incluida por DefCon.org en su colección oficial de Resolucionarios para este CTF =) –>

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:

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

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 😉

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…

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:

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

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 un string y ver al final. Y ahi nos salia la clave.
FLAG: Where we’re going we don’t need… roads.

admin

One Comment

Leave a Reply

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