Análisis forenseAuditoría y CTF

Take an overview #CTF #Forensics – Binwalk, Foremost and more

Buenas a todos! Comenzamos otra nueva entrada sobre Take an overview #CTF #Forensics

En esta entrada veremos retos muy distintos entre sí, y en la mayoría de ellos usaremos Binwalk. Esta potente herramienta permite el análisis de firmware diseñada para analizar, realizar ingeniería inversa y extraer datos contenidos en imágenes de firmware.

#Ejemplo1:  Podemos ver los metadatos con exiftool, y vemos en el campo Title carácteres en base64.

12

Usando esta sentencia de Linux, podemos decodificar el base64.

13

Extraemos el PNG del archivo MP4, con Binwalk.

14

El comando dd pertenece a los sistemas operativos Unix que permite copiar y convertir datos de archivos a bajo nivel. Pasándole como argumento el fichero .mp4, lee y escribe en bloques de tamaño bs=1 byte. Con el parámetro skip se salta 547541 bloques del archivo origen antes realizar la operación de copiado. El tamaño del bloque es indicado por ibs.

15

Usamos este software para extraer un JPG de un PNG.

16

Con la herramienta Steghide, nos desvela información del JPG. Es un programa de estenografía que permite ocul­tar datos en varios tipos de imagen y archivos de audio.

17

Extraemos el .txt, pasandole como parámetro una contraseña por defecto.

18

Visualizamos el base64 con el comando cat.

19

Ahora con el intérprete de Python podemos descifrarlo, abriendo el fichero y leyendolo. Desde base64 importamos el b85decode, y desciframos lo leido en data. Mostrandonos la flag.

20

Otra opción:

>>> import base64

>>> base64.b85decode(b’W^7?+dsk&3VRB_4W^-?2X=QYIEFgDfAYpQ4AZBT9VQg%9AZBu9Wh@|fWgua4Wgup0ZeeU}c_3kTVQXa}eE’)

b’flag{We are fsociety, we are finally free, we are finally awake!}

#Ejemplo2:  Tenemos un zip, y al descomprimirlo vemos que es un .bmp dañado. Usando la herramienta mogrify y usando el formato de salida en png, podemos obtener en este caso la flag y abrir la imagen sin problemas. Mogrify, es una herramienta que forma parte del programa ImageMagick que permite realizar tareas como convertir fotos a otros formatos o modificar el tamaño de las imágenes.

imagemagick

24

#Ejemplo3: Nos dan una pista en un enunciado. Es interesante cuando nos dan una frase, jugar con las iniciales de cada palabra. Podemos tomar como ejemplo lo siguiente:

Hacker In Disguise Uses Sweet Bubbles, esto quiere decir HID USB deducimos que es un teclado. En el texto nos aparece el siguiente código codeado.

25

Buscando información sobre teclados, nos encontramos con este enlace. Nos explica como pasar de un valor como +16 al valor del teclado, es decir, S. Simplemente sustituyendo los valores con la tabla ya tendríamos la flag.

#Ejemplo4: Usamos Binwalk para poder observar en la descripción diferentes tipos de archivos.

45

Con file y strings, vemos el tipo de fichero e identificamos la flag.

46

Analizamos con Binwalk de nuevo al PNG.

47

Todos los datos en decimal, desde 0 hasta 411781 es parte de un PNG, pero el fichero .zip empieza en 411781. Lo extraemos, vemos el tipo de fichero y nos pide una password. Probamos moon y funciona. Hacemos cat y visualizariamos por pantalla la flag. Más información sobre el comando dd aquí

48

#Ejemplo5: Tenemos un binario ELF de 64 bits con un fichero zip en su interior. Usamos la herramienta Foremost para extraer el contenido del archivo.

79

Nos pide una password, por tanto procedemos a usar John the Ripper. Esta herramienta es un programa de criptografía que aplica fuerza bruta para descifrar contraseñas.

81

82

Abrimos, y en su interior estaría la flag. Podemos descifrar contraseñas de PDF con pdfcrack, usando el diccionario rockyou.txt, y nos encontramos la flag en su interior.

$ pdfcrack –wordlist=rockyou.txt mypassword.pdf

#Ejemplo6: Nos dan una APK de YouTube y procedemos a extraer los ficheros con Foremost.

83Visualizamos el fichero build-data.propierties. Vemos un base64 y el formato de la flag.

84

Lo decodificamos y tendriamos la flag.

85

#Ejemplo7: En el siguiente ejemplo nos dan un FLAC. Vemos los metadatos con exiftool y nada aparente.

9

Usaremos ahora sox con el parametro -n para poder ver el espectrograma. Sox (Sound eXchange) es un comando multiplataforma creado para manipular archivos de audio.

10

Visualizamos el espectograma.

11

