در این بخش از دوره آموزشی مقدمات لینوکس، شما با مفاهیم مربوط به شل اسکریپت نویسی در لینوکس و نحوه نوشتن آن ها آشنا خواهید شد.
یکی از تکنیک هایی که تست نفوذگران باید به آن آگاهی داشته و در پروژه های خود از آن استفاده نمایند، نوشتن اسکریپت های کاربردی می باشد. آن ها در واقع با این کار، برخی از فرآیندهای تست نفوذ را به صورت خودکار انجام می دهند و در وقت خود صرفه جویی می نمایند.
نکاتی در خصوص نوشتن اسکریپت
در لینوکس قابلیت اسکریپت نویسی با استفاده از شل، امکان پذیر می باشد که در ادامه به نحوه انجام آن و برخی از دستورات کاربردی شل اسکریپت نویسی در لینوکس می پردازیم.
Shell یک واسط بین کاربر و سیستم عامل است که شما را قادر می سازد تا با آن تعامل نموده و فعالیت های مختلفی مانند اجرای دستورات، ابزارها، برنامه و موارد مشابه را انجام دهند. در لینوکس Shell های مختلفی در دسترس هستند که Z shell، Korn shell، C shell نمونه ای از این Shell ها هستند.
لازم به ذکر است که Bash به عنوان شناخته ترین نوع Shell ها در لینوکس است که به صورت گسترده ای مورد استفاده قرار می گیرد.
شما در بخش های پیشین با دستورات مختلفی مانند pwd، set، cd و دستوارت دیگر آشنا شدید. در این بخش ما برای نوشتن اسکریپت های خود به دو دستور کاربردی نیاز داریم.
آشنایی با دستورات کاربردی لینوکس
دستور اول echo می باشد که از آن برای نمایش پیام ها در خروجی استفاده می نماییم.
دستور دوم read می باشد که از آن برای دریافت اطلاعات از ورودی استفاده می نماییم.
برای نوشتن اسکریپت های خود شما نیاز به یک ویرایشگر متنی دارید. برای این منظور شما می توانید از ابزارهای vi، vim، gedit، kate، nano و leafpad استفاده نمایید.
نوشتن اولین اسکریپت در لینوکس
برای شل اسکریپت نویسی در لینوکس باید ساختار دستوری آن را رعایت نمود که در ادامه به بررسی این موارد می پردازیم.
در اولین اسکریپت ما قصد داریم تا تنها عبارت “Hello you are a Pentester!” را در خروجی چاپ نماییم. برای شروع شما باید به سیستم عامل بگویید که interpreter شما می خواهد برای اسکریپت استفاده شود. برای این منظور شما باید یک اصطلاحاً Shebang را وارد کنید که یک شارپ به همراه یک علامت تعجب است. (#!)
پس از آن شما باید نام شل مورد نظر خود را وارد کنید که در این جا ما از Bash استفاده می کنیم که باید مسیر آن را به صورت bin/bash/ در ادامه Shebang وارد کنیم. با این کار ما به سیستم عامل می گوییم که قصد استفاده از Bash Shell Interpreter را داریم.
در خط بعدی از اسکریپت ما از دستور echo برای چاپ یک پیام در خروجی استفاده می کنیم.
همانطور که در تصویر بالا قابل مشاهده می باشد، شما می توانید توضیحاتی را نیز در اسکریپت خود اضافه نمایید. برای این منظور شما می توانید با اضافه نمودن عبارت شارپ در ابتدای خط، هر توضیحی را به اسکریپت خود اضافه نمایید.
در ادامه باید اسکریپت را با نام دلخواه خود ذخیره نموده و سطح دسترسی اجرا یا Execute را به آن اعمال نماییم تا امکان اجرای اسکریپت وجود داشته باشد. برای این منظور از دستور chmod به صورت زیر استفاده می نماییم:
chmod 755 firstscript
آشنایی با نحوه تعیین دسترسی در لینوکس
اجرای اسکریپت
برای اجرای اسکریپت که در دایرکتوری جاری وجود دارد، کافی است تا شما نقطه و اسلش را به ابتدای نام اسکریپت اضافه نموده و آن را اجرا نمایید:
اضافه نمودن برخی قابلیت ها به اسکریپت
تا به حال شما یک اسکریپت ساده که تنها مقداری را در خروجی چاپ می کند نوشته اید. در ادامه با استفاده از عبارت read و همچنین به کارگیری متغیرها، اسکریپت را کمی تعاملی تر می کنیم.
برای نوشتن اسکریپت، یک فایل جدید ایجاد نموده و آن را با یک ویرایشگر متنی باز می کنیم. مطابق تصویر زیر، کدها را درون آن وارد می نماییم:
عبارت read، مقداری را از ورودی دریافت و در متغیری که با یک نام در جلوی آن مشخص می شود، قرار می دهد. سپس در انتها نیز این متغیرها را در متن خوش آمدگویی انتهای اسکریپت قرار داده و به کاربر نمایش می دهد.
پس از ذخیره سازی اسکریپت و تغییر سطح دسترسی آن مشابه اسکریپت پیشین برای اجرای اسکریپت، شما می توانید آن را اجرا نمایید. پس از اجرا عبارت What is your name چاپ شده و از شما یک ورودی درخواست می کند و پس از وارد کردن نام و فشردن کلید Enter عبارت What is your course چاپ شده و از شما نام دوره را درخواست می کند.
پس از ورود نام دوره و فشردن کیلد Enter، عبارت خوش آمد گویی برای شما چاپ شده و نام و دوره را به شما نمایش خواهد داد:
یک اسکریپت برای اسکن پورت
پیش از اینکه اقدام به نوشتن این اسکریپت نماییم، ابتدا باید با یک ابزار در زمینه تست نفوذ با نام Nmap آشنا شویم. از ابزار Nmap برای اسکن شبکه و پورت استفاده می شود. Nmap به صورت پیش فرض در سیستم عامل کالی لینوکس نصب شده است.
در ابزار Nmap برای اسکن از ساختار زیر استفاده می شود:
nmap typ-of-scan target-ip target-port
در این مثال از دستور sT- برای اسکن از نوع TCP استفاده می کنیم. در این مثال پورت 3306 که مربوط به سرویس mysql می باشد استفاده می نماییم:
nmap -sT ip -p 3306
برای ساختن اسکریپت یک فایل با نام ScannerMysql ساخته و کدهای زیر را در آن وارد می کنیم:
پس از توضیحات از دستور nmap استفاده می کنیم و پورت 3306 را در رنج مورد نظر اسکن می کنیم و از dev/null/ استفاده می کنیم تا خروجی Nmap به ما نمایش داده نشود. همچنین خروجی را با استفاده از سوییچ -oG که برای ذخیره به صورت Grapable است در یک فایل دیگر ذخیره می نماییم. خروجی Grapable به ما این امکان را می دهد تا از دستور grep برای جست و جو در آن استفاده نماییم.
سپس در خط بعدی فایل ایجاد شده را با دستور cat خوانده و به دنبال بخشی که عبارت open نوشته شده است می گردیم و با استفاده از دستور grep آن را به یک فایل دیگر منتقل می کنیم.
در انتها نیز فایل نهایی را با دستور cat چاپ می نماییم:
بهینه سازی اسکریپت MySQL
برای بهبود بخشیدن کارایی اسکریپتی که ایجاد نموده ایم، می توانیم پارامترهای این اسکریپت را از کاربر دریافت نماییم. برای این منظور اسکریپت را مطابق با تصویر زیر تغییر می دهیم:
با اجرای این اسکریپت، ابتدا آدرس IP ابتدای یا شروع آدرس را سوال می نماید. سپس بخش انتهایی آدرس را سوال می کند و در ادامه نیز شماره پورت مورد نظر را دریافت می کند:
همچنین شما می توانید با کمی تغییر در اسکریپت، آدرس دهی آن را بر اساس /24 یا موارد مشابه دریافت نمایید.
توضیح کوتاهی در خصوص dev/
لینوکس دستگاه های جانبی و غیر جانبی را به صورت فایل در نظر میگیرد و نمایش می دهد(یعنی به ازای هر دستگاه، یک فایل معادل آن در نظر میگیرد) و دایرکتوری dev حاوی تعدادی فایلهای ویژه یا special file یا فایل دستگاهی می باشد که این فایل ها در حقیقت نمایندهٔ دستگاه ها هستند یعنی لینوکس هر دستگاه را با فایلی در نظر می گیرد و اطلاعات مربوط به آن دستگاه را در فایل مربوط به آن ذخیره میکند.
در حقیقت یک فایل دستگاهی مربوط به یک دستگاه رابطی (interface) است برای درایوری که با آن دستگاه کار میکند.
در حقیقت فایلهای دستگاهی فایل به معنایی که ما با آن آشناییم نیستند اما این فایلها به صورت فایلهای معمولی نمایش داده میشوند به عنوان مثال dev/sda/ مربوط به اولین درایو SATA در سیستم است. اگر بخواهیم این درایو را پارتیشن بندی کنیم، میتوانیم برای یک برنامهٔ پارتیشن بندی فایل dev/sda/ را مشخص کنیم تا پارتیشن بندی را آغاز کند.
این دایرکتوری علاوه بر فایل دستگاهی حاوی شبه دستگاهها نیز میباشد. شبه دستگاهها، دستگاههایی مجازی هستند که به ازای آنها سختافزاری وجود ندارد. به عنوان مثال dev/random/ اعداد تصادقی تولید میکند.
dev/null/ یک دستگاه مجازی است که خروجیای ندارد و ورودیهایی که به آن داده میشود را در نظر نمیگیرد و دور میاندازد (یکی از استفادههای آن این است که زمانی که می خواهیم یک خروجی نمایش داده نشود یعنی می خواهیم خروجی دور ریخته شود(مثلا پیام error یا خطایی که رخ میدهد) میتوانیم آن را به این دایرکتوری پایپ کنیم مثلا:echo “we are here” | /dev/null )
منبع بخش انتهایی: ویکی بوک