========================================================
 GHOSTGRAM - laboratorio de practicas de Burp Suite
========================================================

Que es esto
-----------
GhostGram es una red social de fotos (ficticia) con 3 fallos de
seguridad metidos a proposito, para practicar con Burp Suite:

  1. IDOR                      -> GET  /api/posts/<id>/preview
  2. Web Cache Deception       -> GET  /u/<usuario>/<id>.jpg
  3. XSS almacenado + robo de sesion -> POST /api/posts/<id>/comments

Corre en tu propio equipo (localhost). No necesita internet una vez
instalada, no envia datos a ningun sitio y no debe exponerse fuera
de tu maquina (no tiene ninguna proteccion real).


Requisitos
----------
  - Windows, macOS o Linux
  - Python 3.10 o superior instalado y accesible desde la terminal
    (compruebalo con:  python --version   o   python3 --version)
  - Unos 60 MB libres en disco (para el entorno virtual y las fotos)
  - Ningun otro programa escuchando en el puerto 5001


Como desplegarlo
-----------------
1. Descomprime este ZIP en una carpeta de tu equipo.

2. Arranca el servidor:
     - Windows:      doble clic en "run.bat"
     - macOS/Linux:  abre una terminal en esta carpeta y ejecuta:
                        chmod +x run.sh
                        ./run.sh

   La primera vez tardara un poco: crea un entorno virtual Python
   (carpeta "venv") e instala Flask dentro de el. Las siguientes
   veces arranca en segundos. Tambien crea la base de datos
   "app/ghostgram.db" (SQLite) con datos de partida.

3. Cuando veas el mensaje "Arrancando GhostGram en
   http://127.0.0.1:5001", abre esa direccion en tu navegador
   (o en el navegador embebido de Burp) y crea una cuenta desde
   "Crear cuenta". Tu cuenta nueva sera publica y hara de
   "atacante" en los 3 retos.

4. Deja la ventana de la terminal abierta mientras uses la app.
   Para detenerla, pulsa Ctrl+C en esa misma ventana.


Cuentas de partida (ya sembradas)
----------------------------------
Para los retos 2 y 3 necesitas abrir una SEGUNDA sesion (una ventana
de incognito, o un segundo navegador) e iniciar sesion como una de
estas cuentas privadas para jugar el papel de "victima". No es un
secreto que haya que adivinar, se entrega a proposito:

  Cuentas PRIVADAS (protagonistas de los 3 retos):
    laura_gomez  / girasol24
    sofia_ruiz   / sofia2024
    carlos_ruiz  / carlos2024

  Cuentas PUBLICAS (solo sirven de "ruido" en el feed):
    alvaro_diaz    / alvaro2024
    pablo_navarro  / pablo2024
    diego_romero   / diego2024


Si algo falla
--------------
run.bat / run.sh estan pensados para NO fallar en silencio: si falta
Python, si no se puede crear el entorno virtual, si falla la
instalacion de Flask o si el propio servidor se cae, veras un
mensaje [ERROR] explicando que ha pasado y la ventana se quedara
abierta (con una pausa) para que puedas leerlo con calma en vez de
cerrarse sola.

Los casos mas frecuentes:
  - "No se ha encontrado python en el PATH"
      -> Instala Python desde https://www.python.org/downloads/
         y marca la casilla "Add python.exe to PATH" (Windows).
  - Fallo al arrancar el servidor / puerto ocupado
      -> Cierra cualquier otra cosa que use el puerto 5001, o edita
         PORT en app/app.py, o arranca con:
           Windows:      set PORT=5051 && run.bat
           macOS/Linux:  PORT=5051 ./run.sh


Reiniciar el laboratorio entre intentos
----------------------------------------
Este laboratorio comparte una unica base de datos SQLite para todos
los retos, ademas de una cache en memoria para el reto 2. Para
volver a dejarlo todo en su estado inicial (usuarios, posts,
comentarios, mensajes, sesiones robadas y la cache) sin reiniciar el
servidor, visita:

    http://127.0.0.1:5001/reset

Esto reconstruye la base de datos desde cero, vacia la cache falsa y
cierra tu sesion.


Estructura del paquete
-----------------------
  app/              codigo de la aplicacion (backend Flask + paginas)
                     incluye app/static/media/ (fotos de perfil y
                     posts, son parte funcional de la app, no solo
                     decoracion) y app/ghostgram.db se genera sola
                     al primer arranque
  requirements.txt  dependencias Python (solo Flask)
  run.bat / run.sh  arranque con comprobaciones de errores
  LEEME.txt         este archivo

El writeup con la solucion guiada de los 3 retos (con capturas de
Burp) se entrega aparte, no dentro de este ZIP.
