بسم الله الرحمن الرحيم الحمد لله رب العالمين والصلاة والسلام على أشرف المرسلين سيدنا محمد وعلى آله وصحبه ومن تبعهم بإحسان إلى يوم الدين.


حسابي في التويتر هنا


المتطلبات:

  1. معرفة بأساسيات الHeap و التعامل مع malloc

  2. معرفة ببعض هجمات الHeap

  3. قرأءة مقالاتي السابقة بخصوص الHeap Attacks


البداية

ماهو Unsafe Unlink ؟

هو تكنيك فكرته أنشاء 2 chunks بحجم يناسب الsmallbins أول chunk نضع لها FD & BK ولازم يأشرون على نفس الchunk أو مكان فيه العنوان حق الchunk عشان تكون الfake chunk حقتنا وعشان نتخطى unlink check ثم نحاول إضافة prev_size الى chunk رقم أثنين وجعل prev_inuse flag الخاص بالchunk رقم 2 يساوي 0 ثم نسوي free لchunk رقم أثنين كي نستدعي unlink() macro وتندمج Chunk 1 و Chunk 2 ثم يعطينا هذا arbitrary write.

راح أشرح بعد التفاصيل لاحقاً

ماهو smallbins ؟

هي bin تشبه fastbin لكن فيه كذا أختلاف بسيط نوعها doubly linked, circular list فيها 62 bin تحتوي على الchunks الي صار لها free وحجمها أكبر من fastbin أو أقل, تتعامل مع FD & BK عكس fastbin الي تتعامل فقط مع FD

Doubly Linked List:

هاذي الصورة مأخوذه من كورس HeapLab 

مثال:

Chunk A الFD حقها يأشر على Chunk B FD و Chunk B ال BK حقها يأشر على Chunk A FD و الBK حق Chunk A يأشر على Chunk B


أول Chunk موجودة في الbin الBK حقها يأشر على على أخر chunk موجودة في الBin 

أخر Chunk موجودة في الbin الFD حقها يأشر على على أول chunk موجودة في الBin 

عندما تطلب من malloc أن تحجز لك chunk حجمها 0xa00 سوف تذهب للبحث عن الchunk في unsortedbin و smallbin تبدأ البحث من الخلف (Tail).

الunsortedbin و الsmallbin عملية فك أرتبط الChunks فيهم هي Partial Unlink.

ماهو Partial Unlink ؟

هو عملية فك أرتباط الchunk جزئياً من smallbins و unsortedbins حيث يتم تتبع BK الخاص با victim chunk و نسخ العنوان الموجود في أعلى (Head) الbin سواً كانت smallbins او unsortedbins الى العنوان الموجود في الFD الخاص با victim chunk وبعد ذالك يتم نسخ BK الخاص با victim chunk الى BK الخاص با الHead الموجود في الBin.

أدري حوسه صح ؟ لكن في الشرح راح تفهمون الفكره

Join