diff --git a/2025/MilaConPapasFritas/CTF1-Ancient Mistery /readme.md b/2025/MilaConPapasFritas/CTF1-Ancient Mistery /readme.md
new file mode 100644
index 0000000..c4eb8a4
--- /dev/null
+++ b/2025/MilaConPapasFritas/CTF1-Ancient Mistery /readme.md
@@ -0,0 +1,35 @@
+# CTF Ancient Mystery
+Url del ctf: https://kashictf.iitbhucybersec.in/challenges#Ancient%20Mystery-4
+
+Date 03 April, 12:00 UTC — 04 April 2026, 12:00 UTC
+
+Es un desafio de Cryptography
+
+## Entendiendo el reto
+El enunciado dice:
+
+* Un mensaje secreto desde la epoca del Mahabharata(3136 a.C)
+* Cada 64 años se recodifica el mensaje
+* Han pasado 3136 años hasta la era comun
+* 3136 / 64 = 49 ciclos de recodificacion
+* El formato de la flag debe ser kashiCTF{...}
+* Un archivo de texto “secret_message.txt”
+## Analisis del archivo descargado
+El archivo secret_message.txt contiene una cadena muy larga que comienza con:
+Vm0wd2QyUXlVWGxWV0d4V1YwZDRWMVl3WkRSV01WbDNXa1JTVjAxV2JETlhhMUp…
+
+* Solo contiene letras mayusculas y minusculas
+* Estructura típica de Base64
+* Al decodificar una vez, se obtiene otra cadena similar, lo que indica multiples capas
+## Proceso de decodificacion
+Si cada 64 años se aplicaba una codificación Base64, tras 49 ciclos tendriamos 49 capas de Base 64
+
+Solución implementada en Python:
+
+## Resultado
+Al ejecutar el script, despues de varias decodificaciones (49 veces), se obtiene un texto que comienza con flag{..}
+
+
+La flag aparece como flag{th3…} se tiene que cambiar el prefijo por kashiCTF{..} ya que lo dice el enunciado por lo que queda
+**kashiCTF{th3_s3cr3t_0f_mah4bh4r4t4_fr0m_3136_BCE}**
+
diff --git a/2025/MilaConPapasFritas/CTF1-Ancient Mistery /solve.py b/2025/MilaConPapasFritas/CTF1-Ancient Mistery /solve.py
new file mode 100644
index 0000000..5bb4470
--- /dev/null
+++ b/2025/MilaConPapasFritas/CTF1-Ancient Mistery /solve.py
@@ -0,0 +1,24 @@
+import base64
+
+# Leer el contenido del archivo
+with open("secret_message.txt", "r") as f:
+ data = f.read().strip()
+
+# Decodificar hasta 50 veces
+for i in range(50):
+ try:
+ # Decodificar
+ data = base64.b64decode(data).decode('utf-8')
+
+ # Mostrar progreso
+ print(f"Capa {i+1}: {data[:50]}...")
+
+ # Si encontramos la flag en formato kashiCTF, terminamos
+ if data.startswith("kashiCTF{") or data.startswith("flag{"):
+ print(f"\nFLAG encontrada en capa {i+1}:")
+ print(data)
+ break
+
+ except Exception as e:
+ print(f"Error en capa {i+1}: {e}")
+ break
diff --git a/2025/MilaConPapasFritas/CTF2-Browser Boss Fight/readme.md b/2025/MilaConPapasFritas/CTF2-Browser Boss Fight/readme.md
new file mode 100644
index 0000000..605c403
--- /dev/null
+++ b/2025/MilaConPapasFritas/CTF2-Browser Boss Fight/readme.md
@@ -0,0 +1,42 @@
+
+# Browser Boss Fight-WriteUp
+## Categoría: Web
+
+### Descripción del desafío:
+
+### El desafío nos presenta una página con solo un input para ingresar una “key”.
+
+
+
+
+
+
+
+### Si inspeccionamos el código, observamos que no importa cual sea el input ingresado, el valor del input se cambia a “WEAK_NON_KOOPA_KNOCK”.
+
+
+
+
+
+### Si probamos cualquier input obtenemos el siguiente mensaje en pantalla. Ademas podemos visualizar la cabecera “server” que contiene una pista : “In case you forget the key, check under_the_mat”
+
+
+
+### Ahora haciendo uso de burp suite y de la pista, interceptamos la peticion para cambiar el valor constante de key por “under_the_mat”.
+
+
+### Y asi logramos el acceso a la siguiente pagina:
+
+
+### Como vemos el texto dice “i removed the axe”, si inspeccionamos encontramos que tiene hasAxe=false:
+
+
+### Si interceptamos nuevamente la petición get y modificamos el valor por true:
+
+
+
+### Finalmente obtenemos la flag:
+
+
+## Flag obtenida : UMASS{br0k3n_1n_2_b0wz3r5_c4st13}
+
diff --git a/2025/MilaConPapasFritas/CTF3-Cripto Visor/CryptoVisor.txt b/2025/MilaConPapasFritas/CTF3-Cripto Visor/CryptoVisor.txt
new file mode 100644
index 0000000..5d6411a
--- /dev/null
+++ b/2025/MilaConPapasFritas/CTF3-Cripto Visor/CryptoVisor.txt
@@ -0,0 +1,4 @@
+CryptoVisor
+-----------
+
+*@F 92G6 7@F?5 :E] ~FC DFCG6:==2?46 E62> :?E6C46AE65 2 EC2?D>:DD:@? 7C@> :?D:56 E96 %C256':D@C ?6EH@C<] %96 286?E FD65 2 4:A96C E@ AC@E64E E96 >6DD286] qFE 42? J@F 564CJAE E96 D64@?5 >6DD286n |2J36 ECJ FD:?8 D@>6 D@CE @7 #~% 564CJAE:@? 2D H6==] {39 F?:C @63IC2 G283 8FC v6?BCxG736 2C8;36I ?2B F?:C 6CACG:CB 8FC DJ?E] vFC DJ?E G7 HA8DLcA@BA!_"Al$#@B_(0$N
diff --git a/2025/MilaConPapasFritas/CTF3-Cripto Visor/readme.md b/2025/MilaConPapasFritas/CTF3-Cripto Visor/readme.md
new file mode 100644
index 0000000..2f35b19
--- /dev/null
+++ b/2025/MilaConPapasFritas/CTF3-Cripto Visor/readme.md
@@ -0,0 +1,16 @@
+# X-Ray Vision
+## Categoría: Web
+### Tenemos el siguiente enunciado:
+
+
+### La traducción es : “Nuestro equipo de vigilancia interceptó una transmisión desde el interior de la red TradeVisor. El agente utilizó un cifrado para proteger el mensaje. Decodificalo, recupera la clave de acceso y envíala para desbloquear la bóveda.”
+### Además nos proporciona un archivo .txt con el mensaje.
+### Observando el texto que aparece en el archivo, sospechamos de que podría estar cifrado con algún tipo de rot, probando obtenemos con rot47 el siguiente texto:
+
+
+### Como vemos todavía no obtenemos la flag , pero si otra pista: el segundo mensaje también está cifrado en algún tipo de rot.
+### Si aplicamos rot13 sobre el texto anterior
+
+
+### Finalmente obtenemos la flag : jctf{4cbdcC0Dc=FEbd0J_F}
+### Ejecutando el script solve.py se obtiene la flag de manera automatica.
diff --git a/2025/MilaConPapasFritas/CTF3-Cripto Visor/solve.py b/2025/MilaConPapasFritas/CTF3-Cripto Visor/solve.py
new file mode 100644
index 0000000..9a241af
--- /dev/null
+++ b/2025/MilaConPapasFritas/CTF3-Cripto Visor/solve.py
@@ -0,0 +1,65 @@
+import codecs
+import re
+
+def rot47_decodificar(texto):
+ resultado = []
+ for char in texto:
+ codigo = ord(char)
+ if 33 <= codigo <= 126: # Rango de caracteres imprimibles
+ # Aplica ROT47 (desplazamiento de 47)
+ nuevo_codigo = 33 + ((codigo - 33 + 47) % 94)
+ resultado.append(chr(nuevo_codigo))
+ else:
+ resultado.append(char) # Mantiene caracteres especiales como saltos de línea
+ return ''.join(resultado)
+
+def rot13_decodificar(texto):
+ return codecs.decode(texto, 'rot_13')
+
+
+def extraer_flag(texto):
+ # Busca el patrón jctf{...} de la flag
+ patron = r'jctf\{[^}]*\}'
+ coincidencias = re.findall(patron, texto)
+
+ if coincidencias:
+ return coincidencias[0]
+
+ return None
+
+def decodificar_doble(archivo_entrada):
+
+ with open(archivo_entrada, 'r', encoding='utf-8') as f:
+ contenido = f.read()
+ # Aplica ROT47
+ rot47_resultado = []
+ for char in contenido:
+ codigo = ord(char)
+ if 33 <= codigo <= 126:
+ nuevo_codigo = 33 + ((codigo - 33 + 47) % 94)
+ rot47_resultado.append(chr(nuevo_codigo))
+ else:
+ rot47_resultado.append(char)
+
+ # Aplica ROT13 al resultado de ROT47
+ resultado_intermedio = ''.join(rot47_resultado)
+ final = codecs.decode(resultado_intermedio, 'rot_13')
+
+ return final
+
+if __name__ == "__main__":
+ archivo = "CryptoVisor.txt"
+ try:
+ texto_final = decodificar_doble(archivo)
+ flag = extraer_flag(texto_final)
+
+ if flag:
+ print(f" FLAG ENCONTRADA: {flag}")
+ else:
+ print("\n No se encontró flag con formato jctf{}")
+ print("\nTexto completo decodificado:")
+ print(texto_final)
+ except FileNotFoundError:
+ print(f"Error: No se encontró el archivo '{archivo}'")
+ except Exception as e:
+ print(f"Error durante la decodificación: {e}")
\ No newline at end of file
diff --git a/2025/MilaConPapasFritas/CTF4-X-Ray Vision/readme.md b/2025/MilaConPapasFritas/CTF4-X-Ray Vision/readme.md
new file mode 100644
index 0000000..c5de8be
--- /dev/null
+++ b/2025/MilaConPapasFritas/CTF4-X-Ray Vision/readme.md
@@ -0,0 +1,38 @@
+# X-Ray Vision
+## Categoría: Web
+
+### Tenemos el siguiente enunciado:
+
+
+En el enunciado nos da la pista que hay una credencial olvidada en alguna parte de la página web, y que no está en texto plano.
+
+La página web nos muestra:
+
+
+Lo único interactivo es el boton de “query api”, si hacemos click obtenemos:
+
+
+Nos aparece el mensaje: “status: unathorized missing token”. Con esta pista lo que hacemos es inspeccionar la pagina con burp suite y encontramos:
+
+
+
+Con esta nueva información, interceptamos la petición que se hace al hacer click en “query api”, y agregamos la cabecera “x-secret-token” con el valor que aparece en data-t.
+
+
+Al hacer forward, obtenemos ahora
+
+
+Si tomamos el valor del token anterior y probamos decodificarlo con rot13, obtenemos:
+
+
+
+Se obtiene : “d3v3l0p3r_t00l5”, esta no es la flag, asi que probamos interceptar de nuevo la peticion a /api , agregando de nuevo la cabecera de “x-secret-token” con el nuevo valor:
+
+
+
+Finalmente obtenemos:
+
+
+
+Flag: jctf{r0t_y0ur_w4y_t0_4cc3ss}
+
diff --git a/2025/MilaConPapasFritas/readme.md b/2025/MilaConPapasFritas/readme.md
new file mode 100644
index 0000000..b9a222c
--- /dev/null
+++ b/2025/MilaConPapasFritas/readme.md
@@ -0,0 +1,15 @@
+# TeamMilaConPapasFritas
+## Integrantes
+### Aguilar Jose 10428/4
+### Delgado Daniela 15005/5
+## Los writeups corresponden a los siguientes retos:
+
+### | KashiCTF’26 | [https://kashictf.iitbhucybersec.in/challenges](https://kashictf.iitbhucybersec.in/challenges) | Ancient Mistery | Criptography |
+### | UMassCTF 2026 | [https://ctf.umasscybersec.org](https://ctf.umasscybersec.org/challenges)/ | BrOWSER BOSS FIGHT | Web |
+### | Jersey CTF VI | [https://ctf.jerseyctf.com/](https://ctf.jerseyctf.com/) | Crypto Visor | Criptography |
+### | Jersey CTF VI | [https://ctf.jerseyctf.com/](https://ctf.jerseyctf.com/) | X-Ray Vision | Web |
+
+Los ctf se desarrollaron los siguientes días:
+
+* UMassCTF 2026 : 10PM UTC April 10 – 10PM UTC April 12, 2026
+* Jersey CTF VI : Sat, Apr 18th 2026, 1:00 PM (-03:00) \- Sun, Apr 19th 2026, 1:00 PM (-03:00) .