
- بواسطة x32x01 ||



إيه هي ثغرة Buffer Overflow؟
ثغرة Buffer Overflow هي خطأ برمجي يحصل لما برنامج (غالبًا بلغة زي C أو C++) بيخزّن بيانات أكتر من السعة المخصّصة لمتغير في الذاكرة (Buffer)، فالبيانات الزيادة بتكتب على مناطق ذاكرة مجاورة، وده ممكن يسبب تغيير في سلوك البرنامج أو تنفيذ أوامر خبيثة.ليه بنتكلم عنها؟
فيه سوء فهم إن Buffer Overflow بس تغيير قيمة في الذاكرة وخلاص. الحقيقة إنها أخطر من كده بكتير! لو استُغلت صح، المخترق ممكن يتحكم بالكامل في النظام. النهاردة هنصحح المفاهيم دي ونشرح إزاي الثغرة دي بتتحول لكارثة.إزاي بتحصل الثغرة؟
السبب الرئيسي هو خطأ المبرمج، زي:- استقبال مدخلات من المستخدم بدون التحقق من طولها.
- تخزين بيانات في متغير محدود السعة بدون حماية.
مثال بسيط بلغة C
C:
int age = 20;
char name[16];
name
مخصّص له 16 بايت بس، ودخّل المستخدم 17 حرف، الـ 16 هيتخزنوا في الـ name
، والحرف الزايد هيكتب على الذاكرة اللي بعدها (زي متغير age
). ده لأن الـ Stack (الذاكرة المؤقتة) بيخزّن البيانات بشكل تكديسي (LIFO - Last In, First Out).ليه ده خطير؟
لو المخترق عرف إن فيه متغير زيpassword
جنب الـ name
، ممكن يدخّل بيانات زيادة عشان يغيّر قيمة الـ password
، أو أخطر من كده، يحقن كود خبيث (Shellcode) يتحكم في البرنامج.أنواع هجمات Buffer Overflow
ثغرة Buffer Overflow (خاصة Stack Buffer Overflow) بتُستغل بطرق مختلفة. إليك أهم السيناريوهات:1. تغيير سلوك البرنامج
- المخترق بيستغل الثغرة عشان يغيّر قيم متغيرات مهمة في الذاكرة.
- مثال: لو فيه متغير
is_admin = false
، المخترق ممكن يكتب عليهtrue
عشان يدخل كنظام إداري.
2. تنفيذ Shellcode
- Shellcode هو كود بلغة Assembly يتحوّل لـ Hex Bytes بترتيب Little-Endian، وبيُحقن في الـ Stack.
- لما البرنامج يعمل
return
، بينفّذ الـ Shellcode بدل العودة للكود الأصلي. - النتيجة؟ المخترق بيقدر ينفّذ أي أمر، زي فتح Shell على السيرفر أو تنزيل ملفات خبيثة.
- مثال: حقن Shellcode يفتح
reverse shell
يسمح للمخترق بالتحكم الكامل.
3. هجمات Return-to-Libc
- لو فيه حمايات زي NX Bit (بتمنع تنفيذ الكود في الـ Stack)، المخترق بيستخدم مكتبات موجودة زي libc.
- libc مكتبة فيها دوال جاهزة زي
system()
أوexec()
. - المخترق بيستغل الثغرة عشان يغيّر عنوان الـ
return
ليشير لدالة في libc، زيsystem("sh")
عشان يفتح Shell. - المشكلة؟ لو النظام مش محمي بـ ASLR (Address Space Layout Randomization)، العناوين بتكون ثابتة وسهلة الاستغلال.
- مثال: استدعاء
system("/bin/sh")
عشان المخترق يتحكم في السيرفر.
هل استغلال Buffer Overflow صعب؟
- لو خبرتك محدودة: استغلال الثغرة يحتاج فهم جيد للذاكرة، Assembly، وهيكلية الـ Stack. صعب شوية للمبتدئين، لكن مع التدريب بيبقى ممكن.
- لو فيه حمايات: زي ASLR، NX، أو Stack Canaries، الاستغلال بيبقى معقد جدًا ويحتاج تقنيات زي ROP (Return-Oriented Programming).
- لو مافيش حمايات: الثغرة بتكون خطيرة جدًا وسهلة الاستغلال، خاصة على أنظمة قديمة.
- لو كانت CVE: لو الثغرة مسجّلة كـ CVE (زي CVE Database)، المخترق بيلاقي أدوات جاهزة في Exploit-DB، وده بيسهّل الهجوم.
نصايح للحماية من Buffer Overflow
- للمبرمجين:
- تحقق من طول المدخلات دايمًا (زي استخدام
strncpy
بدلstrcpy
في C). - استخدم مكتبات آمنة زي SafeString.
- فعّل حمايات زي ASLR، NX، و
Stack Canaries
.
- تحقق من طول المدخلات دايمًا (زي استخدام
- للهكرز الأخلاقيين:
- جرب الثغرة في بيئة معزولة زي Kali Linux على
VirtualBox
. - استخدم أدوات زي
GDB
أوpwndbg
لتحليل الذاكرة. - تعلم Assembly و
Shellcode
من منصات زي TryHackMe.
- جرب الثغرة في بيئة معزولة زي Kali Linux على
- لأصحاب الأنظمة:
- حدّث الأنظمة والبرمجيات لآخر إصدار.
- استخدم أدوات فحص زي VirusTotal للكشف عن الثغرات.
خلّصنا.. ابدأ رحلتك في استغلال الثغرات!
ثغرة Buffer Overflow قوية جدًا لو استُغلت صح، وممكن تمنح المخترق تحكم كامل بالسيرفر. لو عايز تبقى هاكر أخلاقي، اتعلم Assembly، C، وجرب الثغرة في بيئة آمنة. تابع منتديات اكتب كود لشروحات جديدة عن Cybersecurity وPenetration Testing
كل أسبوع! 

التعديل الأخير: