
در این فصل، شما به برخی از حملات واقعی آشنا خواهید شد و به سیستمها دسترسی پیدا میکنید. در فصل قبلی فاز شناسایی پیشرفته (Advanced Enumeration Phase)، اطلاعات کاملی درباره هر سرویس داشتید و در این فصل، یک گام جلوتر خواهیم رفت و آسیبپذیریها را مورد بهرهبرداری قرار خواهیم داد. علاوه بر این، شما با ارزیابی آسیبپذیریها در یک سازمان معمولی آشنا خواهید شد که برای کسانی که قصد دارند امنیت را به عنوان حرفه خود دنبال کنند، مفید خواهد بود.
در فصل Exploitation Phase، شما با موارد زیر آشنا خواهید شد:
- ارزیابی آسیبپذیریها
- تحقیقات عمومی برای اکسپلویتها
- بهرهبرداری از سرویس FTP
- بهرهبرداری از سرویس SSH
- بهرهبرداری از سرویس Telnet
- بهرهبرداری از سرور ایمیل
- بهرهبرداری از موتور Docker
- بهرهبرداری از پورتال Jenkins
- Reverse shells
- بهرهبرداری از پروتکل SMB
ارزیابی آسیبپذیریها
یک ارزیابی خودکار آسیبپذیریها شامل استفاده از اسکنرهای حرفهای است که آسیبپذیریها را در یک میزبان از راه دور در شبکه (یا چندین میزبان در یک زیرشبکه) شناسایی میکنند. در فصل قبلی، از اسکریپت اسکن در Nmap استفاده کردیم. به طور کلی، اکثر اسکریپتها در Nmap (همه آنها نه) برخی از بررسیهای ضروری برای شناسایی آسیبپذیریها را انجام میدهند. برای مثال، زمانی که گزینه اسکریپت FTP را اجرا میکنید، اسکن آسیبپذیریها در Nmap انجام خواهد شد. اگر بخواهید دقیقتر باشید، میتوانید از گزینه ftp-vuln استفاده کنید تا به نتایج دقیقتری برسید.
توجه داشته باشید که ارزیابی آسیبپذیریها تا حدودی به مدیریت پچها مرتبط است. اگر در یک محیط سازمانی کار میکنید، با این وظیفه بسیار روبهرو خواهید شد، حتی بیشتر از خود تست نفوذ. بسیاری از شرکتها در همین مرحله متوقف میشوند و به بهرهبرداری از یافتهها نمیپردازند. در عوض، تلاش میکنند بر اساس گزارشی که از ابزارها دریافت میکنند، آنها را اصلاح کنند. آسیبپذیریهای بحرانی و با شدت بالا توسط مدیریت ارشد اولویتبندی میشوند و آنها از تیم فناوری اطلاعات میخواهند که هر چه سریعتر پچها را اعمال کنند.
در دنیای واقعی، شرکتها از اسکنرهای خودکار پیشرفتهتری استفاده میکنند و در اینجا برخی از نمونههای آنها که در محیطهای شرکتی به کار میروند آورده شده است:
از Tenable:
- Nessus و Tenable.sc (راهحل محلی)
- Tenable.io (راهحل ابری)
از Rapid7:
- Nexpose (راهحل محلی)
- InsightVM (راهحل ابری)
- Qualys Scanner (راهحل ابری)
تمام این اسکنرها از یک مفهوم مشابه استفاده میکنند. اگر با اصول اولیه اسکن آسیب پذیریها آشنا باشید، به راحتی میتوانید از هر نوع اسکنر استفاده کنید. برای نشان دادن اصول پایه، ما از OpenVAS که یک اسکنر امنیتی رایگان و متن باز است، استفاده خواهیم کرد تا کار را انجام دهیم.
روند ارزیابی آسیبپذیریها
قبل از اینکه به ادامه مطلب بپردازیم، بیایید نگاهی به ترتیب منطقی برای انجام یک ارزیابی آسیبپذیری موفق داشته باشیم. چرا باید داراییهای خود را طبقهبندی کنید؟ برای این سوال چندین پاسخ دارم:
- دقت در اجرای وظایف اسکنر: به طور مثال، اسکنر برای دستگاههای موبایل الگوی متفاوتی نسبت به میزبانهای ویندوز خواهد داشت.
- اولویتبندی مدیریت پچها: به عنوان مثال، آسیبپذیری بحرانی در یک سرور تولیدی اهمیت بیشتری نسبت به آسیبپذیری بحرانی در یک سرور توسعهای اینترانت دارد.
- جدا کردن منطقی دستگاهها برای اهداف مدیریت پچها: به عنوان مثال، گروهبندی داراییها این امکان را به شما میدهد تا در صورت درخواست، به راحتی تمامی میزبانها در محیط تولید را فهرست کنید.
مراحل انجام ارزیابی آسیبپذیریها:
- گروهبندی داراییها: قبل از شروع ارزیابی آسیبپذیریها، باید داراییهای خود را در دستههای مختلف گروهبندی کنید. در اینجا برخی از نمونهها آورده شده است:
- دستگاههای شبکه
- دستگاههای IoT
- میزبانهای کاربران
- سرورهای توسعه
- سرورهای پیشتولید
- سرورهای تولید ویندوز
- سرورهای تولید لینوکس
- تلفنسازی/VoIP
- تبلتها و تلفنها
- مدیریت دسترسی: یکی دیگر از پیشنیازهای اسکن آسیبپذیریها، اعطای دسترسی به اسکنر برای اجرای عملکردهای خود است. به عبارت دیگر، اسکنر آسیبپذیری بدون دسترسی مناسب به میزبان هدف نمیتواند به درستی اسکن کند. آنچه باید در این مرحله انجام دهید عبارت است از:
- ایجاد یک حساب کاربری سفارشی برای میزبانهای لینوکس: اسکنر از SSH برای احراز هویت استفاده خواهد کرد.
- ایجاد یک حساب کاربری سفارشی برای میزبانهای ویندوز: اسکنر از پروتکل Samba برای احراز هویت استفاده خواهد کرد. برای این کار باید از LDAP استفاده کنید. (زیرا شما نمیخواهید برای هر میزبان یک حساب جدید ایجاد کنید، بنابراین فقط یک حساب در دایرکتوری فعال ایجاد کرده و آن را در تمام میزبانها دوباره استفاده میکنید.)
- نصب یک عامل روی هر میزبان هدف: بیشتر اسکنرهای مبتنی بر ابری از شما میخواهند که این الگو را دنبال کنید. عامل (Agent) خدمات موجود روی هر میزبان را اسکن کرده و نتایج را به گره اصلی (Master Node) ارسال میکند. همچنین، عامل به طور محلی روی میزبان اجرا خواهد شد، بنابراین نتایج دقیقتر خواهند بود.
- ایجاد اسکنها: پس از انجام دو مرحله قبلی، میتوانید شروع به ایجاد اسکنها کنید. هر ارائهدهنده اسکنر قالبهای مختلفی برای اسکن ارائه خواهد داد. به عنوان مثال، برای اسکن دستگاههای موبایل یک الگو خواهید داشت. در این صورت، موتور اسکنر نتایج دقیقتری را بر اساس نوع اسکن تولید خواهد کرد. اگر داراییها را به درستی شناسایی و گروهبندی کرده باشید، این مرحله باید به راحتی قابل پیادهسازی باشد.
- گزارشگیری: آخرین مرحله برای دستیابی به یک ارزیابی آسیبپذیری موفق، مرحله گزارشگیری است. باز هم، اگر کار خود را به درستی انجام دادهاید و داراییها و اسکنها را به درستی بخشبندی کردهاید، گزارشگیری نباید مشکلی ایجاد کند. گزارشها ممکن است شامل false positives (مثبتهای کاذب) باشند؛ وظیفه شما این است که آنها را قبل از گزارش به مدیریت شناسایی کنید. برای یک شبکه با مقیاس بزرگ، تعداد آسیبپذیریهایی که پیدا خواهید کرد شما را شگفتزده خواهد کرد. در برخی شرکتها، از تحلیلگران امنیتی خواسته میشود که نمره ریسک امنیتی (برای هر آسیبپذیری) را دوباره ارزیابی کنند تا مثبتهای کاذب کاهش یابند و نتیجه دقیقتری گزارش شود.
آموزش اسکن آسیبپذیری با OpenVAS
حالا وقت آن رسیده است که با استفاده از اسکنر آسیبپذیری رایگان OpenVAS مثالهای واقعی را تمرین کنیم. این بخش صرفاً برای اهداف تمرینی است، اما در دنیای واقعی، بسیاری از شرکتهای بزرگ پول زیادی را در اسکنرهای حرفهای و گرانقیمت آسیبپذیری (مانند اسکنرهایی که قبلاً اشاره کردم) سرمایهگذاری میکنند. همان مفهوم برای اسکنر دیگری به نام OpenVAS نیز صادق است؛ پس بیایید شروع کنیم!
نصب OpenVAS
تیم Kali همیشه وضعیت OpenVAS را در توزیعهای مختلف تغییر میدهد. به عبارت دیگر، شما ممکن است گاهی اوقات OpenVAS را پیشنصب شده ببینید و در برخی دیگر از توزیعها، آن را مشاهده نکنید. در توزیع کنونی OpenVAS پیشنصب نشده است.
برای نصب آن، مراحل زیر را انجام دهید:
root@kali:~# apt update
root@kali:~# apt install openvas -y
root@kali:~# openvas-setup
پس از اجرای آخرین دستور، پنجره ترمینال خود را نبندید. در طی نصب، گذرواژهای برای ورود به پورتال وب نمایش داده خواهد شد. در خروجی نمونه، شما خواهید دید که یک گذرواژه تولید شده است؛ اما توجه داشته باشید که گذرواژه شما متفاوت خواهد بود.
[>] Checking for admin user
[*] Creating admin user
User created with password '0223982d-1935-4053-a300-7b2843f2ab61'.
[+] Done
برای دسترسی به پورتال وب، مرورگر خود را باز کرده و به لینک زیر بروید (همچنین از اطلاعات ورود قبلاً بدست آمده استفاده کنید و گذرواژه را برای استفادههای بعدی ذخیره کنید):
https://127.0.0.1:9392/login/login.html

