Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2017-5638-Attack-and-Defense — Dockerベースのセキュリティラボで、Apache Struts2 S2-045(CVE-2017-5638)の悪用と防御を実演し、脆弱性のあるアプリケーションとパッチ適用済みアプリケーションをWAF保護付きで提供して、実践的なトレーニングを可能にします。 | Kitploit
ツール/GitHubGitHub/acharaf06/cve-2017-5638-attack-and-defense
防御ツール脆弱性分析ウェブアプリケーション悪用WAFバイパスペネトレーションテスト学習と教育ラボと実践
GitHubacharaf06/cve-2017-5638-attack-and-defense

CVE-2017-5638-Attack-and-Defense

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

Dockerベースのセキュリティラボで、Apache Struts2 S2-045(CVE-2017-5638)の悪用と防御を実演し、脆弱性のあるアプリケーションとパッチ適用済みアプリケーションをWAF保護付きで提供して、実践的なトレーニングを可能にします。

リポジトリを見る
158ヶ月前未レビュー

Apache Struts2 S2-045 防御 & 悪用ラボ

Apache Struts2 S2-045 脆弱性 (CVE-2017-5638) に対する悪用と防御の両方を実演する Docker ベースのセキュリティラボ。このラボには以下が含まれます:

  1. 脆弱なアプリケーション: Struts 2.3.31 (S2-045 に対して脆弱) – 悪用デモンストレーション用
  2. 防御ラボ: WAF 保護を備えた Struts 6.3.x (パッチ済み) – 防御訓練用

⚠️ セキュリティ警告: このラボには動作するエクスプロイトと脆弱なコードが含まれています。隔離された環境でのみ使用してください。公開ネットワークに公開しないでください。

アーキテクチャ概要

root@kitploit:~
┌─────────────────────────────────────────────────────────────┐
│                     ホスト (127.0.0.1 のみ)                  │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ┌─────────────────┐    ┌─────────────────┐              │
│  │   Simulator     │───▶│  Nginx Proxy    │              │
│  │  (curl-based)   │    │  + WAF Rules    │              │
│  └─────────────────┘    └────────┬────────┘              │
│                                  │                        │
│                          ┌───────┴────────┐              │
│                          │                │                │
│                  ┌───────▼──────┐ ┌───────▼──────┐        │
│                  │  防御アプリ  │ │  脆弱アプリ  │        │
│                  │ (Struts 6.3) │ │ (2.3.31)    │        │
│                  │ ポート: 8080 │ │ ポート: 8081│        │
│                  └──────────────┘ └──────────────┘        │
│                                                             │
│  ┌─────────────────┐                                      │
│  │   Exploit       │───▶ 脆弱アプリ (8081)                │
│  │   コンテナ      │                                      │
│  └─────────────────┘                                      │
│                                                             │
│  ログのマウント先: ./logs/nginx/, ./logs/app/,             │
│                    ./logs/app-vulnerable/                  │
└─────────────────────────────────────────────────────────────┘

コンポーネント

はじめに

前提条件

  • Docker (バージョン 20.10 以降)
  • Docker Compose (バージョン 2.0 以降)
  • Python 3 (オプション、エクスプロイトスクリプトを直接実行する場合)
  • curl (オプション、手動テスト用)

インストール

1. リポジトリのクローン

root@kitploit:~
# リポジトリのクローン
git clone https://github.com/ACharaf06/cybersec.git
cd cybersec

2. ビルドと実行

root@kitploit:~
# すべてのコンテナをビルド(初回は数分かかる場合があります)
docker compose build

# 防御ラボを起動(nginx + パッチ済みアプリ)
docker compose up -d nginx app

# 脆弱なアプリを起動(悪用デモ用)
docker compose up -d app-vulnerable

# サービスの実行を確認
docker compose ps

# サービスがヘルシーになるのを待つ(約60秒)
sleep 60

# ヘルスエンドポイントの確認
curl http://127.0.0.1:8080/struts-lab/health  # 防御ラボ
curl http://127.0.0.1:8081/struts-lab/health   # 脆弱アプリ

期待される出力:

  • 防御ラボ: "status":"healthy" と "strutsVersion":"6.3.0.2 (patched - not vulnerable to S2-045)" を含む JSON 応答
  • 脆弱アプリ: "status":"healthy" と "strutsVersion":"2.3.31 (VULNERABLE to S2-045)" を含む JSON 応答

2. 防御ラボのテスト

root@kitploit:~
# シミュレーターコンテナの実行(防御メカニズムのテスト)
docker-compose run --rm simulator

