
تجاوز سعة المخزن المؤقت الكلاسيكي المعتمد على المكدس في SLMail 5.1 يوضح كيف يمكن اختراق خوادم البريد الإلكتروني المبكرة عبر أوامر SMTP و POP3 كبيرة الحجم.
تجاوز سعة المخزن المؤقت المبني على المكدس الكلاسيكي في SLMail 5.5 يوضح كيف يمكن اختراق خوادم البريد المبكرة من خلال أوامر SMTP وPOP3 كبيرة الحجم.
هذا المستودع جزء من المواد التي أستخدمها عند تدريس استغلال تلف الذاكرة (بالإضافة إلى عملي المعتاد، أقوم أيضًا بالتدريس في دورات مختلفة في الأمن السيبراني حيث أساعد في تدريب الجيل القادم من مهندسي الهندسة العكسية).
CVE-2003-0264 هي واحدة من أولى الحالات التي أقدمها عند تدريس تجاوز سعة المخزن المؤقت المبني على المكدس التقليدي عبر بروتوكول شبكة. إنها نظيفة وموثقة جيدًا، ومسار الاستغلال مباشر، لا SEH، لا egghunter، لا قيود على المساحة. يرسل الطالب حمولة، يكتب فوق EIP، يهبط على أداة JMP ESP، ويحصل على شل. هذه الوضوح هو بالضبط ما يجعلها مفيدة كنقطة بداية.
SLMail 5.5 هو خادم بريد إلكتروني قديم لنظام ويندوز. الثغرة موجودة في خدمة POP3، وتحديدًا في معالج أمر PASS، الذي ينسخ إدخال المستخدم مباشرة إلى مخزن مؤقت ثابت الحجم على المكدس دون أي تحقق من الطول. ما يجعل هذه الحالة مفيدة بشكل خاص للتدريس هو قلة العناصر المتحركة:
هذا المزيج — مواجه للشبكة، بدون مصادقة، كتابة مباشرة على EIP، وبدون تخفيفات حديثة — يجعل CVE-2003-0264 واحدة من أنقى الأمثلة الواقعية لتجاوز سعة المكدس التقليدي التي لا تزال تعمل على إصدارات ويندوز الحديثة.
SLMail هو خادم بريد إلكتروني لنظام ويندوز يوفر خدمات SMTP وPOP3 والإدارة. تستمع خدمة POP3 على منفذ TCP 110 وتتعامل مع أوامر استرجاع البريد القياسية. الثغرة موجودة في معالج أمر PASS، الذي يعالج وسيط كلمة المرور المرسلة من قبل العميل المتصل.
التفاصيل التقنية الرئيسية:
تتعامل خدمة POP3 في SLMail مع أمر PASS عن طريق نسخ وسيط كلمة المرور المقدمة إلى مخزن مؤقت ثابت الحجم على المكدس باستخدام دالة غير آمنة دون فحص الطول. نسخة مبسطة من المنطق المعرض تبدو كالتالي:
char password_buffer[256];
strcpy(password_buffer, pass_argument);
إرسال سلسلة طويلة بما يكفي كوسيط PASS يؤدي إلى نسخ يتجاوز نهاية المخزن المؤقت، مما يؤدي إلى إتلاف المكدس حتى يتم الكتابة فوق عنوان الإرجاع المحفوظ. عندما تعود الدالة، يقوم المعالج المركزي بتحميل القيمة التي يتحكم بها المهاجم من المكدس إلى EIP ويقفز إليها.
يمكن إعادة إنتاج الانهيار عن طريق إرسال وسيط PASS كبير الحجم عبر POP3. لا حاجة إلى بيانات اعتماد صالحة. مثال باستخدام بايثون:
import socket
HOST = '127.0.0.1'
PORT = 110
payload = b"A" * 3000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.recv(1024)
s.send(b"USER username\r\n")
s.recv(1024)
s.send(b"PASS " + payload + b"\r\n")
s.close()
عند التنفيذ تحت مصحح أخطاء، يظهر الانهيار مع كتابة EIP ببيانات يتحكم بها المستخدم:
EIP = 41414141
مما يؤكد أن عنوان الإرجاع المحفوظ قد تم إتلافه بسبب التجاوز.
الهدف من هذا المستودع ليس فقط عرض الانهيار، بل السير خلال عملية الاستغلال الكاملة خطوة بخطوة، من الفازينغ إلى شل عكسية عاملة.
لإبقاء ملف README الرئيسي نظيفًا، تم وضع ملاحظات الاستغلال المفصلة والنصوص وخطوات المصحح داخل مجلد الثغرة 📂 من هذا المستودع.
ستجد هناك سير العمل الكامل المستخدم لاستغلال هذا CVE، بما في ذلك: