macOS FS Tricks
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
POSIX permissions combinations
Permissions in a directory:
read - ви можете перерахувати записи каталогу
write - ви можете видаляти/записувати файли в каталозі і ви можете видаляти порожні папки.
Але ви не можете видаляти/змінювати непорожні папки, якщо у вас немає прав на запис.
Ви не можете змінювати назву папки, якщо ви не є її власником.
execute - вам дозволено проходити через каталог - якщо у вас немає цього права, ви не можете отримати доступ до жодних файлів всередині, або в будь-яких підкаталогах.
Dangerous Combinations
Як перезаписати файл/папку, що належить root, але:
Один батьківський власник каталогу в шляху є користувачем
Один батьківський власник каталогу в шляху є групою користувачів з доступом на запис
Група користувачів має доступ на запис до файлу
З будь-якою з попередніх комбінацій, зловмисник може впровадити символічне/жорстке посилання на очікуваний шлях, щоб отримати привілейований довільний запис.
Folder root R+X Special case
Якщо в каталозі є файли, до яких тільки root має доступ R+X, ці файли не доступні нікому іншому. Тому вразливість, що дозволяє перемістити файл, доступний користувачу, який не може бути прочитаний через це обмеження, з цієї папки в іншу, може бути використана для читання цих файлів.
Symbolic Link / Hard Link
Якщо привілейований процес записує дані у файл, який може бути контрольований менш привілейованим користувачем, або який може бути раніше створений менш привілейованим користувачем. Користувач може просто вказати на інший файл через символічне або жорстке посилання, і привілейований процес запише в цей файл.
Перевірте в інших розділах, де зловмисник може зловживати довільним записом для ескалації привілеїв.
.fileloc
Файли з розширенням .fileloc
можуть вказувати на інші програми або двійкові файли, тому коли вони відкриваються, програма/двійковий файл буде виконаний.
Приклад:
Arbitrary FD
Якщо ви можете змусити процес відкрити файл або папку з високими привілеями, ви можете зловживати crontab
, щоб відкрити файл у /etc/sudoers.d
з EDITOR=exploit.py
, так що exploit.py
отримає FD до файлу всередині /etc/sudoers
і зловживає ним.
Наприклад: https://youtu.be/f1HA5QhLQ7Y?t=21098
Avoid quarantine xattrs tricks
Remove it
uchg / uchange / uimmutable flag
Якщо файл/папка має цей атрибут незмінності, не буде можливим встановити xattr на нього.
defvfs mount
devfs монтування не підтримує xattr, більше інформації в CVE-2023-32364
writeextattr ACL
Цей ACL запобігає додаванню xattrs
до файлу
com.apple.acl.text xattr + AppleDouble
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, створений навіть поверх деяких існуючих папок. Ось як ви можете створити користувацький dmg пакет з користувацьким вмістом:
Зазвичай macOS монтує диск, спілкуючись з Mach-сервісом com.apple.DiskArbitrarion.diskarbitrariond
(який надається /usr/libexec/diskarbitrationd
). Якщо додати параметр -d
до plist-файлу LaunchDaemons і перезапустити, він зберігатиме журнали в /var/log/diskarbitrationd.log
.
Однак можливо використовувати інструменти, такі як hdik
і hdiutil
, для прямого спілкування з kext com.apple.driver.DiskImages
.
Произвольні записи
Періодичні sh скрипти
Якщо ваш скрипт може бути інтерпретований як shell script, ви можете перезаписати /etc/periodic/daily/999.local
shell-скрипт, який буде запускатися щодня.
Ви можете підробити виконання цього скрипта за допомогою: sudo periodic daily
Демони
Напишіть довільний LaunchDaemon на кшталт /Library/LaunchDaemons/xyz.hacktricks.privesc.plist
з plist, що виконує довільний скрипт, наприклад:
Просто створіть скрипт /Applications/Scripts/privesc.sh
з командами, які ви хочете виконати як root.
Файл Sudoers
Якщо у вас є довільний запис, ви можете створити файл у папці /etc/sudoers.d/
, надаючи собі sudo привілеї.
Файли PATH
Файл /etc/paths
є одним з основних місць, які заповнюють змінну середовища PATH. Ви повинні бути root, щоб перезаписати його, але якщо скрипт з привілейованого процесу виконує якусь команду без повного шляху, ви можете перехопити її, змінивши цей файл.
Ви також можете записувати файли в /etc/paths.d
, щоб завантажити нові папки в змінну середовища PATH
.
Генерація записуваних файлів як інші користувачі
Це створить файл, який належить root і є записуваним для мене (код звідси). Це також може працювати як privesc:
POSIX Shared Memory
POSIX спільна пам'ять дозволяє процесам в операційних системах, що відповідають стандарту POSIX, отримувати доступ до спільної області пам'яті, що сприяє швидшій комунікації в порівнянні з іншими методами міжпроцесної комунікації. Це передбачає створення або відкриття об'єкта спільної пам'яті за допомогою shm_open()
, встановлення його розміру за допомогою ftruncate()
, і відображення його в адресному просторі процесу за допомогою mmap()
. Процеси можуть безпосередньо читати з цієї області пам'яті та записувати в неї. Для управління одночасним доступом і запобігання пошкодженню даних часто використовуються механізми синхронізації, такі як м'ютекси або семафори. Нарешті, процеси знімають відображення та закривають спільну пам'ять за допомогою munmap()
та close()
, а за бажанням видаляють об'єкт пам'яті за допомогою shm_unlink()
. Ця система особливо ефективна для швидкої, ефективної IPC в середовищах, де кілька процесів повинні швидко отримувати доступ до спільних даних.
macOS Захищені дескриптори
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)
Last updated