# または個別のテストを手動で実行:
# 正当なアップロード
curl -X POST -F "[email protected]" http://127.0.0.1:8080/struts-lab/upload

# 不審な Content-Type(WAF によってブロックされる)
curl -v -X POST \
  -H "Content-Type: multipart/form-data; boundary=----SUSPICIOUS" \
  http://127.0.0.1:8080/struts-lab/upload

3. 悪用デモンストレーション

root@kitploit:~
# エクスプロイトコンテナの実行(S2-045 悪用のデモ)
docker-compose --profile exploit run --rm exploit

# または Python エクスプロイトスクリプトを直接使用
python3 exploit/exploit.py http://127.0.0.1:8081/struts-lab 'whoami'

# または bash スクリプト
./exploit/demo_exploit.sh

⚠️ 警告: 脆弱なアプリケーションは意図的に悪用可能です。隔離された環境でのみ実行してください。

4. ログの確認

root@kitploit:~
# 防御ラボのログ
tail -f logs/nginx/access.log      # Nginx アクセスログ
tail -f logs/nginx/error.log       # WAF ブロック
tail -f logs/app/struts-lab.log    # 防御アプリのログ

# 脆弱アプリのログ
tail -f logs/app-vulnerable/struts-lab.log  # 脆弱アプリのログ

# 全ログの結合
docker-compose logs -f

観察すべき点

防御ラボ (ポート 8080)

正当なリクエスト:

  • Nginx アクセスログ: 200 応答
  • アプリログ: アップロード処理メッセージ(INFO レベル)
  • リクエストは正常に完了

不審/不正なリクエスト:

  • Nginx アクセスログ: 403 Forbidden または 400 Bad Request
  • Nginx エラーログ: WAF ルールがトリガーされたメッセージ
  • アプリログ: リクエストがアプリに到達した場合、解析エラーが表示される可能性あり
  • リクエストはブロックまたはサニタイズされる

脆弱アプリ (ポート 8081)

成功した悪用:

  • HTTP 200 または 500 応答
  • コマンド出力が応答本文に表示
  • OGNL 式が評価される
  • システムコマンドが実行される

ログの例:

Nginx による不審な Content-Type のブロック(防御ラボ):

root@kitploit:~
[WAF] Blocked suspicious Content-Type pattern - Request ID: abc123

アプリによるリクエストメタデータの記録(防御ラボ):

root@kitploit:~
[REQUEST] ID=abc123 Content-Type=multipart/form-data Method=POST URI=/upload
[UPLOAD] Processing file upload for request abc123

成功した悪用(脆弱アプリ):

root@kitploit:~
HTTP/1.1 200 OK
...
root
(コマンド出力が応答本文に表示)

比較: 脆弱アプリ vs 防御ラボ

セキュリティ上の注意

隔離

  • 全サービスは 127.0.0.1 にのみバインド(外部アクセス不可)
  • コンテナ間通信は内部 Docker ネットワーク
  • ポートは 0.0.0.0 に公開しない
  • 脆弱アプリは決して公開ネットワークに公開してはならない

防御層(防御ラボ)

  1. Nginx WAF ルール: 不審な Content-Type パターンをアプリに到達する前にブロック
  2. レート制限: IP あたり 10 リクエスト/秒
  3. リクエストサイズ制限: 最大ボディ 10MB、最大ヘッダー 8KB
  4. パッチ済み Struts: Struts 6.3.x を使用(S2-045 に対して脆弱ではない)
  5. 包括的ログ: すべての不審なアクティビティを記録

S2-045 とは何か

S2-045 (CVE-2017-5638) は Apache Struts2 バージョン 2.3.5~2.3.31 および 2.5~2.5.10 における重大な脆弱性であり、以下の特徴がありました:

  • 悪意のある Content-Type ヘッダーによって OGNL 式が注入される可能性
  • Jakarta Multipart パーサーがこれらの式を評価
  • これによりリモートコード実行 (RCE) に至る

脆弱アプリ(ポート 8081)はこの脆弱性を実演します。 防御ラボ(ポート 8080)はそれに対する保護方法を示します。

ファイル構造

