25 تغريدة 20 قراءة Jan 28, 2021
في ظل رواج الفتاوي والأراء المشاكسة في الوسط الهكرجي ، أحب أفرض وجهة نظري وأقول :
"الي ما عمره استغل بفر اوفر فلو لا يقول عن نفسه هكرجي"
وهذا عشان أروج للثريد الي بنزله تحت ⬇️
بسم الله الرحمن الرحيم ،
اليوم بشرح طريقة استغلال البفر بب نظام لينكس؛ والبفر ( BufferOverFlow ) هو ان البرنامج يخليك تكتب فوق المساحة الي محطوطه للمتغير ( variable ) فالزياده هذي تحل محل المؤشر ( EIP register ) الي يوجه البرنامج للأمر القادم او الـ next instruction
طيب عملياً كيف اقدر اخذ shell يفيدني بالـ privilege escalation أو reverse shell من البفر وهذا الي بيكون مثالنا هالليله ...
عندنا الكود هذا ؛ الكاركتر الي يخزن فيه مدخلات اليوزر حجمه ٥٠٠ بايت، ولكن function read يقرا ٧٠٠ بايت، البرنامج مصاب بثغره البفر ، ولا ما كان جبته كمثال
وبما أن الوضع حبي ونمون على بعض، خلونا نسوي compile للبرنامج من غير حمايات، بالامر الي بالصوره ؛
-m32 عشان يصير البرنامج 32bit
-o طبعا هو الاسم البرنامج بعد الـ compile
لا شغلنا البرنامج الحين وكتبنا في اي شي يطبع لك عدد البايتات ويطبع لك الكلام الي كتبته ، وهذا طبيعة عمله
ولكن اذا عطينا البرنامج كلام اكثر من حجم الـ variable الطبيعي فف تطلع لنا النتيجه هذي segmentation fault وهو خطأ يقولك فيه البرنامج انه ضيع القبله والي يصير خلف الكواليس هو ان الـ eip يمتلي كله Aـات
وطبعاً الـ A تساوي 0x41 بالـ Hex
ومافيه عنوان صالح جذي 0x41414141
حلو عرفنا ان البرنامج مصاب فعلا اذا عطيناه A’s بحجم 800 bytes
ندخّل برنامجنا في gdb الـdebugger حقنا ونستخدم تول الميتا pattern_create عشان نسوي حروف عشوائيه نستخدمها بمعرفة وين يبدا الـ override لل eip register
سوينا ملف الـpattern وبالdebugger شغلنا البرنامج وعطيناه الـpattern
طلع لنا ان الكلام العشوائي الي حطيناه والي سوى لنا override للـeip هو 0x41327241
فف نستخدم التول pattern_offset من الميتا بعد وطلع لنا انه بعد 516 بايت تقدر تسوي override للـ eip
عشان بس نتأكد ان وضعنا بالسليم نجرب نملي ٥١٦ كاركتر وبعده نحط B’s عشان نعرف هل فعلاً هذا هو المكان الصحيح ولا لا ..
طبعاً اتضح لنا بعد تشغيله ان الـB’s سوو override للـeip register بنجاح
طبعاً الـB تساوي 42 بالـ hex
الأن نجي عند لحسة المخ 👀
الحين هدفنا النهائي من البفر كونه مافيه حمايات اننا نحط شل كود نسويه بب msfvenom ونخلي الـeip register يأشر عليه عشان يشتغل ويعطينا reverse shell
بس كيف نعرف مكان التأشير ؟ أو شنو العنوان ( address ) الي نخلي الـ eip يأشر عليه ويشتغل الشل كود حقنا
نقطه مهمه؛ الـesp register هو الـ stack pointer فف هو يأشر على اخر شي يدخل الـstack
وبما اننا فللنا الstack بب الـ A’s فنحتاج نرجع للوراء لمكان قبل أول A عشان نعرف الـaddress المزبوط
x/30wx عشان يطبع 30 Word بنظام الـheX من عند الesp register قبل 550 bytes ( قبل أول A شوي )
بالصوره الي فوق لقينا أن الادرس الي بدا منه تخزين الـ A’s بسطر 0xffffcdea + 14 ليه طيب 14 ؟ لانه كل ادرس هو عباره عن ٤ بايت فف هي بدت بعد ١٢ ( ٣ ادرسات ) + ونص (٢ بايتز )
نسوي الحسبه ونطبعها بالامر p وهو اختصار print
و x/wx والادرس وهو يعني اطبع لي الكلام الي داخل الادرس
طبعاً عشان ما يُعرف بالـpadding وهي مسافة أمان (حشو) تنحط قبل الشل كود عشان نضمن ان شلّـنا بيشتغل مزبوط، فف احب اني أزيد على الادرس رقم مثل ١٦ بب مثالنا هذا عشان احط بالاكسبلويت النهائي عدد من الكاركتر “x90\” زياده عن رقم ١٦ أضمن وأضبط بالدقه
شسالفة الكاركتر “x90\”؟ هذا الله يسلمكم كاركتر ماله اي هدف بالحياه بس انه ينقلك للـ instruction الي بعده
نبدا نسوي ريفيرس شل بب msfvenom
ومثل ما نعرف ان الباد كاركتر دايماً هو “x00\” فف نشيله عن طريق -b
و -f python عشان يطلع كك python string
و بالنهاية ابي الناتج يطلع بأسم payload
بسم الله
نبدا نكتب الاكسبلويت حقنا المكون بهالشكل:
padding + payload + A’s + address
طبعاً حطينا البادينق 20 bytes والي هي اكبر من ١٦ وهذا ما ذكرناه فوق وبعده البيلود عشان نضمن انه يشتغل بهالمكان وبعدها نملي البفر A’s وبعدها نحط العنوان الي نبي نأشر عليه مثل ما طلعناه فوق
من داخل الـ Debugger نشغل الاكسبلويت ونشوف شالوضع ...
الحمدلله قدرنا نحصل reverse shell
بس على قولة "الصدمه مو هني تدرون الصدمه وين؟" بصوت بوطلال الحمراني
لمن نجي نشغل الاكسبلويت برا الـ Debugger اغلب الاحيان ما بيضبط معانا 😢
بس لا تزعزع ثقتكم فيني .. هذا درس ثاني بس مبطن عشان تعرفون شلون تضبطون وضعكم بدوني
اذا واجهتنا نفس هالمشكله وتوهقت وحسيت انك جايب العيد لا تخاف،
اول شي تسويه تسمح بالـ core dump بالامر
ulimit -c unlimited
وتسوي debug لها
طلع المشكله بالـaddress الي بالازرق
ننسخ الـ address ونقرا عدد مثلاً 30 من الـ Word بب شكل heX ونشوف هل فعلاً هذا المكان الصحيح للاكسبلويت حقنا ولا لا ؟ نشوف ان الاجابه لا، ونشوف ان الاكسبلويت حقنا يبدا عند الـaddress
0xffffce68
فف المشكله كانت ان الـaddress الي كان بالاكسبلويت غلط (خارج الـDebugger) والحل اننا نحط الـaddress الصحيح الي حصلناه فوق
وسبب هالمشكله هو أن الـaddress يختلف من داخل الـDebugger عن البرنامج خارج الـDebugger
وبكذا هنيئاً لك الحين تقدر تسمي نفسك هكرجي
ومافيه فقرة فيديوهات هالمره لاني اكتشفت ان الفيديوهات تغبش وانتم تسلكون لي ومطيريني بالعجه واثريكم ما شفتوا فيديوهاتي 😌
المصادر
XDS course from elearnsecurity
بس بالنهاية اسمحولي اقول كلمة بالصدر ، عالم الـ exploit development عالم جداً رائع وكبير وفل أكشن وممتع ، فف اتمنى اذا شرحي ما شدك لهالعالم اتمنى انه ما ينفرك منه، ويحسسك انه صعب صدقني انه سهل وصج يحسسك انك هكرجي حقيقي
وشكراً 🌺✋🏻
#هكرجيات #للعقول_الراقية

جاري تحميل الاقتراحات...