نکته:
اگر سیستم خود را ریستارت کردهاید، سرور OpenVAS در نهایت خاموش خواهد شد و شما باید سرویس را دوباره با استفاده از دستور زیر راهاندازی کنید:
root@kali:~# openvas-start
اسکن با OpenVAS
در اینجا روندی که برای اسکن با استفاده از OpenVAS خواهیم استفاده کرد، آورده شده است:
- ایجاد یک گروه دارایی برای اسکن میزبانهای ویندوز. (در OpenVAS این را Targets مینامند.)
- استفاده از یک حساب SMB ویندوز برای اجازه دادن به اسکنر برای ورود به میزبان هدف.
- ایجاد یک وظیفه برای اسکن میزبانهای شناساییشده قبلی.
- اجرای اسکن.
- بررسی گزارش پس از اتمام اسکن.
شکل 7.1: پورتال وب OpenVAS
ایجاد یک فهرست هدف
- از منو، گزینه Configuration را انتخاب کرده و سپس روی Targets کلیک کنید.
- پس از وارد شدن به صفحه، روی دکمه کوچک ستاره آبی کلیک کنید تا یک هدف جدید ایجاد کنید.
- در آخرین نسخه این برنامه، دکمه در سمت چپ صفحه قرار دارد، همانطور که در شکل 7.2 نشان داده شده است.
- یک پنجره هدف جدید خالی باز خواهد شد. در این مرحله، شما باید اطلاعات زیر را وارد کنید (به شکل 7.3 مراجعه کنید):
- به گروه داراییها (targets) یک نام و توضیح بدهید.
- آدرسهای IP میزبانها را مشخص کنید.
- به صورت اختیاری حساب SMB را شناسایی کنید (اگر میخواهید اسکن با احراز هویت انجام شود).
- محدوده شماره پورتهایی که میخواهید برای این نوع داراییها استفاده کنید، مشخص کنید.
ایجاد یک وظیفه اسکنر
- برای ایجاد یک وظیفه اسکن، از منوی Scans، گزینه Tasks را انتخاب کرده و سپس روی دکمه ستاره آبی کلیک کنید تا یک وظیفه جدید ایجاد کنید.
- پس از بارگذاری پنجره، شما باید اطلاعات زیر را وارد کنید (به شکل 7.4 مراجعه کنید):
- به وظیفه یک نام و توضیح بدهید.
- نام گروه هدف را انتخاب کنید؛ در اینجا، Scan Targets است.
- در Scan Config، نوع اسکن را انتخاب کنید (اسکن سریع یا عمیق و آهسته).

پس از ایجاد وظیفه، شما میتوانید آن را در صفحه وظایف با کلیک روی دکمه سبز “پخش” در زیر ستون Actions اجرا کنید (به شکل 7.5 مراجعه کنید). پس از پایان اسکنر، وضعیت به Done تغییر خواهد کرد.

برای بهروزرسانی نتایج به صورت خودکار، شما باید تایمر بهروزرسانی را در فهرست کشویی بالای سمت راست تنظیم کنید (نزدیک به نام کاربری وارد شده). به طور پیشفرض، فهرست کشویی روی No Auto-Refresh تنظیم شده است، بنابراین باید صفحه خود را به صورت دستی با استفاده از دکمه Refresh مرورگر بهروزرسانی کنید.
بررسی گزارش
پس از اتمام اسکن، شما میتوانید گزارش را با انتخاب گزینه Scans ➪ Reports مشاهده کنید.
در صفحه گزارشها، روی لینکی که در زیر ستون Date قرار دارد کلیک کنید. (اگر چندین اسکن دارید، باید وظیفه صحیح را انتخاب کنید.) شما به نتایج گزارش هدایت خواهید شد (به شکل 7.6 مراجعه کنید).
مرحله بعدی چیست؟
وظیفه شما در این مرحله تست هر آسیبپذیری است تا بررسی کنید آیا قابل بهرهبرداری است یا خیر (و از مثبتهای کاذب جلوگیری کنید).



