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)
Bir dizindeki izinler:
okuma - dizin girişlerini listeleyebilirsiniz
yazma - dizindeki dosyaları silip/yazabilirsiniz ve boş klasörleri silebilirsiniz.
Ancak boş olmayan klasörleri silip/değiştiremezsiniz, yazma izinleriniz yoksa.
Bir klasörün adını değiştiremezsiniz, eğer ona sahip değilseniz.
çalıştırma - dizinde geçiş yapmanıza izin verilir - bu hakka sahip değilseniz, içindeki dosyalara veya alt dizinlere erişemezsiniz.
Root tarafından sahip olunan bir dosya/klasörü nasıl üzerine yazılır, ancak:
Yolda bir ana dizin sahibi kullanıcıdır
Yolda bir ana dizin sahibi kullanıcı grubu yazma erişimine sahiptir
Bir kullanıcı grubu dosyaya yazma erişimine sahiptir
Önceki kombinasyonlardan herhangi biriyle, bir saldırgan beklenen yola bir simetrik/sert bağlantı enjekte edebilir ve ayrıcalıklı bir yazma elde edebilir.
Sadece root'un R+X erişimine sahip olduğu bir dizide dosyalar varsa, bunlar başka hiç kimseye erişilebilir değildir. Bu nedenle, bir kullanıcının okuyabileceği bir dosyayı, bu kısıtlama nedeniyle okunamayan bir klasörden farklı birine taşıma izni veren bir güvenlik açığı, bu dosyaları okumak için kötüye kullanılabilir.
Eğer ayrıcalıklı bir işlem, düşük ayrıcalıklı bir kullanıcı tarafından kontrol edilebilecek veya daha düşük ayrıcalıklı bir kullanıcı tarafından önceden oluşturulmuş bir dosyaya veri yazıyorsa, kullanıcı sadece onu bir Sembolik veya Sert bağlantı aracılığıyla başka bir dosyaya işaret edebilir ve ayrıcalıklı işlem o dosyaya yazacaktır.
Bir saldırganın ayrıcalıkları artırmak için keyfi bir yazmayı nasıl kötüye kullanabileceğini kontrol edin.
.fileloc
uzantısına sahip dosyalar, diğer uygulamalara veya ikili dosyalara işaret edebilir, böylece açıldıklarında, çalıştırılacak olan uygulama/ikili dosya olacaktır.
Örnek:
Eğer bir işlemi yüksek ayrıcalıklarla bir dosya veya klasör açmaya zorlayabilirseniz, crontab
'i kullanarak /etc/sudoers.d
içindeki bir dosyayı EDITOR=exploit.py
ile açabilirsiniz, böylece exploit.py
/etc/sudoers
içindeki dosyaya FD alacak ve bunu kötüye kullanacaktır.
Örneğin: https://youtu.be/f1HA5QhLQ7Y?t=21098
Eğer bir dosya/klasör bu değişmez niteliğe sahipse, üzerine bir xattr koymak mümkün olmayacaktır.
Bir devfs montajı xattr'ı desteklemez, daha fazla bilgi için CVE-2023-32364
Bu ACL, dosyaya xattrs
eklenmesini engeller.
AppleDouble dosya formatı, bir dosyayı ACE'leri ile birlikte kopyalar.
kaynak kodda görülebilir ki, xattr içinde saklanan ACL metin temsili com.apple.acl.text
olarak adlandırılır ve bu, sıkıştırılmamış dosyada ACL olarak ayarlanacaktır. Yani, bir uygulamayı ACL ile birlikte AppleDouble dosya formatında bir zip dosyasına sıkıştırdıysanız ve bu ACL diğer xattr'ların yazılmasını engelliyorsa... karantina xattr'ı uygulamaya ayarlanmamıştı:
Daha fazla bilgi için orijinal raporu kontrol edin.
Bunu tekrarlamak için önce doğru acl dizesini almamız gerekiyor:
(Not edin ki bu işe yarasa bile sandbox, karantina xattr'ını önceden yazar)
Gerçekten gerekli değil ama yine de burada bırakıyorum:
macOS xattr-acls extra stuffPaketler, paket içindeki her bir dosyanın hash'ini içeren _CodeSignature/CodeResources
dosyasını içerir. CodeResources'ın hash'inin de çalıştırılabilir dosyaya gömülü olduğunu unutmayın, bu yüzden bununla da oynayamayız.
Ancak, imzasının kontrol edilmeyeceği bazı dosyalar vardır, bunlar plist'te omit anahtarına sahiptir, örneğin:
Bir kaynağın imzasını CLI'dan hesaplamak mümkündür:
Bir kullanıcı, mevcut bazı klasörlerin üzerine bile oluşturulmuş özel bir dmg'yi bağlayabilir. Özel içerikle özel bir dmg paketi oluşturmanın yolu budur:
Genellikle macOS, com.apple.DiskArbitrarion.diskarbitrariond
Mach servisi ile diskleri monte eder (bu servis /usr/libexec/diskarbitrationd
tarafından sağlanır). LaunchDaemons plist dosyasına -d
parametresi eklenip yeniden başlatıldığında, /var/log/diskarbitrationd.log
dosyasına günlükler kaydedilecektir.
Ancak, com.apple.driver.DiskImages
kext'i ile doğrudan iletişim kurmak için hdik
ve hdiutil
gibi araçlar kullanılabilir.
Eğer betiğiniz bir shell script olarak yorumlanabiliyorsa, her gün tetiklenecek olan /etc/periodic/daily/999.local
shell betiğini üzerine yazabilirsiniz.
Bu betiğin bir yürütmesini şu şekilde taklit edebilirsiniz: sudo periodic daily
Keyfi bir LaunchDaemon yazın, örneğin /Library/LaunchDaemons/xyz.hacktricks.privesc.plist
ve keyfi bir betik yürüten bir plist ile oluşturun:
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 paylaşılan bellek, POSIX uyumlu işletim sistemlerinde süreçlerin ortak bir bellek alanına erişmesine olanak tanır ve bu, diğer süreçler arası iletişim yöntemlerine kıyasla daha hızlı iletişim sağlar. Bu, shm_open()
ile bir paylaşılan bellek nesnesi oluşturmayı veya açmayı, ftruncate()
ile boyutunu ayarlamayı ve mmap()
kullanarak sürecin adres alanına haritalamayı içerir. Süreçler daha sonra bu bellek alanından doğrudan okuma ve yazma yapabilirler. Eşzamanlı erişimi yönetmek ve veri bozulmasını önlemek için genellikle mutexler veya semaforlar gibi senkronizasyon mekanizmaları kullanılır. Son olarak, süreçler paylaşılan belleği munmap()
ve close()
ile haritalamayı kaldırır ve kapatır ve isteğe bağlı olarak bellek nesnesini shm_unlink()
ile kaldırır. Bu sistem, birden fazla sürecin paylaşılan verilere hızlı bir şekilde erişmesi gereken ortamlarda verimli, hızlı IPC için özellikle etkilidir.
macOS korunan tanımlayıcılar, kullanıcı uygulamalarındaki dosya tanımlayıcı işlemlerinin güvenliğini ve güvenilirliğini artırmak için macOS'ta tanıtılan bir güvenlik özelliğidir. Bu korunan tanımlayıcılar, dosya tanımlayıcılarıyla belirli kısıtlamalar veya "korumalar" ilişkilendirme yolu sağlar ve bu kısıtlamalar çekirdek tarafından uygulanır.
Bu özellik, yetkisiz dosya erişimi veya yarış koşulları gibi belirli güvenlik açıklarının önlenmesi için özellikle faydalıdır. Bu güvenlik açıkları, örneğin bir iş parçacığı bir dosya tanımına erişirken başka bir savunmasız iş parçacığına erişim vermesi veya bir dosya tanımlayıcısının savunmasız bir çocuk süreç tarafından devralınması durumunda ortaya çıkar. Bu işlevsellikle ilgili bazı fonksiyonlar şunlardır:
guarded_open_np
: Bir koruma ile FD açar
guarded_close_np
: Kapatır
change_fdguard_np
: Bir tanımlayıcı üzerindeki koruma bayraklarını değiştirir (koruma kaldırma dahil)
AWS Hacking öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)