تجاوز سعة المخزن المؤقت القائم على SEH في خادم مشاركة الملفات السهل 7.2، يوضح كيف يمكن لمعامل HTTP POST المُصدَّق أن يفسد سلسلة معالجة الاستثناءات.
تجاوز سعة المخزن المؤقت القائم على SEH في Easy File Sharing Web Server 7.2 يوضح كيف يمكن لمعامل POST HTTP المُوثّق أن يفسد سلسلة معالج الاستثناءات.
هذا المستودع هو جزء من المواد التي أستخدمها عند تدريس استغلال تلف الذاكرة (بالإضافة إلى عملي المعتاد، أقوم أيضًا بالتدريس في دورات مختلفة في الأمن السيبراني حيث أساعد في تدريب الجيل القادم من مهندسي الهندسة العكسية).
CVE-2018-18912 هو الحالة التي أستخدمها للانتقال من الكتابة فوق EIP التقليدية إلى الاستغلال القائم على SEH. بمجرد أن يفهم الطلاب كيفية عمل الكتابة المباشرة فوق عنوان الإرجاع، فإن الخطوة التالية هي فهم ما يحدث عندما يكون المكدس فاسدًا لدرجة أن البرنامج يثير استثناءً قبل العودة، وكيف تصبح سلسلة معالجة الاستثناءات هي سطح الهجوم بدلاً من ذلك. يُظهر هذا CVE هذا الانتقال بوضوح: التجاوز عميق بما يكفي للوصول إلى سلسلة SEH، ومسار الاستغلال يتبع التقنية الكلاسيكية POP POP RETN التي يحتاج كل مطور استغلال إلى فهمها. تم ترك تجاوز DEP الاختياري عبر ROP كامتداد للطلاب الذين يرغبون في المضي قدمًا، نفس التجاوز، إستراتيجية أدوات مختلفة، مشكلة أصعب بكثير.
تصيب هذه الثغرة Easy File Sharing Web Server 7.2، وهو تطبيق ويب خفيف الوزن على Windows تم استخدامه على نطاق واسع لمشاركة الملفات البسيطة. تمت كتابة البرنامج دون النظر إلى التخفيفات الأمنية الحديثة. ما يجعل هذه الحالة مثيرة للاهتمام بشكل خاص من منظور تعليمي هو مجموعة العوامل المعنية:
هذا المزيج يجعل CVE-2018-18912 حالة ممتازة لتعليم تقنيات تطوير الاستغلال تتجاوز الأساسيات.
Easy File Sharing Web Server 7.2 هو تطبيق Windows يسمح للمستخدمين بمشاركة الملفات عبر HTTP. يتضمن وظائف مثل تصفح الملفات، مصادقة المستخدم، ونظام منتدى مدمج.
تقبل وظيفة المنتدى طلبات POST لإنشاء مواضيع جديدة. أحد حقول النموذج التي يتعامل معها هذا النقطة هو معامل author. داخليًا، يقوم التطبيق بنسخ هذه القيمة التي يتحكم بها المستخدم إلى مخزن مؤقت ثابت الحجم على المكدس دون التحقق من الطول.
تم اكتشاف الثغرة والإبلاغ عنها في عام 2018. تم نشر الإثبات الأصلي (PoC) بعد ذلك بفترة وجيزة، مما أظهر كلاً من الانهيار وسلسلة استغلال عاملة بما في ذلك أدوات ROP من وحدة ImageLoad.dll المرفقة.
التفاصيل التقنية الرئيسية:
يقوم Easy File Sharing Web Server بمعالجة طلبات HTTP POST الموجهة إلى /forum.ghp عندما يقوم المستخدم بإنشاء موضوع منتدى جديد. أحد المعاملات المقبولة هو author، والذي يتم نسخه إلى مخزن مؤقت محلي على المكدس دون أي فحص للطول.
عند إجراء الهندسة العكسية للثنائي، يمكن ملاحظة أن معالج حقل النموذج هذا يستخدم مخزنًا مؤقتًا بحجم ثابت وعملية نسخ غير آمنة. يبدو إصدار مبسط من المنطق الضعيف كما يلي:
char author_buffer[64];
strcpy(author_buffer, user_input);
نظرًا لأن المخزن المؤقت الوجهة له حجم ثابت ولم يتم التحقق من طول الإدخال، فإن إرسال سلسلة طويلة بما يكفي في حقل author يتسبب في نسخ البيانات إلى ما بعد نهاية المخزن المؤقت.
مع كتابة المزيد من البيانات، يصبح تخطيط المكدس فاسدًا. على عكس الكتابة البسيطة فوق عنوان الإرجاع، يصل التجاوز إلى سلسلة معالج الاستثناءات المنظمة (SEH) المخزنة على المكدس. عندما يتم إثارة استثناء نتيجة للمكدس الفاسد، يقوم نظام التشغيل بتتبع سلسلة SEH ونقل التحكم إلى عنوان المعالج الذي يتحكم فيه المهاجم.
لذلك يتبع تدفق الاستغلال تقنية الكتابة فوق SEH:
هذا يجعل الثغرة أكثر تعقيدًا في الاستغلال من الكتابة فوق EIP الأساسية، ولكنها أيضًا أكثر تمثيلاً للسيناريوهات الواقعية.
يمكن إعادة إنتاج الانهيار عن طريق إرسال سلسلة طويلة في معامل author لطلب POST إلى /forum.ghp بعد المصادقة ببيانات اعتماد صالحة. مثال باستخدام Python:
import socket
HOST = '127.0.0.1'
PORT = 80
payload = b"A" * 500
request = (
b"POST /forum.ghp?forumid=1 HTTP/1.1\r\n"
b"Host: 127.0.0.1\r\n"
b"Content-Type: application/x-www-form-urlencoded\r\n"
b"Cookie: UserID=test; PassWD=test; SESSIONID=1234\r\n"
b"Connection: close\r\n"
b"\r\n"
b"author=" + payload + b"&passwd=test&title=test&content=test&Submit=Submit\r\n"
)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send(request)
s.close()
عند التنفيذ تحت مصحح أخطاء، يظهر الانهيار سلسلة SEH فاسدة وانتهاك وصول، مما يؤكد أن البيانات التي يتحكم بها المستخدم قد كتبت فوق مؤشر معالج الاستثناءات.
الهدف من هذا المستودع ليس فقط إظهار الانهيار، بل أيضًا السير خلال عملية الاستغلال الكاملة خطوة بخطوة، متبعًا المنهجية المستخدمة عند تطوير استغلالات حقيقية قائمة على SEH.
للحفاظ على ملف README الرئيسي نظيفًا، تم وضع ملاحظات الاستغلال التفصيلية والبرامج النصية وخطوات مصحح الأخطاء داخل مجلد Vulnerability 📂 في هذا المستودع.
هناك ستجد سير العمل الكامل المستخدم لاستغلال هذا CVE، بما في ذلك: