Libreria MACantos
  • Libreria M.A Cantos
  • Pentesting
    • PentestTools
    • WriteUps
      • TryHackMe
        • Chocolate Factory
        • Lian_Yu
        • Valley
      • DockerLabs
        • [Muy Fácil] Obssesive
        • [Fácil] Whoiam
        • [Facil] Los 40 ladrones
        • [Fácil] Buscalove
        • [Fácil] ChocolateLovers
        • [Fácil] ConsoleLog
        • [Fácil] Winterfell
      • stacksmashers
  • Datos-Relevantes
    • Ataques mas comunes
    • Direccion correo personalizado por 0,99€
  • Apuntes
    • 🎴Curso de Introducción a Linux
      • Comandos Básicos Linux
      • Análisis de patrones
      • Control del flujo stderr-stdout, operadores y procesos en segundo plano
      • Descriptores de archivo
      • Permisos
        • Permisos especiales – SUID y SGID
        • Privilegios especiales - Capabilities
      • Estructura de directorios del sistema
      • Uso de bashrc y zshrc
      • Uso y manejo de Tmux
      • Uso y manejo de Kitty
      • Búsquedas a nivel de sistema
      • Uso del editor Vim
      • OverTheWhile [Practicas]
        • Conexiones SSH [Bandit0]
        • Lectura de archivos especiales [Bandit1 - Bandit2]
        • Directorio y archivos ocultos [Bandit3]
        • Detección del tipo y formato de archivo [Bandit4]
        • FIND - Búsquedas precisas de archivos [Bandit5 - Bandit6]
        • Métodos de filtrado de datos [Bandit7 - Bandit8]
        • Interpretación de archivos binarios [Bandit9]
        • Codificación y decodificación en base64 [Bandit10]
        • Cifrado césar y uso de tr para la traducción de caracteres [Bandit11]
        • Creamos un descompresor recursivo automático de archivos en Bash [Bandit12]
        • Manejo de pares de claves y conexiones SSH [Bandit13]
        • Uso de netcat para realizar conexiones [Bandit14]
        • Uso de conexiones encriptadas [Bandit15]
        • Escaneo de puertos en Bash [Bandit16]
        • Detección de diferencias entre archivos [Bandit17]
        • Ejecución de comandos por SSH [Bandit18]
        • Abusando de privilegio SUID para migrar de usuario [Bandit 19]
        • Jugando con conexiones [Bandit20]
        • Abusando de tareas Cron [Bandit 21-22-23]
          • Abusando de tareas Cron [Bandit21]
          • Abusando de tareas Cron [Bandit22]
          • Abusando de tareas Cron [Bandit23]
        • Comprendiendo las expresiones de las tareas Cron
        • Fuerza bruta aplicada a conexiones [Bandit24]
        • Escapando del contexto de un comando [Bandit25-26]
        • Operando con proyectos de Github [Bandit 27-28-29-30-31]
          • Operando con proyectos de Github
          • Operando con proyectos de Github
          • Operando con proyectos de Github
          • Operando con proyectos de Github
          • Operando con proyectos de Github
        • Argumentos posicionales en Bash [Bandit 32]
      • Scripts Bash
    • 🛤️Curso de Introducción al Hacking
      • Reconocimiento
        • nmap
          • Técnicas de evasión de Firewalls (MTU, Data Length, Source Port, Decoy, etc.)
          • Descubrimiento de equipos en la red local (ARP e ICMP) y Tips
          • Uso de scripts y categorías en nmap para aplicar reconocimiento
          • Creación de tus propios scripts en Lua para nmap
          • Alternativas para la enumeración de puertos usando descriptores de archivo
        • Validación del objetivo (Fijando un target en HackerOne)
        • Descubrimiento de correos electrónicos
        • Reconocimiento de imagenes
        • Enumeración de subdominios
        • Credenciales y brechas de seguridad
        • Identificación de las tecnologías en una página web
        • Fuzzing y enumeración de archivos en un servidor web
          • Fuzzing y enumeración de archivos en un servidor web (1/2)
          • Fuzzing y enumeración de archivos en un servidor web (2/2)
        • Google Dorks / Google Hacking (Los 18 Dorks más usados)
        • Identificación y verificación externa de la versión del sistema operativo
      • Dockers
      • Enumeración de servicios comunes y gestores de contenido
        • CodeName con SSH
      • Enumeración y explotación
        • Burpsuite
      • OWASP TOP 10 y vulnerabilidades web
        • SQL Injection
        • Cross-Site Scripting (XSS)
          • CookieHyjack
          • KeyLogger
        • XML External Entity Injection (XXE)
        • Local File Incrusion (LFI)
        • Remote File Inclusion (RFI)
        • Log Poisoning (LFI -> RCE)
        • Cross-Site Request Forgery (CSRF)
        • Server-Side Request Forgery (SSRF)
        • Server-Side Template Injection (SSTI)
        • Client-Side Template Injection (CSTI)
        • Padding Oracle
      • Pivoting
    • 🔎OSINT
      • Dirección de correo
Powered by GitBook
On this page

Was this helpful?

  1. Apuntes
  2. Curso de Introducción al Hacking
  3. OWASP TOP 10 y vulnerabilidades web

Padding Oracle

PreviousClient-Side Template Injection (CSTI)NextPivoting

Last updated 5 months ago

