به نام دانای بر حق
مقدمه
پیرو آموزش هایی که SadeghPM عزیز در مورد شل کد نویسی قرارداده بودش ما سعی کردیم این آموزش رو برای لینوکس ادامه بدیم البته با کسب اجازه از ایشان، و اما اگر بخواهیم در یک جمله در مورد شل کد صحبت کنیم شل کد کدهای ماشینی هستند که برای انجام یه سری عمل به سیستم عامل تحویل داده میشند و نتیجه خاصی دارند و این اعمال میتونه خرابکارانه باشه یا نباشه و حالا برای کسب اطلاعات بیشتر به آموزش SadeghPM قسمت اول مراجعه کنید در اینجا، حال آنکه شل کد های میتونند با زبان ماشین یا همون همون آپکد های hex یا هگزادسیمال بهتره بگیم باشند یا می تونند به صورت فرامینی باشند که در که در بخش های که از سیستم عامل اجرا شوند که گاهی پذیرای command line هستند به صورت متنی ارسال شده و اجرا شوند که بحث ما اکنون حول محور این بخش command line هستش.
تفاوت ارسال command line در ویندوز و لینوکس
خب در این شکی نیست در مبحث شل کد نویسی در لینوکس بسیار دست انسان باز هستش تا ویندوز، که در ادامه توضیح مبسوط تر میدیم، تفاوت اولی که میتونیم ازش یاد بکنیم این هستش کد های شما باید در ویندوز در cmd و یا همون command port می باشد ولی در لینوکس از bash و برنامه ی terminal استفاده میشود حال چرا لینوکس قدرت بیشتری داره، علت اول این هستش که این سیستم عامل جوری تعریف شده که حدودا ۹۵٪ از اعمال در این سیستم عامل غیر وابسته به واسط گرافیکی هستش و با terminal میشود به سرعت انجام کار داد، به طور مثال تقریبا در تمام ابر توزیع های لینوکس یه نسخه سرور دارد که فاقد GUI یا واسط گرافیکی میباشد و همواره باید از پروتوکل SSH و خط فرمان اجرای دستور کرد.
اجرای کد در terminal
برای اجرای دستور در ترمینال ما به سادگی میتونیم با کلید ترکیبی Ctrl+Alt+T اون رو اجرا کنه، و کد های مورد نظر مون رو بنویسیم، به عنوان مثال با نوشت دستور dir لیست فایل ها و فولدر های جاری به شما نمایش داده میشود و و به همین تریتب شما موفق میشوید حال آنکه ما برای shellcode نویسی نیاز به کامپایلر و یا اسمبلر ها داریم که تو لینوکس به صورت پیش فرض کامپایلر c به به نام gcc نصب هستش و خیالتون رو از این بابت راحت می کنه و حالا برای اجرا کد های اسمبل با نصب nasm که به سادگی میتونین کد ها اسمبلی رو هم اجرا کنید بیاییم مراحل زیر رو با هم اجرا کنیم، ولی قول بدین زیاد روی نکنین سیستم منفجر کنین 😀 :
دستور ها در ترمینال اجرا میشود تا اولین برنامه یعنی hello world رو در اسمبلی بنویسیم.
نصب nasm :
sudo apt-get install nasm
حالا با استفاده از تسکت ادیتور یه فایل اسمبلی درست میکنیم گزینه nano برای خط فرمان مناسب هستش:
nano hello.asm
خب حالا برنامه نانو یه فایل hello.asm رو نظر گرفته تا شما مقادیر مورد نظر رو توش وارد کنید برای این کار قطعه کد زیر رو توش وارد کنید اگر متوجه نمیشید باید اون حداقل هایی که SadeghPM رو مطرح کرد رو بلده بوده باشید :
section .data msg db 'Hello, world!',0xa ;our dear string len equ $ - msg ;length of our dear string section .text global _start ;must be declared for linker (ld) _start: ;tell linker entry point mov edx,len ;message length mov ecx,msg ;message to write mov ebx,1 ;file descriptor (stdout) mov eax,4 ;system call number (sys_write) int 0x80 ;call kernel mov eax,1 ;system call number (sys_exit) int 0x80 ;call kernel
خب برای paste در terminal میتونین از Shift+Insert استفاده کنید و حالا باید با زدن کلید های Ctrl+X باید خارج شوید و در صورت پرسش برای تمایل ذخیره فایل از y به معنی yes استفاده کنید
اکنون فایل شما ساخته شد حال باید توسط nasm اون رو اسمبل کنید:
nasm -f elf hello.asm ld -s -o hello hello.o
حالا فایل شما ساخته شد و میتونین به سادگی اجراش کنید:
./hello
در آخر نتیجه:
به همین سادگی و به همین بی مزگی 😀 چون مزه اش موقع خرابکاری میباشد.
دیدگاهتان را بنویسید لغو پاسخ