root@kitploit:~
.
├── docker-compose.yml          # コンテナオーケストレーション
├── README.md                   # このファイル
├── EXPLOITATION_GUIDE.md      # 詳細な悪用ガイド
├── TECHNICAL_DETAILS.md        # 技術実装の詳細
├── GLOSSARY.md                 # セキュリティ用語集
├── nginx/
│   ├── nginx.conf              # メインの nginx 設定
│   └── waf-rules.conf          # S2-045 パターン用 WAF ルール
├── app/                        # 防御ラボ(パッチ済み)
│   ├── Dockerfile              # Tomcat + Maven ビルド
│   └── struts-app/
│       ├── pom.xml             # Maven プロジェクト (Struts 6.3.x)
│       └── src/main/
│           ├── java/           # アクションクラス
│           ├── resources/      # Struts + Log4j 設定
│           └── webapp/         # JSP ビュー + web.xml
├── app-vulnerable/             # 脆弱アプリ(悪用用)
│   ├── Dockerfile              # Tomcat + Maven ビルド
│   └── struts-app/
│       ├── pom.xml             # Maven プロジェクト (Struts 2.3.31)
│       └── src/main/
│           ├── java/           # アクションクラス
│           ├── resources/      # Struts + Log4j 設定
│           └── webapp/         # JSP ビュー + web.xml
├── exploit/                    # 悪用ツール
│   ├── Dockerfile              # エクスプロイトコンテナ
│   ├── demo_exploit.sh         # Bash エクスプロイトスクリプト
│   └── exploit.py              # Python エクスプロイトスクリプト
├── simulator/
│   ├── Dockerfile              # Alpine + curl
│   └── simulate.sh             # テストスクリプト
└── logs/                       # マウントされたログディレクトリ
    ├── nginx/
    ├── app/                    # 防御ラボのログ
    └── app-vulnerable/         # 脆弱アプリのログ

クリーンアップ

root@kitploit:~
# すべてのコンテナを停止
docker compose down

# ボリュームとログを削除
docker compose down -v
rm -rf logs/

# 完全クリーンアップ(イメージも含む)
docker compose down --rmi all -v

開発環境のセットアップ

プロジェクト構造

プロジェクトは次のように構成されています:

  • app/ - 防御ラボアプリケーション (Struts 6.3.x、パッチ済み)
  • app-vulnerable/ - 脆弱アプリケーション (Struts 2.3.31)
  • exploit/ - 悪用ツールとスクリプト
  • nginx/ - WAF ルール付き Nginx リバースプロキシ設定
  • simulator/ - 攻撃パターンシミュレーター
  • logs/ - アプリケーションログ (gitignore 対象)

個別コンポーネントのビルド

root@kitploit:~
# 脆弱アプリのみ再ビルド
docker compose build app-vulnerable
docker compose up -d app-vulnerable

# 防御アプリのみ再ビルド
docker compose build app
docker compose up -d app

# エクスプロイトコンテナの再ビルド
docker compose build exploit

ドキュメント

  • EXPLOITATION_GUIDE.md: S2-045 脆弱性のメカニズムと悪用手順の詳細ガイド
  • TECHNICAL_DETAILS.md: ラボの技術実装の詳細
  • GLOSSARY.md: このラボで使用するセキュリティ用語の用語集

教育リソース

  • Apache Struts Security Bulletins
  • CVE-2017-5638 Details
  • OWASP Injection Prevention
  • Metasploit S2-045 Module

⚠️ 重要な警告

  1. 脆弱なアプリケーション: ポート 8081 のアプリは意図的に脆弱です。公開ネットワークに公開しないでください。
  2. 動作するエクスプロイト: このラボには動作するエクスプロイトコードが含まれています。隔離された環境でのみ使用してください。
  3. 教育目的: このラボはセキュリティ教育、研究、および許可された侵入テストのみを目的としています。
  4. 法的遵守: 自分が所有するシステム、またはテストするための明示的な書面による許可を得ているシステムでのみ使用してください。

免責事項: このラボは教育目的のみです。責任を持って、管理された環境でのみ使用してください。

ツールをダウンロード
コンテナ目的ポート
nginxWAF ルール、レート制限付きリバースプロキシ127.0.0.1:8080
appTomcat 9 + Struts 6.3.x (パッチ済み、防御ラボ)内部のみ
app-vulnerableTomcat 9 + Struts 2.3.31 (脆弱、悪用用)127.0.0.1:8081
exploitエクスプロイトデモンストレーションコンテナN/A
simulatorテストリクエスト(良性 + 不審なパターン)の送信N/A
機能脆弱アプリ (ポート 8081)防御ラボ (ポート 8080)
Struts バージョン2.3.31 (脆弱)6.3.0.2 (パッチ済み)
WAF 保護❌ なし✅ Nginx WAF ルール
レート制限❌ なし✅ 10 req/s
リクエストサイズ制限❌ なし✅ ボディ 10MB、ヘッダー 8KB
セキュリティログ⚠️ 最小限✅ 包括的
OGNL インジェクション✅ 悪用可能❌ ブロック/パッチ済み
RCE の可能性✅ あり❌ なし
使用目的悪用デモ防御訓練