جستجوی اکسپلویتها
تا اینجا نحوه شمارش و اسکن آسیبپذیریها را مشاهده کردید. در این مرحله، باید هر آسیبپذیری که میتواند مورد بهرهبرداری قرار گیرد را با استفاده از یک جستجوی عمومی بررسی کنیم. در یک محیط حرفهای، شرکتها معمولاً از ابزارهای زیر استفاده میکنند:
ابزارهای دیگری نیز برای این منظور وجود دارند، اما اینها محبوبترینها هستند. این ابزارها رایگان نیستند و هزینه دارند، اما برای یک شرکت ضروری هستند تا زمان و تلاشهای بیهوده صرف نشود. ممکن است همیشه به این ابزارها دسترسی نداشته باشید (بسته به مشتریای که با آن کار میکنید). در عوض، میتوانیم از الگوی زیر استفاده کنیم:
- بررسی کنید که آیا اکسپلویت در Metasploit موجود است یا خیر.
- اگر اکسپلویت در Metasploit موجود نباشد، از موتور جستجوی Google برای وارد کردن نام اکسپلویت جستجو کنید:
- شما میتوانید از exploit-db.com استفاده کنید اگر این سایت در بالای جستجو ظاهر شد.
- همچنین میتوانید از GitHub استفاده کنید اگر اکسپلویت در exploit-db یافت نشد.
بیایید یک مثال عملی از یکی از آسیبپذیریهایی که در گزارش OpenVAS قبلی پیدا کردیم (به شکل 7.7 مراجعه کنید) بررسی کنیم.
هر محصول اسکن آسیبپذیری به شما بخشی را نشان خواهد داد که مراجع نحوه بهرهبرداری از آسیبپذیری انتخابشده را نمایش میدهد. در مورد آسیبپذیری قبلی MS17-010، بخش مراجع به مخزن GitHub شرکت Rapid7 (مالکین Metasploit) اشاره میکند (به شکل 7.8 مراجعه کنید). اگر از کجا این اطلاعات را به دست آوردم میپرسید، به بخش خلاصه در شکل 7.7 مراجعه کنید.

استفاده از Metasploit Framework برای بهرهبرداری
این بدان معناست که میتوانیم از Metasploit Framework برای انجام این کار استفاده کنیم. برای شروع، Metasploit را باز کرده و از قابلیت جستجو برای یافتن اکسپلویت ms17-010 استفاده میکنیم:
msf5 > search ms17-010 type:exploit
نتایج مطابق زیر خواهد بود:
Matching Modules
================
# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 exploit/windows/smb/ms17_010_eternalblue 2017-03-14 average Yes MS17-010 EternalBlue SMB Remote Windows Kernel Pool Corruption
1 exploit/windows/smb/ms17_010_eternalblue_win8 2017-03-14 average No MS17-010 EternalBlue SMB Remote Windows Kernel Pool Corruption for Win8+
2 exploit/windows/smb/ms17_010_psexec 2017-03-14 normal Yes MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB Remote Windows Code Execution
3 exploit/windows/smb/smb_doublepulsar_rce 2017-04-14 great Yes SMB DOUBLEPULSAR Remote Code Execution
در اینجا، چهار ماژول مختلف برای بهرهبرداری از آسیبپذیری MS17-010 وجود دارد. توضیحات مربوط به هر ماژول به شرح زیر است:
- exploit/windows/smb/ms17_010_eternalblue: بهرهبرداری از EternalBlue که یک آسیبپذیری در پروتکل SMB برای کرپشن حافظه در هسته ویندوز است.
- exploit/windows/smb/ms17_010_eternalblue_win8: مشابه به اولین ماژول، اما برای ویندوز 8 به بالا.
- exploit/windows/smb/ms17_010_psexec: بهرهبرداری از EternalRomance, EternalSynergy, و EternalChampion برای اجرای کد از راه دور روی ویندوز.
- exploit/windows/smb/smb_doublepulsar_rce: بهرهبرداری از DoublePulsar برای اجرای کد از راه دور.
بهرهبرداری از پروتکل SMB
در این بخش از فصل، وارد جزئیات بیشتری خواهیم شد درباره نحوه بهرهبرداری از پروتکل SMB. اگر از موتور جستجوی گوگل برای یافتن اکسپلویت استفاده کرده باشید، همچنین ممکن است لینک مرجع به exploit-db برای اکسپلویت پیدا شده به شما نشان داده شود (به شکل 7.9 مراجعه کنید).


