macOS FS Tricks
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Permissions in a directory:
read - ви можете перерахувати записи каталогу
write - ви можете видаляти/записувати файли в каталозі і ви можете видаляти порожні папки.
Але ви не можете видаляти/змінювати непорожні папки, якщо у вас немає прав на запис.
Ви не можете змінювати назву папки, якщо ви не є її власником.
execute - вам дозволено проходити через каталог - якщо у вас немає цього права, ви не можете отримати доступ до жодних файлів всередині, або в будь-яких підкаталогах.
Як перезаписати файл/папку, що належить root, але:
Один батьківський власник каталогу в шляху є користувачем
Один батьківський власник каталогу в шляху є групою користувачів з доступом на запис
Група користувачів має доступ на запис до файлу
З будь-якою з попередніх комбінацій, зловмисник може впровадити символічне/жорстке посилання на очікуваний шлях, щоб отримати привілейований довільний запис.
Якщо в каталозі є файли, до яких тільки root має доступ R+X, ці файли не доступні нікому іншому. Тому вразливість, що дозволяє перемістити файл, доступний користувачу, який не може бути прочитаний через це обмеження, з цієї папки в іншу, може бути використана для читання цих файлів.
Якщо привілейований процес записує дані у файл, який може бути контрольований менш привілейованим користувачем, або який може бути раніше створений менш привілейованим користувачем. Користувач може просто вказати на інший файл через символічне або жорстке посилання, і привілейований процес запише в цей файл.
Перевірте в інших розділах, де зловмисник може зловживати довільним записом для ескалації привілеїв.
Файли з розширенням .fileloc
можуть вказувати на інші програми або двійкові файли, тому коли вони відкриваються, програма/двійковий файл буде виконаний.
Приклад:
Якщо ви можете змусити процес відкрити файл або папку з високими привілеями, ви можете зловживати crontab
, щоб відкрити файл у /etc/sudoers.d
з EDITOR=exploit.py
, так що exploit.py
отримає FD до файлу всередині /etc/sudoers
і зловживає ним.
Наприклад: https://youtu.be/f1HA5QhLQ7Y?t=21098
Якщо файл/папка має цей атрибут незмінності, не буде можливим встановити xattr на нього.
devfs монтування не підтримує xattr, більше інформації в CVE-2023-32364
Цей ACL запобігає додаванню xattrs
до файлу
AppleDouble формат файлу копіює файл разом з його ACE.
У джерельному коді можна побачити, що текстове представлення ACL, яке зберігається всередині xattr під назвою com.apple.acl.text
, буде встановлено як ACL у розпакованому файлі. Тож, якщо ви стиснули додаток у zip-файл з форматом файлу AppleDouble з ACL, який заважає запису інших xattrs у нього... xattr карантину не було встановлено в додатку:
Перевірте оригінальний звіт для отримання додаткової інформації.
Щоб це відтворити, спочатку потрібно отримати правильний рядок acl:
(Зверніть увагу, що навіть якщо це працює, пісочниця записує атрибут карантину xattr перед цим)
Не зовсім необхідно, але я залишаю це на випадок:
macOS xattr-acls extra stuffПакунки містять файл _CodeSignature/CodeResources
, який містить хеш кожного окремого файлу в пакунку. Зверніть увагу, що хеш CodeResources також вбудований в виконуваний файл, тому ми не можемо з цим нічого зробити.
Однак є деякі файли, підпис яких не буде перевірятися, у них є ключ omit у plist, такі як:
Можливо обчислити підпис ресурсу з командного рядка за допомогою:
Користувач може змонтувати користувацький dmg, створений навіть поверх деяких існуючих папок. Ось як ви можете створити користувацький dmg пакет з користувацьким вмістом:
Зазвичай macOS монтує диск, спілкуючись з Mach-сервісом com.apple.DiskArbitrarion.diskarbitrariond
(який надається /usr/libexec/diskarbitrationd
). Якщо додати параметр -d
до plist-файлу LaunchDaemons і перезапустити, він зберігатиме журнали в /var/log/diskarbitrationd.log
.
Однак можливо використовувати інструменти, такі як hdik
і hdiutil
, для прямого спілкування з kext com.apple.driver.DiskImages
.
Якщо ваш скрипт може бути інтерпретований як shell script, ви можете перезаписати /etc/periodic/daily/999.local
shell-скрипт, який буде запускатися щодня.
Ви можете підробити виконання цього скрипта за допомогою: sudo periodic daily
Напишіть довільний LaunchDaemon на кшталт /Library/LaunchDaemons/xyz.hacktricks.privesc.plist
з plist, що виконує довільний скрипт, наприклад:
Просто створіть скрипт /Applications/Scripts/privesc.sh
з командами, які ви хочете виконати як root.
Якщо у вас є довільний запис, ви можете створити файл у папці /etc/sudoers.d/
, надаючи собі sudo привілеї.
Файл /etc/paths
є одним з основних місць, які заповнюють змінну середовища PATH. Ви повинні бути root, щоб перезаписати його, але якщо скрипт з привілейованого процесу виконує якусь команду без повного шляху, ви можете перехопити її, змінивши цей файл.
Ви також можете записувати файли в /etc/paths.d
, щоб завантажити нові папки в змінну середовища PATH
.
Це створить файл, який належить root і є записуваним для мене (код звідси). Це також може працювати як privesc:
POSIX спільна пам'ять дозволяє процесам в операційних системах, що відповідають стандарту POSIX, отримувати доступ до спільної області пам'яті, що сприяє швидшій комунікації в порівнянні з іншими методами міжпроцесної комунікації. Це передбачає створення або відкриття об'єкта спільної пам'яті за допомогою shm_open()
, встановлення його розміру за допомогою ftruncate()
, і відображення його в адресному просторі процесу за допомогою mmap()
. Процеси можуть безпосередньо читати з цієї області пам'яті та записувати в неї. Для управління одночасним доступом і запобігання пошкодженню даних часто використовуються механізми синхронізації, такі як м'ютекси або семафори. Нарешті, процеси знімають відображення та закривають спільну пам'ять за допомогою munmap()
та close()
, а за бажанням видаляють об'єкт пам'яті за допомогою shm_unlink()
. Ця система особливо ефективна для швидкої, ефективної IPC в середовищах, де кілька процесів повинні швидко отримувати доступ до спільних даних.
macOS захищені дескриптори - це функція безпеки, введена в macOS для підвищення безпеки та надійності операцій з дескрипторами файлів у користувацьких додатках. Ці захищені дескриптори забезпечують спосіб асоціювання специфічних обмежень або "захисників" з дескрипторами файлів, які забезпечуються ядром.
Ця функція особливо корисна для запобігання певним класам вразливостей безпеки, таким як несанкціонований доступ до файлів або умови гонки. Ці вразливості виникають, коли, наприклад, один потік отримує доступ до дескриптора файлу, надаючи іншому вразливому потоку доступ до нього або коли дескриптор файлу успадковується вразливим дочірнім процесом. Деякі функції, пов'язані з цією функціональністю, включають:
guarded_open_np
: Відкриває FD з захисником
guarded_close_np
: Закриває його
change_fdguard_np
: Змінює прапори захисника на дескрипторі (навіть видаляючи захист)
Вчіться та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вчіться та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)