martes, 7 de junio de 2011

Defcon19 CTF Quals -- Binary Badness 100

Terminaron las quals para el CTF de la Defcon19, este año si nos apalearon.
terminamos con 400 puntos: 100 en binarios, 100 en una trivia retro y 200 de otro reto que resolvio nando aunque creo que ni el supo como (igual que me paso el año pasado con un reto de crypto al que le pase un string nulo)... en todo caso... estuvo duro... mucho mas que el año pasado...

pues bien, conseguimos los primeros 100 puntos del equipo con el binary100

Lo primero fue identificar el binario usando file:
rmolina@maybe-failed:~/Downloads$ file b100_6817e51fa3b60f176b56
b100_6817e51fa3b60f176b56: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped
y desde ahi ya ejecutar
rmolina@maybe-failed:~/Downloads$ chmod +x b100_6817e51fa3b60f176b56
rmolina@maybe-failed:~/Downloads$ ./b100_6817e51fa3b60f176b56
./b100_6817e51fa3b60f176b56 [1-11|all]
veo que recibe un parametro que puede ser un numero o 'all'
rmolina@maybe-failed:~/Downloads$ ./b100_6817e51fa3b60f176b56 1
(aqui borre muchas lineas, pero bueno la salida formaba unas caritas, emoticones, pero las ultimas lineas ya nos ubican)
5KQdq2HN cr7f Y65 ComKCtm
ynin13b/ 1MOB wl6 +Z3gPOvg
GsuM6KtaQ pj2D yWjO A1a5Lm5r
myLQluWb5 3a8D XffO C/ofUzGUn
rdzH2bx7N+ 5u6C SQXA awT6CMHez
26TtDI4f3B nwaX y4y gBZBCyfxDd
rKMZAkT6XPo 7QDs D8zj iqgHh9dtOI
/2FZV4o9ahU 9hsB nIYH WxUq7Iovfaa
t9/3qyCMID6/ lUEMw UMMAAA==@ @@@@ @@@@@@@@@@@
@@@@@@@@@@@@ @@@@ @@ @@ @@@@ @@@@@@@@@@@@
@@@@@@@@@@@@@ @@@@ @@ @ @@@@ @@@@@@@@@@@@@
@@@@@@@@@@@@@@ @@@@@ @ @@ @@@@@ @@@@@@@@@@@@@
@@@@@@@@@@@@@@@ @@@@ @ @ @@@@@ @@@@@@@@@@@@@@
@@@@@@@@@@@@@@@ @@@@ @ @ @@@@@ @@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@ @@@@@ @ @@@@@ @@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@ @@@@@ @ @@@@@@ @@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@ @@@@@ @ @@@@@@ @@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@ @@@@@ @ @@@@@@ @@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@ @@@@@@ @ @@@@@@ @@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@ @@@@@@@ @@@@@@@ @@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@ @@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@ @@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
todas esas '@' tienen que ser un relleno y justo antes de ellas, un '==' nos hace pensar en un texto en base64
pero primero hay que quitar las arrobas, los espacios, y los saltos de linea:
rmolina@maybe-failed:~/Downloads$ ./b100_6817e51fa3b60f176b56 1 | tr -d '@ \n' | base64 -d > b100.1
rmolina@maybe-failed:~/Downloads$ file b100.1
b100.1: gzip compressed data, was "bin2-a", from Unix, last modified: Fri Apr 1 03:28:09 2011
y si usamos el parametro 2, obtenemos:
rmolina@maybe-failed:~/Downloads$ ./b100_6817e51fa3b60f176b56 2 | tr -d '@ \n' | base64 -d > b100.2
rmolina@maybe-failed:~/Downloads$ file b100.1
b100.2: gzip compressed data, was "bin2-b", from Unix, last modified: Fri Apr 1 03:28:09 2011
bin2-a y bin2-b son partes de un archivo gzip
me imagino que si se savan las 11 partes y se concatenan con cat, se obtiene el archivo gzip completo

pero preferi intentar con el parametro all
rmolina@maybe-failed:~/Downloads$ ./b100_6817e51fa3b60f176b56 all | tr -d '@ \n' | base64 -d > b100.all.gz

