Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
crapsecrets — A library for detecting known secrets across many web frameworks | Kitploit
ツール/GitHubGitHub/irsdl/crapsecrets
脆弱性スキャナーウェブセキュリティ暗号化ペネトレーションテストシークレット検出
GitHubirsdl/crapsecrets

crapsecrets

A library for detecting known secrets across many web frameworks

リポジトリを見る
22138ヶ月前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

元々は badsecrets 0.7.0 からフォーク

2025年3月まで随時同期済み!

> 一部のモジュールとテストケースが古く、最新ではない!

> ASP.NET の侵害された Machine Key のテストに最適!

これは Crap(Bad)Secrets です```

mkdir -p ~/ctools/ cd ~/ctools/ git clone https://github.com/irsdl/crapsecrets/ cd ~/ctools/crapsecrets pip3 install -r requirements.txt export PYTHONPATH=$(pwd):$PYTHONPATH python3 ./crapsecrets/examples/cli.py -u http://update.microsoft.com/ -r python3 ./crapsecrets/examples/cli.py -u http://update.microsoft.com/ -mrd 5 python3 ./crapsecrets/examples/cli.py -mrd 5 -avsk -fvsp -u http://update.microsoft.com/ python3 ./crapsecrets/examples/cli.py -mrd 5 -avsk -fvsp -mkf ./local/aspnet_machinekeys_local.txt -u http://192.168.6.22:8080/ python3 ./crapsecrets/examples/cli.py -mrd 5 -avsk -fvsp -mkf ./local/aspnet_machinekeys_local.txt -mkf ./crapsecrets/resources/aspnet_machinekeys.txt -u http://192.168.6.22:8080/a1/b/c1/

root@kitploit:~
## Viewstate に関するヒント
- `-mrd 5` を指定してコマンドを実行すると、長いリダイレクト応答の解析が可能になります。
- `--allviewstatekeys` または `-avsk` を使用すると、検証キーと暗号化キーとしてすべてのキーの組み合わせを試行できます。
- URL に .aspx が含まれていない場合、`--findviewstatepage` または `-fvsp` を使用して一連のデフォルトページを試行できます。

## 一般的な変更点:
- requests の代わりに httpx を使用します(主に AI による変更で、テストは最小限のため、誤りがある可能性があります)。
- リダイレクトに深度を追加します(`--max-redirect-depth` 引数で手動リダイレクトを指定)。
- 追加のヘッダーをサポートします。
- リクエストのタイムアウトは `--timeout` または `-t` 引数で設定できます。

## Viewstate の変更点:
- いくつかの論理的な変更が含まれます。
- 暗号化された .NET 4.0 viewstate の検証キーに AES と 3DES を使用できる可能性を示します。
- パスから cookieless 値を削除します。
- .aspx 以降のパラメータを削除します。
- 複数のスラッシュとバックスラッシュ文字を削除します。
- サブディレクトリ内のアプリケーション名を使用するように .NET4.5 のロジックを改善します。
- 「MAC が有効になっていない」ことを検出します。
- 応答がある場合の長いリダイレクトを処理します(これは -r を使用してリダイレクトを追跡しない場合です)。
- 別の ASPX ページへのリダイレクトを処理します(これは -r を使用してリダイレクトを追跡する場合です)。
- リダイレクトの代わりに Server.Transfer が使用されている場合を処理します(ジェネレーターがターゲットと異なります)。
- MaxPageStateFieldLength が使用され、__VIEWSTATEFIELDCOUNT がある場合を検出します。
- 応答内の asp.net_sessionid および __antixsrftoken クッキーのチェックに加えて、いくつかの定義済み ViewStateUserKey をサポートします。
- ASPNET4.5 の 3DES の復号化キーを適切に検出します。
- aspnet_machinekeys.txt 内のすべての文字列を検証キーとして 1 回、復号化キーとして 1 回チェックするオプションを追加します。`--allviewstatekeys` フラグを使用すると、ツールはすべての潜在的な暗号化キーを見つけようとし、ランダムな順序でそれぞれを試行してデータを復号化します。非常に多くのキーがテストされるため、1 回の実行で無効なキーに当たる可能性があります。ただし、ツールは検出したすべての可能なキーをリストします。ツールを 2 回実行すると、有効な暗号化キーが見つかる可能性が大幅に高まります。これは、両方の実行で同じキーが表示される場合、それが正しいことがほぼ 100% 保証されるためです。
- 指定された URL に .aspx が含まれていない場合のデフォルトページの配列を使用します: `["default.aspx", "index.aspx", "main.aspx", "home.aspx" , "start.aspx", "welcome.aspx", "default2.aspx"]` - これによりテスト時間は大幅に増加しますが、より多くの発見につながる可能性があります。
- `-mkf` または `--machinekeyfile` を machinekeys のリソースファイルとして使用できるため、機密キーが含まれている場合はローカルバージョンを使用できます。
- viewstate の解析時にさらに多くのオブジェクトをサポートするために、カスタマイズされたバージョンの python viewstate ライブラリを使用しています。
- 検証キーが見つかっていない場合でも復号化キーをチェックするための `-evsd` または `--enable-viewstate-decryption` 引数を追加しました。これは、検証キーがリスト内の元のキーとわずかに異なる場合に役立ちます。
- ハッシュコードを識別して `__VIEWSTATEGENERATOR` を計算します。また、`__VIEWSTATEGENERATOR` と URL が提供されている場合、実際のパスとアプリパスを早期に見つけようとします。これにより、特に識別可能なデフォルトの ASPX ページが URL にない場合に、パフォーマンスが向上する可能性があります。
- ユーザーは `-nt` または `--num-threads` オプションで使用するスレッド数を指定できます(viewstate モジュールにのみ適用されます)。デフォルトは 1 で、ほとんどの場合、10 よりも驚くほど高速です!
- 拡張子のないファイルをサポートする必要がありますが、エラーが報告されるため修正が必要です。
- IsolateApps をサポートします(.NET40 レガシーに便利)。これは、検証キーまたは復号化キーの後に ",IsolateApps" がある場合です。
- https://soroush.me/blog/2019/07/iis-application-vs-folder-detection-during-blackbox-testing/ に基づいて積極的にテストすることで、apppath の数を減らします。`-dap` または `--disable-active-path-check` で無効にできます。
- 応答本文で __VIEWSTATE_KEY をチェックし、それを viewstatekey としても使用します。
- セッション ID または anti-XSRF トークンに基づいて、viewstate キーにパブリック IP アドレスを追加します。
- __VIEWSTATE がない場合に __EVENTVALIDATION を使用します。
- "aspnet_resource.py" という新しいモジュールの下で、`/WebResource.axd?d=` または `/ScriptResource.axd?d=` からの暗号化されたリソース値を使用します。そこでも IsolateApps 機能をサポートします。これは、__VIEWSTATE と __EVENTVALIDATION がない場合に役立ちます。

## TODO:
- viewstate の計算時に一般的なページとディレクトリの辞書を追加する
- IsolateByAppId のサポートを実装する(レジストリからの秘密情報が必要なため、おそらく不可能です!)
- エラー発生時の再試行のサポートを追加する。
- requests を httpx に置き換えたことによるエラーをテストする。
- requests から httpx への変換と AI の使用によるいくつかの失敗したテストがあります。これらは、プロジェクトのルートで `pytest` を実行すると確認できます。いくつかは修正されていますが、テストにはまだ対処が必要なエラーがいくつかあります。また、元のリポジトリでも pytest を実行して比較する必要があります!```
FAILED tests/all_modules_test.py::test_carve_all_cookies - AssertionError: assert 2 == 7
FAILED tests/examples_blacklist3r_test.py::test_examples_blacklist3r_offline - AssertionError: assert 'Did not find viewstate in repsonse from URL' in 'Did not find viewstate in response...
FAILED tests/examples_cli_test.py::test_example_cli_hashcat_telerikhashkey - AssertionError: assert 'Module: [Te...ture Command' not in '\x1b[32m\n ...y_file>]\n\n'
FAILED tests/examples_cli_test.py::test_example_cli_hashcat_telerikhashkey_invalid2 - AssertionError: assert 'Known Secret Found!' in '\x1b[32m\n __ )              |                            ...
FAILED tests/examples_symfony_signedurl_test.py::test_symfony_brute_success - AssertionError: assert 'Found Symfony Secret! [50c8215b436ebfcc1d568effb624a40e]' in 'Target appears to be ...
FAILED tests/examples_telerik_knownkey_test.py::test_fullrun_PBKDF2 - KeyError: "'additional_matcher' is not a valid Pattern"
FAILED tests/examples_telerik_knownkey_test.py::test_badoutput_PBKDF1_MS - KeyError: "'additional_matcher' is not a valid Pattern"
FAILED tests/examples_telerik_knownkey_test.py::test_fullrun_asyncupload_earlydetection - KeyError: "'additional_matcher' is not a valid Pattern"
FAILED tests/examples_telerik_knownkey_test.py::test_fullrun_asyncupload_success - KeyError: "'additional_matcher' is not a valid Pattern"
FAILED tests/examples_telerik_knownkey_test.py::test_fullrun_asyncupload_PBKDF1_MS - KeyError: "'additional_matcher' is not a valid Pattern"
ツールをダウンロード

