Linux Privilege Escalation
Last updated
Last updated
Leer & oefen AWS Hack:HackTricks Opleiding AWS Red Team Expert (ARTE) Leer & oefen GCP Hack: HackTricks Opleiding GCP Red Team Expert (GRTE)
Laten ons begin om 'n bietjie kennis van die bedryfstelsel wat loop, te verkry.
As jy skryfregte het op enige lêer binne die PATH
veranderlike, kan jy dalk sommige biblioteke of binêre lêers kap.
Interessante inligting, wagwoorde of API-sleutels in die omgewingsveranderlikes?
Kontroleer die kernel-weergawe en of daar 'n uitbuiting is wat gebruik kan word om voorregte te verhoog
Jy kan 'n goeie lys van kwesbare kernweergawes en reeds gekompileerde uitbuite hier vind: https://github.com/lucyoa/kernel-exploits en exploitdb sploits. Ander webwerwe waar jy sommige gekompileerde uitbuite kan vind: https://github.com/bwbwbwbw/linux-exploit-binaries, https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack
Om al die kwesbare kernweergawes van daardie webwerf te onttrek, kan jy die volgende doen:
Hulpmiddels wat kan help om te soek na kernel-uitbuitings is:
linux-exploit-suggester.sh linux-exploit-suggester2.pl linuxprivchecker.py (voer UIT op slagoffer, kontroleer slegs uitbuitings vir kernel 2.x)
Soek altyd die kernel-weergawe in Google, dalk is jou kernel-weergawe geskryf in 'n paar kernel-uitbuitings en dan sal jy seker wees dat hierdie uitbuiting geldig is.
Linux Privilege Escalation - Linux Kernel <= 3.19.0-73.8
Gebaseer op die kwesbare sudo weergawes wat voorkom in:
Jy kan nagaan of die sudo weergawe kwesbaar is deur hierdie grep te gebruik.
Van @sickrov
Kyk na smasher2-boks van HTB vir 'n voorbeeld van hoe hierdie kwetsbaarheid uitgebuit kan word
Adresruimtelayoutrandomisering (ASLR) is 'n tegniek wat gebruik word om die posisies van geheuekomponente te skuif om aanvalle moeiliker te maak.
As jy binne 'n Docker-houer is, kan jy probeer om daaruit te ontsnap:
Docker SecurityKyk wat is aan- en afgekoppel, waar en hoekom. As enigiets afgekoppel is, kan jy probeer om dit aan te koppel en vir privaat inligting te ondersoek
Enumerate nuttige bineêre lêers
Ook, kontroleer of enige kompiler geïnstalleer is. Dit is nuttig as jy 'n kernel-uitbuiting wil gebruik, aangesien dit aanbeveel word om dit op die masjien waar jy dit gaan gebruik (of op een soortgelyk) te kompileer.
Kyk na die weergawe van die geïnstalleerde pakkette en dienste. Dalk is daar 'n ou Nagios-weergawe (byvoorbeeld) wat uitgebuit kan word om voorregte te verhoog... Dit word aanbeveel om handmatig die weergawe van die meer verdagte geïnstalleerde sagteware te kontroleer.
Indien jy SSH-toegang tot die masjien het, kan jy ook openVAS gebruik om te kyk vir verouderde en kwesbare sagteware wat binne die masjien geïnstalleer is.
Merk op dat hierdie bevele baie inligting sal toon wat meestal nutteloos sal wees, daarom word dit aanbeveel om sekere toepassings soos OpenVAS of soortgelyk te gebruik wat sal nagaan of enige geïnstalleerde sagteware weergawe kwesbaar is vir bekende aanvalle
Neem 'n kyk na watter prosesse uitgevoer word en kyk of enige proses meer bevoegdhede het as wat dit behoort te hê (miskien word 'n tomcat deur root uitgevoer?)
Maak altyd seker vir moontlike electron/cef/chromium debuggers wat loop, jy kan dit misbruik om voorregte te eskaleer. Linpeas ontdek dit deur die --inspect
parameter binne die bevellyn van die proses te ondersoek.
Ook kontroleer jou voorregte oor die prosesse binêr lêers, miskien kan jy iemand oorskryf.
Jy kan gereedskap soos pspy gebruik om prosesse te monitor. Dit kan baie nuttig wees om kwesbare prosesse te identifiseer wat gereeld uitgevoer word of wanneer 'n stel vereistes voldoen is.
Sommige dienste van 'n bediener stoor geloofsbriewe in die geheue in die oop teks. Gewoonlik sal jy root voorregte benodig om die geheue van prosesse wat aan ander gebruikers behoort te lees, daarom is dit gewoonlik meer nuttig wanneer jy reeds root is en meer geloofsbriewe wil ontdek. Onthou egter dat as 'n gewone gebruiker jy die geheue van die prosesse wat jy besit kan lees.
Let daarop dat die meeste masjiene vandag nie standaard ptrace toelaat nie wat beteken dat jy nie ander prosesse wat aan jou onbevoorregte gebruiker behoort kan dump nie.
Die lêer /proc/sys/kernel/yama/ptrace_scope beheer die toeganklikheid van ptrace:
kernel.yama.ptrace_scope = 0: alle prosesse kan gedebug word, solank hulle dieselfde uid het. Dit is die klassieke manier waarop ptracing gewerk het.
kernel.yama.ptrace_scope = 1: slegs 'n ouerproses kan gedebug word.
kernel.yama.ptrace_scope = 2: Slegs 'n administrateur kan ptrace gebruik, aangesien dit die CAP_SYS_PTRACE-vermoë vereis.
kernel.yama.ptrace_scope = 3: Geen prosesse mag met ptrace nagespeur word nie. Nadat dit ingestel is, is 'n herlaai nodig om ptracing weer moontlik te maak.
As jy toegang het tot die geheue van 'n FTP-diens (byvoorbeeld) kan jy die Heap kry en binnein sy geloofsbriewe soek.
Vir 'n gegewe proses-ID, wys maps hoe geheue toegewys is binne daardie proses se virtuele adresruimte; dit wys ook die regte van elke toegewysde streek. Die mem pseudobestand blootstel die proses se geheue self. Uit die maps lêer weet ons watter geheue streek leesbaar is en hul verskuiwings. Ons gebruik hierdie inligting om in die mem lêer te soek en alle leesbare streek te dump na 'n lêer.
/dev/mem
bied toegang tot die stelsel se fisiese geheue, nie die virtuele geheue nie. Die kernel se virtuele adresruimte kan benader word deur gebruik te maak van /dev/kmem.
Gewoonlik is /dev/mem
slegs leesbaar deur root en die kmem groep.
ProcDump is 'n Linux-herverbeelding van die klassieke ProcDump-gereedskap uit die Sysinternals-pakket van gereedskap vir Windows. Kry dit by https://github.com/Sysinternals/ProcDump-for-Linux
Om 'n prosesgeheue te dump, kan jy die volgende gebruik:
https://github.com/hajzer/bash-memory-dump (root) - _Jy kan handmatig die root vereistes verwyder en die proses wat deur jou besit, dump
Skripsie A.5 van https://www.delaat.net/rp/2016-2017/p97/report.pdf (root word benodig)
As jy vind dat die verifikasieproses loop:
Jy kan die proses dump (sien vorige afdelings om verskillende maniere te vind om die geheue van 'n proses te dump) en soek na geloofsbriewe binne die geheue:
Die gereedskap https://github.com/huntergregal/mimipenguin sal duidelike tekskredensiale uit die geheue en uit sommige bekende lêers steel. Dit vereis root-voorregte om behoorlik te werk.
Funksie | Prosesnaam |
---|---|
GDM wagwoord (Kali Desktop, Debian Desktop) | gdm-password |
Gnome Keyring (Ubuntu Desktop, ArchLinux Desktop) | gnome-keyring-daemon |
LightDM (Ubuntu Desktop) | lightdm |
VSFTPd (Aktiewe FTP Verbindings) | vsftpd |
Apache2 (Aktiewe HTTP Basiese Verifiseringsessies) | apache2 |
OpenSSH (Aktiewe SSH-sessies - Sudo Gebruik) | sshd: |
Kyk of enige geskeduleerde taak kwesbaar is. Dalk kan jy voordeel trek uit 'n skriffie wat deur root uitgevoer word (wildcard kwesbaarheid? kan lêers wysig wat root gebruik? gebruik simbole? skep spesifieke lêers in die gids wat root gebruik?).
Byvoorbeeld, binne /etc/crontab kan jy die PAD vind: PAD=/home/user:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
(Let op hoe die gebruiker "user" skryfregte oor /home/user het)
As die rootgebruiker binne hierdie crontab probeer om 'n bevel of skrips uit te voer sonder om die pad in te stel. Byvoorbeeld: * * * * root overwrite.sh Dan kan jy 'n root-skoot kry deur die volgende te gebruik:
As 'n skrips deur root uitgevoer word en 'n "*" binne 'n bevel het, kan jy dit uitbuit om onverwagte dinge te doen (soos privilige-escalation). Voorbeeld:
As die wildkaart voorafgegaan word deur 'n pad soos /some/path/* , is dit nie kwesbaar nie (selfs ./* is nie).
Lees die volgende bladsy vir meer wildkaart-uitbuitingstruuks:
Wildcards Spare tricksAs jy 'n cron-skrips kan wysig wat deur root uitgevoer word, kan jy baie maklik 'n skaal kry:
Indien die skripsie wat deur root uitgevoer word 'n gids gebruik waar jy volle toegang tot het, kan dit dalk nuttig wees om daardie gids te verwyder en 'n symboliese skakelgids na 'n ander een te skep wat 'n skrips beheer deur jou dien.
Jy kan die prosesse monitor om te soek na prosesse wat elke 1, 2 of 5 minute uitgevoer word. Miskien kan jy hiervan gebruik maak en voorregte eskaleer.
Byvoorbeeld, om elke 0.1s tydens 1 minuut te monitor, te sorteer volgens minder uitgevoerde opdragte en die opdragte te verwyder wat die meeste uitgevoer is, kan jy doen:
Jy kan ook gebruik maak van pspy (dit sal elke proses monitor en lys wat begin).
Dit is moontlik om 'n cronjob te skep deur 'n karretjie terug te plaas na 'n kommentaar (sonder 'n nuwe lyn karakter), en die cron taak sal werk. Voorbeeld (let op die karretjie terug karakter):
Kyk of jy enige .service
lêer kan skryf, as jy kan, kan jy dit wysig sodat dit jou agterdeur uitvoer wanneer die diens begin, herlaai of gestop word (miskien sal jy moet wag totdat die masjien herlaai word).
Byvoorbeeld, skep jou agterdeur binne die .service lêer met ExecStart=/tmp/script.sh
Onthou dat as jy skryftoestemmings oor binêres wat deur dienste uitgevoer word het, kan jy hulle verander vir agterdeure sodat wanneer die dienste heruitgevoer word, sal die agterdeure uitgevoer word.
Jy kan die PAD sien wat deur systemd gebruik word met:
Indien jy vind dat jy kan skryf in enige van die lêers van die pad, kan jy moontlik priviliges verhoog. Jy moet soek na relatiewe paaie wat gebruik word in dienskonfigurasie-lêers soos:
Dan, skep 'n uitvoerbare met dieselfde naam as die relatiewe pad binêre lêer binne die systemd PAD-vouer waar jy kan skryf, en wanneer die diens versoek word om die kwesbare aksie (Begin, Stop, Herlaai) uit te voer, sal jou agterdeur uitgevoer word (ongepriviligeerde gebruikers kan gewoonlik nie dienste begin/stop nie, maar kyk of jy sudo -l
kan gebruik).
Leer meer oor dienste met man systemd.service
.
Tydskakelaars is systemd eenheidslêers waarvan die naam eindig op **.timer**
wat **.service**
lêers of gebeurtenisse beheer. Tydskakelaars kan gebruik word as 'n alternatief vir cron aangesien hulle ingeboude ondersteuning vir kalender tydgebeurtenisse en monotoniese tydgebeurtenisse het en asinkronies uitgevoer kan word.
Jy kan al die tydskakelaars opsom met:
As jy 'n tydsaanduig kan wysig, kan jy dit laat uitvoer op bestaande systemd.unit (soos 'n .service
of 'n .target
)
In die dokumentasie kan jy lees wat die Eenheid is:
Die eenheid wat geaktiveer moet word wanneer hierdie tydhouer verloop. Die argument is 'n eenheidsnaam, waarvan die agtervoegsel nie ".timer" is nie. Indien nie gespesifiseer nie, word hierdie waarde standaard na 'n diens wat dieselfde naam as die tydhouereenheid het, behalwe vir die agtervoegsel. (Sien hierbo.) Dit word aanbeveel dat die eenheidsnaam wat geaktiveer word en die eenheidsnaam van die tydhouereenheid identies genoem word, behalwe vir die agtervoegsel.
Daarom, om hierdie toestemming te misbruik, sal jy nodig hê:
Vind 'n paar systemd-eenheid (soos 'n .service
) wat 'n skryfbare binêre lê uitvoer
Vind 'n paar systemd-eenheid wat 'n relatiewe pad uitvoer en jy het skryfregte oor die systemd PAD (om daardie uitvoerbare lêer te verpersoonlik)
Leer meer oor tydhouers met man systemd.timer
.
Om 'n tydhouer te aktiveer, het jy nodig om root-regte te hê en die volgende uit te voer:
Let op dat die tydhouer geaktiveer word deur 'n simbooliese skakel daarna te skep in /etc/systemd/system/<WantedBy_section>.wants/<name>.timer
Unix-domein-sokkels (UDS) maak proseskommunikasie moontlik op dieselfde of verskillende rekenaars binne klient-bedienermodelle. Hulle maak gebruik van standaard Unix-beskrywerlêers vir inter-rekenaarkommunikasie en word opgestel deur middel van .socket
-lêers.
Sokkels kan gekonfigureer word met behulp van .socket
-lêers.
Leer meer oor sokkels met man systemd.socket
. Binne hierdie lêer kan verskeie interessante parameters gekonfigureer word:
ListenStream
, ListenDatagram
, ListenSequentialPacket
, ListenFIFO
, ListenSpecial
, ListenNetlink
, ListenMessageQueue
, ListenUSBFunction
: Hierdie opsies is verskillend, maar 'n opsomming word gebruik om aan te dui waar dit gaan luister na die sokkel (die pad van die AF_UNIX-sokkellêer, die IPv4/6 en/of poortnommer om na te luister, ens.)
Accept
: Neem 'n booleaanse argument. As dit waar is, word 'n diensinstansie geskep vir elke inkomende verbinding en word slegs die verbindingsokkel daaraan oorgedra. As dit onwaar is, word al die luisterende sokkels self aan die beginnende diens-eenheid oorgedra, en slegs een diens-eenheid word geskep vir al die verbindinge. Hierdie waarde word geïgnoreer vir datagram-sokkels en FIFO's waar 'n enkele diens-eenheid onvoorwaardelik al die inkomende verkeer hanteer. Standaard onwaar. Vir prestasie-redes word dit aanbeveel om nuwe duiwels slegs op 'n manier te skryf wat geskik is vir Accept=no
.
ExecStartPre
, ExecStartPost
: Neem een of meer opdraglyne, wat uitgevoer word voor of na die luisterende sokkels/FIFO's geskep en gebind word, onderskeidelik. Die eerste token van die opdraglyn moet 'n absolute lêernaam wees, gevolg deur argumente vir die proses.
ExecStopPre
, ExecStopPost
: Addisionele opdragte wat uitgevoer word voor of na die luisterende sokkels/FIFO's gesluit en verwyder word, onderskeidelik.
Service
: Spesifiseer die diens-eenheidsnaam om te aktiveer met inkomende verkeer. Hierdie instelling is slegs toegelaat vir sokkels met Accept=no. Dit word standaard na die diens wat dieselfde naam as die sokkel dra (met die agtervoegsel vervang). In die meeste gevalle behoort dit nie nodig te wees om hierdie opsie te gebruik nie.
As jy 'n skryfbare .socket
-lêer vind, kan jy aan die begin van die [Socket]
-afdeling iets soos voeg: ExecStartPre=/home/kali/sys/backdoor
en die agterdeur sal uitgevoer word voordat die sokkel geskep word. Daarom sal jy waarskynlik moet wag totdat die rekenaar herlaai is.
Merk op dat die stelsel daardie sokkellêer-konfigurasie moet gebruik of die agterdeur sal nie uitgevoer word nie
As jy enige skryfbare sokkel identifiseer (nou praat ons oor Unix-sokkels en nie oor die konfig .socket
-lêers nie), dan kan jy kommunikeer met daardie sokkel en miskien 'n kwesbaarheid uitbuit.
Uitbuiting voorbeeld:
Socket Command InjectionMerk op dat daar dalk sokkels is wat luister vir HTTP versoeke (Ek praat nie van .socket lêers nie, maar van lêers wat as Unix sokkels optree). Jy kan dit nagaan met:
Indien die sokkie reageer met 'n HTTP versoek, kan jy met dit kommunikeer en dalk van 'n kwesbaarheid misbruik maak.
Die Docker sokkie, dikwels gevind by /var/run/docker.sock
, is 'n kritieke lêer wat beveilig moet word. Standaard is dit skryfbaar deur die root
gebruiker en lede van die docker
groep. Om skryftoegang tot hierdie sokkie te hê, kan lei tot voorreg-escalasie. Hier is 'n uiteensetting van hoe dit gedoen kan word en alternatiewe metodes as die Docker CLI nie beskikbaar is nie.
As jy skryftoegang tot die Docker sokkie het, kan jy voorregte opskerp deur die volgende opdragte te gebruik:
Hierdie bevele stel jou in staat om 'n houer met wortelvlaktoegang tot die gasheer se lêersisteem uit te voer.
In gevalle waar die Docker CLI nie beskikbaar is nie, kan die Docker-socket steeds gemanipuleer word deur die Docker API en curl
-bevele te gebruik.
Lys Docker-beelde: Haal die lys van beskikbare beelde op.
Skep 'n Houer: Stuur 'n versoek om 'n houer te skep wat die gasheerstelsel se hoofgids aankoppel.
Begin die nuut geskepte houer:
Koppel aan die Houer: Gebruik socat
om 'n verbinding met die houer tot stand te bring, wat die uitvoering van bevele daarin moontlik maak.
Nadat die socat
-verbinding opgestel is, kan jy bevele direk in die houer uitvoer met wortelvlaktoegang tot die gasheer se lêersisteem.
Let daarop dat as jy skryfregte oor die docker-socket het omdat jy binne die groep docker
is, het jy meer maniere om voorregte te eskaleer. As die docker API na 'n poort luister kan jy dit ook dalk kompromitteer.
Kyk na meer maniere om uit te breek uit docker of dit te misbruik om voorregte te eskaleer in:
Docker SecurityAs jy vind dat jy die ctr
bevel kan gebruik, lees die volgende bladsy aangesien jy dit kan misbruik om voorregte te eskaleer:
As jy vind dat jy die runc
bevel kan gebruik, lees die volgende bladsy aangesien jy dit kan misbruik om voorregte te eskaleer:
D-Bus is 'n gesofistikeerde interproseskommunikasie (IPC)-sisteem wat programme in staat stel om doeltreffend te interaksieer en data te deel. Ontwerp met die moderne Linux-sisteem in gedagte, bied dit 'n robuuste raamwerk vir verskillende vorme van programkommunikasie.
Die stelsel is veelsydig en ondersteun basiese IPC wat data-uitruiling tussen prosesse verbeter, wat herinner aan verbeterde UNIX-domeinsokkels. Daarbenewens help dit om gebeure of seine uit te saai, wat naadlose integrasie tussen stelselkomponente bevorder. Byvoorbeeld, 'n sein van 'n Bluetooth-daemon oor 'n inkomende oproep kan 'n musiekspeler laat stil word, wat die gebruikerservaring verbeter. Daarbenewens ondersteun D-Bus 'n afgeleë objeksisteem, wat diensversoeke en metode-aanroepings tussen programme vereenvoudig, wat prosesse wat tradisioneel kompleks was, stroomlyn.
D-Bus werk op 'n toelaat/weier-model, wat boodskappermissies (metode-oproepe, seinemissies, ens.) bestuur op grond van die kumulatiewe effek van ooreenstemmende beleidreëls. Hierdie beleide spesifiseer interaksies met die bus en kan moontlik voorregte-escalasie toelaat deur die uitbuiting van hierdie toestemmings.
'n Voorbeeld van so 'n beleid in /etc/dbus-1/system.d/wpa_supplicant.conf
word verskaf, wat toestemmings vir die root-gebruiker om besit te hê, na te stuur en boodskappe te ontvang van fi.w1.wpa_supplicant1
beskryf.
Beleide sonder 'n gespesifiseerde gebruiker of groep geld universeel, terwyl "standaard" konteksbeleide van toepassing is op almal wat nie deur ander spesifieke beleide gedek word nie.
Leer hoe om 'n D-Bus kommunikasie te ontleed en uit te buit hier:
D-Bus Enumeration & Command Injection Privilege EscalationDit is altyd interessant om die netwerk te ontleed en die posisie van die masjien uit te vind.
Bevestig altyd netwerkdienste wat op die masjien loop wat jy nie kon interaksie mee hê voor jy dit toegang nie:
Kyk of jy verkeer kan afluister. As jy dit kan doen, kan jy moontlik sekere geloofsbriewe vasvang.
Kyk wie jy is, watter voorregte jy het, watter gebruikers in die stelsels is, wie kan aanmeld en wie het root-voorregte:
Sommige Linux-weergawes was deur 'n fout geraak wat gebruikers met UID > INT_MAX toelaat om voorregte te eskaleer. Meer inligting: hier, hier en hier.
Exploiteer dit met: systemd-run -t /bin/bash
Kyk of jy 'n lid van 'n groep is wat jou moontlik root-voorregte kan gee:
Interesting Groups - Linux PrivescKyk of daar iets interessants binne die knipbord geleë is (indien moontlik)
Indien jy enige wagwoord van die omgewing ken, probeer om in te teken as elke gebruiker met die wagwoord.
Indien jy nie omgee om baie geraas te maak nie en die su
en timeout
binêre lêers is teenwoordig op die rekenaar, kan jy probeer om 'n gebruiker te krag met su-bruteforce.
Linpeas met die -a
parameter probeer ook om gebruikers te krag.
Indien jy vind dat jy kan skryf binne 'n paar van die $PATH se lêers, kan jy bevoorregtinge eskaleer deur 'n agterdeur te skep binne die skryfbare lêer met die naam van 'n bevel wat uitgevoer gaan word deur 'n ander gebruiker (idealiter root) en wat nie gelaai word van 'n lêer wat vooraf geleë is aan jou skryfbare lêer in $PATH.
Jy kan toegelaat word om 'n bevel uit te voer met sudo of hulle kan die suid-bit hê. Kontroleer dit met:
Sommige onverwagte bevele laat jou toe om lêers te lees en/of te skryf of selfs 'n bevel uit te voer. Byvoorbeeld:
Sudo-konfigurasie mag 'n gebruiker toelaat om 'n sekere bevel uit te voer met 'n ander gebruiker se regte sonder om die wagwoord te weet.
In hierdie voorbeeld kan die gebruiker demo
vim
as root
hardloop, dit is nou triviaal om 'n skaal te kry deur 'n ssh-sleutel by die root-gids te voeg of deur sh
te roep.
Hierdie riglyn laat die gebruiker toe om 'n omgewingsveranderlike in te stel terwyl iets uitgevoer word:
Hierdie voorbeeld, gebaseer op HTB-masjien Admirer, was kwesbaar vir PYTHONPATH kaping om 'n willekeurige Python-biblioteek te laai terwyl die skrip as 'n root uitgevoer word:
Spring om ander lêers te lees of gebruik symlinks. Byvoorbeeld in die sudoers-lêer: hacker10 ALLES= (root) /bin/less /var/log/*
Indien 'n wildcard gebruik word (*), is dit selfs makliker:
Teenmaatreëls: https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/
As die sudo-toestemming gegee word aan 'n enkele opdrag sonder om die pad te spesifiseer: hacker10 ALLES= (root) minder kan jy dit uitbuit deur die PAD-veranderlike te verander
Hierdie tegniek kan ook gebruik word as 'n suid binêre lêer 'n ander opdrag uitvoer sonder om die pad daarna te spesifiseer (kontroleer altyd met strings die inhoud van 'n vreemde SUID binêre lêer).
Voorbeeld van vragte om uit te voer.
As die suid binêre lêer 'n ander opdrag uitvoer deur die pad te spesifiseer, dan kan jy probeer om 'n funksie uit te voer wat genoem word soos die opdrag wat die suid-lêer aanroep.
Byvoorbeeld, as 'n suid binêre lêer /usr/sbin/service apache2 start aanroep, moet jy probeer om die funksie te skep en dit uit te voer:
Die LD_PRELOAD-omgewingsveranderlike word gebruik om een of meer gedeelde biblioteke (.so-lêers) te spesifiseer wat deur die lader voor alle ander biblioteke, insluitend die standaard C-bibliotheek (libc.so
), gelaai moet word. Hierdie proses staan bekend as die vooraf-lading van 'n biblioteek.
Tog, om stelselsekuriteit te handhaaf en te voorkom dat hierdie funksie uitgebuit word, veral met suid/sgid uitvoerbare lêers, dwing die stelsel sekere voorwaardes af:
Die lader ignoreer LD_PRELOAD vir uitvoerbare lêers waar die werklike gebruikers-ID (ruid) nie ooreenstem met die effektiewe gebruikers-ID (euid).
Vir uitvoerbare lêers met suid/sgid word slegs biblioteke in standaardpaaie wat ook suid/sgid is, voorafgelaai.
Privilege-escalation kan plaasvind as jy die vermoë het om opdragte met sudo
uit te voer en die uitset van sudo -l
die verklaring env_keep+=LD_PRELOAD insluit. Hierdie konfigurasie laat toe dat die LD_PRELOAD-omgewingsveranderlike volhou en herken word selfs wanneer opdragte met sudo
uitgevoer word, wat moontlik tot die uitvoering van willekeurige kode met verhoogde regte kan lei.
Stoor as /tmp/pe.c
Voer dit dan kompileer met:
Uiteindelik, privileges verhoog hardloop
'n Soortgelyke privesc kan misbruik word as die aanvaller beheer oor die LD_LIBRARY_PATH omgewingsveranderlike omdat hy die pad beheer waar biblioteke gaan gesoek word.
Wanneer 'n binêre lêer met SUID-permissies wat ongewoon lyk, gevind word, is dit 'n goeie praktyk om te verifieer of dit .so lêers behoorlik laai. Dit kan nagegaan word deur die volgende bevel uit te voer:
Byvoorbeeld, wanneer 'n fout soos "open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (No such file or directory)" ondervind word, dui dit op 'n potensiële vir uitbuiting.
Om hiervan gebruik te maak, sal 'n persoon voortgaan deur 'n C-lêer te skep, sê "/path/to/.config/libcalc.c", wat die volgende kode bevat:
Hierdie kode, eens saamgestel en uitgevoer, het as doel om voorregte te verhoog deur lêerregte te manipuleer en 'n skaal met verhoogde voorregte uit te voer.
Stel die bogenoemde C-lêer saam in 'n gedeelde voorwerp (.so) lêer met:
Uiteindelik, die hardloop van die geaffekteerde SUID-binêre lêer behoort die uitbuiting te aktiveer, wat kan lei tot potensiële sisteemkompromittering.
Nou dat ons 'n SUID-binêre lading gevind het wat 'n biblioteek laai van 'n vouer waarin ons kan skryf, laat ons die biblioteek in daardie vouer skep met die nodige naam:
Indien jy 'n fout soos dit kry
Dit beteken dat die biblioteek wat jy gegenereer het 'n funksie genaamd a_function_name
moet hê.
GTFOBins is 'n saamgestelde lys van Unix-binêre lêers wat deur 'n aanvaller uitgebuit kan word om plaaslike sekuriteitsbeperkings te omseil. GTFOArgs is dieselfde, maar vir gevalle waar jy slegs argumente kan inspuit in 'n opdrag.
Die projek versamel legitieme funksies van Unix-binêre lêers wat misbruik kan word om uit beperkte skulpe te breek, voorregte te eskaleer of te handhaaf, lêers oor te dra, bind- en omgekeerde skulpe te skep, en ander ná-uitbuitingstake te fasiliteer.
gdb -nx -ex '!sh' -ex quit sudo mysql -e '! /bin/sh' strace -o /dev/null /bin/sh sudo awk 'BEGIN {system("/bin/sh")}'
As jy toegang het tot sudo -l
kan jy die instrument FallOfSudo gebruik om te kyk of dit enige sudo-reël kan uitbuit.
In gevalle waar jy sudo-toegang het maar nie die wagwoord nie, kan jy voorregte eskaleer deur te wag vir 'n sudo-opdraguitvoering en dan die sessietoken te kaap.
Vereistes vir die eskalering van voorregte:
Jy het reeds 'n skul as gebruiker "sampleuser"
"sampleuser" het sudo
gebruik om iets in die laaste 15 minute uit te voer (standaard is dit die duur van die sudo-token wat ons toelaat om sudo
te gebruik sonder om enige wagwoord in te voer)
cat /proc/sys/kernel/yama/ptrace_scope
is 0
gdb
is toeganklik (jy kan dit oplaai)
(Jy kan ptrace_scope
tydelik aktiveer met echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
of permanent deur /etc/sysctl.d/10-ptrace.conf
te wysig en kernel.yama.ptrace_scope = 0
in te stel)
Indien aan al hierdie vereistes voldoen word, kan jy voorregte eskaleer deur gebruik te maak van: https://github.com/nongiach/sudo_inject
Die eerste uitbuiting (exploit.sh
) sal die binêre lêer activate_sudo_token
in /tmp skep. Jy kan dit gebruik om die sudo-token in jou sessie te aktiveer (jy sal nie outomaties 'n root-skulp kry nie, doen sudo su
):
Die tweede aanval (exploit_v2.sh
) sal 'n sh-skul in /tmp skep wat deur root besit word met setuid
Die derde aanval (exploit_v3.sh
) sal 'n sudoers-lêer skep wat sudo-tokens ewig maak en alle gebruikers toelaat om sudo te gebruik
Indien jy skryfregte in die gids het of op enige van die geskepte lêers binne die gids, kan jy die binêre write_sudo_token gebruik om 'n sudo-teken vir 'n gebruiker en PID te skep. Byvoorbeeld, as jy die lêer /var/run/sudo/ts/sampleuser kan oorskryf en jy het 'n skaal as daardie gebruiker met PID 1234, kan jy sudo-voorregte verkry sonder om die wagwoord te weet deur die volgende te doen:
Die lêer /etc/sudoers
en die lêers binne /etc/sudoers.d
stel in wie sudo
kan gebruik en hoe. Hierdie lêers kan standaard slegs deur gebruiker root en groep root gelees word.
As jy hierdie lêer kan lees, kan jy dalk interessante inligting verkry, en as jy enige lêer kan skryf, sal jy in staat wees om priviliges te eskaleer.
As jy kan skryf, kan jy hierdie toestemming misbruik.
'n Ander manier om hierdie regte te misbruik:'
Daar is alternatiewe vir die sudo
binêre lêer soos doas
vir OpenBSD, onthou om sy konfigurasie by /etc/doas.conf
te kontroleer
Indien jy weet dat 'n gebruiker gewoonlik met 'n masjien verbind en sudo
gebruik om voorregte te verhoog en jy het 'n skaal binne daardie gebruikerskonteks, kan jy 'n nuwe sudo uitvoerbare lêer skep wat jou kode as 'n root uitvoer en dan die gebruiker se bevel. Dan, verander die $PATH van die gebruikerskonteks (byvoorbeeld deur die nuwe pad in .bash_profile by te voeg) sodat wanneer die gebruiker sudo uitvoer, jou sudo uitvoerbare lêer uitgevoer word.
Let daarop dat as die gebruiker 'n ander skaal gebruik (nie bash nie) jy ander lêers moet wysig om die nuwe pad by te voeg. Byvoorbeeld sudo-piggyback wysig ~/.bashrc
, ~/.zshrc
, ~/.bash_profile
. Jy kan 'n ander voorbeeld vind in bashdoor.py
Of voer iets soos uit:
Die lêer /etc/ld.so.conf
dui aan waar die gelaai konfigurasie lêers vandaan kom. Tipies bevat hierdie lêer die volgende pad: include /etc/ld.so.conf.d/*.conf
Dit beteken dat die konfigurasie lêers vanaf /etc/ld.so.conf.d/*.conf
gelees sal word. Hierdie konfigurasie lêers verwys na ander folders waar biblioteke gesoek gaan word. Byvoorbeeld, die inhoud van /etc/ld.so.conf.d/libc.conf
is /usr/local/lib
. Dit beteken dat die stelsel vir biblioteke binne /usr/local/lib
sal soek.
Indien 'n gebruiker om enige rede skryfregte het op enige van die aangeduide paaie: /etc/ld.so.conf
, /etc/ld.so.conf.d/
, enige lêer binne /etc/ld.so.conf.d/
of enige folder binne die konfigurasie lêer binne /etc/ld.so.conf.d/*.conf
mag hy in staat wees om voorregte te eskaleer.
Neem 'n kyk na hoe om hierdie wanopset te misbruik op die volgende bladsy:
Deur die lib na /var/tmp/flag15/
te kopieer, sal dit deur die program op hierdie plek gebruik word soos gespesifiseer in die RPATH
veranderlike.
Dan skep 'n bose biblioteek in /var/tmp
met gcc -fPIC -shared -static-libgcc -Wl,--version-script=version,-Bstatic exploit.c -o libc.so.6
Linux-bevoegdhede bied 'n subreeks van die beskikbare wortelbevoegdhede aan 'n proses. Dit breek effektief wortelbevoegdhede op in kleiner en onderskeidende eenhede. Elkeen van hierdie eenhede kan dan onafhanklik aan prosesse toegeken word. Op hierdie manier word die volledige stel bevoegdhede verminder, wat die risiko van uitbuiting verminder. Lees die volgende bladsy om meer te leer oor bevoegdhede en hoe om dit te misbruik:
Linux CapabilitiesIn 'n gids dui die bit vir "uitvoer" aan dat die betrokke gebruiker in die gids kan "cd". Die "lees" bit dui aan dat die gebruiker die lêerlys kan sien, en die "skryf" bit dui aan dat die gebruiker lêers kan verwyder en nuwe lêers kan skep.
Toegangsbeheerlyste (ACL's) verteenwoordig die sekondêre laag van diskresionêre bevoegdhede, wat in staat is om die tradisionele ugo/rwx-bevoegdhede te oorskry. Hierdie bevoegdhede verbeter beheer oor lêer- of gids-toegang deur regte aan spesifieke gebruikers toe te staan of te ontken wat nie die eienaars of deel van die groep is nie. Hierdie vlak van fynkorreligheid verseker meer presiese toegangsbestuur. Verdere besonderhede kan hier gevind word hier.
Gee gebruiker "kali" lees- en skryfregte oor 'n lêer:
Kry lêers met spesifieke ACL's van die stelsel:
In ou weergawes kan jy dalk 'n paar skul-sesies van 'n ander gebruiker (root) kap. In nuutste weergawes sal jy slegs in staat wees om aan skerm-sessies van jou eie gebruiker te koppel. Nietemin, jy kan interessante inligting binne die sessie vind.
Lys skerm-sessies
Heg tot 'n sessie
Dit was 'n probleem met ou tmux-weergawes. Ek kon nie 'n tmux (v2.1) sessie wat deur root geskep is, kaap as 'n nie-bevoorregte gebruiker nie.
Lys tmux-sessies
Heg tot 'n sessie
Kyk na Valentine-boks van HTB vir 'n voorbeeld.
Alle SSL- en SSH-sleutels wat gegenereer is op Debian-gebaseerde stelsels (Ubuntu, Kubuntu, ens.) tussen September 2006 en 13 Mei 2008 kan deur hierdie fout geraak word. Hierdie fout word veroorsaak wanneer 'n nuwe ssh-sleutel in daardie OS geskep word, aangesien slegs 32,768 variasies moontlik was. Dit beteken dat al die moontlikhede bereken kan word en deur die ssh openbare sleutel te hê, kan jy soek na die ooreenstemmende privaatsleutel. Jy kan die berekende moontlikhede hier vind: https://github.com/g0tmi1k/debian-ssh
PasswordAuthentication: Specifiseer of wagwoordverifikasie toegelaat word. Die verstek is no
.
PubkeyAuthentication: Specifiseer of openbare sleutelverifikasie toegelaat word. Die verstek is yes
.
PermitEmptyPasswords: Wanneer wagwoordverifikasie toegelaat word, spesifiseer dit of die bediener toegang tot rekeninge met leë wagwoordsnare toelaat. Die verstek is no
.
Spesifiseer of root kan inlog met ssh, verstek is no
. Moontlike waardes:
yes
: root kan inlog met wagwoord en privaatsleutel
without-password
of prohibit-password
: root kan slegs inlog met 'n privaatsleutel
forced-commands-only
: Root kan slegs inlog met 'n privaatsleutel en as die opdragopsies gespesifiseer is
no
: no
Spesifiseer lêers wat die openbare sleutels bevat wat gebruik kan word vir gebruikersverifikasie. Dit kan tokens soos %h
bevat, wat deur die tuisgids vervang sal word. Jy kan absolute paaie aandui (beginnend met /
) of relatiewe paaie vanaf die gebruiker se tuisgids. Byvoorbeeld:
Daardie konfigurasie sal aandui dat as jy probeer om in te teken met die privaat sleutel van die gebruiker "toetsgebruikersnaam" ssh gaan die publieke sleutel van jou sleutel vergelyk met dié wat in /home/toetsgebruikersnaam/.ssh/authorized_keys
en /home/toetsgebruikersnaam/toegang
geleë is.
SSH-agent deurstuur maak dit vir jou moontlik om jou plaaslike SSH-sleutels te gebruik in plaas daarvan om sleutels (sonder wagwoorde!) op jou bediener te laat lê. So, sal jy in staat wees om te spring via ssh na 'n gasheer en van daar af te spring na 'n ander gasheer deur die sleutel geleë in jou oorspronklike gasheer te gebruik.
Jy moet hierdie opsie in $HOME/.ssh.config
soos hierdie instel:
Let daarop dat as Host
*
is elke keer as die gebruiker na 'n ander masjien spring, sal daardie gasheer in staat wees om die sleutels te benader (wat 'n veiligheidsprobleem is).
Die lêer /etc/ssh_config
kan hierdie opsies oorskryf en hierdie konfigurasie toelaat of weier.
Die lêer /etc/sshd_config
kan ssh-agent deurstuur toelaat of weier met die sleutelwoord AllowAgentForwarding
(verstek is toelaat).
As jy vind dat Forward Agent gekonfigureer is in 'n omgewing, lees die volgende bladsy aangesien jy dit kan misbruik om voorregte te eskaleer:
SSH Forward Agent exploitationDie lêer /etc/profile
en die lêers onder /etc/profile.d/
is skripte wat uitgevoer word wanneer 'n gebruiker 'n nuwe skaal hardloop. Daarom, as jy enige van hulle kan skryf of wysig, kan jy voorregte eskaleer.
Indien enige vreemde profielinskrywing gevind word, moet jy dit vir sensitiewe besonderhede ondersoek.
Afhanklik van die bedryfstelsel kan die /etc/passwd
en /etc/shadow
lêers 'n ander naam gebruik of daar kan 'n rugsteun wees. Daarom word dit aanbeveel om hulle almal te vind en te kyk of jy hulle kan lees om te sien of daar hasse binne die lêers is:
In sommige gevalle kan jy wagwoordhasings binne die /etc/passwd
(of ekwivalente) lêer vind.
Eerstens, genereer 'n wagwoord met een van die volgende bevele.
Voeg dan die gebruiker hacker
by en voeg die gegenereerde wagwoord by.
Byvoorbeeld: hacker:$1$hacker$TzyKlv0/R/c28R.GAeLw.1:0:0:Hacker:/root:/bin/bash
Jy kan nou die su
bevel gebruik met hacker:hacker
Alternatiewelik kan jy die volgende lyne gebruik om 'n dummie-gebruiker sonder 'n wagwoord by te voeg. WAARSKUWING: jy kan die huidige sekuriteit van die masjien verminder.
Let op: Op BSD-platforms is /etc/passwd
geleë by /etc/pwd.db
en /etc/master.passwd
, ook is die /etc/shadow
hernoem na /etc/spwd.db
.
Jy moet nagaan of jy kan skryf na sekere sensitiewe lêers. Byvoorbeeld, kan jy skryf na 'n sekere dienskonfigurasie-lêer?
Byvoorbeeld, as die masjien 'n tomcat-bediener hardloop en jy kan die Tomcat-dienskonfigurasie-lêer binne /etc/systemd/ verander, dan kan jy die reëls verander:
Die volgende lêers mag dalk rugsteun kopieë of interessante inligting bevat: /tmp, /var/tmp, /var/backups, /var/mail, /var/spool/mail, /etc/exports, /root (Jy sal waarskynlik nie die laaste een kan lees nie, maar probeer)
Lees die kode van linPEAS, dit soek na veral moontlike lêers wat wagwoorde kan bevat. 'n Ander interessante instrument wat jy kan gebruik om dit te doen is: LaZagne wat 'n oopbron-toepassing is wat gebruik word om baie wagwoorde wat op 'n plaaslike rekenaar vir Windows, Linux & Mac gestoor word, te herwin.
As jy logboeke kan lees, kan jy dalk interessante/vertroulike inligting daarin vind. Hoe vreemder die logboek is, hoe interessanter dit sal wees (waarskynlik). Ook, sommige "sleg" gekonfigureerde (agterdeur?) ouditlogboeke mag jou toelaat om wagwoorde op te neem binne ouditlogboeke soos verduidelik in hierdie pos: https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/.
Om logs te lees die groep adm sal baie nuttig wees.
Jy moet ook vir lêers kyk wat die woord "wagwoord" in die naam of binne die inhoud bevat, en ook vir IP-adresse en e-posse binne loglêers, of hasse regexps. Ek gaan nie hier lys hoe om al hierdie dinge te doen nie, maar as jy belangstel, kan jy die laaste kontroles wat linpeas uitvoer, nagaan.
As jy weet waarvandaan 'n Python-skrips gaan uitgevoer word en jy kan binne daardie vouer skryf of jy kan Python-biblioteke wysig, kan jy die OS-bibliotheek wysig en dit agterdeur maak (as jy kan skryf waar die Python-skrips gaan uitgevoer word, kopieer en plak die os.py-bibliotheek).
Om die biblioteek agterdeur te maak, voeg net aan die einde van die os.py-biblioteek die volgende lyn by (verander IP en POORT):
'n Kwesbaarheid in logrotate
laat gebruikers met skryfregte op 'n log-lêer of sy ouer gids moontlik verhoogde regte verkry. Dit is omdat logrotate
, dikwels hardloop as root, gemanipuleer kan word om arbitrêre lêers uit te voer, veral in gids soos /etc/bash_completion.d/. Dit is belangrik om nie net in /var/log nie, maar ook in enige gids waar logrotasie toegepas word, regte te kontroleer.
Hierdie kwesbaarheid affekteer logrotate
weergawe 3.18.0
en ouer
Meer gedetailleerde inligting oor die kwesbaarheid kan gevind word op hierdie bladsy: https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition.
Jy kan hierdie kwesbaarheid uitbuit met logrotten.
Hierdie kwesbaarheid is baie soortgelyk aan CVE-2016-1247 (nginx-logboeke), so wanneer jy vind dat jy logboeke kan verander, kyk wie daardie logboeke bestuur en kyk of jy regte kan verhoog deur die logboeke te vervang met simbole.
Kwesbaarheidsverwysing: https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f
As, om enige rede, 'n gebruiker in staat is om 'n ifcf-<watookal>
skrips te skryf na /etc/sysconfig/network-scripts of dit kan aanpas 'n bestaande een, dan is jou sisteem pwned.
Netwerk-skripte, ifcg-eth0 byvoorbeeld, word gebruik vir netwerkverbindinge. Hulle lyk presies soos .INI-lêers. Tog word hulle ~gebron~ op Linux deur Network Manager (dispatcher.d).
In my geval word die NAME=
wat in hierdie netwerk-skripte toegeskryf is, nie korrek hanteer nie. As jy wit/leë spasie in die naam het, probeer die stelsel om die gedeelte na die wit/leë spasie uit te voer. Dit beteken dat alles na die eerste leë spasie as root uitgevoer word.
Byvoorbeeld: /etc/sysconfig/network-scripts/ifcfg-1337
Die gids /etc/init.d
is die tuiste van skripte vir System V init (SysVinit), die klassieke Linux-diensbestuurstelsel. Dit sluit skripte in om dienste te begin
, stop
, herlaai
, en soms herlaai
. Hierdie kan direk uitgevoer word of deur simboliese skakels gevind in /etc/rc?.d/
. 'n Alternatiewe pad in Redhat-stelsels is /etc/rc.d/init.d
.
Aan die ander kant, /etc/init
is geassosieer met Upstart, 'n nuwer diensbestuurstelsel wat deur Ubuntu ingevoer is, wat konfigurasie lêers gebruik vir diensbestuurtake. Ten spyte van die oorgang na Upstart, word SysVinit-skripte steeds saam met Upstart-konfigurasies gebruik as gevolg van 'n verenigbaarheidslaag in Upstart.
systemd kom na vore as 'n moderne inisialisering en diensbestuurder, wat gevorderde kenmerke bied soos aanvraag-daemonbegin, outomatiese bergbestuur, en stelselstaat-snapshots. Dit organiseer lêers in /usr/lib/systemd/
vir verspreidingspakette en /etc/systemd/system/
vir administrateursmodifikasies, wat die stelseladministrasieproses stroomlyn.
LinEnum: https://github.com/rebootuser/LinEnum(-t opsie) Enumy: https://github.com/luke-goddard/enumy Unix Privesc Check: http://pentestmonkey.net/tools/audit/unix-privesc-check Linux Priv Checker: www.securitysift.com/download/linuxprivchecker.py BeeRoot: https://github.com/AlessandroZ/BeRoot/tree/master/Linux Kernelpop: Enumereer kernelkwale in Linux en MAC https://github.com/spencerdodd/kernelpop Mestaploit: multi/recon/local_exploit_suggester Linux Exploit Suggester: https://github.com/mzet-/linux-exploit-suggester EvilAbigail (fisiese toegang): https://github.com/GDSSecurity/EvilAbigail Versameling van meer skripte: https://github.com/1N3/PrivEsc
Leer & oefen AWS-hacking:HackTricks Opleiding AWS Red Team Expert (ARTE) Leer & oefen GCP-hacking: HackTricks Opleiding GCP Red Team Expert (GRTE)