En el caso de obtener un código morse en un espectograma (Como en la máquina de Vulnhub que hizo nuestro compañero Diego Jurado, https://www.fwhibbit.es/auditando-a-thefrequency-vulnhub-parte-i) recomiendo usar esta página web para decodificar el mensaje.

https://gc.de/gc/morse/

12

#Ejemplo8: Usaremos Exiftool permitiendo identificar los metadatos de una imagen. Muchas veces las flags están localizadas analizando los metadatos.

Tenemos una imagen, aplicamos exiftool viendo que contiene 47487 bytes de imagen thumbnail.

22

Usamos otra vez exiftool, y vemos que contiene más bytes Thumbnail Image.

23

24

La flag se ve en el JPG pero no tiene un formato muy legible, así que podemos usar convert del software ImageMagick, y ya obtendríamos la flag.

25

#Ejemplo9: Si nos dan un pcap, que no podemos abrir con software de análisis de paquetes, podemos probar con el comando strings. Vemos que existe el archivo key.zip.

26

Podemos visualizar el Zip por pantalla mediante Binwalk. Extraemos con Foremost.

27

28

El valor de la Key en hexadecimal, es nuestra flag.

#Ejemplo10: Dado una APK usaremos apktool para generar los ficheros smali divididos por clases tal como existirían en su forma Java correspondiente.

29

Podemos observar cual es el MainActivity.

30

Usamos dex2jar para obtener el jar.

31

Abrimos JD-GUI, seleccionando el fichero jar generado y se obtiene el árbol de paquetes con los ficheros, la representacion Java de los ficheros.

32

Vemos un base64, lo decodeamos y tendríamos la flag.

33

#Ejemplo11: Tenemos un gif, que cambia muy rápidamente mostrando de forma ilegible la flag, por tanto usamos convert para dividir el gif, en buscar los marcos correspondientes. En la primera imagen png tendríamos nuestra flag.

34

#Ejemplo12: Extracción con foremost en una imagen, y la flag contenida en su interior en formato jpg.

35

#Ejemplo13: Si tenemos lo siguiente en algún reto, o algo parecido: AABA ABAA AB BBA BBBAAA BAB AAAAB ABBA B AAABB BA ABBA AAAAB B ABBBB BB AAB ABA AAAAB

Podemos deducir en que sea morse (No podría ser binario), usamos el comando «tr» para cambiar los caracteres, tal que así tr ‘AB’ ‘.-‘

..-. .-.. .- --. ---... -.- ....- .--. - ...-- -. .--. ....- - .---- -- ..- .-. ....-

Y lo decodificamos con esta web: https://gc.de/gc/morse/

#Ejemplo14: Tenemos una imagen, y nos dicen que tenemos una escala de 49 grises distintos y nos falta uno. Usamos convert para ver el histograma de la imagen.

54

Analizando la salida, vemos que nos falta 80 80 80. Lo pasamos de decimal a hexadecimal y obtenemos 50 50 50. Esa sería la flag. «I love happy ideas» :S

#Ejemplo15: Nos dan un Zip, lo descomprimimos. Miramos en la carpeta extraida y tenemos numerosos ficheros «una centena de ellos», de tipo ASCII, según la salida del comando file.

55

Comprobamos si existen otros ficheros e identificamos un jpeg, abrimos la imagen y ya tendríamos nuestra flag.

56

57

#Ejemplo16: Tenemos dos imagenes diferentes, y debemos obtener la flag de ellas, usamos convert y restamos con los valores de píxeles de ambas imágenes. La imagen fwhibbit.png, mostraría la flag.

Aquí podeis encontrar mas información al respecto: http://www.imagemagick.org/Usage/compose/#math

69

#Ejemplo17: Quizás en ctfs de forense al descomprimir con foremost, nos podemos encontrar con imágenes que resultan ser un puzzle y haya que resolver uniendolos.

70

#Ejemplo18: Nos dan una imagen, vemos que contiene en su interior y extraemos con Foremost,

81

82

Vemos diferentes codigos QR,

83

84

Pero al decodear todos, obtenemos un mensaje y no la flag. Hacemos decode otro QR, y nos indica que estamos cerca de conseguir la flag… «I hate trolling messages…» :S

85

Para decodear un QR Online podemos hacer uso de esta web: https://zxing.org/w/decode.jspx

#Ejemplo19: Nos dan una apk y procedemos a usar dex2jar para transformar un fichero dex en uno jar con ficheros .class compilados en bytecode de Java original.

7

Usamos un descompilador de ficheros .class a java con JD-GUI. Vemos que tenemos en decimal, lo pasamos a ASCII y ya tendríamos nuestra flag.

8

#Ejemplo20: Usamos binwalk con el parametro -e para la extracción de ficheros conocidos:

binwalk -e no-big-deal.pcap

cd _no-big-deal.pcap.extracted/

strings * | grep -i ‘ctf’

Y obtenemos la flag….

#Ejemplo21: Para ctfs en la cual nos dan una imagen, y no sea muy legible la flag, es recomendable abrir el archivo de imagen en un editor de imágenes básico como Gimp y ajustar el contraste, saturación o matiz de la imagen. Para ello tambien podemos usar StegSolve.

Y hasta aquí la entrada de hoy, en las siguientes hablaré sobre ficheros .pcap y el uso de Wireshark y Tshark. Un saludo, Naivenom.