
🔓 Инструмент командной строки и библиотека для простого выполнения атак на оракул набивки (padding oracle), с поддержкой параллельных сетевых запросов и элегантным интерфейсом.
Инструмент командной строки и библиотека для простого выполнения атак на оракул дополнения (padding oracle attacks) с поддержкой параллельных сетевых запросов и элегантным интерфейсом.
Убедитесь, что установлен Node.js, затем выполните
$ npm install --global padding-oracle-attacker
или
$ yarn global add padding-oracle-attacker
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 Находит открытый текст (foobar) для заданного шифротекста (hex:0123abcd)
encrypt Находит шифротекст (hex:abcd1234) для заданного открытого текста (foo=bar)
analyze Помогает определить, уязвим ли URL, и чем отличается ответ при ошибке дешифрования
(для аргумента <error>)
Arguments
<url> URL для атаки. Полезная нагрузка по умолчанию добавляется в конец. Чтобы указать
пользовательскую точку внедрения, включите {POPAYLOAD} в заголовок (-H),
тело запроса (-d) или URL
<block_size> Размер блока, используемый алгоритмом шифрования на сервере
<error> Строка, присутствующая в ответе, если на сервере не удалось выполнить дешифрование.
Укажите строку из тела HTTP-ответа (например, PaddingException)
или код состояния HTTP-ответа (например, 400)
Options
-c, --concurrency Количество одновременно отправляемых запросов [по умолчанию: 128]
--disable-cache Отключить сетевой кеш. Сохраняется в файле [по умолчанию: false]
poattack-cache.json.gz.txt
-X, --method HTTP-метод, используемый при выполнении запроса [по умолчанию: GET]
-H, --header Заголовки, отправляемые с запросом.
-H 'Cookie: cookie1' -H 'User-Agent: Googlebot/2.1'
-d, --data Тело запроса
Строка JSON: {"id": 101, "foo": "bar"}
URL-кодировка: id=101&foo=bar
Убедитесь, что указали заголовок Content-Type.
-e, --payload-encoding Кодировка полезной нагрузки шифротекста для {POPAYLOAD} [по умолчанию: hex]
base64 FooBar+/=
base64-urlsafe FooBar-_
hex deadbeef
hex-uppercase DEADBEEF
base64(xyz) Пользовательская base64 ('xyz' обозначает символы для '+/=')
--dont-urlencode-payload Не URL-кодировать {POPAYLOAD} [по умолчанию: false]
--start-from-1st-block Начать обработку с первого блока вместо последнего [по умолчанию: false]
(работает только в режиме decrypt)
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
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): Promiseencrypt(options: Object): Promiseurl: stringURL для атаки. Полезная нагрузка по умолчанию добавляется в конец. Чтобы указать пользовательскую точку внедрения, включите {POPAYLOAD} в URL, заголовок (requestOptions.headers) или тело запроса (requestOptions.data)
blockSize: numberРазмер блока, используемый алгоритмом шифрования на сервере.
isDecryptionSuccess: ({ statusCode, headers, body }) => booleanФункция, которая возвращает true, если ответ сервера указывает на успешное дешифрование.
ciphertext: Buffer (только для decrypt)Шифротекст для дешифрования.
plaintext: Buffer (только для encrypt)Открытый текст для шифрования. Дополнение будет добавлено автоматически. Пример: Buffer.from('foo bar', 'utf8')
concurrency: number = 128Количество одновременно отправляемых сетевых запросов.
isCacheEnabled: boolean = trueОтветы кешируются по умолчанию и сохраняются в файл poattack-cache.json.gz.txt. Установите false, чтобы отключить кеширование.
requestOptions: { method, headers, data }requestOptions.method: stringHTTP-метод, используемый при выполнении запроса. По умолчанию GET. Допустимые значения: POST, PUT, DELETE и т. д.
requestOptions.headers: { string: string }Заголовки, отправляемые с запросом. Пример: { 'Content-Type': 'application/x-www-form-urlencoded' }
requestOptions.body: stringТело запроса. Может быть строкой JSON, URL-кодированными параметрами и т. д. Заголовок Content-Type нужно устанавливать вручную.
logMode: 'full'|'minimal'|'none' = 'full'full: Вывод в консоль всех данных (по умолчанию)
minimal: Вывод в консоль только после начала и завершения
none: Ничего не выводить в консоль
transformPayload: (ciphertext: Buffer) => stringФункция для преобразования ciphertext в строку при выполнении запроса. По умолчанию ciphertext кодируется в hex и вставляется в точку внедрения (конец URL, если не указан {POPAYLOAD}).
decrypt)alreadyFound: BufferУже известные найденные байты открытого текста, которые можно пропустить (начиная с конца). Если вы укажете Buffer длиной десять байт, последние десять байтов будут пропущены.
initFirstPayloadBlockWithOrigBytes: boolean = falseИнициализировать первый блок полезной нагрузки байтами исходного ciphertext вместо нулей.
Пример: abcdef12345678ff 1111111111111111 вместо 00000000000000ff 1111111111111111
startFromFirstBlock: boolean = falseНачать обработку с первого блока вместо последнего.
makeInitialRequest: boolean = trueВыполнить начальный запрос с исходным ciphertext и вывести ответ сервера в консоль, чтобы пользователь убедился, что сетевые запросы отправляются корректно.
encrypt)makeFinalRequest: boolean = trueПосле нахождения байтов ciphertext для нового plaintext выполнить финальный запрос с найденными байтами и вывести ответ сервера в консоль.
lastCiphertextBlock: BufferПользовательский шифротекст для последнего блока. По умолчанию последний блок состоит из нулей (000000000000000).
padding-oracle-attacker написан на TypeScript. Если вы хотите изменить исходные файлы и запустить их, вы можете сначала скомпилировать файлы в JS и запустить их с помощью node, или использовать ts-node.
Пример: yarn build затем node dist/cli ... или просто ts-node src/cli ...
yarn build или npm run buildКомпилирует файлы TypeScript из каталога src в файлы JS и помещает их в каталог dist.
yarn clean или npm run cleanУдаляет каталог dist.
yarn lint или npm run lintПроверяет файлы с помощью eslint.
yarn test или npm run testПроверяет и запускает тесты с помощью ava.
node test/helpers/vulnerable-server.jsЗапускает тестовый сервер, уязвимый для атак на оракул дополнения, по адресу http://localhost:2020
MIT © Kishan Bagaria