Kështu që, kuarti i parë i vitit 2020 e kalova duke u përgatitur për provimin OSCP. Kërkimi i informacionit në Google dhe shumë përpjekje 'të verbra' më morën gjithë kohën e lirë. Sidomos u tregua e vështirë të kuptoja mekanizmat e rritjes së privilegjeve. Kursi PWK i kushton shumë rëndësi kësaj teme, megjithatë materialet metodologjike gjithmonë janë të pakta. Në internet ka një mori manualesh me komanda të dobishme, por unë nuk jam për ndjekjen verbërisht të rekomandimeve pa kuptuar se çfarë do të sjellin ato.
Më dëshiron të ndaj me ju atë që kam arritur të mësoj gjatë përgatitjes dhe kalimit të suksesshëm të provimit (duke përfshirë sulmet periodike në Hack The Box). Kam ndjerë një ndjesi të fortë mirënjohjeje për çdo copë informacioni që më ndihmoi ta kaloj rrugën 'Try Harder' me më shumë vetëdije; tani është koha ime t'i jap nderimin komunitetit.
Deshiroj t'ju ofroj një manual për rritjen e privilegjeve në OS Linux, që përfshin shqyrtimin e vektorëve më të zakonshëm dhe trukave të lidhura, të cilat do t'ju duhen patjetër. Shpesh mekanizmat e rritjes së privilegjeve janë mjaft të thjeshtë, vështirësitë shfaqen në strukturimin dhe analizimin e informacionit. Prandaj, vendosa të filloj me një "ekskurs" përmbledhës dhe më pas të shqyrtoj secilin vektor në një artikull të veçantë. Shpresoj të kursej kohën tuaj për studimin e këtij subjekti.

