Skip to content

[DanteCTF 2023] Misc y Forense

3 minutos de lectura
Posted on:4 de junio de 2023 at 21:00

#Hanging Nose

Author: synack

Captura de pantalla de una herramienta de renderizado 3D, se ve una bola navideña con la cara de Dante

Analizamos la imagen, rotamos, agrandamos… y si hacemos zoom podemos conseguir entrar dentro de la bola y… tachán!!

Captura de pantalla de una herramienta de renderizado 3D, se ve una bola navideña con la flag

#HellJail

Autor: GB1

#!/usr/bin/env python3

from string import ascii_letters

code = input('> ')

if any(c in ascii_letters for c in code):
  print('You will never leave this place!')
elif any(c in '.:;,-_@"=/%\\' for c in code):
  print('You will never reach this point, but still, you CANNOT leave!')
else:
  exec(code)

Nos enfrentamos ante una pequeña python jail, en la que no admite caracteres de ASCII ni tampoco una lista de signos de puntuacion y otros caracteres… Una larga búsqueda, cambio entre media a otros retos para despejar la mente…después de todo esto empiezo a encontrar información…TRANSFORMAR EL TEXTO A ITALIC parece que es la solución… la primera prueba que hago es un simple print pero el texto está en italic.

Usé Generador de textos en italic, así que probé con print, ctrl+c y ctrl+v en el input de la jail. El output fue muy esperanzador, ya que devuelve el print correctamente.

Ahora “solo” queda leer la flag… jejeje aquí supuso otra larga búsqueda, porque para leer el fichero había puntos (.read) y aunque pasemos el primer if… el segundo es mas complejo…mis conocimientos en python son bajos, estoy empezando a ver cosas para hacer mis propios scripts pero poca cosa… entoces los ejemplos típicos para leer ficheros como ya he comentado son con el método read:

contenido = open('nombre_archivo.txt', 'r').read()
print(contenido)

Todo esto no funcionaba entoces empecé a buscar onliner para leer ficheros, después de una larga y desesperante encontré esta linea…

print(next(iter(open('/flag.txt'))))

Claro, yo daba por hecho que el fichero solo iba a tener una linea y que iba a ser la flag, por eso itero por las lineas del fichero, aunque este payload como tal no funciona porque aunque lo ponga en italic, la ”/” y el ”.” entraba en el segundo if. Solución? Usar el método chr() para obtener el caracter según su valor y concatenando todos los strings que devuelve, quedando el payload de la siguiente manera:

𝘱𝘳𝘪𝘯𝘵(𝘯𝘦𝘹𝘵(𝘪𝘵𝘦𝘳(𝘰𝘱𝘦𝘯(𝘤𝘩𝘳(47)+𝘤𝘩𝘳(102)+𝘤𝘩𝘳(108)+𝘤𝘩𝘳(97)+𝘤𝘩𝘳(103)+𝘤𝘩𝘳(46)+𝘤𝘩𝘳(116)+𝘤𝘩𝘳(120)+𝘤𝘩𝘳(116)))))

Captura de pantalla de la flag después de ejecutar el payload


#Who Can Haz Flag

Author: synack

Después de un rato analizando los paquetes http, dns y alguno más… al ver los paquetes ARP ordenados vemos que las IP’s saltan de una forma rara y no son secuenciales como se haría de forma normal al escanear la red.

Captura de pantalla de la flag después de ejecutar el payload

Lo primero que se nos ocurre es mirar en una tabla ASCII y ver cual es la D, curiosidamente es el 68 que es la terminación de la primera IP. Asi que lo único que hay que hacer es traducir el último byte de las IP’s a caracter utilizando una tabla ASCII y ya tendrías la flag.