Linux Privilege Escalation
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Hajde da počnemo da stičemo neka znanja o operativnom sistemu koji se pokreće
Ako imate dozvole za pisanje u bilo kojem folderu unutar PATH
promenljive, možda ćete moći da preuzmete neke biblioteke ili binarne datoteke:
Zanimljive informacije, lozinke ili API ključevi u promenljivim okruženja?
Proverite verziju kernela i da li postoji neki exploit koji se može iskoristiti za eskalaciju privilegija
Možete pronaći dobru listu ranjivih kernela i neke već kompilirane eksploite ovde: https://github.com/lucyoa/kernel-exploits i exploitdb sploits. Ostale stranice gde možete pronaći neke kompilirane eksploite: https://github.com/bwbwbwbw/linux-exploit-binaries, https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack
Da biste izvukli sve ranjive verzije kernela sa te veb stranice, možete uraditi:
Alati koji mogu pomoći u pretrazi za kernel exploitima su:
linux-exploit-suggester.sh linux-exploit-suggester2.pl linuxprivchecker.py (izvršiti U žrtvi, proverava samo exploite za kernel 2.x)
Uvek pretražujte verziju kernela na Google-u, možda je vaša verzija kernela navedena u nekom kernel exploit-u i tada ćete biti sigurni da je ovaj exploit validan.
Linux eskalacija privilegija - Linux Kernel <= 3.19.0-73.8
Na osnovu ranjivih sudo verzija koje se pojavljuju u:
Možete proveriti da li je verzija sudo ranjiva koristeći ovaj grep.
Od @sickrov
Proverite smasher2 box of HTB za primer kako bi ova ranjivost mogla biti iskorišćena
Ako ste unutar docker kontejnera, možete pokušati da pobegnete iz njega:
Docker SecurityProverite šta je montirano i demontirano, gde i zašto. Ako je nešto demontirano, možete pokušati da to montirate i proverite za privatne informacije.
Enumerate useful binaries
Takođe, proverite da li je bilo koji kompajler instaliran. Ovo je korisno ako treba da koristite neki kernel exploit, jer se preporučuje da ga kompajlirate na mašini na kojoj ćete ga koristiti (ili na sličnoj).
Proverite verziju instaliranih paketa i usluga. Možda postoji neka stara verzija Nagios-a (na primer) koja bi mogla biti iskorišćena za eskalaciju privilegija… Preporučuje se da se ručno proveri verzija sumnjivijeg instaliranog softvera.
Ako imate SSH pristup mašini, možete takođe koristiti openVAS da proverite zastarele i ranjive softvere instalirane unutar mašine.
Napomena da će ovi komandi prikazati mnogo informacija koje će većinom biti beskorisne, stoga se preporučuju neke aplikacije poput OpenVAS-a ili sličnih koje će proveriti da li je neka instalirana verzija softvera ranjiva na poznate eksploite
Pogledajte koji procesi se izvršavaju i proverite da li neki proces ima više privilegija nego što bi trebao (možda tomcat koji se izvršava kao root?)
Uvek proverite moguće electron/cef/chromium debuggere koji rade, mogli biste to iskoristiti za eskalaciju privilegija. Linpeas ih detektuje proverom --inspect
parametra unutar komandne linije procesa.
Takođe proverite svoje privilegije nad binarnim datotekama procesa, možda možete prepisati nečije.
Možete koristiti alate kao što su pspy za praćenje procesa. Ovo može biti veoma korisno za identifikaciju ranjivih procesa koji se često izvršavaju ili kada su ispunjeni određeni uslovi.
Neke usluge servera čuvaju akreditive u čistom tekstu unutar memorije. Obično će vam biti potrebne root privilegije da pročitate memoriju procesa koji pripadaju drugim korisnicima, stoga je ovo obično korisnije kada ste već root i želite da otkrijete više akreditiva. Međutim, zapamtite da kao običan korisnik možete čitati memoriju procesa koje posedujete.
Imajte na umu da danas većina mašina ne dozvoljava ptrace po defaultu, što znači da ne možete dumpovati druge procese koji pripadaju vašem neprivilegovanom korisniku.
Datoteka /proc/sys/kernel/yama/ptrace_scope kontroliše dostupnost ptrace:
kernel.yama.ptrace_scope = 0: svi procesi mogu biti debagovani, sve dok imaju isti uid. Ovo je klasičan način na koji je ptracing radio.
kernel.yama.ptrace_scope = 1: samo roditeljski proces može biti debagovan.
kernel.yama.ptrace_scope = 2: samo admin može koristiti ptrace, jer zahteva CAP_SYS_PTRACE sposobnost.
kernel.yama.ptrace_scope = 3: Niti jedan proces ne može biti praćen sa ptrace. Kada se postavi, potrebno je ponovo pokrenuti da bi se omogućio ptracing.
Ako imate pristup memoriji FTP usluge (na primer), mogli biste dobiti Heap i pretražiti unutar njegovih akreditiva.
Za dati ID procesa, maps prikazuje kako je memorija mapirana unutar virtuelnog adresnog prostora tog procesa; takođe prikazuje dozvole svake mapirane oblasti. Mem pseudo fajl izlaže samu memoriju procesa. Iz maps fajla znamo koje su oblasti memorije čitljive i njihovi ofseti. Koristimo ove informacije da tražimo u mem fajlu i prebacimo sve čitljive oblasti u fajl.
/dev/mem
omogućava pristup fizičkoj memoriji sistema, a ne virtuelnoj memoriji. Virtuelni adresni prostor kernela može se pristupiti koristeći /dev/kmem.
Obično, /dev/mem
je samo čitljiv za root i kmem grupu.
ProcDump je Linux reinterpretacija klasičnog ProcDump alata iz Sysinternals paketa alata za Windows. Preuzmite ga na https://github.com/Sysinternals/ProcDump-for-Linux
Da biste dumpovali memoriju procesa, možete koristiti:
https://github.com/hajzer/bash-memory-dump (root) - _Možete ručno ukloniti zahteve za root i dumpovati proces koji je u vašem vlasništvu
Skripta A.5 sa https://www.delaat.net/rp/2016-2017/p97/report.pdf (potreban je root)
Ako otkrijete da proces autentifikacije radi:
Možete dumpovati proces (vidite prethodne sekcije da pronađete različite načine za dumpovanje memorije procesa) i pretražiti kredencijale unutar memorije:
Alat https://github.com/huntergregal/mimipenguin će ukrasti kredencijale u čistom tekstu iz memorije i iz nekih poznatih fajlova. Zahteva root privilegije da bi pravilno radio.
GDM lozinka (Kali Desktop, Debian Desktop)
gdm-password
Gnome Keyring (Ubuntu Desktop, ArchLinux Desktop)
gnome-keyring-daemon
LightDM (Ubuntu Desktop)
lightdm
VSFTPd (Aktivne FTP konekcije)
vsftpd
Apache2 (Aktivne HTTP Basic Auth sesije)
apache2
OpenSSH (Aktivne SSH sesije - Sudo korišćenje)
sshd:
Proverite da li je neki zakazani posao ranjiv. Možda možete iskoristiti skriptu koju izvršava root (ranjivost sa džokerom? može da menja datoteke koje koristi root? koristiti simboličke linkove? kreirati specifične datoteke u direktorijumu koji koristi root?).
Na primer, unutar /etc/crontab možete pronaći PUTANJU: PATH=/home/user:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
(Obratite pažnju na to kako korisnik "user" ima privilegije pisanja nad /home/user)
Ako unutar ovog crontaba korisnik root pokuša da izvrši neku komandu ili skriptu bez postavljanja putanje. Na primer: * * * * root overwrite.sh Tada možete dobiti root shell koristeći:
Ako skripta koju izvršava root ima “*” unutar komande, mogli biste to iskoristiti da napravite neočekivane stvari (kao što je privesc). Primer:
Ako je džoker prethodjen putanjom kao /some/path/* , nije ranjiv (čak ni ./* nije).
Pročitajte sledeću stranicu za više trikova sa džokerima:
Wildcards Spare tricksAko možete da modifikujete cron skriptu koju izvršava root, možete vrlo lako dobiti shell:
Ako skripta koju izvršava root koristi direktorijum gde imate pun pristup, možda bi bilo korisno da obrišete tu fasciklu i napravite simbolički link ka drugoj koja služi skripti koju kontrolišete.
Možete pratiti procese kako biste tražili procese koji se izvršavaju svake 1, 2 ili 5 minuta. Možda možete iskoristiti to i eskalirati privilegije.
Na primer, da pratite svake 0.1s tokom 1 minuta, sortirate po manje izvršenim komandama i obrišete komande koje su najviše izvršene, možete uraditi:
Možete takođe koristiti pspy (ovo će pratiti i navesti svaki proces koji se pokrene).
Moguće je kreirati cronjob stavljanjem povratka u red nakon komentara (bez karaktera novog reda), i cron posao će raditi. Primer (obratite pažnju na karakter povratka u red):
Proverite da li možete da pišete u bilo koju .service
datoteku, ako možete, možete je modifikovati tako da izvršava vašu backdoor kada se usluga pokrene, ponovo pokrene ili zaustavi (možda ćete morati da sačekate da se mašina ponovo pokrene).
Na primer, kreirajte svoju backdoor unutar .service datoteke sa ExecStart=/tmp/script.sh
Imajte na umu da ako imate dozvole za pisanje nad binarnim datotekama koje izvršavaju usluge, možete ih promeniti za backdoor, tako da kada se usluge ponovo izvrše, backdoor će biti izvršen.
Možete videti PUTANJU koju koristi systemd sa:
Ako otkrijete da možete pisati u bilo kojoj od fascikala na putanji, možda ćete moći da povećate privilegije. Trebalo bi da tražite relativne putanje koje se koriste u konfiguracionim datotekama servisa kao što su:
Zatim, kreirajte izvršni fajl sa istim imenom kao relativna putanja binarnog fajla unutar systemd PATH foldera u koji možete pisati, i kada se od servisa zatraži da izvrši ranjivu akciju (Start, Stop, Reload), vaša backdoor će biti izvršena (korisnici bez privilegija obično ne mogu da pokreću/zaustavljaju servise, ali proverite da li možete koristiti sudo -l
).
Saznajte više o servisima sa man systemd.service
.
Tajmeri su systemd jedinice čija imena se završavaju sa **.timer**
koje kontrolišu **.service**
fajlove ili događaje. Tajmeri se mogu koristiti kao alternativa cron-u jer imaju ugrađenu podršku za događaje kalendarskog vremena i monotonskog vremena i mogu se izvršavati asinkrono.
Možete nabrojati sve tajmere sa:
Ako možete da modifikujete tajmer, možete ga naterati da izvrši neke instance systemd.unit (kao što su .service
ili .target
)
U dokumentaciji možete pročitati šta je jedinica:
Jedinica koja se aktivira kada ovaj tajmer istekne. Argument je naziv jedinice, čija sufiks nije ".timer". Ako nije navedeno, ova vrednost podrazumevano se postavlja na servis koji ima isto ime kao jedinica tajmera, osim sufiksa. (Vidi iznad.) Preporučuje se da naziv jedinice koja se aktivira i naziv jedinice tajmera budu identični, osim sufiksa.
Dakle, da biste zloupotrebili ovu dozvolu, trebali biste:
Pronaći neku systemd jedinicu (kao što je .service
) koja izvršava zapisivu binarnu datoteku
Pronaći neku systemd jedinicu koja izvršava relativnu putanju i imate dozvole za pisanje nad systemd PUTANJOM (da biste se pretvarali da ste taj izvršni program)
Saznajte više o tajmerima sa man systemd.timer
.
Da biste omogućili tajmer, potrebne su vam root privilegije i da izvršite:
Note the timer is activated by creating a symlink to it on /etc/systemd/system/<WantedBy_section>.wants/<name>.timer
Unix Domain Sockets (UDS) omogućavaju komunikaciju procesa na istim ili različitim mašinama unutar klijent-server modela. Koriste standardne Unix deskriptore za međusobnu komunikaciju i postavljaju se putem .socket
datoteka.
Sockets can be configured using .socket
files.
Learn more about sockets with man systemd.socket
. Inside this file, several interesting parameters can be configured:
ListenStream
, ListenDatagram
, ListenSequentialPacket
, ListenFIFO
, ListenSpecial
, ListenNetlink
, ListenMessageQueue
, ListenUSBFunction
: Ove opcije su različite, ali se koristi sažetak da naznači gde će slušati socket (putanja AF_UNIX socket datoteke, IPv4/6 i/ili broj porta za slušanje, itd.)
Accept
: Prihvaća boolean argument. Ako je true, instanca servisa se pokreće za svaku dolaznu konekciju i samo se socket konekcije prosleđuje. Ako je false, svi slušajući socketi se prosleđuju pokrenutoj servisnoj jedinici, i samo jedna servisna jedinica se pokreće za sve konekcije. Ova vrednost se ignoriše za datagram socket-e i FIFO-e gde jedna servisna jedinica bezuslovno obrađuje sav dolazni saobraćaj. Podrazumevano je false. Zbog razloga performansi, preporučuje se pisanje novih demona samo na način koji je pogodan za Accept=no
.
ExecStartPre
, ExecStartPost
: Prihvaća jedan ili više komandnih redova, koji se izvršavaju pre ili posle kreiranja i vezivanja slušajućih socket-a/FIFO-a, redom. Prvi token komandnog reda mora biti apsolutna putanja do datoteke, a zatim slede argumenti za proces.
ExecStopPre
, ExecStopPost
: Dodatne komande koje se izvršavaju pre ili posle zatvaranja i uklanjanja slušajućih socket-a/FIFO-a, redom.
Service
: Određuje naziv servisne jedinice koju treba aktivirati na dolaznom saobraćaju. Ova postavka je dozvoljena samo za socket-e sa Accept=no. Podrazumevano se koristi servis koji nosi isto ime kao socket (sa zamenjenim sufiksom). U većini slučajeva, ne bi trebalo da bude potrebno koristiti ovu opciju.
If you find a writable .socket
file you can add at the beginning of the [Socket]
section something like: ExecStartPre=/home/kali/sys/backdoor
and the backdoor will be executed before the socket is created. Therefore, you will probably need to wait until the machine is rebooted.
&#xNAN;Note that the system must be using that socket file configuration or the backdoor won't be executed
If you identify any writable socket (now we are talking about Unix Sockets and not about the config .socket
files), then you can communicate with that socket and maybe exploit a vulnerability.
Primer eksploatacije:
Socket Command InjectionNapomena da može postojati nekoliko soketa koji slušaju HTTP zahteve (ne govorim o .socket datotekama već o datotekama koje deluju kao unix soketi). Ovo možete proveriti sa:
Ako soket odgovara HTTP zahtevom, tada možete komunicirati s njim i možda iskoristiti neku ranjivost.
Docker soket, često pronađen na /var/run/docker.sock
, je kritična datoteka koja treba biti zaštićena. Po defaultu, može se pisati od strane root
korisnika i članova docker
grupe. Imati pristup za pisanje na ovaj soket može dovesti do eskalacije privilegija. Evo pregleda kako se to može uraditi i alternativnih metoda ako Docker CLI nije dostupan.
Ako imate pristup za pisanje na Docker soket, možete eskalirati privilegije koristeći sledeće komande:
Ove komande vam omogućavaju da pokrenete kontejner sa pristupom na nivou root-a do datotečnog sistema host-a.
U slučajevima kada Docker CLI nije dostupan, Docker soket se i dalje može manipulisati koristeći Docker API i curl
komande.
Lista Docker slika: Preuzmite listu dostupnih slika.
Kreirajte kontejner: Pošaljite zahtev za kreiranje kontejnera koji montira root direktorijum host sistema.
Pokrenite novokreirani kontejner:
Priključite se kontejneru: Koristite socat
za uspostavljanje veze sa kontejnerom, omogućavajući izvršavanje komandi unutar njega.
Nakon postavljanja socat
veze, možete izvršavati komande direktno u kontejneru sa pristupom na nivou root-a do datotečnog sistema host-a.
Imajte na umu da ako imate dozvole za pisanje preko docker soketa jer ste unutar grupe docker
imate više načina za eskalaciju privilegija. Ako docker API sluša na portu možete takođe biti u mogućnosti da ga kompromitujete.
Proverite više načina da pobegnete iz dockera ili ga zloupotrebite za eskalaciju privilegija u:
Docker SecurityAko otkrijete da možete koristiti ctr
komandu pročitajte sledeću stranicu jer možda možete da je zloupotrebite za eskalaciju privilegija:
Ako otkrijete da možete koristiti runc
komandu pročitajte sledeću stranicu jer možda možete da je zloupotrebite za eskalaciju privilegija:
D-Bus je sofisticirani sistem međuprocesne komunikacije (IPC) koji omogućava aplikacijama da efikasno komuniciraju i dele podatke. Dizajniran sa modernim Linux sistemom na umu, nudi robusnu strukturu za različite oblike komunikacije aplikacija.
Sistem je svestran, podržavajući osnovni IPC koji poboljšava razmenu podataka između procesa, podsećajući na poboljšane UNIX domen sokete. Pored toga, pomaže u emitovanju događaja ili signala, olakšavajući besprekornu integraciju među komponentama sistema. Na primer, signal iz Bluetooth demona o dolaznom pozivu može naterati muzički plejer da utiša, poboljšavajući korisničko iskustvo. Dodatno, D-Bus podržava sistem udaljenih objekata, pojednostavljujući zahteve za uslugama i pozive metoda između aplikacija, pojednostavljujući procese koji su tradicionalno bili složeni.
D-Bus funkcioniše na modelu dozvola/odbijanja, upravljajući dozvolama za poruke (pozivi metoda, emitovanje signala, itd.) na osnovu kumulativnog efekta pravila politike. Ove politike specificiraju interakcije sa autobusom, potencijalno omogućavajući eskalaciju privilegija kroz eksploataciju ovih dozvola.
Primer takve politike u /etc/dbus-1/system.d/wpa_supplicant.conf
je dat, detaljno opisujući dozvole za root korisnika da poseduje, šalje i prima poruke od fi.w1.wpa_supplicant1
.
Politike bez specificiranog korisnika ili grupe primenjuju se univerzalno, dok "podrazumevane" kontekst politike važe za sve što nije pokriveno drugim specifičnim politikama.
Naučite kako da enumerišete i iskoristite D-Bus komunikaciju ovde:
D-Bus Enumeration & Command Injection Privilege EscalationUvek je zanimljivo enumerisati mrežu i utvrditi poziciju mašine.
Uvek proverite mrežne usluge koje rade na mašini sa kojom niste mogli da komunicirate pre nego što joj pristupite:
Proverite da li možete da presretnete saobraćaj. Ako možete, mogli biste da uhvatite neke akreditive.
Proverite ko ste, koje privilegije imate, koji korisnici su u sistemima, koji mogu da prijave i koji imaju root privilegije:
Neke verzije Linux-a su bile pogođene greškom koja omogućava korisnicima sa UID > INT_MAX da eskaliraju privilegije. Više informacija: ovde, ovde i ovde.
Iskoristite to koristeći: systemd-run -t /bin/bash
Proverite da li ste član neke grupe koja bi vam mogla dodeliti root privilegije:
Interesting Groups - Linux PrivescProverite da li se nešto zanimljivo nalazi unutar clipboard-a (ako je moguće)
Ako znate neku lozinku okruženja pokušajte da se prijavite kao svaki korisnik koristeći lozinku.
Ako vam nije stalo do pravljenja puno buke i su
i timeout
binarni fajlovi su prisutni na računaru, možete pokušati da brute-force korisnika koristeći su-bruteforce.
Linpeas sa -a
parametrom takođe pokušava da brute-force korisnike.
Ako otkrijete da možete pisati unutar neke fascikle $PATH-a možda ćete moći da eskalirate privilegije tako što ćete napraviti backdoor unutar zapisive fascikle sa imenom neke komande koja će biti izvršena od strane drugog korisnika (idealno root) i koja nije učitana iz fascikle koja se nalazi pre vaše zapisive fascikle u $PATH-u.
Možda ćete imati dozvolu da izvršite neku komandu koristeći sudo ili bi mogli imati suid bit. Proverite to koristeći:
Neki neočekivani komandi omogućavaju vam da čitate i/ili pišete datoteke ili čak izvršite komandu. Na primer:
Sudo konfiguracija može omogućiti korisniku da izvrši neku komandu sa privilegijama drugog korisnika bez poznavanja lozinke.
U ovom primeru korisnik demo
može da pokrene vim
kao root
, sada je trivijalno dobiti shell dodavanjem ssh ključa u root direktorijum ili pozivanjem sh
.
Ova direktiva omogućava korisniku da postavi promenljivu okruženja dok izvršava nešto:
Ovaj primer, zasnovan na HTB mašini Admirer, bio je ranjiv na PYTHONPATH hijacking kako bi učitao proizvoljnu python biblioteku dok izvršava skriptu kao root:
Skočite da pročitate druge datoteke ili koristite simboličke linkove. Na primer, u sudoers datoteci: hacker10 ALL= (root) /bin/less /var/log/*
Ako se koristi wildcard (*), još je lakše:
Protivmere: https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/
Ako je sudo dozvola data za jednu komandu bez specificiranja putanje: hacker10 ALL= (root) less možete to iskoristiti promenom PATH varijable
Ova tehnika se takođe može koristiti ako suid binarni izvršava drugu komandu bez navođenja putanje do nje (uvek proverite sa strings sadržaj čudnog SUID binarnog fajla).
Primeri payload-a za izvršavanje.
Ako suid binarni izvršava drugu komandu navođenjem putanje, onda možete pokušati da izvezete funkciju nazvanu kao komanda koju suid fajl poziva.
Na primer, ako suid binarni poziva /usr/sbin/service apache2 start morate pokušati da kreirate funkciju i izvezete je:
Then, when you call the suid binary, this function will be executed
The LD_PRELOAD environment variable is used to specify one or more shared libraries (.so files) to be loaded by the loader before all others, including the standard C library (libc.so
). This process is known as preloading a library.
Međutim, da bi se održala sigurnost sistema i sprečilo da se ova funkcija zloupotrebi, posebno sa suid/sgid izvršnim datotekama, sistem nameće određene uslove:
Loader zanemaruje LD_PRELOAD za izvršne datoteke gde se stvarni korisnički ID (ruid) ne poklapa sa efektivnim korisničkim ID (euid).
Za izvršne datoteke sa suid/sgid, samo biblioteke u standardnim putanjama koje su takođe suid/sgid se prelažu.
Privilege escalation can occur if you have the ability to execute commands with sudo
and the output of sudo -l
includes the statement env_keep+=LD_PRELOAD. This configuration allows the LD_PRELOAD environment variable to persist and be recognized even when commands are run with sudo
, potentially leading to the execution of arbitrary code with elevated privileges.
Sačuvaj kao /tmp/pe.c
Zatim kompajlirajte to koristeći:
Konačno, povećajte privilegije pokretanjem
Sličan privesc može biti zloupotrebljen ako napadač kontroliše LD_LIBRARY_PATH env varijablu jer kontroliše putanju gde će se tražiti biblioteke.
Kada naiđete na binarni fajl sa SUID dozvolama koji deluje neobično, dobra je praksa da proverite da li pravilno učitava .so fajlove. To se može proveriti pokretanjem sledeće komande:
Na primer, susret sa greškom poput "open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (Nema takve datoteke ili direktorijuma)" sugeriše potencijal za eksploataciju.
Da bi se to iskoristilo, nastavilo bi se kreiranjem C datoteke, recimo "/path/to/.config/libcalc.c", koja sadrži sledeći kod:
Ovaj kod, kada se kompajlira i izvrši, ima za cilj da poveća privilegije manipulisanjem dozvolama datoteka i izvršavanjem shel-a sa povišenim privilegijama.
Kompajlirajte gornji C fajl u deljeni objekat (.so) fajl sa:
Konačno, pokretanje pogođenog SUID binarnog fajla trebalo bi da aktivira eksploataciju, omogućavajući potencijalni kompromis sistema.
Sada kada smo pronašli SUID binarni fajl koji učitava biblioteku iz fascikle u kojoj možemo pisati, hajde da kreiramo biblioteku u toj fascikli sa potrebnim imenom:
Ако добијете грешку као што је
to znači da biblioteka koju ste generisali treba da ima funkciju pod nazivom a_function_name
.
GTFOBins je pažljivo odabran spisak Unix binarnih datoteka koje napadač može iskoristiti da zaobiđe lokalna bezbednosna ograničenja. GTFOArgs je isto, ali za slučajeve kada možete samo injektovati argumente u komandu.
Projekat prikuplja legitimne funkcije Unix binarnih datoteka koje se mogu zloupotrebiti za izlazak iz ograničenih ljuski, eskalaciju ili održavanje povišenih privilegija, prenos datoteka, pokretanje bind i reverse ljuski, i olakšavanje drugih post-exploitation zadataka.
gdb -nx -ex '!sh' -ex quit sudo mysql -e '! /bin/sh' strace -o /dev/null /bin/sh sudo awk 'BEGIN {system("/bin/sh")}'
Ako možete pristupiti sudo -l
, možete koristiti alat FallOfSudo da proverite da li može da pronađe način da iskoristi bilo koje sudo pravilo.
U slučajevima kada imate sudo pristup ali ne i lozinku, možete eskalirati privilegije čekajući izvršenje sudo komande i zatim preuzimajući sesijski token.
Zahtevi za eskalaciju privilegija:
Već imate ljusku kao korisnik "sampleuser"
"sampleuser" je koristio sudo
da izvrši nešto u poslednjih 15 minuta (po defaultu, to je trajanje sudo tokena koji nam omogućava da koristimo sudo
bez unošenja lozinke)
cat /proc/sys/kernel/yama/ptrace_scope
je 0
gdb
je dostupan (možete ga učitati)
(Možete privremeno omogućiti ptrace_scope
sa echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
ili trajno modifikovanjem /etc/sysctl.d/10-ptrace.conf
i postavljanjem kernel.yama.ptrace_scope = 0
)
Ako su svi ovi zahtevi ispunjeni, možete eskalirati privilegije koristeći: https://github.com/nongiach/sudo_inject
Prvi exploit (exploit.sh
) će kreirati binarnu datoteku activate_sudo_token
u /tmp. Možete je koristiti da aktivirate sudo token u vašoj sesiji (nećete automatski dobiti root ljusku, uradite sudo su
):
Drugi eksploit (exploit_v2.sh
) će kreirati sh shell u /tmp u vlasništvu root-a sa setuid
Treći exploit (exploit_v3.sh
) će napraviti sudoers datoteku koja čini sudo tokene večnim i omogućava svim korisnicima da koriste sudo
Ako imate dozvole za pisanje u folderu ili na bilo kojem od kreiranih fajlova unutar foldera, možete koristiti binarni write_sudo_token da kreirate sudo token za korisnika i PID. Na primer, ako možete da prepišete fajl /var/run/sudo/ts/sampleuser i imate shell kao taj korisnik sa PID 1234, možete dobiti sudo privilegije bez potrebe da znate lozinku tako što ćete:
Datoteka /etc/sudoers
i datoteke unutar /etc/sudoers.d
konfigurišu ko može koristiti sudo
i kako. Ove datoteke po defaultu mogu da se čitaju samo od strane korisnika root i grupe root.
Ako možete čitati ovu datoteku, mogli biste dobiti neke zanimljive informacije, a ako možete pisati bilo koju datoteku, moći ćete da escalate privileges.
Ако можете да пишете, можете злоупотребити ову дозволу.
Još jedan način da se zloupotrebe ove dozvole:
Postoje neke alternative za sudo
binarni fajl kao što je doas
za OpenBSD, zapamtite da proverite njegovu konfiguraciju na /etc/doas.conf
Ako znate da korisnik obično pristupa mašini i koristi sudo
za eskalaciju privilegija i dobili ste shell unutar tog korisničkog konteksta, možete napraviti novi sudo izvršni fajl koji će izvršiti vaš kod kao root, a zatim korisnikovu komandu. Zatim, modifikujte $PATH korisničkog konteksta (na primer, dodajući novi put u .bash_profile) tako da kada korisnik izvrši sudo, vaš sudo izvršni fajl bude izvršen.
Imajte na umu da ako korisnik koristi drugačiji shell (ne bash) bićete u obavezi da modifikujete druge fajlove kako biste dodali novi put. Na primer, sudo-piggyback modifikuje ~/.bashrc
, ~/.zshrc
, ~/.bash_profile
. Možete pronaći još jedan primer u bashdoor.py
Ili pokretanjem nečega poput:
Datoteka /etc/ld.so.conf
označava odakle su učitane konfiguracione datoteke. Obično, ova datoteka sadrži sledeći put: include /etc/ld.so.conf.d/*.conf
To znači da će se konfiguracione datoteke iz /etc/ld.so.conf.d/*.conf
čitati. Ove konfiguracione datoteke pokazuju na druge foldere gde će se biblioteke tražiti. Na primer, sadržaj /etc/ld.so.conf.d/libc.conf
je /usr/local/lib
. To znači da će sistem tražiti biblioteke unutar /usr/local/lib
.
Ako iz nekog razloga korisnik ima dozvole za pisanje na bilo kojem od putanja označenih: /etc/ld.so.conf
, /etc/ld.so.conf.d/
, bilo koja datoteka unutar /etc/ld.so.conf.d/
ili bilo koji folder unutar konfiguracione datoteke unutar /etc/ld.so.conf.d/*.conf
, može biti u mogućnosti da eskalira privilegije.
Pogledajte kako iskoristiti ovu pogrešnu konfiguraciju na sledećoj stranici:
Kopiranjem lib-a u /var/tmp/flag15/
biće korišćen od strane programa na ovom mestu kao što je navedeno u RPATH
varijabli.
Zatim kreirajte zlu biblioteku u /var/tmp
sa gcc -fPIC -shared -static-libgcc -Wl,--version-script=version,-Bstatic exploit.c -o libc.so.6
Linux capabilities provide a podskup dostupnih root privilegija procesu. This effectively breaks up root privilegije na manje i prepoznatljive jedinice. Each of these units can then be independently granted to processes. This way the full set of privileges is reduced, decreasing the risks of exploitation. Read the following page to saznajte više o sposobnostima i kako ih zloupotrebiti:
Linux CapabilitiesIn a directory, the bit for "execute" implies that the user affected can "cd" into the folder. The "read" bit implies the user can lista the fajlove, and the "write" bit implies the user can izbrisati and napraviti nove fajlove.
Access Control Lists (ACLs) represent the secondary layer of discretionary permissions, capable of preklapanja tradicionalnih ugo/rwx dozvola. These permissions enhance control over file or directory access by allowing or denying rights to specific users who are not the owners or part of the group. This level of granularnosti osigurava preciznije upravljanje pristupom. Further details can be found ovde.
Dajte korisniku "kali" dozvole za čitanje i pisanje nad fajlom:
Preuzmite datoteke sa specifičnim ACL-ovima sa sistema:
U starim verzijama možete oteti neku shell sesiju drugog korisnika (root). U najnovijim verzijama moći ćete da se povežete samo na screen sesije svojeg korisnika. Međutim, mogli biste pronaći zanimljive informacije unutar sesije.
Lista screen sesija
Priključite se sesiji
Ovo je bio problem sa starim verzijama tmux-a. Nisam mogao da preuzmem tmux (v2.1) sesiju koju je kreirao root kao korisnik bez privilegija.
List tmux sessions
Priključite se sesiji
Check Valentine box from HTB for an example.
Sve SSL i SSH ključevi generisani na Debian baziranim sistemima (Ubuntu, Kubuntu, itd) između septembra 2006. i 13. maja 2008. mogu biti pogođeni ovim bugom. Ovaj bug se javlja prilikom kreiranja novog ssh ključa u tim OS, jer je bilo moguće samo 32,768 varijacija. To znači da se sve mogućnosti mogu izračunati i imajući ssh javni ključ možete tražiti odgovarajući privatni ključ. Možete pronaći izračunate mogućnosti ovde: https://github.com/g0tmi1k/debian-ssh
PasswordAuthentication: Određuje da li je autentifikacija lozinkom dozvoljena. Podrazumevano je no
.
PubkeyAuthentication: Određuje da li je autentifikacija javnim ključem dozvoljena. Podrazumevano je yes
.
PermitEmptyPasswords: Kada je autentifikacija lozinkom dozvoljena, određuje da li server dozvoljava prijavu na naloge sa praznim lozinkama. Podrazumevano je no
.
Određuje da li root može da se prijavi koristeći ssh, podrazumevano je no
. Moguće vrednosti:
yes
: root može da se prijavi koristeći lozinku i privatni ključ
without-password
ili prohibit-password
: root se može prijaviti samo sa privatnim ključem
forced-commands-only
: Root se može prijaviti samo koristeći privatni ključ i ako su opcije komandi specificirane
no
: ne
Određuje datoteke koje sadrže javne ključeve koji se mogu koristiti za autentifikaciju korisnika. Može sadržati tokene kao što su %h
, koji će biti zamenjeni sa home direktorijumom. Možete naznačiti apsolutne putanje (počinjući od /
) ili relativne putanje od korisnikovog home direktorijuma. Na primer:
Ta konfiguracija će ukazati da ako pokušate da se prijavite sa privatnim ključem korisnika "testusername", ssh će uporediti javni ključ vašeg ključa sa onima koji se nalaze u /home/testusername/.ssh/authorized_keys
i /home/testusername/access
SSH agent forwarding vam omogućava da koristite svoje lokalne SSH ključeve umesto da ostavljate ključeve (bez lozinki!) na vašem serveru. Tako ćete moći da skočite putem ssh na host i odatle skočite na drugi host koristeći ključ koji se nalazi na vašem početnom hostu.
Morate postaviti ovu opciju u $HOME/.ssh.config
ovako:
Napomena da ako je Host
*
, svaki put kada korisnik pređe na drugu mašinu, ta mašina će moći da pristupi ključevima (što je bezbednosni problem).
Datoteka /etc/ssh_config
može prepisati ove opcije i dozvoliti ili zabraniti ovu konfiguraciju.
Datoteka /etc/sshd_config
može dozvoliti ili zabraniti prosleđivanje ssh-agenta sa ključnom rečju AllowAgentForwarding
(podrazumevano je dozvoljeno).
Ako otkrijete da je Forward Agent konfigurisan u okruženju, pročitajte sledeću stranicu jer možda možete da ga zloupotrebite za eskalaciju privilegija:
SSH Forward Agent exploitationDatoteka /etc/profile
i datoteke pod /etc/profile.d/
su skripte koje se izvršavaju kada korisnik pokrene novu ljusku. Stoga, ako možete da pišete ili modifikujete bilo koju od njih, možete eskalirati privilegije.
Ako se pronađe bilo koji čudan profil skript, trebali biste ga proveriti na osetljive detalje.
U zavisnosti od operativnog sistema, fajlovi /etc/passwd
i /etc/shadow
mogu imati drugačije ime ili može postojati backup. Stoga se preporučuje da pronađete sve njih i proverite da li možete da ih pročitate da biste videli da li postoje heševi unutar fajlova:
U nekim slučajevima možete pronaći hash-ove lozinki unutar datoteke /etc/passwd
(ili ekvivalentne).
Prvo, generišite lozinku sa jednom od sledećih komandi.
Zatim dodajte korisnika hacker
i dodajte generisanu lozinku.
E.g: hacker:$1$hacker$TzyKlv0/R/c28R.GAeLw.1:0:0:Hacker:/root:/bin/bash
Sada možete koristiti komandu su
sa hacker:hacker
Alternativno, možete koristiti sledeće linije da dodate lažnog korisnika bez lozinke. UPWARNING: mogli biste pogoršati trenutnu sigurnost mašine.
NOTE: Na BSD platformama /etc/passwd
se nalazi na /etc/pwd.db
i /etc/master.passwd
, takođe je /etc/shadow
preimenovan u /etc/spwd.db
.
Trebalo bi da proverite da li možete da pišete u neke osetljive fajlove. Na primer, da li možete da pišete u neki fajl za konfiguraciju servisa?
Na primer, ako mašina pokreće tomcat server i možete modifikovati Tomcat konfiguracioni fajl usluge unutar /etc/systemd/, tada možete modifikovati linije:
Vaša backdoor će biti izvršena sledeći put kada se tomcat pokrene.
Sledeći folderi mogu sadržati backup-e ili zanimljive informacije: /tmp, /var/tmp, /var/backups, /var/mail, /var/spool/mail, /etc/exports, /root (Verovatno nećete moći da pročitate poslednji, ali pokušajte)
Прочитајте код linPEAS, он трага за неколико могућих фајлова који би могли садржати лозинке. Још један интересантан алат који можете користити за то је: LaZagne који је апликација отвореног кода коришћена за преузимање великог броја лозинки сачуваних на локалном рачунару за Windows, Linux и Mac.
Ако можете читати логове, можда ћете моћи да пронађете интересантне/поверљиве информације унутар њих. Што је лог чуднији, то ће бити интересантнији (вероватно). Такође, неки "лоше" конфигурисани (позадински?) аудит логови могу вам омогућити да записујете лозинке унутар аудит логова као што је објашњено у овом посту: https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/.
Da biste čitali logove, grupa adm će biti veoma korisna.
Trebalo bi da proverite datoteke koje sadrže reč "password" u svom imenu ili unutar sadržaja, kao i da proverite IP adrese i emailove unutar logova, ili regexove za hashove. Neću ovde nabrajati kako da uradite sve ovo, ali ako ste zainteresovani, možete proveriti poslednje provere koje linpeas vrši.
Ako znate odakle će se izvršiti python skripta i ako možete pisati unutar te fascikle ili možete modifikovati python biblioteke, možete modifikovati OS biblioteku i dodati backdoor (ako možete pisati gde će se izvršiti python skripta, kopirajte i nalepite os.py biblioteku).
Da dodate backdoor u biblioteku, samo dodajte na kraj os.py biblioteke sledeću liniju (promenite IP i PORT):
Ranljivost u logrotate
omogućava korisnicima sa pravima pisanja na log fajl ili njegove roditeljske direktorijume da potencijalno dobiju povišene privilegije. To je zato što logrotate
, koji često radi kao root, može biti manipulisan da izvršava proizvoljne fajlove, posebno u direktorijumima kao što je /etc/bash_completion.d/. Važno je proveriti dozvole ne samo u /var/log već i u bilo kom direktorijumu gde se primenjuje rotacija logova.
Ova ranljivost utiče na logrotate
verziju 3.18.0
i starije
Detaljnije informacije o ranjivosti mogu se naći na ovoj stranici: https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition.
Možete iskoristiti ovu ranljivost sa logrotten.
Ova ranljivost je veoma slična CVE-2016-1247 (nginx logovi), tako da kada god otkrijete da možete menjati logove, proverite ko upravlja tim logovima i proverite da li možete povećati privilegije zamenjujući logove simboličkim linkovima.
Referenca na ranljivost: https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f
Ako, iz bilo kog razloga, korisnik može da piše ifcf-<bilo šta>
skriptu u /etc/sysconfig/network-scripts ili može da prilagodi postojeću, onda je vaš sistem pwned.
Mrežne skripte, ifcg-eth0 na primer, koriste se za mrežne konekcije. Izgledaju tačno kao .INI fajlovi. Međutim, one su ~sourced~ na Linuxu od strane Network Manager-a (dispatcher.d).
U mom slučaju, NAME=
atribut u ovim mrežnim skriptama nije pravilno obrađen. Ako imate prazan prostor u imenu, sistem pokušava da izvrši deo nakon praznog prostora. To znači da se sve nakon prvog praznog prostora izvršava kao root.
Na primer: /etc/sysconfig/network-scripts/ifcfg-1337
Direktorijum /etc/init.d
je dom skripti za System V init (SysVinit), klasični sistem upravljanja servisima na Linuxu. Uključuje skripte za start
, stop
, restart
, i ponekad reload
servise. Ove se mogu izvršiti direktno ili putem simboličkih linkova koji se nalaze u /etc/rc?.d/
. Alternativni put u Redhat sistemima je /etc/rc.d/init.d
.
S druge strane, /etc/init
je povezan sa Upstart, novijim sistemom upravljanja servisima koji je uveo Ubuntu, koristeći konfiguracione datoteke za zadatke upravljanja servisima. I pored prelaska na Upstart, SysVinit skripte se i dalje koriste zajedno sa Upstart konfiguracijama zbog sloja kompatibilnosti u Upstart-u.
systemd se pojavljuje kao moderan menadžer inicijalizacije i servisa, nudeći napredne funkcije kao što su pokretanje demona na zahtev, upravljanje automount-om i snimke stanja sistema. Organizuje datoteke u /usr/lib/systemd/
za distribucione pakete i /etc/systemd/system/
za izmene administratora, pojednostavljujući proces administracije sistema.
LinEnum: https://github.com/rebootuser/LinEnum(-t opcija) 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: Enumerate kernel vulns ins linux and MAC https://github.com/spencerdodd/kernelpop Mestaploit: multi/recon/local_exploit_suggester Linux Exploit Suggester: https://github.com/mzet-/linux-exploit-suggester EvilAbigail (fizički pristup): https://github.com/GDSSecurity/EvilAbigail Kolekcija više skripti: https://github.com/1N3/PrivEsc
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)