Translated ['src/linux-hardening/privilege-escalation/nfs-no_root_squash

This commit is contained in:
Translator 2025-02-05 09:39:31 +00:00
parent 1ae4867c7b
commit 91fbef409c
2 changed files with 26 additions and 26 deletions

View File

@ -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 <SHAREDD_FOLDER>
./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 <SHAREDD_FOLDER>
> [!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

View File

@ -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 Автоматичні команди
```