💻
My Personal Hacking Path
  • 👓Wellcome
    • My Personal Hacking Path
      • Whoami
  • 📚Mi Metodología de Pentesting
    • Tipos de evaluaciones
      • El día a día en pentesting
    • Metodología Propia
      • OWASP
      • OSSTMM
      • PTES
      • CEH Hacking Metodology (CHM)
      • Cyber Kill Chain
      • MITRE Att&ck
    • Fase 0 - Pre Evalaución
    • Fase 1 - Reconocimiento
      • Web / Host
      • SubDominios
      • Descubrimiento de correos electrónicos
      • Escaneo de Puertos
      • Credenciales y brechas de seguridad
      • ¿Sin Ideas?
    • Fase 2 - Explotación
      • Shells
        • Diferencia entre una WebShell y Reverse Shell
      • Payload
      • Network Penetration Services
        • 20|21 - FTP
        • 22 - SSH
        • 139|445- SMB
        • 80|443 - HTTP/HTTPS
    • Fase 3 - Post Explotación
      • Enumeración
      • Linux
        • Enumeración
        • Privilege Escalation
      • Windows
        • Revershell
        • Windows Enum
        • Privilege Escalation
    • Fase 4 - Reporting
      • CVSS
        • v4.0
      • Toma de notas
  • 👾Malware
    • Malware DevOps
    • Arquitectura de Windows
      • Windows API
      • Procesos de Windows
      • Estructuras no documentadas
    • PE
      • DLL
    • Almacenamiento del Payload
      • .data & .rdata
      • .text
      • .rsrc
    • Cifrado de Payload
      • XOR
      • RC4
      • AES
    • Ofuscación de Payload
      • IPv4/IPv6Fuscation
      • MACFucscation
      • UUIDFuscation
    • Process Injectión
      • DLL Injection
      • Shellcode Injection
      • APC Injection
  • 🌐Web-Pentesting
    • Metodología para Pentesting Web
    • Footprinting
      • Identificación Tecnologías web
        • WordPress
        • Joomla
        • Drupal
        • Magento
      • Fuzzing
      • Validación de los certificados
    • Vulnerabilidades comunes
      • File Upload
      • SQL Injection
      • Cross-site scripting
      • XXE Injection
      • LFI - Local File Inclusion
        • Log Poisoning
      • RFI - Remote File Inclusión
      • CSRF - Cross-Site Request Forgery
      • SSRF - Server-Side Request Forgery
      • SSTI - Server-Side Template Injection
      • CSTI - Client-Side Template Injection
      • Padding Oracle Attack
      • NoSQL Injection
      • LDAP Injection
    • Laboratorios
  • ☁️AWS Pentesting
    • Introducción a Amazon Web Services AWS
    • Acceso Inicial
    • IAM
      • Políticas de IAM
      • Enumeraciones
      • Privesc-Paths
        • Permisos de IAM
        • Permisos sobre políticas
        • AssumeRolePolicy Update
        • IAM:PassRole*
          • PassExistingRoleToCloudFormation
    • S3
      • Enumeración
      • S3_public
      • OSINT
    • Lambda
      • Enum Lambda
      • Enum API Gateway
      • Privesc-Paths
        • RCE sobre Lambda
        • PassExistingRoleToNewLambdaThenInvoke
        • PassRoleToNewLambdaThenTrigger
        • EditExistingLambdaFunctionWithRole
    • EC2
      • Enumeración
      • Privesc-Paths
        • EC2_SSRF
        • CreateEC2WhithExistingIP
        • PassExistingRoleToNewGlueDevEndpoint
        • ECS_takeover
    • VPC
      • Enumeración
      • PivotingInTheCloud
    • Bases de Datos
      • RDS
        • Enumeración
      • DynamoDB
        • Enumeración
    • ECS
      • Enum ECR
      • Enum ECS
      • Enum EKS
    • AWS Secrets Manager
      • Enumeración
    • Análisis de vulnerabilidades Automatizado
    • Blue Team AWS
      • CloudTrail
      • CloudWatch
      • GuardDuty
      • AWS Inspector
      • AWS Shield
      • Web Application Firewall
    • Notas
      • Terraform
  • 🔫Red_Team
    • Introducción a Red Team
      • Assume breach
    • ¿Qué es MITRE ATT&CK?
      • Guia de uso de Invoke-AtomicRedTeam
    • C2 Comando y control
      • Sliver C2
        • Instalación
        • Beacons y Sesiones
        • Perfiles
        • mTLS y WiewGuard
        • HTTP / HTTPS
        • DNS
        • Stagers: Basics
        • Stagers: Proccess Injection
        • Basics de Implates
        • Ejecución de Assembly
        • Sideload
        • SpawnDLL
        • Sliver Extensions
  • 💾Active Directory
    • Teoria
      • Componentes Físicos
      • Componentes Lógicos
      • GPO VS ACL
      • Kerberos
        • Funcionamiento de Kerberos
      • Usuarios por defecto
    • Enumeraciones
      • ¿Por qué enumerar?
      • Enumeración manual
      • Enumeración con PowerView
    • Ataques en AD
      • Mimikats
        • Comandos
      • Password Spraying
      • LLMNR Poisoning
      • Relay Attacks
        • NTLM
      • Kerberoasting
    • Tools
      • AuxRecon
      • Powershell
      • PowerView.ps1
      • ADPeas
      • Mimikatz
        • Comandos
    • AD Lab
  • 🌩️Azure Coud Pentesting
    • Introducción a Azure y Office 365
    • Introducción a Microsoft Indentity Services
    • Enumeración
    • Azure Files
      • Encontrar Fuga de Datos
    • Microsoft Graph
    • Notas
  • 📱Mobile Pentesting
    • Análisis de Aplicaciones Móviles en MobSF
    • ¿Cómo interceptar tráfico de una aplicación Flutter Android con Burp?
  • 📶Wireless
    • Terminología
    • Tipos de Wireless Networks
    • Formas de Autenticación
    • Cifrados
      • WEP
      • WPA
      • WPA2
      • WPA3
    • Ataques
  • 😎Extras
    • Docker
      • Port Forward y volúmenes
      • Docker Compose
      • Container Breakouts
    • Comandos Utiles
    • Fliper Zero
    • Páginas útiles
  • Kali Set Up
Con tecnología de GitBook
En esta página
  1. Web-Pentesting
  2. Vulnerabilidades comunes

Padding Oracle Attack

AnteriorCSTI - Client-Side Template InjectionSiguienteNoSQL Injection

Última actualización hace 1 año

¿Qué es?

Un ataque de 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.

Laboratorio

Pentester Lab – Padding Oracle:

🌐
https://www.vulnhub.com/?q=padding+oracle
Cifrado CBC
Padding o relleno
Descifrado