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 gezinmenize 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 geçersiz kılabilirsiniz, ancak:
Yolda bir üst dizin sahibi kullanıcıdır
Yolda bir üst 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 kimseye erişilemez. Bu nedenle, bu klasörden farklı birine kullanıcı tarafından okunabilir bir dosyayı taşıma izni veren bir zafiyet, 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 önce düşük ayrıcalıklı bir kullanıcı tarafından oluşturulmuş bir dosyaya veri yazıyorsa. Kullanıcı, sadece bir Sembolik veya Sert bağlantı aracılığıyla onu 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 EDITOR=exploit.py
ile /etc/sudoers.d
içindeki bir dosyayı 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 com.apple.acl.text
adlı xattr içinde saklanan ACL metin temsilinin, sıkıştırılmamış dosyada ACL olarak ayarlanacağını görebiliriz. Yani, bir uygulamayı ACL'nin diğer xattr'ların yazılmasını engellediği AppleDouble dosya formatında bir zip dosyasına sıkıştırdıysanız... 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 stuffBundle'lar, bundle 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 bir özel dmg paketi oluşturmanın yolu budur:
Genellikle macOS, diski com.apple.DiskArbitrarion.diskarbitrariond
Mach servisi ile bağlar (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 sudo periodic daily
ile sahte yapabilirsiniz.
Keyfi bir LaunchDaemon yazın, örneğin /Library/LaunchDaemons/xyz.hacktricks.privesc.plist
ile, keyfi bir betiği yürüten bir plist ile:
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 yararlıdır. Bu güvenlik açıkları, örneğin bir iş parçacığı bir dosya tanımına eriştiğinde 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 korumasını kaldırma dahil)
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)