diff --git a/src/linux-hardening/privilege-escalation/nfs-no_root_squash-misconfiguration-pe.md b/src/linux-hardening/privilege-escalation/nfs-no_root_squash-misconfiguration-pe.md index 047c36c09..1f98456d6 100644 --- a/src/linux-hardening/privilege-escalation/nfs-no_root_squash-misconfiguration-pe.md +++ b/src/linux-hardening/privilege-escalation/nfs-no_root_squash-misconfiguration-pe.md @@ -5,15 +5,15 @@ NFS зазвичай (особливо в linux) довіряє вказаним `uid` та `gid`, які надає клієнт, що підключається для доступу до файлів (якщо не використовується kerberos). Однак є деякі конфігурації, які можна налаштувати на сервері, щоб **змінити цю поведінку**: - **`all_squash`**: Він зменшує всі доступи, відображаючи кожного користувача та групу на **`nobody`** (65534 беззнаковий / -2 знаковий). Таким чином, всі є `nobody`, і жоден користувач не використовується. -- **`root_squash`/`no_all_squash`**: Це за замовчуванням в Linux і **лише зменшує доступ з uid 0 (root)**. Таким чином, будь-який `UID` та `GID` довіряються, але `0` зменшується до `nobody` (тому жодна імперсонація root не можлива). +- **`root_squash`/`no_all_squash`**: Це за замовчуванням в Linux і **зменшує доступ лише з uid 0 (root)**. Таким чином, будь-який `UID` та `GID` довіряються, але `0` зменшується до `nobody` (тому жодна імперсонація root не можлива). - **``no_root_squash`**: Ця конфігурація, якщо увімкнена, навіть не зменшує користувача root. Це означає, що якщо ви змонтуєте каталог з цією конфігурацією, ви зможете отримати до нього доступ як root. -У файлі **/etc/exports**, якщо ви знайдете якийсь каталог, який налаштований як **no_root_squash**, тоді ви можете **доступитися** до нього **як клієнт** і **записувати всередині** цього каталогу **так, ніби** ви були локальним **root** машини. +У файлі **/etc/exports**, якщо ви знайдете якийсь каталог, налаштований як **no_root_squash**, тоді ви можете **доступитися** до нього **як клієнт** і **записувати всередині** цього каталогу **так, ніби** ви були локальним **root** машини. Для отримання додаткової інформації про **NFS** перевірте: {{#ref}} -/network-services-pentesting/nfs-service-pentesting.md +../../network-services-pentesting/nfs-service-pentesting.md {{#endref}} # Privilege Escalation @@ -21,7 +21,7 @@ NFS зазвичай (особливо в linux) довіряє вказаним ## Remote Exploit Опція 1, використовуючи bash: -- **Монтування цього каталогу** на клієнтській машині, і **як root копіювання** всередину змонтованої папки бінарного файлу **/bin/bash** та надання йому **SUID** прав, і **виконання з жертви** цього бінарного файлу bash. +- **Монтування цього каталогу** на клієнтській машині та **як root копіювання** всередину змонтованої папки бінарного файлу **/bin/bash** та надання йому **SUID** прав, а також **виконання з жертви** машини цього бінарного файлу bash. - Зверніть увагу, що для того, щоб бути root всередині NFS спільного доступу, **`no_root_squash`** має бути налаштовано на сервері. - Однак, якщо не увімкнено, ви можете підвищити привілеї до іншого користувача, скопіювавши бінарний файл до NFS спільного доступу та надавши йому дозвіл SUID як користувачу, до якого ви хочете підвищити привілеї. ```bash @@ -37,8 +37,8 @@ cd ./bash -p #ROOT shell ``` Опція 2 з використанням скомпільованого коду на C: -- **Монтування цього каталогу** на клієнтській машині, і **як root копіювання** всередину змонтованої папки нашого скомпільованого вантажу, який зловживає правами SUID, надання йому **прав SUID**, і **виконання з жертви** машини цього бінарного файлу (ви можете знайти тут деякі [C SUID вантажі](payloads-to-execute.md#c)). -- Ті ж обмеження, що й раніше +- **Монтування цього каталогу** на клієнтській машині, і **як root копіювання** всередину змонтованої папки нашого скомпільованого корисного навантаження, яке зловживає правами SUID, надання йому **прав SUID**, і **виконання з жертви** машини цього бінарного файлу (ви можете знайти тут деякі [C SUID payloads](payloads-to-execute.md#c)). +- Ті ж обмеження, що й раніше. ```bash #Attacker, as root user gcc payload.c -o payload @@ -57,12 +57,12 @@ cd > [!NOTE] > Зверніть увагу, що якщо ви можете створити **тунель з вашої машини до машини жертви, ви все ще можете використовувати віддалену версію для експлуатації цього підвищення привілеїв, тунелюючи необхідні порти**.\ > Наступний трюк стосується випадку, коли файл `/etc/exports` **вказує на IP**. У цьому випадку ви **не зможете використовувати** в жодному випадку **віддалену експлуатацію** і вам потрібно буде **зловживати цим трюком**.\ -> Інша необхідна умова для роботи експлуатації полягає в тому, що **експорт всередині `/etc/export`** **повинен використовувати прапор `insecure`**.\ +> Ще однією необхідною умовою для роботи експлуатації є те, що **експорт всередині `/etc/export`** **повинен використовувати прапор `insecure`**.\ > --_Я не впевнений, що якщо `/etc/export` вказує на IP-адресу, цей трюк спрацює_-- ## Basic Information -Сценарій передбачає експлуатацію змонтованого NFS-спільного ресурсу на локальній машині, використовуючи недолік у специфікації NFSv3, який дозволяє клієнту вказувати свій uid/gid, що потенційно дозволяє несанкціонований доступ. Експлуатація передбачає використання [libnfs](https://github.com/sahlberg/libnfs), бібліотеки, яка дозволяє підробляти виклики NFS RPC. +Сценарій передбачає експлуатацію змонтованого NFS-спільного ресурсу на локальній машині, використовуючи недолік у специфікації NFSv3, який дозволяє клієнту вказувати свій uid/gid, що потенційно дозволяє несанкціонований доступ. Експлуатація передбачає використання [libnfs](https://github.com/sahlberg/libnfs), бібліотеки, яка дозволяє підробляти NFS RPC виклики. ### Compiling the Library @@ -95,7 +95,7 @@ LD_NFS_UID=0 LD_LIBRARY_PATH=./lib/.libs/ LD_PRELOAD=./ld_nfs.so chmod u+s nfs:/ /mnt/share/a.out #root ``` -## Bonus: NFShell для прихованого доступу до файлів +## Бонус: NFShell для прихованого доступу до файлів Once root access is obtained, to interact with the NFS share without changing ownership (to avoid leaving traces), a Python script (nfsh.py) is used. This script adjusts the uid to match that of the file being accessed, allowing for interaction with files on the share without permission issues: ```python diff --git a/src/network-services-pentesting/nfs-service-pentesting.md b/src/network-services-pentesting/nfs-service-pentesting.md index 8232f3e38..0bd3a5fe5 100644 --- a/src/network-services-pentesting/nfs-service-pentesting.md +++ b/src/network-services-pentesting/nfs-service-pentesting.md @@ -12,7 +12,7 @@ ``` ### Аутентифікація -Помітним аспектом цього протоколу є його звичайна відсутність вбудованих **механізмів аутентифікації** або **авторизації**. Натомість авторизація покладається на **інформацію файлової системи**, при цьому сервер відповідає за точний переклад **інформації про користувача, наданої клієнтом**, у необхідний для файлової системи **формат авторизації**, переважно слідуючи **синтаксису UNIX**. +Помітним аспектом цього протоколу є його звичайна відсутність вбудованих **механізмів аутентифікації** або **авторизації**. Натомість авторизація покладається на **інформацію файлової системи**, при цьому серверу доручено точно перетворювати **інформацію про користувача, надану клієнтом**, у необхідний **формат авторизації** файлової системи, переважно дотримуючись **синтаксису UNIX**. Аутентифікація зазвичай покладається на **ідентифікатори `UID`/`GID` UNIX та членство в групах**. Однак виникає проблема через потенційне невідповідність у **відображеннях `UID`/`GID`** між клієнтами та серверами, що не залишає місця для додаткової перевірки з боку сервера. Більше того, ці дані надсилаються клієнтом і довіряються сервером, тому зловмисний клієнт може потенційно **вдаватися до іншого користувача, надсилаючи більш привілейовані `uid` та `gid`**. @@ -29,14 +29,14 @@ ### Версії -- **NFSv2**: Цю версію визнано за її широку сумісність з різними системами, що підкреслює її значення з початковими операціями, переважно через UDP. Будучи **найстарішою** у серії, вона заклала основу для майбутніх розробок. +- **NFSv2**: Цю версію визнано за її широку сумісність з різними системами, що підкреслює її значущість з початковими операціями, переважно через UDP. Будучи **найстарішою** у серії, вона заклала основу для майбутніх розробок. - **NFSv3**: Введена з рядом покращень, NFSv3 розширила можливості свого попередника, підтримуючи змінні розміри файлів і пропонуючи покращені механізми звітності про помилки. Незважаючи на свої досягнення, вона стикалася з обмеженнями в повній зворотній сумісності з клієнтами NFSv2. -- **NFSv4**: Важлива версія в серії NFS, NFSv4 представила набір функцій, призначених для модернізації обміну файлами через мережі. Помітні покращення включають інтеграцію Kerberos для **високої безпеки**, можливість проходження через брандмауери та роботи через Інтернет без необхідності в портмапперах, підтримку списків контролю доступу (ACL) та впровадження операцій на основі стану. Її покращення продуктивності та впровадження станового протоколу відрізняють NFSv4 як важливий крок вперед у технологіях обміну файлами в мережі. +- **NFSv4**: Важлива версія в серії NFS, NFSv4 представила набір функцій, розроблених для модернізації обміну файлами через мережі. Помітні покращення включають інтеграцію Kerberos для **високої безпеки**, можливість проходження через брандмауери та роботи через Інтернет без необхідності в портмапперах, підтримку списків контролю доступу (ACL) та впровадження операцій на основі стану. Її покращення продуктивності та впровадження станового протоколу відрізняють NFSv4 як важливий крок вперед у технологіях обміну файлами в мережі. - Зверніть увагу, що дуже дивно знайти хост Linux NFS, що підтримує аутентифікацію kerberos. -Кожна версія NFS була розроблена з метою задовольнити еволюціонуючі потреби мережевих середовищ, поступово покращуючи безпеку, сумісність і продуктивність. +Кожна версія NFS була розроблена з наміром задовольнити еволюційні потреби мережевих середовищ, поступово покращуючи безпеку, сумісність і продуктивність. ### Стискання @@ -75,7 +75,7 @@ scanner/nfs/nfsmount #Scan NFS mounts and list permissions ``` ### nfs_analyze -Цей інструмент з [https://github.com/hvs-consulting/nfs-security-tooling](https://github.com/hvs-consulting/nfs-security-tooling) може бути використаний для отримання великої кількості даних з NFS сервера, таких як **монтажі**, підтримувані версії NFS, підключені IP-адреси, і навіть чи можливо **вийти з експорту** в інші папки в FS або **чи увімкнено `no_root_squash`**. +Цей інструмент з [https://github.com/hvs-consulting/nfs-security-tooling](https://github.com/hvs-consulting/nfs-security-tooling) може бути використаний для отримання великої кількості даних з NFS сервера, таких як **монтажі**, підтримувані версії NFS, підключені IP-адреси, і навіть чи можливо **вийти з експорту** в інші папки у файловій системі або **чи увімкнено `no_root_squash`**. ## Mounting @@ -98,9 +98,9 @@ mount -t nfs [-o vers=2] 10.12.0.150:/backup /mnt/new_back -o nolock ### Довіра до UID та GID -Звичайно, єдина проблема полягає в тому, що за замовчуванням неможливо видавати себе за root (`UID` 0). Однак можливо видавати себе за будь-якого іншого користувача або, якщо увімкнено `no_root_squash`, ви також можете видавати себе за root. +Звісно, єдина проблема полягає в тому, що за замовчуванням неможливо видавати себе за root (`UID` 0). Однак, можливо видавати себе за будь-якого іншого користувача або, якщо увімкнено `no_root_squash`, ви також можете видавати себе за root. -- Якщо ви монтуєте папку, яка містить **файли або папки, доступні лише деякому користувачу** (за **UID**). Ви можете **створити** **локально** користувача з цим **UID** і, використовуючи цього **користувача**, ви зможете **отримати доступ** до файлу/папки. +- Якщо ви монтуєте папку, яка містить **файли або папки, доступні лише деяким користувачам** (за **UID**). Ви можете **створити** **локально** користувача з цим **UID** і, використовуючи цього **користувача**, ви зможете **отримати доступ** до файлу/папки. - Інструмент **`fuse_nfs`** з [https://github.com/hvs-consulting/nfs-security-tooling](https://github.com/hvs-consulting/nfs-security-tooling) завжди надсилатиме необхідні UID та GID для доступу до файлів. ### Підвищення привілеїв SUID @@ -108,16 +108,16 @@ mount -t nfs [-o vers=2] 10.12.0.150:/backup /mnt/new_back -o nolock Перевірте сторінку: {{#ref}} -/linux-hardening/privilege-escalation/nfs-no_root_squash-misconfiguration-pe.md +../linux-hardening/privilege-escalation/nfs-no_root_squash-misconfiguration-pe.md {{#endref}} -### Вихід з експорту +### Втеча з експорту -У цій [чудовій статті](https://www.hvs-consulting.de/en/nfs-security-identifying-and-exploiting-misconfigurations/) можна побачити, що можливо **вийти з експорту, щоб отримати доступ до інших папок у файловій системі**. +У цій [чудовій статті](https://www.hvs-consulting.de/en/nfs-security-identifying-and-exploiting-misconfigurations/) можна побачити, що можливо **втекти з експорту, щоб отримати доступ до інших папок у файловій системі**. Отже, якщо експорт експортує папку, яка є **підпапкою** **всіх файлових систем**, можливо отримати доступ до файлів поза експортом, якщо **`subtree_check`** вимкнено. І за замовчуванням це **вимкнено в Linux**. -Наприклад, якщо NFS-сервер експортує `/srv/`, а `/var/` знаходиться в тій же файловій системі, можливо читати журнали з `/var/log/` або зберігати веб-оболонку в `/var/www/`. +Наприклад, якщо NFS сервер експортує `/srv/`, а `/var/` знаходиться в тій же файловій системі, можливо читати журнали з `/var/log/` або зберігати веб-шелл у `/var/www/`. Більше того, зверніть увагу, що за замовчуванням лише користувач root (0) захищений від видавання себе (перевірте розділ Squash). Однак, якщо файл **належить root, але група не 0, до нього можна отримати доступ**. Наприклад, файл `/etc/shadow` належить root, але група `shadow` (gid 42 на Debian). Отже, до нього можна отримати доступ за замовчуванням! @@ -125,9 +125,9 @@ mount -t nfs [-o vers=2] 10.12.0.150:/backup /mnt/new_back -o nolock ### NSFShell -Щоб легко перерахувати, змонтувати та змінити UID і GID для отримання доступу до файлів, ви можете використовувати [nfsshell](https://github.com/NetDirect/nfsshell). +Щоб легко перерахувати, монтувати та змінювати UID і GID для доступу до файлів, ви можете використовувати [nfsshell](https://github.com/NetDirect/nfsshell). -[Чудовий туторіал по NFSShell.](https://www.pentestpartners.com/security-blog/using-nfsshell-to-compromise-older-environments/) +[Гарний туторіал по NFSShell.](https://www.pentestpartners.com/security-blog/using-nfsshell-to-compromise-older-environments/) ## Конфігураційні файли ``` @@ -136,19 +136,19 @@ mount -t nfs [-o vers=2] 10.12.0.150:/backup /mnt/new_back -o nolock ``` ## Небезпечні налаштування -- **Дозволи на читання та запис (`rw`):** Це налаштування дозволяє як читання, так і запис у файлову систему. Важливо враховувати наслідки надання такого широкого доступу. +- **Читання та запис прав (`rw`):** Це налаштування дозволяє як читати з, так і записувати в файлову систему. Важливо враховувати наслідки надання такого широкого доступу. - **Використання небезпечних портів (`insecure`):** Коли це увімкнено, система може використовувати порти вище 1024. Безпека портів вище цього діапазону може бути менш суворою, що збільшує ризик. - **Видимість вкладених файлових систем (`nohide`):** Це налаштування робить каталоги видимими, навіть якщо інша файлова система змонтована нижче експортованого каталогу. Кожен каталог потребує власного запису експорту для належного управління. -- **Власність файлів root (`no_root_squash`):** З цим налаштуванням файли, створені користувачем root, зберігають свій оригінальний UID/GID 0, ігноруючи принцип найменших привілеїв і потенційно надаючи надмірні дозволи. +- **Власність файлів root (`no_root_squash`):** З цим налаштуванням файли, створені користувачем root, зберігають свій оригінальний UID/GID 0, ігноруючи принцип найменших привілеїв і потенційно надаючи надмірні права. -- **Не стиснення всіх користувачів (`no_all_squash`):** Ця опція забезпечує збереження ідентичностей користувачів по всій системі, що може призвести до проблем з дозволами та контролем доступу, якщо не буде правильно оброблено. +- **Несквашування всіх користувачів (`no_all_squash`):** Ця опція забезпечує збереження ідентичностей користувачів по всій системі, що може призвести до проблем з правами доступу та контролем, якщо не буде належним чином оброблено. ## Підвищення привілеїв за допомогою неправильних налаштувань NFS -[NFS no_root_squash and no_all_squash privilege escalation](../linux-hardening/privilege-escalation/nfs-no_root_squash-misconfiguration-pe.md) +[NFS no_root_squash та no_all_squash підвищення привілеїв](../linux-hardening/privilege-escalation/nfs-no_root_squash-misconfiguration-pe.md) ## HackTricks Автоматичні команди ```