免責事項

このソフトウェアは、学術研究と効果的な防御技術の開発を目的として作成されたものであり、明示的に許可された場合を除き、システムへの攻撃に使用することを意図したものではありません。プロジェクトのメンテナーは、ソフトウェアの誤用について責任を負いません。責任を持って使用してください。

このソフトウェアは個人プロジェクトであり、プロジェクト所有者や貢献者の雇用主を含むいかなる企業とも関係ありません。

badsecrets の元のREADME

Black License Tests codecov Pypi Downloads

さまざまなプラットフォームにおける、既知または非常に弱い暗号シークレットの使用を識別するための純粋なPythonライブラリです。このプロジェクトは、「既知のシークレット」(たとえば、チュートリアルの例で見つかったASP.NETマシンキーなど)のリポジトリとして機能し、その使用を識別するための言語に依存しない抽象化レイヤーを提供するように設計されています。

「悪いシークレット」が使用されたことを知ることは、通常、そのシークレットが使用された暗号製品(たとえば、キー付きハッシュアルゴリズムで署名されたクッキー)を調べることになります。各プラットフォームが提供する個々の実装の癖に踏み込むと複雑になることがありますが、このライブラリはそれを軽減することを目的としています。

Black Lantern Securityブログの完全なブログ記事をご覧ください!

Blacklist3rに触発され、サポートされるプラットフォームを拡張し、言語とオペレーティングシステムへの依存関係を排除したいという願望から生まれました。

現在のモジュール

名前説明
ASPNET_Viewstate既知のマシンキーのリストに対してviewstate/generatorをチェックします。
Telerik_HashKeyパッチ適用済み(2017年以降)のTelerik UIのバージョンで、既知のTelerik.Upload.ConfigurationHashKeyをチェックします。
Telerik_EncryptionKeyパッチ適用済み(2017年以降)のTelerik UIのバージョンで、既知のTelerik.Web.UI.DialogParametersEncryptionKeyをチェックします。
Flask_SignedCookies弱いFlaskクッキー署名パスワードをチェックします。flask-unsignのラッパーです。
Peoplesoft_PSToken悪い/弱い署名パスワードのPeoplesoft PS_TOKENをチェックできます。
Django_SignedCookies既知のdjango secret_keyについて、djangoのセッションクッキー(signed_cookieモードの場合)をチェックします。
Rails_SecretKeyBase既知のsecret_key_baseについて、Ruby on Railsの署名付きまたは暗号化されたセッションクッキー(複数のメジャーリリースから)をチェックします。
Generic_JWT既知のHMACシークレットまたはRSA秘密鍵についてJWTをチェックします。
Jsf_viewstateJava Server Faces(JSF)のMojarraとMyfacesの両方の実装で、既知または弱い秘密鍵の使用をチェックします。
Symfony_SignedURL既知のHMACキーについてsymfonyの「_fragment」URLをチェックします。ハッシュを含む完全なURLで動作します。
Express_SignedCookies_ES既知の「セッションシークレット」について、express.jsのexpress-sessionミドルウェアの署名付きクッキーとセッションクッキーをチェックします。
Express_SignedCookies_CS既知のシークレットについて、express.jsのcookie-sessionミドルウェアの署名付きクッキーとセッションクッキーをチェックします。
Laravel_SignedCookies既知のlaravel「APP_KEY」について「laravel_session」クッキーをチェックします。
ASPNET_VstateRCEに対して脆弱な、かつて人気のあったカスタム圧縮Viewstate コードスニペットをチェックします。
Rack2_SignedCookies既知の秘密鍵についてRack 2.xの署名付きクッキーをチェックします。

インストール

pypiパッケージがあるので、ライブラリを使用するにはpip install badsecretsを実行するだけです。

簡単な使用方法

Badsecretsを使用する最良の方法は、pip installを実行した後にbadsecretsを実行することです。``` pip install badsecrets badsecrets eyJhbGciOiJIUzI1NiJ9.eyJJc3N1ZXIiOiJJc3N1ZXIiLCJVc2VybmFtZSI6IkJhZFNlY3JldHMiLCJleHAiOjE1OTMxMzM0ODMsImlhdCI6MTQ2NjkwMzA4M30.ovqRikAo_0kKJ0GVrAwQlezymxrLGjcEiW_s3UJMMCo

root@kitploit:~
内部では `cli.py` の例を使用しています。CLI は pip インストールなしでも手動でアクセスできます:


#### pip インストールなしの場合:```bash
git clone https://github.com/blacklanternsecurity/badsecrets.git
cd badsecrets
python ./badsecrets/examples/cli.py eyJhbGciOiJIUzI1NiJ9.eyJJc3N1ZXIiOiJJc3N1ZXIiLCJVc2VybmFtZSI6IkJhZFNlY3JldHMiLCJleHAiOjE1OTMxMzM0ODMsImlhdCI6MTQ2NjkwMzA4M30.ovqRikAo_0kKJ0GVrAwQlezymxrLGjcEiW_s3UJMMCo

例

例を使用するには、pip install を実行した後、リポジトリを git clone して badsecrets ディレクトリに cd します:``` git clone https://github.com/blacklanternsecurity/badsecrets.git cd badsecrets

root@kitploit:~
以下に、指定されたチャンクの日本語訳を示します。

---

以下の例のセクションにあるコマンドは、このディレクトリにいることを前提としています。

Badsecrets の [BBOT](https://github.com/blacklanternsecurity/bbot) モジュールを使用している場合は、他に何もする必要はありません。BBOT がパッケージを自動的にインストールします。


### cli.py

Bad secrets には、シークレットを手動で確認する際に便利な [CLI の例](https://github.com/blacklanternsecurity/badsecrets/blob/dev/badsecrets/examples/cli.py) が含まれています。前述のとおり、pip インストールが成功した後は、`badsecrets` を実行するだけでアクセスすることもできます。

#### 使用方法

---```
usage: badsecrets [-h] [-nc] [-u URL] [-nh] [-c CUSTOM_SECRETS] [-p PROXY] [-a USER_AGENT] [product ...]

Check cryptographic products against badsecrets library

positional arguments:
  product               Cryptographic product to check for known secrets

