macOS FS Tricks
Last updated
Last updated
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Toestemmings in 'n gids:
lees - jy kan die gids inskrywings opnoem
skryf - jy kan verwyder/skryf lêers in die gids en jy kan leë vouers verwyder.
Maar jy kan nie nie-leë vouers verwyder/wysig tensy jy skryftoestemmings daaroor het.
Jy kan nie die naam van 'n vouer wysig tensy jy dit besit nie.
voer uit - jy is toegelaat om die gids te deursoek - as jy nie hierdie reg het nie, kan jy nie enige lêers binne dit, of in enige subgidsen, toegang nie.
Hoe om 'n lêer/vouer wat deur root besit word te oorskryf, maar:
Een ouer gids eienaar in die pad is die gebruiker
Een ouer gids eienaar in die pad is 'n gebruikersgroep met skryftoegang
'n gebruikers groep het skryf toegang tot die lêer
Met enige van die vorige kombinasies, kan 'n aanvaller 'n sim/hard skakel in die verwagte pad inspuit om 'n bevoorregte arbitrêre skryf te verkry.
As daar lêers in 'n gids is waar slegs root R+X toegang het, is dit nie toeganklik vir enige iemand anders nie. So 'n kwesbaarheid wat toelaat om 'n lêer wat deur 'n gebruiker leesbaar is, wat nie gelees kan word weens daardie beperking, van hierdie gids na 'n ander een te beweeg, kan misbruik word om hierdie lêers te lees.
Voorbeeld in: https://theevilbit.github.io/posts/exploiting_directory_permissions_on_macos/#nix-directory-permissions
As 'n bevoorregte proses data in 'n lêer skryf wat beheer kan word deur 'n laer bevoorregte gebruiker, of wat voorheen geskep kan wees deur 'n laer bevoorregte gebruiker. Die gebruiker kan net na 'n ander lêer wys via 'n Simboliese of Hard skakel, en die bevoorregte proses sal op daardie lêer skryf.
Kyk in die ander afdelings waar 'n aanvaller 'n arbitrêre skryf kan misbruik om voorregte te verhoog.
Lêers met .fileloc
uitbreiding kan na ander toepassings of binêre lêers wys, so wanneer hulle geopen word, sal die toepassing/binêre die een wees wat uitgevoer word.
Voorbeeld:
As jy 'n proses kan laat 'n lêer of 'n gids met hoë voorregte oopmaak, kan jy crontab
misbruik om 'n lêer in /etc/sudoers.d
met EDITOR=exploit.py
oop te maak, sodat die exploit.py
die FD na die lêer binne /etc/sudoers
sal kry en dit kan misbruik.
Byvoorbeeld: https://youtu.be/f1HA5QhLQ7Y?t=21098
As 'n lêer/gids hierdie onveranderlike eienskap het, sal dit nie moontlik wees om 'n xattr daarop te plaas nie.
'n devfs monteer ondersteun nie xattr nie, meer inligting in CVE-2023-32364
Hierdie ACL verhoed dat xattrs
by die lêer gevoeg word
AppleDouble lêerformaat kopieer 'n lêer insluitend sy ACE's.
In die bronkode is dit moontlik om te sien dat die ACL teksverteenwoordiging wat binne die xattr genaamd com.apple.acl.text
gestoor word, as ACL in die gedecomprimeerde lêer gestel gaan word. So, as jy 'n toepassing in 'n zip-lêer met AppleDouble lêerformaat saamgepers het met 'n ACL wat voorkom dat ander xattrs daarin geskryf kan word... was die kwarantyn xattr nie in die toepassing gestel nie:
Kyk na die oorspronklike verslag vir meer inligting.
Om dit te repliseer, moet ons eers die korrekte acl string kry:
(Note dat selfs al werk dit, die sandbox skryf die kwarantyn xattr voor)
Nie regtig nodig nie, maar ek laat dit daar net ingeval:
macOS xattr-acls extra stuffBundles bevat die lêer _CodeSignature/CodeResources
wat die hash van elke enkele lêer in die bundle bevat. Let daarop dat die hash van CodeResources ook ingebed is in die uitvoerbare, so ons kan nie daarmee mors nie.
Daar is egter 'n paar lêers waarvan die handtekening nie nagegaan sal word nie, hierdie het die sleutel omit in die plist, soos:
Dit is moontlik om die handtekening van 'n hulpbron vanaf die cli te bereken met:
'n Gebruiker kan 'n pasgemaakte dmg monteer wat selfs bo-op sommige bestaande vouers geskep is. Dit is hoe jy 'n pasgemaakte dmg-pakket met pasgemaakte inhoud kan skep:
Gewoonlik monteer macOS skyf deur te kommunikeer met die com.apple.DiskArbitrarion.diskarbitrariond
Mach diens (verskaf deur /usr/libexec/diskarbitrationd
). As jy die param -d
by die LaunchDaemons plist-lêer voeg en herbegin, sal dit logs stoor in /var/log/diskarbitrationd.log
.
Dit is egter moontlik om gereedskap soos hdik
en hdiutil
te gebruik om direk met die com.apple.driver.DiskImages
kext te kommunikeer.
As jou skrip as 'n shell skrip geïnterpreteer kan word, kan jy die /etc/periodic/daily/999.local
shell skrip oorskryf wat elke dag geaktiveer sal word.
Jy kan 'n vals uitvoering van hierdie skrip maak met: sudo periodic daily
Skryf 'n willekeurige LaunchDaemon soos /Library/LaunchDaemons/xyz.hacktricks.privesc.plist
met 'n plist wat 'n willekeurige skrip uitvoer soos:
Just generate the script /Applications/Scripts/privesc.sh
with the commands you would like to run as root.
If you have arbitrary write, you could create a file inside the folder /etc/sudoers.d/
granting yourself sudo privileges.
The file /etc/paths
is one of the main places that populates the PATH env variable. You must be root to overwrite it, but if a script from privileged process is executing some command without the full path, you might be able to hijack it modifying this file.
You can also write files in /etc/paths.d
to load new folders into the PATH
env variable.
This will generate a file that belongs to root that is writable by me (code from here). This might also work as privesc:
POSIX gedeelde geheue laat prosesse in POSIX-konforme bedryfstelsels toe om toegang te verkry tot 'n gemeenskaplike geheuegebied, wat vinniger kommunikasie vergemaklik in vergelyking met ander inter-proses kommunikasie metodes. Dit behels die skep of oopmaak van 'n gedeelde geheue objek met shm_open()
, die instelling van sy grootte met ftruncate()
, en die kartering daarvan in die proses se adresruimte met mmap()
. Prosesse kan dan direk lees van en skryf na hierdie geheuegebied. Om gelyktydige toegang te bestuur en data-beskadiging te voorkom, word sinchronisasie meganismes soos mutexes of semafore dikwels gebruik. Laastens, prosesse onkarter en sluit die gedeelde geheue met munmap()
en close()
, en verwyder opsioneel die geheue objek met shm_unlink()
. Hierdie stelsel is veral effektief vir doeltreffende, vinnige IPC in omgewings waar verskeie prosesse vinnig toegang tot gedeelde data moet verkry.
macOS bewaakte beskrywings is 'n sekuriteitskenmerk wat in macOS bekendgestel is om die veiligheid en betroubaarheid van lêer beskrywing operasies in gebruikersaansoeke te verbeter. Hierdie bewaakte beskrywings bied 'n manier om spesifieke beperkings of "wagters" met lêer beskrywings te assosieer, wat deur die kern afgedwing word.
Hierdie kenmerk is veral nuttig om sekere klasse van sekuriteitskwesbaarhede soos ongemagtigde lêer toegang of wedloop toestande te voorkom. Hierdie kwesbaarhede gebeur wanneer 'n draad byvoorbeeld 'n lêer beskrywing benader wat 'n ander kwesbare draad toegang gee of wanneer 'n lêer beskrywing geërf word deur 'n kwesbare kind proses. Sommige funksies wat met hierdie funksionaliteit verband hou, is:
guarded_open_np
: Oop 'n FD met 'n wagter
guarded_close_np
: Sluit dit
change_fdguard_np
: Verander wagter vlae op 'n beskrywing (selfs om die wagter beskerming te verwyder)
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)