😎
WEB
YouTubeTwitterLinkedIn
  • La Biblia del Hacking en Web
    • ADVERTENCIA
    • Conoce a tu academia
    • Conoce a tu instructor
    • Aprende Hacking Web con los laboratorios de PortSwigger
  • SQL Injection
    • ¿SQL Injection?
    • Lab 1: SQL injection vulnerability in WHERE clause allowing retrieval of hidden data
    • Lab 2: SQL injection vulnerability allowing login bypass
    • Lab 3: SQL injection attack, querying the database type and version on Oracle
    • Lab 4: SQL injection attack, querying the database type and version on MySQL and Microsoft
    • Lab 5: SQL injection attack, listing the database contents on non-Oracle databases
    • Lab 6: SQL injection attack, listing the database contents on Oracle
  • Cross Site Scripting
    • ¿XSS?
    • Lab 1: Reflected XSS into HTML context with nothing encoded
    • Lab 2: Stored XSS into HTML context with nothing encoded
    • Lab 3: DOM XSS in document.write sink using source location.search
    • Lab 4: DOM XSS in innerHTML sink using source location.search
    • Lab 5: DOM XSS in jQuery anchor href attribute sink using location.search source
  • ClickJacking
    • ¿Clickjacking?
    • Lab 1: Basic clickjacking with CSRF token protection
  • Access control vulnerabilities
    • ¿Control de Acceso?
    • Lab 1: Unprotected admin functionality
    • Lab 3: User role controlled by request parameter
  • Path traversal
    • ¿Path Traversal?
    • Lab 1: File path traversal, simple case
    • Lab 2: File path traversal, traversal sequences blocked with absolute path bypass
    • Lab 3: File path traversal, traversal sequences stripped non-recursively
  • XML external entity (XXE) injection
    • ¿XML external entity?
    • Lab 1: Exploiting XXE using external entities to retrieve files
    • Lab 2: Exploiting XXE to perform SSRF attacks
    • Lab 3: Blind XXE with out-of-band interaction
  • JWT
    • ¿JWT?
    • Lab 1: JWT authentication bypass via unverified signature
    • Lab 2: JWT authentication bypass via flawed signature verification
    • Lab 3: JWT authentication bypass via weak signing key
    • Lab 4: JWT authentication bypass via jwk header injection
    • Lab 5: JWT authentication bypass via jku header injection
  • Server-side request forgery (SSRF)
    • ¿SSRF?
    • Lab 1: Basic SSRF against the local server
  • OS command injection
    • ¿OS Command Injection?
    • Lab 1: OS command injection, simple case
  • Authentication
    • ¿Authentication?
    • Lab 1: Username enumeration via different responses
  • HTTP request smuggling
    • ¿HTTP request smuggling?
    • Lab 1: HTTP request smuggling, confirming a CL.TE vulnerability via differential responses
  • Server-side template injection
    • ¿Server-side template injection?
    • Lab 1: Basic server-side template injection
  • DOM-based vulnerabilities
    • Lab 1: DOM XSS using web messages
    • Lab 2: DOM XSS using web messages and a JavaScript URL
  • WebSockets
    • Lab #1: Manipulating WebSocket messages to exploit vulnerabilities
  • Prototype pollution
    • ¿Prototype Pollution?
    • Lab 1: Client-side prototype pollution via browser APIs
      • Utilizando DOM Invader
    • Lab 2: DOM XSS via client-side prototype pollution
    • Lab 3: DOM XSS via an alternative prototype pollution vector
      • Utilizando DOM Invader
    • Lab 4: Client-side prototype pollution via flawed sanitization
    • Lab 5: Client-side prototype pollution in third-party libraries
    • Lab 6: Privilege escalation via server-side prototype pollution
    • Lab 7: Detecting server-side prototype pollution without polluted property reflection
    • Lab 8: Bypassing flawed input filters for server-side prototype pollution
    • Lab 9: Remote code execution via server-side prototype pollution
    • Lab 10: Exfiltrating sensitive data via server-side prototype pollution
  • GraphQL
    • Lab 1: Accessing private GraphQL posts
  • Web cache poisoning
    • Lab 1: Web cache poisoning with an unkeyed header
  • CORS
    • Lab #2 - CORS vulnerability with trusted null origin
    • Lab 3: CORS vulnerability with trusted insecure protocols
  • API testing
    • Lab #1: Exploiting an API endpoint using documentation
    • Lab #2: Exploiting server-side parameter pollution in a query string
    • Lab #3: Finding and exploiting an unused API endpoint
    • Lab #4: Exploiting a mass assignment vulnerability
    • Lab #5: Exploiting server-side parameter pollution in a REST URL
