
🔓 パディングオラクル攻撃を簡単に実行するためのCLIツールおよびライブラリ。同時ネットワークリクエストのサポートとエレガントなUIを備えています。
CLIツールとライブラリで、パディングオラクル攻撃を簡単に実行できます。同時ネットワークリクエストをサポートし、洗練されたUIを備えています。
Node.jsがインストールされていることを確認し、次に以下のコマンドを実行してください。
$ npm install --global padding-oracle-attacker
または
$ yarn global add padding-oracle-attacker
使い方
$ 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]
コマンド
decrypt 指定された暗号文(hex:0123abcd)に対応する平文(foobar)を探します
encrypt 指定された平文(foo=bar)に対応する暗号文(hex:abcd1234)を探します
analyze URLが脆弱かどうか、また復号エラー発生時にレスポンスがどのように異なるかを調べるのに役立ちます
(<error>引数用)
引数
<url> 攻撃対象のURL。デフォルトではペイロードが末尾に挿入されます。
カスタム注入ポイントを指定するには、ヘッダー(-H)、リクエストボディ(-d)、またはURLに {POPAYLOAD} を含めてください。
<block_size> サーバー上の暗号化アルゴリズムで使用されるブロックサイズ
<error> サーバーで復号に失敗した場合のレスポンスに含まれる文字列。
HTTPレスポンスボディに含まれる文字列(PaddingExceptionなど)、またはHTTPレスポンスのステータスコード(400など)を指定します。
オプション
-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 {POPAYLOAD} をURLエンコードしない [デフォルト: false]
--start-from-1st-block 最後のブロックではなく最初のブロックから処理を開始 [デフォルト: false]
(decryptモードでのみ機能)
例
$ 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=
エイリアス
poattack
padding-oracle-attack
const { decrypt, encrypt } = require('padding-oracle-attacker')
// または
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: string攻撃対象のURL。デフォルトではペイロードが末尾に追加されます。カスタム注入ポイントを指定するには、URL、ヘッダー(requestOptions.headers)、またはリクエストボディ(requestOptions.data)に {POPAYLOAD} を含めてください。
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: stringリクエストに使用するHTTPメソッド。デフォルトは 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 が16進数でエンコードされ、注入ポイント({POPAYLOAD} がない場合はURL末尾)に挿入されます。
decrypt のみ)alreadyFound: Bufferすでにわかっている(見つかった)平文バイトで、末尾からスキップできます。10バイトの Buffer を指定すると、最後の10バイトがスキップされます。
initFirstPayloadBlockWithOrigBytes: boolean = false最初のペイロードブロックをゼロではなく元の ciphertext バイトで初期化します。
例: abcdef12345678ff 1111111111111111 の代わりに 00000000000000ff 1111111111111111
startFromFirstBlock: boolean = false最後のブロックではなく最初のブロックから処理を開始します。
makeInitialRequest: boolean = true指定された元の ciphertext で最初のリクエストを行い、サーバーのレスポンスをコンソールに記録して、ネットワークリクエストが正しく送信されていることを確認できるようにします。
encrypt のみ)makeFinalRequest: boolean = true新しい plaintext 用の ciphertext バイトを見つけた後、見つかったバイトで最終リクエストを行い、サーバーのレスポンスをコンソールに記録します。
lastCiphertextBlock: Buffer最後のブロック用のカスタム暗号文。デフォルトでは最後のブロックはゼロ(000000000000000)です。
padding-oracle-attacker はTypeScriptで書かれています。ソースファイルを変更して実行したい場合は、まずファイルをJSにコンパイルしてからnodeで実行するか、ts-nodeを使用してください。
例: yarn build を実行してから node dist/cli ... または ts-node src/cli ... を実行します。
yarn build または npm run buildsrc ディレクトリ内のTypeScriptファイルをJSファイルにビルドし、dist ディレクトリに出力します。
yarn clean または npm run cleandist ディレクトリを削除します。
yarn lint または npm run linteslintを使用してファイルをリントします。
yarn test または npm run testリントを実行し、avaを使用してテストを実行します。
node test/helpers/vulnerable-server.jshttp://localhost:2020 でパディングオラクル攻撃に対して脆弱なテストサーバーを実行します。
MIT © Kishan Bagaria