options:
  -h, --help            show this help message and exit
  -nc, --no-color       Disable color message in the console
  -u URL, --url URL     Use URL Mode. Specified the URL of the page to access and attempt to check for secrets
  -nh, --no-hashcat     Skip the check for compatable hashcat commands when secret isn't found
  -c CUSTOM_SECRETS, --custom-secrets CUSTOM_SECRETS
                        include a custom secrets file to load along with the default secrets
  -p PROXY, --proxy PROXY
                        In URL mode, Optionally specify an HTTP proxy
  -a USER_AGENT, --user-agent USER_AGENT
                        In URL mode, Optionally set a custom user-agent

  • 基本的な使い方 - 暗号製品に既知の秘密鍵が含まれていないか確認する(全モジュールに対して):```bash badsecrets eyJhbGciOiJIUzI1NiJ9.eyJJc3N1ZXIiOiJJc3N1ZXIiLCJVc2VybmFtZSI6IkJhZFNlY3JldHMiLCJleHAiOjE1OTMxMzM0ODMsImlhdCI6MTQ2NjkwMzA4M30.ovqRikAo_0kKJ0GVrAwQlezymxrLGjcEiW_s3UJMMCo
root@kitploit:~
URLモードがあり、ターゲットに接続して暗号製品のカービングを試み、見つかったものをすべてのモジュールに対してチェックします。```bash
badsecrets --url http://example.com/contains_bad_secret.html

このモードでは、--user-agent "user-agent string" でカスタムユーザーエージェントを設定したり、--proxy http://127.0.0.1 でプロキシを設定することもできます。

出力例:```bash $ badsecrets eyJhbGciOiJIUzI1NiJ9.eyJJc3N1ZXIiOiJJc3N1ZXIiLCJVc2VybmFtZSI6IkJhZFNlY3JldHMiLCJleHAiOjE1OTMxMzM0ODMsImlhdCI6MTQ2NjkwMzA4M30.ovqRikAo_0kKJ0GVrAwQlezymxrLGjcEiW_s3UJMMCo

__ ) | |
__ \ | _ | __| _ \ | | _ \ | | | | ( | ( | _ \ __/ ( | / | _ \ __/ _,| _,| ____/ _| _| _| _| _| ____/

v0.3.337

Known Secret Found!

Detecting Module: Generic_JWT

Product Type: JSON Web Token (JWT) Product: eyJhbGciOiJIUzI1NiJ9.eyJJc3N1ZXIiOiJJc3N1ZXIiLCJVc2VybmFtZSI6IkJhZFNlY3JldHMiLCJleHAiOjE1OTMxMzM0ODMsImlhdCI6MTQ2NjkwMzA4M30.ovqRikAo_0kKJ0GVrAwQlezymxrLGjcEiW_s3UJMMCo Secret Type: HMAC/RSA Key Location: manual Secret: 1234 Details: {'Issuer': 'Issuer', 'Username': 'BadSecrets', 'exp': 1593133483, 'iat': 1466903083, 'jwt_headers': {'alg': 'HS256'}}

root@kitploit:~
* Hashcat

デフォルトでは、シークレットが見つからない場合、提供されたプロダクトが潜在的なhashcatマッチとしてチェックされます。マッチがある場合、ほぼ完全なhashcatコマンドが生成され、hashcatを介してプロダクトをクラッキングするのに(潜在的に)適したものになります。これにより、既知ではないが脆弱で、それでもクラッキング可能なキーを取得できる可能性があります。すべてのモジュールがhashcat出力を生成できるわけではありません。この動作は、`--no-hashcat`オプションで無効にできます。```
badsecrets eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.qvkcSLMQPAQdEuRFv0h3aQIRpTfaI57GjXLOWI_6NaE

例:

root@kitploit:~
$ ./tool --help

