در قسمت قبل، پیش نیاز اسکریپت نویسی Ùˆ ماژول نویسی متاسپلویت را با هم مرور کردیم Ùˆ Øتی یک اسکریپت ساده هم برای Ù…Ùسر متاسپلویت نوشتیم Ú©Ù‡ از برخی قابلیت های متاسپلویت استÙاده Ù…ÛŒ کرد Ùˆ یک عملیات را برای ما انجام Ù…ÛŒ داد. در این قسمت بنده Ù…ÛŒ خواهم به جزئیات بیشتر اسکریپت Ùˆ ماژول نویسی متاسپلویت بپردازم Ùˆ موارد بیشتری در مورد این مبØØ« Ù…Ø·Ø±Ø Ú©Ù†Ù….
به هر Øال برای شروع ساخت ماژول برای چهارچوب متاسپلویت نیاز به دانش برنامه نویسی روبی دارید Ú©Ù‡ در قسمت اول این مقاله [#نوشتن ماژول برای متاسپلویت] بنده چندین منبع برای یادگیری این زبان اسکریپت نویسی معرÙÛŒ کردم. اما در این قسمت خواهیم آموخت چگونه Ù…ÛŒ توانیم با استÙاده از زبان اسکریپت نویسی روبی شروع به ساخت ماژول خود برای چهارچوب متاسپلویت بکنیم(در اصل استاندارد ماژول نویسی متاسپلویت را تØلیل خواهیم کرد). به نظر بنده تنها تÙاوتی Ú©Ù‡ در نوشتن ماژول برای متاسپلویت با نوشتن اسکریپت برای Ù…Ùسر متاسپلویت وجود دارد، خطوطی هست Ú©Ù‡ در اول ماژول تعری٠شده Ùˆ ویژگی های متاسپلویت را به داخل ماژول وارد Ù…ÛŒ کند Ú©Ù‡ بنده در این قسمت این موارد را مورد بررسی قرار خواهم داد.
شروع نوشتن ماژول برای متاسپلویت
اØتما دارد همواره مشاهده کرده باشید Ú©Ù‡ در تمامی ماژول هایی Ú©Ù‡ برای متاسپلویت وجود دارد، تکه کد بالا در اول آن ماژول تعری٠شده است. این تکه کد ماژول را قابل خواندن برای متاسپلویت خواهد کرد. یا Ù…ÛŒ توان اینطور بیان کرد، این تکه کد ماژول را برای چهارچوب متاسپلویت سازگار سازی Ù…ÛŒ کند. به همین دلیل در تمامی ماژول هایی Ú©Ù‡ برای متاسپلویت نوشته Ù…ÛŒ شود این تکه کد را مشاهده خواهید کرد.
همانطور Ú©Ù‡ برنامه نویس های روبی در جریان هستند، روبی همانند زبان برنامه نویسی سی پلاس پلاس دارای خاصیت ارث بری است. یعنی شما Ù…ÛŒ توانید یک کلاس تعری٠کنید Ùˆ به آن یک سری خصوصیات اطلاق دهید Ùˆ سپس کلاس های دیگری تعری٠کنید Ú©Ù‡ خصوصیات همان کلاس اولیه را به ارث ببرند Ùˆ Øتی Ù…ÛŒ توانند شامل خصوصیات جدیدی هم شوند Ú©Ù‡ اینا مربوط به مباØØ« برنامه نویسی روبی Ù…ÛŒ شود.
به هر Øال با تکه کد بالا کلاسی تعری٠می کنید Ú©Ù‡ خصوصیات Ú©Ù…Ú©ÛŒ متاسپلویت را به ارث Ù…ÛŒ برد یا همان شامل Ù…ÛŒ شود. ماژول های Ú©Ù…Ú©ÛŒ Ú©Ù‡ در متاسپلویت وجود دارند Ù…ÛŒ توانند ویژگی ها بسیاری از قبیل پویشگری، ایجاد ارتباط و… را به شما ارائه دهند Ùˆ کار کد نویسی را برای شما سرعت بخشند.
بیشتر اÙرادی Ú©Ù‡ با برنامه نویسی سی/سی پلاس پلاس کار کردند با واژه include آشنا هستند Ùˆ Ù…ÛŒ دانند Ú©Ù‡ ما با استÙاده از این دستور در سی کتابخانه های موجود سی را به کد خود Ù…ÛŒ اÙزودیم. در این قسمت هم واژه include کاربرد مشابه دارد با این تÙاوت Ú©Ù‡ ویژگی هایی Ú©Ù‡ در رابط های Ú©Ù…Ú©ÛŒ متاسپلویت وجود دارد را Ù…ÛŒ توانید به درون کد خود وارد کنید. ویژگی هایی از قبیل پویشگری و…!
به عنوان مثال تکه کد بالا ویژگی پویشگری TCP از راه دور را به ماژول ما اضاÙÙ‡ Ù…ÛŒ کند Ùˆ بعد ها ما Ù…ÛŒ توانیم از این ویژگی بهره مند شویم Ùˆ عملیات های پویشگری را انجام بدهیم.
علاوه بر نکات بالا Ú©Ù‡ متذکر شدیم تکه کد بالا هم به صورت گسترده در ماژول های متاسپلویت مورد استÙاده قرار Ù…ÛŒ گیرد Ú©Ù‡ مشخصاتی درباره ماژول، نویسنده ماژول، ورزن، لایسنس Ùˆ … ارائه Ù…ÛŒ دهد. این ماژول با استÙاده از متود initialize تعری٠شده است. به این معنا Ú©Ù‡ مقادیر درون این تابع مقداردهی اولیه شده است. سپس یک هش ایجاد شده Ùˆ به هر کلید آن یک مقداری اختصاص گردیده است. (مربوط به دانش برنامه نویسی روبی Ù…ÛŒ شود)
تکه کد بالا یکی دیگر از قسمت هایی است Ú©Ù‡ به صورت خیلی گسترده در ماژول های متاسپلویت مورد استÙاده قرار Ù…ÛŒ گیرد. در این قسمت، این کد به پارامتر های ماژول خود مقدار دهی Ù…ÛŒ کند Ú©Ù‡ در عملیات خود از آنها بهره مند شود. مثلا گزینه RPORTS شامل درگاهی Ù…ÛŒ شود Ú©Ù‡ باید به آن Øمله شود.
اما شاید یک نکته برای شما جالب به نظر برسد Ùˆ آن ها واژگان True Ùˆ False است. این دو پارامتر تعری٠می کند Ú©Ù‡ پارامتر مد نظر باید مقداردهی شود یا خیر، با به زبان ساده تر مشخص Ù…ÛŒ کند پارامتر آیا یک گزینه اختیاری (optional) هست با نه یک گزینه اصلی است Ùˆ باید مقداردهی شود. پایان قسمت دوم، در قسمت سوم شروع به تØلیل یک ماژول از متاسپلویت خواهیم کرد تا این مباØØ« را عمیق تر متوجه شویم.
به هر Øال برای شروع ساخت ماژول برای چهارچوب متاسپلویت نیاز به دانش برنامه نویسی روبی دارید Ú©Ù‡ در قسمت اول این مقاله [#نوشتن ماژول برای متاسپلویت] بنده چندین منبع برای یادگیری این زبان اسکریپت نویسی معرÙÛŒ کردم. اما در این قسمت خواهیم آموخت چگونه Ù…ÛŒ توانیم با استÙاده از زبان اسکریپت نویسی روبی شروع به ساخت ماژول خود برای چهارچوب متاسپلویت بکنیم(در اصل استاندارد ماژول نویسی متاسپلویت را تØلیل خواهیم کرد). به نظر بنده تنها تÙاوتی Ú©Ù‡ در نوشتن ماژول برای متاسپلویت با نوشتن اسکریپت برای Ù…Ùسر متاسپلویت وجود دارد، خطوطی هست Ú©Ù‡ در اول ماژول تعری٠شده Ùˆ ویژگی های متاسپلویت را به داخل ماژول وارد Ù…ÛŒ کند Ú©Ù‡ بنده در این قسمت این موارد را مورد بررسی قرار خواهم داد.
شروع نوشتن ماژول برای متاسپلویت
کد:
[LEFT]require 'msf/core'[/LEFT]
کد:
[LEFT]class Metasploit3 < Msf::Auxiliary[/LEFT]
به هر Øال با تکه کد بالا کلاسی تعری٠می کنید Ú©Ù‡ خصوصیات Ú©Ù…Ú©ÛŒ متاسپلویت را به ارث Ù…ÛŒ برد یا همان شامل Ù…ÛŒ شود. ماژول های Ú©Ù…Ú©ÛŒ Ú©Ù‡ در متاسپلویت وجود دارند Ù…ÛŒ توانند ویژگی ها بسیاری از قبیل پویشگری، ایجاد ارتباط و… را به شما ارائه دهند Ùˆ کار کد نویسی را برای شما سرعت بخشند.
کد:
[LEFT]include Msf::[/LEFT]
کد:
include Msf::Exploit::Remote::TCP
کد:
[LEFT]def initialize super( 'Name' => 'Sample Code', 'Version' => '$Revision$', 'De******ion' => 'A sample code for training', 'Author' => 'Milad Kahsari Alhadi @c3phalex1n', 'License' => MSF_LICENSE )[/LEFT]
کد:
[LEFT]register_options( [ OptString.new('PORTS', [true, "Ports to scan (e.g. 25,80,110-900)", "1-10000"]), OptInt.new('TIMEOUT', [true, "The socket connect timeout in milliseconds", 1000]), OptInt.new('CONCURRENCY', [true, "The number of concurrent ports to check per host", 10]), self.class) deregister_options('RPORT')[/LEFT]
اما شاید یک نکته برای شما جالب به نظر برسد Ùˆ آن ها واژگان True Ùˆ False است. این دو پارامتر تعری٠می کند Ú©Ù‡ پارامتر مد نظر باید مقداردهی شود یا خیر، با به زبان ساده تر مشخص Ù…ÛŒ کند پارامتر آیا یک گزینه اختیاری (optional) هست با نه یک گزینه اصلی است Ùˆ باید مقداردهی شود. پایان قسمت دوم، در قسمت سوم شروع به تØلیل یک ماژول از متاسپلویت خواهیم کرد تا این مباØØ« را عمیق تر متوجه شویم.
Comment