سلام عليكم ورحمة الله وبركاته اليوم راح أتكلم عن تكنيك 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 كتبت كود بسيط كي توضح الصورة
في السطر ألاول عرفت variable نوعه string تكتب فيه 20 char فقط
في السطر الثاني أستعملت gets function عشان أخذ input من المستخدم
في السطر الثالث هنا المهم printf عطيتها قيمتين القيمة ألاولى حددت ان ان البيانات الي راح تنطبع هي string والقيمة الثانيه حطيت اسم الvariable الي عرفته عشان يطبع البيانات الموجودة داخل الvariable
هذا المثال البسيط طبقته على variable من نوع string لكن لو أبي printf تطبع لي intger او octal او hexadecimal ؟
هنا جدول format specifiers
حلو الحين فهمنا أيش هو Format Specifier طيب وش يصير اذا أستعملنا printf بدون مانحدد Format Specifier ؟ زي كذا
يصير ان المستخدم يقدر يحدد Format Specifier الي يبغاه وهذا خطر يسبب ثغرة Format String
أيش هي ثغرة Format String ؟
هي ثغرة تحصل في البرنامج اذا أستعملت printf بدون تحديد Format Specifier هناك
أستغلالين للثغرة
اولاً:Arbitrary Read
المستخدم يقدر يسرب على سبيل المثال عناوين من stack ويستفيد منها كي يشن هجمات أخرى على البرنامج
ثانياً:Arbitrary Write
يقدر يغير عناوين في stack وأي عنوان في البرنامج ومن الممكن ان يؤدي على RCE عن طريق %n