__ ) | |
__ \ | _ | __| _ \ | | _ \ | | | | ( | ( | _ \ __/ ( | / | _ \ __/ _,| _,| ____/ _| _| _| _| _| ____/

v0.3.337

No secrets found :(

Potential matching hashcat commands:

Module: [Flask_SignedCookies] Flask Signed Cookie Command: [hashcat -m 29100 -a 0 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.qvkcSLMQPAQdEuRFv0h3aQIRpTfaI57GjXLOWI_6NaE <dictionary_file>] Module: [Generic_JWT] JSON Web Token (JWT) Algorithm: HS256 Command: [hashcat -m 16500 -a 0 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.qvkcSLMQPAQdEuRFv0h3aQIRpTfaI57GjXLOWI_6NaE <dictionary_file>]

root@kitploit:~
* カスタムシークレットリスト

追加のシークレットを含むファイルを指定することが可能です。これらはチェック実行時にデフォルトリストに追加されます。これは `-c` / `--custom-secrets` フラグで実現されます。指定する値は有効なファイルである必要があります。指定ファイルには100kのサイズ制限があります。```
badsecrets eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.vKxsE0u-TrpoMQ5zmBv1_I-NXSgouq6iZJWMHbHSmgY -c test.txt

例:

root@kitploit:~
$ python3 -m pip install --upgrade pip
$ python3 -m pip install --upgrade git+https://github.com/hakluke/hakrawler.git
$ hakrawler -url example.com

使い方

root@kitploit:~
$ hakrawler -h

これにより、ヘルプ画面が表示されます:

root@kitploit:~
usage: hakrawler [-h] [-u URL] [-d DEPTH] [-t THREADS] [-i INSCOPE] [-o OUTSCOPE] [-w] [-s] [-p] [-dr] [-insecure] [-plain] [-v]

optional arguments:
  -h, --help            このヘルプメッセージを表示して終了
  -u URL, --url URL      クロールを開始するURL
  -d DEPTH, --depth DEPTH  クロールの深さ(デフォルト: 2)
  -t THREADS, --threads THREADS  使用するスレッド数(デフォルト: 4)
  -i INSCOPE, --inscope INSCOPE  スコープ内の正規表現パターン
  -o OUTSCOPE, --outscope OUTSCOPE  スコープ外の正規表現パターン
  -w, --wildcard         ワイルドカードスコープを有効にする
  -s, --subs             サブドメインをスコープに含める
  -p, --plain            プレーンテキスト出力
  -dr, --dont-scan       リンクをスキャンしない
  -insecure              TLS証明書の検証をスキップ
  -v, --verbose          詳細出力

例

root@kitploit:~
$ hakrawler -url example.com -d 3 -t 8

これにより、example.com を深さ3、8スレッドでクロールし、見つかったすべてのURLを出力します。

root@kitploit:~
$ hakrawler -url example.com -i '\.example\.com'

これにより、example.com をクロールし、example.com ドメイン内のURLのみを出力します。

root@kitploit:~
$ hakrawler -url example.com -o '\.example\.com'

これにより、example.com をクロールし、example.com ドメイン外のURLのみを出力します。

root@kitploit:~
$ hakrawler -url example.com -w

これにより、example.com をクロールし、ワイルドカードスコープ(*.example.com)内のURLのみを出力します。

root@kitploit:~
$ hakrawler -url example.com -s

これにより、example.com をクロールし、サブドメインを含むスコープ内のURLのみを出力します。

root@kitploit:~
$ hakrawler -url example.com -p

これにより、example.com をクロールし、プレーンテキスト形式でURLを出力します。

root@kitploit:~
$ hakrawler -url example.com -dr

これにより、example.com をクロールし、リンクをスキャンせずにURLを出力します。

root@kitploit:~
$ hakrawler -url example.com -insecure

これにより、example.com をクロールし、TLS証明書の検証をスキップしてURLを出力します。

root@kitploit:~
$ hakrawler -url example.com -v

これにより、example.com をクロールし、詳細出力でURLを出力します。

出力

hakrawlerは、見つかったすべてのURLを標準出力に出力します。出力は、-p フラグを使用しない限り、色付きで表示されます。

ライセンス

hakrawlerは、MITライセンスの下で公開されています。``` __ ) | |
__ \ | _ | __| _ \ | | _ \ | | | | ( | ( | _ \ __/ ( | / | _ \ __/ _,| _,| ____/ _| _| _| _| _| ____/

v0.3.337

Including custom secrets list [test.txt]

Known Secret Found!

Detecting Module: Generic_JWT

Product Type: JSON Web Token (JWT) Product: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.vKxsE0u-TrpoMQ5zmBv1_I-NXSgouq6iZJWMHbHSmgY Secret Type: HMAC/RSA Key Location: manual Secret: fake123 Details: {'sub': '1234567890', 'name': 'John Doe', 'iat': 1516239022, 'jwt_headers': {'alg': 'HS256', 'typ': 'JWT'}}

root@kitploit:~
### blacklist3r.py

*注記: これは現在は廃止されています。`cli.py` が machinekeys/generator 値を処理できるようになったためです。参考用として引き続き含まれています。*
*例: `badsecrets KLox5XeGYfb7Lo8zFzr1YepUagXuixcxX55lpFht+rrW6VGheZi831vdusH6DCMfxIhsLG1EPU3OuPvqN2XBc/fj0ew15TQ1zBmmKWJVns4= AAAAAAAA`*

Bad secrets には、[blacklist3r](https://github.com/NotSoSecure/Blacklist3r) の機能を Python で再現した[完全に機能する CLI の例](https://github.com/blacklanternsecurity/badsecrets/blob/dev/badsecrets/examples/blacklist3r.py)が含まれています: badsecrets/examples/blacklist3r。```bash
python ./badsecrets/examples/blacklist3r.py --url http://vulnerablesite/vulnerablepage.aspx
python ./badsecrets/examples/blacklist3r.py --viewstate /wEPDwUJODExMDE5NzY5ZGQMKS6jehX5HkJgXxrPh09vumNTKQ== --generator EDD8C9AE

telerik_knownkey.py

Telerik の既知のハッシュキー(Telerik.Upload.ConfigurationHashKey)および暗号化キー(Telerik.Web.UI.DialogParametersEncryptionKey)を特定するための完全に機能するCLI例です。これは、2017年以降のバージョン(CVE-2017-9248 のパッチが適用されたもの)の Telerik DialogHandler インスタンスで使用され、バージョンのブルートフォースや悪用する DialogParameters 値の生成を行います。

現在、これは「パッチ適用済み」バージョンの Telerik に対して動作する悪用 URL を構築できる唯一のツールであると思われます。```bash python ./badsecrets/examples/telerik_knownkey.py --url http://vulnerablesite/Telerik.Web.UI.DialogHandler.aspx

root@kitploit:~
任意で `--machine-keys` を使用して ASP.NET MachineKeys を含めることもできます(ブルートフォース時間が大幅に増加します)

*更新: このユーティリティは、`Telerik.Web.UI.DialogHandler.aspx` エンドポイントに加えて、`Telerik.Web.UI.WebResource.axd` エンドポイントを介して使用中の既知の `Telerik.AsyncUpload.ConfigurationEncryptionKey` キーも検出するようになりました。*```bash
python ./badsecrets/examples/telerik_knownkey.py --url http://vulnerablesite/Telerik.Web.UI.WebResource.axd

pip install を使用すれば、telerik-knownkey コマンドで直接実行できるようになりました```bash python telerik-knownkey --url http://vulnerablesite/Telerik.Web.UI.WebResource.axd

root@kitploit:~
### symfony_knownkey.py

`_fragment` URLが有効な場合に、ハッシュを含むサンプルURLが見つからない場合でも、Symfonyの既知の秘密鍵をブルートフォースで検出します。[関連ブログ記事](https://www.ambionics.io/blog/symfony-secret-fragment)。```bash
python ./badsecrets/examples/symfony_knownkey.py --url https://localhost/

pip install を使用すれば、symfony-knownkey コマンドで直接実行できるようになりました```bash python symfony-knownkey --url http://vulnerablesite/Telerik.Web.UI.WebResource.axd

root@kitploit:~
## BBOT モジュール

Badsecrets、特に `ASPNET_Viewstate` モジュールと `Jsf_viewstate` モジュールを活用する最良の方法の1つは、Badsecrets の [BBOT](https://github.com/blacklanternsecurity/bbot) モジュールを使用することです。これにより、サブドメイン列挙と組み合わせて、数千のシステムにわたって簡単にチェックできるようになります。```
bbot -f subdomain-enum -m badsecrets -t evil.corp

badsecrets

基本的なライブラリの使用方法

check_secret

トークンやその他の暗号化製品が既知の鍵で生成されたかどうかを確認します```python from badsecrets import modules_loaded

Django_SignedCookies = modules_loaded["django_signedcookies"] ASPNET_Viewstate = modules_loaded["aspnet_viewstate"] Flask_SignedCookies = modules_loaded["flask_signedcookies"] Peoplesoft_PSToken = modules_loaded["peoplesoft_pstoken"] Telerik_HashKey = modules_loaded["telerik_hashkey"] Telerik_EncryptionKey = modules_loaded["telerik_encryptionkey"] Rails_SecretKeyBase = modules_loaded["rails_secretkeybase"] Generic_JWT = modules_loaded["generic_jwt"] Jsf_viewstate = modules_loaded["jsf_viewstate"] Symfony_SignedURL = modules_loaded["symfony_signedurl"] Express_SignedCookies_ES = modules_loaded["express_signedcookies_es"] Express_SignedCookies_CS = modules_loaded["express_signedcookies_cs"] Laravel_SignedCookies = modules_loaded["laravel_signedcookies"] ASPNET_Vstate = modules_loaded["aspnet_vstate"] Rack2_SignedCookies = modules_loaded["rack2_signedcookies"]

x = ASPNET_Viewstate() print(f"###{str(x.class.name)}###") r = x.check_secret("AgF5WuyVO11CsYJ1K5rjyuLXqUGCITSOapG1cYNiriYQ6VTKochMpn8ws4eJRvft81nQIA==","EDD8C9AE") if r: print(r) else: print("KEY NOT FOUND :(")

x = Telerik_HashKey() print(f"###{str(x.class.name)}###") r = x.check_secret("vpwClvnLODIx9te2vO%2F4e06KzbKkjtwmNnMx09D1Dmau0dPliYzgpqB9MnEqhPNe3fWemQyH25eLULJi8KiYHXeHvjfS1TZAL2o5Gku1gJbLuqusRXZQYTNlU2Aq4twXO0o0CgVUTfknU89iw0ceyaKjSteOhxGvaE3VEDfiKDd8%2B9j9vD3qso0mLMqn%2Btxirc%2FkIq5oBbzOCgMrJjkaPMa2SJpc5QI2amffBJ%2BsAN25VH%2BwabEJXrjRy%2B8NlYCoUQQKrI%2BEzRSdBsiMOxQTD4vz2TCjSKrK5JEeFMTyE7J39MhXFG38Bq%2FZMDO%2FETHHdsBtTTkqzJ2odVArcOzrce3Kt2%2FqgTUPW%2BCjFtkSNmh%2FzlB9BhbxB1kJt1NkNsjywvP9j7PvNoOBJsa8OwpEyrPTT3Gm%2BfhDwtjvwpvN7l7oIfbcERGExAFrAMENOOt4WGlYhF%2F8c9NcDv0Bv3YJrJoGq0rRurXSh9kcwum9nB%2FGWcjPikqTDm6p3Z48hEnQCVuJNkwJwIKEsYxJqCL95IEdX3PzR81zf36uXPlEa3YdeAgM1RD8YGlwlIXnrLhvMbRvQW0W9eoPzE%2FjP68JGUIZc1TwTQusIWjnuVubFTEUMDLfDNk12tMwM9mfnwT8lWFTMjv9pF70W5OtO7gVN%2BOmCxqAuQmScRVExNds%2FF%2FPli4oxRKfgI7FhAaC%2Fu1DopZ6vvBdUq1pBQE66fQ9SnxRTmIClCpULUhNO90ULTpUi9ga2UtBCTzI8z6Sb6qyQ52NopNZMFdrn9orzdP8oqFeyYpF%2BQEtbp%2F5AMENkFkWUxHZn8NoSlO8P6G6ubSyDdY4QJPaFS4FxNhhm85WlZC9xfEZ1AGSSBOu9JJVYiKxXnL1yYLqrlWp5mfBHZeUBwEa%2FMjGxZEVYDhXo4PiU0jxN7fYmjaobp3DSgA5H3BcFuNG5d8CUnOlQcEie5b%2BUHOpI9zAk7qcuEUXbaZ5Mvh0t2jXCRALRKYDyBdbHlWAFo10dTIM6L3aSTM5uEz9%2FalXLXoWlMo7dTDpuO5bBfTq7YkoPExL3g3JJX47UhuLq85i3%2Bzxfvd7r%2Fmid69kbD3PnX%2Bj0QxaiShhyOZg6jl1HMeRRXvZap3FPCIfxbCf7j2TRqB5gYefBIIdGYjrdiL6HS8SbjXcROMwh2Fxnt505X4jmkmDcGmneU3z%2B84TSSFewcSpxGEGvHVkkU4OaT6vyFwsxCmdrR187tQZ7gn3ZkAiTps%2FfOPcL5QWXja06Z%2FHT3zboq6Hj9v9NBHzpC1eAK0YN8r4V2UMI3P0%2FsIPQYXhovoeLjJwq6snKZTX37ulE1mbS1uOY%2BZrvFYbLN5DdNL%2B%2Bl%2F%2BcWIpc0RSYBLo19xHpKeoeLjU2sxaYzK%2B92D4zKANdPPvsHPqJD1Y%2FBwCL%2FfZKaJfRK9Bj09ez1Z1ixTEKjIRCwuxijnJGq33faZchbwpMPpTfv43jEriGwXwoqOo9Mbj9ggPAil7O81XZxNT4vv4RoxXTN93V100rt3ClXauL%2BlNID%2BseN2CEZZqnygpTDf2an%2FVsmJGJJcc0goW3l43mhx2U79zeuT94cFPGpvITEbMtjmuNsUbOBuw6nqm5rAs%2FxjIsDRqfQxGQWfS0kuwuU6RRmiME2Ps0NrBENIbZzcbgw6%2BRIwClWkvEG%2BK%2FPdcAdfmRkAPWUNadxnhjeU2jNnzI1yYNIOhziUBPxgFEcAT45E7rWvf8ghT08HZvphzytPmD%2FxuvJaDdRgb6a30TjSpa7i%2BEHkIMxM5eH1kiwhN6xkTcBsJ87epGdFRWKhTGKYwCbaYid1nRs7%2BvQEU7MRYghok8KMTueELipohm3otuKo8V4a7w4TgTSBvPE%2BLPLJRwhM8KcjGlcpzF1NowRo6zeJJhbdPpouUH2NJzDcp7P4uUuUB9Cxt9B986My6zDnz1eyBvRMzj7TABfmfPFPoY3RfzBUzDm%2FA9lOGsM6d9WZj2CH0WxqiLDGmP1Ts9DWX%2FsYyqEGK5R1Xpnp7kRIarPtYliecp50ZIH6nqSkoCBllMCCE6JN%2BdoXobTpulALdmQV0%2Bppv%2FAjzIJrTHgX7jwRGEAeRgAxTomtemmIaH5NtV7xt8XS%2BqwghdJl1D06%2FWhpMtJ1%2FoQGoJ0%2F7ChYyefyAfsiQNWsO66UNVyl71RVPwATnbRO5K5mtxn0M2wuXXpAARNh6pQTcVX%2FTJ4jmosyKwhI6I870NEOsSaWlKVyOdb97C3Bt0pvzq8BagV5FMsNtJKmqIIM0HRkMkalIyfow9iS%2B5xGN5eKM8NE4E6hO4CvmpG%2BH2xFHTSNzloV0FjLdDmj5UfMjhUuEb3rkKK1bGAVaaherp6Ai6N4YJQzh%2FDdpo6al95EZN2OYolzxitgDgsWVGhMvddyQTwnRqRY04hdVJTwdhi4TiCPbLJ1Wcty2ozy6VDs4w77EOAQ5JnxUmDVPA3vXmADJZR0hIJEsuxXfYg%2BRIdV4fzGunV4%2B9jpiyM9G11iiesURK82o%2BdcG7FaCkkun2K2bvD6qGcL61uhoxNeLVpAxjrRjaEBrXsexZ9rExpMlFD8e3NM%2B0K0LQJvdEvpWYS5UTG9cAbNAzBs%3DpDsPXFGf2lEMcyGaK1ouARHUfqU0fzkeVwjXU9ORI%2Fs%3D") if r:
print(r) else: print("KEY NOT FOUND :(")

x = Flask_SignedCookies() print(f"###{str(x.class.name)}###") r = x.check_secret("eyJoZWxsbyI6IndvcmxkIn0.XDtqeQ.1qsBdjyRJLokwRzJdzXMVCSyRTA") if r: print(r) else: print("KEY NOT FOUND :(")

x = Peoplesoft_PSToken() print(f"###{str(x.class.name)}###") r = x.check_secret("qAAAAAQDAgEBAAAAvAIAAAAAAAAsAAAABABTaGRyAk4AdQg4AC4AMQAwABSpxUdcNT67zqSLW1wY5/FHQd1U6mgAAAAFAFNkYXRhXHicHYfJDUBQAESfJY5O2iDWgwIsJxHcxdaApTvFGX8mefPmAVzHtizta2MSrCzsXBxsnOIt9yo6GvyekZqJmZaBPCUmVUMS2c9MjCmJKLSR/u+laUGuzwdaGw3o") if r: print(r) else: print("KEY NOT FOUND :(")

x = Django_SignedCookies() print(f"###{str(x.class.name)}###") r = x.check_secret(".eJxVjLsOAiEURP-F2hAuL8HSfr-BAPciq4ZNlt3K-O9KsoU2U8w5My8W4r7VsHdaw4zswoCdfrsU84PaAHiP7bbwvLRtnRMfCj9o59OC9Lwe7t9Bjb2OtbMkAEGQtQjekykmJy9JZIW-6CgUaCGsA6eSyV65s1Qya_xGKZrY-wPVYjdw:1ojOrE:bfOktjgLlUykwCIRIpvaTZRQMM3-UypscEN57ECtXis") if r: print(r) else: print("KEY NOT FOUND :(")

x = Rails_SecretKeyBase() print(f"###{str(x.class.name)}###") r = x.check_secret("dUEvRldLekFNcklGZ3ZSbU1XaHJ0ZGxsLzhYTHlNTW43T3BVN05kZXE3WUhQOVVKbVA3Rm5WaSs5eG5QQ1VIRVBzeDFNTnNpZ0xCM1FKbzFZTEJISzhaNzFmVGYzME0waDFURVpCYm5TQlJFRmRFclYzNUZhR3VuN29PMmlkVHBrRi8wb3AwZWgvWmxObkFOYnpkeHR1YWpWZ3lnN0Y4ZW9xSk9LNVlQd0U4MmFsbWtLZUI5VzkzRkM4YXBFWXBWLS15L00xME1nVFp2ZTlmUWcxZVlpelpnPT0=--7efe7919a5210cfd1ac4c6228e3ff82c0600d841") if r: print(r) else: print("KEY NOT FOUND :(")

x = Generic_JWT() print(f"###{str(x.class.name)}###") r = x.check_secret("eyJhbGciOiJIUzI1NiJ9.eyJJc3N1ZXIiOiJJc3N1ZXIiLCJVc2VybmFtZSI6IkJhZFNlY3JldHMiLCJleHAiOjE1OTMxMzM0ODMsImlhdCI6MTQ2NjkwMzA4M30.ovqRikAo_0kKJ0GVrAwQlezymxrLGjcEiW_s3UJMMCo") if r: print(r) else: print("KEY NOT FOUND :(")

x = Telerik_EncryptionKey() print(f"###{str(x.class.name)}###") r = x.check_secret("owOnMokk%2F4N7IMo6gznRP56OYIT34dZ1Bh0KBbXlFgztgiNNEBYrgWRYDBkDlX8BIFYBcBztC3NMwoT%2FtNF%2Ff2nCsA37ORIgfBem1foENqumZvmcTpQuoiXXbMWW8oDjs270y6LDAmHhCRsl4Itox4NSBwDgMIOsoMhNrMigV7o7jlgU16L3ezISSmVqFektKmu9qATIXme63u4IKk9UL%2BGP%2Fk3NPv9MsTEVH1wMEf4MApH5KfWBX96TRIc9nlp3IE5BEWNMvI1Gd%2BWXbY5cSY%2Buey2mXQ%2BAFuXAernruJDm%2BxK8ZZ09TNsn5UREutvNtFRrePA8tz3r7p14yG756E0vrU7uBz5TQlTPNUeN3shdxlMK5Qzw1EqxRZmjhaRpMN0YZgmjIpzFgrTnT0%2Bo0f6keaL8Z9TY8vJN8%2BEUPoq%2F7AJiHKm1C8GNc3woVzs5mJKZxMUP398HwGTDv9KSwwkSpHeXFsZofbaWyG0WuNldHNzM%2FgyWMsnGxY6S086%2F477xEQkWdWG5UE%2FowesockebyTTEn3%2B%2FqiVy%2FIOxXvMpvrLel5nVY%2FSouHp5n2URRyRsfo%2B%2BOXJZo7yxKQoYBSSkmxdehJqKJmbgxNp5Ew8m89xAS5g99Hzzg382%2BxFp8yoDVZMOiTEuw0J%2B4G6KizqRW9cis%2FELd0aDE1V7TUuJnFrX%2BlCLOiv100tKpeJ0ePMOYrmvSn0wx7JhswNuj%2BgdKqvCnMSLakGWiOHxu5m9Qqdm3s5sk7nsaxMkh8IqV%2BSzB9A2K1kYEUlY40II1Wun67OSdLlYfdCFQk4ED0N%2BV4kES%2F1xpGiaPhxjboFiiV%2BkvCyJfkuotYuN%2B42CqFyAyepXPA%2BR5jVSThT6OIN2n1UahUnrD%2BwKKGMA9QpVPTSiGLen2KSnJtXISbrl2%2BA2AnQNH%2BMEwYVNjseM0%2BAosbgVfNde2ukMyugo%2FRfrRM27cbdVlE0ms0uXhlgKAYJ2ZN54w1tPWhpGxvZtB0keWpZan0YPh8CBgzsAIMa04HMYLCtgUTqxKqANoKXSy7VIJUzg3fl%2F2WUELjpXK9gRcgexNWDNB1E0rHd9PUo0PvpB4fxSrRpb1LRryipqsuoJ8mrpOVrVMvjracBvtoykK3GrN%2FDUlXkSG%2FAeBQN7HwDJ9QPi3AtEOohp78Op3nmbItXo7IJUSjzBNzUYR8YPj6Ud7Fje9LZSwMBngvgx%2BOKy6HsV4ofOAU2%2FK1%2BfxI0KkCeoSso9NJHWgBD7ijfXUa1Hrc%2FuNU3mTlSSVp3VStQrJbQCkr4paaHYWeeO4pRZCDSBNUzs9qq3TDePwpEQc4QROrw5htdniRk26lFIFm%2Fzk2nC77Pg%2BrkRC1W%2BlRv0lyXsmXVBCe8F1szpWXHCxHNAJwKH%2FBb%2BV1k6AXFXVWPW5vADbXUvRu0s6KLaqu6a0KCB7dt3K2Ni%2FI6O%2FmISYXzknbMrwwakNfajbRF2ibodgR9R9xvoCoCXa3ka7%2Fejr%2BmsZ2HvPKUAffd2fNIWCQrejfpuIoOWiYx6ufN8E41HetCbYfvsI6JQfPOEdOYWI2px%2BLdfO3Nybq99%2BRSQOhjNZakBP54ozlCUfwgpLOmTBwsswZexv1RK5MIi8%2FWtjlJ%2FKjkYxdkFUlwggGS2xDwzcyl2%2FakNCQ5YmxjU8cRY7jZQRMo%2F8uTw5qa2MNZPaQGI18uRgr0i%2FTX3t57fJYCpMLXSaUKIdO7O%2FCQhIyGTS6KrPN%2B3%2FgUb%2BPQ1viGhpnWfGEYF9vhIlK57z8G8G82UQ3DpttD7M8mQ0KsmCOq75ECx9CWrWGk51vADlm%2BLEZ5oWjVMs%2FThki40B7tL7gzFrBuQksWXYeubMzZfFo4ZQ49di4wupHG5kRsyL2fJUzgpaLDP%2BSe6%2FjCnc52C7lZ3Ls0cHJVf9HRwDNXWM%2B4h8donNy5637QWK%2BV7mlH%2FL4xBZCfU9l6sIz%2FWHMtRaQprEem6a%2FRwPRDBiP65I2EwZLKGY8I%2F1uXJncwC8egLu82JY9maweI0VmJSmRcTf0evxqqe7vc9MqpsUlpSVNh4bFnxVIo5E4PGX70kVaTFe0vu1YdGKmFX5PLvkmWIf%2FnwfgPMqYsa0%2F09trboJ5LGDEQRXSBb7ldG%2FwLdOiqocYKAb91SMpn1fXVPBgkPM27QZxHnSAmWVbJR2%2FIhO%2BIVNzkgFAJlptiEPPPTxuBh%2BTT7CaIQE3oZbbJeQKvRkrt4bawTCOzciU%2F1zFGxubTJTSyInjQ8%2F1tVo7KjnxPKqGSfwZQN%2FeWL6R%2FpvCb%2BE6D4pdyczoJRUWsSNXNnA7QrdjgGNWhyOMiKvkDf3RD4mrXbul18WYVTsLyp0hvQsbdwBWOh7VlwfrWdy%2BklsttFi%2B%2BadKR7DbwjLTcxvdNpTx1WJhXROR8jwW26VEYSXPVqWnYvfyZo4DojKHMSDMbAakbuSJdkGP1d5w0AYbKlAcVQOqp9hbAvfwwLy4ErdIsOg0YEeCcnQVRAXwaCI9JvWWmM%2FzYJzE3X45A6lU9Pe7TAbft810MYh7lmV6Keb5HI6qXFiD%2B8khBZqi%2FsK6485k0a86aWLxOb4Eqnoc41x%2BYPv5CWfvP6cebsENo%3D%2BIUg0f64C4y77N4FZ6C82m5wMpvDQIHqx0ZFIHLhwMg%3D") if r: print(r) else: print("KEY NOT FOUND :(")

x = Jsf_viewstate() print(f"###{str(x.class.name)}###") r = x.check_secret("wHo0wmLu5ceItIi+I7XkEi1GAb4h12WZ894pA+Z4OH7bco2jXEy1RSCWwjtJcZNbWPcvPqL5zzfl03DoeMZfGGX7a9PSv+fUT8MAeKNouAGj1dZuO8srXt8xZIGg+wPCWWCzcX6IhWOtgWUwiXeSojCDTKXklsYt+kzlVbk5wOsXvb2lTJoO0Q==") if r: print(r) else: print("KEY NOT FOUND :(")

x = Symfony_SignedURL() print(f"###{str(x.class.name)}###") r = x.check_secret("https://localhost/_fragment?_path=_controller%3Dsystem%26command%3Did%26return_value%3Dnull&_hash=Xnsvx/yLVQaimEd1CfepgH0rEXr422JnRSn/uaCE3gs=") if r: print(r) else: print("KEY NOT FOUND :(")

x = Express_SignedCookies_ES() print(f"###{str(x.class.name)}###") r = x.check_secret("s%3A8FnPwdeM9kdGTZlWvdaVtQ0S1BCOhY5G.qys7H2oGSLLdRsEq7sqh7btOohHsaRKqyjV4LiVnBvc") if r: print(r) else: print("KEY NOT FOUND :(")

x = Express_SignedCookies_CS() print(f"###{str(x.class.name)}###") r = x.check_secret("foo=eyJ1c2VybmFtZSI6IkJib3RJc0xpZmUifQ==","zOQU7v7aTe_3zu7tnVuHi1MJ2DU") if r: print(r) else: print("KEY NOT FOUND :(")

x = Laravel_SignedCookies() print(f"###{str(x.class.name)}###") r = x.check_secret("eyJpdiI6IlhlNTZ2UjZUQWZKVHdIcG9nZFkwcGc9PSIsInZhbHVlIjoiRlUvY2grU1F1b01lSXdveXJ0T3N1WGJqeVVmZlNRQjNVOWxiSzljL1Z3RDhqYUdDbjZxMU9oSThWRzExT0YvUmthVzVKRE9kL0RvTEw1cFRhQkphOGw4S2loV1ZrMkkwTHd4am9sZkJQd2VCZ3R0VlFSeFo3ay9wTlBMb3lLSG8iLCJtYWMiOiJkMmU3M2ExNDc2NTc5YjAwMGMwMTdkYTQ1NThkMjRkNTY2YTE4OTg2MzY5MzE5NGZmOTM4YWVjOGZmMWU4NTk2IiwidGFnIjoiIn0%3D") if r: print(r) else: print("KEY NOT FOUND :(")

x = ASPNET_Vstate() print(f"###{str(x.class.name)}###") r = x.check_secret("H4sIAAAAAAAEAPvPyJ/Cz8ppZGpgaWpgZmmYAgAAmCJNEQAAAA==") if r: print(r) else: print("KEY NOT FOUND :(")

x = Rack2_SignedCookies() print(f"###{str(x.class.name)}###") r = x.check_secret("BAh7B0kiD3Nlc3Npb25faWQGOgZFVG86HVJhY2s6OlNlc3Npb246OlNlc3Npb25JZAY6D0BwdWJsaWNfaWRJIkU5YmI3ZDUyODUyNTAwMDYzMGE2NjMxYTA5MjBlMjYzMzFmOGE0MjBhNTdhYWIxNzVkZTFmM2FjMDQ3NmI1NDQzBjsARkkiCmNvdW50BjsARmkG--3a983fbc58911c5266d7748a6a55165f74d412f4") if r: print(r) else: print("KEY NOT FOUND :(")

root@kitploit:~
#### Carve
check_secret の上位に位置する追加の抽象化レイヤーで、Python の httpx.response オブジェクトまたは文字列を受け取ります。```python
import httpx
from badsecrets import modules_loaded
Telerik_HashKey = modules_loaded["telerik_hashkey"]

x = Telerik_HashKey()

# Create an HTTP client that ignores certificate errors
with httpx.Client() as client:
    res = client.get("http://example.com/", verify=False)
    r_list = x.carve(requests_response=res)
    print(r_list)

telerik_dialogparameters_sample = """
Sys.Application.add_init(function() {
    $create(Telerik.Web.UI.RadDialogOpener, {"_dialogDefinitions":{"ImageManager":{"SerializedParameters":"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","Width":"770px","Height":"588px","Title":"Image Manager"}
"""
    
r_list = x.carve(body=telerik_dialogparameters_sample)
print(r_list)

すべてのモジュールを一度にチェックする```python

from badsecrets.base import check_all_modules

tests = [ "yJrdyJV6tkmHLII2uDq1Sl509UeDg9xGI4u3tb6dm9BQS4wD08KTkyXKST4PeQs00giqSA==", "eyJoZWxsbyI6IndvcmxkIn0.XDtqeQ.1qsBdjyRJLokwRzJdzXMVCSyRTA", "vpwClvnLODIx9te2vO%2F4e06KzbKkjtwmNnMx09D1Dmau0dPliYzgpqB9MnEqhPNe3fWemQyH25eLULJi8KiYHXeHvjfS1TZAL2o5Gku1gJbLuqusRXZQYTNlU2Aq4twXO0o0CgVUTfknU89iw0ceyaKjSteOhxGvaE3VEDfiKDd8%2B9j9vD3qso0mLMqn%2Btxirc%2FkIq5oBbzOCgMrJjkaPMa2SJpc5QI2amffBJ%2BsAN25VH%2BwabEJXrjRy%2B8NlYCoUQQKrI%2BEzRSdBsiMOxQTD4vz2TCjSKrK5JEeFMTyE7J39MhXFG38Bq%2FZMDO%2FETHHdsBtTTkqzJ2odVArcOzrce3Kt2%2FqgTUPW%2BCjFtkSNmh%2FzlB9BhbxB1kJt1NkNsjywvP9j7PvNoOBJsa8OwpEyrPTT3Gm%2BfhDwtjvwpvN7l7oIfbcERGExAFrAMENOOt4WGlYhF%2F8c9NcDv0Bv3YJrJoGq0rRurXSh9kcwum9nB%2FGWcjPikqTDm6p3Z48hEnQCVuJNkwJwIKEsYxJqCL95IEdX3PzR81zf36uXPlEa3YdeAgM1RD8YGlwlIXnrLhvMbRvQW0W9eoPzE%2FjP68JGUIZc1TwTQusIWjnuVubFTEUMDLfDNk12tMwM9mfnwT8lWFTMjv9pF70W5OtO7gVN%2BOmCxqAuQmScRVExNds%2FF%2FPli4oxRKfgI7FhAaC%2Fu1DopZ6vvBdUq1pBQE66fQ9SnxRTmIClCpULUhNO90ULTpUi9ga2UtBCTzI8z6Sb6qyQ52NopNZMFdrn9orzdP8oqFeyYpF%2BQEtbp%2F5AMENkFkWUxHZn8NoSlO8P6G6ubSyDdY4QJPaFS4FxNhhm85WlZC9xfEZ1AGSSBOu9JJVYiKxXnL1yYLqrlWp5mfBHZeUBwEa%2FMjGxZEVYDhXo4PiU0jxN7fYmjaobp3DSgA5H3BcFuNG5d8CUnOlQcEie5b%2BUHOpI9zAk7qcuEUXbaZ5Mvh0t2jXCRALRKYDyBdbHlWAFo10dTIM6L3aSTM5uEz9%2FalXLXoWlMo7dTDpuO5bBfTq7YkoPExL3g3JJX47UhuLq85i3%2Bzxfvd7r%2Fmid69kbD3PnX%2Bj0QxaiShhyOZg6jl1HMeRRXvZap3FPCIfxbCf7j2TRqB5gYefBIIdGYjrdiL6HS8SbjXcROMwh2Fxnt505X4jmkmDcGmneU3z%2B84TSSFewcSpxGEGvHVkkU4OaT6vyFwsxCmdrR187tQZ7gn3ZkAiTps%2FfOPcL5QWXja06Z%2FHT3zboq6Hj9v9NBHzpC1eAK0YN8r4V2UMI3P0%2FsIPQYXhovoeLjJwq6snKZTX37ulE1mbS1uOY%2BZrvFYbLN5DdNL%2B%2Bl%2F%2BcWIpc0RSYBLo19xHpKeoeLjU2sxaYzK%2B92D4zKANdPPvsHPqJD1Y%2FBwCL%2FfZKaJfRK9Bj09ez1Z1ixTEKjIRCwuxijnJGq33faZchbwpMPpTfv43jEriGwXwoqOo9Mbj9ggPAil7O81XZxNT4vv4RoxXTN93V100rt3ClXauL%2BlNID%2BseN2CEZZqnygpTDf2an%2FVsmJGJJcc0goW3l43mhx2U79zeuT94cFPGpvITEbMtjmuNsUbOBuw6nqm5rAs%2FxjIsDRqfQxGQWfS0kuwuU6RRmiME2Ps0NrBENIbZzcbgw6%2BRIwClWkvEG%2BK%2FPdcAdfmRkAPWUNadxnhjeU2jNnzI1yYNIOhziUBPxgFEcAT45E7rWvf8ghT08HZvphzytPmD%2FxuvJaDdRgb6a30TjSpa7i%2BEHkIMxM5eH1kiwhN6xkTcBsJ87epGdFRWKhTGKYwCbaYid1nRs7%2BvQEU7MRYghok8KMTueELipohm3otuKo8V4a7w4TgTSBvPE%2BLPLJRwhM8KcjGlcpzF1NowRo6zeJJhbdPpouUH2NJzDcp7P4uUuUB9Cxt9B986My6zDnz1eyBvRMzj7TABfmfPFPoY3RfzBUzDm%2FA9lOGsM6d9WZj2CH0WxqiLDGmP1Ts9DWX%2FsYyqEGK5R1Xpnp7kRIarPtYliecp50ZIH6nqSkoCBllMCCE6JN%2BdoXobTpulALdmQV0%2Bppv%2FAjzIJrTHgX7jwRGEAeRgAxTomtemmIaH5NtV7xt8XS%2BqwghdJl1D06%2FWhpMtJ1%2FoQGoJ0%2F7ChYyefyAfsiQNWsO66UNVyl71RVPwATnbRO5K5mtxn0M2wuXXpAARNh6pQTcVX%2FTJ4jmosyKwhI6I870NEOsSaWlKVyOdb97C3Bt0pvzq8BagV5FMsNtJKmqIIM0HRkMkalIyfow9iS%2B5xGN5eKM8NE4E6hO4CvmpG%2BH2xFHTSNzloV0FjLdDmj5UfMjhUuEb3rkKK1bGAVaaherp6Ai6N4YJQzh%2FDdpo6al95EZN2OYolzxitgDgsWVGhMvddyQTwnRqRY04hdVJTwdhi4TiCPbLJ1Wcty2ozy6VDs4w77EOAQ5JnxUmDVPA3vXmADJZR0hIJEsuxXfYg%2BRIdV4fzGunV4%2B9jpiyM9G11iiesURK82o%2BdcG7FaCkkun2K2bvD6qGcL61uhoxNeLVpAxjrRjaEBrXsexZ9rExpMlFD8e3NM%2B0K0LQJvdEvpWYS5UTG9cAbNAzBs%3DpDsPXFGf2lEMcyGaK1ouARHUfqU0fzkeVwjXU9ORI%2Fs%3D", "qAAAAAQDAgEBAAAAvAIAAAAAAAAsAAAABABTaGRyAk4AdQg4AC4AMQAwABRhZGwcBykRPNQv++kTK0KePPqVVGgAAAAFAFNkYXRhXHicHYc7DkBQAATnIUqVa3jxLRzApxJBrxA18bmdw1l2k9nZG/Bcxxjt4/An3NnYOVlZOMRL7ld0NAQ9IzUTMy0DeUpMqkYkso+ZGFNiKbRW//Pyb0Guzwtozw4Q", ".eJxVjLsOAiEURP-F2hAuL8HSfr-BAPciq4ZNlt3K-O9KsoU2U8w5My8W4r7VsHdaw4zswoCdfrsU84PaAHiP7bbwvLRtnRMfCj9o59OC9Lwe7t9Bjb2OtbMkAEGQtQjekykmJy9JZIW-6CgUaCGsA6eSyV65s1Qya_xGKZrY-wPVYjdw:1ojOrE:bfOktjgLlUykwCIRIpvaTZRQMM3-UypscEN57ECtXis", "eyJhbGciOiJIUzI1NiJ9.eyJJc3N1ZXIiOiJJc3N1ZXIiLCJVc2VybmFtZSI6IkJhZFNlY3JldHMiLCJleHAiOjE1OTMxMzM0ODMsImlhdCI6MTQ2NjkwMzA4M30.ovqRikAo_0kKJ0GVrAwQlezymxrLGjcEiW_s3UJMMCo", "dUEvRldLekFNcklGZ3ZSbU1XaHJ0ZGxsLzhYTHlNTW43T3BVN05kZXE3WUhQOVVKbVA3Rm5WaSs5eG5QQ1VIRVBzeDFNTnNpZ0xCM1FKbzFZTEJISzhaNzFmVGYzME0waDFURVpCYm5TQlJFRmRFclYzNUZhR3VuN29PMmlkVHBrRi8wb3AwZWgvWmxObkFOYnpkeHR1YWpWZ3lnN0Y4ZW9xSk9LNVlQd0U4MmFsbWtLZUI5VzkzRkM4YXBFWXBWLS15L00xME1nVFp2ZTlmUWcxZVlpelpnPT0=--7efe7919a5210cfd1ac4c6228e3ff82c0600d841", "https://localhost/_fragment?_path=_controller%3Dsystem%26command%3Did%26return_value%3Dnull&_hash=Xnsvx/yLVQaimEd1CfepgH0rEXr422JnRSn/uaCE3gs=", "s%3A8FnPwdeM9kdGTZlWvdaVtQ0S1BCOhY5G.qys7H2oGSLLdRsEq7sqh7btOohHsaRKqyjV4LiVnBvc" ]

for test in tests: r = check_all_modules(test) if r: print(r) else: print("Key not found!")

root@kitploit:~
### すべてのモジュールを一度に切り出す```python
import httpx
from badsecrets.base import carve_all_modules
    
### using python httpx response object

# Create an HTTP client that ignores certificate errors
with httpx.Client(verify=False) as client:
    res = client.get("http://example.com/")
    r_list = carve_all_modules(requests_response=res)
    print(r_list)

### Using string

carve_source_text = """
    <html>
<head>
<title>Test</title>
</head>
<body>
<p>Some text</p>
<div class="JWT_IN_PAGE">
<p>eyJhbGciOiJIUzI1NiJ9.eyJJc3N1ZXIiOiJJc3N1ZXIiLCJVc2VybmFtZSI6IkJhZFNlY3JldHMiLCJleHAiOjE1OTMxMzM0ODMsImlhdCI6MTQ2NjkwMzA4M30.ovqRikAo_0kKJ0GVrAwQlezymxrLGjcEiW_s3UJMMCo</p>
</div>
</body>
</html>
"""

r_list = carve_all_modules(body=carve_source_text)
print(r_list)

コントリビューション

新しいモジュールを添えたプルリクエストをいただける以上に嬉しいことはありません。しかし、最も簡単な貢献方法は、私たちのワードリストの充実に協力していただくことです!公開されているキーを見つけた場合は、プルリクエストを送信してBadsecretsをより便利にする手助けをしてください。

モジュールのリクエストも常に大歓迎です!

計画中のモジュールと今後の開発

  • Laravel
  • Express
  • 暗号化製品を介して検出可能なデフォルトキーを持つネットワークデバイスに関する調査(例:Palo Alto Global Protectのデフォルトマスターキー)