El Auge de las APIs
Las Application Programming Interfaces, o APIs para acortar, se han vuelto extremadamente populares. Una de las razones clave para este "boom" es la habilidad de crear una API que pueda servir varias interfaces diferentes , como una aplicación web y de móvil al mismo tiempo, lo que permite reutilizar la lógica del servidor y centralizarla.
Sin embargo, los nuevos métodos de manejo de sesión también se crearon con el auge de las APIs. Debido a que las cookies están asociadas con las aplicaciones usadas en navegadores (web), estas no suelen funcionar bien para otras interfaces. Aquí es donde el manejo de sesiones basada en tokens entra en juego.
Manejo de Sesiones basada en Tokens
El manejo de sesiones basada en tokens es un concepto relativamente nuevo. En lugar de usar las cookies automáticas generadas por el navegador, confía en el código del lado del cliente para este proceso. Después de la autentificación la aplicación ofrece un token en el body de la petición. Usando JavaScript del lado del cliente, este token se guarda en el almacenamiento local del navegador.
Cuando se hace una nueva petición, el código JavaScript debe cargar el token del almacenamiento en la cabecera. Uno de los tokens más comunes es JSON Web Tokens (JWT), que se pasan mediante el header Authorization: Bearer.
Proyecto API
Durante esta unidad realizaremos explotación contra varias APIs. Las APIs pueden ser documentadas usando diversos métodos. Un método popular es crear un proyecto Postman o un archivo Swagger. La API fue desarrollada en Python Flask, por lo que los ejemplos de código estarán en Python.
Endpoints API
El proyecto API tiene un sólo endpoint, llamado <IP>/api/v1.0/exampleX. donde X es sustituida por el número del ejemplo. Este endpoint accede a dos métodos HTTP:
- POST: Para autentificar y recibir tu JWT, necesitas hacer una petición POST con las credenciales en formato JSON.
- GET: Para conseguir los detalles sobre tu usuario y realizar la escalada de privilegios para conseguir la flag.
Credenciales API
Para autentificar la API, necesitas mandar un body JSON con credenciales:
- Username: user
- Password: passwordX
La X necesita ser reemplazada con el número del ejemplo.
Ejemplos de Peticiones
Aquí debajo tienes ejemplos de peticiones cURL que puedes realizar a la API.
Para autentificarte puedes mandar:
curl -H 'Content-Type: application/json' -X POST -d '{ "username" : "user", "password" : "passwordX" }' http://10.80.190.89/api/v1.0/exampleX
Para la verificación del usuario puedes mandar:
curl -H 'Authorization: Bearer [JWT token]' http://10.80.190.89/api/v1.0/example2?username=Y
El componente [JWT token] debe ser reemplazado por el JWT recibido de la primera petición. En este caso Y puede ser user o admin.
Permisos API
El objetivo principal en cada ejemplo es ganar privilegios de administrador y verificar dichos permisos. Una vez que tengas un JWT válido donde admin=1, puedes hacer una petición para ver los detalles del usuario admin, consiguiendo así la flag.
