سلام عليكم ورحمة الله وبركاته اليوم راح أتكلم عن تكنيك GOT Overwrite

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


أيش هو PLT ؟

Procedure Linkage Table أو PLT

هو مسؤول عن أستدعاء الFunction المطلوبة أثناء وقت تشغيل البرنامج او في حالة عدم معرفة ذلك ويتم القفز الى printf@got التي داخلها العنوان الحقيقي الخاص بfunction printf

أيش هو GOT ؟

Global Offset Table او GOT يكون داخله العنوان الخاص بfunction التي نريد أستعمالها وعندما يتم ألقفز إليه بواسطة PLT سوف يتم تشغيل الfunction

أيش هي ثغرة Format String ؟

قبل مانتكلم عن الثغرة خلونا نتكلم عن printf function هي function في لغة C تطبع المعلومات مثل function puts راح أشرح لكم أيش هو format specifiers في printf

format specifiers هو أنك تحدد نوع البيانات التي سوف تطبعها format string كتبت كود بسيط كي توضح الصورة

#include <stdio.h> int main () { char s[20]; //1-line gets(s); //2-line printf("%s", s); //3-line return 0; }

في السطر ألاول عرفت variable نوعه string تكتب فيه 20 char فقط

في السطر الثاني أستعملت gets function عشان أخذ input من المستخدم

في السطر الثالث هنا المهم printf عطيتها قيمتين القيمة ألاولى حددت ان ان البيانات الي راح تنطبع هي string والقيمة الثانيه حطيت اسم الvariable الي عرفته عشان يطبع البيانات الموجودة داخل الvariable

هذا المثال البسيط طبقته على variable من نوع string لكن لو أبي printf تطبع لي intger  او octal او hexadecimal ؟

هنا جدول format specifiers

%c for Character %d or i for intger %e or %E for Scientific notation of floats %f for Float values %g or %G for Similar as %e or %E %hi Signed integer (short) %hu Unsigned Integer (short) %l or %ld or %liLong %lf Double %Lf Long double %lu Unsigned int or unsigned long %lli or %lld Long long %llu Unsigned long long %o Octal %p print Pointer address %s String %u Unsigned int %x or %X Hexadecimal %% Prints % character %n Writes the number of bytes till the format string to memory

حلو الحين فهمنا أيش هو Format Specifier طيب وش يصير اذا أستعملنا printf بدون مانحدد Format Specifier ؟ زي كذا

printf(s);

يصير ان المستخدم يقدر يحدد Format Specifier الي يبغاه وهذا خطر يسبب ثغرة Format String

أيش هي ثغرة Format String ؟

هي ثغرة تحصل في البرنامج اذا أستعملت printf بدون تحديد Format Specifier هناك

أستغلالين للثغرة

اولاً:Arbitrary Read

المستخدم يقدر يسرب على سبيل المثال عناوين من stack ويستفيد منها كي يشن هجمات أخرى على البرنامج

ثانياً:Arbitrary Write

يقدر يغير عناوين في stack وأي عنوان في البرنامج ومن الممكن ان يؤدي على RCE عن طريق %n


أيش هو GOT Overwrite ؟

Join