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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
SC3010-Computer-Security — استخدام Struts2 و PowerShell لإعادة إنشاء ثغرة CVE-2017-5638 OGNL Injection | Kitploit
أدوات/GitHubGitHub/aipeacs/sc3010-computer-security
التحليل الثابتتحليل الثغرات الأمنيةتحليل الكودالاستغلالاستغلال تطبيقات الويباختبار الاختراقالتعلم والتعليمتطوير الحمولاتمختبرات وتدريب عمليArchived
GitHubaipeacs/sc3010-computer-security

SC3010-Computer-Security

28منذ شهر واحدلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

استخدام Struts2 و PowerShell لإعادة إنشاء ثغرة CVE-2017-5638 OGNL Injection

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

SC3010-Computer-Security — إعادة إنشاء هجوم CVE-2017-5638

هذا المستودع جزء من مشروع مقرر SC3010 لأمن الحاسوب.
يعيد إنشاء CVE-2017-5638، وهي ثغرة حرجة لتنفيذ التعليمات البرمجية عن بُعد (Remote Code Execution) في Apache Struts 2 (الإصدارات 2.3.5–2.3.31 و2.5–2.5.10)، والتي استُغلت بشكل شهير في اختراق بيانات Equifax عام 2017 لتسريب السجلات الشخصية لنحو 147 مليون شخص.

تنشأ الثغرة من خلل تصميمي واحد: عندما يفشل Apache Struts في تحليل طلب رفع من نوع multipart/form-data، فإنه يبني رسالة خطأ عبر تضمين ترويسة Content-Type الخام — دون تعقيمها — داخل سلسلة نصية تُمرَّر بعد ذلك عبر مُقيِّم تعبيرات OGNL. وبالتالي فإن المهاجم الذي يضع تعبير OGNL داخل ترويسة Content-Type يحصل على تنفيذه من جانب الخادم بصلاحيات مستخدم عملية Tomcat.

يحتوي هذا المستودع على:

  • خادم Java/Maven مصاب بالثغرة يعمل فعليًا (Struts2 2.3.28) مع نقطة نهاية لرفع الملفات.
  • سكربت استغلال PowerShell يوضح سلسلة الحقن → RCE الكاملة.
  • ملفات مصدرية مرجعية مشروحة من Apache Struts 2.3.28 توضح كل خطوة من سلسلة الاستدعاء.

المعرفة الأساسية

  • كيف يعمل حقن OGNL؟

بنية المستودع

SC3010-Computer-Security/
├── simulation/
│   ├── backend/          # Vulnerable Apache Struts2 2.3.28 server (Java/Maven)
│   └── attack-script/    # Exploit script for CVE-2017-5638
│       └── exploit_cve_2017_5638.ps1   # PowerShell (cross-platform)
├── struts-src-code/          # Apache Struts2 reference source + legal notices
│   ├── licenses/             # LICENSE, NOTICE, and component licenses
│   └── src/
│       ├── struts2-core/     # Request pipeline classes + vulnerable JakartaMultiPartRequest
│       ├── xwork2/           # ActionContext.java, OgnlUtil.java
│       └── ognl/             # OgnlContext.java
├── diagrams/                 # State-machine + sequence diagrams, annotated OGNL payload
└── _notes/                   # Background reading

محاكاة الاستغلال

  • راجع simulation/README.md للحصول على تعليمات الإعداد والاستخدام.

مخطط آلة الحالة للهجوم

يوضح المخطط أدناه كل فرع قرار في مسار معالجة طلبات Struts2. المسار الأحمر هو المسار الذي يفرضه المهاجم؛ أما الفروع الرمادية → ... فهي مسارات آمنة لا تنطبق أثناء الاستغلال.