Pra, pse është e mundur rritja e privilegjeve në vitin 2020, nëse metodat janë të njohura prej kohësh? Në të vërtetë, kur përdoruesi e trajton sistemin siç duhet, në të vërtetë nuk është e mundur të rritej privilegji në të. Problemi kryesor global që krijon këto mundësi është konfigurimi i pasigurt. Prania e versioneve të vjetra të softuerit që përmbajnë dobësi gjithashtu përbën një rast më të veçantë të konfigurimit të pasigurt.
Rritja e privilegjeve përmes konfigurimit të pasigurt
Së pari, le të merremi me konfigurimin e pasigurt. Të fillojmë me faktin se Specialistët IT shpesh përdorin udhëzues dhe burime si stackoverflow, shumë prej të cilave përmbajnë komanda dhe konfigurime të pasigurta. Një shembull i qartë — se kodi më i kopjuar nga stackoverflow përmbante një gabim. Një administrator i përvojshëm do ta shihte problemin, por kjo është në një botë ideale. Edhe specialistët kompetentë, gjatë ngarkesës së rritur të punës mund të bëjnë gabime. Imagjinoni se si një administrator merret me përgatitjen dhe miratimin e dokumentacionit për një tender të ri, duke u futur gjithashtu në një teknologji të re që do të implementohet në tremujorin e ardhshëm, përveçse njihet edhe me problemet që lidhen me mbështetje për përdoruesit. Dhe atëherë, atij i jepet detyra për të ngritur shpejt disa virtualizime dhe për të vendosur shërbimet mbi to. Si mendoni, çfarë është probabiliteti që administratori thjesht ta humbasë problemin? Pastaj specialistët ndyshohen, ndërsa patch-at mbeten, ku ndërkohë kompanitë gjithmonë përpiqen të minimizojnë shpenzimet, përfshirë ata në IT.
Pseudo-shell dhe jailbreak
Një shell sistemik që merret gjatë fazës së shfrytëzimit shpesh është i kufizuar, veçanërisht nëse e keni marrë atë përmes një shfrytëzimi të përdoruesit të serverit web. Për shembull, kufizimet e shell-it mund të parandalojnë përdorimin e komandës sudo duke dhënë një gabim:
sudo: no tty present and no askpass program specifiedPasi të keni marrë shell-in, rekomandoj të krijoni një terminal të plotë, për shembull, duke përdorur Python.
python -c 'import pty;pty.spawn("/bin/bash")'Do të pyesni: «Pse kam një mijë komanda kur mund të përdor një për ndihmë, si për shembull për të transferuar dosje?» E vërteta është se sistemet konfigurohen ndryshe, dhe në hostin përkatës mund të mos ketë Python, por mund të ketë Perl. Aftësia qëndron në atë që mund të bëni në sistemin tuaj gjërat e zakonshme pa mjetet tuaja të zakonshme. Një listë e plotë e mundësive mund të gjendet .
Një shell me privilegje të ulta mund të merret duke përdorur dhe (e çuditshme, madje edhe GIMP).
Shikimi i historisë së komandave
Linux mbledh historinë e të gjitha komandave të ekzekutuara në një skedar ~/.bash_history. Nëse serveri është aktivisht i përdorur dhe historia e tij nuk është pastruar, ekziston një probabilitet i lartë që të gjenden të dhënat e identifikimit në këtë skedë. Të pastruarit e historisë është thjesht e pakëndshme. Nëse administratori është i detyruar të zgjedhë komanda të shumëta, sigurisht që do të ishte më e lehtë ta thërrasë këtë komandë nga historia sesa ta shkruajë sërish. Plus, shumë njerëz nuk e dinë këtë „hack“. Nëse në sistem ka shell të tjera si Zsh ose Fish, ato ruajnë historinë e tyre. Për të nxjerrë historinë e komandave në çdo shell, mjafton të shkruani komandën history.
cat ~/\.bash_history
cat ~/\.mysql_history
cat ~/\.nano_history
cat ~/\.php_history
cat ~/\.atftp_historyEkziston hosting shared, ku serveri përdoret për hapjen e disa faqeve. Në përgjithësi, me një konfigurim të tillë, për secilën burim krijohet një përdorues i veçantë me një direktori të veçantë shtëpiake dhe një host virtual. Pra, me konfigurimin e gabuar në direktorinë rrënjësore të burimeve në web, mund të zbuloni skedën .bash_history.
Kërkimi i fjalëkalimeve në sistemin e skedarëve dhe sulmet ndaj sistemeve ngjitur
Skedarët e konfigurimit të shërbimeve të ndryshme mund të jenë të qasshëm për përdoruesin tuaj aktual. Në to mund të ndodhen kredenciale në formë të hapur — fjalëkalime për qasje në bazën e të dhënave ose shërbime të ngjashme. I njëjti fjalëkalim mund të përdoret si për qasje në bazën e të dhënave ashtu edhe për autorizimin e përdoruesit root (credential staffing).
Herë-herë, kredencialet e gjetura iu takojnë shërbimeve në hoste të tjera. Zhvillimi i një sulmi ndaj infrastrukturës përmes një hosti të kompromentuar nuk është më i keq sesa shfrytëzimi i hosteve të tjera. Sistemet e ngjashme gjithashtu mund të gjenden duke kërkuar për adresa IP në sistemin e skedarëve.
grep -lRi "password" /home /var/www /var/log 2>/dev/null | sort | uniq #Gjej fjalën kyçe password (pa cs) në këto drejtime
grep -a -R -o '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}' /var/log/ 2>/dev/null | sort -u | uniq #IP-të brenda logjeveNë rast se në hostin e kompromentuar ka një aplikacion web të qasshëm nga Interneti, është më mirë të përjashtoni logjet e tij nga kërkimi për adresa IP. Adresat e përdoruesve të burimit nga Interneti ndoshta nuk do të jenë të dobishme, ndërsa adresat e rrjetit të brendshëm (172.16.0.0/12, 192.168.0.0/16, 10.0.0.0/8) dhe vendet ku ata shkojnë, sipas logjeve, mund të kenë interes.
Sudo
Komanda sudo i jep përdoruesit mundësinë të ekzekutojë një komandë në kontekstin e root me anë të fjalëkalimit të tij ose pa e përdorur fare atë. Shumë operacione në Linux kërkojnë privilegje root, megjithatë puna nga llogaria root konsiderohet një praktikë shumë e keqe. Në vend të kësaj, është më mirë të përdoret një leje selektive për të ekzekutuar komanda në kontekstin e root. Megjithatë, shumë mjetet Linux, përfshirë standardet si vi, mund të përdoren për të rritur privilegjet në mënyra të ligjshme. Për të gjetur mënyrën e duhur rekomandoj të shikoni .
E para që duhet bërë sapo të keni akses në sistem është të ekzekutoni komandën sudo -l. Ajo do të tregojë lejen për përdorimin e komandës sudo. Nëse përdoruesi nuk ka fjalëkalim (për shembull, apache ose www-data), vektori i rritjes së privilegjeve përmes sudo është shumë i pakët. Kur përdoret sudo, sistemi do të kërkojë fjalëkalimin. Me komandën passwd nuk do të mund të vendosni një fjalëkalim, pasi ajo do të kërkojë fjalëkalimin aktual të përdoruesit. Por nëse sudo është ende i aksesueshëm, në thelb duhet të kërkoni:
- çdo interpretor, gjithkush mund të fillojë një shell (PHP, Python, Perl);
- çdo redaktor teksti (vim, vi, nano);
- çdo shikues (less, more);
- çdo mundësi për të punuar me sistemin e skedave (cp, mv);
- mjetet që kanë qasje në bash, interaktive ose në formën e një komande ekzekutimi (awk, find, nmap, tcpdump, man, vi, vim, ansible).
Suid/Sgid
Në internet ka shumë manuale që rekomandojnë për të mbledhur të gjitha komandat suid/sgid, megjithatë, shumë pak artikuj japin detajet se çfarë të bëjmë me këto programe. Opcionet për rritjen e privilegjeve, që nuk shqyrtojnë përdorimin e eksploitëve, mund të gjenden . Po ashtu, një sërë skedarësh ekzekutues ka dobësi specifike për versionin e OS-së, .
Në një botë ideale, duhet të kaloni të gjithë paketat e instaluara përmes searchsploit. Në praktikë, kjo duhet bërë me programet më të njohura si sudo. Gjithashtu, gjithmonë ka mundësinë për të përdorur dhe mbështetur zhvillimin e mjeteve automatizuese që do të ndriçojnë skedarët ekzekutues interesante, në lidhje me rritjen e privilegjeve, me bitet e vendosur suid/sgid. Lista e tillë e mjeteve do të përfshihet në seksionin përkatës të artikullit.
Skripte të mundshme për të shkruar, të drejtuara nga Cron ose Init, në kontekstin e Root
Detyrat cron mund të ekzekutohen në kontekstin e përdoruesve të ndryshëm, përfshirë root. Nëse në cron është vendosur një detyrë që ka lidhje me një skedar ekzekutues, dhe ai është i доступshëm për ju për të shkruar, është lehtë që të zëvendësohet me një skedar të dëmshëm dhe të shkaktojë një rritje të privilegjeve. Në këtë rast, sipas parazgjedhjes, skedarët me detyrat cron janë të aksesueshëm për të lexuar nga çdo përdorues.
ls -la /etc/cron.d # shfaq detyrat cron Në mënyrë të ngjashme, funksionon edhe init. Dallimi është se detyrat në cron ekzekutohen periodicisht, ndërsa në init — gjatë nisjes së sistemit. Për të shfrytëzuar këtë, do të nevojitet një rinisje e sistemit, dhe disa shërbime mund të mos ngrihen (nëse ato nuk janë regjistruar në autoload).
ls -la /etc/init.d/ # shfaq skriptet init Gjithashtu, mund të kërkoni skedarë që janë të aksesueshëm për çdo përdorues për të shkruar.
find / -perm -2 -type f 2>/dev/null # gjej skedarët shpërndarësMetoda është mjaft e njohur, administratorët e sistemit me përvojë e përdorin me kujdes komandën chmod. Megjithatë, shumica e manualeve në internet përshkruajnë vendosjen e të drejtave maksimale. Qasja e administratorëve të rinj "mjafton të funksionojë" krijon mundësi për rritjen e privilegjeve në përgjithësi. Nëse ka mundësi, është më mirë të kërkoni në historinë e komandave për përdorimin e pasigurt të chmod.
chmod +w /path
chmod 777 /pathTë fitosh akses në shell-in e përdoruesve të tjerë
Shikojmë listën e përdoruesve në /etc/passwd. Kushtojmë vëmendje atyre që kanë shell. Mund të përpiqemi të brute-force këta përdorues — nuk është e përjashtuar që përmes përdoruesit të fituar, në fund të arrihet rritja e privilegjeve.
Për të përmirësuar sigurinë, rekomandoj gjithmonë të respektohet parimi i privilegjeve minime. Ka gjithashtu kuptim të kushtohet kohë për të kontrolluar konfigurimet e pasiguruara, të cilat mund të kenë mbetur pas troubleshooting-ut — ky është "borxhi teknik" i administratorit të sistemit.
Kod i shkruar vetë
Është e rëndësishme të shqyrtoni me kujdes skedarët ekzekutivë në direktorinë përkatëse të përdoruesit dhe serverit web (/var/www/, nëse nuk është caktuar ndryshe). Këta skedarë mund të përfaqësojnë një zgjidhje krejtësisht të pasigurt dhe të përmbajnë të ngjashme me riparime të çuditshme. Sigurisht, nëse keni ndonjë framework në direktorinë e serverit web, nuk ka kuptim të kërkoni zero-day brenda procesit të testimit të depërtimit, megjithatë, rekomandohet të gjenden dhe studiohen modifikimet, pluginat dhe komponentët e personalizuar.
Për të rritur sigurinë, më mirë të shmangni përdorimin e akreditive në skriptet e krijuara nga vetë, si dhe funksionalitetin potencialisht të rrezikshëm, si leximin e /etc/shadow ose manipulimin me id_rsa.
Rritja e privilegjeve përmes shfrytëzimit të dobësive
Para se të provoni të rrisni privilegjet përmes shfrytëzimit, është e rëndësishme të kuptoni transferimin e skedarëve në hostin e synuar. Përveç mjeteve të zakonshme si ssh, ftp, http (wget, curl), ka një të tërë .
Për të rritur sigurinë e sistemit, përditësoni rregullisht atë në versione të fundit të qëndrueshme versioneve, si përpiquni të përdorni distribucionet që janë të dizajnuara për Enterprise. Në të kundërt, ndodhen rrethana të rralla, kur apt upgrade bën sistemin jo-funksional.
Eksplorimi i shërbimeve që janë aktivizuar në kontekstin e përdoruesit root
Disa shërbime Linux punojnë nga përdoruesi me privilegje root. Ato mund të gjenden duke përdorur komandën ps aux | grep root. Sidoqoftë, shërbimi mund të mos njoftohet në Rrjet dhe të jetë vetëm lokal. Nëse ka eksploitë publik, mund t'i përdorni pa frikë: rënia e shërbimit në rast të dështimit është shumë më pak kritike se rënia e OS.
ps -aux | grep root # LinuxNjë rast shumë i favorshëm do të ishte funksionimi i shërbimit të komprometuar në kontekstin e përdoruesit root. Eksplorimi i shërbimit SMB jep qasje privilegjuese SYSTEM në sistemet Windows (për shembull, përmes ms17-010). Megjithatë, në sistemet Linux kjo ndodh rrallë, kështu që mund të kaloni shumë kohë në rritjen e privilegjeve.
Eksplorimi i dobësive të kernelit të Linux
Kyçi është të ecni në këtë rrugë si opsionin e fundit. Një shfrytëzim i pasuksesshëm mund të çojë në rënien e sistemit, dhe në rast se rindezja ndodh, disa shërbime (përfshirë ato që kanë lejuar marrjen e shell-it fillestar) mund të mos ngjiten. Ndonjëherë, administratorët thjesht harrojnë të aplikojnë komandën systemctl enable. Gjithashtu, do të ketë shumë pakënaqësi ndaj punës suaj nëse shfrytëzimi nuk ishte miratuar.
Nëse vendosni të përdorni kodin burimor nga exploitdb, sigurohuni që të lexoni komentet në fillim të skriptit. Përveç të tjerave, atje zakonisht shkruhet si duhet të kompiloni saktësisht këtë eksploit. Nëse jeni të lodhur për ta bërë vetë ose keni afate të kaluara, mund të kërkoni për depo të eksploitave tashmë të kompiluar. . Sidoqoftë, duhet të kuptoni se në këtë rast do të merrni një macë në një çantë. Nga ana tjetër, nëse programuesi do të kishte njohuri deri në bajt mbi mënyrën se si funksionon kompjuteri dhe software që përdor, ai nuk do të kishte shkruar asnjë rresht kodi gjatë gjithë jetës së tij.
cat /proc/version
uname -a
searchsploit "Linux Kernel" Metasploit
Për të kapur dhe trajtuar një lidhje, gjithmonë është më mirë të përdorësh modulën exploit/multi/handler. E rëndësishme është të vendosësh payload-in e duhur, si p.sh. generic/shell/reverse_tcp ose generic/shell/bind_tcp. Shell-in e marrë në Metasploit mund ta përmirësosh në Meterpreter duke përdorur modulën post/multi/manage/shell_to_meterpreter. Me Meterpreter, mund të automatizosh procesin e posteksploitimit. Për shembull, moduli post/multi/recon/local_exploit_suggester kontrollon platformën, arkitekturën dhe entitetet e nevojshme për eksploitim dhe sugjeron modulet Metasploit për ngritjen e privilegjeve në sistemin e synuar. Falë Meterpreter, ngritja e privilegjeve ndonjëherë reduktohet në ekzekutimin e modulit të duhur, megjithatë, hackimi pa kuptuar se çfarë ndodh nën kapak nuk është "të varfër" (duhet të shkruash një raport edhe).
Mjetet
Mjetet e automatizimit për mbledhjen lokale të informacionit do t'ju kursejnë një sasi të madhe forca dhe kohe, megjithatë vetë nuk janë në gjendje të identifikojnë plotësisht rrugën e ngritjes së privilegjeve, të paktën në rastin e eksploitimit të dobësive të bërthamës. Mjetet e automatizimit do të kryejnë për ju të gjitha komandat e nevojshme për mbledhjen e informacionit mbi sistemin, por është gjithashtu e rëndësishme të jesh në gjendje të analizosh të dhënat e marra. Shpresoj që artikulli im do t'ju ndihmojë në këtë. Natyrisht, ekzistojnë shumë më tepër mjete sesa ato që do të përmend më poshtë, megjithatë të gjitha bëjnë më shumë ose më pak të njëjtën gjë — këtu, më shumë se sa ka të bëjë me shijen.
Një mjet mjaft i ri, commit-i i parë daton nga janari 2019. Deri më tani është mjeti im i preferuar. Qëllimi është që të theksojë vektorët më interesantë për përmirësimin e privilegjeve. Pajtoheni, është më e lehtë të merrni një vlerësim gjithëpërfshirës në këtë nivel sesa të shqyrtoni të dhëna të papërpunuara dhe monolitike.
Mjeti im i dytë i preferuar, gjithashtu mbledh dhe sistematikon të dhënat e marra nga enumerimi lokal.
Ky eksploitat do të analizojë sistemin për të gjeneruar kushte të përshtatshme për eksploitat. Në thelb, do të bëjë punën e njëjtë si moduli Metasploit local_exploit_suggester, por do të ofrojë jo modulet Metasploit, por lidhje me kodet burimore në exploit-db.
Ky skript do të mbledhë dhe sistematikojë shumë informacion të ndarë në seksione, i cili mund të jetë i dobishëm për formimin e një vektori për përmirësimin e privilegjeve.
Një herë tjetër do ta shqyrtoj në detaje. .
Burimi: habr.com
