تست نفوذ با python
تست نفوذ: اگر بخواهیم تست نفوذ(penetration testing) را به زبان ساده تعریف کنیم باید گفت که در تست نفوذ یک حمله از نوع سایبری را بر علیه سیستم یا تشکیلات کامپیوتری شبیهسازی میکنند.
تا امنیت زیرساخت فنآوری اطلاعات (IT) آن سازمان را ارزیابی کنند. با انجام این تست به یک سازمان کمک میکنند تا با شناسایی نقاط آسیب پذیر ، آن سازمان، دفاع خود را در برابر حملات سایبری تقویت کند.
اصطلاح دیگری با عنوان اسکن کردن آسیبپذیری (vulnerability scanning) نیز وجود دارد. شاید برایتان سوال پیش آید که تفاوت این دو اصلاح در چیست. پس اجازه دهید در ابتدا به بررسی و تعریف این دو بپردازیم.
کتاب تست نفوذ با python
در اینجا به ۲کتاب مفید برای آموزش تست نفوذ با پایتون اشاره کرده و توضیحات مختصری در رابطه با آنها برایتان شرح میدهیم تا بدین وسیله در رابطه با تست نفوذ با پایتون اطلاعات مفیدی به دست آورده و در راه انجام هرچه بهتر کارهایتان از آنها بهره بگیرید.
کتاب Hands-On Penetration Testing with Python
با مطالعه این کتاب میتوانید با موضوعاتی مثل، توسعه اسکنر، آسیب پذیری سفارشی، اتوماسیون اسکن برنامههای وب و توسعه از طریق سناریوهای روزمره امنیت سایبری که میتوانند با پایتون خودکار شوند، آشنا شوید.
همچنین میتوانید موارد استفاده خاص سازمان و اتوماسیون شکار تهدید را کشف کنید، درک عمیقی از مهندسی معکوس به دست آورده و با مفاهیمی مثل “fuzzing” سرریز بافر، توسعه keyger logger و بهرهبرداری از توسعه برای سرریزهای بافر، خراشیدن وب در پایتون به دست آورده و از آن برای پردازش پاسخهای وب استفاده کنید.
حتی میتوانید موارد استفاده از مرکز عملیات امنیتی (SOC) را کاوش کنید با علم داده، پایتون، امنیت سایبری، آموزش هک و تست نفوذ آشنا شوید.
کتاب Python Penetration Testing Essentials – Second Edition
این کتاب مهارتهایی که برای استفاده از پایتون برای آموزش تست نفوذ (pentesting) نیاز دارید را، با کمک مثالهای کد دقیق در اختیار شما قرار میدهد. این کتاب با بررسی اصول اولیه شبکه با پایتون شروع میکند و سپس به آموزش هک و امنیت شبکه میپردازد.
در نهایت به وسیله این کتاب، شما در جستجوی کتابخانههای پایتون برای انجام انواع مختلفی از تکنیک های نفوذ پنتیستن و هک اخلاقی تحقیق میکنید. در مرحله بعد، به آموزش مقدماتی برنامه نویسی هک و تست نفوذ با پایتون پرداخته شده و سپس به سراغ مفاهیم مربوط به هک وب سایت مانند دستکاری پارامترها، DDoS ، XSS وتزریق SQL. پرداخته خواهد شد.
با خواندن این کتاب، تکنیکها و روشهای متفاوتی را فرا خواهید گرفت که شما را با تکنیکهای pentesting پایتون، نحوه محافظت از خود و ایجاد برنامههای خودکار برای یافتن کنسول مدیریت، تزریق SQL و حملات XSS آشنا میکند.
آموزش مقدماتی برنامه نویسی هک و تست نفوذ با پایتون
برای شروع و ارائه یک مثال ساده، به تست نفوذ یک سیستم در شبکه فقط با نوشتن یک اسکریپت چهار خطی اشاره میکنیم؛
در این بخش از مقاله یاد میگیریم اسکریپتی بنویسیم که فقط ۴ خط کد دارد و پس از اجرای آن روی سیستم هدف، خواهیم توانست که به سادگی در شبکه به فایل های روی سیستم هدف دسترسی پیدا کرده و آنها را ببینیم، باز کنیم و.. این اسکریپت بر روی هر سیستم عاملی قابل اجراست؛
در واقع این اسکریپت بر روی هر سیستم عاملی که اجرا شود یک وب سرور را از طریق پورت HTTP اجرا کرده و فایلهای سیستم عامل را بصورت کلاینت سروری در اختیار نفوذگر قرار میدهد.
خود پایتون دارای اسکریپتها و کتابخانههای داخلی مختلفی است که به صورت پیشفرض روی پایتون نصب هستند.
برای مثال ما امروز از ماژولی به اسم HTTP SERVER استفاده میکنیم که باعث میشود با چند خط کد، بتوانیم یک وب سرور روی سیستم هدف ایجاد نماییم.
سورس کد :
from http.server import SimpleHTTPRequestHandler as handler
from socketserver import TCPServer
httpd = TCPServer((“” ,۸۰۰۰) , hve_forever()andler)
httpd.ser
توضیح سورس کد :
در ابتدا ماژول http.server کلاس SimpleHTTPRequestHandler را import کردیم.
وظیفه این کلاس پردازش درخواستهای http که توسط هکر ارسال میشود، میباشد. در خط بعد از کتابخانه socketserver روی TCPServer استفاده نمودیم. کاربرد این مورد نیز برای ساختن و اجرای وب سرور میباشد.
در خط بعدی handler یا همان کنترل کننده وب سرور را ساختیم و آن را داخل متغییر httpd. قرار دادیم.
در اینجا ۲ ورودی از ما گرفته شد، ورودی اول یک تاپل است که شامل یک رشته خالی و عدد ۸۰۰۰ است.
به جای رشته خالی باید آِدرس IP لوکال سیستمی که اسکریپت روی آن اجرا میشود (در اینجا سیستم قربانی) را بنویسیم. اگر این قسمت را خالی بگذاریم خود پایتون به طور خودکار آدرس آی پی لوکال سیستم را درنظر میگیرد.
عدد ۸۰۰۰ نیز نشان دهنده پورتی است که میخواهیم وب سرور روی آن اجرا شود.
ورودی دوم نیز کلاس هندلری است که میخواهیم با آن درخواستهای http را پردازش نماییم. در این مثال همان SimpleHTTPRequestHandler که ابتدا ایمپورت شده بود، ثبت شده است.
در انتها با استفاده از متود Serve_Forever وب سرور را راه انداخته و دقیقا کار اصلی از همینجا شروع خواهد شد.
حال باید به سراغ اجرا و تست نتیجه برویم.
برای تست ما یک سیستم لینوکس بلک آرچ را به عنوان کامپیوتر قربانی در شبکه در نظر گرفتیم(یعنی اسکریپتی که نوشتیم روی این سیستم اجرا خواهد شد) همچنین یک سیستم ویندوز را به عنوان سیستم هکر در شبکه در نظر گرفتیم.
طبق تصویر زیر اسکریپت را روی سیستم عامل لینوکس و با ویندوز اجرا مینماییم؛
حال وارد سیستم هکر شده، مرورگر را باز میکنیم و ادرس آی پی سیستم قربانی را در adressbar وارد میکنیم. (به همراه شماره پورتی که وب سرور روی آن کار میکند)؛
همانطور که در تصویر فوق مشاهده میکنیدپس رفتن به آدرس وارد شده، اطلاعات موجود در سیستم قربانی در قالب فایلها و فولدرها به ما نمایش داده میشود که اطلاعات داخلی آنها نیز برای ما قابل مشاهده خواهد بود.
البته نکنهای که در این قسمت وجود دارد این است که ما دقیقاً نمیدانیم کاریر قربانی، میخواهد اسکریپت را در چه مسیری اجرا نماید، پس ممکن است به اطلاعات سیستمی فرد نیاز داشته باشیم که در این صورت میتوان کاری کرد که به صورت خودکار و اتوماتیک، محتویات مسیر مورد نظر روی وب سرور ارسال شوند. ما برای اینکار به یک کتابخانه به اسم OS نیاز داریم . برای انجام این عمل کافیست طبق کد زیر عمل نماییم؛
from http.server import SimpleHTTPRequestHandler as handler
from socketserver import TCPServer
from os import chdir as chdir
chdir(“/root/Desktop”)
httpd = TCPServer((“” ,۸۰۰۰) , handler)
httpd.serve_forever()
به این ترتیب به سادگی میتوانید از اسکریپت فوق خروجی اجرایی بگیرید.
مفاهیم اولیه مورد نیاز در تست نفوذ با پایتون
فردی که قرار است تست نفوذ را انجام دهد باید در مورد مفاهیم اولیه شبکه مانند آدرسهای IP، آدرس Mac، زیر شبکههای طبقهبندی، زیر شبکههای بدون طبقهبندی، پورتها و شبکههای پخشی (broadcasting networks) اطلاعات کافی داشته باشد. چراکه فعالیتهایی مانند میزبانی در محدوده تعیین شده و خدمات، پورتها و ویژگی های پاسخگویی، مشخص میکنند که فرد ارزیاب چه نوع فعالیتهایی را در تست نفوذ باید انجام دهد.
۱- مدل یا پروتکل مرجع
بحث استانداردسازی درواقع توسط پروتکل مرجع بیان میشود. زیرا اشخاصی که از یک شبکه کامپیوتری استفاده میکنند از لحاظ موقعیت جغرافیایی و فیزیکی میتوانند در محدوده گستردهای قرار داشته باشند. در نتیجه مسلم است که دستگاههای آنها در شبکه معماری همگنی نخواهند داشت. برای برقراری ارتباط بین دستگاههایی که همگن نیستند، به یک پروتکل یا یک مدل استاندارد نیاز داریم که ارتباط بین این دستگاهها را برای ما فراهم کند.
پروتکلهای TCP/IP و OSI پروتکلهای مرجع هستند که از بین آنها OSI یک مدل فرضی و TCP/IP یک مدل عملی را برای ما فراهم میکند. هر کدام از این پروتکلهای لایههای شبکه منحصر به خود را دارند که در این مقاله به توضیح آنها نمیپردازیم.
۲- سوکت و نقش آن در بحث تست نفوذ با پایتون
سوکتها در واقع نقاط پایانی یک کانال ارتباطی دو طرفه هستند که ممکن است در جریان یک روند، بین فرآیندهای یک ماشین یا بین فرآیندهای ماشینهای مختلف ارتباط برقرار کنند.
به بیانی دیگر یک سوکت شبکه، یک نقطه پایانی در ارتباط بین دو برنامه در حال اجرا، بر روی یک شبکه کامپیوتری مثل اینترنت است که موضوعی کاملا مجازی بوده و به معنای یک موجودیت سخت افزاری نیست.
سوکت شبکه را میتوان با ترکیبی منحصر به فرد از آدرس IP و شماره پورت شناسایی کرد. سوکتهای شبکه ممکن است بر روی تعدادی از کانالهای مختلف مانند TCP،UDP و غیره پیادهسازی شوند.
اصطلاحاتی که در مورد سوکت در بحث برنامهنویسی شبکه مورد استفاده قرار گرفته است به شرح زیر میباشند:
- دامنه (Domain)
- نوع ارتباط بین دو نقطه پایانی (type)
- پروتکل (protocol)
- نام هاست (Host name)
- پورت (port)
3- ماژول سوکت پایتون برای برنامه نویسی سوکت
برای پیادهسازی برنامهنویسی سوکت در پایتون، باید از ماژول Socket استفاده کنیم. در ادامه یک دستور ساده برای ایجاد یک Socket آورده شده است.
s = socket.socket (socket_family, socket_type, protocol = 0)
در کد بالا کتابخانه socket را وارد میکنیم (Import) و سپس یک سوکت ساده میسازیم. پارامترهای مورد استفاده در ساخت سوکت شامل موارد زیر است:
- socket_family : شامل پارامتر AF_UNIX یا AF_INET میباشد.
- socket_type : شامل پارامتر SOCK_STREAM یا SOCK_DGRAM است.
- Protocol : این مورد معمولاً حذف می شود و به طور پیش فرض برابر با ۰ است.