در هر حرفه و حوزه، مهارتهایی وجود دارند که یادگیری آنها برای موفقیت ضروری است، یا زمان لازم برای رسیدن به اهداف مشخص را تا حد زیادی کاهش میدهند. به عنوان یک هکر هم مهارتهایی هستند که کسب آنها به شما کمک میکند کار خود را بهتر، بهینهتر و سریعتر پیش ببرید. بهطور مثال چند نمونه از این مهارتها عبارتند از برنامهنویسی، استفاده درست و موثر از اینترنت و حل مساله. در ادامه دربارهی زبانهای برنامهنویسی مورد نیاز برای هک صحبت میکنیم. اما پیش از آن بیایید به یک سوال پاسخ دهیم: چرا یک هکر به دانش برنامهنویسی نیاز دارد؟
چرا بهعنوان یک هکر باید برنامهنویسی بیاموزیم؟
یکی از دلایل مهمی که یک هکر (یا به طور کلی هر کسی که قصد فعالیت در حوزه فناوری را دارد) باید یک زبان برنامهنویسی را بیاموزد، به دست آوردن «تفکر برنامهنویسی» است؛ یک برنامهنویس مهارت بالایی در تقسیم وظایف بزرگ و پیچیده به وظایف کوچکتر دارد تا بتواند به صورت گامبهگام آنها را انجام دهد. از طرفی یادگیری منطق برنامهنویسی میتواند به شما در درک عملکرد بسیاری از برنامهها و سرویسها کمک کند، بهگونهای که به عنوان یک کارشناس تست نفوذ، بهتر میتوانید خلأها و مشکلات و نواقص موجود در بسترها و برنامههای مختلف را حدس بزنید و بیابید. از دلایل دیگری که یک کارشناس تست نفوذ باید برنامهنویسی بیاموزد، میتوان به موارد زیر اشاره کرد:
- کار هکرها حل مساله و ساخت ابزار است؛ یادگیری یک زبان برنامهنویسی به شما کمک میکند راهکارهای مسائل مختلف را پیادهسازی کنید. علاوه بر این که دانش عمیق نسبت به یک زبان برنامهنویسی، شما را از جوجههکرها (یا همان Script Kiddies) متمایز خواهد کرد!
- یک هکر میتواند با برنامهنویسی، بسیاری از فرایندها و عملیاتهای زمانبر را به صورت خودکار دربیاورد.
- یادگیری برنامهنویسی به شما کمک میکند خطاهای برنامهنویسی موجود در برنامههایی را که هدف شما هستند شناسایی کرده و آنها را اکسپلویت کنید.
- همیشه لازم نیست چرخ را دوباره اختراع کنید و هر برنامهای را که نیاز دارید از صفر بنویسید! تعداد بسیار زیادی ابزار متن باز برای تست نفوذ موجود است که در حال حاضر کاربرد گستردهای هم دارند؛ اما در صورتی که دانش کافی برنامهنویسی داشته باشید میتوانید ابزارهای موجود را شخصیسازی کرده و عملیاتهایی را که نیاز دارید به آنها اضافه کنید.
کدام زبان برنامهنویسی برای هک بهتر است؟
جواب این سوال بستگی به سیستمها و بسترهای هدف شما دارد. برخی از زبانهای برنامهنویسی تنها برای بسترهای خاصی استفاده میشوند. به عنوان مثال، زبان Visual Basic Classic (نسخه 3، 4، 5 و 6.0) برای نوشتن برنامههایی استفاده میشود که روی سیستم عامل ویندوز اجرا میشوند. پس برای مثال اگر هدف شما هککردن سیستمهای لینوکسی باشد، یادگرفتن برنامهنویسی به زبان Visual Basic 6.0 چندان کار عاقلانهای نیست!
بیایید ابتدا نگاهی کلی به زبانهای برنامهنویسی مورد استفاده در تست نفوذ بیاندازیم و سپس چند زبان برنامهنویسی را به طور دقیقتر بررسی کنیم.
زبانهای برنامهنویسی که در هک کاربرد دارند
زبانهای برنامهنویسی | توضیح مختصر | بستر | کاربرد |
HTML | زبانی که برای نوشتن صفحات وب استفاده میشود. | مستقل از بستر* | هک وب فرمهای لاگین و دیگر روشهای ورود دادهی مبتنی بر وب، از فرمهای HTML برای گرفتن داده استفاده میکنند. داشتن توانایی نوشتن و تفسیر کد HTML، شناسایی و اکسپلویت نقاط ضعف موجود در کد را برای شما آسان میکند. |
جاوا اسکریپت | زبان اسکریپتنویسی سمت کلاینت | مستقل از بستر* | هک وب کد جاوا اسکریپت روی مرورگر کلاینت اجرا میشود. برای مثال شما میتوانید از جاوا اسکریپت برای خواندن کوکیهای ذخیرهشده روی مرورگر کاربر، انجام حملات XSS و… استفاده کنید. |
PHP | زبان اسکریپتنویسی سمت سرور | مستقل از بستر* | هک وب زبان PHP یکی از پرکاربردترین زبانهای برنامهنویسی وب است. این زبان برای پردازش فرمهای HTML و دیگر وظایف خاص مورد استفاده قرار میگیرد. شما میتوانید یک برنامهی مخصوص با PHP بنویسید که تنظیمات روی یک وبسرور را تغییر داده و سرور را نسبت به حملات آسیبپذیر میکند. |
SQL | زبان مورد استفاده برای تعامل با دیتابیسها | مستقل از بستر* | هک وب با تزریق کد SQL، میتوان الگوریتمهای لوگین اپلیکیشنهای تحت وب را در صورتی که ضعیف باشند دور زد، داده را از روی دیتابیس حذف یا کپی کرد، و بسیاری عملیاتهای دیتابیسی دیگر را انجام داد. |
Python Ruby Bash Perl | زبانهای برنامهنویسی سطح بالا | مستقل از بستر* | ابزارسازی و اسکریپتنویسی این زبانهای برنامهنویسی برای نوشتن ابزارها و اسکریپتهای اتوماسیون (خودکارکردن تسکهای مختلف) عالی هستند. دانش بهدستآمده از این زبانها را میتوان برای تحلیل و شخصیسازی ابزارهایی که قبلا توسعه داده شدهاند نیز استفاده کرد. |
C و ++C | زبانهای برنامهنویسی سطح پایین | مستقل از بستر* | نوشتن اکسپلویت، کدهای شل و… زمانی که بخواهید کدهای شل، اکسپلویتها و روتکیتهای خود را بنویسید و یا نمونههای موجود را تحلیل کرده و تغییر دهید، به این زبانها نیاز خواهید داشت. |
جاوا #C Visual Basic VBScript | دیگر زبانها | جاوا و C#: مستقل از بستر* ویژوال بیسیک: ویندوز | دیگر کاربردها ممکن است بسته به سناریویی که با آن روبهرو هستید، به این زبانها نیاز داشته باشید. |
*زبانهایی که مستقل از بستر هستند، برای نوشتن برنامههایی استفاده میشوند که امکان اجرا روی سیستمعاملهای مختلف مانند ویندوز، لینوکس، مک و… را دارند.
نگاهی دقیقتر به زبانهای برنامهنویسی مورد استفاده در هک
بیایید چند زبان پرکاربرد در تست نفوذ را با جزئیات بیشتر بررسی کنیم:1- پایتون
شکی نیست که پایتون در صدر زبانهای برنامه نویسی موردنیاز هکرها قرار میگیرد. پایتون را میتوان آچار فرانسهی هک دانست؛ زبانی که نقشی جدید در نوشتن اسکریپتهای هک، اکسپلویتها و برنامههای مخرب دارد. پایتون یک زبان برنامهنویسی چندمنظوره است که در چندین حوزه، از جمله نوشتن رابط کاربری گرافیکی، وب و حتی برنامهنویسی شبکه کاربرد دارد. کاربرد آخر یعنی برنامهنویسی شبکه، نقشی اساسی در کاربرد پایتون در هک دارد. یکی از ویژگیهای بیرقیب پایتون، سادهبودن سینتکس و دستورات آن است.
یکی دیگر از ویژگیهای پایتون که آن را به زبانی ایدهآل برای تست نفوذ تبدیل کرده، وجود تعداد بسیار زیادی از ماژولهای آماده است؛ اگر میخواهید یک اسکریپت Native برای یک سیستم عامل بنویسید، ماژولهای OS در خدمت شما هستند؛ اگر دارید با آدرسهای IP کار میکنید، میتوانید از ماژول ipaddress استفاده کنید؛ برای اهداف مربوط به شبکه، ماژول socket، ماژولهای اسکرپینگ (scrapping) و بسیاری ماژولهای دیگر را داریم. اگر در دنیای هک تازهوارد هستید، حتما پایتون را در بالای لیست خود قرار دهید.
2- زبان C
این زبان لقب «مادر تمام زبانهای برنامهنویسی» را به دوش میکشد؛ زبانی که در جامعهی هک نیز جایگاهی حیاتی دارد. بسیاری از سیستمعاملهای پرطرفداری که امروز استفاده میکنیم روی زیربنای زبان C نوشته شدهاند: ویندوز، کرنل یونیکس، لینوکس و تمام توزیعهای آن.
سطح پایین بودن زبان C باعث میشود مزایایی داشته باشد که بسیاری از زبانهای برنامهنویسی دیگر از آنها محروماند. این زبان هکرها و کارشناسان امنیت را قادر میکند منابع سیستمی و سختافزارهایی مانند RAM را دستکاری کنند.
زبان C به اکسپلویتهایی معروف است که به شدت سریعتر هستند و در سطح پایینتری از سیستم اجرا میشوند. علاوه بر این، با زبان C میتوان پس از انجام حمله و آلودهکردن یک سیستم، به منابعی مانند حافظه یا پروسسهای سیستمی دسترسی پیدا کرد. علاوه بر این زبان C ابزاری عالی برای برای مهندسی معکوس نرمافزارها و اپلیکیشنهای مختلف است؛ فرایندی که هکرها را قادر میکند نحوهی کارکرد یک سیستم یا اپلیکیشن را بهتر درک کنند.
3- SQL
زبان SQL (زبان استاندارد کوئری) زبانی است که برای مرتبکردن، اضافهکردن، بازیابی، حذف یا ویرایش داده در یک دیتابیس به کار میرود. بسیاری از سیستمها دادههای خود را داخل یک دیتابیس مانند MySQL، MS SQL و PostgreSQL ذخیره میکنند. هکرها با استفاده از SQL میتوانند حملاتی موسوم به تزریق SQL (SQL Injection) را انجام دهند که میتواند آنها را قادر به دسترسی به اطلاعات محرمانه کند.
علاوه بر این، داشتن اطلاعات و مهارت بالا در SQL به شما کمک میکند ساختار یک دیتابیس و نحوهی کارکردن آن را درک کنید. چنین اطلاعاتی کار شما را بسیار سادهتر میکند؛ چون اینگونه میتوانید به خوبی ارزیابی کنید که دقیقا از کدام اسکریپتها یا ابزارها استفاده کنید.
4- جاوا اسکریپت
برای مدتی طولانی، جاوا اسکریپت صرفا یک زبان اسکریپتنویسی سمت کلاینت بود. اما با انتشار Node.js، جاوا اسکریپت از توسعه بکاند هم پشتیبانی کرده و به رقیبی سرسخت برای PHP تبدیل شده است. این تحول برای هکرها به معنای بیشترشدن زمینه برای اکسپلویتکردن است. فهم جاوا اسکریپت باعث میشود در اکسپلویت وب دستتان بازتر باشد؛ زیرا تقریبا تمامی وباپلیکیشنهای قدرتمند از جاوا اسکریپت یا یکی از کتابخانههای آن استفاده میکنند.
جاوا اسکریپت عمدتا به خاطر انجام حملاتی مانند XSS شناخته شده است. علاوه بر این، ابزارهای قدرتمند هک مانند Burp Suite تا حد زیادی برای انجام اکسپلویت به جاوا اسکریپت وابسته هستند.
5- PHP
سالهاست زبان PHP دنیای بکاند را به تصرف خود درآورده و امروزه اکثر وبسایتها و وباپلیکیشنها از این زبان استفاده میکنند. حتی سیستمهای مدیریت محتوای پرطرفدار مانند وردپرس و Drupal روی زبان PHP بنا شدهاند.
اگر هدف شما هک وب باشد، یادگیری PHP میتواند اسلحهای قدرتمند به زرادخانهی شما اضافه کند. اخیرا نسخهی هشتم این زبان معرفی شده ولی هنوز بسیاری از وبسایتها هستند که از نسخههای قدیمیتر استفاده میکنند؛ همین باعث میشود اگر مهارت کافی داشته باشید، بتوانید بسیاری از این کتابخانههای منقضیشده روی اکثر وباپلیکیشنها را اکسپلویت کنید.
6- ++C
تا به حال به کرککردن یک نرمافزار تجاری (همان نرمافزارهای پولی و لایسنسدار!) فکر کردهاید؟ اگر جوابتان مثبت است، مسیر شما از یادگیری زبان ++C میگذرد! جامعهی هک بارها از این زبان کمک گرفته تا بتواند دورههای آزمایشی (Trial) را از نرمافزارها و حتی سیستمعاملهای غیررایگان بردارد!
درست مانند زبان C، زبان ++C هم دسترسی سطح پایین به منابع سیستمی را ممکن میکند و با استفاده از آن میتوانید کدهای سطح ماشین را در چنین نرمافزارهایی تحلیل کنید. پس از تحلیل کد میتوانید روندها و ماژولهای مربوط به فعالسازی نرمافزار را شناسایی کرده و آنها را دور بزنید!
بسیاری از ابزارهای مهندسی معکوس نیز که امروزه در توزیعهای لینوکس مخصوص هک وجود دارند، از ++C برای انجام چنین کارهایی استفاده میکنند. بنابراین اگر قصد اکسپلویت نرمافزارهای دسکتاپ و انجام مهندسی معکوس را دارید، ++C میتواند به شما بسیار کمک کند!
7- جاوا
در حال حاضر جاوا یکی از پراستفادهترین زبانهای برنامهنویسی در توسعهی نرمافزارهای سیستم و موبایل است. شعار معروف «یک بار بنویس، همهجا استفاده کن!» برای نشاندادن میزان استقلال این زبان از بستر اجرا استفاده میشود. علاوه بر این موضوع، تعداد زیادی از وبسرورها مانند Apache Tomcat و Spring MVC با استفاده از جاوا توسعه داده شدهاند.
بر خلاف باور عموم، بسیاری از اکسپلویتهای بکدور در سیستم، به زبان جاوا نوشته شدهاند. بسیاری از هکرها برای سرقت هویت، ایجاد باتنتها، و حتی انجام فعالیتهای خرابکارانه روی سیستم کلاینت بدون شناساییشدن، از جاوا استفاده میکنند.
تا به حال به این فکر کردهاید که هکرها چگونه میتوانند تلفن همراه شما را هک کنند، اطلاعات محرمانه مانند پیامها، مخاطبین، لاگهای تماس را بخوانند، از طریق تلفن شما پیام بفرستند، و بسیاری کارهای دیگر را انجام دهند؟ بسیاری از این عملیاتها با استفاده از پیلودهایی انجام میشود که از طریق مهندسی اجتماعی روی تلفن قربانی نصب میشوند؛ پیلودهایی که به زبان جاوا نوشته شدهاند.
با تمام این اوصاف اگر میخواهید از جاوا در تست نفوذ استفاده کنید، باید به اندازه کافی وقت بگذارید و دانش خوبی از این زبان به دست آورید؛ چرا که برای بسیاری از تازهکارها، زبان جاوا در مقایسه با C و C++ خیلی سختتر است.
8- Ruby
مدتهاست که از Ruby برای نوشتن اکسپلویت استفاده میشود. این زبان املایی شبیه به پایتون دارد، ولی برای وب بهینه شده است، و از آنجایی که انعطافپذیری بسیار بالایی در نوشتن اکسپلویت دارد، به سرعت میان کارشناسان تست نفوذ به محبوبیت رسید. از Ruby میتوان برای نوشتن اسکریپتهای کوتاه یا بلند استفاده کرد و میتوان آن را به جای اسکریپتنویسی به زبان Bash استفاده کرد. یکی از محبوبترین ابزارهای هکی که امروزه وجود دارد، یعنی چارچوب تست نفوذ Metasploit، با استفاده از Ruby نوشته شده است.
کارشناسان تست نفوذ از Ruby برای هککردن و اکسپلویت سیستمهای سازمانی چندمنظوره استفاده میکنند. در صورتی که به دنبال نوشتن اکسپلویتهای موثر و قدرتمند هستید، تسلط به این زبان مهارتی ضروری به شمار میرود. بسیاری از هکرهای کهنهکار از این زبان برای نوشتن اسکریپتهای CGI پس از کسب دسترسی به یک شبکه استفاده کردهاند. سینتکس Ruby نسبتا ساده است که همین مساله باعث شده هکرها بتوانند کدهای مورد نظر خود را در زمان بسیار کمتری بنویسند. ضمن این که بسیاری از وباپلیکیشنهای نسل بعد روی بستر Rails ساخته شدهاند، و همین باعث میشود Ruby بهترین گزینه برای نفوذ به آنها باشد.
9- Perl
اگرچه به خاطر ظهور زبانهای مثل Ruby و Python، زبان Perl شهرت گذشتهی خود را از دست داده و دیگر آنقدرها شناختهشده نیست، همچنان جایگاه خود را بین جامعهی هک و امنیت حفظ کرده است. البته که هنوز سیستمهایی هستند که با Perl کار میکنند.
برنامههایی که به زبان Perl نوشته شدهاند به راحتی قابل گسترش و اصلاح هستند، و همین باعث شده به وسیلهای عالی برای هکرها جهت ساخت ابزارها و اکسپلویتها تبدیل شود. البته باید درنظر داشت که Perl بهترین زبان برای دستکاری فایلهای متنی در لینوکس است. به علاوه، از آنجایی که در قلب بسیاری از دیتابیسهای تحت وب از این زبان استفاده شده ، میتوان از آن برای اکسپلویت آن دیتابیسها استفاده کرد.
10- Bash
مجادلات زیادی وجود دارد که آیا واقعا Bash به معنای واقعی کلمه زبان برنامهنویسی هست یا نه… ولی اگر قصد ورود به حوزهی تست نفوذ را دارید، شکی نیست که باید به آن تسلط داشته باشید. زبان Bash زبان پیشفرض شل یونیکس و تمام سیستمعاملهای مبتنی بر آن، شامل تمام توزیعهای لینوکس است. و این نکته را به خاطر داشته باشید که لینوکس سیستمعامل بسیاری از سرورهای موجود بر روی اینترنت است.
زبان Bash را میتوان در کنار دیگر زبانها مانند پایتون برای افزایش دامنه عملکرد پیلودها و اکسپلویتها استفاده کرد. برای مثال، میتوانید یک کد پایتون بنویسید که در دل آن یک اسکریپت Bash قرار دارد (یا به اصطلاح بهتر، میتوانید اسکریپت Bash را در کد پایتون wrap کنید). وقتی که کد پایتون روی کامپیوتر قربانی اجرا شد، به طور خودکار اسکریپت Bash را اجرا میکند.
از طرف دیگر وقتی به یک سیستم دسترسی پیدا کردید، باید بتوانید در دایرکتوریهای مختلف آن بگردید و حتی پیکربندیهایی انجام دهید تا سطح دسترسی خود روی شبکه را ارزیابی کنید. برای تمام این کارها نیاز به دانش Bash خواهید داشت.
سخن آخر
اگر میخواهید یک هکر اخلاقی حرفهای شوید، نباید خود را به یک یا چند زبان برنامهنویسی محدود کنید. هک بیشتر شبیه یک هنر است و مسیر مستقیمی برای یادگیری آن وجود ندارد؛ برای تبدیلشدن به یک کارشناس تست نفوذ کارآمد و حرفهای، باید دانش خوبی نسبت به فناوری اطلاعات داشته باشید؛ از نحوهی کارکردن سیستمعاملها گرفته تا شبکه، دیتابیس، وبسرورها و وباپلیکیشنها و بسیاری بسترها و فناوریهای دیگری که ممکن است هدف شما باشند یا بتوانند در پیشبرد اهدافتان به شما کمک کنند. در واقع از آنجایی که سیستمهای مختلف وکتورهای حمله و اکسپلویتهای متفاوتی دارند، برای هک هر دسته از سیستمها به دانش متفاوتی نیاز خواهید داشت.
خیلی عالی و کامل بود ممنون
ممنون از حسن نظر شما
ممنون از این مقاله کاربردی