flowchart TD
    Start(["Attacker sends HTTP POST /upload.action<br/>Content-Type: &#37;&#123;OGNL_PAYLOAD&#125;.multipart/form-data"])
    Start --> PIPE

    PIPE["<b>Struts2 filter → wrap → parse pipeline</b><br/>doFilter() → PrepareOperations.wrapRequest()<br/>→ Dispatcher.wrapRequest() → new MultiPartRequestWrapper()"]
    PIPE --> D_CT{"Content-Type contains<br/>multipart/form-data?"}
    D_CT -- "No → normal request ..." --> OUT_NORM([non-upload path ...])
    D_CT -- "Yes (attacker appends<br/>.multipart/form-data to payload)" --> PARSE

    PARSE[/"<b>JakartaMultiPartRequest.parse()</b><br/>→ Commons FileUpload.parseRequest()"/]
    PARSE --> D_VALID{"FileUpload can parse<br/>Content-Type?"}
    D_VALID -- "Yes → normal file upload ..." --> OUT_OK([files extracted, action executes ...])
    D_VALID -- "No — malformed Content-Type<br/>throws InvalidContentTypeException<br/>(message = raw Content-Type string)" --> CATCH

    CATCH["parse() catch block<br/>calls buildErrorMessage(e, &#123;&#125;)"]
    CATCH --> FIND

    FIND[/"<b>buildErrorMessage()</b><br/>→ LocalizedTextUtil.findText(class, errorKey, locale, e.getMessage(), args)"/]
    FIND --> D_KEY{"Resource bundle has key<br/>struts.messages.upload.error.*?"}
    D_KEY -- "Yes → safe localised message ..." --> OUT_SAFE([error displayed safely ...])
    D_KEY -- "No — falls back to<br/>e.getMessage() as the default<br/>(attacker's raw Content-Type)" --> TRANSLATE

    TRANSLATE["TextParseUtil.translateVariables()<br/>scans string for &#37;&#123;...&#125; expressions"]
    TRANSLATE --> D_OGNL{"String contains<br/>&#37;&#123;...&#125; OGNL expression?"}
    D_OGNL -- "No → plain error string ..." --> OUT_PLAIN([safe error message ...])
    D_OGNL -- "Yes — evaluates OGNL<br/>inside attacker content" --> SANDBOX

    SANDBOX[/"<b>OGNL sandbox bypass</b><br/>#ognlUtil.getExcludedClasses().clear()<br/>#ognlUtil.getExcludedPackageNames().clear()"/]
    SANDBOX --> ACCESS

    ACCESS[/"<b>Unrestricted reflection</b><br/>#context.setMemberAccess(DEFAULT_MEMBER_ACCESS)"/]
    ACCESS --> RCE

    RCE[/"<b>RCE</b><br/>Runtime.getRuntime().exec(cmd)"/]
    RCE --> Done([Command executed as Tomcat process user])

    style Start fill:#d32f2f,color:#fff
    style Done fill:#d32f2f,color:#fff
    style OUT_NORM fill:#9e9e9e,color:#fff
    style OUT_OK fill:#9e9e9e,color:#fff
    style OUT_SAFE fill:#9e9e9e,color:#fff
    style OUT_PLAIN fill:#9e9e9e,color:#fff
    style SANDBOX fill:#b71c1c,color:#fff
    style ACCESS fill:#b71c1c,color:#fff
    style RCE fill:#b71c1c,color:#fff
    style CATCH fill:#e65100,color:#fff
    style TRANSLATE fill:#e65100,color:#fff

للاطلاع على آلة الحالة الكاملة مع شروح الفروع، راجع diagrams/cve-2017-5638-state-machine.md.
للاطلاع على عرض مخطط التسلسل وتحليل حمولة OGNL المشروحة، راجع diagrams/cve-2017-5638-attack-chain.md.


إشعارات برامج الجهات الخارجية

يستنسخ هذا المستودع أجزاءً من الشيفرة المصدرية لـ Apache Struts 2.3.28 لأغراض البحث الأكاديمي في الأمن.

Apache Struts حقوق النشر © 2000–2016 مؤسسة Apache Software Foundation.
مرخّص بموجب Apache License, Version 2.0.
تتوفر نسخة من الترخيص على struts-src-code/licenses/LICENSE.txt.
إشعار الإسناد الكامل المطلوب بموجب Apache License موجود في struts-src-code/licenses/NOTICE.txt.

يتضمن Apache Struts 2 مكوّنات إضافية من جهات خارجية، يخضع كل منها لترخيصه الخاص:

المكوّنملف الترخيص
OGNL (Object-Graph Navigation Library)struts-src-code/licenses/OGNL-LICENSE.txt
XWorkstruts-src-code/licenses/XWORK-LICENSE.txt
FreeMarkerstruts-src-code/licenses/FREEMARKER-LICENSE.txt

مراجع المصدر:

  • apache/struts @ STRUTS_2_3_28 — نواة Struts2 وXWork
  • jkuhnert/ognl — OGNL 3.0.x
  • Gemini — استشارة بشأن لغات OGNL العامة.
تنزيل الأداة