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 - unaweza kuhesabu entries za directory
write - unaweza kufuta/kandika files katika directory na unaweza kufuta folda tupu.
Lakini huwezi kufuta/kubadilisha folda zisizo tupu isipokuwa una ruhusa za kuandika juu yake.
Huwezi kubadilisha jina la folda isipokuwa unamiliki.
execute - ume ruhusiwa kupita katika directory - ikiwa huna haki hii, huwezi kufikia files zozote ndani yake, au katika folda ndogo zozote.
Jinsi ya kufuta file/folda inayomilikiwa na root, lakini:
Mmiliki mmoja wa directory katika njia ni mtumiaji
Mmiliki mmoja wa directory katika njia ni kikundi cha watumiaji chenye ruhusa za kuandika
Kikundi cha watumiaji kina ruhusa za kuandika kwa file
Kwa yoyote ya mchanganyiko wa hapo juu, mshambuliaji anaweza kuingiza sym/hard link kwenye njia inayotarajiwa ili kupata kuandika kwa mamlaka.
Ikiwa kuna files katika directory ambapo ni root pekee mwenye R+X access, hizo hazipatikani kwa mtu mwingine yeyote. Hivyo, udhaifu unaoruhusu kuhamasisha file inayoweza kusomwa na mtumiaji, ambayo haiwezi kusomwa kwa sababu ya kizuizi hicho, kutoka folda hii kwenda nyingine, inaweza kutumika vibaya kusoma files hizi.
Mfano katika: https://theevilbit.github.io/posts/exploiting_directory_permissions_on_macos/#nix-directory-permissions
Ikiwa mchakato wenye mamlaka unandika data katika file ambayo inaweza kudhibitiwa na mtumiaji mwenye mamlaka ya chini, au ambayo inaweza kuundwa awali na mtumiaji mwenye mamlaka ya chini. Mtumiaji anaweza tu kuielekeza kwenye file nyingine kupitia Symbolic au Hard link, na mchakato wenye mamlaka utaandika kwenye file hiyo.
Angalia katika sehemu nyingine ambapo mshambuliaji anaweza kutumia kuandika kwa mamlaka ili kupandisha mamlaka.
Files zenye .fileloc
extension zinaweza kuelekeza kwenye programu nyingine au binaries hivyo wakati zinapofunguliwa, programu/binary itakuwa ndiyo itakayotekelezwa.
Mfano:
Ikiwa unaweza kufanya mchakato ufungue faili au folda kwa haki za juu, unaweza kutumia crontab
kufungua faili katika /etc/sudoers.d
na EDITOR=exploit.py
, hivyo exploit.py
itapata FD kwa faili ndani ya /etc/sudoers
na kuifanya.
Kwa mfano: https://youtu.be/f1HA5QhLQ7Y?t=21098
Ikiwa faili/folda ina sifa hii isiyobadilika haitakuwa na uwezo wa kuweka xattr juu yake.
A devfs mount haiungi xattr, maelezo zaidi katika CVE-2023-32364
ACL hii inazuia kuongeza xattrs
kwenye faili
AppleDouble muundo wa faili unakopi faili pamoja na ACE zake.
Katika kanuni ya chanzo inawezekana kuona kwamba uwakilishi wa maandiko wa ACL ulihifadhiwa ndani ya xattr inayoitwa com.apple.acl.text
utawekwa kama ACL katika faili lililoshinikizwa. Hivyo, ikiwa umeweka programu katika faili la zip kwa muundo wa faili wa AppleDouble ukiwa na ACL inayozuia xattrs nyingine kuandikwa ndani yake... xattr ya karantini haikuwekwa katika programu:
Angalia ripoti ya asili kwa maelezo zaidi.
Ili kuiga hii tunahitaji kwanza kupata mfuatano sahihi wa acl:
(Note that even if this works the sandbox write the quarantine xattr before)
Sio kweli inahitajika lakini naiacha hapa tu kwa sababu:
Bundles zina faili _CodeSignature/CodeResources
ambayo ina hash ya kila faili katika bundle. Kumbuka kwamba hash ya CodeResources pia imejumuishwa katika executable, hivyo hatuwezi kuingilia hapo pia.
Hata hivyo, kuna baadhi ya faili ambazo saini yake haitakaguliwa, hizi zina ufunguo omit katika plist, kama:
Ni rahisi kuhesabu saini ya rasilimali kutoka kwa cli kwa:
Mtumiaji anaweza kuunganisha dmg maalum iliyoundwa hata juu ya folda fulani zilizopo. Hivi ndivyo unavyoweza kuunda kifurushi cha dmg maalum chenye maudhui maalum:
Kawaida macOS inachomeka diski kwa kuzungumza na huduma ya Mach com.apple.DiskArbitrarion.diskarbitrariond
(iliyotolewa na /usr/libexec/diskarbitrationd
). Ikiwa utaongeza paramu -d
kwenye faili la LaunchDaemons plist na kuanzisha upya, itahifadhi kumbukumbu katika /var/log/diskarbitrationd.log
.
Hata hivyo, inawezekana kutumia zana kama hdik
na hdiutil
kuwasiliana moja kwa moja na kext com.apple.driver.DiskImages
.
Ikiwa skripti yako inaweza kutafsiriwa kama shell script unaweza kuandika upya /etc/periodic/daily/999.local
shell script ambayo itazinduliwa kila siku.
Unaweza kuigiza utekelezaji wa skripti hii kwa: sudo periodic daily
Andika LaunchDaemon ya huru kama /Library/LaunchDaemons/xyz.hacktricks.privesc.plist
yenye plist inayotekeleza skripti ya huru kama:
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.
Hii itazalisha faili ambalo linamilikiwa na root ambalo linaweza kuandikwa na mimi (code from here). Hii inaweza pia kufanya kazi kama privesc:
POSIX shared memory inaruhusu michakato katika mifumo ya uendeshaji inayokubaliana na POSIX kufikia eneo la kawaida la kumbukumbu, ikirahisisha mawasiliano ya haraka ikilinganishwa na mbinu nyingine za mawasiliano kati ya michakato. Inahusisha kuunda au kufungua kitu cha kumbukumbu ya pamoja kwa kutumia shm_open()
, kuweka ukubwa wake kwa kutumia ftruncate()
, na kuunganisha katika nafasi ya anwani ya mchakato kwa kutumia mmap()
. Michakato inaweza kisha kusoma moja kwa moja kutoka na kuandika kwenye eneo hili la kumbukumbu. Ili kudhibiti ufikiaji wa pamoja na kuzuia uharibifu wa data, mitambo ya usawazishaji kama vile mutexes au semaphores mara nyingi hutumiwa. Hatimaye, michakato huondoa na kufunga kumbukumbu ya pamoja kwa kutumia munmap()
na close()
, na kwa hiari kuondoa kitu cha kumbukumbu kwa kutumia shm_unlink()
. Mfumo huu ni wa ufanisi hasa kwa IPC yenye ufanisi na haraka katika mazingira ambapo michakato mingi inahitaji kufikia data ya pamoja kwa haraka.
macOSCguarded descriptors ni kipengele cha usalama kilichozinduliwa katika macOS ili kuboresha usalama na uaminifu wa file descriptor operations katika programu za mtumiaji. Hizi guarded descriptors zinatoa njia ya kuunganisha vizuizi maalum au "guards" na file descriptors, ambavyo vinatekelezwa na kernel.
Kipengele hiki ni muhimu hasa katika kuzuia aina fulani za udhaifu wa usalama kama vile unauthorized file access au race conditions. Udhaifu huu hutokea wakati kwa mfano thread inapata file description ikimpa thread nyingine yenye udhaifu ufikiaji juu yake au wakati file descriptor inachukuliwa na mchakato wa mtoto mwenye udhaifu. Baadhi ya kazi zinazohusiana na kazi hii ni:
guarded_open_np
: Fungua FD na guard
guarded_close_np
: Funga
change_fdguard_np
: Badilisha bendera za guard kwenye descriptor (hata kuondoa ulinzi wa guard)
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)