- CTF: CPBR9 - 1 day 1 chall
- Challenge: Day 1 - Mathroshka
- Category: PPC / Coding
- Author: gnx
- Solved by: RTFM[ChOkO]
Description: D1v1r74-53 c0m 4 Matroshka! (use wget se tiver dificuldades para baixar o arquivo).
Link: http://game.ctf-br.org/challenges/Day1-Matroshka.zip
**
Utilizamos o comando “file” para saber realmente qual o tipo de arquivo apresentado neste desafio:
[root:...BR/CPBR2016/DAY_01/write-up]# file Day1-Matroshka.zip
Day1-Matroshka.zip: Zip archive data, at least v1.0 to extract
Rodamos o comando “unzip” para descompacta-lo e (para nossa surpresa) nos deparamos com um mais um zip…
[root:...BR/CPBR2016/DAY_01/write-up]# unzip Day1-Matroshka.zip
Archive: Day1-Matroshka.zip
extracting: zip.zip
[root:...BR/CPBR2016/DAY_01/write-up]# file zip.zip
zip.zip: Zip archive data, at least v1.0 to extract
Conforme o nome do challenge estamos realmente lidando com uma Mathroshka que no final nos recompensará com a primeira flag do 1day_1chall! \o/ Pensamos em deixar nosso estagiário rodando o comando “unzip” na mão, porém a idéia de perder o primeiro dia da #CPBR9 não lhe agradou muito e ele resolveu este desafio com uma elegante gambiarra: um shellscript (solve.sh) para descompactar sucessivamente todas as camadas da mathroshka e ao final chamando um script em python (bin2ascii.py) para conversão da flag.
- bin2ascii.py:
#!/usr/bin/env python
import binascii
import sys
binario_in = str(sys.argv[1])
x = "0b%s" % binario_in
n = int(x,2)
result = binascii.unhexlify('%x' % n)
print '[*] Binario --> %s \n[*] Flag --> %s ' % (binario_in, result)
#!/usr/bin/env python
import binascii
import sys
binario_in = str(sys.argv[1])
x = "0b%s" % binario_in
n = int(x,2)
result = binascii.unhexlify('%x' % n)
print '[*] Binario --> %s \n[*] Flag --> %s ' % (binario_in, result)
- solve.sh:
#!/bin/bash
i=0
# Descompacta a Matroshka até encontrar um
# tipo de arquivo que não seja compactado.
while true; do
ARQ=$(ls -1 | grep -vE "solve.sh|bin2ascii.py")
TYP=$(file $ARQ | cut -d" " -f2)
if [ $TYP != "Zip" ]; then
echo -ne "\e[33;5m[*] FOUND --> $ARQ \n"
break
fi
echo "[ $i ] $ARQ "
WORK="work.zip"
mv $ARQ $WORK
7z x $WORK
rm $WORK
let i++
done
# Lê e converte a flag codificada...
FLAGBIN=$(cat flag.bin)
Executando o solve.sh temos o seguinte resultado
- FLAG: m4tr0shk4fr4ct4l