امیرحسین تنگسیری نژاد
مهندس و مدرس شبکه و امنیت سایبری و مدیر کل جزیره هک و امنیت اطلاعات توسینسو

آموزش نوشتن پورت اسکنر با پاورشل

ابزار PowerShell یکی از ابزارهای معروفی میباشد که توسط مدیران سیستم و شبکه مورد استفاده قرار میگیرد. این ابزار کاربردی یک محیط Shell دستوری میباشد که توسط شرکت Microsoft به صورت Cross Platform جهت مدیریت سیستم ها و سرورها ارائه شده است. این ابزار با قابلیت های متنوع خود توانایی خودکار سازی امور مختلف سرورها و سیستم‌های تحت شبکه را به ما میدهد. در این مقاله قصد داریم بررسی کنیم که چگونه میتوانیم از ابزار PowerShell استفاده کنیم و یک Port Scanner ایجاد کنیم.

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

چرا از طریق PowerShell یک Port Scanner اجرا کنیم؟

توجه داشته باشید که شاید برایتان سوال بشود با  توجه به وجود ابزارهای متنوع در این حوزه که مراتب قدرت بالاتری میتوانند داشته باشند ( مانند Nmap و Masscan ) چرا باید به سراغ PowerShell برویم؟ خب جواب این سوال سادست و میتوان با یک مثال ساده به آن رسید، درنظر بگیرید شما به عنوان یک فرد از تیم قرمز قصد نفوذ به یک سازمان را دارید، شما پس از نفوذ به سازمان نیاز به جمع آوری اطلاعات در رابطه با دیگر تجهیزات شبکه را دارد. برای مثال این فرد قصد دارد که پس نفوذ درگاه های باز بر روی سرور Exchange را بررسی کند. درصورتی که این فرد از ابزارهای شناخته شده ای مانند Nmap استفاده کنند در لحظه توسط IDS/IPS شناسایی میشود. ابزارهای مانند Nmap بسیار شناخته شده هستند و شناسایی آن توسط این سیستم ها بسیار راحت میباشد و از این رو این اتفاق یک اتفاق با سروصدای بسیار بالا میباشد.
همچنین یک‌مثال دیگر را درنظر بگیرید که یک شبکه به یک بدافزار آلوده شده است و بدافزار برای حمله به سرورهای دیگر نیاز دارد درگاه های را بر روی سرورهای دیگر بررسی کند. این بدافزار به صورت پیش فرض بر روی سیستم یک فرد درون سازمان اجرا شده است و قطعا درون یک سیستم کاربر عادی نمیتوان ابزار Nmap را به راحتی یافت و یا نصب کرد. از این بابت در زمانی که به ابزارهای این چنینی نمی‌توانیم دسترسی داشته باشیم به راحتی میتوانیم از PowerShell برای اینکار استفاده کنیم.

نوشتن یک Port Scanner از طریق PowerShell

در ابتدا درنظر داشته باشید که برای نوشتن یک Port Scanner از طریق PowerShell میبایست از توابع .NET در کد خود استفاده کنیم. یکی از قابلیت های بسیار کاربردی PowerShell این است که ما مستقیما میتوانیم کد های مربوط به .NET را در سیستم از طریق PowerShell اجرا کنیم ( طبیعی است زیرا که حتی خوده PowerShell هم بر پایه .NET است ) برای اینکار ما باید از توابع TcpClient که بخشی از توابع Socket Programing در .NET است استفاده کنیم.

فراخوانی توابع TcpClient

در ابتدا برای فرخوانی این توابع به شکل زیر عمل میکنیم.

آموزش نوشتن پورت اسکنر با پاورشل

لیست توابع موجود در TcpClient 

پس از فراخوانی TcpClient برای اینکه لیست مربوط به توابع موجود در TcpClient را به دست بیاوریم به شکل زیر از cmdlet مربوط به get-member استفاده میکنیم.

آموزش نوشتن پورت اسکنر با پاورشل

در اینجا لیستی از توابعی که میتوان از آنها در کدهای خود استفاده کرد برای ما نمایش داده میشود. در این مقاله ما از ConnectAsync استفاده میکنیم.

استفاده از تابع ConnectAsync 

با استفاده از تابع ConnectAsync به شکل زیر میتوانیم یک درگاه مشخص را بر روی یک آدرس IP مشخص بررسی بنمایم

آموزش نوشتن پورت اسکنر با پاورشل



امیرحسین تنگسیری نژاد
امیرحسین تنگسیری نژاد

مهندس و مدرس شبکه و امنیت سایبری و مدیر کل جزیره هک و امنیت اطلاعات توسینسو

متخصص امنیت اطلاعات و کارشناس شکار تهدیدات بانک ملی ایران ، دارای مدارک مختلف از Splunk و AWS و Fortinet و Huawei حوزه اصلی فعالیت بنده در زمینه شبکه مباحث R&S و Service Provider می‌باشد و در زمینه امنیت نیز در موقعیت های مختلفی مانند PenTest و SoC فعالیت داشته و دارم. سابقه همکاری با بعضی سازمان های در قالب پروژه و... را داشته ام الان به عنوان تحلیلگر امنیت سایبری در زیرساخت بانک ملی مشغول به کار هستم. لینکداین: https://www.linkedin.com/in/amirhoseintangsirinezhad/

نظرات