Linux Privilege Escalation
Last updated
Last updated
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Kom ons begin om 'n bietjie kennis van die bedryfstelsel te verkry
As jy skrywe toestemmings op enige gids binne die PATH
veranderlike het, mag jy in staat wees om sommige biblioteke of binêre te kap:
Interessante inligting, wagwoorde of API sleutels in die omgewingsveranderlikes?
Kontroleer die kernel weergawe en of daar 'n eksploitasie is wat gebruik kan word om voorregte te verhoog
Jy kan 'n goeie lys van kwesbare kernels en sommige reeds gecompileerde exploits hier vind: https://github.com/lucyoa/kernel-exploits en exploitdb sploits. Ander webwerwe waar jy 'n paar gecompileerde exploits kan vind: https://github.com/bwbwbwbw/linux-exploit-binaries, https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack
Om al die kwesbare kern weergawe van daardie web te onttrek, kan jy doen:
Tools wat kan help om vir kernel exploits te soek is:
linux-exploit-suggester.sh linux-exploit-suggester2.pl linuxprivchecker.py (voer uit IN slagoffer, kyk net na exploits vir kernel 2.x)
Soek altyd die kernel weergawe in Google, dalk is jou kernel weergawe in 'n of ander kernel exploit geskryf en dan sal jy seker wees dat hierdie exploit geldig is.
Linux Privilege Escalation - Linux Kernel <= 3.19.0-73.8
Gebaseer op die kwesbare sudo weergawes wat verskyn in:
U kan nagaan of die sudo weergawe kwesbaar is deur hierdie grep te gebruik.
Van @sickrov
Kyk na smasher2 box van HTB vir 'n voorbeeld van hoe hierdie kwesbaarheid benut kan word
As jy binne 'n docker-container is, kan jy probeer om daaruit te ontsnap:
Docker SecurityKontroleer wat gemonteer en ongemonteer is, waar en hoekom. As iets ongemonteer is, kan jy probeer om dit te monteer en na private inligting te kyk.
Lys nuttige binaire lêers
Ook, kyk of enige kompiler geïnstalleer is. Dit is nuttig as jy 'n kern eksploit moet gebruik, aangesien dit aanbeveel word om dit op die masjien waar jy dit gaan gebruik (of op een soortgelyk) te compileer.
Kontroleer die weergawe van die geïnstalleerde pakkette en dienste. Miskien is daar 'n ou Nagios-weergawe (byvoorbeeld) wat benut kan word om voorregte te verhoog… Dit word aanbeveel om handmatig die weergawe van die meer verdagte geïnstalleerde sagteware te kontroleer.
As 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.
Nota dat hierdie opdragte 'n baie inligting sal toon wat meestal nutteloos sal wees, daarom word dit aanbeveel om sommige toepassings soos OpenVAS of soortgelyke te gebruik wat sal kyk of enige geïnstalleerde sagteware weergawe kwesbaar is vir bekende ontploffings
Kyk na watter prosesse uitgevoer word en kyk of enige proses meer regte het as wat dit behoort (miskien 'n tomcat wat deur root uitgevoer word?)
Always check for possible electron/cef/chromium debuggers running, you could abuse it to escalate privileges. Linpeas detect those by checking the --inspect
parameter inside the command line of the process.
Also check your privileges over the processes binaries, maybe you can overwrite someone.
You can use tools like pspy to monitor processes. This can be very useful to identify vulnerable processes being executed frequently or when a set of requirements are met.
Some services of a server save credentials in clear text inside the memory. Normally you will need root privileges to read the memory of processes that belong to other users, therefore this is usually more useful when you are already root and want to discover more credentials. However, remember that as a regular user you can read the memory of the processes you own.
Note that nowadays most machines don't allow ptrace by default which means that you cannot dump other processes that belong to your unprivileged user.
The file /proc/sys/kernel/yama/ptrace_scope controls the accessibility of ptrace:
kernel.yama.ptrace_scope = 0: alle prosesse kan gedebug wees, solank hulle dieselfde uid het. This is the classical way of how ptracing worked.
kernel.yama.ptrace_scope = 1: slegs 'n ouer proses kan gedebug wees.
kernel.yama.ptrace_scope = 2: Slegs admin kan ptrace gebruik, aangesien dit CAP_SYS_PTRACE vermoë vereis.
kernel.yama.ptrace_scope = 3: Geen prosesse mag met ptrace getraceer word nie. Sodra dit gestel is, is 'n herbegin nodig om ptracing weer te aktiveer.
If you have access to the memory of an FTP service (for example) you could get the Heap and search inside of its credentials.
Vir 'n gegewe proses-ID, maps wys hoe geheue binne daardie proses se virtuele adresruimte gemap is; dit wys ook die toestemmings van elke gemapte streek. Die mem pseudo-lêer stel die proses se geheue self bloot. Van die maps lêer weet ons watter geheue streke leesbaar is en hul offsets. Ons gebruik hierdie inligting om in die mem-lêer te soek en al leesbare streke na 'n lêer te dump.
/dev/mem
bied toegang tot die stelsel se fisiese geheue, nie die virtuele geheue nie. Die kern se virtuele adresruimte kan toegang verkry word met /dev/kmem.
Tipies is /dev/mem
slegs leesbaar deur root en die kmem groep.
ProcDump is 'n Linux-herinterpretasie van die klassieke ProcDump-gereedskap uit die Sysinternals-gereedskapstel vir Windows. Kry dit in https://github.com/Sysinternals/ProcDump-for-Linux
Om 'n prosesgeheue te dump, kan jy gebruik maak van:
https://github.com/hajzer/bash-memory-dump (root) - _Jy kan handmatig die root vereistes verwyder en die proses wat aan jou behoort dump
Skrip A.5 van https://www.delaat.net/rp/2016-2017/p97/report.pdf (root is vereis)
As jy vind dat die authenticator proses aan die gang is:
U 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 hulpmiddel https://github.com/huntergregal/mimipenguin sal duidelike teks geloofsbriewe uit geheue en uit 'n paar bekende lêers steel. Dit vereis wortelregte om behoorlik te werk.
GDM wagwoord (Kali Desktop, Debian Desktop)
gdm-password
Gnome Sleutelhanger (Ubuntu Desktop, ArchLinux Desktop)
gnome-keyring-daemon
LightDM (Ubuntu Desktop)
lightdm
VSFTPd (Aktiewe FTP Verbindinge)
vsftpd
Apache2 (Aktiewe HTTP Basiese Auth Sessies)
apache2
OpenSSH (Aktiewe SSH Sessies - Sudo Gebruik)
sshd:
Kontroleer of enige geskeduleerde taak kwesbaar is. Miskien kan jy voordeel trek uit 'n skrip wat deur root uitgevoer word (wildcard kwesbaarheid? kan lêers wat root gebruik, wysig? gebruik simboliese skakels? spesifieke lêers in die gids wat root gebruik, skep?).
Byvoorbeeld, binne /etc/crontab kan jy die PAD vind: PATH=/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 root-gebruiker in hierdie crontab probeer om 'n opdrag of skrip uit te voer sonder om die pad in te stel. Byvoorbeeld: * * * * root overwrite.sh Dan kan jy 'n root shell kry deur te gebruik:
As 'n skrip wat deur root uitgevoer word 'n “*” binne 'n opdrag het, kan jy dit benut om onverwagte dinge te maak (soos privesc). Voorbeeld:
As die wildcard voorafgegaan word deur 'n pad soos /some/path/* , is dit nie kwesbaar nie (selfs ./* is nie).
Lees die volgende bladsy vir meer wildcard eksploitasiemetodes:
Wildcards Spare tricksAs jy 'n cron-skrip kan wysig wat deur root uitgevoer word, kan jy baie maklik 'n shell kry:
As die skrip wat deur root uitgevoer word 'n gids gebruik waar jy volle toegang het, mag dit nuttig wees om daardie gids te verwyder en 'n simboolgids na 'n ander een te skep wat 'n skrip wat deur jou beheer word, dien
Jy kan die prosesse monitor om te soek na prosesse wat elke 1, 2 of 5 minute uitgevoer word. Miskien kan jy daarvan voordeel trek en privilige verhoog.
Byvoorbeeld, om elke 0.1s vir 1 minuut te monitor, sorteer volgens minder uitgevoerde opdragte en verwyder die opdragte wat die meeste uitgevoer is, kan jy doen:
Jy kan ook pspy (dit sal elke proses wat begin monitor en lys).
Dit is moontlik om 'n cronjob te skep wat 'n terugkeerkarakter na 'n opmerking plaas (sonder 'n nuwe reël karakter), en die cron taak sal werk. Voorbeeld (let op die terugkeerkarakter):
Kyk of jy enige .service
lêer kan skryf, as jy kan, kan jy dit wysig sodat dit jou terugdeur uitvoer wanneer die diens gestart, herstart of gestop word (miskien moet jy wag totdat die masjien herbegin word).
Byvoorbeeld, skep jou terugdeur binne die .service lêer met ExecStart=/tmp/script.sh
Hou in gedagte dat as jy skryfregte oor binaire wat deur dienste uitgevoer word het, jy dit kan verander vir terugdeure sodat wanneer die dienste weer uitgevoer word, die terugdeure uitgevoer sal word.
Jy kan die PAD wat deur systemd gebruik word, sien met:
As jy vind dat jy kan skryf in enige van die vouers van die pad, mag jy in staat wees om privileges te verhoog. Jy moet soek na relatiewe paaie wat gebruik word in dienskonfigurasie lêers soos:
Dan, skep 'n uitvoerbare lêer met die selfde naam as die relatiewe pad binêre binne die systemd PAD-gids wat jy kan skryf, en wanneer die diens gevra word om die kwesbare aksie (Begin, Stop, Herlaai) uit te voer, sal jou agterdeur uitgevoer word (onbevoegde gebruikers kan gewoonlik nie dienste begin/stop nie, maar kyk of jy sudo -l
kan gebruik).
Leer meer oor dienste met man systemd.service
.
Timers is systemd eenheid lêers waarvan die naam eindig op **.timer**
wat **.service**
lêers of gebeurtenisse beheer. Timers kan as 'n alternatief vir cron gebruik word aangesien hulle ingeboude ondersteuning het vir kalender tyd gebeurtenisse en monotone tyd gebeurtenisse en kan asynchrone uitgevoer word.
Jy kan al die timers opnoem met:
As jy 'n timer kan wysig, kan jy dit laat uitvoer van sommige eksistensies van systemd.unit (soos 'n .service
of 'n .target
)
In die dokumentasie kan jy lees wat die Eenheid is:
Die eenheid om te aktiveer wanneer hierdie timer verstryk. Die argument is 'n eenheidsnaam, waarvan die agtervoegsel nie ".timer" is nie. As dit nie gespesifiseer is nie, is hierdie waarde die standaard vir 'n diens wat dieselfde naam as die timer eenheid het, behalwe vir die agtervoegsel. (Sien hierbo.) Dit word aanbeveel dat die eenheidsnaam wat geaktiveer word en die eenheidsnaam van die timer eenheid identies genoem word, behalwe vir die agtervoegsel.
Daarom, om hierdie toestemming te misbruik, moet jy:
Vind 'n stelseld eenheid (soos 'n .service
) wat 'n skryfbare binêre uitvoer
Vind 'n stelseld eenheid wat 'n relatiewe pad uitvoer en jy het skryfbevoegdhede oor die stelseld PAD (om daardie uitvoerbare te verpersoonlik)
Leer meer oor timers met man systemd.timer
.
Om 'n timer te aktiveer, het jy wortelbevoegdhede nodig en moet jy uitvoer:
Note die timer is geaktiveer deur 'n symlink na dit te skep op /etc/systemd/system/<WantedBy_section>.wants/<name>.timer
Unix Domein Sockets (UDS) stel proses kommunikasie in staat op dieselfde of verskillende masjiene binne kliënt-bediener modelle. Hulle gebruik standaard Unix beskrywer lêers vir inter-rekenaar kommunikasie en word opgestel deur middel van .socket
lêers.
Sockets kan gekonfigureer word met behulp van .socket
lêers.
Leer meer oor sockets 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 socket (die pad van die AF_UNIX socket lêer, die IPv4/6 en/of poortnommer om na te luister, ens.)
Accept
: Neem 'n boolean argument. As waar, 'n diensinstansie word geskep vir elke inkomende verbinding en slegs die verbinding socket word aan dit oorgedra. As vals, word al die luister sockets self aan die begin diens eenheid oorgedra, en slegs een diens eenheid word geskep vir al die verbindings. Hierdie waarde word geïgnoreer vir datagram sockets en FIFOs waar 'n enkele diens eenheid onvoorwaardelik al die inkomende verkeer hanteer. Standaard is vals. Vir prestasiedoeleindes word dit aanbeveel om nuwe daemons 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 luister sockets/FIFOs gecreëer en gebind word, onderskeidelik. Die eerste token van die opdraglyn moet 'n absolute lêernaam wees, gevolg deur argumente vir die proses.
ExecStopPre
, ExecStopPost
: Bykomende opdragte wat uitgevoer word voor of na die luister sockets/FIFOs gesluit en verwyder word, onderskeidelik.
Service
: Gee die diens eenheid naam om te aktiveer op inkomende verkeer. Hierdie instelling is slegs toegelaat vir sockets met Accept=no. Dit is standaard die diens wat dieselfde naam as die socket 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 byvoeg aan die begin van die [Socket]
afdeling iets soos: ExecStartPre=/home/kali/sys/backdoor
en die backdoor sal uitgevoer word voordat die socket geskep word. Daarom, jy sal waarskynlik moet wag totdat die masjien herbegin word.
&#xNAN;Note dat die stelsel daardie socket lêer konfigurasie moet gebruik of die backdoor sal nie uitgevoer word nie
As jy enige skryfbare socket identifiseer (nou praat ons oor Unix Sockets en nie oor die konfig .socket
lêers nie), dan kan jy kommunikeer met daardie socket en dalk 'n kwesbaarheid benut.
Eksploitering voorbeeld:
Socket Command InjectionLet daarop dat daar dalk sokke is wat luister na HTTP versoeke (Ek praat nie van .socket lêers nie, maar die lêers wat as unix sokke optree). Jy kan dit nagaan met:
As die socket reageer met 'n HTTP versoek, kan jy kommunikeer daarmee en dalk 'n sekuriteitskwessie benut.
Die Docker socket, wat dikwels by /var/run/docker.sock
gevind word, is 'n kritieke lêer wat beveilig moet word. Standaard is dit skryfbaar deur die root
gebruiker en lede van die docker
groep. Om skryfreëling tot hierdie socket te hê, kan lei tot privilige-eskalasie. Hier is 'n uiteensetting van hoe dit gedoen kan word en alternatiewe metodes as die Docker CLI nie beskikbaar is nie.
As jy skryfreëling tot die Docker socket het, kan jy privilige eskalasie doen met die volgende opdragte:
These commands allow you to run a container with root-level access to the host's file system.
In cases where the Docker CLI isn't available, the Docker socket can still be manipulated using the Docker API and curl
commands.
List Docker Images: Retrieve the list of available images.
Create a Container: Send a request to create a container that mounts the host system's root directory.
Start the newly created container:
Attach to the Container: Use socat
to establish a connection to the container, enabling command execution within it.
After setting up the socat
connection, you can execute commands directly in the container with root-level access to the host's filesystem.
Note that if you have write permissions over the docker socket because you are inside the group docker
you have more ways to escalate privileges. If the docker API is listening in a port you can also be able to compromise it.
Check more ways to break out from docker or abuse it to escalate privileges in:
Docker SecurityIf you find that you can use the ctr
command read the following page as you may be able to abuse it to escalate privileges:
If you find that you can use the runc
command read the following page as you may be able to abuse it to escalate privileges:
D-Bus is a sophisticated inter-Process Communication (IPC) system that enables applications to efficiently interact and share data. Designed with the modern Linux system in mind, it offers a robust framework for different forms of application communication.
The system is versatile, supporting basic IPC that enhances data exchange between processes, reminiscent of enhanced UNIX domain sockets. Moreover, it aids in broadcasting events or signals, fostering seamless integration among system components. For instance, a signal from a Bluetooth daemon about an incoming call can prompt a music player to mute, enhancing user experience. Additionally, D-Bus supports a remote object system, simplifying service requests and method invocations between applications, streamlining processes that were traditionally complex.
D-Bus operates on an allow/deny model, managing message permissions (method calls, signal emissions, etc.) based on the cumulative effect of matching policy rules. These policies specify interactions with the bus, potentially allowing for privilege escalation through the exploitation of these permissions.
An example of such a policy in /etc/dbus-1/system.d/wpa_supplicant.conf
is provided, detailing permissions for the root user to own, send to, and receive messages from fi.w1.wpa_supplicant1
.
Policies without a specified user or group apply universally, while "default" context policies apply to all not covered by other specific policies.
Leer hoe om 'n D-Bus kommunikasie te enumerate en te exploiteer hier:
D-Bus Enumeration & Command Injection Privilege EscalationDit is altyd interessant om die netwerk te enumerate en die posisie van die masjien uit te vind.
Kontroleer altyd netwerkdienste wat op die masjien loop waarmee jy nie kon interaksie hê nie voordat jy dit toeganklik gemaak het:
Kontroleer of jy verkeer kan snuffel. As jy kan, kan jy dalk 'n paar geloofsbriewe gryp.
Kontroleer wie jy is, watter privileges jy het, watter users in die stelsels is, watter kan login en watter het root privileges:
Sommige Linux weergawes was geraak deur 'n fout wat gebruikers met UID > INT_MAX toelaat om voorregte te verhoog. Meer inligting: hier, hier en hier.
Eksploiteer dit met: systemd-run -t /bin/bash
Kontroleer of jy 'n lid van 'n groep is wat jou root voorregte kan gee:
Interesting Groups - Linux PrivescKontroleer of daar iets interessant in die klembord is (indien moontlik)
As jy enige wagwoord van die omgewing ken, probeer om in te log as elke gebruiker met die wagwoord.
As jy nie omgee om baie geraas te maak nie en su
en timeout
binaire is op die rekenaar teenwoordig, kan jy probeer om gebruikers te brute-force met su-bruteforce.
Linpeas met die -a
parameter probeer ook om gebruikers te brute-force.
As jy vind dat jy binne 'n sekere gids van die $PATH kan skryf, mag jy in staat wees om voorregte te verhoog deur 'n agterdeur binne die skryfbare gids te skep met die naam van 'n opdrag wat deur 'n ander gebruiker (root idealiter) uitgevoer gaan word en wat nie gelaai word vanaf 'n gids wat voor jou skryfbare gids in $PATH geleë is nie.
Jy mag toegelaat word om 'n sekere opdrag met sudo uit te voer of hulle mag die suid-biet hê. Kontroleer dit met:
Sommige onverwagte opdragte laat jou toe om lêers te lees en/of te skryf of selfs 'n opdrag uit te voer. Byvoorbeeld:
Sudo-konfigurasie mag 'n gebruiker toelaat om 'n opdrag met 'n ander gebruiker se voorregte uit te voer sonder om die wagwoord te ken.
In hierdie voorbeeld kan die gebruiker demo
vim
as root
uitvoer, dit is nou triviaal om 'n shell te verkry deur 'n ssh-sleutel in die root-gids by te voeg of deur sh
aan te roep.
Hierdie riglyn laat die gebruiker toe om 'n omgewing veranderlike in te stel terwyl iets uitgevoer word:
Hierdie voorbeeld, gebaseer op HTB-masjien Admirer, was kwulnerbaar vir PYTHONPATH-hijacking om 'n arbitrêre python-biblioteek te laai terwyl die skrip as root uitgevoer word:
Spring om ander lêers te lees of gebruik simboliese skakels. Byvoorbeeld in die sudoers-lêer: hacker10 ALL= (root) /bin/less /var/log/*
As '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 aan 'n enkele opdrag gegee word sonder om die pad te spesifiseer: hacker10 ALL= (root) less kan jy dit benut deur die PATH veranderlike te verander.
Hierdie tegniek kan ook gebruik word as 'n suid binêre 'n ander opdrag uitvoer sonder om die pad daarna toe te spesifiseer (kontroleer altyd met strings die inhoud van 'n vreemde SUID binêre).
Payload voorbeelde om uit te voer.
As die suid binêre 'n ander opdrag uitvoer wat die pad spesifiseer, kan jy probeer om 'n funksie te eksporteer wat genoem word soos die opdrag wat die suid-lêer aanroep.
Byvoorbeeld, as 'n suid binêre /usr/sbin/service apache2 start aanroep, moet jy probeer om die funksie te skep en dit te eksporteer:
Dan, wanneer jy die suid-binary aanroep, sal hierdie funksie uitgevoer word
Die LD_PRELOAD omgewing veranderlike word gebruik om een of meer gedeelde biblioteke (.so lêers) aan te dui wat deur die laaier gelaai moet word voordat alle ander, insluitend die standaard C biblioteek (libc.so
). Hierdie proses staan bekend as die vooraflaai van 'n biblioteek.
Om egter die stelselsekuriteit te handhaaf en te voorkom dat hierdie funksie uitgebuit word, veral met suid/sgid uitvoerbare lêers, handhaaf die stelsel sekere voorwaardes:
Die laaier 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, vooraf gelaai.
Privilegie-eskalasie kan plaasvind as jy die vermoë het om opdragte met sudo
uit te voer en die uitvoer van sudo -l
die stelling env_keep+=LD_PRELOAD insluit. Hierdie konfigurasie laat die LD_PRELOAD omgewing veranderlike toe om te bly bestaan en erken te word selfs wanneer opdragte met sudo
uitgevoer word, wat moontlik kan lei tot die uitvoering van arbitrêre kode met verhoogde bevoegdhede.
Stoor as /tmp/pe.c
Dan kompilleer dit met:
Uiteindelik, verhoog privilige wat loop
'n Soortgelyke privesc kan misbruik word as die aanvaller die LD_LIBRARY_PATH omgewing veranderlike beheer, omdat hy die pad beheer waar biblioteke gesoek gaan word.
Wanneer jy 'n binêre met SUID regte teëkom wat ongewoon lyk, is dit 'n goeie praktyk om te verifieer of dit .so lêers korrek laai. Dit kan nagegaan word deur die volgende opdrag uit te voer:
Byvoorbeeld, om 'n fout soos "open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (Geen sodanige lêer of gids)" te teëkom, dui 'n potensiaal vir uitbuiting aan.
Om dit te benut, sou 'n mens voortgaan deur 'n C-lêer te skep, sê "/path/to/.config/libcalc.c", wat die volgende kode bevat:
Hierdie kode, wanneer dit gecompileer en uitgevoer word, is daarop gemik om voorregte te verhoog deur lêer toestemmings te manipuleer en 'n skulp met verhoogde voorregte uit te voer.
Compileer die bogenoemde C-lêer in 'n gedeelde objek (.so) lêer met:
Uiteindelik behoort die uitvoering van die aangetaste SUID-binaar die ontploffing te aktiveer, wat moontlike stelselskade toelaat.
Nou dat ons 'n SUID-binaar gevind het wat 'n biblioteek laai vanaf 'n gids waar ons kan skryf, kom ons skep die biblioteek in daardie gids met die nodige naam:
As jy 'n fout kry soos
dit beteken dat die biblioteek wat jy gegenereer het, 'n funksie moet hê wat a_function_name
genoem word.
GTFOBins is 'n saamgestelde lys van Unix-binaries wat deur 'n aanvaller benut kan word om plaaslike sekuriteitsbeperkings te omseil. GTFOArgs is dieselfde, maar vir gevalle waar jy slegs argumente in 'n opdrag kan inspuit.
Die projek versamel wettige funksies van Unix-binaries wat misbruik kan word om uit beperkte shells te breek, voorregte te eskaleer of te handhaaf, lêers oor te dra, bind en omgekeerde shells te spawn, en ander post-exploitasie take 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 kan kry tot sudo -l
, kan jy die hulpmiddel FallOfSudo gebruik om te kyk of dit vind hoe om enige sudo-reël te benut.
In gevalle waar jy sudo toegang het, maar nie die wagwoord nie, kan jy voorregte eskaleer deur te wag vir 'n sudo-opdrag uitvoering en dan die sessietoken te kap.
Vereistes om voorregte te eskaleer:
Jy het reeds 'n shell as gebruiker "sampleuser"
"sampleuser" het sudo
gebruik om iets in die laaste 15min uit te voer (per 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 moet in staat wees om dit op te laai)
(Jy kan tydelik ptrace_scope
inskakel met echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
of permanent /etc/sysctl.d/10-ptrace.conf
wysig en kernel.yama.ptrace_scope = 0
stel)
As al hierdie vereistes nagekom word, kan jy voorregte eskaleer met: https://github.com/nongiach/sudo_inject
Die eerste exploit (exploit.sh
) sal die binêre 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 shell kry nie, doen sudo su
):
Die tweede eksploit (exploit_v2.sh
) sal 'n sh-skal in /tmp besit deur root met setuid skep
Die derde eksploit (exploit_v3.sh
) sal n sudoers-lêer skep wat sudo-tokenne ewigdurend maak en alle gebruikers toelaat om sudo te gebruik
As jy skrywe toestemmings in die gids of op enige van die geskepte lêers binne die gids het, kan jy die binêre write_sudo_token gebruik om 'n sudo-token vir 'n gebruiker en PID te skep. Byvoorbeeld, as jy die lêer /var/run/sudo/ts/sampleuser kan oorskryf en jy het 'n shell as daardie gebruiker met PID 1234, kan jy sudo-regte verkry sonder om die wagwoord te ken deur:
Die lêer /etc/sudoers
en die lêers binne /etc/sudoers.d
konfigureer wie sudo
kan gebruik en hoe. Hierdie lêers is standaard slegs leesbaar deur gebruiker root en groep root.
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 privileges te eskaleer.
As jy kan skryf, kan jy hierdie toestemming misbruik.
Nog 'n manier om hierdie toestemmings te misbruik:
Daar is 'n paar alternatiewe vir die sudo
binaire soos doas
vir OpenBSD, onthou om sy konfigurasie by /etc/doas.conf
te kontroleer.
As jy weet dat 'n gebruiker gewoonlik aan 'n masjien koppel en sudo
gebruik om voorregte te verhoog en jy het 'n shell binne daardie gebruikerskonteks, kan jy 'n nuwe sudo uitvoerbare lêer skep wat jou kode as root sal uitvoer en dan die gebruiker se opdrag. Dan, wysig 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 shell 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 om iets soos te loop:
Die lêer /etc/ld.so.conf
dui aan waar die gelaaide konfigurasielêers vandaan kom. Tipies bevat hierdie lêer die volgende pad: include /etc/ld.so.conf.d/*.conf
Dit beteken dat die konfigurasielêers van /etc/ld.so.conf.d/*.conf
gelees sal word. Hierdie konfigurasielêers wys na ander vouers waar biblioteke gaan soek word. Byvoorbeeld, die inhoud van /etc/ld.so.conf.d/libc.conf
is /usr/local/lib
. Dit beteken dat die stelsel biblioteke binne /usr/local/lib
gaan soek.
As om een of ander rede 'n gebruiker skryfregte op enige van die aangeduide pades het: /etc/ld.so.conf
, /etc/ld.so.conf.d/
, enige lêer binne /etc/ld.so.conf.d/
of enige vouer binne die konfigurasielêer binne /etc/ld.so.conf.d/*.conf
, kan hy dalk in staat wees om voorregte te verhoog.
Kyk na hoe om hierdie miskonfigurasie te benut 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 vermoëns bied 'n substel van die beskikbare wortelprivileges aan 'n proses. Dit breek effektief wortel privileges op in kleiner en kenmerkende eenhede. Elke eenheid kan dan onafhanklik aan prosesse toegeken word. Op hierdie manier word die volle stel privileges verminder, wat die risiko's van uitbuiting verlaag. Lees die volgende bladsy om meer te leer oor vermoëns en hoe om dit te misbruik:
Linux CapabilitiesIn 'n gids dui die bit vir "uitvoer" aan dat die betrokke gebruiker kan "cd" in die vouer. Die "lees" bit dui aan dat die gebruiker kan lys die lêers, en die "skryf" bit dui aan dat die gebruiker kan verwyder en skep nuwe lêers.
Toegang Beheer Lyste (ACLs) verteenwoordig die sekondêre laag van diskresionêre toestemmings, wat in staat is om die tradisionele ugo/rwx toestemmings te oortref. Hierdie toestemmings verbeter beheer oor lêer of gids toegang deur regte aan spesifieke gebruikers toe te laat of te weier wat nie die eienaars of deel van die groep is nie. Hierdie vlak van fynheid verseker meer presiese toegang bestuur. Verdere besonderhede kan hier gevind word.
Gee gebruiker "kali" lees- en skryftoestemmings oor 'n lêer:
Kry lêers met spesifieke ACLs van die stelsel:
In ou weergawe kan jy hijack sommige shell sessies van 'n ander gebruiker (root). In nuutste weergawes sal jy in staat wees om slegs aan skermsessies van jou eie gebruiker te verbinde. Jy kan egter interessante inligting binne die sessie vind.
Lys skermsessies
Koppel aan 'n sessie
Dit was 'n probleem met ou tmux weergawes. Ek kon nie 'n tmux (v2.1) sessie wat deur root geskep is, oorneem as 'n nie-privilegieerde gebruiker nie.
Lys tmux sessies
Koppel aan 'n sessie
Check Valentine box from HTB vir 'n voorbeeld.
Alle SSL en SSH sleutels wat op Debian-gebaseerde stelsels (Ubuntu, Kubuntu, ens.) tussen September 2006 en 13 Mei 2008 gegenereer is, mag 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 as jy die ssh publieke sleutel het, kan jy soek na die ooreenstemmende private sleutel. Jy kan die berekende moontlikhede hier vind: https://github.com/g0tmi1k/debian-ssh
PasswordAuthentication: Gee aan of wagwoordverifikasie toegelaat word. Die standaard is no
.
PubkeyAuthentication: Gee aan of publieke sleutelverifikasie toegelaat word. Die standaard is yes
.
PermitEmptyPasswords: Wanneer wagwoordverifikasie toegelaat word, gee dit aan of die bediener aanmeldings met leë wagwoordstringe toelaat. Die standaard is no
.
Gee aan of root kan aanmeld met ssh, die standaard is no
. Moontlike waardes:
yes
: root kan aanmeld met wagwoord en private sleutel
without-password
of prohibit-password
: root kan slegs aanmeld met 'n private sleutel
forced-commands-only
: Root kan slegs aanmeld met 'n private sleutel en as die opdragopsies gespesifiseer is
no
: geen
Gee aan watter lêers die publieke sleutels bevat wat vir gebruikersverifikasie gebruik kan word. Dit kan tokens soos %h
bevat, wat deur die tuisgids vervang sal word. Jy kan absolute paaie aandui (begin in /
) of relatiewe paaie vanaf die gebruiker se huis. Byvoorbeeld:
Die konfigurasie sal aandui dat as jy probeer om aan te meld met die private sleutel van die gebruiker "testusername", ssh die publieke sleutel van jou sleutel met diegene in /home/testusername/.ssh/authorized_keys
en /home/testusername/access
gaan vergelyk.
SSH agent forwarding laat jou toe om jou plaaslike SSH sleutels te gebruik in plaas van om sleutels (sonder wagwoorde!) op jou bediener te laat sit. So, jy sal in staat wees om te spring via ssh na 'n gasheer en van daar af na 'n ander gasheer te spring met die sleutel wat in jou begin gasheer geleë is.
Jy moet hierdie opsie in $HOME/.ssh.config
soos volg stel:
Let wel, as Host
*
is, sal elke keer as die gebruiker na 'n ander masjien spring, daardie gasheer toegang tot die sleutels hê (wat 'n sekuriteitskwessie is).
Die lêer /etc/ssh_config
kan oorskryf hierdie opsies en hierdie konfigurasie toelaat of weier.
Die lêer /etc/sshd_config
kan toelaat of weier ssh-agent forwarding met die sleutelwoord AllowAgentForwarding
(standaard is toelaat).
As jy vind dat Forward Agent in 'n omgewing geconfigureer is, lees die volgende bladsy as jy dalk dit kan misbruik om voorregte te verhoog:
SSH Forward Agent exploitationDie lêer /etc/profile
en die lêers onder /etc/profile.d/
is scripts wat uitgevoer word wanneer 'n gebruiker 'n nuwe skulp uitvoer. Daarom, as jy enige van hulle kan skryf of wysig, kan jy voorregte verhoog.
As daar enige vreemde profielskrip gevind word, moet jy dit nagaan vir sensitiewe besonderhede.
Afhangende van die OS mag die /etc/passwd
en /etc/shadow
lêers 'n ander naam gebruik of daar mag 'n rugsteun wees. Daarom word dit aanbeveel om almal van hulle te vind en na te gaan of jy hulle kan lees om te sien of daar hashes binne die lêers is:
In sommige gevalle kan jy wagwoord-hashes binne die /etc/passwd
(of ekwivalente) lêer vind
Eerst, genereer 'n wagwoord met een van die volgende opdragte.
Dan voeg die gebruiker hacker
by en voeg die gegenereerde wagwoord by.
E.g: hacker:$1$hacker$TzyKlv0/R/c28R.GAeLw.1:0:0:Hacker:/root:/bin/bash
Jy kan nou die su
opdrag gebruik met hacker:hacker
Alternatiewelik kan jy die volgende lyne gebruik om 'n dummy gebruiker sonder 'n wagwoord by te voeg. WAARSKUWING: jy mag die huidige sekuriteit van die masjien verlaag.
NOTE: In BSD platforms /etc/passwd
is geleë by /etc/pwd.db
en /etc/master.passwd
, ook is die /etc/shadow
hernoem na /etc/spwd.db
.
Jy moet nagaan of jy in sommige sensitiewe lêers kan skryf. Byvoorbeeld, kan jy in 'n dienskonfigurasielêer skryf?
Byvoorbeeld, as die masjien 'n tomcat bediener draai en jy kan die Tomcat diens konfigurasie lêer binne /etc/systemd/ wysig, dan kan jy die lyne wysig:
Your backdoor will be executed the next time that tomcat is started.
Die volgende vouers mag rugsteun of interessante inligting bevat: /tmp, /var/tmp, /var/backups, /var/mail, /var/spool/mail, /etc/exports, /root (Waarskynlik sal jy nie die laaste een kan lees nie, maar probeer)
Lees die kode van linPEAS, dit soek na verskeie moontlike lêers wat wagwoorde kan bevat. Nog 'n interessante hulpmiddel 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 gestoor is vir Windows, Linux & Mac te onttrek.
As jy logs kan lees, mag jy in staat wees om interessante/vertroulike inligting daarin te vind. Hoe meer vreemd die log is, hoe meer interessant sal dit wees (waarskynlik). Ook, sommige "slegte" geconfigureerde (terugdeur?) auditslogs mag jou toelaat om wagwoorde binne auditslogs te registreer soos verduidelik in hierdie pos: https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/.
Om logs te lees, sal die groep adm baie nuttig wees.
Jy moet ook kyk vir lêers wat die woord "password" in sy naam of binne die inhoud bevat, en ook kyk vir IP's en e-posse binne logs, of hashes regexps. Ek gaan nie hier lys hoe om al hierdie te doen nie, maar as jy belangstel, kan jy die laaste toetse wat linpeas uitvoer, nagaan.
As jy weet waar 'n python skrip gaan uitgevoer word en jy kan skryf binne daardie gids of jy kan python biblioteke wysig, kan jy die OS biblioteek wysig en dit backdoor (as jy kan skryf waar die python skrip gaan uitgevoer word, kopieer en plak die os.py biblioteek).
Om die biblioteek te backdoor, voeg net die volgende lyn aan die einde van die os.py biblioteek by (verander IP en PORT):
'n Kwetsbaarheid in logrotate
laat gebruikers met skrywe toestemmings op 'n loglêer of sy ouer directories potensieel verhoogde bevoegdhede verkry. Dit is omdat logrotate
, wat dikwels as root loop, gemanipuleer kan word om arbitrêre lêers uit te voer, veral in directories soos /etc/bash_completion.d/. Dit is belangrik om toestemmings te kontroleer nie net in /var/log nie, maar ook in enige directory waar logrotasie toegepas word.
Hierdie kwesbaarheid raak logrotate
weergawe 3.18.0
en ouer
Meer gedetailleerde inligting oor die kwesbaarheid kan op hierdie bladsy gevind word: 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 logs), so wanneer jy vind dat jy logs kan verander, kyk wie daardie logs bestuur en kyk of jy bevoegdhede kan verhoog deur die logs met symlinks te vervang.
Kwetsbaarheid verwysing: https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f
As 'n gebruiker om enige rede in staat is om te skryf 'n ifcf-<whatever>
skrip na /etc/sysconfig/network-scripts of dit kan aanpas 'n bestaande een, dan is jou stelsel pwned.
Netwerk skripte, ifcg-eth0 byvoorbeeld, word gebruik vir netwerkverbindinge. Hulle lyk presies soos .INI lêers. Hulle word egter ~sourced~ op Linux deur Network Manager (dispatcher.d).
In my geval, die NAME=
attribuut in hierdie netwerk skripte word nie korrek hanteer nie. As jy wit/leë spasie in die naam het, probeer die stelsel om die deel 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 huis van scripts vir System V init (SysVinit), die klassieke Linux diensbestuurstelsel. Dit sluit scripts in om dienste te begin
, stop
, herbegin
, en soms herlaai
. Hierdie kan direk of deur simboliese skakels in /etc/rc?.d/
uitgevoer word. 'n Alternatiewe pad in Redhat stelsels is /etc/rc.d/init.d
.
Aan die ander kant, /etc/init
is geassosieer met Upstart, 'n nuwer diensbestuur wat deur Ubuntu bekendgestel is, wat konfigurasie lêers gebruik vir diensbestuur take. Ten spyte van die oorgang na Upstart, word SysVinit scripts steeds saam met Upstart konfigurasies gebruik weens 'n kompatibiliteitslaag in Upstart.
systemd verskyn as 'n moderne inisialisasie en diensbestuurder, wat gevorderde funksies bied soos on-demand daemon begin, automount bestuur, en stelsels staat snapshots. Dit organiseer lêers in /usr/lib/systemd/
vir verspreidingspakkette en /etc/systemd/system/
vir administrateur wysigings, wat die stelsels administrasie proses stroomlyn.
LinEnum: https://github.com/rebootuser/LinEnum(-t opsie) Enumy: https://github.com/luke-goddard/enumy Unix Privesc Kontrole: 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 kernel kwesbaarhede 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 scripts: https://github.com/1N3/PrivEsc
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)