استفاده از SearchSploit
شما میتوانید به جای استفاده از نسخه وب exploit-db.com، از ابزار SearchSploit در ترمینال برای جستجو استفاده کنید:
$ searchsploit [Options] [Search Terms]
قبل از شروع استفاده از این ابزار، لازم است پایگاه داده آن را بهروزرسانی کنید تا با نسخه آنلاین exploit-db همگام شود:
$ searchsploit --update
جستجوی آسیبپذیری MS17-010 با SearchSploit
در اینجا یک جستجوی پایه برای آسیبپذیری مشهور SMB ms17-010 آورده شده است:
root@kali:~# searchsploit ms17-010
-------------------------------------------------------------------------------
Exploit Title
| Path
-------------------------------------------------------------------------------
Microsoft Windows - 'EternalRomance'/'EternalSynergy'/'EternalChampion' SMB
Remote Code | windows/remote/43970.rb
Microsoft Windows - SMB Remote Code Execution Scanner (MS17-010) (Metasploit)
| windows/dos/41891.rb
Microsoft Windows 7/2008 R2 - 'EternalBlue' SMB Remote Code Execution (MS17-
010) | windows/remote/42031.py
Microsoft Windows 7/8.1/2008 R2/2012 R2/2016 R2 - 'EternalBlue' SMB Remote Code
Executi | windows/remote/42315.py
Microsoft Windows 8/8.1/2012 R2 (x64) - 'EternalBlue' SMB Remote Code
Execution (MS17-0 | windows_x86-64/remote/42030.py
Microsoft Windows Server 2008 R2 (x64) - 'SrvOs2FeaToNt' SMB Remote Code
Execution (MS1 | windows_x86-64/remote/41987.py
-------------------------------------------------------------------------------
Shellcodes: No Results
Papers: No Results
استفاده از فیلترها در SearchSploit
SearchSploit ابزار قدرتمندی است زیرا میتوانید از ابزارهای فیلتر موجود در خط فرمان لینوکس (مثلاً grep
) برای انجام جستجو استفاده کنید. یکی از توابع فیلتر داخلی که باید به آن توجه داشته باشید، گزینه --exclude
است. از آنجا که SearchSploit ممکن است خروجی زیادی نشان دهد، معمولاً من نتایج DOS را فیلتر میکنم. در اینجا یک مثال:
root@kali:~# searchsploit ms17-010 --exclude="/dos/"
همچنین میتوانید برای تصفیه نتایج، شرایط جستجوی خود را با اضافه کردن بیشتر اصطلاحات، دقیقتر کنید. در اینجا یک مثال:
root@kali:~# searchsploit ms17-010 windows remote --exclude="/dos/"
کپی کردن اکسپلویتها به یک دایرکتوری دیگر
پس از انتخاب یک مورد از نتایج، باید فایل را به دایرکتوری دیگری کپی کنید تا محتوای فایل اصلی تغییر نکند. برای مثال، من اولین مورد را از نتایج جستجوی قبلی ($searchsploit ms17-010
) با استفاده از گزینه --mirror
کپی میکنم:
root@kali:~# searchsploit --mirror 43970 /root/
این فرمان به شما اطلاعات زیر را خواهد داد:
Exploit: Microsoft Windows - 'EternalRomance'/'EternalSynergy'/'EternalChampion' SMB Remote Code Execution (Metasploit) (MS17-010)
URL: https://www.exploit-db.com/exploits/43970
Path: /usr/share/exploitdb/exploits/windows/remote/43970.rb
File Type: Ruby script, ASCII text, with CRLF line terminators
Copied to: /root/43970.rb
این نشان میدهد که فایل Ruby اکسپلویت در دایرکتوری /root/
کپی شده است.