rmolina@maybe-failed:~/Downloads$ gunzip b100.all.gz
rmolina@maybe-failed:~/Downloads$ file b100.all
b100.all: 7-zip archive data, version 0.3
rmolina@maybe-failed:~/Downloads$ mv b100.all b100.all.7z

rmolina@maybe-failed:~/Downloads$ 7z e b100.all.7z
7-Zip 9.04 beta Copyright (c) 1999-2009 Igor Pavlov 2009-05-30
p7zip Version 9.04 (locale=es_CO.utf8,Utf16=on,HugeFiles=on,2 CPUs)
Processing archive: b100-all.7z
Extracting bin2
Everything is Ok
Size: 980647
Compressed: 514107
rmolina@maybe-failed:~/Downloads$ file bin2
bin2: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, not stripped
y ya tenemos un nuevo binario
para resumir, otra carita es ascii, pero esta es diferente...
en todo caso, tratamiento similar:
rmolina@maybe-failed:~/Downloads$ ./bin2 | tr -d '@ \n' | base64 -d
S0 S0RRY 41NT NUTH1N BUT 4 P34NUT
(ese texto sale muchas veces)
intento esa clave
no es
nos esta diciendo que vamos perdidos

despues de un rato se me ocurre que si aparecio bin2, y suponiendo que el incial que nos dan es bin1, puede haber otros escondidos...
intento pasarle parametros pero ninguno funciona.
finalmente, reviso con ltrace:
rmolina@maybe-failed:~/Downloads$ ltrace ./bin2 all
__libc_start_main(0x8048460, 2, 0xbff06284, 0x80484a0, 0x8048500
strcmp("all", "h3rr0m3y3n4m31zbr0br0gan") = -1
fprintf(0xb78784e0, "%s\n", " UzAgUzBSUlkgNDFOVCBOVVRIMU4gQlV"... UzAgUzBSUlkgNDFOVCBOVVRIMU4gQlVUIDQgUDM0TlVUIFMwIFMwUlJZIDQxTlQgTlVUSDFOIEJVVCA0IFAzNE5VVCBTMCBTMFJS
WSA0MU5UIE5VVEgxTiBCVVQgNCBQMzROVVQgUzAgUzBSUlkgNDFOVCBOVVRIMU4gQlVUIDQgUDM0TlVUIFMwIFMwUlJZIDQxTlQg
TlVUSDFOIEJVVCA0IFAzNE5VVCBTMCBTMFJSWSA0MU5UIE5VVEgxTiBCVVQgNCBQMzROVVQgUzAgUzBSUlkgNDFOVCBOVVRIMU4g
QlVUIDQgUDM0TlVUIFMwIFMwUlJZIDQxTlQgTlVUSDFOIEJVVCA0IFAzNE5VVCBTMCBTMFJSWSA0MU5UIE5VVEgxTiBCVVQgNCBQ
(y el resto del string que genera la carita)
pero con ese strcmp ya encontramos "h3rr0m3y3n4m31zbr0br0gan"
al pasar ese parametro sale un texto nuevo, una carita nueva, muchas pero muchas de esta cara en ascii...
bueno esta carita la reconozco, pero es irrelevante...
al final otra vez arrobas y repetimos el tratamiento
desde ahi, es cosa de identificar la salida, renombrar (algunos comandos requieren la extension correcta) y usar el descompresor adecuado...
resuta que usaron muchos descompresores diferentes... todos en cadena...
rmolina@maybe-failed:~/Downloads$ ./bin2 h3rr0m3y3n4m31zbr0br0gan | tr -d '@ \n' | base64 -d > nuevobin
rmolina@maybe-failed:~/Downloads$ file nuevobin
nuevobin: gzip compressed data, was "bin3", from Unix, last modified: Fri Apr 1 01:35:15 2011
rmolina@maybe-failed:~/Downloads$ mv nuevobin bin3.gz

rmolina@maybe-failed:~/Downloads$ gunzip bin3.gz
rmolina@maybe-failed:~/Downloads$ file bin3
bin3: lzop compressed data - version 1.030, LZO1X-999, os: Unix
rmolina@maybe-failed:~/Downloads$ mv bin3 bin3.lzo

rmolina@maybe-failed:~/Downloads$ lzop -d bin3.lzo
rmolina@maybe-failed:~/Downloads$ file bin3
bin3: compress'd data 16 bits
rmolina@maybe-failed:~/Downloads$ mv bin3 bin3.Z

rmolina@maybe-failed:~/Downloads$ uncompress bin3.Z
rmolina@maybe-failed:~/Downloads$ file bin3
bin3: gzip compressed data, was "bin3", from Unix, last modified: Thu Mar 31 09:10:38 2011
rmolina@maybe-failed:~/Downloads$ mv bin3 bin3.gz

rmolina@maybe-failed:~/Downloads$ gunzip bin3.gz
rmolina@maybe-failed:~/Downloads$ file bin3
bin3: ARC archive data, uncompressed
rmolina@maybe-failed:~/Downloads$ mv bin3 bin3.arc

rmolina@maybe-failed:~/Downloads$ arc -e bin3.arc
Extracting file: bin3
rmolina@maybe-failed:~/Downloads$ file bin3
bin3: XZ compressed data
rmolina@maybe-failed:~/Downloads$ mv bin3 bin3.xz

rmolina@maybe-failed:~/Downloads$ xz -d bin3.xz
rmolina@maybe-failed:~/Downloads$ file bin3
bin3: rzip compressed data - version 2.1 (276265 bytes)
rmolina@maybe-failed:~/Downloads$ mv bin3 bin3.rz

rmolina@maybe-failed:~/Downloads$ rzip -d bin3.rz
rmolina@maybe-failed:~/Downloads$ file bin3
bin3: gzip compressed data, from Unix, last modified: Fri Apr 1 01:10:06 2011
rmolina@maybe-failed:~/Downloads$ mv bin3 bin3.gz

rmolina@maybe-failed:~/Downloads$ gunzip bin3.gz
rmolina@maybe-failed:~/Downloads$ file bin3
bin3: POSIX tar archive (GNU)
rmolina@maybe-failed:~/Downloads$ mv bin3 bin3.tar

rmolina@maybe-failed:~/Downloads$ tar x bin3.tar
rmolina@maybe-failed:~/Downloads$ file bin3
bin3: lzop compressed data - version 1.030, LZO1X-999, os: Unix
rmolina@maybe-failed:~/Downloads$ mv bin3 bin3.lz

rmolina@maybe-failed:~/Downloads$ lzop -d bin3.lzo
rmolina@maybe-failed:~/Downloads$ file bin3
bin3: bzip2 compressed data, block size = 900k
rmolina@maybe-failed:~/Downloads$ mv bin3 bin3.bz2

rmolina@maybe-failed:~/Downloads$ bunzip2 bin3.bz2
rmolina@maybe-failed:~/Downloads$ file bin3
bin3: 7-zip archive data, version 0.3
rmolina@maybe-failed:~/Downloads$ mv bin3 bin3.7z

rmolina@maybe-failed:~/Downloads$ 7z e bin3.7z
7-Zip 9.04 beta Copyright (c) 1999-2009 Igor Pavlov 2009-05-30
p7zip Version 9.04 (locale=es_CO.utf8,Utf16=on,HugeFiles=on,2 CPUs)
Processing archive: bin3.7z
Extracting bin3
Everything is Ok
Size: 272781
Compressed: 274332
rmolina@maybe-failed:~/Downloads$ file bin3
bin3: ARJ archive data, v11, slash-switched, original name: , os: Unix
rmolina@maybe-failed:~/Downloads$ mv bin3 bin3.arj

rmolina@maybe-failed:~/Downloads$ arj e bin3.arj
ARJ32 v 3.10, Copyright (c) 1998-2004, ARJ Software Russia. [08 Mar 2011]
Processing archive: bin3.arj
Archive created: 2011-04-01 01:01:36, modified: 2011-04-01 01:01:36
Extracting bin3-a OK
Extracting bin3-b OK
Extracting bin3-c OK
3 file(s)

rmolina@maybe-failed:~/Downloads$ cat bin3-* > bin3
rmolina@maybe-failed:~/Downloads$ file bin3
bin3: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.32, stripped
finalmente! otro binario!

(por cierto, en el log faltaron algunas paradas para instalar via apt-get o para revisar el manual de los compresores que nadie conoce...)
lo ejcuto y:
rmolina@maybe-failed:~/Downloads$ chmod +x bin3
rmolina@maybe-failed:~/Downloads$ ./bin3
-=-=-=-=-=-=-=-=- Wh4t W1ll B3 R3v34l3d? -=-=-=-=-=-=-=-=-
hey bro, you're cool bro. don't ever change bro! you're such a bro, bro!
-=-=-=-=-=-=-=-=- Wh4t W1ll Be R3v34l3d? -=-=-=-=-=-=-=-=-
si!!!
la bandera!
la ensayamos... y no...
no es!

no lo puedo creer...
vuelvo a ejecutar...
rmolina@maybe-failed:~/Downloads$ ./bin3
-=-=-=-=-=-=-=-=- Wh4t W1ll B3 R3v34l3d? -=-=-=-=-=-=-=-=-
why be professional when you can be brofessional?
-=-=-=-=-=-=-=-=- Wh4t W1ll Be R3v34l3d? -=-=-=-=-=-=-=-=-
que?

rmolina@maybe-failed:~/Downloads$ ./bin3
-=-=-=-=-=-=-=-=- Wh4t W1ll B3 R3v34l3d? -=-=-=-=-=-=-=-=-
!y3wt4w7k1n2m3? 3y3s3dy3wt4w7k1n2m3?
-=-=-=-=-=-=-=-=- Wh4t W1ll Be R3v34l3d? -=-=-=-=-=-=-=-=-

rmolina@maybe-failed:~/Downloads$ ./bin3
-=-=-=-=-=-=-=-=- Wh4t W1ll B3 R3v34l3d? -=-=-=-=-=-=-=-=-
2r98hdij23r98hdsfkjb23r9hdfkj39
-=-=-=-=-=-=-=-=- Wh4t W1ll Be R3v34l3d? -=-=-=-=-=-=-=-=-

rmolina@maybe-failed:~/Downloads$ ./bin3
-=-=-=-=-=-=-=-=- Wh4t W1ll B3 R3v34l3d? -=-=-=-=-=-=-=-=-
canthisbethekeybecauseitissuchalongstringandddteklikeslongstrings?
-=-=-=-=-=-=-=-=- Wh4t W1ll Be R3v34l3d? -=-=-=-=-=-=-=-=-

joder... que despiste...
banderas falsas...
salen al azar...
ahi perdi un buen rato...
me salieron mas de 30 diferentes

pero finalmente decidi listar las cadenas con strings:
rmolina@maybe-failed:~/Downloads$ strings bin3
PTRhP
<[^_]
<8#}
(y la lista es larguisima)
[^_]
[^_]
(pero despues de muchas cadenas aparecen las soluciones falsas)
Th1s1zt3hK3yk3yk33H33H33H33.N0t!
t00rongD1DNTg1ve
canthisbethekeybecauseitissuchalongstringandddteklikeslongstrings?
l33tsp33k1z0ut.RealTalkIsIn.
h1tth3r04dj4ck3ndd0nty3wc0m3b4ckn0m0ren0m0R3n0M0R3N0M0R3!
k3ysk3yst3hmm4g1c4lfr3wtthm0r3y3we4tth3mt3hm0r3y3wr00t
5tunt1n1z4h4b1tput171nth3a1r
! is i upside down!i!i!
A complete statement can also be the key to victory.
This is the key.
(lol, esa fue la mejor)
.key the is This
Can y3w feel it coming in the air tonight?
Random thoughts give way to random problems give way to random solutions
Lorem Ipsum is a bitch.
!y3wt4w7k1n2m3? 3y3s3dy3wt4w7k1n2m3?
asdfhasdkfjhasfkjhasfjasdkfjhasdfkjhasfkh
2r98hdij23r98hdsfkjb23r9hdfkj39
8377e19ab2c48f5f70021d6ed92937cc520c3ad1
e9b1b3124eedf6e88a40b0f240b19b8f
7cf0564cb453a9186431ee9553f7f935
84ee6f2004d8dfc1a864012edf6f92a7802d60b2
you are what you don't root
Why don't you make like a tree and.. get outta here?
It's already mutated into human form, shoot it!
if it makes a difference, they make a purse that looks like a vagina
it's better to live one day as a bro than a thousand years as a douchebag
why be professional when you can be brofessional?
hey bro, you're cool bro. don't ever change bro! you're such a bro, bro!
a list is only as strong as its weakest link
As Lord Chesterfield said of the generals of his day, 'I only hope that when the enemy reads the list of their names, he tremelbes as I do.'
th3r3 wuz 4 f4m1l33 uv 4r15t0cr4tz
1f y3w c4n't 41m j0ur p1$$ 1n d4 t01l3t l1k3 4n 4dult, s1t d0wn & p1$$ l1k3 4 b1zn44zzzzzzzzzt1ch
(todas esas me salian al azar)
TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVs aXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvc mUgbWFnbmEgYWxpcXVhLiBVdCBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkI GV4ZXJjaXRhdGlvbiB1bGxhbWNvIGxhYm9yaXMgbmlzaSB1dCBhbGlxdWlwIGV4IGVhIGNvb W1vZG8gY29uc2VxdWF0LiBEdWlzIGF1dGUgaXJ1cmUgZG9sb3IgaW4gcmVwcmVoZW5kZXJpd CBpbiB2b2x1cHRhdGUgdmVsaXQgZXNzZSBjaWxsdW0gZG9sb3JlIGV1IGZ1Z2lhdCBudWxsY SBwYXJpYXR1ci4gRXhjZXB0ZXVyIHNpbnQgb2NjYWVjYXQgY3VwaWRhdGF0IG5vbiBwcm9pZ GVudCwgc3VudCBpbiBjdWxwYSBxdWkgb2ZmaWNpYSBkZXNlcnVudCBtb2xsaXQgYW5pbSBpZ CBlc3QgbGFib3J1bS4K
(esta anterior es un bloque en base64 que te da esperanzas.... pero no... es solo un lorem ipsum...)
-=-=-=-=-=-=-=-=- Wh4t W1ll B3 R3v34l3d? -=-=-=-=-=-=-=-=-
-=-=-=-=-=-=-=-=- Wh4t W1ll Be R3v34l3d? -=-=-=-=-=-=-=-=-
(se acabaron?)
FATAL: kernel too old
FATAL: cannot determine kernel version
/dev/full
/dev/null
set_thread_area failed when setting up thread-local storage
unexpected reloc type in static binary
LIBC_FATAL_STDERR_
(y asi nos seguimos)
of Verneed record
RTLD_NEXT used in code not dynamically loaded
stack smashing detected
*** %s ***: %s terminated
zPLR
Where we're going we don't need... roads.
CAk[S
la vieron?
claro... asi ya es facil....

pero solo por darles el dato:
rmolina@maybe-failed:~/Downloads$ strings bin3 | wc -l
1706
1706 strings para inspeccionar...

creanme, no fue facil verla, pero ahi estaba, en un punto facil de encontrar...
porque cuando al final la vi, de una vez pense: "esta nunca me salio, que hace por aca? sera?"
y claro

Where we're going we don't need... roads.

FIN :)

bueno... un BONUS:

logre hacer otros 100 puntos para el equipo resolviendo un problema retro:

____ ___ ______!

si, solo eso decia!

no le veia pinta de nada...
hasta que hablando con rafarevert, me dijo: "eso debe ser un ahorcado"
algo como "fuck the defcon"

y claro ahi si la vi de una:
hack the planet
ya no recuerdo si la respuesta incluia el bang (!) al final o no

uhmm... eso si es retro de verdad :)

No hay comentarios:

Publicar un comentario