Was this helpful?

Es un ataque donde se descifra una cookie en texto plano y una vez sabemos que pone encriptar una cookie que se pueda loguear con un usuario diferente.

Un ataque de oráculo de relleno (Padding Oracle Attack) es un tipo de ataque contra datos cifrados que permite al atacante descifrar el contenido de los datos sin conocer la clave.

Un oráculo hace referencia a una “indicación” que brinda a un atacante información sobre si la acción que ejecuta es correcta o no. Imagina que estás jugando a un juego de mesa o de cartas con un niño: la cara se le ilumina con una gran sonrisa cuando cree que está a punto de hacer un buen movimiento. Eso es un oráculo. En tu caso, como oponente, puedes usar este oráculo para planear tu próximo movimiento según corresponda.

El relleno es un término criptográfico específico. Algunos cifrados, que son los algoritmos que se usan para cifrar los datos, funcionan en bloques de datos en los que cada bloque tiene un tamaño fijo. Si los datos que deseas cifrar no tienen el tamaño adecuado para rellenar los bloques, los datos se rellenan automáticamente hasta que lo hacen. Muchas formas de relleno requieren que este siempre esté presente, incluso si la entrada original tenía el tamaño correcto. Esto permite que el relleno siempre se quite de manera segura tras el descifrado.

Al combinar ambos elementos, una implementación de software con un oráculo de relleno revela si los datos descifrados tienen un relleno válido. El oráculo podría ser algo tan sencillo como devolver un valor que dice “Relleno no válido”, o bien algo más complicado como tomar un tiempo considerablemente diferente para procesar un bloque válido en lugar de uno no válido.

Los cifrados basados en bloques tienen otra propiedad, denominada “modo“, que determina la relación de los datos del primer bloque con los datos del segundo bloque, y así sucesivamente. Uno de los modos más usados es CBC. CBC presenta un bloque aleatorio inicial, conocido como “vector de inicialización” (IV), y combina el bloque anterior con el resultado del cifrado estático a fin de que cifrar el mismo mensaje con la misma clave no siempre genere la misma salida cifrada.

Un atacante puede usar un oráculo de relleno, en combinación con la manera de estructurar los datos de CBC, para enviar mensajes ligeramente modificados al código que expone el oráculo y seguir enviando datos hasta que el oráculo indique que son correctos. Desde esta respuesta, el atacante puede descifrar el mensaje byte a byte.

Las redes informáticas modernas son de una calidad tan alta que un atacante puede detectar diferencias muy pequeñas (menos de 0,1 ms) en el tiempo de ejecución en sistemas remotos. Las aplicaciones que suponen que un descifrado correcto solo puede ocurrir cuando no se alteran los datos pueden resultar vulnerables a ataques desde herramientas que están diseñadas para observar diferencias en el descifrado correcto e incorrecto. Si bien esta diferencia de temporalización puede ser más significativa en algunos lenguajes o bibliotecas que en otros, ahora se cree que se trata de una amenaza práctica para todos los lenguajes y las bibliotecas cuando se tiene en cuenta la respuesta de la aplicación ante el error.

Este tipo de ataque se basa en la capacidad de cambiar los datos cifrados y probar el resultado con el oráculo. La única manera de mitigar completamente el ataque es detectar los cambios en los datos cifrados y rechazar que se hagan acciones en ellos. La manera estándar de hacerlo es crear una firma para los datos y validarla antes de realizar cualquier operación. La firma debe ser verificable y el atacante no debe poder crearla; de lo contrario, podría modificar los datos cifrados y calcular una firma nueva en función de esos datos cambiados.

Un tipo común de firma adecuada se conoce como “código de autenticación de mensajes hash con clave” (HMAC). Un HMAC difiere de una suma de comprobación en que requiere una clave secreta, que solo conoce la persona que genera el HMAC y la persona que la valida. Si no se tiene esta clave, no se puede generar un HMAC correcto. Cuando recibes los datos, puedes tomar los datos cifrados, calcular de manera independiente el HMAC con la clave secreta que compartes tanto tú como el emisor y, luego, comparar el HMAC que este envía respecto del que calculaste. Esta comparación debe ser de tiempo constante; de lo contrario, habrás agregado otro oráculo detectable, permitiendo así un tipo de ataque distinto.

En resumen, para usar de manera segura los cifrados de bloques de CBC rellenados, es necesario combinarlos con un HMAC (u otra comprobación de integridad de datos) que se valide mediante una comparación de tiempo constante antes de intentar descifrar los datos. Dado que todos los mensajes modificados tardan el mismo tiempo en generar una respuesta, el ataque se evita.

El ataque de oráculo de relleno puede parecer un poco complejo de entender, ya que implica un proceso de retroalimentación para adivinar el contenido cifrado y modificar el relleno. Sin embargo, existen herramientas como PadBuster que pueden automatizar gran parte del proceso.

PadBuster es una herramienta diseñada para automatizar el proceso de descifrado de mensajes cifrados en modo CBC que utilizan relleno PKCS #7. La herramienta permite a los atacantes enviar peticiones HTTP con rellenos maliciosos para determinar si el relleno es válido o no. De esta forma, los atacantes pueden adivinar el contenido cifrado y descifrar todo el mensaje.

🛤️
Proceso de descifrado de cookie desde el intruder de Burpsuite