Con tecnología de GitBook
En esta página
  • ¿Qué son los JWTs?
  • Formato de un JWT
  • Ejemplo de un JWT
  • JWT vs JWS vs JWE
  • Diferencias Clave
  • Conclusión

¿Te fue útil?

  1. JWT

¿JWT?

¿Qué son los JWTs?

JSON Web Tokens (JWT) son un estándar abierto (RFC 7519) que define una manera compacta y autocontenida de transmitir información de forma segura entre partes como un objeto JSON. Esta información puede ser verificada y confiable porque está firmada digitalmente. Los JWT se utilizan comúnmente para autenticación y autorización en aplicaciones web.

Formato de un JWT

Un JWT consta de tres partes separadas por puntos (.): el encabezado (header), el payload y la firma (signature). Cada una de estas partes es una cadena codificada en Base64Url.

  1. Encabezado (Header): El encabezado típicamente consta de dos partes: el tipo de token, que es JWT, y el algoritmo de firma que se utiliza, como HMAC SHA256 o RSA.

    {
      "alg": "HS256",
      "typ": "JWT"
    }

    Este JSON se codifica en Base64Url para formar la primera parte del JWT.

  2. Payload: El payload contiene las declaraciones (claims). Las claims son declaraciones sobre una entidad (generalmente, el usuario) y datos adicionales. Hay tres tipos de claims:

    • Registered claims: Claims predefinidos que no son obligatorios pero son recomendados, como iss (emisor), exp (expiración), sub (sujeto), aud (audiencia).

    • Public claims: Claims personalizados que se utilizan para compartir información entre partes que se han acordado utilizar estas claims y sus significados.

    • Private claims: Claims personalizados creados para compartir información entre partes que han acordado utilizar estos claims.

    {
      "sub": "1234567890",
      "name": "John Doe",
      "admin": true
    }

    Este JSON se codifica en Base64Url para formar la segunda parte del JWT.

  3. Firma (Signature): Para crear la firma, se toma el encabezado codificado, el payload codificado, una clave secreta y el algoritmo especificado en el encabezado, y se firma. Por ejemplo, si se utiliza HMAC SHA256, la firma se crea de la siguiente manera:

    HMACSHA256(
      base64UrlEncode(header) + "." + base64UrlEncode(payload),
      secret
    )

    La firma se utiliza para verificar que el mensaje no haya sido alterado y, en el caso de tokens firmados con un par de claves públicas/privadas, también se puede verificar el emisor del JWT.

Ejemplo de un JWT

Un JWT típico puede verse así:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

JWT vs JWS vs JWE

  • JWT (JSON Web Token): Es un estándar que define una manera compacta y autocontenida de transmitir información de forma segura entre partes como un objeto JSON. Puede estar firmado (JWS) o cifrado (JWE).

  • JWS (JSON Web Signature): Es un objeto JSON que está firmado digitalmente utilizando un algoritmo de firma especificado. Cuando un JWT está firmado, se llama JWS. Este asegura la integridad de los datos y la autenticidad del emisor.

  • JWE (JSON Web Encryption): Es un objeto JSON que está cifrado. JWE protege la confidencialidad del contenido al cifrar el JWT. Esto asegura que solo las partes autorizadas puedan leer el contenido del token.

Diferencias Clave

  • JWT: Es un término general que puede referirse a un JWS o un JWE. La especificación del JWT abarca ambos tipos de tokens, aquellos que están firmados (JWS) y aquellos que están cifrados (JWE).

  • JWS: Se centra en la firma y la verificación de la integridad y la autenticidad del token. La información dentro del token es legible por cualquier persona que posea el token, pero puede ser verificada para asegurar que no ha sido alterada.

  • JWE: Se centra en la confidencialidad de los datos dentro del token. La información es cifrada y solo puede ser leída por las partes autorizadas que posean la clave de descifrado.

Conclusión

Los JWTs son una herramienta poderosa y flexible para la autenticación y autorización en aplicaciones modernas, permitiendo la transmisión segura de información entre partes. Entender la diferencia entre JWT, JWS y JWE es crucial para implementar sistemas de autenticación y autorización robustos y seguros. Mientras que JWS proporciona integridad y autenticidad, JWE añade una capa adicional de confidencialidad al cifrar los datos transmitidos.

AnteriorLab 3: Blind XXE with out-of-band interactionSiguienteLab 1: JWT authentication bypass via unverified signature

Última actualización hace 11 meses

¿Te fue útil?